Jump to content

MediaWiki:Common.js

From Grantha
Revision as of 07:03, 25 March 2026 by Chandrashekars (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.hook( 'wikipage.content' ).add( function ( $content ) {
    $content.find( '.commentary-toggle' ).on( 'click', function () {
        var verseId = $( this ).attr( 'data-verse' );
        var $block = $( '#' + CSS.escape( verseId ) );
        var $bodies = $block.find( '.commentary-body' );
        var isHidden = $bodies.first().hasClass( 'commentary-hidden' );
        $bodies.toggleClass( 'commentary-hidden', !isHidden );
        $( this ).toggleClass( 'commentary-toggle-active', isHidden );
    } );
} );
// CopyID button handler
$(document).ready(function () {
  $(document).on('click', '.copy-id-btn', function () {
    var btn = $(this);
    var id = btn.data('copyid');
    if (!id) return;

    // Use Clipboard API with fallback
    if (navigator.clipboard && window.isSecureContext) {
      navigator.clipboard.writeText(id).then(function () {
        btn.addClass('copied').text('✓');
        setTimeout(function () {
          btn.removeClass('copied').text('⧉');
        }, 1800);
      });
    } else {
      // Fallback for non-HTTPS or older browsers
      var temp = $('<textarea>').val(id).appendTo('body');
      temp[0].select();
      document.execCommand('copy');
      temp.remove();
      btn.addClass('copied').text('✓');
      setTimeout(function () {
        btn.removeClass('copied').text('⧉');
      }, 1800);
    }
  });
});
$(document).ready(function () {

  // Open/close menu
  $(document).on('click', '.verse-dots', function (e) {
    e.stopPropagation();
    var $menu = $(this).next('.verse-menu');
    var isOpen = $menu.hasClass('open');
    // close all others first
    $('.verse-menu.open').removeClass('open');
    $('.verse-dots.open').removeClass('open');
    if (!isOpen) {
      $menu.addClass('open');
      $(this).addClass('open');
    }
  });

  // Close on outside click
  $(document).on('click', function () {
    $('.verse-menu.open').removeClass('open');
    $('.verse-dots.open').removeClass('open');
  });

  // Commentary toggle
  $(document).on('click', '.verse-menu-commentary', function () {
    var verseId = $(this).data('verse');
    var $body = $('[data-verse="' + verseId + '"].commentary-body').first();
    $body.toggleClass('commentary-hidden');
    $('.verse-menu.open').removeClass('open');
    $('.verse-dots.open').removeClass('open');
  });

  // Copy verse
  $(document).on('click', '.verse-menu-copy', function () {
    var $dots = $(this).closest('.verse-menu').prev('.verse-dots');
    var line1 = $dots.data('line1') || '';
    var line2 = $dots.data('line2') || '';
    var text  = line2 ? line1 + '\n' + line2 : line1;
    var $item = $(this);
    if (navigator.clipboard && window.isSecureContext) {
      navigator.clipboard.writeText(text).then(function () {
        $item.html('<span class="verse-menu-icon">✓</span> Copied!');
        setTimeout(function () {
          $item.html('<span class="verse-menu-icon">⧉</span> Copy verse');
          $('.verse-menu.open').removeClass('open');
          $('.verse-dots.open').removeClass('open');
        }, 1500);
      });
    } else {
      var $t = $('<textarea>').val(text).appendTo('body');
      $t[0].select(); document.execCommand('copy'); $t.remove();
      $item.html('<span class="verse-menu-icon">✓</span> Copied!');
      setTimeout(function () {
        $item.html('<span class="verse-menu-icon">⧉</span> Copy verse');
        $('.verse-menu.open').removeClass('open');
        $('.verse-dots.open').removeClass('open');
      }, 1500);
    }
  });

  // Download verse
  $(document).on('click', '.verse-menu-download', function () {
    var $dots  = $(this).closest('.verse-menu').prev('.verse-dots');
    var id     = $dots.data('verse') || 'verse';
    var line1  = $dots.data('line1') || '';
    var line2  = $dots.data('line2') || '';
    var text   = line2 ? line1 + '\n' + line2 : line1;
    var blob   = new Blob([ text ], { type: 'text/plain;charset=utf-8' });
    var url    = URL.createObjectURL(blob);
    var $a     = $('<a>').attr({ href: url, download: id + '.txt' }).appendTo('body');
    $a[0].click(); $a.remove(); URL.revokeObjectURL(url);
    $('.verse-menu.open').removeClass('open');
    $('.verse-dots.open').removeClass('open');
  });

});