MediaWiki:Common.js
Z Franklinova expedice
Poznámka: Po zveřejnění musíte vyprázdnit cache vašeho prohlížeče, jinak změny neuvidíte.
- Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)
- Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)
- Edge: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5.
/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky. */
/**
* AlertDismiss (global) — keep Bootstrap 5 alerts dismissed across pages.
* Works for anonymous users (localStorage). No Gadgets needed.
*
* Usage in your wikitext/SiteNotice:
* <div id="site-alert"
* class="alert alert-warning alert-dismissible fade show"
* role="alert"
* data-alert-ttl="86400" <!-- seconds; default 86400 (1 day) -->
* data-alert-version="1"> <!-- bump to force re-show -->
* <strong>Heads up:</strong> Maintenance tonight.
* <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
* </div>
*
* Optional: ?resetalerts=1 in the URL clears stored state for alerts on that page.
*/
(function (mw, $) {
'use strict';
var DEFAULT_TTL_MS = 86400 * 1000; // 1 day
var STORAGE_PREFIX = 'AlertDismiss/';
function now() { return Date.now(); }
function keyFor(id, version) { return STORAGE_PREFIX + id + '/v' + (version || 1); }
function parseIntAttr($el, name, fallback) {
var v = $el.attr(name);
if (!v) return fallback;
var n = parseInt(v, 10);
return Number.isFinite(n) ? n : fallback;
}
function getStableId($el) {
return $el.attr('data-alert-id') || $el.attr('id') || null;
}
function readStore(k) {
try { var r = localStorage.getItem(k); return r ? JSON.parse(r) : null; } catch (e) { return null; }
}
function writeStore(k, obj) { try { localStorage.setItem(k, JSON.stringify(obj)); } catch (e) {} }
function removeStore(k) { try { localStorage.removeItem(k); } catch (e) {} }
function isDismissed(k, ttlMs) {
var d = readStore(k);
return d && d.time && (now() - d.time) < ttlMs;
}
function bindDismiss($alert, k) {
// If Bootstrap JS is present, use its event; otherwise fall back to button click.
if (window.bootstrap || $.fn.alert) {
$alert.on('closed.bs.alert', function () {
writeStore(k, { time: now() });
});
} else {
$alert.find('.btn-close').on('click', function () {
writeStore(k, { time: now() });
setTimeout(function () { $alert.remove(); }, 0);
});
}
}
function process($root) {
var resetParam = mw.util && mw.util.getParamValue ? mw.util.getParamValue('resetalerts') : null;
$root.find('.alert.alert-dismissible').each(function () {
var $a = $(this);
var id = getStableId($a);
if (!id) return; // require a stable id
var version = parseIntAttr($a, 'data-alert-version', 1);
var ttlSec = parseIntAttr($a, 'data-alert-ttl', DEFAULT_TTL_MS / 1000);
var ttlMs = ttlSec * 1000;
var k = keyFor(id, version);
if (resetParam === '1') removeStore(k);
if (isDismissed(k, ttlMs)) {
$a.remove(); // hide before user sees it
return;
}
bindDismiss($a, k);
});
}
// Run on initial render and on any content refresh (previews/VE/etc.)
mw.hook('wikipage.content').add(function ($content) { process($content); });
$(function () { process($(document)); });
})(mediaWiki, jQuery);
/**
* Extra buttons in toolbar
* @stats [[File:Krinkle_InsertWikiEditorButton.js]]
*/
$.ajax({ dataType: 'script', cache: true,
url: 'https://meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/InsertWikiEditorButton.js&action=raw&ctype=text/javascript'
}).then(function () {
// Ship
krInsertWikiEditorButton({
id: "mw-customeditbutton-ship",
icon: "/wiki/resources/assets/custom-icons/button-ship.png",
label: 'Ship',
insertBefore: '<span class="name-ship">',
insertAfter: '</span>',
sampleText: 'Loď'
});
// Person
krInsertWikiEditorButton({
id: "mw-customeditbutton-person",
icon: "/wiki/resources/assets/custom-icons/button-person.png",
label: 'Person',
insertBefore: '<span class="name-person">',
insertAfter: '</span>',
sampleText: 'Osoba'
});
// Place
krInsertWikiEditorButton({
id: "mw-customeditbutton-place",
icon: "/wiki/resources/assets/custom-icons/button-place.png",
label: 'Place',
insertBefore: '<span class="name-place">',
insertAfter: '</span>',
sampleText: 'Místo'
});
// Date
krInsertWikiEditorButton({
id: "mw-customeditbutton-date",
icon: "/wiki/resources/assets/custom-icons/button-date.png",
label: 'Date',
insertBefore: '<span class="text-date">',
insertAfter: '</span>',
sampleText: 'Datum'
});
// English (blok)
krInsertWikiEditorButton({
id: "mw-customeditbutton-enblock",
icon: "/wiki/resources/assets/custom-icons/button-en.png",
label: 'English block',
insertBefore: '<div lang="en">',
insertAfter: '</div>',
sampleText: 'English text'
});
// Citace (blok)
krInsertWikiEditorButton({
id: "mw-customeditbutton-blockquote",
icon: "/wiki/resources/assets/custom-icons/button-blockquote.png",
label: 'Bloková citace',
insertBefore: '<blockquote>',
insertAfter: '</blockquote>',
sampleText: 'Citovaný odstavec'
});
// Citace (inline text)
krInsertWikiEditorButton({
id: "mw-customeditbutton-inlinequote",
icon: "/wiki/resources/assets/custom-icons/button-quote.png",
label: 'Řádková citace',
insertBefore: '<q>',
insertAfter: '</q>',
sampleText: 'Citovaný text'
});
});
/* Viz https://www.mediawiki.org/wiki/Manual:Custom_edit_buttons#Classic_edit_toolbar */
mw.hook( 'wikipage.editform' ).add( function () {
mw.loader.using( 'mediawiki.toolbar' ).then( function () {
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-ship.png',
speedTip: 'Loď',
tagOpen: '<span class="name-ship">',
tagClose: '</span>',
sampleText: 'Jméno lodi',
imageId: 'button-ship'
} );
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-person.png',
speedTip: 'Osoba',
tagOpen: '<span class="name-person">',
tagClose: '</span>',
sampleText: 'Jméno osoby',
imageId: 'button-person'
} );
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-place.png',
speedTip: 'Místo',
tagOpen: '<span class="name-place">',
tagClose: '</span>',
sampleText: 'Jméno místa',
imageId: 'button-place'
} );
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-date.png',
speedTip: 'Datum',
tagOpen: '<span class="text-date">',
tagClose: '</span>',
sampleText: 'Datum',
imageId: 'button-date'
} );
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-en.png',
speedTip: 'English',
tagOpen: '<div lang="en">',
tagClose: '</div>',
sampleText: 'English text',
imageId: 'button-english'
} );
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-blockquote.png',
speedTip: 'Bloková citace',
tagOpen: '<blockquote>',
tagClose: '</blockquote>',
sampleText: 'Citovaný odstavec',
imageId: 'button-blockquote'
} );
mw.toolbar.addButton( {
imageFile: '/wiki/resources/assets/custom-icons/button-quote.png',
speedTip: 'Řádková citace',
tagOpen: '<q>',
tagClose: '</q>',
sampleText: 'Citovaný text',
imageId: 'button-quote'
} );
} );
} );