Pengguna:Bennylin/rhymesedit.js
Catatan: Setelah disimpan, Anda mungkin perlu melewati tembolok peramban web untuk melihat perubahan.
- Firefox/Safari: Tekan dan tahan Shift sembari mengeklik Reload, atau tekan Ctrl-F5 atau Ctrl-R (⌘-R di Mac)
- Google Chrome: Tekan Ctrl-Shift-R (⌘-Shift-R di Mac)
- Internet Explorer / Edge: Tahan Ctrl sembari mengeklik Refresh, atau tekan Ctrl-F5
- Opera: Tekan Ctrl-F5.
/*
Yay, a rhymes editor that automatically updates the entry for the added rhyme.
To do:
*Make less ugly
*Ability to remove/edit rhymes
*Put rhyme template at the bottom of pronunciation section?
*Fix jillion bugs (none of which I'm aware of yet, but I'll find them...)
*Add qualifier button
*/
var ccc
var numberOfRhymesAdded=0
function setUpRhymeAdder(qq,ii)
{
var findNumberOfHeaders = Number(qq.firstChild.getElementsByTagName('a')[0].href.match(/\d*$/));
var qqq
editor=new Editor()
new AdderWrapper(editor,
{
'createForm':function(){
return qqq=newNode('form',
newNode('span','Add new rhyme: '),
newNode('input',{'name':'rhyme'}),
newNode('input',{'type':'submit','value':'Add'})
)},
'fields':{'rhyme':function(txt,error){return txt||error('Please specify a rhyme.')}},
'onsubmit':function(values, render){
var langname = mw.config.get('wgTitle').split(':')[0];
if((new LangMetadata()).cleanLangCode(langname) == langname && !setUpRhymeAdder.langCode){
$.get(mw.config.get('wgServer')+mw.config.get('wgScript')+"?title=Template:langrev/"+langname+"&action=raw",function(c){setUpRhymeAdder.langCode = c})
}
qqq.getElementsByTagName('input')[0].value=""
render('[['+values.rhyme+']]',function(newhtml){
var temp=newNode('li');temp.innerHTML=newhtml;
var iii, iiii;
editor.addEdit({
'edit':function(wikitext){
wikitext=wikitext.replace(/\n\*\[/g,'\n* [')
if(!/Category:.+$/.test(wikitext)){wikitext+="\n"}
iiii=wikitext.indexOf('=');iii=1;
while(iii<findNumberOfHeaders){iiii+=wikitext.substr(iiii+1).search(/\n=/)+1;iii++}
iiii+=wikitext.substr(iiii+1).search(/\*|\n\n|\n[^=\n]*$|\n=/)+1
if(wikitext.charAt(iiii)=="\n"){iiii++}
iii=0
while(wikitext.substr(iiii).match(/^[^=]*\*/)&&String(wikitext.substr(iiii).match(/.*/)).toLowerCase()<"* [["+values.rhyme.toLowerCase()+"]]")
{iiii+=wikitext.substr(iiii).search(/\n(?!\{)|$/)+1;iii++}
wikitext=wikitext.substr(0,iiii)+(wikitext.charAt(iiii-1)==''?'\n':'')+'* [[' + values.rhyme + ']]\n'+wikitext.substr(iiii)
return ccc=wikitext
},
'redo':function(){(ii.getElementsByTagName('li')[iii]||ii.getElementsByTagName('li')[iii-1]).parentNode.insertBefore(temp,ii.getElementsByTagName('li')[iii]||null)},
'undo':function(){(ii.getElementsByTagName('li')[iii]||ii.getElementsByTagName('li')[iii-1]).parentNode.removeChild(temp)},
'summary':"+rhyme [["+values.rhyme+"]]",
'after_save':function(){
numberOfRhymesAdded+=1
document.body.style.cursor='wait'
JsMwApi().page(values.rhyme).edit(
function(text, saveFunction, editRes){
var langcode= setUpRhymeAdder.langCode || (new LangMetadata()).cleanLangCode(langname);
var rhymehome=mw.config.get('wgTitle').split(":")[1].substr(1)
if(text.match('=='+langname+'==') && !text.match("\\{\\{rhymes("+(langcode!="en"?"\\|lang="+langcode:"")+"\\|"+util.escapeRe(rhymehome)+"|\\|"+util.escapeRe(rhymehome)+(langcode!="en"?"\\|lang="+langcode:"")+")\\}\\}")){
if(!String(text.match("=="+langname+"==[\\s\\S]*?(----|$)")).match("=Pronunciation=")){
text=text.replace(RegExp("(=="+langname+"==[\\s\\S]*?(?=\n=+(?=[^=])(?!(Etymology=|Alternative))))"),"$1\n===Pronunciation===\n")
}
text=text.replace(
RegExp('(=='+langname+'==[\\s\\S]*?=+Pronunciation=+[\\s\\S]*?\n(?![\:\*]))'),
'$1* {'+'{rhymes|'+rhymehome+(langcode!="en"?"|lang="+langcode:"")+'}}\n'
)
}
saveFunction(text, {summary: "+rhyme [["+mw.config.get('wgPageName')+"|"+"-"+rhymehome+"]]"}, function(){
document.body.style.cursor=((numberOfRhymesAdded-=1)==0)?'':'wait';
})
}
)
}
},temp)
}
)
}
},qq.parentNode,ii.nextSibling)
}
$(function(){
if(mw.config.get('wgNamespaceNumber')==106 && mw.config.get('wgAction')=="view" && !window.dontLoadRhymesAdder)
{
for(var i=0, q=document.getElementsByTagName('h3');i<q.length;i++)
{
if(q[i].innerHTML.indexOf("syllable")!=-1)
{
var ii=q[i].nextSibling;
while(ii&&(!ii.nodeName||!(ii.nodeName=="UL"||ii.nodeName=="DIV"||ii.nodeName=="H3"))){ii=ii.nextSibling}
if(ii.className=="printfooter"||ii.nodeName=="H3"){
ii=ii.parentNode.insertBefore(newNode('ul',newNode('li',{'style':'display:none;'})),ii);
setUpRhymeAdder(q[i],ii)
}else if(ii.nodeName=="UL"||ii.nodeName=="DIV"){
setUpRhymeAdder(q[i],ii)
}
}
}
}
})