Zum Inhalt springen


MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Firestone Idle RPG Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
/* Das folgende JavaScript wird für alle Benutzer geladen. */
/* Das folgende JavaScript wird für alle Benutzer geladen. */
/*
/*
$(document).ready(function(){
/* Sidebar: Heading als Link + Untermenüs (#group:) – Vector 2022 */
  $("#ca-talk").remove();
mw.loader.using( ['mediawiki.util'] ).then(function () {
  $("#footer-places-privacy").remove();
   if ( mw.config.get('skin') !== 'vector-2022' ) return;
  $("#footer-places-about").remove();
  $("#footer-places-disclaimers").remove();
});
*/
/* === Force Vector wide layout for everyone (MW 1.44, Vector 2022) === */
(function () {
   try {
    var KEY = 'vector-client-prefs';
    var prefs = {};
    try { prefs = JSON.parse(localStorage.getItem(KEY) || '{}'); } catch (e) {}


    // 0 = wide, 1 = limited-width
  var panel = document.getElementById('mw-panel');
    if (prefs['vector-feature-limited-width'] !== 0) {
  if (!panel) return;
      prefs['vector-feature-limited-width'] = 0;
      localStorage.setItem(KEY, JSON.stringify(prefs));
    }


     // HTML-Klassen sofort korrigieren (verhindert „schmal“-Flash)
  function getDirective(el, key) {
     var html = document.documentElement;
     // prüft href (inkl. URL-encodiert), data-href, title, Text
     html.classList.remove('vector-feature-limited-width-clientpref-1');
     var href = (el.getAttribute('href') || '');
     html.classList.add('vector-feature-limited-width-clientpref-0');
     if (href.indexOf('#' + key + ':') === 0) return href;                // "#link:..."
     html.classList.remove('vector-feature-limited-width'); // falls vom Server gesetzt
    if (href.indexOf('%23' + key + ':') !== -1) return href;              // "...%23link:..."
   } catch (e) {}
    var dh  = el.getAttribute('data-href') || '';
})();
     if (dh.indexOf('#' + key + ':') === 0) return dh;
    var tt  = el.getAttribute('title') || '';
    if (tt.indexOf('#' + key + ':') === 0) return tt;
    var tx  = (el.textContent || '').trim();
    if (tx.indexOf('#' + key + ':') === 0) return tx;
    return null;
  }
  function directiveTarget(directiveValue) {
     // extrahiert den Teil nach "link:" bzw. "group:"
    var v = decodeURIComponent(directiveValue.replace(/^.*?(#|%23)(link|group):/, ''));
    return v.replace(/^\s+|\s+$/g, '');
   }
  function wikiHref(title) { return mw.util.getUrl(title); }


/* === Vector 2022: Brille/Appearance IMMER entfernen, Toolbar nur für Gäste === */
  function makeToggleBtn(expanded) {
mw.loader.using('mediawiki.util').then(function () {
    var b = document.createElement('button');
  if (mw.config.get('skin') !== 'vector-2022') return;
    b.type = 'button';
    b.className = 'kr-sb-toggle';
    b.setAttribute('aria-expanded', expanded ? 'true' : 'false');
    b.setAttribute('title', expanded ? 'Zuklappen' : 'Aufklappen');
    b.addEventListener('click', function (e) {
      e.preventDefault();
      var wrap = b.closest('.kr-sb-wrap, .kr-sb-group');
      var isCollapsed = wrap.classList.toggle('is-collapsed');
      b.setAttribute('aria-expanded', isCollapsed ? 'false' : 'true');
    });
    return b;
  }


   function removeAppearanceEverywhere () {
   panel.querySelectorAll('.vector-menu-portal').forEach(function (portlet) {
     var sels = [
     var heading = portlet.querySelector('.vector-menu-heading');
      // Header-Dropdown (Brille)
    var list    = portlet.querySelector('.vector-menu-content-list');
      'nav.vector-appearance-landmark',
    if (!heading || !list) return;
      '#vector-appearance-dropdown',
 
      // Un-/Pinned-Container + eigentlicher Inhalt
    // 1) #link:… → Überschrift klickbar machen
      '#vector-appearance-unpinned-container',
     var linkDirectiveAnchor = Array.from(list.querySelectorAll('li > a')).find(function (a) {
      '#vector-appearance-pinned-container',
      return !!getDirective(a, 'link');
      '#vector-appearance',
      // Falls einzelne Client-Pref-Portlets gerendert wurden
      '#skin-client-prefs-vector-feature-custom-font-size',
      '#skin-client-prefs-vector-feature-limited-width',
      '#skin-client-prefs-skin-theme'
     ];
    sels.forEach(function (sel) {
      document.querySelectorAll(sel).forEach(function (el) { el.remove(); });
     });
     });
  }
    if (linkDirectiveAnchor) {
      var dir = getDirective(linkDirectiveAnchor, 'link');
      var target = directiveTarget(dir) || 'Hauptseite';
      var labelEl = heading.querySelector('.vector-menu-heading-label') || heading;
      var labelText = labelEl.textContent.trim() || target;
      var link = document.createElement('a');
      link.className = 'kr-sb-heading-link';
      link.href = wikiHref(target);
      link.textContent = labelText;
      labelEl.textContent = '';
      labelEl.appendChild(link);
      // Direktive entfernen
      linkDirectiveAnchor.closest('li').remove();
    }
 
    // 2) Portlet-Toggle hinzufügen (Heading bleibt Link, Pfeil klappt)
    if (!portlet.classList.contains('kr-sb-wrap')) {
      portlet.classList.add('kr-sb-wrap');
      heading.appendChild( makeToggleBtn(true) );
    }
 
    // 3) #group:… → Untermenüs bauen
    var items = Array.from(list.children); // <li>…
    for (var i = 0; i < items.length; i++) {
      var li = items[i];
      if (!li) continue;
      var a  = li.querySelector('a');
      if (!a) continue;
      var gdir = getDirective(a, 'group');
      if (!gdir) continue;


  function removeGuestToolbar () {
      var groupLabel = a.textContent.trim() || directiveTarget(gdir) || 'Gruppe';
    if (mw.config.get('wgUserName')) return; // nur Gäste
      li.textContent = '';
    document.querySelectorAll('.vector-page-toolbar').forEach(function (el) { el.remove(); });
      li.classList.add('kr-sb-group');
  }


  // Sofort
      var header = document.createElement('div');
  removeAppearanceEverywhere();
      header.className = 'kr-sb-group-header';
  removeGuestToolbar();
      var titleSpan = document.createElement('span');
      titleSpan.className = 'kr-sb-group-title';
      titleSpan.textContent = groupLabel;
      var btn = makeToggleBtn(true);
      header.appendChild(titleSpan);
      header.appendChild(btn);
      li.appendChild(header);


  // Nochmal bei DOM-Änderungen (Vector lädt Teile nach)
      var sub = document.createElement('ul');
  var debouncedA = mw.util.debounce(removeAppearanceEverywhere, 50);
      sub.className = 'kr-sb-sub';
  var debouncedT = mw.util.debounce(removeGuestToolbar, 50);
       while (items[i+1] && !getDirective((items[i+1].querySelector('a')||{}), 'group')) {
  var mo = new MutationObserver(function (muts) {
         sub.appendChild(items[i+1]);
    for (var i = 0; i < muts.length; i++) {
         items[i+1] = null; // verbraucht
       if (muts[i].addedNodes && muts[i].addedNodes.length) {
         i++;
         debouncedA();
         debouncedT();
         break;
       }
       }
      li.appendChild(sub);
     }
     }
  });
  mo.observe(document.documentElement, { childList: true, subtree: true });
  // Auch bei Ajax-/Fragment-Nachladungen
  mw.hook('wikipage.content').add(function () {
    removeAppearanceEverywhere();
    removeGuestToolbar();
   });
   });
});
});

Version vom 10. Oktober 2025, 13:11 Uhr

/* Das folgende JavaScript wird für alle Benutzer geladen. */
/*
/* Sidebar: Heading als Link + Untermenüs (#group:) – Vector 2022 */
mw.loader.using( ['mediawiki.util'] ).then(function () {
  if ( mw.config.get('skin') !== 'vector-2022' ) return;

  var panel = document.getElementById('mw-panel');
  if (!panel) return;

  function getDirective(el, key) {
    // prüft href (inkl. URL-encodiert), data-href, title, Text
    var href = (el.getAttribute('href') || '');
    if (href.indexOf('#' + key + ':') === 0) return href;                 // "#link:..."
    if (href.indexOf('%23' + key + ':') !== -1) return href;              // "...%23link:..."
    var dh  = el.getAttribute('data-href') || '';
    if (dh.indexOf('#' + key + ':') === 0) return dh;
    var tt  = el.getAttribute('title') || '';
    if (tt.indexOf('#' + key + ':') === 0) return tt;
    var tx  = (el.textContent || '').trim();
    if (tx.indexOf('#' + key + ':') === 0) return tx;
    return null;
  }
  function directiveTarget(directiveValue) {
    // extrahiert den Teil nach "link:" bzw. "group:"
    var v = decodeURIComponent(directiveValue.replace(/^.*?(#|%23)(link|group):/, ''));
    return v.replace(/^\s+|\s+$/g, '');
  }
  function wikiHref(title) { return mw.util.getUrl(title); }

  function makeToggleBtn(expanded) {
    var b = document.createElement('button');
    b.type = 'button';
    b.className = 'kr-sb-toggle';
    b.setAttribute('aria-expanded', expanded ? 'true' : 'false');
    b.setAttribute('title', expanded ? 'Zuklappen' : 'Aufklappen');
    b.addEventListener('click', function (e) {
      e.preventDefault();
      var wrap = b.closest('.kr-sb-wrap, .kr-sb-group');
      var isCollapsed = wrap.classList.toggle('is-collapsed');
      b.setAttribute('aria-expanded', isCollapsed ? 'false' : 'true');
    });
    return b;
  }

  panel.querySelectorAll('.vector-menu-portal').forEach(function (portlet) {
    var heading = portlet.querySelector('.vector-menu-heading');
    var list    = portlet.querySelector('.vector-menu-content-list');
    if (!heading || !list) return;

    // 1) #link:… → Überschrift klickbar machen
    var linkDirectiveAnchor = Array.from(list.querySelectorAll('li > a')).find(function (a) {
      return !!getDirective(a, 'link');
    });
    if (linkDirectiveAnchor) {
      var dir = getDirective(linkDirectiveAnchor, 'link');
      var target = directiveTarget(dir) || 'Hauptseite';
      var labelEl = heading.querySelector('.vector-menu-heading-label') || heading;
      var labelText = labelEl.textContent.trim() || target;
      var link = document.createElement('a');
      link.className = 'kr-sb-heading-link';
      link.href = wikiHref(target);
      link.textContent = labelText;
      labelEl.textContent = '';
      labelEl.appendChild(link);
      // Direktive entfernen
      linkDirectiveAnchor.closest('li').remove();
    }

    // 2) Portlet-Toggle hinzufügen (Heading bleibt Link, Pfeil klappt)
    if (!portlet.classList.contains('kr-sb-wrap')) {
      portlet.classList.add('kr-sb-wrap');
      heading.appendChild( makeToggleBtn(true) );
    }

    // 3) #group:… → Untermenüs bauen
    var items = Array.from(list.children); // <li>…
    for (var i = 0; i < items.length; i++) {
      var li = items[i];
      if (!li) continue;
      var a  = li.querySelector('a');
      if (!a) continue;
      var gdir = getDirective(a, 'group');
      if (!gdir) continue;

      var groupLabel = a.textContent.trim() || directiveTarget(gdir) || 'Gruppe';
      li.textContent = '';
      li.classList.add('kr-sb-group');

      var header = document.createElement('div');
      header.className = 'kr-sb-group-header';
      var titleSpan = document.createElement('span');
      titleSpan.className = 'kr-sb-group-title';
      titleSpan.textContent = groupLabel;
      var btn = makeToggleBtn(true);
      header.appendChild(titleSpan);
      header.appendChild(btn);
      li.appendChild(header);

      var sub = document.createElement('ul');
      sub.className = 'kr-sb-sub';
      while (items[i+1] && !getDirective((items[i+1].querySelector('a')||{}), 'group')) {
        sub.appendChild(items[i+1]);
        items[i+1] = null; // verbraucht
        i++;
      }
      li.appendChild(sub);
    }
  });
});