(
function () {
// от версии 1.4 к версии 1.6
// DisambigFIOLib.js
var Version = '1.5-015';
/*
alert('Execution of page\n' + wgTitle + '\n\nMode: ' + wgAction +
'\nwgPageName = ' + wgPageName +
'\nwgNamespaceNumber =' +wgNamespaceNumber);
alert('run of Участник:Менделеевец99/JS/DisambigFIOLib.js');
*/
if (DisambigFIO_alert_no === undefined)
{
// alert("DisambigFIO_alert_no === undefined");
var DisambigFIO_alert_no = true;
} else { /* alert("DisambigFIO_alert_no =" + DisambigFIO_alert_no);*/}
function insDisambigFIO() {
var wpTextbox1 = $('#wpTextbox1');
wpTextbox1.focus();
var v = wpTextbox1.val(), T = mw.config.get('wgTitle');
var startPos = wpTextbox1.selectionStart;
var endPos = wpTextbox1.selectionEnd;
var t = v.substring(startPos, endPos);
alert('Selection text: ' + t);
var re = /^#(перенаправление|REDIRECT)\s*\[\[\S+\]\]/g;
var r = 'not redirect';
if (re.test(v)) r = 'redirect';
alert('вики-код страницы ' + T + ":\n" + 'v=' + v + ":\n" + r);
var txt = Title2DisambigFIO(T);
if (!DisambigFIO_alert_no) {
alert(txt);
}
insertTags(txt, '', '');
var txtSummary = "вики-текст скриптом [[Участник:Менделеевец99/DisambigFIO|DisambigFIO]]";
var wpSummary = document.getElementById('wpSummary');
if (wpSummary) { var Sm = wpSummary.value;
if (Sm.length > 0) Sm = Sm + ', ';
wpSummary.value = Sm + txtSummary;}
}
// Toolbar buttons 26.08.2017
var bName = 'DisambigFIO';
var pToolTip = bName + ' (Дизамбиг персоналий) v.' + Version;
//var sName = 'FIO';
var iconUrl = '//upload.wikimedia.org/wikipedia/commons/4/41/Toolbaricon_regular_D.png';
// (22 × 22 pixels, file size: 513 bytes, MIME type: image/png)
var addOldToolbarButton = function() {
var $toolbar = $( '#gadget-toolbar' );
if ( !$toolbar.length ) {
$toolbar = $( '#toolbar' );
}
$( '<div>' )
.addClass( 'mw-toolbar-editbutton' )
.attr( 'id', 'mw-editbutton-gadget-' + bName )
.attr( 'alt', bName + '-alt' )
.attr( 'title', pToolTip + ' OldToolbar' )
.css( 'background-image', 'url(' + iconUrl + ') ' )
.appendTo( $toolbar )
.on( 'click', insDisambigFIO);
};
var addNewToolbarButton = function() {
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
'section': 'main',
'group': 'format',
'tools': {
'wikilinker': {
label: pToolTip + ' — NewToolbar',
type: 'button',
icon: iconUrl,
action: {
type: 'callback',
execute: function() {
insDisambigFIO();
}
}
}
}
} );
};
if ( $.inArray( mw.config.get( 'wgAction' ), [ 'edit', 'submit' ] ) !== -1 )
{
mw.loader.using( [ 'user.options', 'jquery.textSelection' ], function () {
if ( mw.user.options.get( 'usebetatoolbar' ) === 1 ) {
$.when( mw.loader.using('ext.wikiEditor'),
$.ready).then( addNewToolbarButton );
} else {
mw.loader.using( 'mediawiki.toolbar', function() {
$( addOldToolbarButton );
} );
}
} );
}
// non-specific string functions
function deSplit(Arr, delimeter) {
var ret;
ret = Arr[0];
if (delimeter === undefined) delimeter = ' ';
for (var i = 1; i < Arr.length; i++) ret = ret + delimeter + Arr[i] ;
return ret;
}
function Trim(Text) {
var re = /^\s+|\s+$/g;
return Text.replace(re, '');
}
function NormalizeSpace(Text) {
Text = Trim(Text);
var re = /\s+/g;
return Text.replace(re, ' ');
}
function Words(Text) {
Text = NormalizeSpace(Text);
return Text.split(" ");
}
// wiki-specific string functions
function Title2DisambigFIO(Title) {
var IOF, FIO, wi;
Title = NormalizeSpace(Title);
FIO = Title2FIO(Title); var chk = CheckPageName(FIO);
if (chk !== '') { // Лишние пробелы в имени страницы.
alert(chk); return chk;
}
wi = Title;
if (Title.length > FIO.length) wi = wi + "|" + FIO; // есть уточнение
var FIOc = FIO;
FIO = FIO.replace(', ', ' '); // del comma
var FIOwords = FIO.split(' ');
var c = FIOwords.length;
IOF = FIO2IOF(FIO);
var Msg;
if (c == 1 ) {Msg = "Имя этой страницы состоит из одного слова.\n" +
"Т.е. не может быть в форматах:\n" +
"Фамилия, Имя\n Фамилия, Имя Отчество\n" +
"На страницу не будет добавлен никакой текст.";
/* "'''Санникова''' — женская форма русской фамилии '''" + String.fromCharCode(123, 123)
+"D-l|Санников" + String.fromCharCode(123, 123) + "'''. Известные носительницы:"; */
alert(Msg);
return '';
}
var t2 = '';
if (FIOc.length != FIO.length + 1) {
// нет запятой (одной!) в основной части имени страницы
FIOwords[0] = FIOwords[0] + ',';
FIOc = deSplit(FIOwords);
t2 = redirect(FIOc);
//return t2;
}
var t, tu, au, NL;
var F = FIOwords[0], I = FIOwords[1], UpPage, pPage, pDnPage;
if (c > 2)
//{tu = 'Другие ФИО'; au = [ F, I ]; // было в v1.2
{ tu = 'ФИО'; au = []; //стало в v1.3-001
UpPage = F + ', ' + I; pPage = FIOc; pDnPage = pPage;
t = 'Список полных тёзок'; NL='NL2';
}
else { tu ='Однофамильцы'; au = [ F ]; UpPage = F;
pPage = F + ', ' + I; pDnPage = pPage + " Отчество";
t = 'Список однофамильцев-тёзок'; NL='NL';
}
var txt;
txt = template(tu, au) + "\n" +
"'''" + IOF + ":'''" +
"\n<!-- Перенесите следующую строку вики-текста на страницу [[" + UpPage + "]]" +
"\n* {{" + NL + "|" + wi + "}}" +
"\n и удалите весь этот комментарий -->\n" +
tagize("\n* [[" + pDnPage + " (уточнение)|" + pDnPage + "]] (род. 19??) —— род занятий.\n" ,'onlyinclude') +
"\n" + template(t);
// "\n" + String.fromCharCode(123, 123) + t + String.fromCharCode(125, 125);
var r=[];
r[0]='';
if (t2.length == 0){
txt = t2 + "\n"
+ "<!-- Если должно быть перенаправление, то удалите весь этот комментарий\n"
+ "иначе удалите перенаправление, а этот комментарий раскоментируйте\n"
+ txt
+ "\n -->\n"
}
return txt;
}
function DisambigUp() {
return '';
}
function CheckPageName(Text) {// Возвращает строку пустую если имя без ошибок,
// иначе исправленное имя.
/* var re, ch, chs = '/(),';
for (var i = 0; i < ch.length; i++ ) {
ch = chs.substring(i, i + 1);
re= /'\s?\' + ch + '\s?'/g;
Text = Text.replace(re, ch);
} */
var nb = Text.length;
Text = Text.replace(/\s?\/\s?/g, '/');
Text = Text.replace(/\s?\(\s/g, ' (');
Text = Text.replace(/\s\)/g, ')'); // закрывающая скобка в коце имени страницы
Text = Text.replace(/\s?\,\s?/g, ', ');
var na = Text.length;
if (na !== nb) {alert('В имени страницы есть лишние пробелы,\n' +
'не устраняемые системой.\n\n' +
'Рекомендуемое исправленное \n' +
'страницы будет выведено в окно вики-текста.\n\n' +
'Начните процесс создания страницы заново.');
return Text;} else {return ''}
}
function wikiLink(Page, Text, template) {
if (Page === '') return '';
var ret =Page;
if (Page != Text) ret= ret + '|'+ Text;
if (template === undefined) ret = String.fromCharCode(123, 123) + template + '|' +
ret + String.fromCharCode(125, 125);
return ret;
}
function tagize(Text, Tag) {
if (Tag === undefined) return Text;
if (Tag === '') return Text;
return String.fromCharCode(60) + Tag + '>' + Text + String.fromCharCode(60) + '/' + Tag + '>';
}
function comment(Text) {
return String.fromCharCode(60) + '!--' + Text +'-->';
}
function template(Name,args) {
if (Name === '') return '';
var ret = String.fromCharCode(123, 123) + Name;
if (args === undefined) {
//alert("template:(args !=== undefined");
} else {
for (var i=0; i < args.length; i++) ret = ret + '|' + args[i];
}
return ret + String.fromCharCode(125, 125);
}
function Title2FIO(Title) {// отрезать уточнение
var F, i=Title.indexOf('(');
if (i != -1) {F = Title.substring(0,i);}
else {F = Title;}
return Trim(F);
}
function FIO2IOF(FIO) { var w = Words(FIO), ret = '';
if (w.length > 1) {for (var i = 1; i < w.length; i++) {ret = ret + w[i] + ' ';} }
return ret + w[0];
}
function redirect(Page) {
return '#REDIRECT [[' + Page + ']]';
}
//function isredirect() {
// var txt=('wpTextbox1').value;
// txt.
// return '#REDIRECT [[' + Page + ']]';
//}
}() );