// <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>