MediaWiki:RefToolbarNoDialogs.js

var numforms = 0;

var wikEdAutoUpdateUrl;

function refbuttons() {

if (mw.toolbar && (document.getElementById('toolbar') || document.getElementById('wikiEditor-section-main'))/* && wikEdAutoUpdateUrl == null*/) {

if (document.getElementById('toolbar')) {

button = document.createElement('a');

button.href = "javascript:easyCiteMain()";

button.title = "Insert citation";

buttonimage = document.createElement('img');

buttonimage.src = "//upload.wikimedia.org/wikipedia/commons/0/00/Button_easy_cite_%281%29.png";

buttonimage.alt = "Insert footnote";

button.appendChild(buttonimage);

document.getElementById('toolbar').appendChild(button);

} else {

button = document.createElement('a');

button.href = "#";

button.title = "Insert citation";

button.id = 'reftoolbar-button';

buttonimage = document.createElement('img');

buttonimage.src = "//upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Curly_Brackets.svg/22px-Curly_Brackets.svg.png";

buttonimage.alt = "Insert citation";

button.classname = "tool tool-button";

buttonimage.style.width = "22px";

buttonimage.style.height = "17px";

buttonimage.style.paddingTop = "5px";

buttonimage.style.paddingLeft = "3px";

button.appendChild(buttonimage);

$('#wikiEditor-section-main .group-insert').append( button );

$(button).click( function() { easyCiteMain(); });

}

if (navigator.userAgent.indexOf('MSIE') == -1) {

citemain = document.createElement('div');

citemain.style.display = 'none';

citemain.setAttribute('Id', 'citeselect');

citemain.appendChild( addOption("citeWeb()", "Cite web") );

citemain.appendChild( addOption("citeBook()", "Cite book") );

citemain.appendChild( addOption("citeJournal()", "Cite journal") );

citemain.appendChild( addOption("citeNews()", "Cite news") );

citemain.appendChild( addOption("citeNamedRef()", "Named ref") );

citemain.appendChild( addOption("dispErrors()", "Error check") );

citemain.appendChild( addOption("hideInitial()", "Cancel") );

document.getElementById('wpTextbox1').parentNode.insertBefore(citemain, document.getElementById('wpTextbox1'));

}

else {

selection = '

';

document.getElementById('editform').innerHTML = selection + document.getElementById('editform').innerHTML;

}

}

}

function addOption(script, text) {

option = document.createElement('input');

option.setAttribute('type', 'button');

option.setAttribute('onclick', script);

option.setAttribute("value", text);

return option;

}

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 easyCiteMain() {

document.getElementById('citeselect').style.display = '';

}

var months = ['January', 'February', 'March', 'April', 'May', 'June',

'July', 'August', 'September', 'October', 'November', 'December'];

var citeGlobalDateFormat = " ";

function getTime() {

var datestr = '';

if (typeof citeUserDateFormat != 'undefined') {

datestr = citeUserDateFormat;

} else {

datestr = citeGlobalDateFormat;

}

var DT = new Date();

var zmonth = '';

var month = DT.getUTCMonth()+1;

if (month < 10) {

zmonth = "0"+month.toString();

} else {

zmonth = month.toString();

}

month = month.toString();

var zdate = '';

var date = DT.getUTCDate()

if (date < 10) {

zdate = "0"+date.toString();

} else {

zdate = date.toString();

}

date = date.toString()

datestr = datestr.replace('', date);

datestr = datestr.replace('', month);

datestr = datestr.replace('', zdate);

datestr = datestr.replace('', zmonth);

datestr = datestr.replace('', months[DT.getUTCMonth()]);

datestr = datestr.replace('', DT.getUTCFullYear().toString());

return (datestr);

}

function citeWeb() {

citeNewsWeb("cite web");

}

function citeNews() {

citeNewsWeb("cite news");

}

function citeNewsWeb(templatename) {

oldFormHide();

template = templatename;

var legend;

if (template == "cite web") {

legend = "Cite web source";

} else {

legend = "Cite news source";

}

newtime = getTime();

numforms++;

form = '

'+

'

'+legend+''+

'

'+

''+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

''+

'

';

document.getElementById('citeselect').innerHTML += form;

}

function citeBook() {

oldFormHide();

template = "cite book";

numforms++;

form = '

'+

'

Cite book source'+

'

'+

''+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

''+

'

';

document.getElementById('citeselect').innerHTML += form;

}

function citeJournal() {

oldFormHide();

template = "cite journal";

numforms++;

form = '

'+

'

Cite journal source'+

'

'+

''+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

'

'+

''+

'

';

document.getElementById('citeselect').innerHTML += form;

}

function addcites(template) {

cites = document.getElementById('citediv'+numforms).getElementsByTagName('input');

var citebegin = '

var citename = '';

var citeinner = '';

for (var i=0; i

if (cites[i].value != '' && cites[i].id != "refname" && cites[i].id != "template") {

citeinner += "|" + cites[i].id + "=" + cites[i].value;

}

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 + "}}";

$("#wpTextbox1").focus();

insertTags(cite, , );

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 = [];

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 = '

'+

'References in textThere are no named refs (<ref name="Name">) in the text

';

document.getElementById('citeselect').innerHTML += out;

}

else {

oldFormHide();

numforms++;

form = '

'+

'

References in article'+

'

'+

'

'+

'

'+

'

'+

''+

'

';

document.getElementById('citeselect').innerHTML += form;

}

}

function addnamedcite() {

name = document.getElementById('citediv'+numforms).getElementsByTagName('select')[0].value;

ref = '';

$("#wpTextbox1").focus();

insertTags(ref, , );

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 = [];

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

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

if (namedrefs[i] == refname) {

return true;

}

}

return false;

}

function errorCheck() {

var allrefs = getAllRefs();

var allrefscontent = [];

var samecontentexclude = [];

var sx=0;

var templateexclude = [];

var tx=0;

var skipcheck = false;

var namedrefcalls = getNamedRefs(true);

for (var i=0; i

allrefscontent[i] = allrefs[i].replace(/< *?ref( +?name *?= *?(('([^']*?)')|("([^"]*?)")|([^'"\s]*?[^\/]\b)))? *?>((.|\n)*?)< *?\/? *?ref *?>/gim, "$8"); //"

}

var namedrefs = getNamedRefs(false);

var errorlist = [];

var q=0;

unclosed = document.getElementById('unclosed').checked;

samecontent = document.getElementById('samecontent').checked;

templates = document.getElementById('templates').checked;

repeated = document.getElementById('repeated').checked;

undef = document.getElementById('undef').checked;

for (var i=0; i

if (allrefs[i].search(/< *?\/ *?ref *?>/) == -1 && unclosed) {

errorlist[q] = ''+allrefs[i]+'';

errorlist[q] += 'Unclosed <ref> tag';

q++;

}

if (samecontent) {

for (var d=0; d

if (allrefscontent[i] == samecontentexclude[d]) {

skipcheck = true;

}

}

var p=0;

while (p

if (allrefscontent[i] == allrefscontent[p] && i != p) {

errorlist[q] = ''+allrefscontent[i]+'';

errorlist[q] += 'Multiple refs contain this content, a named reference should be used instead';

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

if (allrefscontent[i] == templateexclude[x]) {

skipcheck = true;

}

}

if (!skipcheck) {

errorlist[q] = ''+allrefs[i]+'';

errorlist[q] += 'Does not use a citation template';

q++;

templateexclude[tx] = allrefscontent[i];

tx++;

}

skipcheck = false;

}

}

}

if (repeated) {

var repeatnameexclude = [];

var rx=0;

for (var k=0; k

for (var d=0; d

if (namedrefs[k] == repeatnameexclude[d]) {

skipcheck = true;

}

}

var z=0;

while (z

if (namedrefs[k] == namedrefs[z] && k != z) {

errorlist[q] = ''+namedrefs[k]+'';

errorlist[q] += 'Multiple references are given the same name';

q++;

repeatnameexclude[rx] = namedrefs[z];

rx++;

break;

}

z++;

}

skipcheck = false;

}

}

if (undef) {

var undefexclude = [];

var ux=0;

for (var p=0; p

for (var d=0; d

if (allrefscontent[i] == undefexclude[d]) {

skipcheck = true;

}

}

if (!skipcheck) {

if (!NRcallError(namedrefs, namedrefcalls[p])) {

errorlist[q] = ''+namedrefcalls[p]+'';

errorlist[q] += 'A named reference is used but not defined';

q++;

undefexclude[ux] = namedrefs[p];

ux++;

}

}

skipcheck = false;

}

}

if (q > 0) {

return errorlist;

} else {

return 0;

}

}

function dispErrors() {

oldFormHide();

form = '

'+

'Error checking'+

'Check for:
'+

' Unclosed <ref> tags
'+

' References with the same content
'+

' References not using a citation template
'+

' Multiple references with the same name
'+

' Usage of undefined named references
'+

''+

'

';

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 = '

'+

'Error checkingNo errors found.

';

document.getElementById('citeselect').innerHTML += out;

}

else {

if (numforms != 0) {

document.getElementById('citediv'+numforms).style.display = 'none';

}

numforms++;

form = '

'+

'

Error checking'+

'

';

for (var i=0; i

form+=errors[i];

}

form+= '

'+

'

';

document.getElementById('citeselect').innerHTML += form;

}

}

$( refbuttons );