Pengguna:Yair rand/rhymesedit.js
Catatan: Selepas menyiarkan perubahan, anda mungkin perlu memintas cache pelayar untuk melihatnya.
- Firefox / Safari: Tahan Shift sambil mengklik Reload, atau tekan sama ada Ctrl-F5 atau Ctrl-R (⌘-R pada Mac)
- Google Chrome: Tekan Ctrl-Shift-R (⌘-Shift-R pada Mac)
- Internet Explorer / Edge: Tahan Ctrl sambil mengklik 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,
numberOfRhymesAdded = 0;
function setUpRhymeAdder(qq,ii)
{
var findNumberOfHeaders = +qq.lastChild.getElementsByTagName('a')[0].href.match(/\d*$/),
qqq;
editor=new Editor();
new AdderWrapper(editor,
{
'createForm':function(){
return qqq=newNode('form',
newNode('label','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;
iiii += wikitext.charAt(iiii) == "\n";
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(){var lis = ii.getElementsByTagName('li'); (lis[iii]||lis[iii-1]).parentNode.insertBefore(temp, lis[iii] || null)},
'undo':function(){var lis = ii.getElementsByTagName('li'); (lis[iii]||lis[iii-1]).parentNode.removeChild(temp)},
'summary':"+rhyme [["+values.rhyme+"]]",
'after_save':function(){
numberOfRhymesAdded++;
document.body.style.cursor = 'wait';
JsMwApi().page(values.rhyme).edit(
function(text, saveFunction, editRes){
var langcode = setUpRhymeAdder.langCode || (new LangMetadata()).cleanLangCode(langname),
rhymehome = mw.config.get("wgTitle").split("/")[1];
if(text.match('=='+langname+'==') && !text.match("\\{\\{rhymes(\\|lang="+langcode+"\\|"+util.escapeRe(rhymehome)+"|\\|"+util.escapeRe(rhymehome)+"\\|lang="+langcode+"|\\|"+util.escapeRe(rhymehome)+")\\}\\}")){
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+"|lang="+langcode+'}}\n'
)
}
if(text){
saveFunction(text, {summary: "+rhyme [["+mw.config.get("wgPageName")+"|"+"-"+rhymehome+"]]"}, function(){
document.body.style.cursor= --numberOfRhymesAdded ? 'wait' : '';
});
}else{
document.body.style.cursor= --numberOfRhymesAdded ? '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 || !ii.nodeName ){
ii = q[i].parentNode.appendChild(newNode('ul', newNode('li', {'style':'display:none;'})));
}
if( ii.nodeName == "H3" ){
ii = ii.parentNode.insertBefore(newNode('ul', newNode('li', {'style':'display:none;'})), ii);
}
try { setUpRhymeAdder(q[i], ii) } catch( e ){ };
}
}
}
})