User:Dr pda/editrefs.js

//This function adds a link to the toolbox which, when clicked, searches the article for

//tags and presents them in textboxes for ease of editing

//To use this function add importScript('User:Dr pda/editrefs.js'); //User:Dr pda/editrefs.js to your monobook.js

//

function editRefs(){

//Hide edit window

var editform = document.getElementById('editform');

editform.style.cssText += 'display:none';

text = document.getElementById('wpTextbox1').value;

//Hack to cope with HTML comments

text = text.replace(/-->/g,"--@#%");

// var refs = text.match(/|/g);

refs = text.match(/<[Rr]ef(\s*name=[^\>]*)?>[^>]*<\/[Rr]ef>/g);

text = text.replace(/--@#%/g,"-->");

var output = document.createElement("ol");

output.id = 'ref-edit-ol';

if(refs != null){

for (x=0; x

//Hack to cope with HTML comments

refs[x] = refs[x].replace(/--@#%/g,"-->");

var ref_textbox = document.createElement("textarea");

ref_textbox.id = 'ref-box-'+x;

var ref_li = document.createElement("li");

ref_li.id = 'ref-li-'+x;

ref_textbox.value = refs[x];

var newlines = refs[x].match(/\n/g);

var lines = (newlines == null) ? 1 : newlines.length+1;

ref_textbox.rows = (lines > refs[x].length/70) ? lines : refs[x].length/70;

ref_textbox.cols = 70;

ref_textbox.style.cssText = 'display:block;';

ref_li.appendChild(ref_textbox);

output.appendChild(ref_li);

}

}

else{

var ref_li = document.createElement("li");

ref_li.id = 'ref-li';

ref_li.innerHTML = 'This article contains no <ref></ref> tags';

output.appendChild(ref_li);

}

var dummy = document.getElementById("editform");

dummy.parentNode.insertBefore(output, dummy);

//Add buttons

var update = document.createElement("input");

update.id = 'ref-edit-update';

update.value = 'Apply changes and preview';

update.title = 'Apply changes and preview';

update.type = 'button';

update.onclick = updateRefs;

var cancel = document.createElement("input");

cancel.id = 'ref-edit-cancel';

cancel.value = 'Cancel and return to edit';

cancel.title = 'Cancel and return to edit';

cancel.type = 'button';

cancel.onclick = returnToEdit;

var reset = document.createElement("input");

reset.id = 'ref-edit-reset';

reset.value = 'Reset fields';

reset.title = 'Reset fields';

reset.type = 'button';

reset.onclick = resetRefs;

if(refs != null){

output.parentNode.insertBefore(update, output.nextSibling);

update.parentNode.insertBefore(cancel, update.nextSibling);

cancel.parentNode.insertBefore(reset, cancel.nextSibling);

}

else{

output.parentNode.insertBefore(cancel, output.nextSibling);

}

}

function updateRefs(){

var startIndex = -1;

for (x=0; x

var newref = document.getElementById('ref-box-'+x).value;

startIndex = text.indexOf(refs[x],startIndex);

//Only update if changed

if(refs[x] != newref){

text = text.substring(-1,startIndex) + newref + text.substring(startIndex + refs[x].length);

}

startIndex = startIndex + newref.length;

}

var textbox = document.getElementById('wpTextbox1');

textbox.value = text;

//returnToEdit();

document.getElementById('wpPreview').click();

}

function returnToEdit(){

//Hide textboxes and buttons

var output = document.getElementById('ref-edit-ol');

output.parentNode.removeChild(output);

var update = document.getElementById('ref-edit-update');

if(update) update.parentNode.removeChild(update);

var cancel = document.getElementById('ref-edit-cancel');

if(cancel) cancel.parentNode.removeChild(cancel);

var reset = document.getElementById('ref-edit-reset');

if(reset) reset.parentNode.removeChild(reset);

//Show edit window

var editform = document.getElementById('editform');

editform.style.cssText = '';

}

function resetRefs(){

for (x=0; x

var ref_textbox = document.getElementById('ref-box-'+x);

ref_textbox.value = refs[x];

}

}

$(function () {

if(document.forms.editform){

mw.util.addPortletLink('p-tb', 'javascript:editRefs()', 'Edit references', 't-edit-refs', 'Edit tags', , );

}

});