Zuletzt bearbeitet vor 2 Wochen
von Mark Wagner

Common.js

Keine Kategorien vergebenBearbeiten

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
mw.loader.using(['jquery'], function () {
    $(document).ready(function () {
        /*$('.smw-column-header').each(function () {
            // aktuellen HTML-Inhalt holen
            var html = $(this).html();
            // "Fortsetzung" entfernen, Leerzeichen ggf. bereinigen
            var newHtml = html.replace(/Fortsetzung/g, '').trim();
            // falls nach dem Entfernen gar kein Text übrig ist, komplette Header-Box ausblenden:
            if (newHtml === '') {
                $(this).hide();
            } else {
                // ansonsten nur den Text überschreiben, sodass z. B. "B Fortsetzung" → "B" wird
                $(this).html(newHtml);
            }
        });*/
        $(function () {
            $('<style>')
              .prop('type', 'text/css')
              .html(
                '.breadcrumb-item { font-size: 17px !important; }' +
                '.breadcrumb-nav  { border-bottom: 2px solid #85bc20!important; margin-bottom: 20px !important; }'
              )
              .appendTo('head');
        });
        
    });
});
// ===== robuster Namespace-Header mit optionalem _intern-Zusatzlink =====
(function (mw, $) {
  'use strict';

  // Hilfsfunktion: Header-Element zuverlässig finden (versch. Selektoren)
  function findSubpageHeaderRoot(scope) {
    const root = scope || document;
    return (
      root.getElementById('subpage-tree-pnl-head') ||
      root.querySelector('#subpage-tree-pnl .card-header, #subpage-tree-pnl-head, .subpage-tree-pnl .card-header')
    );
  }

  // Baut Header + (optional) Zusatzlink
  function buildHeaderContent($header) {
    const header = $header[0];
    if (!header) return;

    const namespace = mw.config.get('wgCanonicalNamespace'); // z.B. "Verein_intern" oder "" im Haupt-Namensraum
    const nsName = namespace || 'Hauptseite';

    // Hauptlink zur Namespace-Hauptseite
    const mainHref = namespace ? `/wiki/${namespace}:Hauptseite` : `/wiki/Hauptseite`;

    // Setze Hauptlink (einmalig)
    // Wir nutzen einen Wrapper, damit spätere Re-Renders einfacher erkennbar sind.
    if (!header.querySelector('.ns-head-mainlink')) {
      header.innerHTML = `
        <div class="ns-head-mainlink">
          <a href="${mainHref}" style="color:inherit;text-decoration:none;">${nsName}</a>
        </div>
      `;
    } else {
      // Falls BlueSpice den Inhalt überschrieben hat, aktualisieren wir nur den Link/Label
      const mainA = header.querySelector('.ns-head-mainlink a');
      if (mainA) {
        mainA.href = mainHref;
        mainA.textContent = nsName;
      }
    }

    // Hover-Effekt für Hauptlink
    const mainA = header.querySelector('.ns-head-mainlink a');
    if (mainA && !mainA.__hoverBound) {
      mainA.addEventListener('mouseenter', function(){ this.style.textDecoration = 'underline'; });
      mainA.addEventListener('mouseleave', function(){ this.style.textDecoration = 'none'; });
      mainA.__hoverBound = true;
    }

    // Zusatzlink nur bei *_intern
    const hasIntern = !!(namespace && /_intern$/.test(namespace));
    const existingAlt = header.querySelector('#subpage-tree-pnl-head-altlink');

    if (!hasIntern) {
      // Falls kein _intern → ggf. alten Zusatzlink entfernen
      if (existingAlt) existingAlt.remove();
      return;
    }

    // Basis-Namespace ohne _intern
    const baseNs = namespace.replace(/_intern$/, '');
    const baseHref = `/wiki/${baseNs}:Hauptseite`;

    // Zusatzlink erstellen/aktualisieren
    if (!existingAlt) {
      const alt = document.createElement('div');
      alt.id = 'subpage-tree-pnl-head-altlink';
      alt.style.marginTop = '4px';
      alt.style.fontSize = '90%';
      alt.innerHTML = `
        <a href="${baseHref}" 
           title="Zur Hauptseite des Namensraums ohne „_intern“"
           style="color:inherit;text-decoration:none;">
           ${baseNs}
        </a>
      `;
      header.appendChild(alt);

      const altA = alt.querySelector('a');
      if (altA) {
        altA.addEventListener('mouseenter', function(){ this.style.textDecoration = 'underline'; });
        altA.addEventListener('mouseleave', function(){ this.style.textDecoration = 'none'; });
      }
    } else {
      const altA = existingAlt.querySelector('a');
      if (altA) {
        altA.href = baseHref;
        altA.textContent = baseNs;
      }
    }
  }

  // Kernfunktion: versucht wiederholt, den Header zu setzen
  function updateSubpageHeaderRobust(scope) {
    const headerEl = findSubpageHeaderRoot(scope);
    if (!headerEl) return false;
    buildHeaderContent($(headerEl));
    return true;
  }

  // Retry-Loop nach Page-Load (falls Panel asynchron kommt)
  $(function () {
    let tries = 0, max = 20;
    const iv = setInterval(function () {
      if (updateSubpageHeaderRobust(document) || ++tries >= max) {
        clearInterval(iv);
      }
    }, 250);
  });

  // Bei Ajax-Updates erneut versuchen
  $(document).ajaxComplete(function () {
    // kleiner Delay, falls DOM gerade ersetzt wurde
    setTimeout(function(){ updateSubpageHeaderRobust(document); }, 120);
  });

  // Hook für nachgeladenen Inhalt
  mw.hook('wikipage.content').add(function ($c) {
    setTimeout(function(){ updateSubpageHeaderRobust($c[0]); }, 120);
  });

  // MutationObserver: wenn BlueSpice den Header-Inhalt ersetzt, setzen wir ihn wieder
  (function observePanel() {
    const panel = document.getElementById('subpage-tree-pnl') || document.querySelector('#subpage-tree-pnl, .subpage-tree-pnl');
    if (!panel) return;
    const mo = new MutationObserver(function () {
      updateSubpageHeaderRobust(panel);
    });
    mo.observe(panel, { childList: true, subtree: true });
  })();

})(mediaWiki, jQuery);