From: Josh Grams Date: Sun, 23 Aug 2009 23:52:44 +0000 (-0400) Subject: * template.php (tem->merge): only append expansions for show()n templates. X-Git-Url: https://jasonwoof.com/gitweb/?a=commitdiff_plain;h=317dd86de6d8576196cf865109d621219fa2f187;hp=85a25a3cf3091c2a6f53f7218fd2ca20a83206ad;p=wfpl.git * template.php (tem->merge): only append expansions for show()n templates. --- diff --git a/template.php b/template.php index 5ac7f80..6aba82b 100644 --- a/template.php +++ b/template.php @@ -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); }