MediaWiki:Common.js

From Benkyy Wiki
Revision as of 21:37, 25 April 2026 by Benkyy (talk | contribs) (Add live clock and stat animation for custom landing page)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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 () {
  function updateBenkyyClock() {
    var timeEl = document.querySelector('.benky-live-clock');
    var dateEl = document.querySelector('.benky-live-date');
    if (!timeEl && !dateEl) return;

    var now = new Date();
    var timeFmt = new Intl.DateTimeFormat('en-GB', {
      timeZone: 'Europe/Bucharest',
      hour: '2-digit',
      minute: '2-digit',
      hour12: true
    });
    var dateFmt = new Intl.DateTimeFormat('en-GB', {
      timeZone: 'Europe/Bucharest',
      weekday: 'long',
      day: 'numeric',
      month: 'long',
      year: 'numeric'
    });

    if (timeEl) timeEl.textContent = timeFmt.format(now);
    if (dateEl) dateEl.textContent = dateFmt.format(now);
  }

  function animateCounters() {
    document.querySelectorAll('.benky-stat-number[data-target]').forEach(function (el) {
      if (el.dataset.done === '1') return;
      el.dataset.done = '1';
      var target = parseInt(el.getAttribute('data-target') || '0', 10);
      var start = 0;
      var duration = 900;
      var startTime = null;

      function step(ts) {
        if (!startTime) startTime = ts;
        var progress = Math.min((ts - startTime) / duration, 1);
        var eased = 1 - Math.pow(1 - progress, 3);
        var value = Math.round(start + (target - start) * eased);
        el.textContent = value.toLocaleString('en-US');
        if (progress < 1) requestAnimationFrame(step);
      }

      requestAnimationFrame(step);
    });
  }

  function init() {
    updateBenkyyClock();
    animateCounters();
    setInterval(updateBenkyyClock, 1000);
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();