MediaWiki:Common.js: Porovnání verzí
Z Wiki JU
Bez shrnutí editace značka: revertováno |
Bez shrnutí editace značka: revertováno |
||
| Řádek 143: | Řádek 143: | ||
if (!keep) { row.remove(); return; } | if (!keep) { row.remove(); return; } | ||
// default: Stránky | // default: jen Stránky (NS0) | ||
cb.checked = DEFAULT_CHECK_IDS.has(nsId); // => PřF se tím automaticky odškrtne | |||
}); | }); | ||
} | } | ||
Verze z 25. 9. 2025, 09:10
/* 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 – pevné rozšířené, whitelist (remove z DOM), přejmenování, default check, nadpis */
(function () {
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
// 1) vynutit profil=advanced (jednou přesměrováním, žádná smyčka)
(function ensureAdvanced() {
const url = new URL(location.href);
if (url.searchParams.get('profile') !== 'advanced') {
url.searchParams.set('profile', 'advanced');
location.replace(url.toString());
}
})();
// --- konfigurace ---
// Standardní ID: 0 Hlavní, 6 Soubor, 10 Šablona, 14 Kategorie
const ALLOW_IDS = new Set([0, 6, 10, 14]);
const ALLOW_NAMES = new Set([
'(Hlavní)', 'Hlavní', 'Stránky',
'Aktuality',
'PřF', 'Binolupa – Přírodovědecká fakulta',
'Soubor', 'Soubory',
'Šablona', 'Šablony',
'Kategorie'
]);
const DEFAULT_CHECK_IDS = new Set([0]); // Stránky
const RENAME = new Map([
['(Hlavní)', 'Stránky'],
['Hlavní', 'Stránky'],
['PřF', 'Binolupa – Přírodovědecká fakulta'],
['Soubor', 'Soubory'],
['Šablona', 'Šablony']
]);
const norm = s => String(s || '').replace(/\u00A0/g,' ').replace(/\s+/g,' ').trim();
const isPrF = t => /^(PřF|Binolupa – Přírodovědecká fakulta)$/i.test(norm(t));
function getContainer() {
return document.querySelector('#mw-searchoptions, .mw-search-nsoptions');
}
function processOnce(root) {
if (!root || root.dataset.nsTweaked === '1') return;
root.dataset.nsTweaked = '1';
// nadpis
const heading = root.querySelector('h4, legend');
if (heading) heading.textContent = 'Co chcete vyhledávat?';
// schovat horní profilové záložky
const tabs = document.querySelector('.mw-search-profile-tabs');
if (tabs) tabs.style.display = 'none';
// najdi všechny checkboxy jmenných prostorů
const cbs = root.querySelectorAll('input[type="checkbox"][id^="mw-search-ns"], input[type="checkbox"][name="ns[]"]');
cbs.forEach(cb => {
// najdi řádek
const row = cb.closest('.oo-ui-fieldLayout') || cb.closest('div');
if (!row) return;
// label
const label = (cb.id && root.querySelector('label[for="'+cb.id+'"]')) || row.querySelector('label');
if (!label) 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);
}
// původní text a přejmenování
const orig = norm(label.textContent);
if (RENAME.has(orig)) label.textContent = RENAME.get(orig);
const current = norm(label.textContent);
// whitelist → nechtěné rovnou odstraníme z DOM
const keep = ALLOW_IDS.has(nsId) || ALLOW_NAMES.has(orig) || ALLOW_NAMES.has(current);
if (!keep) { row.remove(); return; }
// default: jen Stránky (NS0)
cb.checked = DEFAULT_CHECK_IDS.has(nsId); // => PřF se tím automaticky odškrtne
});
}
// počkej, až se kontejner i checkboxy opravdu objeví, pak to jednou zpracuj
function waitAndRun(tries=0) {
const root = getContainer();
const ready = root && root.querySelector('input[type="checkbox"][id^="mw-search-ns"], input[type="checkbox"][name="ns[]"]');
if (ready) { processOnce(root); return; }
if (tries < 60) setTimeout(() => waitAndRun(tries+1), 100); // max ~6s, bez zacyklení
}
// spustit po načtení stránky i obsahu
document.addEventListener('DOMContentLoaded', () => waitAndRun());
mw.hook('wikipage.content').add(() => waitAndRun());
})();
// --- Vynucení profile=advanced + ns0=1 už v URL, aby první výsledek hledal i v Hlavním ---
(function () {
if (mw.config.get('wgCanonicalSpecialPageName') !== 'Search') return;
const url = new URL(location.href);
let changed = false;
// profil = advanced (ať je UI správné)
if (url.searchParams.get('profile') !== 'advanced') {
url.searchParams.set('profile', 'advanced');
changed = true;
}
// pokud v URL není žádný ns parametr NEBO chybí ns0, doplň ns0=1
const hasAnyNsParam = Array.from(url.searchParams.keys()).some(k => /^ns\d+$/.test(k));
if (!hasAnyNsParam || !url.searchParams.has('ns0')) {
url.searchParams.set('ns0', '1');
changed = true;
}
if (changed) {
// jednorázově přenačti se správnými parametry (bez nekonečné smyčky)
location.replace(url.toString());
return;
}
})();