Участник:Stjn/wikifyDisambig.js

// <nowiki>
//
// Do replacements on disambiguation pages ([[user:stjn/wikifyDisambig]])
// Works only as a plugin to wikificator
//
( () => {
	if ( [ 'edit', 'submit' ].includes( mw.config.get( 'wgAction' ) ) === false ) return;
	if ( mw.config.get( 'wgNamespaceNumber' ) !== 0 ) return;
	
	var text = document.querySelector( '#wpTextbox1' ).value.toLowerCase();
	var templateNames = [
		'неоднозначность',
		'многозначность',
		'disambig',
		'disambiguation',
		'дизамбиг',
		'список значений',
		'militarydis',
		'военные части',
		'воинские формирования',
		'воинские части',
		'нисба',
		'одноимённые воинские части',
		'омонимы систематиков',
		'список однофамильцев',
		'список однофамильцев-тезок',
		'список однофамильцев-тёзок',
		'список полных тёзок',
		'список тёзок',
		'список тёзок-однофамильцев',
	];
	
	if ( !templateNames.some( t => text.includes( `{{${ t }` ) ) ) return;
	
	// Set window.wikifyDisambigSummary = null in your common.js to disable
	window.wikifyDisambigSummary = window.wikifyDisambigSummary || '[[user:stjn/wikifyDisambig|оформление страницы значений]]';
	var userSummary = window.wikifyDisambigSummary;
	
	function getRegexpGroup( arr, notCapturing ) {
		return `(?:subst:|подст:|)(${ notCapturing ? '?:' : '' }${ arr.join( '|' ) })`;
	}
	
	function wikifyDisambig( txt, r ) {
		// Delink all links after —
		r( /\[\[.*?\]\].*?—\s*(.*)/gm, ( str, m1 ) => {
			var result = m1.replace( /\[\[([^\|\]]*?)\]\]/g, '$1' )
				.replace( /\[\[([^\|\]]*?)\|(.*?)\]\]/g, '$2' );
			return str.replace( m1, result );
		} );
		
		// Clean up template
		r( /\{\{однофамильцы\|\s*(.*?) \(значения\)\s*{{!}}\s*\1\}\}/gi, '{{однофамильцы|$1 (значения)}}' );
		
		// Remove year wikification (from [[User:A particle for world to form/bookmarklet-undatefy.js]])
		r( /\[\[(\d{4}(?:\sгод)?)\]\]/g, '$1' );
		r( /\[\[\d{4}(?:\sгод)?\|([^\[\]]+)\]\]/g, '$1' );
		
		// Clean up D- markup
		r( /\{\{(D\-)\s*\|\s*('{2,5}|")([^}]*?)\2\s*}}/gi, '$2{{$1|$3}}$2' );
		r( /\{\{(D\-)\s*\|\s*«([^}]*?)»\s*}}/gi, '«{{$1|$3}}»' );
		
		// Switch D- to D-l
		r( /\{\{(D\-)\s*\|\s*\[\[([^\]]*?)\]\]}}/gi, '{{$1l|$2}}' );
		
		// Switch NL2/NL3 to NL
		r( /\{\{([Вв]ложенный список\/|[nN]L)\/?\d\s*\|\s*/g, '{{NL|' );
		
		// Switch D-ll to D-l
		r( /\{\{[Dd]-ll\s*\|\s*/, '{{D-l|' );
		
		// Simplify NL and D-l syntax
		r( /{{([Вв]ложенный список|[nN]L\d?|[Dd]-l)\|(.*?)\|\2}}/g, '{{$1|$2}}' );
		r( /{{([Вв]ложенный список|[nN]L\d?|[Dd]-l)\|(.*?) \(значения\)\|\2}}/g, '{{$1|$2 (значения)}}' );
		
		// Simplify weird syntax
		r( /(\[\[|\{\{D-l*\s*\|)(.*?)(\]\]|\}\})\s*\(значения\)/g, '{{D-l|$2}}' );
		
		// Remove . / ; after NL/D-l
		r( /{{([Вв]ложенный список|[nN]L\d?|[Dd]-l)\|(.*?)}}[\.;]/gi, '{{$1|$2}}' );
		
		// Fix up bold text
		r( /^'''(.*?):'''/gm, `'''$1''':` );
		
		// Remove noinclude
		var changedNoinclude = false;
		r( /([^\n])<noinclude>{{/gi, '$1\n<noinclude>{{' );
		r( /<noinclude>(.*?)<\/noinclude>/gis, ( str, m1 ) => {
			changedNoinclude = true;
			return m1;
		} );
		
		// Replace noinclude with a guess about onlyinclude
		if ( changedNoinclude ) {
			r( /(\*\s*)(.*?)(\n+\{\{)/gs, '<onlyinclude>\n$1$2\n</onlyinclude>$3' );
			r( /(\n+)==\s*Примечания\s*==\s*\n<\/onlyinclude>\n/gi, '\n</onlyinclude>$1== Примечания ==\n' );
		} else {
			// Fix <onlyinclude> to be on separate lines in obvious cases
			r( /:<onlyinclude>/i, ':\n<onlyinclude>' );
			r( /<onlyinclude>\* /i, '<onlyinclude>\n* ' );
			r( /\. *<\/onlyinclude>/i, '.\n</onlyinclude>' );
			r( /<\/onlyinclude> *{{/i, '<\/onlyinclude>\n{{' );
			r( /(==+) *<onlyinclude>/gi, '$1\n<onlyinclude>' );
		}
		
		r( /<\/onlyinclude> *\n+ *{{/, '<\/onlyinclude>\n{{' );

		// Fix list breaks
		r( /\*\s*(.*?)\n\n\s*\*\s*/g, '* $1\n* ' );
		
		// Move templates to a separate line
		r( new RegExp( `([^\\n])\s*{{${ getRegexpGroup( templateNames ) }([|}])`, 'gis' ), '$1\n{{$2$3' );
		
		// Move templates to the end of the page
		r( new RegExp( `(\\n*)\\n({{${ getRegexpGroup( templateNames, true ) }.*?}})(.+)\\n$`, 'gis' ), '$1$3\n\n$2' );
		
		// Remove deprecated parameters and substitute alias templates
		var aliasNames = templateNames.slice( 1, templateNames.length );
		r( new RegExp( `{{${ getRegexpGroup( aliasNames ) }\\|.*?}}`, 'gi' ), '{{$1}}' );
		r( new RegExp( `{{${ getRegexpGroup( aliasNames ) }([|}])`, 'gi' ), '{{subst:$1$2' );
		
		var summary = document.querySelector( '#wpSummary' );
		if ( userSummary && summary && !summary.value.includes( userSummary ) ) {
			summary.value = summary.value.length > 0 ? `${ summary.value }, ${ userSummary }` : userSummary;
			summary.value = summary.value.replace( `*/ , ${ userSummary }`, `*/ ${ userSummary }` );
		}
	}
	
	window.wfPluginsT = window.wfPluginsT || [];
	window.wfPluginsT.push( wikifyDisambig );
} )();
// </nowiki>

 

Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia