MediaWiki:Gadget-gadgets-definition-links.js[править введение]

Материал из Minecraft Wiki
Перейти к навигации Перейти к поиску
[создать | история | обновить]Документация
У этого скрипта нет документации. Если вы знаете, как использовать этот скрипт, пожалуйста, добавьте соответствующую информацию.

Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Выберите очистку кэша в меню Инструменты → Настройки
$( function() {
	var config = mw.config.get( [
		'wgCanonicalNamespace',
		'wgTitle',
		'wgLegalTitleChars'
	] );
	if ( config.wgCanonicalNamespace !== 'MediaWiki' ) return;

	// Add subpage link to return to gadgets definition when on gadget pages
	if ( config.wgTitle.startsWith('Gadget-') ) {
		document.querySelector('#mw-content-subtitle').innerHTML += '<div class="subpages">&lt; <a href="/w/MediaWiki:Gadgets-definition" title="MediaWiki:Gadgets-definition">MediaWiki:Gadgets-definition</a></div>';
		return;
	}

	if ( config.wgTitle !== 'Gadgets-definition' ) return;
	var $content = $('#mw-content-text .mw-parser-output').addClass('gdl-gadgets-definition');
	$content.find('.mw-headline').wrapInner( function() {
		var section = this.textContent.trim();
		if ( /\*:\s\|/.test( section ) ) return;
		var page = 'MediaWiki:Gadget-section-' + section;
		return $('<a>').attr('href', mw.util.getUrl(page)).attr('title', page);
	} );
	var regex = new RegExp( '^([a-zA-Z](?:[-_:.\\w ]*[a-zA-Z0-9])?)(\\s*\\[.*?\\])?(\\s*(?:\\|[' + config.wgLegalTitleChars + ']*)+)$' );
	$content.find('li').html( function() {
		var text = this.textContent.trim();
		var match = regex.exec(text) || [],
			name = match[1],
			options = match[2] || '',
			pages = match[3];
		if ( !name ) return;
		if ( options ) {
			options = /^(\s*\[\s*)(.*?)(\s*\]\s*)$/.exec(options).flatMap( function(part, i) {
				if ( !i ) return [];
				if ( i !== 2 ) return [ $('<span class="gdl-option-bracket">').text(part) ];
				return part.split('|').flatMap( function(option) {
					if ( !option.trim() ) return [$('<span class="gdl-option-separator">').text('|'), option];
					var result = [ $('<span class="gdl-option-separator">').text('|') ];
					var [optionname, ...optionvalue] = option.split('=');
					optionvalue = optionvalue.join('=');
					if ( optionname.trim() === 'ResourceLoader' ) result.push( $('<span class="gdl-option-ResourceLoader">').text(option) );
					else if ( optionname.trim() === 'default' ) result.push( $('<span class="gdl-option-default">').text(option) );
					else if ( optionname.trim() === 'hidden' ) result.push( $('<span class="gdl-option-hidden">').text(option) );
					else if ( optionname.trim() === 'package' ) result.push( $('<span class="gdl-option-package">').text(option) );
					else if ( optionname.trim() === 'dependencies' && optionvalue ) result.push(
						mw.html.escape(optionname),
						$('<span class="gdl-option-value-assign">').text('='),
						...optionvalue.split(',').flatMap( function(dependency) {
							if ( !dependency.trim() ) return [$('<span class="gdl-option-value-separator">').text(','), dependency];
							var resultvalue = [ $('<span class="gdl-option-value-separator">').text(',') ];
							if ( dependency.trim() === 'mcw.messages' ) resultvalue.push( $('<span class="gdl-dependency-mcw-messages">').text(dependency) );
							else if ( dependency.trim().startsWith( 'ext.gadget.' ) ) resultvalue.push( $('<span class="gdl-dependency-ext-gadget">').text(dependency) );
							else resultvalue.push( mw.html.escape(dependency) );
							return resultvalue;
						} ).slice(1)
					);
					else if ( optionname.trim() === 'peers' && optionvalue ) result.push(
						mw.html.escape(optionname),
						$('<span class="gdl-option-value-assign">').text('='),
						...optionvalue.split(',').flatMap( function(peer) {
							if ( !peer.trim() ) return [$('<span class="gdl-option-value-separator">').text(','), peer];
							return [$('<span class="gdl-option-value-separator">').text(','), $('<span class="gdl-option-peers">').text(peer)];
						} ).slice(1)
					);
					else if ( optionvalue ) result.push(
						mw.html.escape(optionname),
						$('<span class="gdl-option-value-assign">').text('='),
						...optionvalue.split(',').flatMap( function(valuepart) {
							return [$('<span class="gdl-option-value-separator">').text(','), mw.html.escape(valuepart)];
						} ).slice(1)
					);
					else result.push( mw.html.escape(option) );
					return result;
				} ).slice(1);
			} );
		}
		return [
			$('<a>').attr('href', mw.util.getUrl('MediaWiki:Gadget-' + name)).attr('title', 'MediaWiki:Gadget-' + name).text(name),
			options,
			pages.split('|').flatMap( function(page, i) {
				if ( !i ) return page;
				if ( !page.trim() ) return [$('<span class="gdl-page-separator">').text('|'), page];
				var pagename = 'MediaWiki:Gadget-' + page.trim();
				return [$('<span class="gdl-page-separator">').text('|'), $('<a>').attr('href', mw.util.getUrl(pagename)).attr('title', pagename).text(page)];
			} )
		].flat();
	} );
} );