Index: trunk/extensions/SubPageList/RELEASE-NOTES |
— | — | @@ -7,6 +7,9 @@ |
8 | 8 | === Version 0.3.1 === |
9 | 9 | 2011-07-xx |
10 | 10 | |
| 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. |
11 | 14 | * Fixed compatibility with MediaWiki 1.18. |
12 | 15 | |
13 | 16 | === Version 0.3 === |
Index: trunk/extensions/SubPageList/SubPageList.i18n.php |
— | — | @@ -23,14 +23,22 @@ |
24 | 24 | 'spl-noparentpage' => 'Page "$1" does not exist.', |
25 | 25 | 'spl-nopages' => 'Namespace "$1" does not have pages.', |
26 | 26 | |
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.', |
31 | 31 | '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.', |
33 | 33 | 'spl-subpages-par-kidsonly' => 'Allows showing only direct subpages.', |
34 | 34 | '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.', |
35 | 43 | ); |
36 | 44 | |
37 | 45 | /** Message documentation (Message documentation) |
— | — | @@ -338,20 +346,29 @@ |
339 | 347 | |
340 | 348 | /** Russian (Русский) |
341 | 349 | * @author Александр Сигачёв |
| 350 | + * @author Van de Bugger |
342 | 351 | */ |
343 | 352 | $messages['ru'] = array( |
344 | | - 'spl-desc' => 'Добавляет тег <code><nowiki><splist></splist></nowiki></code>, выводящий список подстраниц', |
| 353 | + 'spl-desc' => 'Добавляет тег <code><nowiki><splist /></nowiki></code>, выводящий список подстраниц', |
345 | 354 | 'spl-nosubpages' => 'Страница «$1» не имеет подстраниц.', |
346 | 355 | 'spl-noparentpage' => 'Страница «$1» не существует.', |
347 | 356 | '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' => 'Страница для которой показывать список подстраниц, или имя пространства имён (включая конечное двоеточие). По умолчанию текущая страница.', |
352 | 361 | 'spl-subpages-par-showpage' => 'Указывает, должна ли отображаться сама страница.', |
353 | | - 'spl-subpages-par-pathstyle' => 'Стиль пути для подстраниц в списке.', |
| 362 | + 'spl-subpages-par-pathstyle' => 'Стиль пути для подстраниц в списке. Допустимые значения: «fullpagename» — полное название страницы (включая пространство имён), "pagename" — имя страницы (полное но без пространства имён), "subpagename" — "относительное" имя страницы, начиная со страницы, для которой показывается список, "none" — только часть имени следующая за последней косой чертой.', |
354 | 363 | 'spl-subpages-par-kidsonly' => 'Показывать только прямые подстраницы.', |
355 | 364 | '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' => 'Если истина, элементы списка выводятся я как ссылки. Если ложь, элементы списка выводятся как простой текст, это особенно удобно, если применяется совместно с шаблоном.', |
356 | 373 | ); |
357 | 374 | |
358 | 375 | /** Serbian Cyrillic ekavian (Српски (ћирилица)) |
Index: trunk/extensions/SubPageList/SubPageList.php |
— | — | @@ -35,7 +35,7 @@ |
36 | 36 | 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 />' ); |
37 | 37 | } |
38 | 38 | |
39 | | -define( 'SPL_VERSION', '0.4 alpha' ); |
| 39 | +define( 'SPL_VERSION', '0.4 RC' ); |
40 | 40 | |
41 | 41 | $wgExtensionCredits['parserhook'][] = array( |
42 | 42 | 'path' => __FILE__, |
— | — | @@ -43,9 +43,7 @@ |
44 | 44 | 'version' => SPL_VERSION, |
45 | 45 | 'author' => array( |
46 | 46 | '[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].', |
50 | 48 | ), |
51 | 49 | 'url' => 'http://www.mediawiki.org/wiki/Extension:SubPageList', |
52 | 50 | 'descriptionmsg' => 'spl-desc' |
Index: trunk/extensions/SubPageList/SubPageList.class.php |
— | — | @@ -116,18 +116,32 @@ |
117 | 117 | $params['limit']->addCriteria( new CriterionInRange( 1, 500 ) ); |
118 | 118 | $params['limit']->setDescription( wfMsg( 'spl-subpages-par-limit' ) ); |
119 | 119 | |
120 | | - // TODO: Add description strings. --vdb |
121 | 120 | $params['element'] = new Parameter( 'element', Parameter::TYPE_STRING, 'div' ); |
122 | 121 | $params['element']->addCriteria( new CriterionInArray( 'div', 'p', 'span' ) ); |
| 122 | + $params['element']->setDescription( wfMsg( 'spl-subpages-par-element' ) ); |
| 123 | + |
123 | 124 | $params['class'] = new Parameter( 'class', Parameter::TYPE_STRING, 'subpagelist' ); |
| 125 | + $params['class']->setDescription( wfMsg( 'spl-subpages-par-class' ) ); |
| 126 | + |
124 | 127 | $params['intro'] = new Parameter( 'intro', Parameter::TYPE_STRING, '' ); |
| 128 | + $params['intro']->setDescription( wfMsg( 'spl-subpages-par-intro' ) ); |
| 129 | + |
125 | 130 | $params['outro'] = new Parameter( 'outro', Parameter::TYPE_STRING, '' ); |
| 131 | + $params['outro']->setDescription( wfMsg( 'spl-subpages-par-outro' ) ); |
| 132 | + |
126 | 133 | $params['default'] = new Parameter( 'default', Parameter::TYPE_STRING, '' ); |
| 134 | + $params['default']->setDescription( wfMsg( 'spl-subpages-par-default' ) ); |
| 135 | + |
127 | 136 | $params['separator'] = new Parameter( 'separator', Parameter::TYPE_STRING, ' · ' ); |
128 | 137 | $params['separator']->addAliases( 'sep' ); |
| 138 | + $params['separator']->setDescription( wfMsg( 'spl-subpages-par-separator' ) ); |
| 139 | + |
129 | 140 | $params['template'] = new Parameter( 'template', Parameter::TYPE_STRING, '' ); |
| 141 | + $params['template']->setDescription( wfMsg( 'spl-subpages-par-template' ) ); |
| 142 | + |
130 | 143 | $params['links'] = new Parameter( 'links', Parameter::TYPE_BOOLEAN, true ); |
131 | 144 | $params['links']->addAliases( 'link' ); |
| 145 | + $params['links']->setDescription( wfMsg( 'spl-subpages-par-links' ) ); |
132 | 146 | |
133 | 147 | return $params; |
134 | 148 | } |
— | — | @@ -264,7 +278,7 @@ |
265 | 279 | * |
266 | 280 | * @return array of Title |
267 | 281 | */ |
268 | | - protected function getSubPages( Title $title, array $parameters ) { |
| 282 | + protected function getSubPages( $title, array $parameters ) { |
269 | 283 | $titles = array(); |
270 | 284 | |
271 | 285 | if ( ! is_null( $title ) ) { |
— | — | @@ -369,13 +383,14 @@ |
370 | 384 | * |
371 | 385 | * @see SubPageList::makeListItem |
372 | 386 | * |
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. |
374 | 389 | * @param array $parameters |
375 | 390 | * @param array $titles |
376 | 391 | * |
377 | 392 | * @return string the whole list |
378 | 393 | */ |
379 | | - protected function makeList( Title $title, array $parameters, array $titles ) { |
| 394 | + protected function makeList( $title, array $parameters, array $titles ) { |
380 | 395 | global $wgContLang; |
381 | 396 | $start = ''; // String to render once in the very beginning of each item. |
382 | 397 | $bullet = ''; // String to render between `$start' and item |
— | — | @@ -396,10 +411,9 @@ |
397 | 412 | $sep = $parameters['separator']; |
398 | 413 | break; |
399 | 414 | } |
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; |
404 | 418 | |
405 | 419 | // WARNING: It seems strlen and other sring functions operated with bytes, not characters. |
406 | 420 | // But it seems it is ok for UTF-8 encoding... |
— | — | @@ -431,7 +445,7 @@ |
432 | 446 | |
433 | 447 | if ( $parameters['showpage'] && $title instanceof Title ) { |
434 | 448 | // If parent should be shown, correct starting point: |
435 | | - $slash = strrpos( $parentText, "/" ); |
| 449 | + $slash = strrpos( $parentText, '/' ); |
436 | 450 | if ( $slash ) { |
437 | 451 | $parentLen = $slash + 1; |
438 | 452 | } |
— | — | @@ -450,15 +464,18 @@ |
451 | 465 | foreach( $titles as $pageTitle ) { |
452 | 466 | $pageFull = $pageTitle->getPrefixedText(); |
453 | 467 | $level = substr_count( $pageFull, '/' ) - $parentSlashCount; |
| 468 | + |
454 | 469 | if ( $level <= $maxLevel ) { |
455 | 470 | $item = ''; |
456 | 471 | 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 ); |
462 | 478 | } |
| 479 | + |
463 | 480 | $item .= $this->makeListItem( $pageFull, $nsLen, $parentLen, $parameters ); |
464 | 481 | $items[] = $item; |
465 | 482 | } |