MediaWiki:Common.js: Difference between revisions
No edit summary |
No edit summary |
||
| Line 38: | Line 38: | ||
}); | }); | ||
}); | }); | ||
$(document).ready(function () { | $(document).ready(function () { | ||
// | // Open/close menu | ||
$(document).on('click', '. | $(document).on('click', '.verse-dots', function (e) { | ||
var $ | e.stopPropagation(); | ||
var | var $menu = $(this).next('.verse-menu'); | ||
var | var isOpen = $menu.hasClass('open'); | ||
var | // 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 () { | ||
$ | $item.html('<span class="verse-menu-icon">✓</span> Copied!'); | ||
setTimeout(function () { $ | 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(); | ||
$item.html('<span class="verse-menu-icon">✓</span> Copied!'); | |||
setTimeout(function () { | |||
$ | $item.html('<span class="verse-menu-icon">⧉</span> Copy verse'); | ||
setTimeout(function () { $ | $('.verse-menu.open').removeClass('open'); | ||
$('.verse-dots.open').removeClass('open'); | |||
}, 1500); | |||
} | } | ||
}); | }); | ||
// Download verse | // Download verse | ||
$(document).on('click', '. | $(document).on('click', '.verse-menu-download', function () { | ||
var $ | var $dots = $(this).closest('.verse-menu').prev('.verse-dots'); | ||
var id | var id = $dots.data('verse') || 'verse'; | ||
var line1 = $ | var line1 = $dots.data('line1') || ''; | ||
var 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 | var $a = $('<a>').attr({ href: url, download: id + '.txt' }).appendTo('body'); | ||
var $a | $a[0].click(); $a.remove(); URL.revokeObjectURL(url); | ||
$a[0].click(); | $('.verse-menu.open').removeClass('open'); | ||
$('.verse-dots.open').removeClass('open'); | |||
$ | |||
}); | }); | ||
}); | }); | ||