Участник:Менделеевец99/JS/DisambigFIOLib.js

(
 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 + ']]';
//}
}() );
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

Kembali kehalaman sebelumnya