if ( mw.config.get('wgAction') != "submit" && mw.config.get('wgAction') != "edit" && mw.config.get('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 add_references_section ( s ) {
var n = s.split ( "<references" ) ;
if ( n.length > 1 ) return s ; // Already has <references/>
s = s.split ( "\n=" ) ;
var last = s.pop() ;
n = last.split ( "\n" ) ;
last = "" ;
var added = false ;
while ( n.length > 0 ) {
if ( n[0].substr(0,2) != '{{' && n[0].substr(0,11) != '[[Category:' && n[0].substr(0,11) != '[[category:' ) {
last += n.shift() + "\n" ;
continue ;
}
last += "\n\n== References ==\n<references />\n\n" + n.shift() + "\n" ;
last += n.join ( "\n" ) ;
added = true ;
break ;
}
if ( !added ) last += "\n\n== References ==\n<references />\n" ;
s.push ( last ) ;
s = s.join ( "\n=" ) ;
return s ;
}
function insertref_onclick () {
var txt = getSelText() ;
if ( txt == '' ) {
alert ( 'Please select some text first' ) ;
return ;
}
var url = mw.config.get('wgServer') + mw.config.get('wgScript') + "?action=raw&title=" + mw.config.get('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 ) {
while ( wiki[0] != '' && wiki[0].substr(wiki[0].length-1,1) == '[' ) {
txt = '[' + txt ;
wiki[0] = wiki[0].substr(0, wiki[0].length-1) ;
}
wiki = wiki[0] + reference + txt + wiki[1] ;
} else {
while ( wiki[1] != '' && wiki[1].substr(0,1) == ']' ) {
txt += ']' ;
wiki[1] = wiki[1].substr(1) ;
}
wiki = wiki[0] + txt + reference + wiki[1] ;
}
wiki = add_references_section ( wiki ) ;
var a = document.getElementById('insertref_link');
var f = document.createElement('form') ;
f.action = mw.config.get('wgServer') + mw.config.get('wgScript') + "?action=edit&title=" + mw.config.get('wgTitle') ;
f.method='post' ;
f.style.display = 'none' ;
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='Show changes' ;
f.appendChild ( f_text ) ;
f.appendChild ( f_diff) ;
a.parentNode.appendChild ( f ) ;
f_diff.click() ;
return false ;
}