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 );