Користувач:Максим Підліснюк/refTulbar.js
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
- Opera: натисніть Ctrl-F5
// ____________________________________________________________________________________________
// | |
// | Адаптовано з версії 57779226 додатка refToolbar.js в Рувікі |
// |____________________________________________________________________________________________|
//
// Imported from revision 264412998 as of 2009-01-16T05:53:39 from [[User:Mr.Z-man/refToolbar.js]]
// For a description, see [[User:Mr.Z-man/refToolbar]]
var numforms = 0;
var wikEdAutoUpdateUrl;
mwCustomEditButtons['reftools'] = [refbuttons, 'commons/e/ea/Button_easy_cite.png', 'Додати шаблон цитування']
function refbuttons() {
if ( ! $('#citeselect').length )
$('#editform').prepend(
'<div id="citeselect">'+
'<input type=button value="Web" onclick="citeWeb()" />'+
'<input type=button value="Новина" onclick="citeNews()" />'+
'<input type=button value="Книга" onclick="citeBook()" />'+
'<input type=button value="Стаття" onclick="citeJournal()" />'+
'<input type=button value="Іменована виноска" onclick="citeNamedRef()" />'+
'<input type=button value="Пошук помилок" onclick="dispErrors()" />'+
'<input type=button value="Скасувати" onclick="hideInitial()" /></div>')
else
$('#citeselect').toggle()
}
function hideInitial() {
document.getElementById('citeselect').style.display = 'none';
oldFormHide();
}
function oldFormHide() {
if (numforms != 0) {
document.getElementById('citediv'+numforms).style.display = 'none';
}
if (document.getElementById('errorform') != null) {
document.getElementById('citeselect').removeChild(document.getElementById('errorform'));
}
}
function getTime() {
var time = new Date();
var nowdate = time.getUTCDate();
if (nowdate<10) { nowdate = "0"+ nowdate.toString(); }
var nowmonth = time.getUTCMonth()+1;
if (nowmonth<10) { nowmonth = "0"+ nowmonth.toString(); }
var nowyear = time.getUTCFullYear();
newtime = nowyear + '-' + nowmonth + '-' + nowdate;
return (newtime);
}
function citeWeb() {
citeNewsWeb("cite web");
}
function citeNews() {
citeNewsWeb("cite news");
}
function citeNewsWeb(templatename) {
oldFormHide();
template = templatename;
var legend;
if (template == "cite web") {
legend = "Посилання на джерело з Інтернета";
} else {
legend = "Посилання на новину";
}
newtime = getTime();
numforms++;
form = '<div id="citediv'+numforms+'">'+
'<fieldset><legend>'+legend+'</legend>'+
'<table cellspacing="5">'+
'<input type="hidden" value="'+template+'" id="template">'+
'<tr><td width="120"><label for="url"> URL: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="url"></td>'+
'<td width="120"><label for="title"> Заголовок: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="title"></td></tr>'+
'<tr><td width="120"><label for="last"> Прізвище: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="last"></td>'+
'<td width="120"><label for="first"> Ім\'я: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="first"></td></tr>'+
'<tr><td width="120"><label for="author"> Автор: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="author"></td>'+
'<td width="120"><label for="coauthors"> Співавтори: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="coauthors"></td></tr>'+
'<tr><td width="120"><label for="quote"> Цитата: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="quote"></td>'+
'<td width="120"><label for="date"> Дата публікації: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="date"></td></tr>'+
'<tr><td width="120"><label for="work"> Робота: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="work"></td>'+
'<td width="120"><label for="publisher"> Видавець: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="publisher"></td></tr>'+
'<tr><td width="120"><label for="format"> Формат: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="format"></td>'+
'<td width="120"><label for="description"> Опис: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="description"></td></tr>'+
'<tr><td width="120"><label for="pages"> Сторінки: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="pages"></td>'+
'<td width="120"><label for="lang"> Мова: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="lang"></td></tr>'+
'<tr><td width="120"><label for="accessdate"> Дата доступу: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="accessdate" value="'+ newtime +'"></td>'+
'<td width="120"><label for="refname"> Ім\'я виноски: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="refname"></td></tr>'+
'<tr><td width="120"><label for="archiveurl"> Архівна копія: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="archiveurl"></td>'+
'<td width="120"><label for="archivedate"> Дата архівування: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="archivedate"></td></tr>'+
'</table>'+
'<input type="button" value="Додати" onClick="addcites()">'+
'</fieldset></div>';
document.getElementById('citeselect').innerHTML += form;
}
function citeBook() {
oldFormHide();
template = "книга";
numforms++;
form = '<div id="citediv'+numforms+'">'+
'<fieldset><legend>Посилання на книгу</legend>'+
'<table cellspacing="5">'+
'<input type="hidden" value="'+template+'" id="template">'+
'<tr><td width="120"><label for="автор"> Автор: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="автор"></td>'+
'<td width="120"><label for="частина"> Частина: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="частина"></td></tr>'+
'<tr><td width="120"><label for="заголовок"> Заголовок: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="заголовок"></td>'+
'<td width="120"><label for="оригінал"> Оригінал: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="оригінал"></td></tr>'+
'<tr><td width="120"><label for="посилання"> Посилання: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="посилання"></td>'+
'<td width="120"><label for="відповідальний"> Відповідальний: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="відповідальний"></td></tr>'+
'<tr><td width="120"><label for="видання"> Видання: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="видання"></td>'+
'<td width="120"><label for="місце"> Місце: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="місце"></td></tr>'+
'<tr><td width="120"><label for="видавництво"> Видавництво: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="видавництво"></td>'+
'<td width="120"><label for="рік"> Рік: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="рік"></td></tr>'+
'<tr><td width="120"><label for="том"> Том: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="том"></td>'+
'<td width="120"><label for="серія"> Серія: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="серія"></td></tr>'+
'<tr><td width="120"><label for="сторінки"> Сторінки: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="сторінки"></td>'+
'<td width="120"><label for="сторінок"> Сторінок: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="сторінок"></td></tr>'+
'<tr><td width="120"><label for="pages"> Pages: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="pages"></td>'+
'<td width="120"><label for="allpages"> All Pages: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="allpages"></td></tr>'+
'<tr><td width="120"><label for="isbn"> ISBN: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="isbn"></td>'+
'<td width="120"><label for="тираж"> Тираж: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="тираж"></td></tr>'+
'<td width="120"><label for="refname"> Ім\'я виноски: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="refname"></td></tr>'+
'</table>'+
'<input type="button" value="Додати" onClick="addcites()">'+
'</fieldset></div>';
document.getElementById('citeselect').innerHTML += form;
}
function citeJournal() {
oldFormHide();
template = "стаття";
numforms++;
form = '<div id="citediv'+numforms+'">'+
'<fieldset><legend>Посилання на статтю</legend>'+
'<table cellspacing="5">'+
'<input type="hidden" value="'+template+'" id="template">'+
'<tr><td width="120"><label for="автор"> Автор: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="автор"></td>'+
'<td width="120"><label for="заголовок"> Заголовок: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="заголовок"></td></tr>'+
'<tr><td width="120"><label for="оригінал"> Оригінал: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="оригінал"></td>'+
'<td width="120"><label for="посилання"> Посилання: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="посилання"></td></tr>'+
'<tr><td width="120"><label for="мова"> Мова: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="мова"></td>'+
'<td width="120"><label for="автор видання"> Автор видання: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="автор видання"></td></tr>'+
'<tr><td width="120"><label for="видавництво"> Видавництво: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="тип"></td></tr>'+
'<tr><td width="120"><label for="місце"> Місце: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="місце"></td>'+
'<td width="120"><label for="видавництво"> Видавництво: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="видавництво"></td></tr>'+
'<tr><td width="120"><label for="рік"> Рік: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="рік"></td>'+
'<td width="120"><label for="том"> Том: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="том"></td></tr>'+
'<tr><td width="120"><label for="випуск"> Випуск: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="випуск"></td>'+
'<td width="120"><label for="номер"> Номер: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="номер"></td></tr>'+
'<tr><td width="120"><label for="сторінки"> Сторінки: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="сторінки"></td>'+
'<td width="120"><label for="issn"> ISSN: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="issn"></td></tr>'+
'<tr><td width="120"><label for="isbn"> ISBN: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="isbn"></td>'+
'<td width="120"><label for="doi"> DOI: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="doi"></td></tr>'+
'<tr><td width="120"><label for="pmid"> PMID: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="pmid"></td>'+
'<td width="120"><label for="bibcode"> Bibcode: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="bibcode"></td></tr>'+
'<tr><td width="120"><label for="arXiv"> arXiv: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="arXiv"></td>'+
'<td width="120"><label for="refname"> Ім\'я виноски: </label></td>'+
'<td width="400"><input type="text" tabindex=1 style="width:100%" id="refname"></td></tr>'+
'</table>'+
'<input type="button" value="Додати" onClick="addcites()">'+
'</fieldset></div>';
document.getElementById('citeselect').innerHTML += form;
}
function addcites(template) {
cites = document.getElementById('citediv'+numforms).getElementsByTagName('input');
var citebegin = '<ref';
var citename = '';
var citeinner = '';
for (var i=0; i<cites.length-1; i++) {
if (cites[i].value != '' && cites[i].id != "refname" && cites[i].id != "template") {
citeinner += "|" + cites[i].id + "=" + cites[i].value.replace(/\|/g, '{{!}}');
}
else if (cites[i].value != '' && cites[i].id == "refname" && cites[i].id != "template") {
citebegin += ' name="' + cites[i].value + '"';
}
else if (cites[i].value != '' && cites[i].id != "refname" && cites[i].id == "template") {
citename = '>{{' + cites[i].value;
}
}
cite = citebegin + citename + citeinner + "}}</ref>";
$('#wpTextbox1')
.textSelection('encapsulateSelection', {'peri':cite})
.focus();
document.getElementById('citediv'+numforms).style.display = 'none';
}
function getNamedRefs(calls) {
if (typeof(wikEdUseWikEd) != 'undefined') {
if (wikEdUseWikEd == true) {
WikEdUpdateTextarea();
}
}
text = document.getElementById('wpTextbox1').value;
var regex;
if (calls) {
regex = /< *?ref +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)) *?\/ *?>/gi //'
} else {
regex = /< *?ref +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)) *?>/gi //'
}
var namedrefs = new Array();
var i=0;
var nr=true;
do {
ref = regex.exec(text);
if(ref != null){
if (ref[5]) {
namedrefs[i] = ref[5];
} else if (ref[3]) {
namedrefs[i] = ref[3];
} else {
namedrefs[i] = ref[6];
}
i++;
} else {
nr=false;
}
} while (nr==true);
return namedrefs;
}
function citeNamedRef() {
namedrefs = getNamedRefs(false);
if (namedrefs == '') {
oldFormHide();
numforms++;
out = '<div id="citediv'+numforms+'"><fieldset>'+
'<legend>Виноски в тексті</legend>В тексті відсутні іменовані виноски (<tt><ref name="Name"></tt>)</fieldset></div>';
document.getElementById('citeselect').innerHTML += out;
}
else {
oldFormHide();
numforms++;
form = '<div id="citediv'+numforms+'">'+
'<fieldset><legend>Виноски в статті:</legend>'+
'<table cellspacing="5">'+
'<tr><td><label for="namedrefs"> Іменовані виноски:</label></td>'+
'<td><select name="namedrefs" id="namedrefs">';
for (var i=0;i<namedrefs.length;i++) {
form+= '<option value="'+namedrefs[i]+'">'+namedrefs[i]+'</option>';
}
form+= '</select>'+
'</td></tr></table>'+
'<input type="button" value="Додати" onClick="addnamedcite()">'+
'</fieldset></div>';
document.getElementById('citeselect').innerHTML += form;
}
}
function addnamedcite() {
name = document.getElementById('citediv'+numforms).getElementsByTagName('select')[0].value;
ref = '<ref name="'+name+'"/>';
$('#wpTextbox1')
.textSelection('encapsulateSelection', {'peri':ref})
.focus();
document.getElementById('citediv'+numforms).style.display = 'none';
}
function getAllRefs() {
if (typeof(wikEdUseWikEd) != 'undefined') {
if (wikEdUseWikEd == true) {
WikEdUpdateTextarea();
}
}
text = document.getElementById('wpTextbox1').value;
regex = /< *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?>((.|\n)*?)< *?\/? *?ref *?>/gim //"
var allrefs = new Array();
var i=0;
var nr=true;
do {
ref = regex.exec(text);
if(ref != null){
if (ref[0].search(/[^\s]{150}/) != -1) {
ref[0] = ref[0].replace(/\|([^\s])/g, "| $1");
}
ref[0] = ref[0].replace(/</g, "<");
ref[0] = ref[0].replace(/>/g, ">");
allrefs[i] = ref[0];
i++;
} else {
nr=false;
}
} while (nr==true);
return allrefs;
}
function NRcallError(namedrefs, refname) {
for (var i=0; i<namedrefs.length; i++) {
if (namedrefs[i] == refname) {
return true;
}
}
return false;
}
function errorCheck() {
var allrefs = getAllRefs();
var allrefscontent = new Array();
var samecontentexclude = new Array();
var sx=0;
var templateexclude = new Array();
var tx=0;
var skipcheck = false;
var namedrefcalls = getNamedRefs(true);
for (var i=0; i<allrefs.length; i++) {
allrefscontent[i] = allrefs[i].replace(/< *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?>((.|\n)*?)< *?\/? *?ref *?>/gim, "$8"); //"
}
var namedrefs = getNamedRefs(false);
var errorlist = new Array();
var q=0;
unclosed = document.getElementById('unclosed').checked;
samecontent = document.getElementById('samecontent').checked;
templates = false //templates = document.getElementById('templates').checked;
repeated = document.getElementById('repeated').checked;
undef = document.getElementById('undef').checked;
for (var i=0; i<allrefs.length; i++) {
if (allrefs[i].search(/< *?\/ *?ref *?>/) == -1 && unclosed) {
errorlist[q] = '<tr><td width="75%"><tt>'+allrefs[i]+'</tt></td>';
errorlist[q] += '<td width="25%">Unclosed <tt><ref></tt> tag</td></tr>';
q++;
}
if (samecontent) {
for (var d=0; d<samecontentexclude.length; d++) {
if (allrefscontent[i] == samecontentexclude[d]) {
skipcheck = true;
}
}
var p=0;
while (p<allrefs.length && !skipcheck) {
if (allrefscontent[i] == allrefscontent[p] && i != p) {
errorlist[q] = '<tr><td width="75%"><tt>'+allrefscontent[i]+'</tt></td>';
errorlist[q] += '<td width="25%">Декілька виносок мають однаковий зміст. Замість них варто використовувати <a href="//uk.wikipedia.org/wiki/Довідка:Виноски#Повторне використання приміток">іменовані виноски</a></td></tr>';
q++;
samecontentexclude[sx] = allrefscontent[i]
sx++;
break;
}
p++;
}
skipcheck=false;
}
if (templates) {
if (allrefscontent[i].search(/\{\{cite/i) == -1 && allrefscontent[i].search(/\{\{citation/i) == -1 && allrefscontent[i].search(/\{\{Comic (book|strip) reference/i) == -1 && allrefscontent[i].search(/\{\{Editorial cartoon reference/i) == -1 && allrefscontent[i].search(/\{\{harv/i) == -1) {
for (var x=0; x<templateexclude.length; x++) {
if (allrefscontent[i] == templateexclude[x]) {
skipcheck = true;
}
}
if (!skipcheck) {
errorlist[q] = '<tr><td width="75%"><tt>'+allrefs[i]+'</tt></td>';
errorlist[q] += '<td width="25%">Does not use a <a href="//en.wikipedia.org/wiki/Wikipedia:Citation_templates">citation template</a></td></tr>';
q++;
templateexclude[tx] = allrefscontent[i];
tx++;
}
skipcheck = false;
}
}
}
if (repeated) {
var repeatnameexclude = new Array();
var rx=0;
for (var k=0; k<namedrefs.length; k++) {
for (var d=0; d<repeatnameexclude.length; d++) {
if (namedrefs[k] == repeatnameexclude[d]) {
skipcheck = true;
}
}
var z=0;
while (z<namedrefs.length && !skipcheck) {
if (namedrefs[k] == namedrefs[z] && k != z) {
errorlist[q] = '<tr><td width="75%"><tt>'+namedrefs[k]+'</tt></td>';
errorlist[q] += '<td width="25%">Повторюються виноски з однаковим <a href="//uk.wikipedia.org/wiki/Довідка:Виноски#Повторне використання приміток">ім\'ям</a></td></tr>';
q++;
repeatnameexclude[rx] = namedrefs[z];
rx++;
break;
}
z++;
}
skipcheck = false;
}
}
if (undef) {
var undefexclude = new Array();
var ux=0;
for (var p=0; p<namedrefcalls.length; p++) {
for (var d=0; d<undefexclude.length; d++) {
if (allrefscontent[i] == undefexclude[d]) {
skipcheck = true;
}
}
if (!skipcheck) {
if (!NRcallError(namedrefs, namedrefcalls[p])) {
errorlist[q] = '<tr><td width="75%"><tt>'+namedrefcalls[p]+'</tt></td>';
errorlist[q] += '<td width="25%"><a href="uk.wikipedia.org/wiki/Довідка:Виноски#Повторне використання приміток">іменована виноска</a> використовується, але її текст не заданий</td></tr>';
q++;
undefexclude[ux] = namedrefs[p];
ux++;
}
}
skipcheck = false;
}
}
if (q > 0) {
return errorlist;
} else {
return 0;
}
}
function dispErrors() {
oldFormHide();
form = '<div id="errorform"><fieldset>'+
'<legend>Пошук помилок</legend>'+
'<b>Шукати:</b><br/>'+
'<input type="checkbox" id="unclosed" /> Незакриті теги <tt><ref></tt><br/>'+
'<input type="checkbox" id="samecontent" /> Виноски з однаковим змістом<br/>'+
'<input type="checkbox" id="repeated" /> Велика кількість однойменних виносок<br/>'+
'<input type="checkbox" id="undef" /> Пусті іменовані дужки<br/>'+
'<input type="button" id="errorchecksubmit" value="Шукати обрані помилки" onclick="doErrorCheck()"/>'+
'</fieldset></div>';
document.getElementById('citeselect').innerHTML += form;
}
function doErrorCheck() {
var errors = errorCheck();
document.getElementById('citeselect').removeChild(document.getElementById('errorform'));
if (errors == 0) {
if (numforms != 0) {
document.getElementById('citediv'+numforms).style.display = 'none';
}
numforms++;
out = '<div id="citediv'+numforms+'"><fieldset>'+
'<legend>Пошук помилок</legend>Помилки не знайдені.</fieldset></div>';
document.getElementById('citeselect').innerHTML += out;
}
else {
if (numforms != 0) {
document.getElementById('citediv'+numforms).style.display = 'none';
}
numforms++;
form = '<div id="citediv'+numforms+'">'+
'<fieldset><legend>Пошук помилок</legend>'+
'<table border="1px">';
for (var i=0; i<errors.length; i++) {
form+=errors[i];
}
form+= '</table>'+
'</fieldset></div>';
document.getElementById('citeselect').innerHTML += form;
}
}