r36920 - Code Review

From MediaWiki.org

Jump to: navigation, search
Repository:MediaWiki
Revision:r36919 | r36920 (on ViewVC) | r36921 >
Date:15:13, 2 July 2008
Author:daniel
Status:ok
Tags:
Comment:optionally show category tree in the sidebar (requires skin update from r36917)
Modified paths:

Diff [purge]

Index: trunk/extensions/CategoryTree/CategoryTree.i18n.php
===================================================================
--- trunk/extensions/CategoryTree/CategoryTree.i18n.php	(revision 36919)
+++ trunk/extensions/CategoryTree/CategoryTree.i18n.php	(revision 36920)
@@ -15,7 +15,8 @@
  */
 $messages['en'] = array(
 	'categorytree'                  => 'CategoryTree',
-	'categorytree-tab'              => 'Tree',
+	'categorytree-portlet'          => 'Categories',
+#	'categorytree-tab'              => 'Tree',
 	'categorytree-legend'           => 'Show category tree',
 	'categorytree-desc'             => 'Dynamically navigate the [[Special:CategoryTree|category structure]]',
 	'categorytree-header'           => 'Enter a category name to see its contents as a tree structure.
@@ -592,6 +593,7 @@
  */
 $messages['de'] = array(
 	'categorytree'                  => 'Kategorienbaum',
+	'categorytree-portlet'          => 'Kategorien',
 	'categorytree-tab'              => 'Baum',
 	'categorytree-legend'           => 'Zeige Kategorienbaum',
 	'categorytree-desc'             => 'Dynamische Navigation für die [[Special:CategoryTree|Kategorien-Struktur]]',
Index: trunk/extensions/CategoryTree/CategoryTree.php
===================================================================
--- trunk/extensions/CategoryTree/CategoryTree.php	(revision 36919)
+++ trunk/extensions/CategoryTree/CategoryTree.php	(revision 36920)
@@ -62,6 +62,7 @@
 # Set $wgCategoryTreeForceHeaders to true to force the JS and CSS headers for CategoryTree to be included on every page. 
 # May be usefull for using CategoryTree from within system messages, in the sidebar, or a custom skin.
 $wgCategoryTreeForceHeaders = false; 
+$wgCategoryTreeSidebarRoot = NULL;
 
 $wgCategoryTreeExtPath = '/extensions/CategoryTree';
 $wgCategoryTreeVersion = '2';  #NOTE: bump this when you change the CSS or JS files!
@@ -83,6 +84,14 @@
 $wgCategoryTreeSpecialPageOptions = array(); #Options to be used for Special:CategoryTree
 $wgCategoryTreeSpecialPageOptions['showcount'] = true;
 
+$wgCategoryTreeSidebarOptions = array(); #Options to be used in the sidebar (for use with $wgCategoryTreeSidebarRoot)
+$wgCategoryTreeSidebarOptions['mode'] = CT_MODE_CATEGORIES;
+$wgCategoryTreeSidebarOptions['hideprefix'] = CT_HIDEPREFIX_CATEGORIES;
+$wgCategoryTreeSidebarOptions['showcount'] = false;
+$wgCategoryTreeSidebarOptions['hideroot'] = true;
+$wgCategoryTreeSidebarOptions['namespaces'] = false; 
+$wgCategoryTreeSidebarOptions['depth'] = 1;
+
 /**
  * Register extension setup hook and credits
  */
@@ -132,7 +141,7 @@
 	global $wgUseAjax, $wgHooks, $wgOut;
 	global $wgCategoryTreeDefaultOptions, $wgCategoryTreeDefaultMode, $wgCategoryTreeOmitNamespace;
 	global $wgCategoryTreeCategoryPageOptions, $wgCategoryTreeCategoryPageMode;
-	global $wgCategoryTreeForceHeaders;
+	global $wgCategoryTreeSidebarRoot, $wgCategoryTreeForceHeaders;
 
 	# Abort if AJAX is not enabled
 	if ( !$wgUseAjax ) {
@@ -140,6 +149,11 @@
 		return;
 	}
 
+	if ( $wgCategoryTreeSidebarRoot ) {
+		$wgCategoryTreeForceHeaders = true; # needed on every page anyway
+		$wgHooks['SkinTemplateOutputPageBeforeExec'][] = 'efCategoryTreeSkinTemplateOutputPageBeforeExec';
+	}
+
 	if ( defined( 'MW_SUPPORTS_PARSERFIRSTCALLINIT' ) ) {
 		$wgHooks['ParserFirstCallInit'][] = 'efCategoryTreeSetHooks';
 	} else {
@@ -274,23 +288,40 @@
 }
 
 /**
+ * Hook implementation for injecting a category tree into the sidebar.
+ * Registered automatically if $wgCategoryTreeSidebarRoot is set to a category name.
+ */
+function efCategoryTreeSkinTemplateOutputPageBeforeExec( &$skin, &$tpl ) {
+	global $wgCategoryTreeSidebarRoot, $wgCategoryTreeSidebarOptions;
+	
+	$html = efCategoryTreeParserHook( $wgCategoryTreeSidebarRoot, $wgCategoryTreeSidebarOptions );
+	if ( $html ) $tpl->data['sidebar']['categorytree-portlet'] = $html; //requires MW 1.13, r36917
+
+	return true;
+}
+
+
+/**
  * Entry point for the <categorytree> tag parser hook.
  * This loads CategoryTreeFunctions.php and calls CategoryTree::getTag()
  */
-function efCategoryTreeParserHook( $cat, $argv, &$parser ) {
-	global $wgCategoryTreeDefaultMode;
+function efCategoryTreeParserHook( $cat, $argv, $parser = NULL ) {
+	global $wgCategoryTreeDefaultMode, $wgOut;
 
-	$parser->mOutput->mCategoryTreeTag = true; # flag for use by efCategoryTreeParserOutput
+	if ( $parser ) {
+		$parser->mOutput->mCategoryTreeTag = true; # flag for use by efCategoryTreeParserOutput
+	}
+	else {
+		CategoryTree::setHeaders( $wgOut );
+	}
 
-	static $initialized = false;
-
 	$ct = new CategoryTree( $argv );
 
 	$attr = Sanitizer::validateTagAttributes( $argv, 'div' );
 
 	$hideroot = isset( $argv[ 'hideroot' ] ) ? CategoryTree::decodeBoolean( $argv[ 'hideroot' ] ) : null;
 	$onlyroot = isset( $argv[ 'onlyroot' ] ) ? CategoryTree::decodeBoolean( $argv[ 'onlyroot' ] ) : null;
-	$depthArg = isset( $argv[ 'depth' ] ) ? $argv[ 'depth' ] : null;
+	$depthArg = isset( $argv[ 'depth' ] ) ? (int)$argv[ 'depth' ] : null;
 
 	$depth = efCategoryTreeCapDepth( $ct->getOption( 'mode' ), $depthArg );
 	if ( $onlyroot ) $depth = 0;
Index: trunk/extensions/CategoryTree/CategoryTreeFunctions.php
===================================================================
--- trunk/extensions/CategoryTree/CategoryTreeFunctions.php	(revision 36919)
+++ trunk/extensions/CategoryTree/CategoryTreeFunctions.php	(revision 36920)
@@ -340,7 +340,7 @@
 	* Custom tag implementation. This is called by efCategoryTreeParserHook, which is used to
 	* load CategoryTreeFunctions.php on demand.
 	*/
-	function getTag( &$parser, $category, $hideroot = false, $attr, $depth=1 ) {
+	function getTag( $parser, $category, $hideroot = false, $attr, $depth=1 ) {
 		global $wgCategoryTreeDisableCache, $wgCategoryTreeDynamicTag;
 		static $uniq = 0;
 
@@ -348,7 +348,7 @@
 		if ( $category === '' ) {
 			return false;
 		}
-		if ( $wgCategoryTreeDisableCache && !$wgCategoryTreeDynamicTag ) {
+		if ( $parser && $wgCategoryTreeDisableCache && !$wgCategoryTreeDynamicTag ) {
 			$parser->disableCache();
 		}
 		$title = self::makeTitle( $category );
Views
Toolbox