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', , ); } });