MediaWiki:Common.js

Revision as of 22:12, 13 April 2025 by TheRoman (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
mw.loader.load( 'ext.cite.styles' );

/* Allows Template:Notice to be dismissable. */
mw.loader.using(['mediawiki.user', 'jquery'], function () {
  $(function () {
    if (mw.user.isAnon()) {
      $('.user-only-dismiss').hide();
      return;
    }

    $('.maybe-dismissible').each(function () {
      var notice = $(this);
      var noticeId = notice.attr('id');
      if (!noticeId) return;

      var storageKey = 'dismissed-notice-' + noticeId;

      if (localStorage.getItem(storageKey) === '1') {
        notice.hide();
      } else {
        notice.addClass('dismissible-notice');
        notice.find('.dismiss-button').on('click', function () {
          notice.hide();
          localStorage.setItem(storageKey, '1');
        });
      }
    });
  });
});

mw.loader.using('mediawiki.util').then(function () {
  // Add "Reset Notices" to the Actions menu
  mw.util.addPortletLink(
    'p-cactions', // Add to the Actions menu
    '#',
    'Reset Notices',
    'ca-reset-notices',
    'Reset all dismissed notices stored in your browser'
  );

  // Handle click to directly reset notices without confirmation
  document.getElementById('ca-reset-notices').addEventListener('click', function (e) {
    e.preventDefault();

    // Clear all dismissed notices from localStorage
    Object.keys(localStorage).forEach(function (key) {
      if (key.startsWith('dismissed-notice-')) {
        localStorage.removeItem(key);
      }
    });

    // Refresh the page to reflect the reset
    location.reload();
  });
});

/* Allows bullet points in to-do list in Template:User to toggle on and off. */
$(function() {
  const bullets = document.querySelectorAll('.toggle-bullet');
  const bulletChars = ['<span style="color: green">&#9679;</span>', '&#9702;'];
  const localStorageKey = 'userInfoboxBulletState';

  bullets.forEach((bullet, index) => {
    let currentIndex = localStorage.getItem(localStorageKey + index) === '0' ? 0 : 1; // Default to black if no stored state
    bullet.innerHTML = bulletChars[currentIndex];

    bullet.addEventListener('click', function() {
      currentIndex = (currentIndex + 1) % bulletChars.length;
      this.innerHTML = bulletChars[currentIndex];
      localStorage.setItem(localStorageKey + index, currentIndex.toString());
    });
  });
});