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

Z Franklinova expedice

další
Skript umožňující skrytí alertů po definovanou dobu
 
(Nejsou zobrazeny 3 mezilehlé verze od stejného uživatele.)
Řádek 1: Řádek 1:
/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky. */
/* 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);


/**
/**
Řádek 11: Řádek 101:
// Ship
// Ship
krInsertWikiEditorButton({
krInsertWikiEditorButton({
id: "mw-customeditbutton-myspecialbutton",
id: "mw-customeditbutton-ship",
icon: "/wiki/resources/assets/custom-icons/button-ship.png",
icon: "/wiki/resources/assets/custom-icons/button-ship.png",
label: 'Ship',
label: 'Ship',
Řádek 20: Řádek 110:
         // Person
         // Person
krInsertWikiEditorButton({
krInsertWikiEditorButton({
id: "mw-customeditbutton-myspecialbutton",
id: "mw-customeditbutton-person",
icon: "/wiki/resources/assets/custom-icons/button-person.png",
icon: "/wiki/resources/assets/custom-icons/button-person.png",
label: 'Ship',
label: 'Person',
insertBefore: '<span class="name-person">',
insertBefore: '<span class="name-person">',
insertAfter: '</span>',
insertAfter: '</span>',
sampleText: 'Loď'
sampleText: 'Osoba'
});
});
         // Place
         // Place
krInsertWikiEditorButton({
krInsertWikiEditorButton({
id: "mw-customeditbutton-myspecialbutton",
id: "mw-customeditbutton-place",
icon: "/wiki/resources/assets/custom-icons/button-place.png",
icon: "/wiki/resources/assets/custom-icons/button-place.png",
label: 'Ship',
label: 'Place',
insertBefore: '<span class="name-place">',
insertBefore: '<span class="name-place">',
insertAfter: '</span>',
insertAfter: '</span>',
sampleText: 'Loď'
sampleText: 'Místo'
});
});
         // Date
         // Date
krInsertWikiEditorButton({
krInsertWikiEditorButton({
id: "mw-customeditbutton-myspecialbutton",
id: "mw-customeditbutton-date",
icon: "/wiki/resources/assets/custom-icons/button-date.png",
icon: "/wiki/resources/assets/custom-icons/button-date.png",
label: 'Ship',
label: 'Date',
insertBefore: '<span class="text-date">',
insertBefore: '<span class="text-date">',
insertAfter: '</span>',
insertAfter: '</span>',
sampleText: 'Loď'
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)
 
// Monkey
krInsertWikiEditorButton({
krInsertWikiEditorButton({
id: 'mw-customeditbutton-anotherspecialbutton',
id: "mw-customeditbutton-inlinequote",
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Gnome-face-monkey.svg/22px-Gnome-face-monkey.svg.png',
icon: "/wiki/resources/assets/custom-icons/button-quote.png",
label: 'Insert monkey',
label: 'Řádková citace',
insertBefore: '[[File:Gnome-face-monkey.svg|21px|',
insertBefore: '<q>',
insertAfter: ']]',
insertAfter: '</q>',
sampleText: 'Happy face'
sampleText: 'Citovaný text'
});
});
});
});



Aktuální verze z 3. 9. 2025, 21:12

/* 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'
        } );
    } );
} );