A template node (and all it's children) can be conditionally included or
excluded using the if, elseif and else directives.
Unlike the display directive which simply hides an element, the
if directive completely removes it.
if, elseif and else DirectivesThe if directive can be used to conditional include a template
node.
The value of the if directive is the condition to be tested
and if it evaluates to a truthy value, the node and all its child
nodes are included.
{ 
    type: "div",
    text: "I'm here!",
    if: c => c.showIt,
},
The else directive can be used to show alternate content when
if directive's condition is false.
The value of an else directive is ignored but should be a truthy
value. (eg: else: true)
{ 
    if: c => c.showIt,
    type: "div",
    text: "I'm here!",
},
{
    else: true,
    type: "div",
    text: "So am I",
},
You can also include one or more elseif directives:
{ 
    if: c => c.selection == "apples",
    type: "div",
    text: "Apples are Red",
},
{
    elseif: c => c.selection == "pears",
    type: "div",
    text: "Pears are Green",
},
{
    else: true,
    type: "div",
    text: "Bananas are yellow",
},
Nodes with if, elseif and else directives must all follow each
other consecutively in the containing child node array.
Although not commonly used, an if directive can be hard coded as true or false.
This can be handy for including or excluding content based on conditions like build environment.
"Before →",
{ 
    if: false,
    type: "div",
    text: "Nothing to See Here",
},
"← After",
When a template's DOM tree is updated any conditional directives are
re-evaluated by calling their condition callbacks.  This is done in
order from the first if directive through any elseif directives
and to the last else directive (if present).
The first directive whose condition evaluates to true becomes the
"active branch".
If the active branch is the same, the existing DOM tree of that branch is maintained.
If the active branch is different:
In either case (same or different active branch) the eventual active branch is then updated so any dynamic callback properties in that branch are also reflected in the DOM.
If any of the branches contain bind directives those element references
will be set to null when the branch is removed and restored to the
element reference when the branch is re-created.
Condition directives can be used in conjunction with CodeOnly CSS transitions to produce animation effects when the active branch changes.
See Transitions for more on this.