From 78e61c9d940febdbde7c687b5050e9d739e4fa93 Mon Sep 17 00:00:00 2001
From: Qiang Xue <qiang.xue@gmail.com>
Date: Sun, 21 Jul 2013 08:43:22 -0400
Subject: [PATCH] Removed ListPager and refactored LinkPager and LinkSorter.

---
 framework/yii/widgets/LinkPager.php  | 33 ++++++++++++++++++---------------
 framework/yii/widgets/LinkSorter.php | 27 ++++++++++++++++++++++++---
 framework/yii/widgets/ListPager.php  | 94 ----------------------------------------------------------------------------------------------
 3 files changed, 42 insertions(+), 112 deletions(-)
 delete mode 100644 framework/yii/widgets/ListPager.php

diff --git a/framework/yii/widgets/LinkPager.php b/framework/yii/widgets/LinkPager.php
index 62d99f6..f3af72f 100644
--- a/framework/yii/widgets/LinkPager.php
+++ b/framework/yii/widgets/LinkPager.php
@@ -87,9 +87,9 @@ class LinkPager extends Widget
 	public $lastPageLabel;
 	/**
 	 * @var string the template used to render the content within the pager container.
-	 * The token "{buttons}" will be replaced with the actual page buttons.
+	 * The token "{pages}" will be replaced with the actual page buttons.
 	 */
-	public $template = '{buttons}';
+	public $template;
 
 
 	/**
@@ -100,6 +100,9 @@ class LinkPager extends Widget
 		if ($this->pagination === null) {
 			throw new InvalidConfigException('The "pagination" property must be set.');
 		}
+		if ($this->template === null) {
+			$this->template = '<label>' . Yii::t('yii', 'Go to page:') . '</label> {pages}';
+		}
 	}
 
 	/**
@@ -109,16 +112,16 @@ class LinkPager extends Widget
 	public function run()
 	{
 		$buttons = strtr($this->template, array(
-			'{buttons}' => Html::tag('ul', implode("\n", $this->createPageButtons())),
+			'{pages}' => $this->renderPageButtons(),
 		));
 		echo Html::tag('div', $buttons, $this->options);
 	}
 
 	/**
-	 * Creates the page buttons.
-	 * @return array a list of page buttons (in HTML code).
+	 * Renders the page buttons.
+	 * @return string the rendering result
 	 */
-	protected function createPageButtons()
+	protected function renderPageButtons()
 	{
 		$buttons = array();
 
@@ -127,7 +130,7 @@ class LinkPager extends Widget
 
 		// first page
 		if ($this->firstPageLabel !== null) {
-			$buttons[] = $this->createPageButton($this->firstPageLabel, 0, $this->firstPageCssClass, $currentPage <= 0, false);
+			$buttons[] = $this->renderPageButton($this->firstPageLabel, 0, $this->firstPageCssClass, $currentPage <= 0, false);
 		}
 
 		// prev page
@@ -135,13 +138,13 @@ class LinkPager extends Widget
 			if (($page = $currentPage - 1) < 0) {
 				$page = 0;
 			}
-			$buttons[] = $this->createPageButton($this->prevPageLabel, $page, $this->prevPageCssClass, $currentPage <= 0, false);
+			$buttons[] = $this->renderPageButton($this->prevPageLabel, $page, $this->prevPageCssClass, $currentPage <= 0, false);
 		}
 
 		// internal pages
 		list($beginPage, $endPage) = $this->getPageRange();
 		for ($i = $beginPage; $i <= $endPage; ++$i) {
-			$buttons[] = $this->createPageButton($i + 1, $i, null, false, $i == $currentPage);
+			$buttons[] = $this->renderPageButton($i + 1, $i, null, false, $i == $currentPage);
 		}
 
 		// next page
@@ -149,28 +152,28 @@ class LinkPager extends Widget
 			if (($page = $currentPage + 1) >= $pageCount - 1) {
 				$page = $pageCount - 1;
 			}
-			$buttons[] = $this->createPageButton($this->nextPageLabel, $page, $this->nextPageCssClass, $currentPage >= $pageCount - 1, false);
+			$buttons[] = $this->renderPageButton($this->nextPageLabel, $page, $this->nextPageCssClass, $currentPage >= $pageCount - 1, false);
 		}
 
 		// last page
 		if ($this->lastPageLabel !== null) {
-			$buttons[] = $this->createPageButton($this->lastPageLabel, $pageCount - 1, $this->lastPageCssClass, $currentPage >= $pageCount - 1, false);
+			$buttons[] = $this->renderPageButton($this->lastPageLabel, $pageCount - 1, $this->lastPageCssClass, $currentPage >= $pageCount - 1, false);
 		}
 
-		return $buttons;
+		return Html::tag('ul', implode("\n", $buttons));
 	}
 
 	/**
-	 * Creates a page button.
+	 * Renders a page button.
 	 * You may override this method to customize the generation of page buttons.
 	 * @param string $label the text label for the button
 	 * @param integer $page the page number
 	 * @param string $class the CSS class for the page button.
 	 * @param boolean $disabled whether this page button is disabled
 	 * @param boolean $active whether this page button is active
-	 * @return string the generated button
+	 * @return string the rendering result
 	 */
-	protected function createPageButton($label, $page, $class, $disabled, $active)
+	protected function renderPageButton($label, $page, $class, $disabled, $active)
 	{
 		if ($active) {
 			$class .= ' ' . $this->activePageCssClass;
diff --git a/framework/yii/widgets/LinkSorter.php b/framework/yii/widgets/LinkSorter.php
index 4921af5..d98d509 100644
--- a/framework/yii/widgets/LinkSorter.php
+++ b/framework/yii/widgets/LinkSorter.php
@@ -7,6 +7,7 @@
 
 namespace yii\widgets;
 
+use Yii;
 use yii\base\InvalidConfigException;
 use yii\base\Widget;
 use yii\data\Sort;
@@ -28,9 +29,13 @@ class LinkSorter extends Widget
 	public $sort;
 	/**
 	 * @var array HTML attributes for the sorter container tag.
-	 * Please refer to [[Html::ul()]] for supported special options.
 	 */
-	public $options = array();
+	public $options = array('class' => 'sorter');
+	/**
+	 * @var string the template used to render the content within the sorter container.
+	 * The token "{links}" will be replaced with the actual sort links.
+	 */
+	public $template;
 
 	/**
 	 * Initializes the sorter.
@@ -40,6 +45,10 @@ class LinkSorter extends Widget
 		if ($this->sort === null) {
 			throw new InvalidConfigException('The "sort" property must be set.');
 		}
+
+		if ($this->template === null) {
+			$this->template = '<label>' . Yii::t('yii', 'Sort by:') . '</label> {links}';
+		}
 	}
 
 	/**
@@ -48,10 +57,22 @@ class LinkSorter extends Widget
 	 */
 	public function run()
 	{
+		$links = strtr($this->template, array(
+			'{links}' => $this->renderSortLinks(),
+		));
+		echo Html::tag('div', $links, $this->options);
+	}
+
+	/**
+	 * Renders the sort links.
+	 * @return string the rendering result
+	 */
+	protected function renderSortLinks()
+	{
 		$links = array();
 		foreach (array_keys($this->sort->attributes) as $name) {
 			$links[] = $this->sort->link($name);
 		}
-		echo Html::ul($links, array_merge($this->options, array('encode' => false)));
+		return Html::ul($links, array('encode' => false));
 	}
 }
diff --git a/framework/yii/widgets/ListPager.php b/framework/yii/widgets/ListPager.php
deleted file mode 100644
index 30371d3..0000000
--- a/framework/yii/widgets/ListPager.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * @link http://www.yiiframework.com/
- * @copyright Copyright (c) 2008 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
-
-namespace yii\widgets;
-
-use yii\base\InvalidConfigException;
-use yii\helpers\Html;
-use yii\base\Widget;
-use yii\data\Pagination;
-
-/**
- * ListPager displays a drop-down list that contains options leading to different pages.
- *
- * ListPager works with a [[Pagination]] object which specifies the totally number
- * of pages and the current page number.
- *
- * Note that ListPager requires JavaScript to work. You should consider using [[LinkPager]]
- * if you want to make your page work without JavaScript.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @since 2.0
- */
-class ListPager extends Widget
-{
-	/**
-	 * @var Pagination the pagination object that this pager is associated with.
-	 * You must set this property in order to make ListPager work.
-	 */
-	public $pagination;
-	/**
-	 * @var array HTML attributes for the drop-down list tag. The following options are specially handled:
-	 *
-	 * - prompt: string, a prompt text to be displayed as the first option.
-	 *
-	 * The rest of the options will be rendered as the attributes of the resulting tag. The values will
-	 * be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered.
-	 */
-	public $options = array();
-	/**
-	 * @var string the template used to render the label for each list option.
-	 * The token "{page}" will be replaced with the actual page number (1-based).
-	 */
-	public $template = '{page}';
-
-
-	/**
-	 * Initializes the pager.
-	 */
-	public function init()
-	{
-		if ($this->pagination === null) {
-			throw new InvalidConfigException('The "pagination" property must be set.');
-		}
-	}
-
-	/**
-	 * Executes the widget.
-	 * This overrides the parent implementation by displaying the generated page buttons.
-	 */
-	public function run()
-	{
-		$pageCount = $this->pagination->getPageCount();
-		$currentPage = $this->pagination->getPage();
-
-		$pages = array();
-		for ($i = 0; $i < $pageCount; ++$i) {
-			$pages[$this->pagination->createUrl($i)] = $this->generatePageText($i);
-		}
-		$selection = $this->pagination->createUrl($currentPage);
-
-		if (!isset($this->options['onchange'])) {
-			$this->options['onchange'] = "if (this.value != '') { window.location = this.value; };";
-		}
-
-		echo Html::dropDownList(null, $selection, $pages, $this->options);
-	}
-
-	/**
-	 * Generates the label of the list option for the specified page number.
-	 * You may override this method to customize the option display.
-	 * @param integer $page zero-based page number
-	 * @return string the list option for the page number
-	 */
-	protected function generatePageText($page)
-	{
-		return strtr($this->template, array(
-			'{page}' => $page + 1,
-		));
-	}
-}
--
libgit2 0.27.1