[limb-svn] r6512 - in 3.x/trunk/limb/macro: src src/tags src/tags/pager tests/cases/tags

svn at limb-project.com svn at limb-project.com
Fri Nov 9 19:01:20 MSK 2007


Author: serega
Date: 2007-11-09 19:01:20 +0300 (Fri, 09 Nov 2007)
New Revision: 6512
URL: http://fisheye.limb-project.com/changelog/limb/?cs=6512

Added:
   3.x/trunk/limb/macro/src/lmbMacroPassiveTag.class.php
   3.x/trunk/limb/macro/src/tags/pager/
   3.x/trunk/limb/macro/src/tags/pager/current.tag.php
   3.x/trunk/limb/macro/src/tags/pager/elipses.tag.php
   3.x/trunk/limb/macro/src/tags/pager/first.tag.php
   3.x/trunk/limb/macro/src/tags/pager/first_disabled.tag.php
   3.x/trunk/limb/macro/src/tags/pager/last.tag.php
   3.x/trunk/limb/macro/src/tags/pager/last_disabled.tag.php
   3.x/trunk/limb/macro/src/tags/pager/list.tag.php
   3.x/trunk/limb/macro/src/tags/pager/lmbMacroPagerHelper.class.php
   3.x/trunk/limb/macro/src/tags/pager/next.tag.php
   3.x/trunk/limb/macro/src/tags/pager/next_disabled.tag.php
   3.x/trunk/limb/macro/src/tags/pager/number.tag.php
   3.x/trunk/limb/macro/src/tags/pager/pager.tag.php
   3.x/trunk/limb/macro/src/tags/pager/prev.tag.php
   3.x/trunk/limb/macro/src/tags/pager/prev_disabled.tag.php
   3.x/trunk/limb/macro/src/tags/pager/section.tag.php
   3.x/trunk/limb/macro/src/tags/pager/separator.tag.php
   3.x/trunk/limb/macro/tests/cases/tags/lmbMacroPagerTagTest.class.php
Modified:
   3.x/trunk/limb/macro/src/lmbMacroCompiler.class.php
   3.x/trunk/limb/macro/src/lmbMacroTag.class.php
Log:
-- initial version of pager tags. Most of the pager functionality were ported from WACT but there are some minor misleading with built-in variables like total_pages instead of TotalPages (see tests for more details).
-- lmbMacroTag :: getEscapedId() added
-- minor fixes in lmbMacroTag :: getEscaped()

Modified: 3.x/trunk/limb/macro/src/lmbMacroCompiler.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/lmbMacroCompiler.class.php	2007-11-09 14:33:54 UTC (rev 6511)
+++ 3.x/trunk/limb/macro/src/lmbMacroCompiler.class.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -12,6 +12,9 @@
 lmb_require('limb/macro/src/lmbMacroParser.class.php');
 lmb_require('limb/macro/src/lmbMacroCodeWriter.class.php');
 
+lmb_require('limb/macro/src/lmbMacroTag.class.php');
+lmb_require('limb/macro/src/lmbMacroPassiveTag.class.php');
+
 /**
  * class lmbMacroCompiler.
  *

Added: 3.x/trunk/limb/macro/src/lmbMacroPassiveTag.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/lmbMacroPassiveTag.class.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/lmbMacroPassiveTag.class.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+lmb_require('limb/macro/src/lmbMacroTag.class.php');
+
+/**
+ * class lmbMacroPassiveTag.
+ *
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPassiveTag extends lmbMacroTag 
+{
+
+  function generate($code_writer)
+  {
+  }
+  
+  function generateNow($code_writer)
+  {
+    parent :: generate($code_writer);
+  }
+}
+

Modified: 3.x/trunk/limb/macro/src/lmbMacroTag.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/lmbMacroTag.class.php	2007-11-09 14:33:54 UTC (rev 6511)
+++ 3.x/trunk/limb/macro/src/lmbMacroTag.class.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -59,6 +59,12 @@
 
     return $this->id;
   }
+  
+  function getEscapedId()
+  {
+    $id = $this->getId();
+    return "'" .  $id . "'";
+  }
 
   function get($name)
   {
@@ -70,13 +76,14 @@
 
   function getEscaped($name)
   {
-    if($value = $this->get($name))
-    {
-      if($this->isDynamic($name))
-        return $value;
-      else
-        return "'" .  $value . "'";
-    }
+    if(!$this->has($name))
+      return;
+      
+    $value = $this->get($name);
+    if($this->isDynamic($name))
+      return $value;
+    else
+      return "'" .  $value . "'";
   }
 
   /**

Added: 3.x/trunk/limb/macro/src/tags/pager/current.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/current.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/current.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,32 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:current
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerCurrentTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();  
+
+    $code->writePhp("if ({$pager}->isDisplayedPage()) {\n");
+
+    $code->writePhp("\$href = {$pager}->getDisplayedPageUri();\n");
+    $code->writePhp("\$number = {$pager}->getPage();\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/elipses.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/elipses.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/elipses.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,22 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * Compile time component for elispses in a pager.
+ * Elipses are sed to mark omitted page numbers outside of the
+ * current range of the pager e.g. ...6 7 8... (the ... are the elipses)
+ * @tag pager:elipses
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerElipsesTag extends lmbMacroPassiveTag
+{
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/first.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/first.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/first.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:first
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerFirstTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+    
+    $code->writePhp("if (!{$pager}->isFirst()) {\n");
+    $code->writePhp("\$href = {$pager}->getFirstPageUri();\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/first_disabled.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/first_disabled.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/first_disabled.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager:first:disabled
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerFirstDisabledTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();  
+    
+    $code->writePhp("if ({$pager}->isFirst()) {\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/last.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/last.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/last.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,32 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:LAST
+ * @restrict_self_nesting
+ * @parent_tag_class lmbMacroPagerTag
+ * @package macro
+ * @version $Id: last.tag.php 6386 2007-10-05 14:22:21Z serega $
+ */
+class lmbMacroPagerLastTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar(); 
+    
+    $code->writePhp("if (!{$pager}->isLast()) {\n");
+    $code->writePhp("\$href = {$pager}->getLastPageUri();\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/last_disabled.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/last_disabled.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/last_disabled.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager:last:disabled
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerLastDisabledTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();  
+    
+    $code->writePhp("if ({$pager}->isLast()) {\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/list.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/list.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/list.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,117 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager:LIST
+ * @restrict_self_nesting
+ * @parent_tag_class lmbMacroPagerTag
+ * @package macro
+ * @version $Id: list.tag.php 6243 2007-08-29 11:53:10Z pachanga $
+ */
+class lmbMacroPagerListTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $this->pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+
+    $this->elipses_count_var = $code->generateVar();
+    $code->writePhp("{$this->elipses_count_var} = 0;\n");
+
+    $this->show_separator_var = $code->generateVar();
+    $code->writePhp("{$this->show_separator_var} = false;\n");
+    
+    $parent = $this->findParentByClass('lmbMacroPagerTag');
+    $code->writePhp("while ({$this->pager}->isValid()) {\n");
+
+    if($this->findChildByClass('lmbMacroPagerElipsesTag'))
+      $this->_generateForElipsesMode($code);
+    else
+      $this->_generateForSectionsMode($code);
+      
+    $code->writePhp("}\n");
+  }
+
+  protected function _generateForSectionsMode($code)
+  {
+    $code->writePhp("if ({$this->pager}->isDisplayedSection()) {\n");
+    
+      $this->_generateNumber($code);
+      $code->writePhp("{$this->pager}->nextPage();\n");
+      $this->_generateSeparator($code);
+      
+    $code->writePhp("}\n");
+    
+    $code->writePhp("else {\n");
+    
+      $this->_generateSection($code);
+      $code->writePhp("{$this->pager}->nextSection();\n");
+      
+    $code->writePhp("}\n");
+  }
+
+  protected function _generateForElipsesMode($code)
+  {
+    $elipses_tag = $this->findChildByClass('lmbMacroPagerElipsesTag');
+
+    if ($separator_tag = $this->findChildByClass('lmbMacroPagerSeparatorTag'))
+    {
+      $code->writePhp("if ({$this->show_separator_var} && {$this->pager}->shouldDisplayPage()){\n");
+        $separator_tag->generateNow($code);
+      $code->writePhp("}\n");
+      $code->writePhp("{$this->show_separator_var} = true;\n");
+    }
+
+    $code->writePhp("if ({$this->pager}->shouldDisplayPage()){\n");
+      $this->_generateNumber($code);
+      $code->writePhp("{$this->elipses_count_var} = 0;\n");
+    $code->writePhp("}\n");
+    
+    $code->writePhp("else {\n");
+      $code->writePhp("if ({$this->elipses_count_var} == 0) {\n");
+        $elipses_tag->generateNow($code);
+      $code->writePhp("}\n");
+      $code->writePhp("{$this->elipses_count_var} += 1;\n");
+      $code->writePhp("{$this->show_separator_var} = false;\n");
+    $code->writePhp("}\n");
+
+    $code->writePhp("{$this->pager}->nextPage();\n");
+  }
+
+  protected function _generateNumber($code)
+  {
+    $code->writePhp("if (!({$this->pager}->isFirst() && {$this->pager}->isLast())) {\n");
+
+    if ($number_child = $this->findChildByClass('lmbMacroPagerNumberTag'))
+      $number_child->generate($code);
+
+    if($current_child = $this->findChildByClass('lmbMacroPagerCurrentTag'))
+      $current_child->generate($code);
+
+    $code->writePhp("}\n");
+  }
+
+  protected function _generateSeparator($code)
+  {
+    if ($separator_tag = $this->findChildByClass('lmbMacroPagerSeparatorTag'))
+    {
+      $code->writePhp("if ({$this->pager}->isValid()){\n");
+      $separator_tag->generateNow($code);
+      $code->writePhp("}\n");
+    }
+  }
+
+  protected function _generateSection($code)
+  {
+    $section_child = $this->findChildByClass('lmbMacroPagerSectionTag');
+    if($section_child)
+      $section_child->generate($code);
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/lmbMacroPagerHelper.class.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/lmbMacroPagerHelper.class.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/lmbMacroPagerHelper.class.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,341 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * class lmbMacroPagerHelper.
+ *
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerHelper
+{
+  protected $id;
+  
+  protected $total_items = 0;
+  protected $total_page_count = 0;
+  protected $page_counter = 0;
+  protected $displayed_page = 0;
+  protected $items_per_page = 20;
+  protected $base_url = null;
+
+  protected $display_sections = true;
+  protected $pages_per_section = 10;
+
+  protected $display_elipses = false;
+  protected $pages_in_middle = 5;
+  protected $pages_in_sides = 3;
+  
+  function __construct($id)
+  {
+    $this->id = $id;
+  }
+
+  function prepare()
+  {
+    $this->total_page_count = ceil($this->total_items / $this->items_per_page);
+
+    if ($this->total_page_count < 1)
+      $this->total_page_count = 1;
+
+    $this->_initBaseUrl();
+
+    $this->page_counter = 1;
+  }
+
+  function useSections($flag = true)
+  {
+    $this->display_sections = $flag;
+  }
+
+  function isSectionsMode()
+  {
+    return $this->display_sections;
+  }
+
+  function useElipses($flag = true)
+  {
+    $this->useSections(!$flag);
+    $this->display_elipses = $flag;
+  }
+
+  function isElipsesMode()
+  {
+    return $this->display_elipses;
+  }
+
+  function setPagesPerSection($pages)
+  {
+    $this->pages_per_section = $pages;
+  }
+
+  function setPagesInMiddle($pages)
+  {
+    $this->pages_in_middle = $pages;
+  }
+
+  function setPagesInSides($pages)
+  {
+    $this->pages_in_sides = $pages;
+  }
+
+  function setTotalItems($items)
+  {
+    $this->total_items = $items;
+  }
+
+  function getPagesPerSection()
+  {
+    return $this->pages_per_section;
+  }
+
+  function getTotalItems()
+  {
+    return $this->total_items;
+  }
+
+  function hasMoreThanOnePage()
+  {
+    return $this->total_items > $this->items_per_page;
+  }
+
+  function setItemsPerPage($items)
+  {
+    $this->items_per_page = $items;
+  }
+
+  //implementing WACT pager interface
+  function getStartingItem()
+  {
+    $number = $this->getDisplayedPageBeginItem();
+    return ($number == 0) ? 0 : $number - 1;
+  }
+
+  function getDisplayedPageBeginItem()
+  {
+    if($this->total_items < 1)
+      return 0;
+
+    return $this->items_per_page * ($this->displayed_page - 1) + 1;
+  }
+
+  function getDisplayedPageEndItem()
+  {
+    $res = $this->items_per_page * $this->displayed_page;
+
+    if($res > $this->total_items)
+      return $this->total_items;
+    else
+      return $res;
+  }
+
+  function getItemsPerPage()
+  {
+    return $this->items_per_page;
+  }
+
+  function getTotalPages()
+  {
+    return $this->total_page_count;
+  }
+
+  function isFirst()
+  {
+    return ($this->displayed_page == 1);
+  }
+
+  function hasPrev()
+  {
+    return ($this->displayed_page > 1);
+  }
+
+  function hasNext()
+  {
+    return ($this->displayed_page < $this->total_page_count);
+  }
+
+  function isLast()
+  {
+    return ($this->displayed_page == $this->total_page_count);
+  }
+
+  protected function _initBaseUrl()
+  {
+    $this->base_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
+    $pos = strpos($this->base_url, '?');
+    if (is_integer($pos))
+        $this->base_url = substr($this->base_url, 0, $pos);
+
+    $this->displayed_page = @$_GET[$this->id];
+    if (empty($this->displayed_page)) {
+        $this->displayed_page = 1;
+    }
+
+    if (empty($this->displayed_page))
+      $this->displayed_page = 1;
+
+    if($this->displayed_page > $this->total_page_count)
+      $this->displayed_page = $this->total_page_count;
+  }
+
+  function nextPage()
+  {
+    $this->page_counter++;
+
+    return $this->isValid();
+  }
+
+  function isValid()
+  {
+    return ($this->page_counter <= $this->total_page_count);
+  }
+
+  function nextSection()
+  {
+    $this->page_counter += $this->pages_per_section;
+
+    return $this->isValid();
+  }
+
+  function getPage()
+  {
+    return $this->page_counter;
+  }
+
+  function isDisplayedPage()
+  {
+    return $this->page_counter == $this->displayed_page;
+  }
+
+  function shouldDisplayPage()
+  {
+    if($this->display_sections)
+      return $this->isDisplayedSection();
+
+    $half_windows_size = ($this->pages_in_middle - 1) / 2;
+    return (
+        $this->page_counter <= $this->pages_in_sides ||
+        $this->page_counter > $this->total_page_count - $this->pages_in_sides ||
+        ($this->page_counter >= $this->displayed_page - $half_windows_size &&
+        $this->page_counter <= $this->displayed_page + $half_windows_size) ||
+        ($this->page_counter == $this->pages_in_sides + 1 &&
+        $this->page_counter == $this->displayed_page - $half_windows_size - 1) ||
+        ($this->page_counter == $this->total_page_count - $this->pages_in_sides &&
+        $this->page_counter == $this->displayed_page + $half_windows_size + 1));
+  }
+
+  function isDisplayedSection()
+  {
+    if($this->getSection() == $this->getDisplayedSection())
+      return true;
+    else
+      return false;
+  }
+
+  function getSection()
+  {
+    return ceil($this->page_counter / $this->pages_per_section);
+  }
+
+  function getDisplayedSection()
+  {
+    return ceil($this->displayed_page / $this->pages_per_section);
+  }
+
+  function getSectionUri()
+  {
+    $section = $this->getSection();
+
+    if ($section > $this->getDisplayedSection())
+      return $this->getPageUri(($section - 1) * $this->pages_per_section + 1);
+    else
+      return $this->getPageUri($section  * $this->pages_per_section);
+  }
+
+  function getSectionBeginPage()
+  {
+    $result = ($this->getSection() - 1) * $this->pages_per_section + 1;
+
+    if($result < 0)
+      return 0;
+    else
+      return $result;
+  }
+
+  function getSectionEndPage()
+  {
+    $result = $this->getSection() * $this->pages_per_section;
+
+    if ($result >= $this->total_page_count)
+      $result = $this->total_page_count;
+
+    return $result;
+  }
+
+  function getDisplayedPageUri()
+  {
+    return $this->getPageUri($this->displayed_page);
+  }
+
+  function getDisplayedPage()
+  {
+    return $this->displayed_page;
+  }
+
+  function getPageUri($page = null)
+  {
+    if ($page == null)
+      $page = $this->page_counter;
+
+    $params = $_GET;
+
+    if ($page <= 1)
+      unset($params[$this->id]);
+    else
+      $params[$this->id] = $page;
+
+    $flat_params = array();
+    $this->toFlatArray($params, $flat_params);
+
+    $query_items = array();
+    foreach ($flat_params as $key => $value)
+      $query_items[] = $key . '=' . urlencode($value);
+
+    $query = implode('&', $query_items);
+
+    if (empty($query))
+      return $this->base_url;
+    else
+      return $this->base_url . '?' . $query;
+  }
+
+  function toFlatArray($array, &$result, $prefix='')
+  {
+    foreach($array as $key => $value)
+    {
+      $string_key = ($prefix) ? '[' . $key . ']' : $key;
+
+      if(is_array($value))
+        $this->toFlatArray($value, $result, $prefix . $string_key);
+      else
+        $result[$prefix . $string_key] = $value;
+    }
+  }
+
+  function getFirstPageUri()
+  {
+    return $this->getPageUri(1);
+  }
+
+  function getLastPageUri()
+  {
+    return $this->getPageUri($this->total_page_count);
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/next.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/next.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/next.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:next
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerNextTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+    
+    $code->writePhp("if ({$pager}->hasNext()) {\n");
+    $code->writePhp("\$href = {$pager}->getPageUri({$pager}->getDisplayedPage() + 1 );\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/next_disabled.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/next_disabled.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/next_disabled.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,28 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager:next:disabled
+ * @version $Id$
+ */
+class lmbMacroPagerNextDisabledTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+    
+    $code->writePhp("if (!{$pager}->hasNext()) {\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/number.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/number.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/number.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,32 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:number
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerNumberTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+    
+    $code->writePhp("if (!{$pager}->isDisplayedPage()) {\n");
+
+    $code->writePhp("\$href = {$pager}->getPageUri();\n");
+    $code->writePhp("\$number = {$pager}->getPage();\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/pager.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/pager.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/pager.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,85 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerTag extends lmbMacroTag
+{
+  protected $runtimeComponentName = 'lmbMacroPagerComponent';
+  
+  function generate($code)
+  {
+    $code->registerInclude('limb/macro/src/tags/pager/lmbMacroPagerHelper.class.php');
+    
+    $pager = $this->getPagerVar();
+    
+    $this->_generatePagerHelperWithInitialParams($code, $pager);
+    
+    $this->_generatePagerVariables($code, $pager);
+    
+    parent :: generate($code);
+  }
+  
+  protected function _generatePagerHelperWithInitialParams($code, $pager)
+  {
+    $id = $this->getEscapedId();
+    $code->writeToInit("{$pager} = new lmbMacroPagerHelper({$id});\n");
+
+    if ($total_items = $this->getEscaped('total_items'))
+      $code->writeToInit("{$pager}->setTotalItems({$total_items});\n");
+    
+    if ($items = $this->getEscaped('items'))
+      $code->writeToInit("{$pager}->setItemsPerPage({$items});\n");
+
+    if($this->findChildByClass('lmbMacroPagerElipsesTag'))
+    {
+      $code->writeToInit("{$pager}->useElipses();\n");
+
+      if ($this->has('pages_in_middle'))
+      {
+        $pages_in_middle = $this->getEscaped('pages_in_middle');
+        $code->writeToInit("{$pager}->setPagesInMiddle({$pages_in_middle});\n");
+      }
+
+      if ($this->has('pages_in_sides'))
+      {
+        $pages_in_sides = $this->getEscaped('pages_in_sides');
+        $code->writeToInit("{$pager}->setPagesInSides((int){$pages_in_sides});\n");
+      }
+    }
+    else
+    {
+      $code->writeToInit("{$pager}->useSections();\n");
+      
+      if ($pages_per_section = $this->getEscaped('pages_per_section'))
+        $code->writeToInit("{$pager}->setPagesPerSection({$pages_per_section});\n");
+    }
+    
+    $code->writeToInit("{$pager}->prepare();\n");
+  }
+  
+  protected function _generatePagerVariables($code, $pager)
+  {
+     $code->writePhp("\$total_items = {$pager}->getTotalItems();\n");
+     $code->writePhp("\$total_pages = {$pager}->getTotalPages();\n");
+     $code->writePhp("\$items_per_page = {$pager}->getItemsPerPage();\n");
+     $code->writePhp("\$begin_item_number = {$pager}->getDisplayedPageBeginItem();\n");
+     $code->writePhp("\$end_item_number = {$pager}->getDisplayedPageEndItem();\n");
+  }
+
+  function getPagerVar()
+  {
+    return '$this->pager_' . $this->getId(); 
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/prev.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/prev.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/prev.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,30 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:prev
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerPrevTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+    
+    $code->writePhp("if ({$pager}->hasPrev()) {\n");
+    $code->writePhp("\$href = {$pager}->getPageUri({$pager}->getDisplayedPage() - 1 );\n");
+    
+    parent :: generate($code);
+    
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/prev_disabled.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/prev_disabled.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/prev_disabled.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,29 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager:prev:disabled
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerPrevTagDisabled extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+
+    $code->writePhp("if (!{$pager}->hasPrev()) {\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/section.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/section.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/section.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,33 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+/**
+ * @tag pager:section
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerSectionTag extends lmbMacroTag
+{
+  function generate($code)
+  {
+    $pager = $this->findParentByClass('lmbMacroPagerTag')->getPagerVar();
+    
+    $code->writePhp("if (!{$pager}->isDisplayedSection()) {\n");
+
+    $code->writePhp("\$href = {$pager}->getSectionUri();\n");
+    $code->writePhp("\$section_begin_page = {$pager}->getSectionBeginPage();\n");
+    $code->writePhp("\$section_end_page = {$pager}->getSectionEndPage();\n");
+
+    parent :: generate($code);
+
+    $code->writePhp("}\n");
+  }
+}
+
+

Added: 3.x/trunk/limb/macro/src/tags/pager/separator.tag.php
===================================================================
--- 3.x/trunk/limb/macro/src/tags/pager/separator.tag.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/src/tags/pager/separator.tag.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,19 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com 
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
+ */
+
+/**
+ * @tag pager:separator
+ * @package macro
+ * @version $Id$
+ */
+class lmbMacroPagerSeparatorTag extends lmbMacroPassiveTag
+{
+}
+
+

Added: 3.x/trunk/limb/macro/tests/cases/tags/lmbMacroPagerTagTest.class.php
===================================================================
--- 3.x/trunk/limb/macro/tests/cases/tags/lmbMacroPagerTagTest.class.php	                        (rev 0)
+++ 3.x/trunk/limb/macro/tests/cases/tags/lmbMacroPagerTagTest.class.php	2007-11-09 16:01:20 UTC (rev 6512)
@@ -0,0 +1,338 @@
+<?php
+/*
+ * Limb PHP Framework
+ *
+ * @link http://limb-project.com
+ * @copyright  Copyright &copy; 2004-2007 BIT(http://bit-creative.com)
+ * @license    LGPL http://www.gnu.org/copyleft/lesser.html
+ */
+
+class lmbMacroPagerTagTest extends lmbBaseMacroTest
+{
+  protected $old_get;
+  protected $old_server;
+
+  function setUp()
+  {
+    parent :: setUp();
+
+    $this->old_get = $_GET;
+    $this->old_server = $_SERVER;
+
+    $_SERVER['REQUEST_URI'] = 'test.com';
+    $_GET = array();
+  }
+
+  function tearDown()
+  {
+    $_GET = $this->old_get;
+    $_SERVER = $this->old_server;
+
+    parent :: tearDown();
+  }
+
+  function testPager()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first}}F-{$href}|{{/pager:first}}' .
+                '{{pager:prev}}P-{$href}|{{/pager:prev}}' .
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$href}|{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$href}|{$number}|{{/pager:number}}' .
+                '{{pager:separator}}**{{/pager:separator}}' .
+                '{{/pager:list}}'.
+                '{{pager:next}}X-{$href}|{{/pager:next}}' .
+                '{{pager:last}}L-{$href}|{{/pager:last}}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');
+    $page->set('items_count', 40);
+
+    $_GET['test_pager'] = 2;
+
+    $expected = 'F-test.com|' .
+                'P-test.com|'.
+                'N-test.com|1|**'.
+                'C-test.com?test_pager=2|2|**'.
+                'N-test.com?test_pager=3|3|**N-test.com?test_pager=4|4|'.
+                'X-test.com?test_pager=3|'.
+                'L-test.com?test_pager=4|';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testPagerProperties()
+  {
+    $template = '{{pager id="test_pager" items="5" total_items="$#items_count"}}'.
+                '{$total_items}|{$total_pages}|{$items_per_page}|' .
+                'from:{$begin_item_number}|to:{$end_item_number}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 40);
+
+    $_GET['test_pager'] = 2;
+
+    $expected = '40|8|5|from:6|to:10';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testSinglePageOnlyNotRenderAnything()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first}}F-{$href}|{{/pager:first}}' .
+                '{{pager:prev}}P-{$href}|{{/pager:prev}}' .
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$href}|{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$href}|{$number}|{{/pager:number}}' .
+                '{{/pager:list}}'.
+                '{{pager:next}}X-{$href}|{{/pager:next}}' .
+                '{{pager:last}}L-{$href}|{{/pager:last}}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 5);
+
+    $expected = '';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testFistPage()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first}}F-{$href}|{{/pager:first}}' .
+                '{{pager:prev}}P-{$href}|{{/pager:prev}}' .
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$href}|{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$href}|{$number}|{{/pager:number}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 40);
+
+    $expected = 'C-test.com|1|'.
+                'N-test.com?test_pager=2|2|N-test.com?test_pager=3|3|N-test.com?test_pager=4|4|';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testLastPage()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first}}F-{$href}|{{/pager:first}}' .
+                '{{pager:prev}}P-{$href}|{{/pager:prev}}' .
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$href}|{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$href}|{$number}|{{/pager:number}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 30);
+
+    $_GET['test_pager'] = 3;
+
+    $expected = 'F-test.com|' .
+                'P-test.com?test_pager=2|'.
+                'N-test.com|1|'.
+                'N-test.com?test_pager=2|2|'.
+                'C-test.com?test_pager=3|3|';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testElipsesBothSides()
+  {
+    $template = '{{pager id="test_pager" items="5" total_items="$#items_count" pages_in_middle="3" pages_in_sides="3"}}'.
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$number}|{{/pager:number}}' .
+                '{{pager:elipses}}...{{/pager:elipses}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 65);
+
+    $_GET['test_pager'] = 7;
+
+    $expected = 'N-1|N-2|N-3|...N-6|C-7|N-8|...N-11|N-12|N-13|';
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testElipsesBothSidesAndSeparator()
+  {
+    $template = '{{pager id="test_pager" items="5" pages_in_middle="3" total_items="$#items_count" pages_in_sides="3"}}'.
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$number}{{/pager:current}}' .
+                '{{pager:number}}N-{$number}{{/pager:number}}' .
+                '{{pager:elipses}}...{{/pager:elipses}}' .
+                '{{pager:separator}}|{{/pager:separator}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 65);
+
+    $_GET['test_pager'] = 7;
+
+    $expected = 'N-1|N-2|N-3...N-6|C-7|N-8...N-11|N-12|N-13';
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testElipsesBothSidesNoPagesInSides()
+  {
+    $template = '{{pager id="test_pager" items="5" pages_in_middle="3" total_items="$#items_count" pages_in_sides="0"}}'.
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$number}|{{/pager:number}}' .
+                '{{pager:elipses}}...{{/pager:elipses}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 65);
+
+    $_GET['test_pager'] = 7;
+
+    $expected = '...N-6|C-7|N-8|...';
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testElipsesLeftOnly()
+  {
+    $template = '{{pager id="test_pager" items="5" pages_in_middle="3" total_items="$#items_count" pages_in_sides="3"}}'.
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$number}|{{/pager:number}}' .
+                '{{pager:elipses}}...{{/pager:elipses}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 55);
+
+    $_GET['test_pager'] = 7;
+
+    $expected = 'N-1|N-2|N-3|...N-6|C-7|N-8|N-9|N-10|N-11|';
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testNoElipsesForSingleItemGap()
+  {
+    $template = '{{pager id="test_pager" items="5" pages_in_middle="3" total_items="$#items_count" pages_in_sides="3"}}'.
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$number}|{{/pager:number}}' .
+                '{{pager:elipses}}...{{/pager:elipses}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 35);
+
+    $_GET['test_pager'] = 6;
+
+    $expected = 'N-1|N-2|N-3|N-4|N-5|C-6|N-7|';
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testSections()
+  {
+    $template = '{{pager id="test_pager" items="10" pages_per_section="2" total_items="$#items_count"}}'.
+                '{{pager:list}}'.
+                '{{pager:current}}C-{$href}|{$number}|{{/pager:current}}' .
+                '{{pager:number}}N-{$href}|{$number}|{{/pager:number}}' .
+                '{{pager:section}}S-{$href}|{$section_begin_page}|{$section_end_page}|{{/pager:section}}' .
+                '{{/pager:list}}'.
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 60);
+
+    $_GET['test_pager'] = 3;
+
+    $expected = 'S-test.com?test_pager=2|1|2|' .
+                'C-test.com?test_pager=3|3|'.
+                'N-test.com?test_pager=4|4|'.
+                'S-test.com?test_pager=5|5|6|';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testDisabledTagsShown()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first:disabled}}F-|{{/pager:first:disabled}}' .
+                '{{pager:prev:disabled}}P-|{{/pager:prev:disabled}}' .
+                '{{pager:next:disabled}}|-X{{/pager:next:disabled}}' .
+                '{{pager:last:disabled}}|-L{{/pager:last:disabled}}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 1);
+
+    $expected = 'F-|P-||-X|-L';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testDisabledTagsHidden()
+  {
+    $template = '{{pager id="test_pager" items="1" total_items="$#items_count"}}'.
+                '{{pager:first:disabled}}F-|{{/pager:first:disabled}}' .
+                '{{pager:prev:disabled}}P-|{{/pager:prev:disabled}}' .
+                '{{pager:next:disabled}}|-X{{/pager:next:disabled}}' .
+                '{{pager:last:disabled}}|-L{{/pager:last:disabled}}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 3);
+
+    $_GET['test_pager'] = 2;
+
+    $expected = '';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testShowFirstAndPrevTagsDisabledOnly()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first:disabled}}F-|{{/pager:first:disabled}}' .
+                '{{pager:prev:disabled}}P-|{{/pager:prev:disabled}}' .
+                '{{pager:next:disabled}}|-X{{/pager:next:disabled}}' .
+                '{{pager:last:disabled}}|-L{{/pager:last:disabled}}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 20);
+
+    $expected = 'F-|P-|';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+
+  function testShowNextAndLastTagsDisabledOnly()
+  {
+    $template = '{{pager id="test_pager" items="10" total_items="$#items_count"}}'.
+                '{{pager:first:disabled}}F-|{{/pager:first:disabled}}' .
+                '{{pager:prev:disabled}}P-|{{/pager:prev:disabled}}' .
+                '{{pager:next:disabled}}|-X{{/pager:next:disabled}}' .
+                '{{pager:last:disabled}}|-L{{/pager:last:disabled}}' .
+                '{{/pager}}';
+
+    $page = $this->_createMacroTemplate($template, 'tpl.html');                 
+    $page->set('items_count', 20);
+
+    $_GET['test_pager'] = 2;
+
+    $expected = '|-X|-L';
+
+    $this->assertEqual($page->render(), $expected);
+  }
+}
+



More information about the limb-svn mailing list