User:JBrenn/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"); 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 &lt;ref&gt;&lt;/ref&gt; 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]; } } addOnloadHook(function {   if(document.forms.editform){     mw.util.addPortletLink('p-tb', 'javascript:editRefs', 'Edit references', 't-edit-refs', 'Edit tags', , );   } });