-
- # Run the template. Pass a filename, or a string, unless you've already
- # specified a template with load()
- function run($templ = false) {
- if($templ !== false) {
- if(strlen($templ) < 150 && file_exists($templ)) {
- $this->filename = $templ;
- unset($this->template);
- } else {
- $this->template = $templ;
+}
+
+# 'evenodd' sections are given an 'evenodd' attribute whose value
+# alternates between 'even' and 'odd'.
+function tem_auto_evenodd(&$values) {
+ $even = true;
+ if($values) foreach($values as &$value) {
+ $value['evenodd'] = $even ? 'even' : 'odd';
+ $even = !$even;
+ }
+ return $values;
+}
+
+# 'once' sections are shown exactly once if the value is set (and not at all
+# otherwise.) This is useful when an array value would otherwise cause the
+# section to be displayed multiple times.
+function tem_auto_once(&$value) {
+ if($value === null) return null;
+ return true;
+}
+
+function tem_auto_once_if(&$value) {
+ if($value) return true;
+ return null;
+}
+
+# 'once' sections are shown exactly once if php evaluates the value to false
+# (and not at all otherwise.) This is useful when an array value would
+# otherwise cause the section to be displayed multiple times.
+function tem_auto_once_else(&$value) {
+ if($value) return null;
+ return true;;
+}
+
+
+
+
+
+# Backward Compatibility
+# ----------------------
+
+function is_shown($piece) {
+ return isset($piece['args'][0]) && $piece['args'][0] == 'hide';
+}
+
+function is_shown_sub_template($piece) {
+ return is_sub_template($piece) and is_shown($piece);
+}
+
+# Old-style templates don't show unless explicitly requested.
+function tem_auto_hide(&$value, $key, $context) {
+ unset($context['data'][$key]);
+ return false;
+}
+
+# The old API is being used with the named sub-template,
+# so hide it and insert a value slot for its expansion(s).
+function &tem_is_old_sub($name, &$template) {
+ foreach($template['pieces'] as $key => &$piece) {
+ if(is_sub_template($piece)) {
+ if($piece['name'] == $name) {
+ if(!is_shown($piece)) {
+ # hide template unless explicitly show()n.
+ $piece['args'] = array('hide');
+ # insert a value slot with the same name (for the expansion).
+ $var = array('name' => $name, 'args' => array());
+ array_splice($template['pieces'], $key, 0, array($var));
+ }
+ return $piece;