Jump to content

User:Magnus Manske/insertref.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Magnus Manske (talk | contribs) at 16:19, 23 March 2009. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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.
if ( wgAction != "submit" && wgAction != "edit" && wgNamespaceNumber == 0 ) {
  addOnloadHook ( init_insertref ) ;
}

function init_insertref () {
  var d = document.getElementById('p-tb');
  var ul = d.getElementsByTagName('ul')[0] ;
  var li = document.createElement('li');
  var a = document.createElement('a');
  a.id = 'insertref_link' ;
  a.href='#';
  a.onclick = insertref_onclick ;

  a.appendChild ( document.createTextNode('Insert reference') ) ;
  li.appendChild ( a ) ;
  ul.appendChild ( li ) ;
}

function getSelText()
{
    var txt = '';
     if (window.getSelection)
    {
        txt = window.getSelection();
             }
    else if (document.getSelection)
    {
        txt = document.getSelection();
            }
    else if (document.selection)
    {
        txt = document.selection.createRange().text;
            }
    return txt ;
}

function insertref_onclick () {
  var txt = getSelText() ;
  if ( txt == '' ) {
    alert ( 'Please select some text first' ) ;
    return ;
  }

  var url = wgServer + wgScript + "?action=raw&title=" + wgTitle ;
  var request =  new XMLHttpRequest();
  request.open("GET", url, false);
  request.send(null);
  var wiki = request.responseText.split(txt) ;

  if ( wiki.length == 1 ) {
    alert ( "Selected text was not found in wiki source text. Please select a different (smaller) part of the text, with no formatting" ) ;
    return ;
  }

  if ( wiki.length > 2 ) {
    alert ( "Selected text was ambiguous. Please select more (unique) text." ) ;
    return ;
  }

  var reference = prompt ( "Enter reference:" , "<ref></ref>" ) ;

  var c = confirm ( "Insert left (OK) or right (CANCEL) of the selection?" ) ;
  if ( c ) wiki = wiki[0] + reference + txt + wiki[1] ;
  else wiki = wiki[0] + txt + reference +  wiki[1] ;

  var a = document.getElementById('insertref_link');

  var f = document.createElement('form') ;
  f.action = wgServer + wgScript + "?action=edit&title=" + wgTitle ;
  f.method='post' ;

  var f_text = document.createElement('input') ;
  f_text.type='hidden' ;
  f_text.name='wpTextbox1' ;
  f_text.value=wiki ;

  var f_diff = document.createElement('input') ;
  f_diff.name = 'wpDiff' ;
  f_diff.type='submit' ;
  f_diff.value='doit' ;

  f.appendChild ( f_text ) ;
  f.appendChild ( f_diff) ;
  a.parentNode.appendChild ( f ) ;

  return false ;
}