[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