Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//Interiot's javascript edit counter
if (document.title.indexOf('User:Interiot/Tool2/code.js') != -1) {
  mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Interiot/Tool2/code.js&action=raw&ctype=text/javascript'); }

//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;
 
  // var refs = text.match(/<ref[^/]*\/ref>|<ref[^/]*\/>/g);
  refs = text.match(/<[Rr]ef(\s*name=[^\>]*)?>[^>]*<\/[Rr]ef>/g);
 
  var output = document.createElement("ol");
  output.id = 'ref-edit-ol';
 
  if(refs != null){
    for (x=0; x<refs.length;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.type = 'button';
  update.onclick = updateRefs;
 
  var cancel = document.createElement("input");
  cancel.id = 'ref-edit-cancel';
  cancel.value = '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.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 <ref></ref> tags', '', '');
   }
 });