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)
        }
      }
    }
  }
})