JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
* template.php (tem->merge): only append expansions for show()n templates.
authorJosh Grams <josh@qualdan.com>
Sun, 23 Aug 2009 23:52:44 +0000 (19:52 -0400)
committerJosh Grams <josh@qualdan.com>
Sun, 23 Aug 2009 23:52:44 +0000 (19:52 -0400)
template.php

index 5ac7f80..6aba82b 100644 (file)
@@ -234,12 +234,16 @@ function tem_encoded_data($tag, $context)
 }
 
 
+function is_sub_template($piece) {
+       return is_array($piece) and $piece['pieces'];
+}
 
 # Return a hash containing the top-level sub-templates of tem.
-function top_sub_templates($tem) {
+function top_sub_templates($tem, $is_sub = 'is_sub_template') {
+       function_exists($is_sub) or die("no such function '$is_sub'.");
        $subs = array();
        foreach($tem['pieces'] as $piece) {
-               if(is_array($piece) and $piece['pieces']) {
+               if($is_sub($piece)) {
                        $subs[$piece['name']] = $piece;
                }
        }
@@ -312,6 +316,14 @@ function tem_auto_evenodd(&$values) {
 # Backward Compatibility
 # ----------------------
 
+function is_shown($piece) {
+       return $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]);
@@ -322,10 +334,12 @@ function tem_auto_hide(&$value, $key, $context) {
 # 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_array($piece) and $piece['pieces']) {
+               if(is_sub_template($piece)) {
                        if($piece['name'] == $name) {
-                               if($piece['args'][0] != 'hide') {  # if we haven't already
+                               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));
                                }
@@ -403,7 +417,8 @@ class tem {
        # supporting both new and old semantics.
        function merge($tem) {
                # append expansions to $this->data (old style)
-               $subs = $tem->top_subs();
+
+               $subs = $tem->top_subs('is_shown_sub_template');
                if($subs) foreach($subs as $name => $val) {
                        $this->append($name, $val);
                        unset($tem->data[$name]);  # so array_merge() won't overwrite things
@@ -414,13 +429,13 @@ class tem {
                $this->template = merge_templates($this->template, $tem->template);
        }
 
-       function top_sub_names() {
-               return array_keys(top_sub_templates($this->template));
+       function top_sub_names($is_sub = 'is_sub_template') {
+               return array_keys(top_sub_templates($this->template, $is_sub));
        }
 
-       function top_subs() {
+       function top_subs($is_sub = 'is_sub_template') {
                $ret = array();
-               $names = $this->top_sub_names();
+               $names = $this->top_sub_names($is_sub);
                foreach($names as $name) {
                        $ret[$name] = $this->get($name);
                }