MediaWiki:Common.js

From Sanatan Hindu Dharma
Revision as of 11:17, 28 October 2025 by Balaji (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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* === Move Category Links Above Footer === */
$(document).ready(function () {
  var catlinks = $('#catlinks');
  var footer = $('.mw-footer, footer, #footer'); // works with most skins
  var content = $('#bodyContent, #content, .mw-body');

  if (catlinks.length && footer.length) {
    // Move categories just before footer
    catlinks.insertBefore(footer);
  } else if (catlinks.length && content.length) {
    // Fallback: move it to the end of main content
    catlinks.appendTo(content);
  }
});

/* === Floating Upload Button === */
$(document).ready(function() {
  if (mw.config.get('wgNamespaceNumber') >= 0) { // Only show on normal pages
    var pageName = mw.config.get('wgPageName');
    var uploadUrl = mw.util.getUrl('Form:UploadVideo', { 'page': pageName });

    $('<div style="position:fixed; bottom:20px; right:20px; background:#007bff; color:white; padding:10px; border-radius:5px; cursor:pointer; font-weight:bold; z-index:9999;">Upload a Video</div>')
      .click(function() {
        window.location.href = uploadUrl;
      }).appendTo('body');
  }
});

/* === Responsive Slider (mw-slider) === */
(function () {
  function initSliders() {
    var sliders = document.querySelectorAll('.mw-slider');
    sliders.forEach(function (slider) {
      if (slider._mwSliderInited) return;
      slider._mwSliderInited = true;

      var track = slider.querySelector('.mw-slider-track');
      var items = Array.from(slider.querySelectorAll('.mw-slider-item'));
      var btnPrev = slider.querySelector('.mw-slider-btn.prev');
      var btnNext = slider.querySelector('.mw-slider-btn.next');
      var currentIndex = 0;

      function getItemsToShow() {
        var w = window.innerWidth;
        if (w <= 600) return 1;
        if (w <= 900) return 2;
        return 3;
      }

      function update() {
        var itemsToShow = getItemsToShow();
        var itemRect = items[0].getBoundingClientRect();
        var gap = parseFloat(getComputedStyle(track).gap || 16);
        var translateX = -currentIndex * (itemRect.width + gap);
        track.style.transform = 'translateX(' + translateX + 'px)';
        btnPrev.disabled = currentIndex <= 0;
        btnNext.disabled = currentIndex >= items.length - itemsToShow;
      }

      btnPrev && btnPrev.addEventListener('click', function() {
        currentIndex = Math.max(0, currentIndex - 1);
        update();
      });

      btnNext && btnNext.addEventListener('click', function() {
        currentIndex = Math.min(items.length - getItemsToShow(), currentIndex + 1);
        update();
      });

      window.addEventListener('resize', update);
      setTimeout(update, 200);
    });
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initSliders);
  } else {
    initSliders();
  }
  if (window.mw && mw.hook) mw.hook('wikipage.content').add(initSliders);
})();

/* === Full Width Slider (mw-fullslider) === */
(function () {
  function initFullSliders() {
    var sliders = document.querySelectorAll('.mw-fullslider');
    sliders.forEach(function (slider) {
      if (slider._fullSliderInit) return;
      slider._fullSliderInit = true;

      var track = slider.querySelector('.mw-fullslider-track');
      var slides = Array.from(track.children);
      var btnPrev = slider.querySelector('.mw-fullslider-btn.prev');
      var btnNext = slider.querySelector('.mw-fullslider-btn.next');
      var current = 0;

      function goTo(index) {
        current = (index + slides.length) % slides.length;
        var x = -current * slider.clientWidth;
        track.style.transform = 'translateX(' + x + 'px)';
      }

      btnPrev && btnPrev.addEventListener('click', () => goTo(current - 1));
      btnNext && btnNext.addEventListener('click', () => goTo(current + 1));

      window.addEventListener('resize', () => goTo(current));

      var autoplay = true, interval = 4500, timer;
      function start() {
        if (!autoplay) return;
        stop();
        timer = setInterval(() => goTo(current + 1), interval);
      }
      function stop() { if (timer) clearInterval(timer); }
      slider.addEventListener('mouseenter', stop);
      slider.addEventListener('mouseleave', start);
      start();
    });
  }

  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', initFullSliders);
  else initFullSliders();
  if (window.mw && mw.hook) mw.hook('wikipage.content').add(initFullSliders);
})();