MediaWiki:Common.js: Porovnání verzí

Z Wiki JU
Ofara (diskuse | příspěvky)
Bez shrnutí editace
značka: revertováno
Ofara (diskuse | příspěvky)
Bez shrnutí editace
značka: revertováno
Řádek 63: Řádek 63:
//Vyhledávání
//Vyhledávání


/* Special:Search – Rozšířené, whitelist NS, přejmenování, default check (stabilní) */
/* Special:Search – Advanced profil, whitelist NS (remove z DOM), přejmenování, default check */
(function () {
(function () {
   if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
   if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;


   // Vynutit profil=advanced (provedeme jednou přesměrováním)
   // 1) Vynutit profil=advanced (provedeme jednou přesměrováním)
   const url = new URL(location.href);
   const url = new URL(location.href);
   if (url.searchParams.get('profile') !== 'advanced') {
   if (url.searchParams.get('profile') !== 'advanced') {
Řádek 75: Řádek 75:
   }
   }


   // ===== Nastavení =====
   // ===== KONFIGURACE =====
   // Povolené ID jmenných prostorů (standardní):
   // Povolené ID standardních NS (0=Hlavní, 6=Soubor, 10=Šablona, 14=Kategorie)
  // 0 Hlavní, 6 Soubor, 10 Šablona, 14 Kategorie
   const ALLOW_IDS = new Set([0, 6, 10, 14]);
   const ALLOW_IDS = new Set([0, 6, 10, 14]);


   // Povolené názvy (pro vlastní NS, které nemají fixní ID tady v kódu)
   // Povolené názvy (pro vlastní NS, které nemají pevné ID tady v kódu)
  // + přidáváme i „Stránky“ (přejmenovaný Hlavní)
   const ALLOW_NAMES = new Set([
   const ALLOW_NAMES = new Set([
     '(Hlavní)', 'Hlavní', 'Stránky',
     '(Hlavní)', 'Hlavní', 'Stránky',
Řádek 88: Řádek 88:
   ]);
   ]);


   // Defaultně zaškrtnout (ID) – Stránky/Hlavní
   // Defaultně zaškrtnout (podle ID) – Stránky/Hlavní
   const DEFAULT_CHECK_IDS = new Set([0]);
   const DEFAULT_CHECK_IDS = new Set([0]);


   // Přejmenování štítků (původní -> nový text)
   // Přejmenování (původní text -> nový text)
   const RENAME = new Map([
   const RENAME = new Map([
     ['(Hlavní)', 'Stránky'],
     ['(Hlavní)', 'Stránky'],
Řádek 101: Řádek 101:
   const isPrF = t => /^(PřF|Binolupa – Přirodovědecká fakulta)$/i.test(norm(t));
   const isPrF = t => /^(PřF|Binolupa – Přirodovědecká fakulta)$/i.test(norm(t));


   function apply() {
   function process() {
     // Schovej horní lištu profilů
     // Schovej horní profilové záložky (Články / Multimédia / Všechno / Rozšířené)
     const tabs = document.querySelector('.mw-search-profile-tabs');
     const tabs = document.querySelector('.mw-search-profile-tabs');
     if (tabs) tabs.style.display = 'none';
     if (tabs) tabs.style.display = 'none';
Řádek 109: Řádek 109:
     if (!root) return;
     if (!root) return;


    // OOUI občas přidá mezidiv – bereme skutečné „řádky“ s checkboxem
     root.querySelectorAll('.oo-ui-fieldLayout').forEach(row => {
     root.querySelectorAll('.oo-ui-fieldLayout').forEach(row => {
       const cb = row.querySelector('input[type="checkbox"]');
       const cb = row.querySelector('input[type="checkbox"]');
Řádek 114: Řádek 115:
       if (!cb || !labelEl) return;
       if (!cb || !labelEl) return;


       // získej ID NS (z id nebo value)
       // Zjisti ID NS
       let nsId = NaN;
       let nsId = NaN;
       const idm = cb.id && cb.id.match(/mw-search-ns(\d+)/);
       const m = cb.id && cb.id.match(/mw-search-ns(\d+)/);
       if (idm) nsId = parseInt(idm[1], 10);
       if (m) nsId = parseInt(m[1], 10);
       if (isNaN(nsId)) {
       if (isNaN(nsId)) {
         const v = cb.getAttribute('value');
         const v = cb.getAttribute('value');
Řádek 123: Řádek 124:
       }
       }


       // ulož původní text (1×) a případně přejmenuj
       // Ulož původní text (1×)
       if (!row.dataset.origLabel) row.dataset.origLabel = norm(labelEl.textContent);
       if (!row.dataset.origLabel) row.dataset.origLabel = norm(labelEl.textContent);
       const orig = row.dataset.origLabel;
       const orig = row.dataset.origLabel;
      // Přejmenuj (jen vizuálně; dělá se jednou)
       if (!row.dataset.renamed && RENAME.has(orig)) {
       if (!row.dataset.renamed && RENAME.has(orig)) {
         labelEl.textContent = RENAME.get(orig);
         labelEl.textContent = RENAME.get(orig);
         row.dataset.renamed = '1';
         row.dataset.renamed = '1';
       }
       }
       const current = norm(labelEl.textContent);
       const current = norm(labelEl.textContent);


       // rozhodni, zda ponechat (ID nebo název)
       // Ponechat jen whitelist: dle ID nebo názvu (před/po přejmenování)
       const keep = ALLOW_IDS.has(nsId) || ALLOW_NAMES.has(orig) || ALLOW_NAMES.has(current);
       const keep = ALLOW_IDS.has(nsId) || ALLOW_NAMES.has(orig) || ALLOW_NAMES.has(current);
      row.classList.toggle('ns-hide', !keep);
      if (!keep) { cb.checked = false; return; }


       // default zaškrtnout Stránky (ID 0) a PřF (podle názvu)
       if (!keep) {
       if (DEFAULT_CHECK_IDS.has(nsId) || isPrF(orig) || isPrF(current)) cb.checked = true;
        // >>> KONEČNÉ: pryč z DOM, ať to NIKDY nic nepřebije
        row.remove();
        return;
      }
 
      // Defaultně zaškrtnout Stránky (ID 0) + PřF (dle názvu)
       if (DEFAULT_CHECK_IDS.has(nsId) || isPrF(orig) || isPrF(current)) {
        cb.checked = true;
      }
     });
     });
   }
   }


   // Poprvé po načtení obsahu
   // Poprvé po načtení obsahu
   mw.hook('wikipage.content').add(apply);
   mw.hook('wikipage.content').add(process);


   // Sleduj JEN kontejner s volbami; při změně DOM znovu apply()
   // Sleduj JEN kontejner s volbami; když OOUI přestaví DOM, znovu to prožeň
   (function observe() {
   (function observe() {
     const root = document.querySelector('#mw-searchoptions') || document.querySelector('.mw-search-nsoptions');
     const root = document.querySelector('#mw-searchoptions') || document.querySelector('.mw-search-nsoptions');
     if (!root) { setTimeout(observe, 100); return; }
     if (!root) { setTimeout(observe, 120); return; }
     new MutationObserver(apply).observe(root, { childList: true, subtree: true });
     new MutationObserver(() => process()).observe(root, { childList: true, subtree: true });
   })();
   })();
})();
})();

Verze z 25. 9. 2025, 08:32

/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky */

//Zpětná vazba

$(function () {
  // Zruš jQuery UI vzhled tlačítka
  $('.articleFeedbackv5-submit').button('destroy');
});

document.addEventListener('DOMContentLoaded', function () {
  document.querySelectorAll('.extern-download').forEach(el => {
    el.style.cursor = 'pointer';
    el.style.color = '#0645AD';
    el.style.textDecoration = 'underline';
    el.addEventListener('click', () => {
      const a = document.createElement('a');
      a.href = el.getAttribute('data-url');
      a.setAttribute('download', '');
      a.style.display = 'none';
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
    });
  });
});

(function () {
  var NOTE_ID = 'af5-note';
  var NOTE_HTML =
    '<div id="' + NOTE_ID + '" class="articleFeedbackv5-note">' +
      '<b>Tento formulář slouží pouze jako zpětná vazba pro tuto stránku.</b> ' +
      'Řešíte-li nějaký problém, napište e-mail na ' +
      '<a href="/Servicedesk/Seznam_e-mailových_adres_pro_zadávání_požadavků">službu,</a> které se Váš problém týká.' +
    '</div>';

   function injectNote(root) {
    var $title = (root ? $(root) : $(document))
      .find('.articleFeedbackv5-title-wrap')
      .first();

    if (!$title.length) return false;                 // nadpis není
    if (document.getElementById(NOTE_ID)) return true; // už vloženo

    $title.after(NOTE_HTML);                          // vložit pod nadpis
    return true;
  }

  if (injectNote()) return;

  var obs = new MutationObserver(function (mutations) {
    for (var m of mutations) {
      if (injectNote(m.target)) {
        obs.disconnect();
        break;
      }
    }
  });

  obs.observe(document.body, { childList: true, subtree: true });
  setTimeout(function () { injectNote(); obs.disconnect(); }, 5000);
})();

//Vyhledávání

/* Special:Search – Advanced profil, whitelist NS (remove z DOM), přejmenování, default check */
(function () {
  if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;

  // 1) Vynutit profil=advanced (provedeme jednou přesměrováním)
  const url = new URL(location.href);
  if (url.searchParams.get('profile') !== 'advanced') {
    url.searchParams.set('profile', 'advanced');
    location.replace(url.toString());
    return;
  }

  // ===== KONFIGURACE =====
  // Povolené ID standardních NS (0=Hlavní, 6=Soubor, 10=Šablona, 14=Kategorie)
  const ALLOW_IDS = new Set([0, 6, 10, 14]);

  // Povolené názvy (pro vlastní NS, které nemají pevné ID tady v kódu)
  // + přidáváme i „Stránky“ (přejmenovaný Hlavní)
  const ALLOW_NAMES = new Set([
    '(Hlavní)', 'Hlavní', 'Stránky',
    'Aktuality',
    'PřF', 'Binolupa – Přirodovědecká fakulta',
    'Šablona', 'Soubor', 'Kategorie'
  ]);

  // Defaultně zaškrtnout (podle ID) – Stránky/Hlavní
  const DEFAULT_CHECK_IDS = new Set([0]);

  // Přejmenování (původní text -> nový text)
  const RENAME = new Map([
    ['(Hlavní)', 'Stránky'],
    ['Hlavní',   'Stránky'],
    ['PřF',      'Binolupa – Přirodovědecká fakulta']
  ]);

  const norm = s => String(s || '').replace(/\u00A0/g, ' ').replace(/\s+/g, ' ').trim();
  const isPrF = t => /^(PřF|Binolupa  Přirodovědecká fakulta)$/i.test(norm(t));

  function process() {
    // Schovej horní profilové záložky (Články / Multimédia / Všechno / Rozšířené)
    const tabs = document.querySelector('.mw-search-profile-tabs');
    if (tabs) tabs.style.display = 'none';

    const root = document.querySelector('#mw-searchoptions') || document.querySelector('.mw-search-nsoptions');
    if (!root) return;

    // OOUI občas přidá mezidiv – bereme skutečné „řádky“ s checkboxem
    root.querySelectorAll('.oo-ui-fieldLayout').forEach(row => {
      const cb = row.querySelector('input[type="checkbox"]');
      const labelEl = row.querySelector('label.oo-ui-labelElement-label');
      if (!cb || !labelEl) return;

      // Zjisti ID NS
      let nsId = NaN;
      const m = cb.id && cb.id.match(/mw-search-ns(\d+)/);
      if (m) nsId = parseInt(m[1], 10);
      if (isNaN(nsId)) {
        const v = cb.getAttribute('value');
        if (v && /^\d+$/.test(v)) nsId = parseInt(v, 10);
      }

      // Ulož původní text (1×)
      if (!row.dataset.origLabel) row.dataset.origLabel = norm(labelEl.textContent);
      const orig = row.dataset.origLabel;

      // Přejmenuj (jen vizuálně; dělá se jednou)
      if (!row.dataset.renamed && RENAME.has(orig)) {
        labelEl.textContent = RENAME.get(orig);
        row.dataset.renamed = '1';
      }
      const current = norm(labelEl.textContent);

      // Ponechat jen whitelist: dle ID nebo názvu (před/po přejmenování)
      const keep = ALLOW_IDS.has(nsId) || ALLOW_NAMES.has(orig) || ALLOW_NAMES.has(current);

      if (!keep) {
        // >>> KONEČNÉ: pryč z DOM, ať to NIKDY nic nepřebije
        row.remove();
        return;
      }

      // Defaultně zaškrtnout Stránky (ID 0) + PřF (dle názvu)
      if (DEFAULT_CHECK_IDS.has(nsId) || isPrF(orig) || isPrF(current)) {
        cb.checked = true;
      }
    });
  }

  // Poprvé po načtení obsahu
  mw.hook('wikipage.content').add(process);

  // Sleduj JEN kontejner s volbami; když OOUI přestaví DOM, znovu to prožeň
  (function observe() {
    const root = document.querySelector('#mw-searchoptions') || document.querySelector('.mw-search-nsoptions');
    if (!root) { setTimeout(observe, 120); return; }
    new MutationObserver(() => process()).observe(root, { childList: true, subtree: true });
  })();
})();