# snippets for smarty3

extends html
extends javascript
extends css

# https://www.smarty.net/docs/en/language.function.if.tpl
snippet if "{if cond} ... {/if}"
	{if ${1}}
		${0:${VISUAL}}
	{/if}

snippet ifn "{if !cond} ... {/if}"
	{if ${1}}
		${0:${VISUAL}}
	{/if}

snippet ife "{if cond} ... {else} ... {/if}"
	{if ${1}}
		${0:${VISUAL}}
	{else}
		${2}
	{/if}

snippet eif "{elseif cond} ... {/if}"
	{elseif ${1}}
		${0:${VISUAL}}
	{/if}

snippet el "{else} ... {/if}"
	{else}
		${1}
	{/if}

# https://www.smarty.net/docs/en/language.function.for.tpl
snippet for "The {for} tag is used to create simple loops."
	{for $${1:var}=${2:start} to ${3:end}${4: step ${5}}${6: max=${7}}}
		${0:${VISUAL}}
	{/for}

snippet forelse "The {for}{forelse} tag is used to create simple loops."
	{for $${1:var}=${2:start} to ${3:end}${4: step ${5}}${6: max=${7}}}
		${0:${VISUAL}}
	{forelse}
		${8}
	{/for}

# https://www.smarty.net/docs/en/language.function.foreach.tpl
snippet foreach "{foreach} is used for looping over arrays of data."
	{foreach $${1:array_variable} as $${2:var_or_key}${3: => $${4:itemvar}}}
		${0:${VISUAL}}
	{/foreach}

snippet foreach2 "[Smarty2] {foreach} is used for looping over arrays of data."
	{foreach from=$${1:collection} item='${2}'${3: key='${4}'}${5: name='${6}'}}
		${0:${VISUAL}}
	{/foreach}

snippet foreachelse "{foreach} is used for looping over arrays of data."
	{foreach $${1:array_variable} as $${2:var_or_key}${3: => $${4:itemvar}}}
		${0:${VISUAL}}
	{foreachelse}
		${5}
	{/foreach}

snippet wh "{while} loops in Smarty have much the same flexibility as PHP while statements, with a few added features for the template engine. Every {while} must be paired with a matching {/while}. All PHP conditionals and functions are recognized, such as ||, or, &&, and, is_array(), etc."
	{while ${1}}
		${0:${VISUAL}}
	{/while}



# https://www.smarty.net/docs/en/language.function.append.tpl
#snippet append implemented in UltiSnips format

# https://www.smarty.net/docs/en/language.function.assign.tpl
#snippet assign implemented in UltiSnips format

# https://www.smarty.net/docs/en/language.function.block.tpl
snippet block "{block} is used to define a named area of template source for template inheritance."
	{block name='${1}'}
		${0:${VISUAL}}
	{/block}

# https://www.smarty.net/docs/en/language.function.call.tpl
snippet call "{call} is used to call a template function defined by the {function} tag just like a plugin function."
	{call name=${1}${2: assign=${3}}${4: variables}}

# https://www.smarty.net/docs/en/language.function.capture.tpl
snippet capture "{capture} is used to collect the output of the template between the tags into a variable instead of displaying it. Any content between {capture name='foo'} and {/capture} is collected into the variable specified in the name attribute. "
	{capture name='${1}'${2: assign='${3}' }${4: append='${5:array_variable}'}}
		${0:${VISUAL}}
	{/capture}

# https://www.smarty.net/docs/en/language.function.config.load.tpl
#snippet config_load implemented in UltiSnips format

# https://www.smarty.net/docs/en/language.function.extends.tpl
snippet extends "{extends} tags are used in child templates in template inheritance for extending parent templates."
	{extends file='${1}'}

# https://www.smarty.net/docs/en/language.function.function.tpl
snippet function "{function} is used to create functions within a template and call them just like a plugin function. Instead of writing a plugin that generates presentational content, keeping it in the template is often a more manageable choice. It also simplifies data traversal, such as deeply nested menus."
	{function name='${1}' ${2:variables}}
		${0:${VISUAL}}
	{/function}

# https://www.smarty.net/docs/en/language.function.include.tpl
#snippet include implemented in UltiSnips format

# https://www.smarty.net/docs/en/language.function.literal.tpl
snippet literal "{literal} tags allow a block of data to be taken literally. This is typically used around Javascript or stylesheet blocks where {curly braces} would interfere with the template delimiter syntax"
	{literal}
		${0:${VISUAL}}
	{/literal}

# https://www.smarty.net/docs/en/language.function.nocache.tpl
snippet nocache "{nocache} is used to disable caching of a template section. Every {nocache} must be paired with a matching {/nocache}."
	{nocache}
		${0:${VISUAL}}
	{/nocache}

# https://www.smarty.net/docs/en/language.function.section.tpl
snippet section "A {section} is for looping over sequentially indexed arrays of data, unlike {foreach} which is used to loop over a single associative array. Every {section} tag must be paired with a closing {/section} tag."
	{section name='${1}'${2: loop='${3}'}${4: start=${5}}${6: step=${7}}${8: max=${9}}${10: show=${11}}}
		${0:${VISUAL}}
	{/section}

# https://www.smarty.net/docs/en/language.function.setfilter.tpl
snippet setfilter "The {setfilter}...{/setfilter} block tag allows the definition of template instance's variable filters."
	{setfilter ${1:filters}}
		${0:${VISUAL}}
	{/setfilter}

# https://www.smarty.net/docs/en/language.function.strip.tpl
snippet strip "Anything within {strip}{/strip} tags are stripped of the extra spaces or carriage returns at the beginnings and ends of the lines before they are displayed. This way you can keep your templates readable, and not worry about extra white space causing problems."
	{strip}
		${0:${VISUAL}}
	{/strip}
