User:BryghtShadow/global.js

importArticles( {	type: 'script',	articles: [		// Scripts for doing Vanguard work.		'u:community:MediaWiki:Van-RedirectCategories.js',		'u:dev:MediaWiki:ShowWROnToolbar.js',		'u:dev:MediaWiki:VanguardTools.js',		// Regular scripts.		'u:dev:MediaWiki:ImportJSPage/code.js',		'u:dev:MediaWiki:ThemeToggler.js',       'u:dev:MediaWiki:I18nEdit.js',	], } );

$(function {	'use strict';

// https://stackoverflow.com/a/38882022 function waitForAddedNode(params) { new MutationObserver(function(mutations) {			var el = document.getElementById(params.id);			if (el) {				this.disconnect;				params.done(el);			}		}).observe(params.parent || document, {			subtree: !!params.recursive,			childList: true,		}); }	function addCodeEditorAccessKey($editform) { const $textbox = $('#wpTextbox1'); const accesskey = $textbox.attr('accesskey'); const targetNode = $editform[0]; const config = { subtree: true, attributeOldValue: true, };		const observer = new MutationObserver(function(mutations) {			mutations.forEach(function(mutation) { if (mutation.type === 'attributes' && mutation.attributeName==="class") { const target = mutation.target; if (target.id === 'wikiEditor-ui-toolbar') { const codeEditorEnabled = target.classList.contains('codeEditor-ui-toolbar'); if (codeEditorEnabled) { $('.ace_text-input').attr('accesskey', accesskey); $textbox.removeAttr('accesskey'); } else { $textbox.attr('accesskey', accesskey); }					}				}			});		});		observer.observe(targetNode, config); }	mw.hook('wikipage.editform').add(addCodeEditorAccessKey);

function addScribuntoAccessKey { // Jump to Scribunto console waitForAddedNode({			id: 'mw-scribunto-input',			parent: document.querySelector('#mw-scribunto-console'),			recursive: false,			done: function(el) {				console.log(el);				el.setAttribute('accesskey', '/');			}		}); }	if (mw.config.get('wgNamespaceNumber') === 828) { mw.hook('wikipage.editform').add(addScribuntoAccessKey); } });

// Default expand footer categories. $(function {	const footerCategories = $('.page-footer__categories');	if (footerCategories.length === 0) { return; }	footerCategories.removeClass('wds-is-collapsed'); });

// Add Special:TrackingCategories backlink to tracking categories. $(function {	"use strict";	const conf = mw.config.get([ 'wgContentLanguage', 'wgUserLanguage', 'wgTitle', 'wgNamespaceNumber', 'wgAction', 'wgArticlePath', ]);	const TARGET_SELECTOR = 'page-header__page-subtitle';	const TARGET_SELECTOR_PARENT = 'page-header__main';	const BACKLINK_PAGE = 'Special:TrackingCategories';	const BACKLINK_TITLE = 'Tracking categories';	const BACKLINK_URL = conf.wgArticlePath.replace('$1', BACKLINK_PAGE);	if ( conf.wgNamespaceNumber !== 14 || conf.wgAction !== 'view' && conf.wgAction !== 'history' || $( '.' + TARGET_SELECTOR + ' a[href="' + BACKLINK_URL + '"]' ).length > 0 ) {		return;	}

const ALLMESSAGES = [ 'broken-file-category', 'cite-tracking-category-cite-error', 'deprecated-self-close-category', 'duplicate-args-category', 'expansion-depth-exceeded-category', 'expensive-parserfunction-category', 'hidden-category-category', 'index-category', 'magiclink-tracking-isbn', 'math-tracking-category-error', 'math-tracking-category-render-error', 'node-count-exceeded-category', 'noindex-category', 'post-expand-template-argument-category', 'post-expand-template-inclusion-category', 'restricted-displaytitle-ignored', 'scribunto-common-error-category', 'scribunto-module-with-errors-category', 'syntaxhighlight-error-category', 'template-loop-category', 'timeline-tracking-category', ];	function addBacklink { // Construct backlink HTML link var backlink = '&lt; ' + mw.html.element( 'a', {			href: BACKLINK_URL,			title: BACKLINK_TITLE,		}, BACKLINK_TITLE );

// Page subtitle const target = '.' + TARGET_SELECTOR;

// If subtitle doesn't exist, create subtitle first if ( $( target ).length === 0) { $( '.' + TARGET_SELECTOR_PARENT ).append(				mw.html.element( 'div', { class: TARGET_SELECTOR, } )			);		} else { backlink += ' | '; }

$( target ).prepend( backlink ); }

mw.loader.using( 'mediawiki.api' ).then( function {		var api = new mw.Api;		var resp;		if ( conf.wgContentLanguage === conf.wgUserLanguage ) {			resp = api.loadMessagesIfMissing( ALLMESSAGES ).then( function  { return ALLMESSAGES.filter( function( key ) {					var msg = mw.message( key );					return msg.exists && msg.plain === conf.wgTitle;				} ); } );		} else {			resp = api.getMessages( ALLMESSAGES, { amlang: conf.wgContentLanguage, } ).then( function( messages ) { return ALLMESSAGES.filter( function( key ) {					var msg = messages[ key ];					return typeof msg !== 'undefined' && msg === conf.wgTitle;				} ); } );		}		resp.then( function( found ) { if ( found.length === 1 ) { addBacklink; }		} );	} ); } );

// Add toggle to hide empty and disabled tracking categories $(function {

var id = 'toggle-empty-tracking-categories'; var conf = mw.config.get( 'wgCanonicalSpecialPageName' ); if (		mw.config.get('wgCanonicalSpecialPageName') !== 'TrackingCategories' ||		$('#' + id).length > 0	) { return; }

$( '#mw-trackingcategories-table > tbody > tr' ).each( function ( _, tr ) {		var td = $( tr ).find( 'td.mw-trackingcategories-name' );		var isDisabled = td.text === 'Category is disabled';		var emptySpans = td.find( '> span:contains("(empty)")' );		var allSpans = td.find( '> span' );		if ( isDisabled || emptySpans.length === allSpans.length ) {			$( tr ).addClass( 'category-is-empty' );		}	} );

mw.hook( 'dev.wds' ).add( function ( wds ) {		var btn = $( ' ', { 'id': id, 'class': 'wds-button empty-categories-toggle', } );		$( '#firstHeading' ).append( btn );		var styles = mw.util.addCSS( '.category-is-empty { display: none; }' );		btn.append( wds.icon( 'eye-small' ) );		btn.click( function ( e ) { styles.disabled = !styles.disabled; var name = !styles.disabled ? 'eye-small' : 'eye-crossed-small'; $( e.currentTarget ).html( wds.icon( name ) ); } );	} );	importArticles( {		type: 'script',		articles: [			'u:dev:MediaWiki:WDSIcons/code.js'		]	} ); } );