Bikarhêner:Ghybu/vector.js

Ji Wikibooksê

Zanibe: Piştî weşandinê, ji bo dîtina guhartinan dibe ku hewce be "cache"ya geroka xwe paqij bikî.

  • Firefox / Safari: Pê li Shift û Reload bike an jî Ctrl-F5 an Ctrl-R bike (ji bo Mac: ⌘-R)
  • Google Chrome: Pê li Ctrl-Shift-R (ji bo Mac: ⌘-Shift-R) bike
  • Internet Explorer / Edge: Pê li Ctrl û Refresh bike, an jî Ctrl-F5 bike
  • Opera: Pê li Ctrl-F5 bike.
// copied and modified from english wiktionary user Yair rand
// http://en.wiktionary.org/wiki/User:Yair_rand/rhymesedit.js
// version 1.11

/*
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

*/


// drag and drop von Links fuer Eingabefelder
document.addEventListener("drop", function( event ) {
  event.preventDefault();
  if ( event.target.className == "dragtarget" ) {

    var data = decodeURI(event.dataTransfer.getData("text"));
    var lio = data.lastIndexOf('/');
    if (lio >= 0) {
      data = data.slice(lio + 1);
    }
    lio = data.lastIndexOf('index.php?title=');
    var idx = data.indexOf('&');
    if (lio >= 0 && idx >= 0) {
      data = data.slice(lio + 16,idx);
    }
    idx = data.indexOf('#');
    if (idx > 0) {
      data = data.slice(0,idx);
    }
    event.target.value = data;
  }
}, false);


function buildUrl(t){
 return buildUrl2(t,"&action=raw&maxage=0");
}

function buildUrl2(t,p){
 return mw.config.get("wgServer")+mw.config.get("wgScript")+"?title="+mw.util.wikiUrlencode(t)+p;
}

window.rhymesedit = window.rhymesedit || {};

// declared here, to be called from checkpage or GUI
rhymesedit.after_save_text = function(text, rhymehome, langname){
 var ta=text.split(/(\n==[^=]+?)/);
 var tb=[];
 var i,j;
 for (i=0;i<ta.length;i++){
  if (ta[i].indexOf('{{Sprache|'+langname+'}}')>=0){
   var r2='{{Reim|'+rhymehome+'|'+langname+'}}\n';
   var r1=':{{Reime}} '+r2;
   tb=ta[i].split(/(\n===[^=]+?)/);
   for (j=1;j<tb.length;j++){
    if (tb[j].length==5) continue;
    if (tb[j].indexOf(':{{Reime}}')<0){
     if (tb[j].indexOf(':{{Hörbeispiele}}')>=0){
      tb[j]=tb[j].replace( /(:\{\{Hörbeispiele[^\v]+?\n)/,'$1'+r1);
     } else if (tb[j].indexOf(':{{IPA}}')>=0){
      tb[j]=tb[j].replace( /(:\{\{IPA[^\v]+?\n)/,'$1:{{Hörbeispiele}} {{Audio|}}\n'+r1);
     } else if (tb[j].indexOf('{{Aussprache}}')>=0){
      tb[j]=tb[j].replace( /(\{\{Aussprache[^\v]+?\n)/,'$1:{{IPA}} {{Lautschrift|}}\n:{{Hörbeispiele}} {{Audio|}}\n'+r1);
     } else {
      tb[j]=tb[j].replace( /(\{\{Worttrennung[^\v]+?\n)\{\{/,'$1{{Aussprache}}\n:{{IPA}} {{Lautschrift|}}\n:{{Hörbeispiele}} {{Audio|}}\n'+r1+'\n{{' );
     }
    } else if (tb[j].indexOf('{{Reim|'+rhymehome+'|')<0){
     tb[j]=tb[j].replace( /(\{\{Reim[^\v]+?)\n/,'$1, '+r2);
    }
   }
   ta[i]=tb.join('');
  }                
 }
 return ta.join('');
};


var currAdderText = "";
var ccc;
var numberOfRhymesAdded = 0;


function setUpRhymeAdder(qq,ii)
{

  function getRhymeValue() {
    var r={'name':'rhyme','class':'dragtarget'};
    var m;
    if (m=RegExp('[&?]rhyme=([^&]*)').exec(document.location)) {
      try { 
        r.value=decodeURI(m[1]);
        return r;
      } catch (someError) {}
    }
    return r;
  }

  function toSortOrder(s) {
    var i,
        r='';
    for(i=0;i<s.length;i++){
      switch(s.charAt(i).toLowerCase()){
      case 'ä': r+="aa"; break;
      case 'ö': r+="oo"; break;
      case 'ß': r+="ss"; break;
      case 'ü': r+="uu"; break;
      default:  r+=s.charAt(i).toLowerCase()+' ';
      }
    }
    return r+' '+s;
  }

  function handleRhymeResponse(data) {
    currAdderText = data;
  }

 $.get(buildUrl(mw.config.get("wgPageName")), handleRhymeResponse);

 var wTitle='Reimwort hinzufügen: ';

 var u=ii.previousSibling;
 if (u) u=u.previousSibling; // Header
 if (u) {
  u=$(u).children(".mw-headline");
  if (u.length > 0) {
   wTitle=$(u[0]).text();
   wTitle='Reimwort hinzufügen ('+wTitle+'): ';
  }
 }

var findNumberOfHeaders = +qq.lastChild.getElementsByTagName('a')[0].href.match(/\d*$/),
  qqq;
editor=new Editor();
new AdderWrapper(editor,
  {
  'createForm':function(){
    return qqq=newNode('form',{'class':'noprint'},
      newNode('label',wTitle,
        newNode('input',getRhymeValue())
      ),
      newNode('input',{'type':'submit','value':'+'})
    )},
  'fields':{'rhyme':function(txt,error){
    var found = false;
    var et = editor.getCurrentText();
    if (et.length == 0) {
      et = currAdderText;
    }
    if (et.indexOf('[['+txt+']]') >= 0){
      found = true;
    };

    if (found) {
      return ''||error('Eingabe bereits vorhanden.');
    } else {
     return $.trim(txt)||error('Bitte ein Reimwort eingeben.')}
    }},
  '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, rh;
          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;
              rh=toSortOrder("* [["+values.rhyme+"]]");
              while(wikitext.substr(iiii).match(/^[^=]*\*/)&&toSortOrder(String(wikitext.substr(iiii).match(/.*/)))<rh)
              {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':"+Reim [["+values.rhyme+"]]",
            'after_save':function(){
              numberOfRhymesAdded++;
              document.body.style.cursor = 'wait';
              JsMwApi().page(values.rhyme).edit(
                function(text, saveFunction, editRes){
                  if(editRes.query.pages.hasOwnProperty("-1")) {
                    document.body.style.cursor= --numberOfRhymesAdded ? 'wait' : '';
                    return;
                  }
                  var langcode  = setUpRhymeAdder.langCode || (new LangMetadata()).cleanLangCode(langname);
                  var rhymehome = mw.config.get("wgTitle").split(":")[1].substr(1);

                  text = rhymesedit.after_save_text(text, rhymehome, langname);

                  saveFunction(text, {summary: "+Reim [[" + mw.config.get("wgPageName") + "|-" + rhymehome + "]]"}, function(){
                    document.body.style.cursor= --numberOfRhymesAdded ? 'wait' : '';
                  })
                }
              )
            }
          },temp)
        }
      )
    }
  },qq.parentNode,ii.nextSibling)
}


function setUpListAdder(ul,formnode)
{

  function getRhymeValue() {
    var r={'name':'rhyme','class':'dragtarget'}
    var m;
    if (m=RegExp('[&?]rhyme=([^&]*)').exec(document.location)) {
      try { 
        r.value=decodeURI(m[1]);
        return r;
      } catch (someError) {}
    }
    return r;
  }

  function toSortOrder(s) {
    var i,
        r='';
    s=s.replace(/\[\[/g,'').replace(/\]\]/g,'');
    for(i=0;i<s.length;i++){
      switch(s.charAt(i).toLowerCase()){
      case 'ä': r+="aa"; break;
      case 'ö': r+="oo"; break;
      case 'ß': r+="ss"; break;
      case 'ü': r+="uu"; break;
      default:  r+=s.charAt(i).toLowerCase()+' ';
      }
    }
    return r+String.fromCharCode(1)+s;
  }

  function handleListResponse(data) {
    listAdderText = data;
  }

  $.get(buildUrl(mw.config.get("wgPageName")), handleListResponse);

// ul.li.a.value
 var wHeader, form;
 var wTitle='Einfügen: ';
 var star="*********".substr(0,1+$(ul).parents("ul").length);
 
 var u=formnode.previousSibling
 if (u) u=u.previousSibling; // Header
 if (u) {
  u=$(u).children(".mw-headline");
  if (u.length > 0) {
   wTitle=$(u[0]).text();
   wTitle='Einfügen (unter '+wTitle+'): ';
  }
 }

 var li=ul.firstChild;
 while(li.nodeName!="LI" && li.nextSibling){
  li=li.nextSibling;
 }
 li=li.firstChild;
 if (!li) {return;}

 if (li.nodeType==3){
  wHeader = $.trim(li.nodeValue);
  if (!wHeader.length==0){
   wHeader = $.trim(li.innerText);
  }
  wHeader = star+wHeader;
 }else{
  wHeader = star+"[["+li.firstChild.nodeValue+"]]\n";
 }


 var editor=new Editor();
 new AdderWrapper(editor,
  {
  'createForm':function(){
    return form=newNode(
     'form',
     {'class':'noprint'},
     newNode('label',wTitle, newNode('input',getRhymeValue())),
     newNode('input',{'type':'submit','value':'+'})
    )
   },
  'fields':{'rhyme':function(txt,error){
    var found = false;
    var et = editor.getCurrentText();
    if (et.length == 0) {
      et = currAdderText;
    }
    if (et.indexOf('[['+txt+']]') >= 0){
      found = true;
    };

    if (found) {
      return ''||error('Eingabe bereits vorhanden.')
    } else {
     return $.trim(txt)||error('Bitte etwas eingeben.')}
    }},
  'onsubmit':function(values, render){
    form.getElementsByTagName('input')[0].value = "";
    render('[['+values.rhyme+']]',function(newhtml){
      var temp=newNode('li');temp.innerHTML=newhtml;
      var iii, ih,ihp, rh;
      editor.addEdit({
        'edit':function(wikitext){
          wikitext=wikitext.replace(/\n\* \[/g,'\n*[');
          if(wikitext.charAt(wikitext.length-1) != '\n'){wikitext+='\n';}
          ih=wikitext.indexOf(wHeader);
          do {
           ihp=ih;
           ih=wikitext.lastIndexOf('\n',ihp-1);
           if(ih == 0 && wikitext.charAt(ih+1) == '*'){ihp=ih;}
          } while(ih>0 && wikitext.substr(ih+1,star.length) == star);
          if(wikitext.charAt(ihp) == '\n'){ihp++;}
          
          if(ihp==0 || ihp > 0 && wikitext.charAt(ihp-1) == '\n'){
            iii = 0;
            rh=toSortOrder(star+values.rhyme);
            var notfound=true;
            do {
             var wt=toSortOrder(wikitext.substring(ihp,wikitext.indexOf('\n',ihp+1)));
             if (toSortOrder(wikitext.substring(ihp,wikitext.indexOf('\n',ihp+1))) > rh) {
              notfound=false;
             }else{
              ihp = wikitext.indexOf('\n',ihp+1);
              iii++;
              ihp++;
              if(wikitext.charAt(ihp) != '*'){
               notfound=false;
              }
             }
            } while (notfound);
            wikitext=wikitext.substr(0,ihp)+(wikitext.charAt(ihp-1)==''?'\n':'')
                   +star+'[[' + values.rhyme + ']]\n'+wikitext.substr(ihp)
          }

          return wikitext

        },
        'redo':function(){
          var lis = ul.getElementsByTagName('li');
          if(iii>=lis.length){
           ul.appendChild(temp);
          }else{
           ul.insertBefore(temp, lis[iii] || null)
          }
        },
        'undo':function(){
          var lis = ul.getElementsByTagName('li');
          ul.removeChild(temp)
        },
        'summary':"+[["+values.rhyme+"]]"

      },temp)
     }
    )
   }
 },ul.parentNode,formnode)
}

jQuery(window).ready(function(){

  var ns=mw.config.get("wgNamespaceNumber");
  if (ns==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("silbig")!=-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);
        }
        setUpRhymeAdder(q[i], ii);
      }
    }
    $("#mw-content-text h3 + ul").attr( "style", "columns: 7 11em; -moz-columns: 7 11em; -webkit-columns: 7 11em" );
  }

  if((ns==104) && mw.config.get("wgAction")=="view")
  {
   if($("div.jsNoAdd:first").length < 1) {
    var ul=$("div.jsAdd ul").each(function(index, element) {
     setUpListAdder(element,element);
    });
    if(ul.length < 1){
     $("#mw-content-text ul:not(#toc ul)").each(function(index, element) {
      setUpListAdder(element,element);
     });
    }
   }
  }

  if((ns==2||ns==4||ns==102) && mw.config.get("wgAction")=="view")
  {
   $("div.jsAdd ul").each(function(index, element) {
    setUpListAdder(element,element);
   });
   var style = $("div.jsStyle:first");
   if (style.length > 0) {
    $(style[0].dataset.p1).attr( "style", style[0].dataset.p2 );
   }
  } 

  if((ns==14) && mw.config.get("wgAction")=="view")
  {
   var form,node;
   if(mw.config.get("wgTitle").substr(0,23)=="Rückläufige Wörterliste"){
    form=newNode(
     'form',
     {'class':'noprint'},
     newNode('label','Liste starten bei Einträgen, die enden auf: ',
      newNode('input',{'name':'pagefrom','id':'morfegap'})),
     newNode('input',{'type':'button','value':'Los'})
    );

    form.lastChild.onclick=function(){
     var pf=document.getElementById("morfegap");
     var r="";
     for (var i=pf.value.length-1;i>=0;i--){
      r+=pf.value.charAt(i);
     }
     location.href=mw.config.get("wgServer")+mw.config.get("wgScript")
      +"?title="+mw.util.wikiUrlencode(mw.config.get("wgPageName"))
      +"&pagefrom="+mw.util.wikiUrlencode(r);
    };
  	
    $("#mw-pages h3").attr( "dir", "rtl" ).wrapInner("<span dir='ltr'></span>");
    $("#mw-pages ul").attr( "dir", "rtl" );
    $("#mw-pages li").wrapInner("<span dir='ltr'></span>");

   } else {

    form=newNode(
     'form',
     {'class':'noprint'},
     newNode('label','Liste starten bei Einträgen, die beginnen mit: ',
      newNode('input',{'name':'pagefrom','id':'morfegap'})),
     newNode('input',{'type':'button','value':'Los'})
    );

    form.lastChild.onclick=function(){
     var pf=document.getElementById("morfegap");
     location.href=mw.config.get("wgServer")+mw.config.get("wgScript")
      +"?title="+mw.util.wikiUrlencode(mw.config.get("wgPageName"))
      +"&pagefrom="+mw.util.wikiUrlencode(pf.value);
    };
   }

   node=document.getElementById("mw-content-text");
   node.parentNode.insertBefore(form,node);

   $('#morfegap').keypress(function (e) {
    if (e.which == 13) {
     form.lastChild.onclick();
     return false;
    }
   });

  }

  // inputboxextension
  if((ns==2||ns==4) && mw.config.get("wgAction")=="view")
  {
    var ibeid;
    var ibewidth;

    $(".inputboxextension tr").each(function(index) {

      var tf = $( this.firstElementChild ).text();
      var tl = $( this.lastElementChild ).text();
      if (index % 5 == 0) {  // id und width auslesen
        ibeid = tf;
        ibewidth = tl;
      } else if (index % 5 == 1) {  // inputbox ermitteln und in tabelle einpacken
        $("#"+ibeid + " .createboxInput")
        .wrap('<table><tr><td></td></tr></table>')
        .parent().before('<td>'+ tf +'</td>')
        .after('<td>'+ tl +'</td>');
      } else if (tf.substr(0,3) != "{{{") {  // weitere parameterinputfelder anfügen
        $("#"+ibeid + " tr:last")
        .after('<tr><td>'+tf+
          '</td><td><input name="preloadparams[]" value="" size="'+ibewidth+
          '" type="text"></td><td>'+ tl +'</td></tr>');
      }

    });
  } 


});