MediaWiki:Common.js
MediaWiki interface page
More languages
More actions
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)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/**
* OHC Network Wiki — shared site JS.
* CARE version switcher (Docusaurus-style dropdown on doc pages, {{Doc header}}).
* Guarded so it never double-injects when the ohc-version-switcher gadget is
* enabled (see MediaWiki:Gadgets-definition).
*/
mw.loader.using( [ 'mediawiki.util', 'mediawiki.notification' ] ).then( function () {
'use strict';
var metaStrip = document.querySelector( '.docs-meta' );
if ( !metaStrip || metaStrip.querySelector( '.docs-version-switcher' ) ) {
return;
}
var KNOWN_VERSIONS = [ '3.1', '3.0' ];
var LATEST = KNOWN_VERSIONS[ 0 ];
var LS_KEY = 'ohcwiki-care-version';
var currentPage = mw.config.get( 'wgPageName' ).replace( /_/g, ' ' );
var storedVersion = null;
try { storedVersion = localStorage.getItem( LS_KEY ); } catch ( e ) {}
if ( !storedVersion ) { storedVersion = LATEST; }
var forkMatch = currentPage.match( /^(.+)\/(\d+\.\d+)$/ );
var isOnFork = !!forkMatch;
var canonicalPage = isOnFork ? forkMatch[ 1 ] : currentPage;
var viewingVersion = isOnFork ? forkMatch[ 2 ] : LATEST;
var container = document.createElement( 'span' );
container.className = 'docs-meta__badge docs-version-switcher';
container.style.cssText = 'display:inline-flex;align-items:center;gap:0.3em;padding:0.15em 0.5em;';
var select = document.createElement( 'select' );
select.title = 'Switch documentation version';
// Colour comes from the token layer, not a literal -- MediaWiki:Common.css
// already styles `.docs-version-switcher select`, so only layout is set here.
select.style.cssText = 'font-size:1em;font-weight:700;font-family:inherit;';
KNOWN_VERSIONS.forEach( function ( v ) {
var opt = document.createElement( 'option' );
opt.value = v;
opt.textContent = v + ( v === LATEST ? ' (latest)' : '' );
if ( v === viewingVersion ) { opt.selected = true; }
select.appendChild( opt );
} );
select.addEventListener( 'change', function () {
var chosen = select.value;
try { localStorage.setItem( LS_KEY, chosen ); } catch ( e ) {}
navigateToVersion( chosen );
} );
container.appendChild( select );
metaStrip.insertBefore( container, metaStrip.firstChild );
function navigateToVersion( version ) {
if ( version === LATEST ) {
if ( isOnFork ) {
window.location.href = mw.util.getUrl( canonicalPage );
}
return;
}
var forkTitle = canonicalPage + '/' + version;
checkPageExists( forkTitle ).then( function ( exists ) {
if ( exists ) {
window.location.href = mw.util.getUrl( forkTitle );
} else if ( isOnFork ) {
window.location.href = mw.util.getUrl( canonicalPage );
} else {
mw.notify(
'This page is unchanged in CARE ' + version + ' — you\'re already seeing the right content.',
{ type: 'info', autoHide: true, autoHideSeconds: 4 }
);
}
} );
}
function checkPageExists( title ) {
return new mw.Api().get( { action: 'query', titles: title } ).then( function ( data ) {
var pages = data.query && data.query.pages;
return pages && !pages[ '-1' ];
} ).catch( function () { return false; } );
}
if ( storedVersion !== LATEST && !isOnFork && !window.location.search.includes( 'action=' ) ) {
var forkTitle = canonicalPage + '/' + storedVersion;
checkPageExists( forkTitle ).then( function ( exists ) {
if ( exists ) {
window.location.replace( mw.util.getUrl( forkTitle ) );
}
} );
}
} );