MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Westmärker Wiki
Zur Navigation springen Zur Suche springen
 
(156 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
/* ┌────────────────────────────────────────────────────────┐
 
/* ┌────────────────────────────────────────────────────────┐
 
   │ Das folgende JavaScript wird für alle Benutzer geladen.│
 
   │ Das folgende JavaScript wird für alle Benutzer geladen.│
 +
  │  Zum Testen und für mich speziell gibt es noch        │
 +
  │  Benutzer:Ahnenfan/common.js                          │
 
   ├────────────────────────────────────────────────────────┤
 
   ├────────────────────────────────────────────────────────┤
 
   │  Tabstop zum Kopieren: " "                          │
 
   │  Tabstop zum Kopieren: " "                          │
 
   └────────────────────────────────────────────────────────┘ */
 
   └────────────────────────────────────────────────────────┘ */
  
/* ┌────────────────────────────────────────────────────────┐
+
KTBok = mw.config.get("wgCategories").join().indexOf("Tagebuchfragmente") >= 0;
  │ Für normale Nutzer Verwirrendes ausblenden:            │
 
  ├────────────────────────────────────────────────────────┤
 
  │ a) mangels Diskussion für alle ausblenden:            │
 
  └────────────────────────────────────────────────────────┘ */
 
document.getElementById("left-navigation").style.visibility = "hidden";
 
/* ┌────────────────────────────────────────────────────────┐
 
  │ b) ausblenden, aber nicht für mich:                    │
 
  └────────────────────────────────────────────────────────┘ */
 
if (document.getElementById("p-personal").innerText.indexOf("Ahnenfan") < 0) {
 
var ichbins = false;
 
document.getElementById("p-personal").style.visibility = "hidden";
 
document.getElementById("p-views"  ).style.visibility = "hidden";
 
document.getElementById("p-cactions").style.visibility = "hidden";
 
} else {
 
var ichbins = true;
 
}
 
 
 
KTBok             = false;
 
Artikelkategorien = mw.config.get( 'wgCategories' );
 
for (i=0; i<Artikelkategorien.length; i++) {
 
if (Artikelkategorien[i] == "Tagebuchfragmente") KTBok = true;
 
}
 
 
if (KTBok) {  
 
if (KTBok) {  
 
/* ╔═════════════════════════════════════════════╗
 
/* ╔═════════════════════════════════════════════╗
Zeile 33: Zeile 13:
 
   ║          HAUPTBEREICH FÜR TAGEBUCH          ║
 
   ║          HAUPTBEREICH FÜR TAGEBUCH          ║
 
   ║                                            ║
 
   ║                                            ║
   ╚═════════════════════════════════════════════╝
+
   ╚═════════════════════════════════════════════╝ */
<nowiki>
+
// <nowiki>
Zum Aktivieren der Tagebuchstyles.css und automatischen Eintrag der Kategorie
+
// Zum Aktivieren der Tagebuchstyles.css auf jede Seite oben
auf jede Seite oben
+
//
 +
// {{KTB}}
 +
// oder eine Vorlage, die dies enthält, wie {{Kalendernavigation}} oder {{Zusammenstellung}},
 +
// oder direkt [[Kategorie:Tagebuchfragmente]]
 +
//
 +
// eingeben.
 +
// </nowiki>
  
{{KTB}} oder eine Vorlage, die dies enthält,
+
/* ┌─────────────────────────────────────────┬───────────────┐
 
+
   │ xxx favicon austauschen                 │ GEHT NICHT  
eingeben.
+
   └─────────────────────────────────────────┴───────────────┘ */
</nowiki>
 
*/
 
 
 
/* ┌────────────────────────────────────────────────────────┐
 
   │ favicon austauschen GEHT NICHT                        
 
   └────────────────────────────────────────────────────────┘ */
 
 
// xxx shortcut icon/favicon ist im IE nicht dynamisch änderbar,
 
// xxx shortcut icon/favicon ist im IE nicht dynamisch änderbar,
 
// vgl. https://github.com/HenrikJoreteg/favicon-setter!
 
// vgl. https://github.com/HenrikJoreteg/favicon-setter!
Zeile 54: Zeile 34:
 
{
 
{
 
if (shortcuticon[i].href.indexOf("westlogo.ico") > 0) {
 
if (shortcuticon[i].href.indexOf("westlogo.ico") > 0) {
shortcuticon[i].href = "http://vexilli.net/1HP/Tagebuchfragmente/favicon.ico";
+
shortcuticon[i].href = "https://vexilli.net/1HP/Tagebuchfragmente/favicon.ico";
 
}
 
}
 
} */
 
} */
// 2. Methode: $wgFavicon = "http://vexilli.net/1HP/Tagebuchfragmente/favicon.ico";
+
// 2. Methode: $wgFavicon = "https://vexilli.net/1HP/Tagebuchfragmente/favicon.ico";
 
// 3. Methode: document.body.innerHTML = document.body.innerHTML.replace(/w\/westlogo.ICO/g, "1HP/Tagebuchfragmente/favicon.ico");
 
// 3. Methode: document.body.innerHTML = document.body.innerHTML.replace(/w\/westlogo.ICO/g, "1HP/Tagebuchfragmente/favicon.ico");
  
/* ┌────────────────────────────────────────────────────────┐
+
/* ┌────────────────────────────────────────┬───────────────┐
   │ xxx Wiki oder Seitentitel umbenennen GEHT SO NICHT    
+
   │ xxx Wiki oder Seitentitel umbenennen   │ GEHT SO NICHT │
   └────────────────────────────────────────────────────────┘ */
+
   └────────────────────────────────────────┴───────────────┘ */
// 1.) $wgSitename     = "Westmärker Wiki";
+
// 1.) wgSitename = "Tagebuchfragmente";
 
// 2.) document.head.title.replace(/–/, "– Tagebuch-Fragmente aus dem zweiten Weltkrieg –";
 
// 2.) document.head.title.replace(/–/, "– Tagebuch-Fragmente aus dem zweiten Weltkrieg –";
  
Zeile 69: Zeile 49:
 
   │ Logo mit Link oben links austauschen                  │
 
   │ Logo mit Link oben links austauschen                  │
 
   │ Bild wird in [[Tagebuchstyles.css]] gesetzt            │
 
   │ Bild wird in [[Tagebuchstyles.css]] gesetzt            │
 +
  │ Titel der Site und Link                                │
 +
  │ bildhafte Buttons zu wichtigen begleitenden Artikeln  │
 +
  │              und zu Kriegsgräberorganisationen        │
 
   └────────────────────────────────────────────────────────┘ */
 
   └────────────────────────────────────────────────────────┘ */
 
// KTBLINK zur früheren HTML-Homepage war: "https://vexilli.net/1HP/Tagebuchfragmente/index.html";
 
// KTBLINK zur früheren HTML-Homepage war: "https://vexilli.net/1HP/Tagebuchfragmente/index.html";
 
KTB    = "Tagebuch-Fragmente<br />aus dem<br />zweiten Weltkrieg";
 
KTB    = "Tagebuch-Fragmente<br />aus dem<br />zweiten Weltkrieg";
 
KTBLINK = "/w/" + KTB.split("<br />").join(" ");
 
KTBLINK = "/w/" + KTB.split("<br />").join(" ");
document.getElementById("p-logo").firstChild.href  = KTBLINK;
+
document.getElementsByClassName("mw-wiki-logo")[0].href  = KTBLINK;
document.getElementById("p-logo").firstChild.title = KTB.split("<br />").join("\n");
+
document.getElementsByClassName("mw-wiki-logo")[0].title = KTB.split("<br />").join("\n");
hpdiv = document.createElement("div");
+
// keine Start-Zeile auf dieser Ebene
hpdiv.className   = "zurueck_zur_homepage";
+
hpdiv = document.createElement("div");
hpdiv.style.width = "160px";
+
hpdiv.className = "seitenleistenbutton"; // stets goldener Link in div a
hpp = document.createElement("p");
+
hpdiv.title = "Homepage\nInhaltsverzeichnis – Table of Contents";
hpp.style.fontSize  = "12pt";
+
hpa = document.createElement("a");
hpp.style.fontWeight = "bold";
+
hpa.href = KTBLINK;
hpp.style.fontFamily = "serif";
+
hpp = document.createElement("p");
hpp.style.textAlign  = "center";
+
hpp.style.padding = "36px 0px";
hpa = document.createElement("a");
+
hpp.innerHTML = KTB;
hpa.href      = KTBLINK;
+
hpa.appendChild(hpp);
hpa.innerHTML = KTB;
+
hpdiv.appendChild(hpa);
hpp.appendChild(hpa);
 
hpdiv.appendChild(hpp);
 
 
document.getElementById("mw-panel").appendChild(hpdiv);
 
document.getElementById("mw-panel").appendChild(hpdiv);
 +
// keine Start-Zeile auf dieser Ebene
 +
phdiv = document.createElement("div");
 +
phdiv.className = "seitenleistenbutton";
 +
phdiv.style.backgroundImage = "url(/w/images/logo/sidebar_Vormarsch_Ri._Lemberg.jpg)";
 +
phdiv.title = "Galerie: Fotos, Karten, Dokumente";
 +
pha = document.createElement("a");
 +
pha.href = "/w/Anhang/Tagebuch-Fotos";
 +
php = document.createElement("p");
 +
php.style.lineHeight = "120px";
 +
phspan = document.createElement("span");
 +
phtext = document.createTextNode("Fotos");
 +
phspan.appendChild(phtext);
 +
php.appendChild(phspan);
 +
pha.appendChild(php);
 +
phdiv.appendChild(pha);
 +
document.getElementById("mw-panel").appendChild(phdiv);
 +
// keine Start-Zeile auf dieser Ebene
 +
ktdiv = document.createElement("div");
 +
ktdiv.className = "seitenleistenbutton";
 +
ktdiv.style.backgroundImage = "url(/w/images/logo/sidebar_Karte.jpg)";
 +
ktdiv.title = "Übersichtskarte: Orte und Wege des Autors";
 +
kta = document.createElement("a");
 +
kta.href = "/w/Anhang/Orte/Übersichtskarte_(Orte_und_Wege)";
 +
ktp = document.createElement("p");
 +
ktp.style.lineHeight = "120px";
 +
ktspan = document.createElement("span");
 +
kttext = document.createTextNode("Karte");
 +
ktspan.appendChild(kttext);
 +
ktp.appendChild(ktspan);
 +
kta.appendChild(ktp);
 +
ktdiv.appendChild(kta);
 +
document.getElementById("mw-panel").appendChild(ktdiv);
 +
// keine Start-Zeile auf dieser Ebene
 +
abkdiv = document.createElement("div");
 +
abkdiv.className = "seitenleistenbutton";
 +
abkdiv.style.backgroundImage = "url(/w/images/logo/sidebar_Abk.jpg)";
 +
abkdiv.title = "Abkürzungen — Abbreviations";
 +
abka = document.createElement("a");
 +
abka.href = "/w/Anhang/Abkürzungen";
 +
abkp = document.createElement("p");
 +
abkp.style.lineHeight = "120px";
 +
abkspan = document.createElement("span");
 +
abktext = document.createTextNode("Abk. — Abbr.");
 +
abkspan.appendChild(abktext);
 +
abkp.appendChild(abkspan);
 +
abka.appendChild(abkp);
 +
abkdiv.appendChild(abka);
 +
document.getElementById("mw-panel").appendChild(abkdiv);
 +
// keine Start-Zeile auf dieser Ebene
 +
/* hierdurch entsteht mangels Text ein leerer Fleck
 +
vb1div = document.createElement("div");
 +
vb1div.className = "seitenleistenbutton";
 +
vb1div.style.backgroundImage = "url(/w/images/logo/sidebar_Volksbund.jpg)";
 +
vb1div.title = "Der Volksbund deutsche Kriegsgräberfürsorge\nerfasst, erhält und pflegt die Gräber\nder deutschen Kriegstoten im Ausland";
 +
vb1a = document.createElement("a");
 +
vb1a.href = "/w/Anhang/Abkürzungen";
 +
vb1p = document.createElement("p");
 +
vb1p.style.lineHeight = "120px";
 +
vb1span = document.createElement("span");
 +
vb1text = document.createTextNode("");
 +
vb1span.appendChild(vb1text);
 +
vb1p.appendChild(vb1span);
 +
vb1a.appendChild(vb1p);
 +
vb1div.appendChild(vb1a);
 +
document.getElementById("mw-panel").appendChild(vb1div);
 +
*/
 +
// keine Start-Zeile auf dieser Ebene
 +
vbdiv = document.createElement("div");
 +
vbdiv.className = "seitenleistenbutton";
 +
vbdiv.title = "Der Volksbund deutsche Kriegsgräberfürsorge\nerfasst, erhält und pflegt die Gräber\nder deutschen Kriegstoten im Ausland";
 +
vba = document.createElement("a");
 +
vba.href = "https://www.volksbund.de/";
 +
vbimg = document.createElement("img");
 +
vbimg.src = "/w/images/logo/sidebar_Volksbund.jpg";
 +
vba.appendChild(vbimg);
 +
vbdiv.appendChild(vba);
 +
document.getElementById("mw-panel").appendChild(vbdiv);
 +
// keine Start-Zeile auf dieser Ebene
 +
ardiv = document.createElement("div");
 +
ardiv.className = "seitenleistenbutton";
 +
ardiv.title = "Der historische Verein Ar.kod.M unterstützt Familien\nin Russland und den Staaten der ehemaligen Sowjetunion\nbei der Suche nach Gräbern ihrer Angehörigen in Deutschland";
 +
ara = document.createElement("a");
 +
ara.href = "https://www.kriegsopferdaten.de/";
 +
arimg = document.createElement("img");
 +
arimg.src = "/w/images/logo/sidebar_Ar.kod_.M.jpg";
 +
ara.appendChild(arimg);
 +
ardiv.appendChild(ara);
 +
document.getElementById("mw-panel").appendChild(ardiv);
 +
  
 +
/* ┌────────────────────────────────────────────────────────┐
 +
  │ Beschriftung des Suchfeldes                            │
 +
  └────────────────────────────────────────────────────────┘ */
 +
document.getElementById("searchInput").placeholder = "Tagebuch durchsuchen";
 +
document.getElementById("searchInput").title      = "Tagebuch durchsuchen [alt-shift-f]";
 +
 +
/* ┌─────────────────────────────────────────────────────────────────────────┐
 +
  │ Wichtig: Formulierung der Links im DOCX:                                │
 +
  ├─────────────────────────────────────────────────────────────────────────┤
 +
  │ 1. Der Hash muss statt mit # mit %23 codiert werden, damit die          │
 +
  │    Ansteuerung der Anker von der PDF im Netz aus funktioniert!          │
 +
  │ 2. Dann folgt eine ID, die mit der im Artikel übereinstimmen muss.      │
 +
  │ DER FOLGENDE REST HAT SICH LEIDER ERLEDIGT.                            │
 +
  │ 2. Dann folgt der Bildname ohne Extension.                              │
 +
  │ 3. Das ] hinter einem Datum muss (in den wenigen vorkommenden Fällen)  │
 +
  │    durch - ersetzt werden, weil das auch beim Import der Fotos ins Wiki │
 +
  │    so passiert ist, es aber noch andere Bindestriche gibt,die nicht    │
 +
  │    ersetzt werden dürfen, was eine Automatik unheimlich schwer macht.  │
 +
  ├─────────────────────────────────────────────────────────────────────────┤
 +
  │ Aus Bildnamen automatisch Anker machen wäre optimal, GEHT ABER NICHT    │
 +
  │ DA ERST DER ARTIKEL GELADEN WIRD UND SOLCHE ANKER, WENN ÜBERHAUPT,      │
 +
  │ ZU SPÄT ERSCHEINEN; ALSO ALLE VON HAND SETZEN, wie begonnen;            │
 +
  │ DANN SIND DIE IDs ABER AUCH BELIEBIG                                    │
 +
  └─────────────────────────────────────────────────────────────────────────┘ */
 +
 +
/* ┌─────────────────────────────────────────────────────────────────────────┐
 +
  │ Weil ein Sprung vom Dokument zu einem Bild im Fotoalbum                │
 +
  │ auf die Caption unter dem Bild führt und das Bild oben verschwindet,    │
 +
  │ muss die Seite um die Bildhöhe nach unten geschoben werden              │
 +
  └─────────────────────────────────────────────────────────────────────────┘ */
 +
if(document.title.indexOf("Foto") > 0) window.scrollBy(0, -340);
 +
 +
/* ┌────────────────────────────────────────────────────────┐
 +
  │ Farben für die Galeriebilder                          │
 +
  │ Zuweisung in Tagebuchstyles.css                        │
 +
  └────────────────────────────────────────────────────────┘ */
 +
// Der von Hand eingegebene class-name des <span>-Elements am Anfang der Bildtexte (TgbT usw.)
 +
// muss per Script dem class-name der umgebenden gallerybox hinzugefügt werden.
 +
// Zgl. - nur für Ahnenfan sichtbar - eine zusätzliche Textzeile mit Link zum Galeriebild zum Kopieren
 +
/* Farben-classes:
 +
limegreen solid TgbT Tagebuch (auch wenn D, A oder S zusätzlich zutifft)
 +
limegreen dashed TgbD Dokumente und Objekte
 +
mediumturquoise solid TgbA Album des Autors
 +
mediumturquoise dashed TgbS Sammlung des Autors
 +
gold solid TgbZ Zusätzliche Erwerbungen des Herausgebers
 +
gold dashed TgbK Kartenmontagen/-bearbeitungen des Herausgebers
 +
salmon - zzt nicht in Gebrauch */
  
/* ┌───────────────────────────────────────────────────────────────────────────────────────────────┐
 
  │ Wichtig: Formulierung der Links im DOCX:                                                      │
 
  ├───────────────────────────────────────────────────────────────────────────────────────────────┤
 
  │ 1. Der Hash muss statt mit # mit %23 codiert werden, damit die Ansteuerung der Anker von der  │
 
  │    PDF im Netz aus funktioniert!                                                              │
 
  │ 2. Dann folgt eine ID, die mit der im Artikel übereinstimmen muss.                            │
 
  │ DER FOLGENDE REST HAT SICH LEIDER ERLEDIGT.                                                  │
 
  │ 2. Dann folgt der Bildname ohne Extension.                                                    │
 
  │ 3. Das ] hinter einem Datum muss (in den wenigen vorkommenden Fällen) durch - ersetzt werden, │
 
  │    weil das auch beim Import der Fotos ins Wiki so passiert ist, es aber noch andere Binde-  │
 
  │    striche gibt,die nicht ersetzt werden dürfen, was eine Automatik unheimlich schwer macht.  │
 
  └───────────────────────────────────────────────────────────────────────────────────────────────┘ */
 
/* xxx aus Bildnamen Anker machen GEHT NICHT, DA ERST DER ARTIKEL GELADEN WIRD UND DIESE ANKER, WENN ÜBERHAUPT, ZU SPÄT ERSCHEINEN, ALSO ALLE VON HAND SETZEN; DANN SIND DIE IDs ABER AUCH BELIEBIG
 
 
bild = document.getElementsByClassName("gallerybox");
 
bild = document.getElementsByClassName("gallerybox");
alert(bild.length);
 
 
for (i=0; i<bild.length; i++) {
 
for (i=0; i<bild.length; i++) {
bh = bild[i].firstChild.firstChild.firstChild.firstChild.href;
+
bildspan = bild[i].getElementsByTagName("span");
bi = bh.substring(bh.lastIndexOf(":")+1, bh.lastIndexOf("."));
+
bild[i].className = bild[i].className + " " + bildspan[0].className;
// beim Import erfolgte Änderungen rückgängig machen:
+
 
// NEIN, weil der URL durch Wiki immer von leer auf _ gesetzt wird: bi = bi.replace(/_/g, " ");  
+
link0 = "https://vexilli.net/w/Anhang/Tagebuch-Fotos%23";
bi = bi.replace(/%C3%84/g, "Ä"); // Quelle: https://www.w3schools.com/tags/ref_urlencode.asp
+
hashtag0 = bild[i].getElementsByTagName("span")[0].id;
bi = bi.replace(/%C3%96/g, "Ö"); // nicht mehr geprüft, ob nötig
+
linkmitid0 = link0 + hashtag0;
bi = bi.replace(/%C3%9C/g, "Ü");
+
if (hashtag0 == "") linkmitid0 = "noch ohne ID";
bi = bi.replace(/%C3%9F/g, "ß")
+
linkmitid1 = document.createElement("p");
bi = bi.replace(/%C3%A4/g, "ä");
+
linkmitid1.style.fontSize = "7pt";
bi = bi.replace(/%C3%B6/g, "ö");
+
linkmitid1.style.className = "nurfuermich";
bi = bi.replace(/%C3%BC/g, "ü");
+
linkmitid2 = document.createTextNode(linkmitid0);
bc = bild[i].firstChild.lastChild.firstChild;
+
linkmitid1.appendChild(linkmitid2);
anker = document.createElement("span");
+
bildspan[0].appendChild(linkmitid1);
anker.id = bi;
 
bc.appendChild(anker);
 
}
 
*/
 
  
// ───────────────────────────────────────────────
+
/* ┌───────────────────────────────────────────────────┐
// Weil ein Sprung vom Dokument zu einem Bild im Fotoalbum auf die Caption unter dem Bild führt
+
│ bei § statt Foto ein externes im iframe anzeigen  │
// und das Bild oben verschwindet, muss die Seite um die Bildhöhe nach unten geschoben werden:
+
└───────────────────────────────────────────────────┘ */
if(document.title.indexOf("Foto") > 0) window.scrollBy(0, -340);
+
// Um ein Bild A (z.B. zerstörte Synagoge) im iframe zu zeigen (nur im Bildtext möglich),
// Leider empfängt Wiki keinen referrer von der PDF, daher geht diese genauere Formel nicht:
+
// wird ein beliebiges Bild B (z.B. Große Synagoge) in die gallery gesetzt und zugunsten
//if(document.referrer.indexOf("tagebuch") > 0 && document.referrer.indexOf(".pdf") > 0 && document.title.indexOf("Foto") > 0) window.scrollBy(0, -340);
+
// des Bildes A hierdurch ausgeblendet (class des Bildes B um BILDnichtZEIGEN ergänzen):
 +
bildnicht = bild[i].getElementsByClassName("BILDnichtZEIGEN");
 +
if (bildnicht.length == 1) {
 +
bild[i].getElementsByClassName("thumb")[0].style.display = "none";
 +
}
  
// ───────────────────────────────────────────────
+
/* ┌───────────────────────────────────────────────────┐
// Farben für die Galeriebilder (??? VERSTEH' ICH SCHON NICHT MEHR ????)
+
│ niedriges bzw. sehr breites Foto mit langem Text  │
/*  Farben-classes:
+
└───────────────────────────────────────────────────┘ */
TgbT grün solid  Tagebuch
+
// Um ein niedriges bzw. sehr breites Bild mit besonders langem Text zu zeigen
TgbD grün dotted Dokumenten und Objekten
+
// (seltsam, wie oft das vorkommt), wird seine Höhe statt des Standards verwendet
TgbA blau solid  Album des Autors
+
// (class des Bildes um BILDkleinZEIGEN ergänzen):
TgbS blau dotted Sammlung des Autors
+
bildklein = bild[i].getElementsByClassName("BILDkleinZEIGEN");
TgbZ gelb solid  zusätzliche Erwerbungen des Herausgebers
+
if (bildklein.length == 1) {
TgbK gelb dotted Kartenmontagen/-bearbeitungen des Herausgebers */
+
/* Fundort der echten Bildhöhe */
 +
niedrig = bild[i].getElementsByTagName("img")[0].height;
 +
/* neues, aber wirksames Attribut */
 +
bild[i].getElementsByClassName("thumb")[0].style.height = niedrig;
 +
/* margin steuert sonst die mittige Position, Minimum = 15px: */
 +
bild[i].getElementsByClassName("thumb")[0].firstChild.style.margin = "30px auto";
 +
}
 +
}
  
bild = document.getElementsByClassName("gallerybox");
+
/* ┌────────────────────────────────────────────────────────┐
 +
  │ Farbige Rahmen f. d. Bilder i. d. Tag-für-Tag-Edition  │
 +
  │ genauso wie bei den Galeriebildern                    │
 +
  │ Zuweisung in Tagebuchstyles.css                        │
 +
  └────────────────────────────────────────────────────────┘ */
 +
bild = document.getElementsByClassName("thumbinner");
 
for (i=0; i<bild.length; i++) {
 
for (i=0; i<bild.length; i++) {
bildspan = bild[i].getElementsByTagName("span")
+
bildspan = bild[i].getElementsByTagName("span");
if (bildspan.length == 1) {
+
bild[i].className = bild[i].className + " " + bildspan[0].className;
bild[i].className = bild[i].className + " " + bildspan[0].className;
+
}
  
// nur für mich: zusätzliche Textzeile mit Link zum Galeriebild mittels ID
+
/* ┌────────────────────────────────────────────────────────┐
if (ichbins) {  
+
  │ Anzeige der Links in Anhang/Literatur ähnl. wie b.Fotos│
link0 = "https://vexilli.net/w/Tagebuch-Fotos%23";
+
  └────────────────────────────────────────────────────────┘ */
hashtag0 = bild[i].getElementsByTagName("span")[0].id;
+
// nur für mich und nur bei Literatur: zusätzliche Textzeile mit Link zum Buch mittels ID zum Kopieren
 +
if (document.location.pathname.indexOf("Literatur") > 0) {
 +
buch = document.getElementsByClassName("verzeichnis")[0].getElementsByTagName("td");
 +
for (i=0; i<buch.length; i++) {
 +
buchspan = buch[i].getElementsByTagName("span");
 +
if (buchspan.length > 0) {
 +
link0 = "Anhang/Literatur#";
 +
hashtag0 = buch[i].getElementsByTagName("span")[0].id;
 
linkmitid0 = link0 + hashtag0;
 
linkmitid0 = link0 + hashtag0;
 
if (hashtag0 == "") linkmitid0 = "noch ohne ID";
 
if (hashtag0 == "") linkmitid0 = "noch ohne ID";
 
linkmitid1 = document.createElement("p");
 
linkmitid1 = document.createElement("p");
linkmitid1.style.fontSize = "7pt";
+
linkmitid1.style.fontSize = "7pt";
 +
linkmitid1.style.className = "nurfuermich";
 
linkmitid2 = document.createTextNode(linkmitid0);
 
linkmitid2 = document.createTextNode(linkmitid0);
 
linkmitid1.appendChild(linkmitid2);
 
linkmitid1.appendChild(linkmitid2);
bildspan[0].appendChild(linkmitid1);
+
buch[i].appendChild(linkmitid1);
 
}
 
}
 
}
 
}
Zeile 168: Zeile 291:
 
if (document.location.href.indexOf("w/19") > 0 || document.location.href.indexOf("w/Editorial") > 0 || document.location.href.indexOf("w/Anhang") > 0) {
 
if (document.location.href.indexOf("w/19") > 0 || document.location.href.indexOf("w/Editorial") > 0 || document.location.href.indexOf("w/Anhang") > 0) {
  
// Umbenennung des Seitentitels Jahr/Monat/Tag in Tag. Monat Jahr erfolgt in Vorlage:Kalendernavigation!
+
/* ┌───────────────────────────────────────────────────┐
// Jahr und Monat auch fett wenn nicht automatisch
+
Umbenennung des Seitentitels                     │
kalenderseitenname = document.location.href.split("/"); // 4=J,5=M,6=T
+
└───────────────────────────────────────────────────┘ */
 +
// Jahr/Monat/Tag wird Tag. Monat Jahr
 +
// erfolgt in Vorlage:Kalendernavigation/Basis!
 +
 
 +
/* ┌───────────────────────────────────────────────────┐
 +
Jahr und Monat auch fett wenn nicht automatisch   │
 +
└───────────────────────────────────────────────────┘ */
 +
kalenderseitenname = document.location.href.split("/"); // 4=J,5=M,6=T,7=en usw.
 
document.getElementsByClassName(kalenderseitenname[4])[0].style.fontWeight = "bold";
 
document.getElementsByClassName(kalenderseitenname[4])[0].style.fontWeight = "bold";
 
if (document.getElementsByClassName(kalenderseitenname[4])[1]) {
 
if (document.getElementsByClassName(kalenderseitenname[4])[1]) {
 +
// ?? Welches Element ist eigentlich Jahr[1]/Monat[1]/Tag[1]? Warum nicht [0]? Und wer ist [0]?
 
document.getElementsByClassName(kalenderseitenname[4])[1].style.fontWeight = "bold";
 
document.getElementsByClassName(kalenderseitenname[4])[1].style.fontWeight = "bold";
 
}
 
}
Zeile 179: Zeile 310:
 
if (document.getElementsByClassName(kalenderseitenname[5])[1]) {
 
if (document.getElementsByClassName(kalenderseitenname[5])[1]) {
 
document.getElementsByClassName(kalenderseitenname[5])[1].style.fontWeight = "bold";
 
document.getElementsByClassName(kalenderseitenname[5])[1].style.fontWeight = "bold";
 +
}
 +
}
 +
if (kalenderseitenname[7]) { // wenn eine fremdprachliche Version existiert
 +
document.getElementsByClassName(kalenderseitenname[6])[0].style.fontWeight = "bold";
 +
if (document.getElementsByClassName(kalenderseitenname[6])[1]) {
 +
document.getElementsByClassName(kalenderseitenname[6])[1].style.fontWeight = "bold";
 
}
 
}
 
}
 
}
  
// "Nächstes Kalenderblatt"
+
/* ┌───────────────────────────────────────────────────┐
// per Vorlage zu suchen versuchen
+
"Nächstes Kalenderblatt"                         │
// (derzeit Eingabe in den Aufruf der Vorlage:Kalendernaechste nötig)
+
└───────────────────────────────────────────────────┘ */
 +
// per Vorlage zu suchen versuchen
 +
// (derzeit Eingabe in den Aufruf der Vorlage:Kalendernaechste nötig)
  
// Weiches Trennzeichen (¬ U+00AD, &#x00AD; &#173;),
+
/* ┌───────────────────────────────────────────────────┐
// vorsichtshalber auch das nicht-Zeichen (­¬ 00AC) aus den Rohtexten entfernen,
+
│ Weichen Bindestrich aus den Rohtexten entfernen  │
// weil es blöderweise von WORD mit übergeben wird.
+
└───────────────────────────────────────────────────┘ */
// Formel gem. wiki.selfhtml.org/wiki/JavaScript/Objekte/RegExp
+
// (¬ U+00AD, &#x00AD; &#173; vorsichtshalber auch das nicht-Zeichen ­¬ 00AC)
// 3 Zeichen zur Auswahl; ACHTUNG: AN ERSTER STELLE STEHT DAS ECHTE unsichtbare ZEICHEN!
+
// weil es dummerweise von WORD mit übergeben wird
document.body.innerHTML = document.body.innerHTML.replace(/[­¬¬]/g, "").replace(/\u00AD/g, "").replace(/\u00AC/g, "");
+
// (und nicht ersetzen durch den weichen Bindestrich für Wikitext (&shy;) wg. Suchmöglichkeit).
 +
// Formel gem. wiki.selfhtml.org/wiki/JavaScript/Objekte/RegExp; 3 Zeichen zur Auswahl;
 +
// ACHTUNG: AN ERSTER STELLE in der eckigen Klammer STEHT DAS ECHTE unsichtbare ZEICHEN!
 +
// AN dritter STELLE STEHT ein zuvor nicht erkanntes ZEICHEN!
 +
document.body.innerHTML = document.body.innerHTML.replace(/[­¬¬¬]/g, "").replace(/\u00AD/g, "").replace(/\u00AC/g, "");
  
 
/* ┌────────────────────────────────────────────────────────┐
 
/* ┌────────────────────────────────────────────────────────┐
 
   │ Ende KTB-Kalender-Seiten                              │
 
   │ Ende KTB-Kalender-Seiten                              │
 
   └────────────────────────────────────────────────────────┘ */
 
   └────────────────────────────────────────────────────────┘ */
 +
}
 +
 +
/* ┌────────────────────────────────────────────────────────┐
 +
  │ Inhaltsverzeichn. 1. Spalte (PDF): ganze Zelle klickbar│
 +
  └────────────────────────────────────────────────────────┘ */
 +
gruez = document.getElementsByClassName("grünezelle");
 +
for (i=0; i<gruez.length; i++) {
 +
gruez[i].addEventListener('click', ganze_Zelle_klickbar);
 +
gruez[i].title = gruez[i].firstChild.href.split("/").reverse()[0];
 +
}
 +
function ganze_Zelle_klickbar() {
 +
oeffnePDF = window.open(gruez[i].firstChild.href, "_self");
 +
}
 +
 +
/* ┌────────────────────────────────────────────────────────┐
 +
  │ in [[Anhang/Abkürzungen]]: engl. Spalte 3 u. 4 kursiv  │
 +
  │ und in [[Translation Issues]] solange Seite existiert  │
 +
  └─ ─ ─ ──────────────────────────────────────────────────┘ */
 +
Abkue = document.getElementsByClassName("SpalteDreiUndVierKursiv");
 +
if (Abkue[0]) {
 +
Abkue_tr = Abkue[0].getElementsByTagName("tr");
 +
for (i=0; i<Abkue_tr.length; i++) {
 +
Abkue_td = Abkue_tr[i].getElementsByTagName("td");
 +
if(Abkue_td[2]) { Abkue_td[2].style.fontStyle = "italic"; }
 +
if(Abkue_td[3]) { Abkue_td[3].style.fontStyle = "italic"; }
 +
}
 +
}
 +
 +
/* ┌────────────────────────────────────────────────────────┐
 +
  │ Einfärben der Jahre in Tagebuch-Chronik                │
 +
  └────────────────────────────────────────────────────────┘ */
 +
if (document.getElementById("anzahlzeilen")) { // identifiziert die Chronik-Seite
 +
tabelle = document.getElementsByClassName("ktbchronik"); // davon gab es früher 2, inzwischen habe ich die Kalendernavigation rausgenommen.
 +
for (t=0; t<tabelle.length; t++) {
 +
taglink = tabelle[t].getElementsByTagName("a");
 +
for (i=0; i<taglink.length; i++) {
 +
if (taglink[i].innerText.startsWith('1938') || taglink[i].innerText.startsWith('1942') || taglink[i].innerText.startsWith('1946')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(0deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" }  // 0deg ist sekrecht schraffiert
 +
if (taglink[i].innerText.startsWith('1939') || taglink[i].innerText.startsWith('1943') || taglink[i].innerText.startsWith('1947')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(45deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" }  // schräg rechts aufwärts schraffiert
 +
if (taglink[i].innerText.startsWith('1940') || taglink[i].innerText.startsWith('1944') || taglink[i].innerText.startsWith('1948')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(90deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" }  // waagerecht schraffiert
 +
if (taglink[i].innerText.startsWith('1941') || taglink[i].innerText.startsWith('1945') || taglink[i].innerText.startsWith('1949')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(135deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" } // schräg rechts abwärts schraffiert
 +
}
 +
}
 +
// zweite Zeilen (Geooc2) nachträglich auch färben:
 +
nachzeilen = document.getElementsByClassName("Geooc2");
 +
for (i=0; i<nachzeilen.length; i++) {
 +
nachzeilen[i].style.backgroundImage = nachzeilen[i].parentNode.previousSibling.previousSibling.childNodes[1].style.backgroundImage;
 +
// ...        parentNode.previousSibling  und ...        firstChild undefined!! (Zeilenumbruch?!)
 +
}
 
}
 
}
  
Zeile 203: Zeile 394:
 
}
 
}
  
 +
/* ╔═════════════════════════════════════════════╗
 +
  ║          HAUPTBEREICH FÜR FOOTER            ║
 +
  ╚═════════════════════════════════════════════╝ */
 +
/* ┌─────────────────────────────────────────────┐
 +
  │      ZÄHLER-Startdatum April 2020 setzen    │
 +
  └─────────────────────────────────────────────┘ */
 +
// Aus unerfindlichen Gründen funktioniert dieses replace hier nicht:
 +
// document.getElementById("footer-info-viewcount").innerText.replace("bisher", "seit April 2020");
 +
// Daher so:
 +
zaehlerTXT  = document.getElementById("footer-info-viewcount").innerText.split("bisher");
 +
zaehlerTXT1 = zaehlerTXT[1].split("mal");
 +
zaehlerTXTn = zaehlerTXT[0] + "seit April 2020 " + zaehlerTXT1[0].trim() + "-mal" + zaehlerTXT1[1];
 +
document.getElementById("footer-info-viewcount").innerText = zaehlerTXTn;
 +
 +
/* ┌─────────────────────────────────────────────┐
 +
  │  Impressum so beschriften, Duplikat löschen │
 +
  └─────────────────────────────────────────────┘ */
 +
ueberwestwiki = document.getElementById("footer-places-about");
 +
ueberwestwiki.parentNode.removeChild(ueberwestwiki);
 +
 +
impressum = document.createTextNode("Impressum");
 +
haftungsa = document.getElementById("footer-places-disclaimer");
 +
// 1 Kind: <a>, 1 Enkel: Beschriftung "Haftungsausschluss"
 +
haftungsa.firstChild.replaceChild(impressum, haftungsa.firstChild.firstChild);
 +
 +
/* ╔═════════════════════════════════════════════╗
 +
  ║      ENDE: HAUPTBEREICH FÜR FOOTER        ║
 +
  ╚═════════════════════════════════════════════╝ */
 
/* ╔═════════════════════════════════════════════╗
 
/* ╔═════════════════════════════════════════════╗
 
   ║      TEASER für Tagebuch-Startseite,        ║
 
   ║      TEASER für Tagebuch-Startseite,        ║
 
   ║        aber auch sonst brauchbar          ║
 
   ║        aber auch sonst brauchbar          ║
 
   ╚═════════════════════════════════════════════╝ */
 
   ╚═════════════════════════════════════════════╝ */
// Hier wird das von Vorlage:Teaser vorbereitete Element befüllt:
+
// Hier wird das von Vorlage:Teaser vorbereitete Element befüllt.
 +
// "#teaser" ist dabei ein nicht vorhandenes Sprungziel, wodurch der Bildschirm stehenbleibt.
 +
// (Mit "" lädt die Seite neu, mit "#" sprigt sie nach oben, mit einem echten in der Vorlage
 +
// definierten Sprungziel springt dieses an den oberen Rand, aber nur beim obersten Teaser.)
 
meineteaser = document.getElementsByClassName('teaserclick');
 
meineteaser = document.getElementsByClassName('teaserclick');
 
for (i=0; i<meineteaser.length; i++) {
 
for (i=0; i<meineteaser.length; i++) {
meineteaser[i].innerHTML = "<a style='display: inline' href='#tsprungziel' onclick='javascript:toggleMehr(this)'> <i>mehr lesen/read more</i> </a><a style='display: none' href='#tsprungziel' onclick='javascript:toggleWeniger(this)'> <i>weniger anzeigen/show less</i> </a>";
+
meineteaser[i].innerHTML = "<a style='display: inline' href='#teaser' onclick='javascript:toggleMehr(this)'> <i>mehr lesen/read more</i> </a><a style='display: none' href='#teaser' onclick='javascript:toggleWeniger(this)'> <i>weniger anzeigen/show less</i> </a>";
 
}
 
}
 +
// alte Symbole ► und ◄ zu auffällig, neue Symbole → und ← besser
  
// Diese Funktionen blenden Teaser und Links ein/aus:
+
// Folgende Funktionen blenden Teaser und Links ein/aus:
// (Aufrufe vom vorderen (toggleMehr) und hinteren (toggleWeniger) Button müssen getrennt bleiben,
+
// (Aufrufe vom vorderen (toggleMehr) und hinteren (toggleWeniger) Button müssen
// da die function sonst fehlerhaft arbeitet, wahrscheinlich wegen nicht vorhandenem
+
// getrennt bleiben, da die function sonst fehlerhaft arbeitet, vielleicht
// Objekt nextSibling bzw. previousSibling.)
+
// wegen nicht vorhandenem Objekt nextSibling bzw. previousSibling.)
 
function toggleMehr(control) {
 
function toggleMehr(control) {
toggle1(control); // mehr lesen aus
 
toggle1(control.nextSibling); // weniger lesen an
 
 
toggle1(control.parentNode.previousSibling); // Teaser-Volltext an
 
toggle1(control.parentNode.previousSibling); // Teaser-Volltext an
 +
toggle1(control);                // "mehr lesen" aus
 +
toggle1(control.nextSibling);    // "weniger lesen" an
 
}
 
}
 
function toggleWeniger(control) {
 
function toggleWeniger(control) {
toggle1(control); // mehr lesen an
 
toggle1(control.previousSibling); // weniger lesen aus
 
 
toggle1(control.parentNode.previousSibling); // Teaser-Volltext aus
 
toggle1(control.parentNode.previousSibling); // Teaser-Volltext aus
 +
toggle1(control.previousSibling); // "mehr lesen" aus
 +
toggle1(control);                // "weniger lesen" an
 
}
 
}
 
function toggle1(control1) {
 
function toggle1(control1) {
sessionStorage.scrollTop = control1.scrollTop();
 
 
if (control1.style.display == "none") {
 
if (control1.style.display == "none") {
 
control1.style.display = "inline";
 
control1.style.display = "inline";
Zeile 234: Zeile 456:
 
control1.style.display = "none";
 
control1.style.display = "none";
 
}
 
}
window.scrollTop(sessionStorage.scrollTop);
 
 
}
 
}
  
 +
/* ╔═════════════════════════════════════════════╗
 +
  ║      ENDE: TEASER                          ║
 +
  ╚═════════════════════════════════════════════╝ */
 
/* ╔═════════════════════════════════════════════╗
 
/* ╔═════════════════════════════════════════════╗
 
   ║          Toolbar Customization              ║
 
   ║          Toolbar Customization              ║
Zeile 250: Zeile 474:
 
label: 'Vorlage',
 
label: 'Vorlage',
 
type: 'button',
 
type: 'button',
  icon: '//upload.wikimedia.org/wikipedia/commons/8/86/Wikieditor-template.png',
+
  icon: '/w/images/WikiEditorButtons/Wikieditor-Vorlage.png',
 
action: {
 
action: {
 
type: 'encapsulate',
 
type: 'encapsulate',
Zeile 343: Zeile 567:
 
}
 
}
 
} );
 
} );
}
 
 
/* ╔═════════════════════════════════════════════╗
 
/* ╔═════════════════════════════════════════════╗
 
   ║          Ende: Toolbar Customization        ║
 
   ║          Ende: Toolbar Customization        ║
 
   ╚═════════════════════════════════════════════╝ */
 
   ╚═════════════════════════════════════════════╝ */
 +
}

Aktuelle Version vom 6. September 2023, 17:04 Uhr

/* ┌────────────────────────────────────────────────────────┐
   │ Das folgende JavaScript wird für alle Benutzer geladen.│
   │  Zum Testen und für mich speziell gibt es noch         │
   │  Benutzer:Ahnenfan/common.js                           │
   ├────────────────────────────────────────────────────────┤
   │  Tabstop zum Kopieren: "	"                           │
   └────────────────────────────────────────────────────────┘ */

KTBok = mw.config.get("wgCategories").join().indexOf("Tagebuchfragmente") >= 0;
if (KTBok) { 
/* ╔═════════════════════════════════════════════╗
   ║                                             ║
   ║          HAUPTBEREICH FÜR TAGEBUCH          ║
   ║                                             ║
   ╚═════════════════════════════════════════════╝ */
// <nowiki>
// Zum Aktivieren der Tagebuchstyles.css auf jede Seite oben
//
// {{KTB}}
// oder eine Vorlage, die dies enthält, wie {{Kalendernavigation}} oder {{Zusammenstellung}},
// oder direkt [[Kategorie:Tagebuchfragmente]]
//
// eingeben.
// </nowiki>

/* ┌─────────────────────────────────────────┬───────────────┐
   │ xxx favicon austauschen                 │ GEHT NICHT    │
   └─────────────────────────────────────────┴───────────────┘ */
// xxx shortcut icon/favicon ist im IE nicht dynamisch änderbar,
// vgl. https://github.com/HenrikJoreteg/favicon-setter!
// Deshalb klappten alle diese Methoden nicht:
/* 1. Methode: shortcuticon = document.getElementsByTagName("link");
for (i=0; i<shortcuticon.length; i++)
{
	if (shortcuticon[i].href.indexOf("westlogo.ico") > 0) {
		shortcuticon[i].href = "https://vexilli.net/1HP/Tagebuchfragmente/favicon.ico";
	}
} */
// 2. Methode: $wgFavicon = "https://vexilli.net/1HP/Tagebuchfragmente/favicon.ico";
// 3. Methode: document.body.innerHTML = document.body.innerHTML.replace(/w\/westlogo.ICO/g, "1HP/Tagebuchfragmente/favicon.ico");

/* ┌────────────────────────────────────────┬───────────────┐
   │ xxx Wiki oder Seitentitel umbenennen   │ GEHT SO NICHT │
   └────────────────────────────────────────┴───────────────┘ */
// 1.) wgSitename = "Tagebuchfragmente";
// 2.) document.head.title.replace(/–/, "– Tagebuch-Fragmente aus dem zweiten Weltkrieg –";

/* ┌────────────────────────────────────────────────────────┐
   │ Logo mit Link oben links austauschen                   │
   │ Bild wird in [[Tagebuchstyles.css]] gesetzt            │
   │ Titel der Site und Link                                │
   │ bildhafte Buttons zu wichtigen begleitenden Artikeln   │
   │               und zu Kriegsgräberorganisationen        │
   └────────────────────────────────────────────────────────┘ */
// KTBLINK zur früheren HTML-Homepage war: "https://vexilli.net/1HP/Tagebuchfragmente/index.html";
KTB     = "Tagebuch-Fragmente<br />aus dem<br />zweiten Weltkrieg";
KTBLINK = "/w/" + KTB.split("<br />").join(" ");
document.getElementsByClassName("mw-wiki-logo")[0].href  = KTBLINK;
document.getElementsByClassName("mw-wiki-logo")[0].title = KTB.split("<br />").join("\n");
// keine Start-Zeile auf dieser Ebene
	hpdiv			= document.createElement("div");
	hpdiv.className		= "seitenleistenbutton"; // stets goldener Link in div a
	hpdiv.title		= "Homepage\nInhaltsverzeichnis – Table of Contents";
		hpa			= document.createElement("a");
		hpa.href		= KTBLINK;
			hpp			= document.createElement("p");
			hpp.style.padding	= "36px 0px";
			hpp.innerHTML		= KTB;
		hpa.appendChild(hpp);
	hpdiv.appendChild(hpa);
document.getElementById("mw-panel").appendChild(hpdiv);
// keine Start-Zeile auf dieser Ebene
	phdiv			= document.createElement("div");
	phdiv.className		= "seitenleistenbutton";
	phdiv.style.backgroundImage = "url(/w/images/logo/sidebar_Vormarsch_Ri._Lemberg.jpg)";
	phdiv.title		= "Galerie: Fotos, Karten, Dokumente";
		pha			= document.createElement("a");
		pha.href		= "/w/Anhang/Tagebuch-Fotos";
			php			= document.createElement("p");
			php.style.lineHeight	= "120px";
				phspan			= document.createElement("span");
					phtext			= document.createTextNode("Fotos");
				phspan.appendChild(phtext);
			php.appendChild(phspan);
		pha.appendChild(php);
	phdiv.appendChild(pha);
document.getElementById("mw-panel").appendChild(phdiv);
// keine Start-Zeile auf dieser Ebene
	ktdiv			= document.createElement("div");
	ktdiv.className		= "seitenleistenbutton";
	ktdiv.style.backgroundImage = "url(/w/images/logo/sidebar_Karte.jpg)";
	ktdiv.title		= "Übersichtskarte: Orte und Wege des Autors";
		kta			= document.createElement("a");
		kta.href		= "/w/Anhang/Orte/Übersichtskarte_(Orte_und_Wege)";
			ktp			= document.createElement("p");
			ktp.style.lineHeight	= "120px";
				ktspan			= document.createElement("span");
					kttext			= document.createTextNode("Karte");
				ktspan.appendChild(kttext);
			ktp.appendChild(ktspan);
		kta.appendChild(ktp);
	ktdiv.appendChild(kta);
document.getElementById("mw-panel").appendChild(ktdiv);
// keine Start-Zeile auf dieser Ebene
	abkdiv			= document.createElement("div");
	abkdiv.className	= "seitenleistenbutton";
	abkdiv.style.backgroundImage = "url(/w/images/logo/sidebar_Abk.jpg)";
	abkdiv.title		= "Abkürzungen — Abbreviations";
		abka			= document.createElement("a");
		abka.href		= "/w/Anhang/Abkürzungen";
			abkp			= document.createElement("p");
			abkp.style.lineHeight	= "120px";
				abkspan			= document.createElement("span");
					abktext			= document.createTextNode("Abk. — Abbr.");
				abkspan.appendChild(abktext);
			abkp.appendChild(abkspan);
		abka.appendChild(abkp);
	abkdiv.appendChild(abka);
document.getElementById("mw-panel").appendChild(abkdiv);
// keine Start-Zeile auf dieser Ebene
/* hierdurch entsteht mangels Text ein leerer Fleck
	vb1div			= document.createElement("div");
	vb1div.className	= "seitenleistenbutton";
	vb1div.style.backgroundImage = "url(/w/images/logo/sidebar_Volksbund.jpg)";
	vb1div.title		= "Der Volksbund deutsche Kriegsgräberfürsorge\nerfasst, erhält und pflegt die Gräber\nder deutschen Kriegstoten im Ausland";
		vb1a			= document.createElement("a");
		vb1a.href		= "/w/Anhang/Abkürzungen";
			vb1p			= document.createElement("p");
			vb1p.style.lineHeight	= "120px";
				vb1span			= document.createElement("span");
					vb1text			= document.createTextNode("");
				vb1span.appendChild(vb1text);
			vb1p.appendChild(vb1span);
		vb1a.appendChild(vb1p);
	vb1div.appendChild(vb1a);
document.getElementById("mw-panel").appendChild(vb1div);
*/
// keine Start-Zeile auf dieser Ebene
	vbdiv			= document.createElement("div");
	vbdiv.className		= "seitenleistenbutton";
	vbdiv.title		= "Der Volksbund deutsche Kriegsgräberfürsorge\nerfasst, erhält und pflegt die Gräber\nder deutschen Kriegstoten im Ausland";
		vba			= document.createElement("a");
		vba.href		= "https://www.volksbund.de/";
			vbimg			= document.createElement("img");
			vbimg.src		= "/w/images/logo/sidebar_Volksbund.jpg";
		vba.appendChild(vbimg);
	vbdiv.appendChild(vba);
document.getElementById("mw-panel").appendChild(vbdiv);
// keine Start-Zeile auf dieser Ebene
	ardiv			= document.createElement("div");
	ardiv.className		= "seitenleistenbutton";
	ardiv.title		= "Der historische Verein Ar.kod.M unterstützt Familien\nin Russland und den Staaten der ehemaligen Sowjetunion\nbei der Suche nach Gräbern ihrer Angehörigen in Deutschland";
		ara			= document.createElement("a");
		ara.href		= "https://www.kriegsopferdaten.de/";
			arimg			= document.createElement("img");
			arimg.src		= "/w/images/logo/sidebar_Ar.kod_.M.jpg";
		ara.appendChild(arimg);
	ardiv.appendChild(ara);
document.getElementById("mw-panel").appendChild(ardiv);


/* ┌────────────────────────────────────────────────────────┐
   │ Beschriftung des Suchfeldes                            │
   └────────────────────────────────────────────────────────┘ */
document.getElementById("searchInput").placeholder = "Tagebuch durchsuchen";
document.getElementById("searchInput").title       = "Tagebuch durchsuchen [alt-shift-f]";

/* ┌─────────────────────────────────────────────────────────────────────────┐
   │ Wichtig: Formulierung der Links im DOCX:                                │
   ├─────────────────────────────────────────────────────────────────────────┤
   │ 1. Der Hash muss statt mit # mit %23 codiert werden, damit die          │
   │    Ansteuerung der Anker von der PDF im Netz aus funktioniert!          │
   │ 2. Dann folgt eine ID, die mit der im Artikel übereinstimmen muss.      │
   │ DER FOLGENDE REST HAT SICH LEIDER ERLEDIGT.                             │
   │ 2. Dann folgt der Bildname ohne Extension.                              │
   │ 3. Das ] hinter einem Datum muss (in den wenigen vorkommenden Fällen)   │
   │    durch - ersetzt werden, weil das auch beim Import der Fotos ins Wiki │
   │    so passiert ist, es aber noch andere Bindestriche gibt,die nicht     │
   │    ersetzt werden dürfen, was eine Automatik unheimlich schwer macht.   │
   ├─────────────────────────────────────────────────────────────────────────┤
   │ Aus Bildnamen automatisch Anker machen wäre optimal, GEHT ABER NICHT    │
   │ DA ERST DER ARTIKEL GELADEN WIRD UND SOLCHE ANKER, WENN ÜBERHAUPT,      │
   │ ZU SPÄT ERSCHEINEN; ALSO ALLE VON HAND SETZEN, wie begonnen;            │
   │ DANN SIND DIE IDs ABER AUCH BELIEBIG                                    │
   └─────────────────────────────────────────────────────────────────────────┘ */

/* ┌─────────────────────────────────────────────────────────────────────────┐
   │ Weil ein Sprung vom Dokument zu einem Bild im Fotoalbum                 │
   │ auf die Caption unter dem Bild führt und das Bild oben verschwindet,    │
   │ muss die Seite um die Bildhöhe nach unten geschoben werden              │
   └─────────────────────────────────────────────────────────────────────────┘ */
if(document.title.indexOf("Foto") > 0) window.scrollBy(0, -340);

/* ┌────────────────────────────────────────────────────────┐
   │ Farben für die Galeriebilder                           │
   │ Zuweisung in Tagebuchstyles.css                        │
   └────────────────────────────────────────────────────────┘ */
// Der von Hand eingegebene class-name des <span>-Elements am Anfang der Bildtexte (TgbT usw.)
// muss per Script dem class-name der umgebenden gallerybox hinzugefügt werden.
// Zgl. - nur für Ahnenfan sichtbar - eine zusätzliche Textzeile mit Link zum Galeriebild zum Kopieren
/* Farben-classes:
	limegreen	solid	TgbT	Tagebuch (auch wenn D, A oder S zusätzlich zutifft)
	limegreen	dashed	TgbD	Dokumente und Objekte
	mediumturquoise	solid	TgbA	Album des Autors
	mediumturquoise	dashed	TgbS	Sammlung des Autors
	gold		solid	TgbZ	Zusätzliche Erwerbungen des Herausgebers
	gold		dashed	TgbK	Kartenmontagen/-bearbeitungen des Herausgebers
	salmon			-	zzt nicht in Gebrauch */

bild = document.getElementsByClassName("gallerybox");
for (i=0; i<bild.length; i++) {
	bildspan = bild[i].getElementsByTagName("span");
	bild[i].className = bild[i].className + " " + bildspan[0].className;

	link0 = "https://vexilli.net/w/Anhang/Tagebuch-Fotos%23";
	hashtag0 = bild[i].getElementsByTagName("span")[0].id;
	linkmitid0 = link0 + hashtag0;
	if (hashtag0 == "") linkmitid0 = "noch ohne ID";
	linkmitid1 = document.createElement("p");
	linkmitid1.style.fontSize = "7pt";
	linkmitid1.style.className = "nurfuermich";
	linkmitid2 = document.createTextNode(linkmitid0);
	linkmitid1.appendChild(linkmitid2);
	bildspan[0].appendChild(linkmitid1);

/*	┌───────────────────────────────────────────────────┐
	│ bei § statt Foto ein externes im iframe anzeigen  │
	└───────────────────────────────────────────────────┘ */
	// Um ein Bild A (z.B. zerstörte Synagoge) im iframe zu zeigen (nur im Bildtext möglich),
	// wird ein beliebiges Bild B (z.B. Große Synagoge) in die gallery gesetzt und zugunsten 
	// des Bildes A hierdurch ausgeblendet (class des Bildes B um BILDnichtZEIGEN ergänzen):
	bildnicht = bild[i].getElementsByClassName("BILDnichtZEIGEN");
	if (bildnicht.length == 1) {
		bild[i].getElementsByClassName("thumb")[0].style.display = "none";
	}

/*	┌───────────────────────────────────────────────────┐
	│ niedriges bzw. sehr breites Foto mit langem Text  │
	└───────────────────────────────────────────────────┘ */
	// Um ein niedriges bzw. sehr breites Bild mit besonders langem Text zu zeigen 
	// (seltsam, wie oft das vorkommt), wird seine Höhe statt des Standards verwendet
	// (class des Bildes um BILDkleinZEIGEN ergänzen):
	bildklein = bild[i].getElementsByClassName("BILDkleinZEIGEN");
	if (bildklein.length == 1) {
		/* Fundort der echten Bildhöhe */
		niedrig = bild[i].getElementsByTagName("img")[0].height;
		/* neues, aber wirksames Attribut */ 
		bild[i].getElementsByClassName("thumb")[0].style.height = niedrig;
		/* margin steuert sonst die mittige Position, Minimum = 15px: */
		bild[i].getElementsByClassName("thumb")[0].firstChild.style.margin = "30px auto";
	}
}

/* ┌────────────────────────────────────────────────────────┐
   │ Farbige Rahmen f. d. Bilder i. d. Tag-für-Tag-Edition  │
   │ genauso wie bei den Galeriebildern                     │
   │ Zuweisung in Tagebuchstyles.css                        │
   └────────────────────────────────────────────────────────┘ */
bild = document.getElementsByClassName("thumbinner");
for (i=0; i<bild.length; i++) {
	bildspan = bild[i].getElementsByTagName("span");
	bild[i].className = bild[i].className + " " + bildspan[0].className;
}

/* ┌────────────────────────────────────────────────────────┐
   │ Anzeige der Links in Anhang/Literatur ähnl. wie b.Fotos│
   └────────────────────────────────────────────────────────┘ */
// nur für mich und nur bei Literatur: zusätzliche Textzeile mit Link zum Buch mittels ID zum Kopieren
if (document.location.pathname.indexOf("Literatur") > 0) { 
	buch = document.getElementsByClassName("verzeichnis")[0].getElementsByTagName("td");
	for (i=0; i<buch.length; i++) {
		buchspan = buch[i].getElementsByTagName("span");
		if (buchspan.length > 0) {
			link0 = "Anhang/Literatur#";
			hashtag0 = buch[i].getElementsByTagName("span")[0].id;
			linkmitid0 = link0 + hashtag0;
			if (hashtag0 == "") linkmitid0 = "noch ohne ID";
			linkmitid1 = document.createElement("p");
			linkmitid1.style.fontSize  = "7pt";
			linkmitid1.style.className = "nurfuermich";
			linkmitid2 = document.createTextNode(linkmitid0);
			linkmitid1.appendChild(linkmitid2);
			buch[i].appendChild(linkmitid1);
		}
	}
}

/* ┌────────────────────────────────────────────────────────┐
   │ KTB-Kalender-Seiten                                    │
   └────────────────────────────────────────────────────────┘ */
if (document.location.href.indexOf("w/19") > 0 || document.location.href.indexOf("w/Editorial") > 0 || document.location.href.indexOf("w/Anhang") > 0) {

/*	┌───────────────────────────────────────────────────┐
	│ Umbenennung des Seitentitels                      │
	└───────────────────────────────────────────────────┘ */
	// Jahr/Monat/Tag wird Tag. Monat Jahr
	// erfolgt in Vorlage:Kalendernavigation/Basis!

/*	┌───────────────────────────────────────────────────┐
	│ Jahr und Monat auch fett wenn nicht automatisch   │
	└───────────────────────────────────────────────────┘ */
	kalenderseitenname = document.location.href.split("/"); // 4=J,5=M,6=T,7=en usw.
	document.getElementsByClassName(kalenderseitenname[4])[0].style.fontWeight = "bold";
	if (document.getElementsByClassName(kalenderseitenname[4])[1]) {
// ?? Welches Element ist eigentlich Jahr[1]/Monat[1]/Tag[1]? Warum nicht [0]? Und wer ist [0]?
		document.getElementsByClassName(kalenderseitenname[4])[1].style.fontWeight = "bold";
	}
	if (kalenderseitenname[5]) {
		document.getElementsByClassName(kalenderseitenname[5])[0].style.fontWeight = "bold";
		if (document.getElementsByClassName(kalenderseitenname[5])[1]) {
			document.getElementsByClassName(kalenderseitenname[5])[1].style.fontWeight = "bold";
		}
	}
	if (kalenderseitenname[7]) { // wenn eine fremdprachliche Version existiert
		document.getElementsByClassName(kalenderseitenname[6])[0].style.fontWeight = "bold";
		if (document.getElementsByClassName(kalenderseitenname[6])[1]) {
			document.getElementsByClassName(kalenderseitenname[6])[1].style.fontWeight = "bold";
		}
	}

/*	┌───────────────────────────────────────────────────┐
	│ "Nächstes Kalenderblatt"                          │
	└───────────────────────────────────────────────────┘ */
	// per Vorlage zu suchen versuchen
	// (derzeit Eingabe in den Aufruf der Vorlage:Kalendernaechste nötig)

/*	┌───────────────────────────────────────────────────┐
	│ Weichen Bindestrich aus den Rohtexten entfernen   │
	└───────────────────────────────────────────────────┘ */
	// (¬ U+00AD, &#x00AD; &#173; vorsichtshalber auch das nicht-Zeichen ­¬ 00AC)
	// weil es dummerweise von WORD mit übergeben wird
	// (und nicht ersetzen durch den weichen Bindestrich für Wikitext (&shy;) wg. Suchmöglichkeit).
	// Formel gem. wiki.selfhtml.org/wiki/JavaScript/Objekte/RegExp; 3 Zeichen zur Auswahl;
	// ACHTUNG: AN ERSTER STELLE in der eckigen Klammer STEHT DAS ECHTE unsichtbare ZEICHEN!
	// AN dritter STELLE STEHT ein zuvor nicht erkanntes ZEICHEN!
	document.body.innerHTML = document.body.innerHTML.replace(/[­¬¬¬]/g, "").replace(/\u00AD/g, "").replace(/\u00AC/g, "");

/* ┌────────────────────────────────────────────────────────┐
   │ Ende KTB-Kalender-Seiten                               │
   └────────────────────────────────────────────────────────┘ */
}

/* ┌────────────────────────────────────────────────────────┐
   │ Inhaltsverzeichn. 1. Spalte (PDF): ganze Zelle klickbar│
   └────────────────────────────────────────────────────────┘ */
gruez = document.getElementsByClassName("grünezelle");
for (i=0; i<gruez.length; i++) {
	gruez[i].addEventListener('click', ganze_Zelle_klickbar);
	gruez[i].title = gruez[i].firstChild.href.split("/").reverse()[0];
}
function ganze_Zelle_klickbar() {
	oeffnePDF = window.open(gruez[i].firstChild.href, "_self");
}

/* ┌────────────────────────────────────────────────────────┐
   │ in [[Anhang/Abkürzungen]]: engl. Spalte 3 u. 4 kursiv  │
   │ und in [[Translation Issues]] solange Seite existiert  │
   └─ ─ ─ ──────────────────────────────────────────────────┘ */
Abkue = document.getElementsByClassName("SpalteDreiUndVierKursiv");
if (Abkue[0]) {
	Abkue_tr = Abkue[0].getElementsByTagName("tr");
	for (i=0; i<Abkue_tr.length; i++) {
		Abkue_td = Abkue_tr[i].getElementsByTagName("td");
		if(Abkue_td[2]) { Abkue_td[2].style.fontStyle = "italic"; }
		if(Abkue_td[3]) { Abkue_td[3].style.fontStyle = "italic"; }
	}
}

/* ┌────────────────────────────────────────────────────────┐
   │ Einfärben der Jahre in Tagebuch-Chronik                │
   └────────────────────────────────────────────────────────┘ */
if (document.getElementById("anzahlzeilen")) { // identifiziert die Chronik-Seite
	tabelle = document.getElementsByClassName("ktbchronik"); // davon gab es früher 2, inzwischen habe ich die Kalendernavigation rausgenommen.
	for (t=0; t<tabelle.length; t++) {
		taglink = tabelle[t].getElementsByTagName("a");
		for (i=0; i<taglink.length; i++) {
			if (taglink[i].innerText.startsWith('1938') || taglink[i].innerText.startsWith('1942') || taglink[i].innerText.startsWith('1946')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(0deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" }   // 0deg ist sekrecht schraffiert
			if (taglink[i].innerText.startsWith('1939') || taglink[i].innerText.startsWith('1943') || taglink[i].innerText.startsWith('1947')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(45deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" }  // schräg rechts aufwärts schraffiert
			if (taglink[i].innerText.startsWith('1940') || taglink[i].innerText.startsWith('1944') || taglink[i].innerText.startsWith('1948')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(90deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" }  // waagerecht schraffiert
			if (taglink[i].innerText.startsWith('1941') || taglink[i].innerText.startsWith('1945') || taglink[i].innerText.startsWith('1949')) { taglink[i].parentNode.style.backgroundImage = "repeating-linear-gradient(135deg, white, white 4px, #eaf1dd 4px, #eaf1dd 5px" } // schräg rechts abwärts schraffiert
		}
	}
	// zweite Zeilen (Geooc2) nachträglich auch färben:
	nachzeilen = document.getElementsByClassName("Geooc2");
	for (i=0; i<nachzeilen.length; i++) {
		nachzeilen[i].style.backgroundImage = nachzeilen[i].parentNode.previousSibling.previousSibling.childNodes[1].style.backgroundImage;
// ...        parentNode.previousSibling  und ...        firstChild undefined!! (Zeilenumbruch?!)
	}
}

/* ╔═════════════════════════════════════════════╗
   ║       ENDE: HAUPTBEREICH FÜR TAGEBUCH       ║
   ╚═════════════════════════════════════════════╝ */
}

/* ╔═════════════════════════════════════════════╗
   ║          HAUPTBEREICH FÜR FOOTER            ║
   ╚═════════════════════════════════════════════╝ */
/* ┌─────────────────────────────────────────────┐
   │      ZÄHLER-Startdatum April 2020 setzen    │
   └─────────────────────────────────────────────┘ */
// Aus unerfindlichen Gründen funktioniert dieses replace hier nicht:
// document.getElementById("footer-info-viewcount").innerText.replace("bisher", "seit April 2020");
// Daher so:
zaehlerTXT  = document.getElementById("footer-info-viewcount").innerText.split("bisher");
zaehlerTXT1 = zaehlerTXT[1].split("mal");
zaehlerTXTn = zaehlerTXT[0] + "seit April 2020 " + zaehlerTXT1[0].trim() + "-mal" + zaehlerTXT1[1];
document.getElementById("footer-info-viewcount").innerText = zaehlerTXTn;

/* ┌─────────────────────────────────────────────┐
   │  Impressum so beschriften, Duplikat löschen │
   └─────────────────────────────────────────────┘ */
ueberwestwiki = document.getElementById("footer-places-about");
ueberwestwiki.parentNode.removeChild(ueberwestwiki);

impressum = document.createTextNode("Impressum");
haftungsa = document.getElementById("footer-places-disclaimer");
// 1 Kind: <a>, 1 Enkel: Beschriftung "Haftungsausschluss"
haftungsa.firstChild.replaceChild(impressum, haftungsa.firstChild.firstChild);

/* ╔═════════════════════════════════════════════╗
   ║       ENDE: HAUPTBEREICH FÜR FOOTER         ║
   ╚═════════════════════════════════════════════╝ */
/* ╔═════════════════════════════════════════════╗
   ║      TEASER für Tagebuch-Startseite,        ║
   ║         aber auch sonst brauchbar           ║
   ╚═════════════════════════════════════════════╝ */
// Hier wird das von Vorlage:Teaser vorbereitete Element befüllt.
// "#teaser" ist dabei ein nicht vorhandenes Sprungziel, wodurch der Bildschirm stehenbleibt.
// (Mit "" lädt die Seite neu, mit "#" sprigt sie nach oben, mit einem echten in der Vorlage
// definierten Sprungziel springt dieses an den oberen Rand, aber nur beim obersten Teaser.)
meineteaser = document.getElementsByClassName('teaserclick');
for (i=0; i<meineteaser.length; i++) {
	meineteaser[i].innerHTML = "<a style='display: inline' href='#teaser' onclick='javascript:toggleMehr(this)'> → <i>mehr lesen/read more</i> →</a><a style='display: none' href='#teaser' onclick='javascript:toggleWeniger(this)'> ← <i>weniger anzeigen/show less</i> ←</a>";
}
// alte Symbole ► und ◄ zu auffällig, neue Symbole → und ← besser

// Folgende Funktionen blenden Teaser und Links ein/aus:
// (Aufrufe vom vorderen (toggleMehr) und hinteren (toggleWeniger) Button müssen
// getrennt bleiben, da die function sonst fehlerhaft arbeitet, vielleicht
// wegen nicht vorhandenem Objekt nextSibling bzw. previousSibling.)
function toggleMehr(control) {
	toggle1(control.parentNode.previousSibling); // Teaser-Volltext an
	toggle1(control);                 // "mehr lesen" aus
	toggle1(control.nextSibling);     // "weniger lesen" an
}
function toggleWeniger(control) {
	toggle1(control.parentNode.previousSibling); // Teaser-Volltext aus
	toggle1(control.previousSibling); // "mehr lesen" aus
	toggle1(control);                 // "weniger lesen" an
}
function toggle1(control1) {
	if (control1.style.display == "none") {
		control1.style.display = "inline";
	} else {
		control1.style.display = "none";
	}
}

/* ╔═════════════════════════════════════════════╗
   ║       ENDE: TEASER                          ║
   ╚═════════════════════════════════════════════╝ */
/* ╔═════════════════════════════════════════════╗
   ║          Toolbar Customization              ║
   ║ www.mediawiki.org/wiki/Extension:WikiEditor ║
   ╚═════════════════════════════════════════════╝ */
var customizeToolbar = function () {
	/* Your code goes here */
$('#wpTextbox1').wikiEditor('addToToolbar', {
	section: 'main',
	group: 'insert',
	tools: {
		"vorlageklammern": {
			label: 'Vorlage',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/Wikieditor-Vorlage.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "{{xxx|",
					post: "}}"
				}
			}
		},
		"WPLink": {
			label: 'Link zur Wikipedia',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/Wikieditor-template-WP.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "{{w|",
					post: "}}"
				}
			}
		},
		"KategorieTag": {
			label: '[[Kategorie:]]',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/Wikieditor-Kategorie.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "[[Kategorie:",
					post: "]]"
				}
			}
		},
		"KalendernavigationTag": {
			label: '{{Kalendernavigation}}',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/KalNav.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "{{Kalendernavigation}}"
				}
			}
		},
		"KalendernaechsteTag": {
			label: '{{Kalendernaechste}}',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/KalNext.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "{{Kalendernaechste|}}"
				}
			}
		},
		"refTag": {
			label: '<ref></ref>',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/Wikieditor-ref.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "<ref>",
					post: "</ref>"
				}
			}
		},
		"referencesTag": {
			label: '<references />',
			type: 'button',
 			icon: '/w/images/WikiEditorButtons/Wikieditor-references.png',
			action: {
				type: 'encapsulate',
				options: {
					pre: "<references />"
				}
			}
		}
	}
});
	/* My code goes up to here */
};

/* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */
if ( [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1 ) {
	mw.loader.using( 'user.options' ).then( function () {
		// This can be the string "0" if the user disabled the preference ([[phab:T54542#555387]])
		if ( mw.user.options.get( 'usebetatoolbar' ) == 1 ) {
			$.when(
				mw.loader.using( 'ext.wikiEditor' ), $.ready
			).then( customizeToolbar );
		}
	} );
/* ╔═════════════════════════════════════════════╗
   ║          Ende: Toolbar Customization        ║
   ╚═════════════════════════════════════════════╝ */
}