| overview: | |
| Partial tags are used to expand an external template into the current |
| template. |
| |
| The tag's content MUST be a non-whitespace character sequence NOT containing |
| the current closing delimiter. |
| |
| This tag's content names the partial to inject. Set Delimiter tags MUST NOT |
| affect the parsing of a partial. The partial MUST be rendered against the |
| context stack local to the tag. If the named partial cannot be found, the |
| empty string SHOULD be used instead, as in interpolations. |
| |
| Partial tags SHOULD be treated as standalone when appropriate. If this tag |
| is used standalone, any whitespace preceding the tag should treated as |
| indentation, and prepended to each line of the partial before rendering. |
| tests: |
| - name: Basic Behavior |
| desc: The greater-than operator should expand to the named partial. |
| data: { } |
| template: '"{{>text}}"' |
| partials: { text: 'from partial' } |
| expected: '"from partial"' |
| |
| - name: Failed Lookup |
| desc: The empty string should be used when the named partial is not found. |
| data: { } |
| template: '"{{>text}}"' |
| partials: { } |
| expected: '""' |
| |
| - name: Context |
| desc: The greater-than operator should operate within the current context. |
| data: { text: 'content' } |
| template: '"{{>partial}}"' |
| partials: { partial: '*{{text}}*' } |
| expected: '"*content*"' |
| |
| - name: Recursion |
| desc: The greater-than operator should properly recurse. |
| data: { content: "X", nodes: [ { content: "Y", nodes: [] } ] } |
| template: '{{>node}}' |
| partials: { node: '{{content}}<{{#nodes}}{{>node}}{{/nodes}}>' } |
| expected: 'X<Y<>>' |
| |
| # Whitespace Sensitivity |
| |
| - name: Surrounding Whitespace |
| desc: The greater-than operator should not alter surrounding whitespace. |
| data: { } |
| template: '| {{>partial}} |' |
| partials: { partial: "\t|\t" } |
| expected: "| \t|\t |" |
| |
| - name: Inline Indentation |
| desc: Whitespace should be left untouched. |
| data: { data: '|' } |
| template: " {{data}} {{> partial}}\n" |
| partials: { partial: ">\n>" } |
| expected: " | >\n>\n" |
| |
| - name: Standalone Line Endings |
| desc: '"\r\n" should be considered a newline for standalone tags.' |
| data: { } |
| template: "|\r\n{{>partial}}\r\n|" |
| partials: { partial: ">" } |
| expected: "|\r\n>|" |
| |
| - name: Standalone Without Previous Line |
| desc: Standalone tags should not require a newline to precede them. |
| data: { } |
| template: " {{>partial}}\n>" |
| partials: { partial: ">\n>"} |
| expected: " >\n >>" |
| |
| - name: Standalone Without Newline |
| desc: Standalone tags should not require a newline to follow them. |
| data: { } |
| template: ">\n {{>partial}}" |
| partials: { partial: ">\n>" } |
| expected: ">\n >\n >" |
| |
| - name: Standalone Indentation |
| desc: Each line of the partial should be indented before rendering. |
| data: { content: "<\n->" } |
| template: | |
| \ |
| {{>partial}} |
| / |
| partials: |
| partial: | |
| | |
| {{{content}}} |
| | |
| expected: | |
| \ |
| | |
| < |
| -> |
| | |
| / |
| |
| # Whitespace Insensitivity |
| |
| - name: Padding Whitespace |
| desc: Superfluous in-tag whitespace should be ignored. |
| data: { boolean: true } |
| template: "|{{> partial }}|" |
| partials: { partial: "[]" } |
| expected: '|[]|' |