//<nowiki>
/* Zeigt Differenzen zwischen mehreren IPA-Notierungen
** Link nur einblenden, wenn mindestens zwei Lautschriften auf der Seite existieren
** Differenzen werden gelb markiert, fehlende Zeichen durch ein 'Bullet' gekennzeichnet
*/
// begin namespace: foIpaDiff
(function( _public, $, undefined ) {
var pAusdl = {};
var lsAll = {};
var bullet = '•';
var ipaCount = 0;
_public.init = function ()
{
lsAll = $("H2,H3,SPAN.ipa");
for (var i = 0; i < lsAll.length; i++) {
if (lsAll[i].nodeName == 'SPAN' && lsAll[i].childElementCount == 0) { // Reimlautschrift nicht mitzählen
ipaCount++;
}
}
if (ipaCount > 1) {
var pAus = $("p[title='Phonetik']");
pAusdl = $(pAus).nextAll("DL");
if (pAusdl.length > 0) {
$(pAus).append(' ','<a class="noprint foIpaDiff" href="#" onclick="foIpaDiff.fLinks()'+';return false;">'+'IPA-Δ</a>');
}
$.get(buildUrl2("Vorlage:IpaDiff","&action=raw&maxage=0"), handleResponse);
}
}
_public.fLinks = function () {
var txt = [];
var info = [];
var t = '';
var maxlen = 0;
var sprache = '';
var wortart = '';
var diff = document.getElementById("IpaDiff");
var span = document.getElementById("IpaDiffClose");
span.onclick = function() {
diff.style.display = "none";
};
window.onclick = function(event) {
if (event.target == diff) {
diff.style.display = "none";
}
};
for (var i = 0; i < lsAll.length; i++) {
if (lsAll[i].nodeName == 'H2') { // [Bearbeiten]-Links entfernen und Wortwiederholung vermeiden
sprache = lsAll[i].innerText.replace(/\[.*/,'').replace(/.*\(/,'(');
} else if (lsAll[i].nodeName == 'H3') {
wortart = lsAll[i].innerText.replace(/\[.*/,'');
} else if (lsAll[i].childElementCount == 0) {
var ls = lsAll[i].innerText;
info.push(sprache + ' ' + wortart);
txt.push(ls);
if (ls.length > maxlen) {
maxlen = ls.length;
}
}
}
// Alle Strings auf gleiche Länge auffüllen
for (var i = 0; i < txt.length; i++) {
while (txt[i].length < maxlen) {
txt[i] += bullet;
}
}
// ggf. fehlende Zeichen mit Bullet markieren
for (var i = 1; i < txt.length; i++) {
for (var s = 0; s < txt[i].length; s++) {
if (txt[i][s] != txt[i-1][s]) {
if (s < txt[i].length - 1) {
if (txt[i][s+1] != txt[i-1][s+1]) {
if (txt[i][txt[i].length - 1] == bullet) {
txt[i] = swapEnd(txt[i],s);
} else if (txt[i-1][txt[i-1].length - 1] == bullet) {
txt[i-1] = swapEnd(txt[i-1],s);
}
}
}
}
}
}
// Differenzen anzeigen
t += makeLine(txt[0], info[0]);
for (var i = 1; i < txt.length; i++) {
var tmp = '';
for (var s = 0; s < txt[i].length; s++) {
if (txt[i][s] == txt[i-1][s]) {
tmp += txt[i][s];
} else {
tmp += '<span style="background-color:yellow">' + txt[i][s] + '</span>';
}
}
t += makeLine(tmp, info[i]);
}
document.getElementById("IpaDiffContent").innerHTML =
"Anzahl Lautschriften: " + ipaCount + '<br /><br />' + t;
diff.style.display = "block";
// alert("Anzahl: " + lsAll.length + t);
}
function makeLine(txt,info) {
return '<span style="display:inline-block; min-width:9em">' + txt + '</span> ' + info + '<br />';
}
// i < t.length - 1
function swapEnd(t,i) {
return t.slice(0, i) + t[t.length - 1] + t.slice(i, t.length - 1);
}
function handleResponse(data){
// Layout des Gadgets auf der Seite einblenden
node = document.createElement("DIV");
node.innerHTML = data;
document.getElementById("content").appendChild(node);
}
function addCORS() {
if (window.location.hostname.indexOf(".m.") >= 0) { // mobile site
return "origin=" + window.location.protocol + "//" + window.location.hostname + "&";
}
return "";
}
function getServer() {
var server = mw.config.get("wgServer");
if (window.location.hostname.indexOf(".m.") >= 0) { // mobile site
if (server.indexOf(".m.") < 0) {
return server.replace(".", ".m.");
}
}
return server;
}
function buildApi(t,p) {
return getServer() + mw.config.get("wgScriptPath") + "/api.php?" + addCORS() +
p + mw.util.wikiUrlencode(t);
}
function buildUrl2(t,p) {
return getServer() + mw.config.get("wgScript") + "?title=" + mw.util.wikiUrlencode(t) + p;
}
// end namespace: foIpaDiff
}( window.foIpaDiff = window.foIpaDiff || {}, jQuery ));
if (mw.config.get("wgAction") == "view") {
if (mw.config.get("wgNamespaceNumber") == 0) {
jQuery(document).ready(foIpaDiff.init);
}
}
//</nowiki>