MediaWiki:Common.js: Difference between revisions

No edit summary
No edit summary
Line 38: Line 38:
   });
   });
});
});
// ── Verse copy & download ────────────────────────────────────────
$(document).ready(function () {
$(document).ready(function () {


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


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


});
});