r36864 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r36863‎ | r36864 | r36865 >
Date:21:40, 1 July 2008
Author:daniel
Status:old (Comments)
Tags:
Comment:
introduced configurable namespace filtering (and fixed some glitches)
Modified paths:
  • /trunk/extensions/CategoryTree/CategoryTree.js (modified) (history)
  • /trunk/extensions/CategoryTree/CategoryTree.php (modified) (history)
  • /trunk/extensions/CategoryTree/CategoryTreeFunctions.php (modified) (history)

Diff [purge]

Index: trunk/extensions/CategoryTree/CategoryTree.js
@@ -34,7 +34,7 @@
3535 lnk.title= categoryTreeCollapseMsg;
3636 lnk.onclick= function() { categoryTreeCollapseNode(cat, options, lnk) }
3737
38 - if (lnk.className != "CategoryTreeLoaded") {
 38+ if (!lnk.className.match(/(^| )CategoryTreeLoaded($| )/)) {
3939 categoryTreeLoadNode(cat, options, lnk, div);
4040 }
4141 }
@@ -58,40 +58,52 @@
5959 categoryTreeLoadChildren(cat, options, div)
6060 }
6161
62 - function categoryTreeEncodeOptions(options) {
63 - var opt = "";
 62+ function categoryTreeEncodeValue(value) {
 63+ switch (typeof value) {
 64+ case 'function':
 65+ throw new Error("categoryTreeEncodeValue encountered a function");
 66+ break;
6467
65 - for (k in options) {
66 - v = options[k];
67 -
68 - switch (typeof v) {
6968 case 'string':
70 - v = '"' + v.replace(/([\\"'])/g, "\\$1") + '"';
 69+ s = '"' + value.replace(/([\\"'])/g, "\\$1") + '"';
7170 break;
7271
7372 case 'number':
7473 case 'boolean':
7574 case 'null':
76 - v = String(v);
 75+ s = String(value);
7776 break;
7877
7978 case 'object':
80 - if ( !v ) v = 'null';
81 - else throw new Error("categoryTreeLoadChildren can not encode complex types");
 79+ if ( !value ) {
 80+ s = 'null';
 81+ }
 82+ else if (typeof value.length === 'number' && !(value.propertyIsEnumerable('length'))) {
 83+ s = '';
 84+ for (i = 0; i<value.length; i++) {
 85+ v = value[i];
 86+ if ( s!='' ) s += ', ';
 87+ s += categoryTreeEncodeValue( v );
 88+ }
 89+ s = '[' + s + ']';
 90+ }
 91+ else {
 92+ s = '';
 93+ for (k in value) {
 94+ v = value[k];
 95+ if ( s!='' ) s += ', ';
 96+ s += categoryTreeEncodeValue( k );
 97+ s += ': ';
 98+ s += categoryTreeEncodeValue( v );
 99+ }
 100+ s = '{' + s + '}';
 101+ }
82102 break;
83 -
84103 default:
85 - throw new Error("categoryTreeLoadChildren encountered strange variable type " + (typeof v));
 104+ throw new Error("categoryTreeEncodeValue encountered strange variable type " + (typeof value));
86105 }
87106
88 - if ( opt != "" ) opt += ", ";
89 - opt += k;
90 - opt += ":";
91 - opt += v;
92 - }
93 -
94 - opt = "{"+opt+"}";
95 - return opt;
 107+ return s;
96108 }
97109
98110 function categoryTreeLoadChildren(cat, options, div) {
@@ -130,6 +142,6 @@
131143 div.innerHTML= result;
132144 }
133145
134 - var opt = categoryTreeEncodeOptions(options);
 146+ var opt = categoryTreeEncodeValue(options);
135147 sajax_do_call( "efCategoryTreeAjaxWrapper", [cat, opt, 'json'] , f );
136148 }
Index: trunk/extensions/CategoryTree/CategoryTreeFunctions.php
@@ -33,12 +33,60 @@
3434 $this->mOptions['mode'] = self::decodeMode( $this->mOptions['mode'] );
3535 $this->mOptions['hideprefix'] = self::decodeHidePrefix( $this->mOptions['hideprefix'] );
3636 $this->mOptions['showcount'] = self::decodeBoolean( $this->mOptions['showcount'] );
 37+ $this->mOptions['namespaces'] = self::decodeNamespaces( $this->mOptions['namespaces'] );
 38+
 39+ if ( $this->mOptions['namespaces'] ) {
 40+ # automatically adjust mode to match namespace filter
 41+ if ( sizeof( $this->mOptions['namespaces'] ) === 1
 42+ && $this->mOptions['namespaces'][0] == NS_CATEGORY ) {
 43+ $this->mOptions['mode'] = CT_MODE_CATEGORIES;
 44+ } else if ( !in_array( NS_IMAGE, $this->mOptions['namespaces'] ) ) {
 45+ $this->mOptions['mode'] = CT_MODE_PAGES;
 46+ } else {
 47+ $this->mOptions['mode'] = CT_MODE_ALL;
 48+ }
 49+ }
3750 }
3851
3952 function getOption( $name ) {
4053 return $this->mOptions[$name];
4154 }
4255
 56+ static function decodeNamespaces( $nn ) {
 57+ global $wgContLang;
 58+
 59+ if ( !$nn )
 60+ return false;
 61+
 62+ if ( !is_array($nn) )
 63+ $nn = preg_split( '![\s#:|]+!', $nn );
 64+
 65+ $namespaces = array();
 66+
 67+ foreach ( $nn as $n ) {
 68+ if ( is_int( $n ) ) {
 69+ $ns = $n;
 70+ }
 71+ else {
 72+ $n = trim( $n );
 73+ if ( $n === '' ) continue;
 74+
 75+ $lower = strtolower( $n );
 76+
 77+ if ( is_numeric($n) ) $ns = (int)$n;
 78+ elseif ( $n == '-' || $n == '_' || $n == '*' || $lower == 'main' ) $ns = NS_MAIN;
 79+ else $ns = $wgContLang->getNsIndex( $n );
 80+ }
 81+
 82+ if ( is_int( $ns ) ) {
 83+ $namespaces[] = $ns;
 84+ }
 85+ }
 86+
 87+ sort( $namespaces ); # get elements into canonical order
 88+ return $namespaces;
 89+ }
 90+
4391 static function decodeMode( $mode ) {
4492 global $wgCategoryTreeDefaultOptions;
4593
@@ -199,6 +247,7 @@
200248 $key = "";
201249
202250 foreach ( $this->mOptions as $k => $v ) {
 251+ if ( is_array( $v ) ) $v = implode( '|', $v );
203252 $key .= $k . ':' . $v . ';';
204253 }
205254
@@ -341,11 +390,19 @@
342391
343392
344393 $mode = $this->getOption('mode');
 394+ $namespaces = $this->getOption('namespaces');
345395
346 - #namespace filter. Should be configurable
347 - if ( $mode == CT_MODE_ALL ) $nsmatch = '';
348 - else if ( $mode == CT_MODE_PAGES ) $nsmatch = ' AND cat.page_namespace != ' . NS_IMAGE;
349 - else $nsmatch = ' AND cat.page_namespace = ' . NS_CATEGORY;
 396+ #namespace filter.
 397+ if ( $namespaces ) {
 398+ #NOTE: we assume that the $namespaces array contains only integers!
 399+ if ( sizeof( $namespaces ) === 1 ) $nsmatch = ' AND cat.page_namespace = ' . $namespaces[0] . ' ';
 400+ else $nsmatch = ' AND cat.page_namespace IN ( ' . implode( ', ', $namespaces ) . ') ';
 401+ }
 402+ else {
 403+ if ( $mode == CT_MODE_ALL ) $nsmatch = '';
 404+ else if ( $mode == CT_MODE_PAGES ) $nsmatch = ' AND cat.page_namespace != ' . NS_IMAGE;
 405+ else $nsmatch = ' AND cat.page_namespace = ' . NS_CATEGORY;
 406+ }
350407
351408 #additional stuff to be used if "transaltion" by interwiki-links is desired
352409 $transFields = '';
@@ -551,13 +608,15 @@
552609
553610 $linkattr[ 'class' ] = "CategoryTreeToggle";
554611
555 - if ( $count === 0 ) {
 612+ /*if ( $count === 0 ) {
556613 $tag = 'span';
557614 $txt = wfMsgNoTrans( 'categorytree-empty-bullet' );
558615 }
559 - else if ( $children == 0 || $loadchildren ) {
 616+ else*/
 617+ if ( $children == 0 || $loadchildren ) {
560618 $tag = 'a';
561 - $txt = wfMsgNoTrans( 'categorytree-expand-bullet' );
 619+ if ( $count === 0 ) $txt = wfMsgNoTrans( 'categorytree-empty-bullet' );
 620+ else $txt = wfMsgNoTrans( 'categorytree-expand-bullet' );
562621 $linkattr[ 'onclick' ] = "this.href='javascript:void(0)'; categoryTreeExpandNode('".Xml::escapeJsString($key)."',".$this->getOptionsAsJsStructure().",this);";
563622 # Don't load this message for ajax requests, so that we don't have to initialise $wgLang
564623 $linkattr[ 'title' ] = $this->mIsAjaxRequest ? '##LOAD##' : wfMsgNoTrans('categorytree-expand');
@@ -593,7 +652,19 @@
594653 $s .= "\n\t\t";
595654 $s .= Xml::openElement( 'div', array( 'class' => 'CategoryTreeChildren', 'style' => $children > 0 ? "display:block" : "display:none" ) );
596655
597 - if ( $children > 0 && !$loadchildren) $s .= $this->renderChildren( $title, $children );
 656+ if ( $ns == NS_CATEGORY && $children > 0 && !$loadchildren) {
 657+ $children = $this->renderChildren( $title, $children );
 658+ if ( $children == '' ) {
 659+ $s .= Xml::openElement( 'i', array( 'class' => 'CategoryTreeNotice' ) );
 660+ if ( $mode == CT_MODE_CATEGORIES ) $s .= wfMsgExt( 'categorytree-no-subcategories', 'parsemag');
 661+ else if ( $mode == CT_MODE_PAGES ) $s .= wfMsgExt( 'categorytree-no-pages', 'parsemag');
 662+ else $s .= wfMsgExt( 'categorytree-nothing-found', 'parsemag');
 663+ $s .= Xml::closeElement( 'i' );
 664+ } else {
 665+ $s .= $children;
 666+ }
 667+ }
 668+
598669 $s .= Xml::closeElement( 'div' );
599670 $s .= Xml::closeElement( 'div' );
600671
Index: trunk/extensions/CategoryTree/CategoryTree.php
@@ -67,7 +67,7 @@
6868 $wgCategoryTreeDefaultOptions['mode'] = NULL; # will be set to $wgCategoryTreeDefaultMode in efCategoryTree(); compatibility quirk
6969 $wgCategoryTreeDefaultOptions['hideprefix'] = NULL; # will be set to $wgCategoryTreeDefaultMode in efCategoryTree(); compatibility quirk
7070 $wgCategoryTreeDefaultOptions['showcount'] = false;
71 -#TODO: hideprefix: always, never, catonly, catonly_if_onlycat
 71+$wgCategoryTreeDefaultOptions['namespaces'] = false; # false means "no filter"
7272
7373 $wgCategoryTreeCategoryPageMode = CT_MODE_CATEGORIES;
7474 $wgCategoryTreeCategoryPageOptions = array(); #Options to be used for category pages
@@ -115,7 +115,6 @@
116116 $wgHooks['ArticleFromTitle'][] = 'efCategoryTreeArticleFromTitle';
117117 $wgHooks['LanguageGetMagic'][] = 'efCategoryTreeGetMagic';
118118
119 -
120119 /**
121120 * register Ajax function
122121 */

Comments

#Comment by I3utchg (talk | contribs)   07:19, 27 March 2010

2cycle only. Try 2 develop spiral electromagnetic field... Source of E... Solar that is relay/channel by sat (retracting/refracting mirror/.......)then converting it to electric. CODE:UFRE=Sun+E+S.U.N.>Element:deleted


idea...c above

Status & tagging log