Jump to content

MediaWiki:Common.js

From Continuum Universes Wiki
Revision as of 12:44, 1 November 2025 by Cdjensen94 (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.
$(function() {
  fetch('/api.php?action=query&meta=siteinfo&siprop=statistics&format=json')
    .then(res => res.json())
    .then(data => {
      const current = data.query.statistics.articles;
      const goal = 500;
      const left = goal - current;
      const el = document.getElementById("article-countdown");
      if (el) {
        el.innerHTML = left > 0
          ? `🚧 Only <strong>${left}</strong> articles to go until 500!`
          : `🎯 We've reached 500 articles! Celebrate good times, c'mon!`;
      }
    });
});
// MediaWiki:Common.js
mw.hook('rcfilters.ui.initialized').add(function () {
  document.documentElement.classList.add('rcfilters-ready');
});
// MediaWiki:Common.js  — Emoji picker for the wikitext editor
mw.loader.using([]).then(async () => {
  // Only run on edit/new sections where the standard textarea exists
  const $box = $('#wpTextbox1');
  if (!$box.length) return;

  // Dynamically import Emoji Button (ES module)
  // Pin the version you want; 4.6.4 shown here.
  const { EmojiButton } = await import('https://cdn.jsdelivr.net/npm/@joeattardi/emoji-button@4.6.4/dist/index.js');

  // Create a trigger button and place it after the textarea label/toolbar
  const $trigger = $('<button>')
    .attr('type', 'button')
    .attr('id', 'emoji-trigger')
    .addClass('mw-ui-button')
    .text('😀 Emoji');

  // Try to tuck it into the standard edit tools area if present; else, put it above the textarea
  const $tools = $('#wikiEditor-ui-toolbar, .editOptions').first();
  if ($tools.length) {
    $tools.prepend($trigger);
  } else {
    $box.before($('<div class="emoji-trigger-wrap">').append($trigger));
  }

  // Create the picker
  const picker = new EmojiButton({
    // tweak to taste:
    autoHide: true,
    showSearch: true,
    showRecents: true,
    emojisPerRow: 8
  });

  // Insert at the caret when an emoji is chosen
  picker.on('emoji', selection => {
    const textarea = $box.get(0);
    const start = textarea.selectionStart;
    const end = textarea.selectionEnd;
    const before = textarea.value.slice(0, start);
    const after  = textarea.value.slice(end);
    textarea.value = before + selection.emoji + after;

    // Move caret after the inserted emoji
    const newPos = start + selection.emoji.length;
    textarea.focus();
    textarea.setSelectionRange(newPos, newPos);
  });

  // Toggle the picker anchored to the button
  $('#emoji-trigger').on('click', function () {
    picker.togglePicker(this);
  });
});