http://www.mediawiki.org/wiki/Special:Code/MediaWiki/69014
Revision: 69014
Author: laner
Date: 2010-07-04 20:39:47 +0000 (Sun, 04 Jul 2010)
Log Message:
-----------
* added different site name support
* added support for preferences
** Users can enable/disable bread crumbs
** Users can enable/disable prepending sitename on titles
** Users can set the number of bread crumbs to display
* delete cookies on log out
* removed some global preferences (replaced with default user options)
* fixed localization issue with namespaces
* upped version to 0.4
Modified Paths:
--------------
trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.hooks.php
trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.i18n.php
trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.php
trunk/extensions/JSBreadCrumbs/js/BreadCrumbs.js
Modified: trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.hooks.php
===================================================================
--- trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.hooks.php 2010-07-04
19:44:21 UTC (rev 69013)
+++ trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.hooks.php 2010-07-04
20:39:47 UTC (rev 69014)
@@ -1,14 +1,18 @@
<?php
class JSBreadCrumbsHooks {
+ private static $variables = array();
+
/**
* BeforePageDisplay hook
*/
public static function addResources( $out ) {
global $wgExtensionAssetsPath;
- $out->addScriptFile(
"$wgExtensionAssetsPath/JSBreadCrumbs/js/BreadCrumbs.js", 5 );
- $out->addExtensionStyle(
"$wgExtensionAssetsPath/JSBreadCrumbs/css/BreadCrumbs.css?1" );
+ if ( self::enableBreadCrumbs() ) {
+ $out->addScriptFile(
"$wgExtensionAssetsPath/JSBreadCrumbs/js/BreadCrumbs.js", 6 );
+ $out->addExtensionStyle(
"$wgExtensionAssetsPath/JSBreadCrumbs/css/BreadCrumbs.css?1" );
+ }
return true;
}
@@ -17,8 +21,13 @@
* MakeGlobalVariablesScript hook
*/
public static function addJSVars( $vars ) {
- global $wgJSBreadCrumbsMaxCrumbs, $wgJSBreadCrumbsSeparator,
$wgJSBreadCrumbsCookiePath;
+ global $wgJSBreadCrumbsSeparator, $wgJSBreadCrumbsCookiePath;
+ global $wgUser;
+ if ( !self::enableBreadCrumbs() ) {
+ return true;
+ }
+
wfLoadExtensionMessages( 'JSBreadCrumbs' );
// Allow localized separator to be overriden
@@ -30,12 +39,54 @@
$variables = array();
- $variables['wgJSBreadCrumbsMaxCrumbs'] =
$wgJSBreadCrumbsMaxCrumbs;
+ $variables['wgJSBreadCrumbsMaxCrumbs'] = $wgUser->getOption(
"jsbreadcrumbs-numberofcrumbs" );
$variables['wgJSBreadCrumbsSeparator'] = $separator;
$variables['wgJSBreadCrumbsCookiePath'] =
$wgJSBreadCrumbsCookiePath;
$variables['wgJSBreadCrumbsLeadingDescription'] = wfMsg(
"jsbreadcrumbs-leading-description" );
+ $variables['wgJSBreadCrumbsShowSiteName'] = $wgUser->getOption(
"jsbreadcrumbs-showsite" );
$vars = array_merge( $vars, $variables );
+
return true;
}
+
+ /**
+ * GetPreferences hook
+ *
+ * Add module-releated items to the preferences
+ */
+ public static function addPreferences( $user, $defaultPreferences ) {
+ $defaultPreferences['jsbreadcrumbs-showcrumbs'] = array(
+ 'type' => 'toggle',
+ 'label-message' => 'prefs-jsbreadcrumbs-showcrumbs',
+ 'section' => 'rendering/jsbreadcrumbs',
+ );
+
+ $defaultPreferences['jsbreadcrumbs-showsite'] = array(
+ 'type' => 'toggle',
+ 'label-message' => 'prefs-jsbreadcrumbs-showsite',
+ 'section' => 'rendering/jsbreadcrumbs',
+ );
+
+ $defaultPreferences['jsbreadcrumbs-numberofcrumbs'] = array(
+ 'type' => 'int',
+ 'min' => 1,
+ 'max' => 20,
+ 'section' => 'rendering/jsbreadcrumbs',
+ 'help' => wfMsgHtml(
'prefs-jsbreadcrumbs-numberofcrumbs-max' ),
+ 'label-message' => 'prefs-jsbreadcrumbs-numberofcrumbs',
+ );
+
+ return true;
+ }
+
+ static function enableBreadCrumbs() {
+ global $wgUser;
+
+ // Ensure we only enable bread crumbs if we are using vector and
+ // the user has them enabled
+ if ( $wgUser->getSkin() instanceof SkinVector &&
$wgUser->getOption( "jsbreadcrumbs-showcrumbs" ) ) {
+ return true;
+ }
+ }
}
Modified: trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.i18n.php
===================================================================
--- trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.i18n.php 2010-07-04
19:44:21 UTC (rev 69013)
+++ trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.i18n.php 2010-07-04
20:39:47 UTC (rev 69014)
@@ -15,6 +15,11 @@
'jsbreadcrumbs-desc' => 'Adds a trail of breadcrumbs below the tab bar',
'jsbreadcrumbs-separator' => 'ยป',
'jsbreadcrumbs-leading-description' => 'Navigation trail',
+ 'prefs-jsbreadcrumbs' => 'Bread Crumbs',
+ 'prefs-jsbreadcrumbs-showsite' => 'Include site name in bread crumbs
(useful when used across wikis)',
+ 'prefs-jsbreadcrumbs-showcrumbs' => 'Display bread crumbs',
+ 'prefs-jsbreadcrumbs-numberofcrumbs' => 'Number of bread crumbs',
+ 'prefs-jsbreadcrumbs-numberofcrumbs-max' => 'Maximum 20 bread crumbs',
);
/** Afrikaans (Afrikaans)
Modified: trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.php
===================================================================
--- trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.php 2010-07-04 19:44:21 UTC
(rev 69013)
+++ trunk/extensions/JSBreadCrumbs/JSBreadCrumbs.php 2010-07-04 20:39:47 UTC
(rev 69014)
@@ -16,17 +16,19 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# http://www.gnu.org/copyleft/gpl.html
-$wgJSBreadCrumbsMaxCrumbs = 5;
//BreadCrumbsSeparator default set via localization
$wgJSBreadCrumbsSeparator = '';
$wgJSBreadCrumbsCookiePath = '/';
+$wgDefaultUserOptions['jsbreadcrumbs-showcrumbs'] = false;
+$wgDefaultUserOptions['jsbreadcrumbs-showsite'] = false;
+$wgDefaultUserOptions['jsbreadcrumbs-numberofcrumbs'] = 5;
// Sets Credits
$wgExtensionCredits['other'][] = array(
'path' => __FILE__,
'name' => 'JSBreadCrumbs',
'author' => 'Ryan Lane',
- 'version' => '0.3',
+ 'version' => '0.4',
'url' => 'http://www.mediawiki.org/wiki/Extension:JSBreadCrumbs',
'descriptionmsg' => 'jsbreadcrumbs-desc',
);
@@ -42,3 +44,4 @@
// Registers Hooks
$wgHooks['BeforePageDisplay'][] = 'JSBreadCrumbsHooks::addResources';
$wgHooks['MakeGlobalVariablesScript'][] = 'JSBreadCrumbsHooks::addJSVars';
+$wgHooks['GetPreferences'][] = 'JSBreadCrumbsHooks::addPreferences';
\ No newline at end of file
Modified: trunk/extensions/JSBreadCrumbs/js/BreadCrumbs.js
===================================================================
--- trunk/extensions/JSBreadCrumbs/js/BreadCrumbs.js 2010-07-04 19:44:21 UTC
(rev 69013)
+++ trunk/extensions/JSBreadCrumbs/js/BreadCrumbs.js 2010-07-04 20:39:47 UTC
(rev 69014)
@@ -13,20 +13,38 @@
if ( typeof wgJSBreadCrumbsLeadingDescription == "undefined" ) {
wgJSBreadCrumbsLeadingDescription = "Navigation trail";
}
+ if ( typeof wgJSBreadCrumbsShowSiteName == "undefined" ) {
+ wgJSBreadCrumbsShowSiteName = false;
+ }
+ if ( wgCanonicalSpecialPageName == "Userlogout" ) {
+ $j.cookie( 'mwext-bc-title', '', { path: wgJSBreadCrumbsCookiePath } );
+ $j.cookie( 'mwext-bc-url', '', { path: wgJSBreadCrumbsCookiePath } );
+ $j.cookie( 'mwext-bc-site', '', { path: wgJSBreadCrumbsCookiePath } );
+ }
// Get the breadcrumbs from the cookies
var titleState = ( $j.cookie( 'mwext-bc-title' ) || "" ).split( '|' );
var urlState = ( $j.cookie( 'mwext-bc-url' ) || "" ).split( '|' );
+ var siteState = ( $j.cookie( 'mwext-bc-site' ) || "" ).split( '|' );
// Strip the first title/url if it is empty
if ( titleState[0].length == 0 ) {
titleState.splice( 0, 1 );
urlState.splice( 0, 1 );
+ siteState.splice( 0, 1 );
}
+ // Get the full title
var title = wgTitle;
- if ( wgCanonicalNamespace.length ) {
- title = wgCanonicalNamespace + ":" + wgTitle;
+ if ( wgNamespaceNumber != 0 ) {
+ // If this is the project namespace, or we aren't showing the site name
+ // then add the namespace to the title. This avoids showing the sitename
+ // twice when adding pages in the project namespace.
+ // TODO: This is an awkward way to do this, and bug prone when the user
+ // logs in with a project page in the history. Find a better way.
+ if ( wgNamespaceNumber != 4 || !wgJSBreadCrumbsShowSiteName ) {
+ title = wgFormattedNamespaces[wgNamespaceNumber] + ":" + wgTitle;
+ }
}
// Remove duplicates
@@ -35,16 +53,19 @@
if ( matchTitleIndex != -1 && ( matchUrlIndex == matchTitleIndex ) ) {
titleState.splice( matchTitleIndex, 1 );
urlState.splice( matchTitleIndex, 1 );
+ siteState.splice( matchTitleIndex, 1 );
}
// Add the current page
titleState.push( title );
urlState.push( location.pathname + location.search );
+ siteState.push( wgSiteName );
// Ensure we only display the maximum breadcrumbs set
if ( titleState.length > wgJSBreadCrumbsMaxCrumbs ) {
titleState = titleState.slice( titleState.length -
wgJSBreadCrumbsMaxCrumbs );
urlState = urlState.slice( urlState.length - wgJSBreadCrumbsMaxCrumbs
);
+ siteState = siteState.slice( siteState.length -
wgJSBreadCrumbsMaxCrumbs );
}
// Insert the span we are going to populate
@@ -57,15 +78,20 @@
// Add the bread crumbs
for ( var i = 0; i < titleState.length; i++ ) {
- urltoappend = '<a href="' + urlState[i] + '">' + titleState[i] + '</a>
';
+ if ( wgJSBreadCrumbsShowSiteName == true ) {
+ urltoappend = '<a href="' + urlState[i] + '">' + siteState[i] +
':' + titleState[i] + '</a> ';
+ } else {
+ urltoappend = '<a href="' + urlState[i] + '">' + titleState[i] +
'</a> ';
+ }
if ( i < titleState.length - 1 ) {
- // Only add the separator if this isn't the last title
- urltoappend = urltoappend + wgJSBreadCrumbsSeparator + ' ';
- }
+ // Only add the separator if this isn't the last title
+ urltoappend = urltoappend + wgJSBreadCrumbsSeparator + ' ';
+ }
mwextbc.append( urltoappend );
}
// Save the bread crumb states to the cookies
$j.cookie( 'mwext-bc-title', titleState.join( '|' ), { path:
wgJSBreadCrumbsCookiePath } );
$j.cookie( 'mwext-bc-url', urlState.join( '|' ), { path:
wgJSBreadCrumbsCookiePath } );
-} );
+ $j.cookie( 'mwext-bc-site', siteState.join( '|' ), { path:
wgJSBreadCrumbsCookiePath } );
+});
\ No newline at end of file
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs