Jump to content

User:Dr pda/editrefs.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Dr pda (talk | contribs) at 03:04, 25 September 2007 (creating script to edit references (testing)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
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.
 //<pre>
//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 {{subst: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(/<ref(\s*name=\"[^\"]*\")?>[^>]*<\/ref>/g);
 
  var output = document.createElement("ol");
  output.id = 'ref-edit-ol';

  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;
    ref_textbox.rows = (lines > refs[x].length/80) ? lines : refs[x].length/80;
    ref_textbox.cols = 80;
    ref_textbox.style.cssText = 'display:block;';
    ref_li.appendChild(ref_textbox);
    output.appendChild(ref_li);
  }

  var dummy = document.getElementById("toolbar");
  dummy.parentNode.insertBefore(output, dummy.nextSibling);

  //Add buttons
  var update = document.createElement("input");
  update.id = 'ref-edit-update';
  update.value = 'Update refs 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 = 'Undo changes to refs';
  reset.type = 'button';
  reset.onclick = resetRefs;

  output.parentNode.insertBefore(update, output.nextSibling);
  update.parentNode.insertBefore(cancel, update.nextSibling);
  cancel.parentNode.insertBefore(reset,  cancel.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 + 1;
  }

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

  //returnToEdit();
  document.getElementById('wpDiff').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');
  update.parentNode.removeChild(update);
  var cancel = document.getElementById('ref-edit-cancel');
  cancel.parentNode.removeChild(cancel);
  var reset = document.getElementById('ref-edit-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){
     addPortletLink('p-tb', 'javascript:editRefs()', 'Edit references', 't-edit-refs', 'Edit <ref></ref> tags', '', '');
   }
 });

 //</pre>