User:Yair rand/editdefinition.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
$(function(){
if(mw.config.get('wgAction')=='view'&&wgNamespaceNumber==0)
{
ols=document.getElementsByTagName('ol')
for(ii=0;ii<ols.length;ii++)
{
lis=ols[ii].getElementsByTagName('li')
for(i=0;i<lis.length;i++)
{
if(lis[i].parentNode.nodeName.toLowerCase()=="ol")
{
makedefsidebox(lis[i])
}

}

}

}
})

function makedefsidebox(q)
{
q.insertBefore(newNode('span',{style:'position:relative;left:-40px;',click:function(){editdefinition(q)}},newNode('img',{src:'//upload.wikimedia.org/wikipedia/commons/e/ea/Pencil.png',style:'position:absolute;'})),q.firstChild)
}

function editdefinition(qq)
{

editor=new Editor()
editor.withCurrentText(function(wikitext){

var findnumberofheaders=findnumberofheaders_(qq)
var findnumberofdefs=findnumberofdefs_(qq)
while(qq.firstChild&&qq.firstChild.nodeName!="DL"&&qq.firstChild.nodeName!="UL")
{qq.removeChild(qq.firstChild)}
var defform
new AdderWrapper(new Editor(), {
'createForm':function(){return defform=newNode('form',{'style':'display:inline;'},
newNode('input',{'name':'definition','size':100,'value':
wikitext.replace(new RegExp(
"(^[\\s\\S]*?((^|\n)=[\\s\\S]*?){"+findnumberofheaders+"}([\\s\\S]*?\n#(?![:*])){"+findnumberofdefs+"}\\s?)"
),'').match(/^.*/)
}),
newNode('input',{type:'submit',value:'Preview'})
)},
'fields':{'definition':function(txt,error){if(txt){return txt}else{return error("Please specify a definition.")}}},
'onsubmit':function(values,render){
render(values.definition,function(newhtml){

var addedspan=newNode('span')
addedspan.innerHTML=newhtml
editor.addEdit({
edit:function(wikitext){
wikitext=wikitext.replace(new RegExp(
"(^[\\s\\S]*?((^|\n)=[\\s\\S]*?){"+findnumberofheaders+"}([\\s\\S]*?\n#(?![:*])){"+findnumberofdefs+"}\\s?).*"),"$1"+values.definition);
ccc=wikitext;
return wikitext},
redo:function(){defform.parentNode.insertBefore(addedspan,defform);defform.style.display="none";},
undo:function(){defform.parentNode.removeChild(addedspan);defform.style.display="inline";},
summary:"def: "+values.definition
},addedspan)


})
 
 
}
}, qq, qq.firstChild)
 
})
 
}

function findnumberofheaders_(tosearchfrom)
{
tosearchfrom=tosearchfrom.parentNode;
while(!tosearchfrom.nodeName.match(/^h\d$/i)){tosearchfrom=tosearchfrom.previousSibling}
return Number(tosearchfrom.firstChild.getElementsByTagName('a')[0].href.match(/\d*$/))
}
function findnumberofdefs_(tosearchfrom)
{
findnumberofdefs=0
while(tosearchfrom){if(tosearchfrom.nodeName.toLowerCase()=="li"){findnumberofdefs+=1};tosearchfrom=tosearchfrom.previousSibling;}
return findnumberofdefs
}