MediaWiki:Gadget-BreadCrumbs.js
From Wiki2
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
$j(document).ready( function() { // Set defaults if included as a gadget, otherwise they should // be defined by the extension. if ( typeof wgJSBreadCrumbsMaxCrumbs == "undefined" ) { wgJSBreadCrumbsMaxCrumbs = 5; } if ( typeof wgJSBreadCrumbsSeparator == "undefined" ) { wgJSBreadCrumbsSeparator = "»"; } if ( typeof wgJSBreadCrumbsCookiePath == "undefined" ) { wgJSBreadCrumbsCookiePath = "/"; } if ( typeof wgJSBreadCrumbsLeadingDescription == "undefined" ) { wgJSBreadCrumbsLeadingDescription = ""; } 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 ( wgNamespaceNumber != 0 ) { title = wgFormattedNamespaces[wgNamespaceNumber] + ":" + wgTitle; } // Remove duplicates var matchTitleIndex = $j.inArray( title, titleState ); var matchUrlIndex = $j.inArray( location.pathname + location.search, urlState ); 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 $j( "#top" ).before( '<span id="mwext-bc" class="noprint plainlinks breadcrumbs"></span>' ); var mwextbc = $j( "#mwext-bc" ); // Add the bread crumb description mwextbc.append( wgJSBreadCrumbsLeadingDescription + ': ' ); // Add the bread crumbs for ( var i = 0; i < titleState.length; i++ ) { if ( wgJSBreadCrumbsShowSiteName == true ) { urltoappend = '<a href="' + urlState[i] + '">' + '(' + siteState[i] + ') ' + titleState[i] + '</a> '; } else { urltoappend = '<a href="' + urlState[i] + '">' + titleState[i] + '</a> '; } // Only add the separator if this isn't the last title if ( i < titleState.length - 1 ) { 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 } ); });