MediaWiki:Common.js

/**
 * Redirect User:Name/skin.js and skin.css to the current skin's pages
 * (unless the 'skin' page really exists).
 *
 * Dependencies: mediawiki.util
 *
 * @source https://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
 * @revision 2016-04-13
 */
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
	mw.loader.using( 'mediawiki.util', function () {
		var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
		// Make sure there was a part before and after the slash
		// And that the latter is 'skin.js' or 'skin.css'
		if ( titleParts.length == 2 ) {
			var userSkinPage = titleParts[0] + '/' + mw.config.get( 'skin' );
			if ( titleParts[1] === 'skin.js' ) {
				location.href = mw.util.getUrl( userSkinPage + '.js' );
			} else if ( titleParts[1] === 'skin.css' ) {
				location.href = mw.util.getUrl( userSkinPage + '.css' );
			}
		}
	} );
}

// Book specific
mw.config.set( 'wgBookName', ( mw.config.get( 'wgPageName' ).split( '/', 1 )[0] || '' ).split( ':', 2 ).join( ':' ) );

// Await eachAsync script
importScript("MediaWiki:Common.js/jQueryAsync.js");
(function waitforEachAsync() {
    if (typeof $.eachAsync === 'function') {
        mw.hook('eachAsync.ready').fire();
        console.log("eachAsync is ready.");
    } else {
        setTimeout(waitforEachAsync, 50);
    }
})();

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
	importStylesheet( 'MediaWiki:Common.css/Watchlist.css' );
	importScript('MediaWiki:Common.js/WatchlistNotice.js');
} else if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Recentchanges' ) {
	importStylesheet( 'MediaWiki:Common.css/Recentchanges.css' );
} else if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit', 'upload'] ) !== -1 ) {
	importScript('MediaWiki:Common.js/Toolbox.js');
}

/**
 * @source https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
 * @revision 2020-04-04
 */
mw.loader.using( ['mediawiki.util'], function () {
	var extraCSS = mw.util.getParamValue( 'withCSS' ),
		extraJS = mw.util.getParamValue( 'withJS' );

	if ( extraCSS ) {
		// WARNING: DO NOT REMOVE THIS "IF" - REQUIRED FOR SECURITY (against XSS/CSRF attacks)
		if ( /^MediaWiki:[^&<>=%#]*\.css$/.test( extraCSS ) ) {
			mw.loader.load( '/w/index.php?title=' + encodeURIComponent( extraCSS ) + '&action=raw&ctype=text/css', 'text/css' );
		} else {
			mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
		}
	}

	if ( extraJS ) {
		// WARNING: DO NOT REMOVE THIS "IF" - REQUIRED FOR SECURITY (against XSS/CSRF attacks)
		if ( /^MediaWiki:[^&<>=%#]*\.js$/.test( extraJS ) ) {
			mw.loader.load( '/w/index.php?title=' + encodeURIComponent( extraJS ) + '&action=raw&ctype=text/javascript' );
		} else {
			mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
		}
	}
});

/*
 * Use Gadgets whenever possible to minimize loading for all users for every page.
 * Wait for mediawiki.util to be ready because some things assume its availability.
 */
mw.loader.using( 'mediawiki.util', function() {	
	// Page specific - lynchpin for [[Help:Dialog|dialog]] [[Category:Dialog javascript pages]]
	importScript( 'MediaWiki:Common.js/w/' + mw.config.get( 'wgPageName' ) );

	// Imported scripts
	importScript('MediaWiki:Common.js/Relics.js');
	importScript('MediaWiki:Common.js/ExtraTools.js');
	importScript('MediaWiki:Common.js/CollapseElements.js');
	importScript('MediaWiki:Common.js/NavigationTabs.js');
	importScript('MediaWiki:Common.js/Displaytitle.js');
	// importScript('MediaWiki:Common.js/RandomBook.js');
	importScript('MediaWiki:Common.js/Perbook.js');
	importScript('MediaWiki:Common.js/tabs.js');
	importScript('MediaWiki:Common.js/top.js');
	importScript('MediaWiki:Common.js/review.js');
	importScript('MediaWiki:Common.js/Categories.js');
	importScript('MediaWiki:Common.js/use.js');
	importScript('MediaWiki:Common.js/Slideshows.js');

// DO NOT ADD CODE BELOW THIS LINE
});
Category:Dialog javascript pages