MediaWiki:Gadget-Glossen.js

Aus Wiktionary, dem freien Wörterbuch
//<nowiki>
/* Blendet in Ü-Tabellen fehlende Glossen ein.
*/

"use strict";

// begin namespace: foGlossen
(function( _public, $, undefined ) {

_public.init = function () {

  var parserOutput = document.querySelector("div.mw-parser-output");
  doAllChildren(parserOutput.children);

};


// alle Kind-Elemente durchlaufen
function doAllChildren(children) {

  if (!children) {
    return;
  }

  var ish4 = false;
  var ispBed = false;
  var bedTxt = {};

  for (var i = 0; i < children.length; i++) {
    var n = children[i];

    if (n.nodeName == "SECTION") {
      // in der mobilen Ansicht sind die H2 in Sections unterteilt
      doAllChildren(n.children);
    }

    if (ispBed && n.nodeName == "P") {
      // Bedeutungen vorbei
      ispBed = false;
    }
    if (n.nodeName == "P") {
      if (n.matches("p[title='Sinn und Bezeichnetes (Semantik)']")) { // Bedeutungen
        ispBed = true;
      }
    }
    if (ispBed && n.nodeName == "DL") {
      var dd = n.querySelectorAll("DD");
      for (var j = 0; j < dd.length; j++) {
        var idxbed = getBedKrzl(dd[j]);
        bedTxt[idxbed.idx] = idxbed.txt;
      }
    }
    if (n.nodeName == "H4") {  // gleich folgen Ü-Tabellen
      ish4 = true;
    }
    if (ish4 && n.matches("div.printNav")) { // Ü-Tab, here we are
      var krzl = n.getElementsByClassName("bedeutung");
      if (krzl && krzl[0]) {
        var bedKrzl = krzl[0].innerText;
        var nES = krzl[0].nextElementSibling;
        if (nES && nES.tagName == 'A') {
          nES.insertAdjacentHTML("afterend",
            '<span style="color:#808080"> Glosse fehlt:' + bedTxt[bedKrzl].slice(0,80) + '…</span>');
        } else
        if (nES && nES.innerText.length < 3) {
          nES.innerHTML =
            '<span style="color:#808080">Glosse fehlt:' + bedTxt[bedKrzl].slice(0,84) + '…</span>';

        } else
        if (!nES && bedTxt.hasOwnProperty(bedKrzl)) {
          krzl[0].parentElement.insertAdjacentHTML("beforeend",
            '<span style="color:#808080">Glosse fehlt:' + bedTxt[bedKrzl].slice(0,84) + '…</span>');
        }
      }
    }
    if (n.nodeName == "H3") {  // neues Wort
      ish4 = false;
      ispBed = false;
      bedTxt = {};
    }
  }
}


// Den Text einer Bedeutung ermitteln, dabei ein eventuell am Anfang des Textes
// vorhandenes Bedeutungskürzel separat zurückgeben
function getBedKrzl(element) {
  var txt = '';
  var idx = '';
  var k = 0;

  txt = element.innerText;
  if (txt.length > 0) {
    k = txt.indexOf(']');
    if (k >= 0 && k < 7) {
      idx = txt.slice(1,k);
      txt = txt.slice(k+1);
    }
  }

  return {idx:idx, txt:txt};
}


// end namespace: foGlossen
}( window.foGlossen = window.foGlossen || {}, jQuery ));


if (mw.config.get("wgNamespaceNumber") == 0 && mw.config.get("wgAction") == "view") {
  jQuery(document).ready(foGlossen.init);
}

//</nowiki>