[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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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 © 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