r93243 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r93242‎ | r93243 | r93244 >
Date:20:28, 26 July 2011
Author:jeroendedauw
Status:deferred
Tags:
Comment:
applied patch by Van de Bugger
Modified paths:
  • /trunk/extensions/SubPageList/RELEASE-NOTES (modified) (history)
  • /trunk/extensions/SubPageList/SubPageList.class.php (modified) (history)
  • /trunk/extensions/SubPageList/SubPageList.i18n.php (modified) (history)
  • /trunk/extensions/SubPageList/SubPageList.php (modified) (history)

Diff [purge]

Index: trunk/extensions/SubPageList/RELEASE-NOTES
@@ -7,6 +7,9 @@
88 === Version 0.3.1 ===
99 2011-07-xx
1010
 11+* Added parameters for better output control: element, class, intro,
 12+ outro, default, separator, template, links.
 13+* Added ability to list pages in a namespace.
1114 * Fixed compatibility with MediaWiki 1.18.
1215
1316 === Version 0.3 ===
Index: trunk/extensions/SubPageList/SubPageList.i18n.php
@@ -23,14 +23,22 @@
2424 'spl-noparentpage' => 'Page "$1" does not exist.',
2525 'spl-nopages' => 'Namespace "$1" does not have pages.',
2626
27 - 'spl-subpages-par-sort' => 'The direction to sort in.',
28 - 'spl-subpages-par-sortby' => 'What to sort the subpages by.',
29 - 'spl-subpages-par-format' => 'The subpage list can be displayed in several formats. Numbered lists (ol), bulleted lists (ul) and comma-separated lists (list).',
30 - 'spl-subpages-par-page' => 'The page to show the subpages for. Defaults to the current page.',
 27+ 'spl-subpages-par-sort' => 'The direction to sort in. Allowed values: "asc" and "desc".',
 28+ 'spl-subpages-par-sortby' => 'What to sort the subpages by. Allowed values: "title" or "lastedit".',
 29+ 'spl-subpages-par-format' => 'The subpage list can be displayed in several formats. Allowed values: "ol" — ordered (numbered) list, "ul" — unordered (bulleted) lists, "list" plain lists (e. g. comma-separated list).',
 30+ 'spl-subpages-par-page' => 'The page to show the subpages for, or namespace name (including trailing colon) to show pages in. Defaults to the current page.',
3131 'spl-subpages-par-showpage' => 'Indicates if the page itself should be shown in the list or not.',
32 - 'spl-subpages-par-pathstyle' => 'The style of the path for subpages in the list.',
 32+ 'spl-subpages-par-pathstyle' => 'The style of the path for subpages in the list. Allowed values: "fullpagename" — full page name (including namespace), "pagename" — page name (without namespace), "subpagename" — "relative" page name starting from the page we list subpages for, "none" — just the trailing part of the name after last slash.',
3333 'spl-subpages-par-kidsonly' => 'Allows showing only direct subpages.',
3434 'spl-subpages-par-limit' => 'The maximum number of pages to list.',
 35+ 'spl-subpages-par-element' => 'The HTML element enclosing the list (including "intro" and "outro" or "default" texts). Allowed values: "div", "p", "span".',
 36+ 'spl-subpages-par-class' => 'The value for "class" attribute of HTML element enclosing the list.',
 37+ 'spl-subpages-par-intro' => 'The text to output before the list, if the list is not empty.',
 38+ 'spl-subpages-par-outro' => 'The text to output after the list, if the list is not empty.',
 39+ 'spl-subpages-par-default' => 'The text to output instead of the list, if the list is empty. If empty, error message will rendered (such as "Page has no subpages to list"). If dash ("-"), result will be completely empty.',
 40+ 'spl-subpages-par-separator' => 'The text to output between two list items in case of "list" or "bar" formats. Has no effect in other formats.',
 41+ 'spl-subpages-par-template' => 'The name of template. The template is applied to every item of the list. An item is passed as the first (unnamed) argument. Note that template does not cancel list formatting. Formatting ("ul", "ol", "list") is applied to the template\'s result.',
 42+ 'spl-subpages-par-links' => 'If true, list items are rendered as links. If false, list items are rendered as plain text. The latter is especially helpful for passing items into templates for further processing.',
3543 );
3644
3745 /** Message documentation (Message documentation)
@@ -338,20 +346,29 @@
339347
340348 /** Russian (Русский)
341349 * @author Александр Сигачёв
 350+ * @author Van de Bugger
342351 */
343352 $messages['ru'] = array(
344 - 'spl-desc' => 'Добавляет тег <code><nowiki><splist></splist></nowiki></code>, выводящий список подстраниц',
 353+ 'spl-desc' => 'Добавляет тег <code><nowiki><splist /></nowiki></code>, выводящий список подстраниц',
345354 'spl-nosubpages' => 'Страница «$1» не имеет подстраниц.',
346355 'spl-noparentpage' => 'Страница «$1» не существует.',
347356 'spl-nopages' => 'Пространство имён «$1» не содержит страниц.',
348 - 'spl-subpages-par-sort' => 'Направление сортировки.',
349 - 'spl-subpages-par-sortby' => 'Ключ сортировки: название (title) или дата последней правки (lastedit).',
350 - 'spl-subpages-par-format' => 'Список подстраниц может быть показан в нескольких форматах. Нумерованный список (ol), маркированный список (ul), список через запятые (list).',
351 - 'spl-subpages-par-page' => 'Страница для которой показывать список подстраниц. По умолчанию текущая страница.',
 357+ 'spl-subpages-par-sort' => 'Направление сортировки. Допустимые значения: «asc» — сортировка по возрастанию, «desc» — по убыванию.',
 358+ 'spl-subpages-par-sortby' => 'Ключ сортировки: «title» — сортировать по названию страниц, «lastedit» — по дате последней правки.',
 359+ 'spl-subpages-par-format' => 'Список подстраниц может быть показан в нескольких форматах. Допустимые значения: «ol» — нумерованный список, «ul» — маркированный список, «list» — линейный список (например, через запятые).',
 360+ 'spl-subpages-par-page' => 'Страница для которой показывать список подстраниц, или имя пространства имён (включая конечное двоеточие). По умолчанию текущая страница.',
352361 'spl-subpages-par-showpage' => 'Указывает, должна ли отображаться сама страница.',
353 - 'spl-subpages-par-pathstyle' => 'Стиль пути для подстраниц в списке.',
 362+ 'spl-subpages-par-pathstyle' => 'Стиль пути для подстраниц в списке. Допустимые значения: «fullpagename» — полное название страницы (включая пространство имён), "pagename" — имя страницы (полное но без пространства имён), "subpagename" — "относительное" имя страницы, начиная со страницы, для которой показывается список, "none" — только часть имени следующая за последней косой чертой.',
354363 'spl-subpages-par-kidsonly' => 'Показывать только прямые подстраницы.',
355364 'spl-subpages-par-limit' => 'Максимальное количество страниц в список.',
 365+ 'spl-subpages-par-element' => 'Элемент HTML, включающий весь список (вместе с текстами «intro» и «outro» или «default»). Допустимые значения: «div», «p», «span».',
 366+ 'spl-subpages-par-class' => 'Значение атрибута «class» элемента HTML.',
 367+ 'spl-subpages-par-intro' => 'Текст для вывод перед списком, если список не пуст.',
 368+ 'spl-subpages-par-outro' => 'Текст для вывода после списка, если список не пуст.',
 369+ 'spl-subpages-par-default' => 'Текст для вывода вместо списка, если список пуст.',
 370+ 'spl-subpages-par-separator' => 'Текст для вывода между двумя елементами списка для форматов "list" или "bar". Не имеет значения для других форматов.',
 371+ 'spl-subpages-par-template' => 'Имя шаблона. Шаблон применяется к каждому елементу списка. Элемент передаётся в шаблон как первый (неименованный) аргумент. Заметьте, что шаблон не отменяет форматирование списка. Форматирование ("ul", "ol", "list") применяется к результатам шаблона.',
 372+ 'spl-subpages-par-links' => 'Если истина, элементы списка выводятся я как ссылки. Если ложь, элементы списка выводятся как простой текст, это особенно удобно, если применяется совместно с шаблоном.',
356373 );
357374
358375 /** Serbian Cyrillic ekavian (‪Српски (ћирилица)‬)
Index: trunk/extensions/SubPageList/SubPageList.php
@@ -35,7 +35,7 @@
3636 die( '<b>Error:</b> You need to have <a href="http://www.mediawiki.org/wiki/Extension:Validator">Validator</a> installed in order to use <a href="http://www.mediawiki.org/wiki/Extension:SubPageList">SubPageList</a>.<br />' );
3737 }
3838
39 -define( 'SPL_VERSION', '0.4 alpha' );
 39+define( 'SPL_VERSION', '0.4 RC' );
4040
4141 $wgExtensionCredits['parserhook'][] = array(
4242 'path' => __FILE__,
@@ -43,9 +43,7 @@
4444 'version' => SPL_VERSION,
4545 'author' => array(
4646 '[http://www.mediawiki.org/wiki/User:Jeroen_De_Dauw Jeroen De Dauw]',
47 - 'James McCormack',
48 - 'Martin Schallnahs',
49 - 'Rob Church. Based on [http://www.mediawiki.org/wiki/Extension:SubPageList3 SubPageList3].',
 47+ 'Van de Bugger. Based on [http://www.mediawiki.org/wiki/Extension:SubPageList3 SubPageList3].',
5048 ),
5149 'url' => 'http://www.mediawiki.org/wiki/Extension:SubPageList',
5250 'descriptionmsg' => 'spl-desc'
Index: trunk/extensions/SubPageList/SubPageList.class.php
@@ -116,18 +116,32 @@
117117 $params['limit']->addCriteria( new CriterionInRange( 1, 500 ) );
118118 $params['limit']->setDescription( wfMsg( 'spl-subpages-par-limit' ) );
119119
120 - // TODO: Add description strings. --vdb
121120 $params['element'] = new Parameter( 'element', Parameter::TYPE_STRING, 'div' );
122121 $params['element']->addCriteria( new CriterionInArray( 'div', 'p', 'span' ) );
 122+ $params['element']->setDescription( wfMsg( 'spl-subpages-par-element' ) );
 123+
123124 $params['class'] = new Parameter( 'class', Parameter::TYPE_STRING, 'subpagelist' );
 125+ $params['class']->setDescription( wfMsg( 'spl-subpages-par-class' ) );
 126+
124127 $params['intro'] = new Parameter( 'intro', Parameter::TYPE_STRING, '' );
 128+ $params['intro']->setDescription( wfMsg( 'spl-subpages-par-intro' ) );
 129+
125130 $params['outro'] = new Parameter( 'outro', Parameter::TYPE_STRING, '' );
 131+ $params['outro']->setDescription( wfMsg( 'spl-subpages-par-outro' ) );
 132+
126133 $params['default'] = new Parameter( 'default', Parameter::TYPE_STRING, '' );
 134+ $params['default']->setDescription( wfMsg( 'spl-subpages-par-default' ) );
 135+
127136 $params['separator'] = new Parameter( 'separator', Parameter::TYPE_STRING, '&#160;· ' );
128137 $params['separator']->addAliases( 'sep' );
 138+ $params['separator']->setDescription( wfMsg( 'spl-subpages-par-separator' ) );
 139+
129140 $params['template'] = new Parameter( 'template', Parameter::TYPE_STRING, '' );
 141+ $params['template']->setDescription( wfMsg( 'spl-subpages-par-template' ) );
 142+
130143 $params['links'] = new Parameter( 'links', Parameter::TYPE_BOOLEAN, true );
131144 $params['links']->addAliases( 'link' );
 145+ $params['links']->setDescription( wfMsg( 'spl-subpages-par-links' ) );
132146
133147 return $params;
134148 }
@@ -264,7 +278,7 @@
265279 *
266280 * @return array of Title
267281 */
268 - protected function getSubPages( Title $title, array $parameters ) {
 282+ protected function getSubPages( $title, array $parameters ) {
269283 $titles = array();
270284
271285 if ( ! is_null( $title ) ) {
@@ -369,13 +383,14 @@
370384 *
371385 * @see SubPageList::makeListItem
372386 *
373 - * @param Title $title
 387+ * @param $title can be either an instance of Title class (title of an existing page), or number
 388+ * (index of an existing namespace) or null.
374389 * @param array $parameters
375390 * @param array $titles
376391 *
377392 * @return string the whole list
378393 */
379 - protected function makeList( Title $title, array $parameters, array $titles ) {
 394+ protected function makeList( $title, array $parameters, array $titles ) {
380395 global $wgContLang;
381396 $start = ''; // String to render once in the very beginning of each item.
382397 $bullet = ''; // String to render between `$start' and item
@@ -396,10 +411,9 @@
397412 $sep = $parameters['separator'];
398413 break;
399414 }
400 - // A kind of optimization: I do not want to run loop every time I need series of bullets.
401 - // Let us intialize $bullets array so $bullets[$i] is a bullet repeated $i times.
402 - $bullets = array();
403 - $bullets[0] = $bullet;
 415+
 416+ // Let us have $bullets is a long enough series of bullets.
 417+ $bullets = $bullet;
404418
405419 // WARNING: It seems strlen and other sring functions operated with bytes, not characters.
406420 // But it seems it is ok for UTF-8 encoding...
@@ -431,7 +445,7 @@
432446
433447 if ( $parameters['showpage'] && $title instanceof Title ) {
434448 // If parent should be shown, correct starting point:
435 - $slash = strrpos( $parentText, "/" );
 449+ $slash = strrpos( $parentText, '/' );
436450 if ( $slash ) {
437451 $parentLen = $slash + 1;
438452 }
@@ -450,15 +464,18 @@
451465 foreach( $titles as $pageTitle ) {
452466 $pageFull = $pageTitle->getPrefixedText();
453467 $level = substr_count( $pageFull, '/' ) - $parentSlashCount;
 468+
454469 if ( $level <= $maxLevel ) {
455470 $item = '';
456471 if ( $bullet != '' ) {
457 - // Make sure $bullets[ $level ] is properly initialized.
458 - for ( $l = sizeof( $bullets ); $l <= $level; ++ $l ) {
459 - $bullets[$l] = $bullets[$l - 1] . $bullet;
460 - }
461 - $item .= $start . $bullets[ $level ];
 472+ // Make sure $bullets is long enough.
 473+ while ( strlen( $bullets ) < $level ) {
 474+ $bullets .= $bullets;
 475+ }
 476+
 477+ $item .= $start . substr( $bullets, 0, $level );
462478 }
 479+
463480 $item .= $this->makeListItem( $pageFull, $nsLen, $parentLen, $parameters );
464481 $items[] = $item;
465482 }

Follow-up revisions

RevisionCommit summaryAuthorDate
r93244fu r93243jeroendedauw20:31, 26 July 2011

Status & tagging log