Benutzer:Formatierer/liste.js

Aus Wiktionary, dem freien Wörterbuch
//<nowiki>
 
// begin namespace: foListe
(function( _public, $, undefined ) {

//Voreinstellung: arabische Übersetzungen
var regexp=/\*\{\{ar\}\}([\S\s]*?)\n/g;
var ns;
var limit=0;
var tt='';

_public.init = function ()
{

 ns = mw.config.get("wgNamespaceNumber");
  if (ns == 14 || (ns == 4 && mw.config.get("wgArticleId") == 397047) ) {
  var form;

  if (ns==4) {
   form=newNode(
     'form',
     {'class':'noprint'},
     newNode('label','Wortart und Herkunft aus den Einträgen einblenden: '),
     newNode('input',{'type':'button','value':'Los'})
   );
  }

  if (ns==14) {
   form=newNode(
     'form',
     {'class':'noprint'},
     newNode('label','Regulärer Ausdruck für Seitenextrakte: ',
      newNode('input',{'name':'regexppe','id':'idregexppe'})),
     newNode('input',{'type':'button','value':'Los'})
   );
   var exp=mw.util.getParamValue("regexp");
   if(exp && exp.length>0) {
    regexp=new RegExp(exp,"g");
    var pf=document.getElementById("idregexppe");
    if(pf) {
     pf.value = exp;
    }
   }
  }
  
  form.lastChild.onclick=function(){
   var pf=document.getElementById("idregexppe");
   if(pf && pf.value.length>0) {
    regexp=new RegExp(pf.value,"g");
   }
   limit=0;
   tt='';

   if(ns==4){
 
    $("#mw-content-text ul:not(#toc ul) a").each(function(index, element) {
     var t=(element+"").substr((""+element).indexOf("/wiki/")+6);
     if (t.indexOf("action=edit") >= 0) return;
     if (t.indexOf(":") >= 0) return;

     limit50(t,handleResponse4);

    });
    if (tt.length > 0){
     $.get(buildApi(tt),handleResponse4);
    }
    $("#mw-content-text ul:not(#toc ul)").attr( "style", "columns: 1; -moz-columns: 1; -webkit-columns: 1" );
   }

   if(ns==14){
    // Aus drei Spalten eine einzige machen
    $("#mw-pages td h3").unwrap();
    $("#mw-pages > a").each(function(index, element) {
     var repl="&regexp=" + pf.value;
     if (pf.value.length == 0) {
       repl="";
     }
     if (element.href.search(/[?&]regexp=/) >= 0){
      element.href=element.href.replace(RegExp('[&?]regexp=[^&]*'), repl);
     }else{
      element.href=element.href.replace(/&/, repl + "&");
     }
    });

    $("#mw-pages li a").each(function(index, element) {
     var t=(element+"").substr((""+element).indexOf("/wiki/")+6);
     if(t.indexOf("action=edit") >= 0) return;

     limit50(t,handleResponse14);

    });
    if (tt.length > 0){
     $.get(buildApi(tt),handleResponse14);
    }
   }

  };

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

  if(exp && exp.length>0) {
   var pf=document.getElementById("idregexppe");
   if(pf) {
    pf.value = exp;
    form.lastChild.onclick();
   }
  }

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

 }
}


function extract(t,e) {
  var a=e.exec(t);
  if (a && a.length > 1) {
    return a[1];
  }
  return '';
}


function buildApi(t){
 return mw.config.get("wgServer")+mw.config.get("wgScriptPath")+"/api.php?action=query&prop=revisions&format=json&rvprop=content&titles="+t;
}


function limit50(t,func){
 if (limit==0) {
  tt+=t;
 } else {
  tt+="|"+t;
 }
 limit++;

 if (limit==50) {
  $.get(buildApi(tt),func);
  tt='';
  limit=0;
 }
}


function extractStr(txt,left,right,strip)
{
 var i = left.length == 0 ? 0 : txt.indexOf(left);
 if (i>=0) {
  var j = right.length == 0 ? txt.length : txt.indexOf(right,i+left.length);
  if (j>=0) {
   if (typeof strip === "undefined") {
    return txt.substring(i,j+right.length);
   } else {
    switch (strip) {
     case 'L': return txt.substring(i+left.length,j+right.length);
     case 'R': return txt.substring(i,j);
     case 'B': return txt.substring(i+left.length,j);
    }
   }
  }
 }
 return '';
}


function handleResponse4(data) {

 if (data.query !== undefined && data.query.pages !== undefined) {

  for (var w in data.query.pages) {

   regexp=/\{\{Herkunft\}\}\s*\n([\S\s]*?)\n\{\{/g;

   var title=data.query.pages[w].title;
   var titlec=mw.util.wikiUrlencode(title);
   var txt=data.query.pages[w].revisions[0]["*"];

   // das anzuzeigende Extrakt aus der Seite ermitteln
   var lines=txt.split(/\r?\n/);
   var i;
   var ex2='';

   for (i=0;i<lines.length;i++) {
    var ex1=extractStr(lines[i],"===","===",'B');
    if (ex1.length>0 && ex1.indexOf("Übersetzung")<0) {
     ex2 += "<p>"+ex1+"</p>";
    }
    if (lines[i].indexOf("{{Herkunft}}") >= 0) {
     var tmpa = lines.slice(i,lines.length);
     ex1 = extract(tmpa.join('\n'),regexp);
     if (ex1.length == 0) break;

     ex1 = ex1.replace(/\n/g, "<br />");
     if (ex1.length>0) {ex2 += "<dl><dd>"+ex1+"</dd></dl>";}
    }
   }
   if (ex2.length == 0) continue;

   $("#mw-content-text ul:not(#toc ul) a").each(function(index, element) {
    var t=(element+"").substr((""+element).indexOf("/wiki/")+6);

    // Seitenextrakt dem entsprechenden Link zuordnen
    if(titlec==t){
     $( this ).after("<dl><dd>"+ex2+"</dd></dl>");
    }

   });

  }
 }
}


function handleResponse14(data) {

 if (data.query !== undefined && data.query.pages !== undefined) {

  for (var w in data.query.pages) {

   var title=data.query.pages[w].title;
   var titlec=mw.util.wikiUrlencode(title);

   // das anzuzeigende Extrakt aus der Seite ermitteln

   regexp.lastIndex = 0;
   do {
    var ex1 = extract(data.query.pages[w].revisions[0]["*"],regexp);
    if (ex1.length == 0) break;

    ex1 = ex1.replace(/\n/g, "<br />");
    $("#mw-pages li a").each(function(index, element) {
     var t = (element + "").substr((""+element).indexOf("/wiki/") + 6);

     // Seitenextrakt dem entsprechenden Link zuordnen
     if (titlec == t){
      $( this ).parent().append("<dl><dd>" + ex1 + "</dd></dl>");
     }

    });
   } while (ex1.length > 0);
  }
 }
}

 
// end namespace: foListe
}( window.foListe = window.foListe || {}, jQuery ));
 
jQuery(document).ready(foListe.init);
 
//</nowiki>