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

Reply via email to