Zum Inhalt springen

MediaWiki:Common.js

Aus ThuleTempel Wissensbuch

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
/* Das folgende JavaScript wird für alle Benutzer geladen. */
mw.loader.using('mediawiki.util', function () {
  var groups = mw.config.get('wgUserGroups') || [];
  if (groups.indexOf('sysop') === -1) return; // nur Admins

  mw.util.addPortletLink(
    'p-tb',
    mw.util.getUrl('Special:SpecialPages'),
    'Spezialseiten',
    't-specialpages'
  );
});

mw.loader.using(['mediawiki.util']).then(function () {
  // nur für ausgeloggte Leser
  if (mw.config.get('wgUserName')) return;

  // nur einmal pro Browser
  const key = 'appearancePinnedOnce';
  if (localStorage.getItem(key)) return;

  function tryPin() {
    const pinBtn = document.querySelector('[data-event-name="pinnable-header.vector-appearance.pin"]');
    if (pinBtn) {
      pinBtn.click();               // pinnt / blendet ein
      localStorage.setItem(key, '1');
      return true;
    }
    return false;
  }

  // sofort versuchen, sonst kurz warten bis Vector fertig ist
  if (tryPin()) return;
  const obs = new MutationObserver(() => { if (tryPin()) obs.disconnect(); });
  obs.observe(document.documentElement, { subtree: true, childList: true });
});


mw.loader.using(['mediawiki.util']).then(function () {
  // nur für ausgeloggte Leser
  if (mw.config.get('wgUserName')) return;

  // Wenn der Nutzer schon etwas gewählt hat: nichts überschreiben
  const prefKey = 'mw-client-preferences';
  const current = localStorage.getItem(prefKey) || '';
  if (current.includes('vector-2022_font-size_')) return;

  function setStandardFontSize() {
    // Suche nach der "Standard"-Option im Erscheinungsbild-Menü
    const radios = Array.from(document.querySelectorAll('input[type="radio"]'));
    const standardRadio = radios.find(r => {
      const label = document.querySelector('label[for="' + r.id + '"]');
      const labelText = (label ? label.textContent : '').trim().toLowerCase();
      const val = (r.value || '').toLowerCase();
      return labelText === 'standard' || val === 'standard';
    });

    if (standardRadio && !standardRadio.checked) {
      standardRadio.click(); // setzt die echte Preference inkl. mw-client-preferences korrekt
      return true;
    }
    return false;
  }

  // Erst nach DOM ready versuchen, sonst kurz beobachten bis das Menü gerendert ist
  $(function () {
    if (setStandardFontSize()) return;
    const obs = new MutationObserver(() => {
      if (setStandardFontSize()) obs.disconnect();
    });
    obs.observe(document.documentElement, { subtree: true, childList: true });
  });
});


mw.loader.using(['mediawiki.util']).then(function () {
  // nur ausgeloggte Leser, nur Desktop
  if (mw.config.get('wgUserName')) return;
  if (!window.matchMedia('(min-width: 1000px)').matches) return;

  const storageKey = 'vector-mainmenu-preference'; // 'pinned' | 'unpinned'

  function isPinned() {
    return document.body.classList.contains('vector-main-menu-pinned');
  }

  function pinMenu() {
    const btn = document.querySelector(
      '[data-event-name="pinnable-header.vector-main-menu.pin"]'
    );
    if (btn) btn.click();
  }

  function unpinMenu() {
    const btn = document.querySelector(
      '[data-event-name="pinnable-header.vector-main-menu.unpin"]'
    );
    if (btn) btn.click();
  }

  function applyPreference() {
    const pref = localStorage.getItem(storageKey);

    if (pref === 'pinned' && !isPinned()) pinMenu();
    if (pref === 'unpinned' && isPinned()) unpinMenu();
  }

  function observeReady() {
    if (!document.documentElement.classList.contains('vector-animations-ready')) {
      return false;
    }

    // 1️⃣ Beim ersten Besuch: Standard = pinned
    if (!localStorage.getItem(storageKey)) {
      localStorage.setItem(storageKey, 'pinned');
    }

    // 2️⃣ Gespeicherte Präferenz anwenden
    applyPreference();

    // 3️⃣ Nutzeraktion überwachen und merken
    document.addEventListener('click', function (e) {
      const pin = e.target.closest(
        '[data-event-name="pinnable-header.vector-main-menu.pin"]'
      );
      const unpin = e.target.closest(
        '[data-event-name="pinnable-header.vector-main-menu.unpin"]'
      );

      if (pin) localStorage.setItem(storageKey, 'pinned');
      if (unpin) localStorage.setItem(storageKey, 'unpinned');
    });

    return true;
  }

  // Falls Vector noch nicht bereit ist → beobachten
  if (observeReady()) return;

  const obs = new MutationObserver(() => {
    if (observeReady()) obs.disconnect();
  });

  obs.observe(document.documentElement, {
    attributes: true,
    attributeFilter: ['class']
  });
});