//This function adds a link to the toolbox which, when clicked, searches the article for <ref></ref>
//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(/<ref[^/]*\/ref>|<ref[^/]*\/>/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<refs.length;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<refs.length;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<refs.length;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 <ref></ref> tags', '', '');
}
});