MediaWiki:Common.js

From The Reed and Rite
Revision as of 21:35, 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. */
$(document).ready(function() {
  $('.dismissible-notice .dismiss-button').click(function() {
    $(this).closest('.dismissible-notice').hide();
  });
});

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


mw.loader.using('mediawiki.user', function () {
  $(document).ready(function () {
    if (mw.user.isAnon()) {
      // Hide dismiss buttons for anonymous users
      $('.dismiss-button').hide();
      return;
    }

    // Enable dismissible behavior for logged-in users
    $('.maybe-dismissible').addClass('dismissible-notice');

    $('.dismissible-notice').each(function () {
      let $notice = $(this);
      let dataId = $notice.data('id');

      // Generate fallback ID based on page and content if not provided
      if (!dataId) {
        const page = mw.config.get('wgPageName');
        const content = $notice.text().trim().replace(/\s+/g, ' ').slice(0, 100);
        dataId = page + '-' + content;
        $notice.attr('data-id', dataId);
      }

      // Check localStorage for dismissal
      if (localStorage.getItem('dismissed-' + dataId)) {
        $notice.hide();
      }

      // Set up dismiss button
      $notice.find('.dismiss-button').click(function () {
        localStorage.setItem('dismissed-' + dataId, '1');
        $notice.hide();
      });
    });
  });
});