[limb-svn] r6939 - in 3.x/trunk/limb/macro: src/tags/list tests/cases/tags/list
svn at limb-project.com
svn at limb-project.com
Thu Apr 17 11:14:44 MSD 2008
Author: serega
Date: 2008-04-17 11:14:44 +0400 (Thu, 17 Apr 2008)
New Revision: 6939
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6939
Modified:
3.x/trunk/limb/macro/src/tags/list/list.tag.php
3.x/trunk/limb/macro/src/tags/list/list_glue.tag.php
3.x/trunk/limb/macro/src/tags/list/lmbMacroListGlueHelper.class.php
3.x/trunk/limb/macro/tests/cases/tags/list/lmbMacroListTagTest.class.php
Log:
-- fixed a bug with {{list:glue}} tags. Now it properly works for cases of using {{list:glue}} tags for nested lists
Modified: 3.x/trunk/limb/macro/src/tags/list/list.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/list/list.tag.php 2008-04-17 04:54:41 UTC (rev 6938)
+++ 3.x/trunk/limb/macro/src/tags/list/list.tag.php 2008-04-17 07:14:44 UTC (rev 6939)
@@ -44,6 +44,8 @@
$this->_prepareSourceVar($code);
+ $this->_initializeGlueTags($code);
+
$code->writePHP('foreach(' . $this->source_var . ' as ' . $as . ') {');
if($user_counter = $this->get('counter'))
@@ -91,6 +93,16 @@
$this->_renderEmptyTag($code);
}
+
+ protected function _initializeGlueTags($code)
+ {
+ if(!$list_item_tag = $this->findChildByClass('lmbMacroListItemTag'))
+ $this->raise('{{list:item}} tag is not found for {{list}} tag but required');
+
+ $glue_tags = $list_item_tag->findImmediateChildrenByClass('lmbMacroListGlueTag');
+ foreach($glue_tags as $glue_tag)
+ $glue_tag->generateInitCode($code);
+ }
function getCounterVar()
{
Modified: 3.x/trunk/limb/macro/src/tags/list/list_glue.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/list/list_glue.tag.php 2008-04-17 04:54:41 UTC (rev 6938)
+++ 3.x/trunk/limb/macro/src/tags/list/list_glue.tag.php 2008-04-17 07:14:44 UTC (rev 6939)
@@ -28,15 +28,17 @@
if($this->has('every'))
$this->set('step', $this->get('every'));
}
-
- protected function _generateContent($code)
+
+ // called by parent {{list}} tag (lmbMacroListTag)
+ function generateInitCode($code)
{
$step_var = $this->getStepVar($code);
$helper_var = $this->getHelperVar($code);
-
+
$code->writePHP("if(!isset({$helper_var})){\n");
$code->registerInclude('limb/macro/src/tags/list/lmbMacroListGlueHelper.class.php');
$code->writePHP($helper_var . " = new lmbMacroListGlueHelper();\n");
+ $code->writePHP("}\n");
if($step = $this->get('step'))
$code->writePHP($step_var . " = {$step};\n");
@@ -47,9 +49,13 @@
$list = $this->findParentByClass('lmbMacroListTag');
$source_var = $list->getSourceVar();
$code->writePhp($helper_var . "->setTotalItems(count($source_var));\n");
+ }
- $code->writePHP("}\n");
-
+ protected function _generateContent($code)
+ {
+ $step_var = $this->getStepVar($code);
+ $helper_var = $this->getHelperVar($code);
+
$code->writePhp($helper_var . "->next();\n");
$code->writePhp("if ( " . $helper_var . "->shouldDisplay()){\n");
@@ -61,8 +67,11 @@
{
foreach($separators as $separator)
{
- $code->writePhp('if (' . $separator->getStepVar($code) . ' < ' . $step_var . ') ');
- $code->writePhp($separator->getHelperVar($code) . "->skipNext();\n");
+ if($separator->getNodeId() != $this->getNodeId())
+ {
+ $code->writePhp('if (' . $separator->getStepVar($code) . ' < ' . $step_var . ') ');
+ $code->writePhp($separator->getHelperVar($code) . "->skipNext();\n");
+ }
}
}
Modified: 3.x/trunk/limb/macro/src/tags/list/lmbMacroListGlueHelper.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/list/lmbMacroListGlueHelper.class.php 2008-04-17 04:54:41 UTC (rev 6938)
+++ 3.x/trunk/limb/macro/src/tags/list/lmbMacroListGlueHelper.class.php 2008-04-17 07:14:44 UTC (rev 6939)
@@ -47,6 +47,9 @@
function setTotalItems($total_items)
{
$this->total = $total_items;
+ $this->total_counter = 0;
+ $this->step_counter = 0;
+ $this->skip_next = false;
}
function shouldDisplay()
Modified: 3.x/trunk/limb/macro/tests/cases/tags/list/lmbMacroListTagTest.class.php
===================================================================
--- 3.x/trunk/limb/macro/tests/cases/tags/list/lmbMacroListTagTest.class.php 2008-04-17 04:54:41 UTC (rev 6938)
+++ 3.x/trunk/limb/macro/tests/cases/tags/list/lmbMacroListTagTest.class.php 2008-04-17 07:14:44 UTC (rev 6939)
@@ -165,6 +165,29 @@
$this->assertEqual($macro->render(), 'List#John:Pavel|Peter:Harry|Roman:Sergey!');
}
+ function testTwoGluesInsideNestingLists()
+ {
+ $list = '{{list using="$#list1" as="$item1"}}'.
+ '{{list:item}}'.
+ '{{list using="$#list2" as="$item2"}}'.
+ '{{list:item}}'.
+ '<?=$item1?>' . '<?=$item2?>' .
+ '{{list:glue}} - {{/list:glue}}'.
+ '{{/list:item}}'.
+ '{{/list}}' .
+ '{{list:glue}}:{{/list:glue}}'.
+ '{{/list:item}}'.
+ '{{/list}}';
+
+ $list_tpl = $this->_createTemplate($list, 'list.html');
+
+ $macro = $this->_createMacro($list_tpl);
+ $macro->set('list1', array('X', 'Y'));
+ $macro->set('list2', array('A', 'B'));
+
+ $this->assertEqual($macro->render(), 'XA - XB:YA - YB');
+ }
+
function testListFillTagWithRatio()
{
$list = '{{list using="$#list" as="$item"}}List#'.
More information about the limb-svn
mailing list