diff --git a/client/options.js b/client/options.js index b61c4f3..c53bcb3 100644 --- a/client/options.js +++ b/client/options.js @@ -316,7 +316,7 @@ function toggle_expansion(img, event) { if (event.metaKey) return; event.preventDefault(); - var expand = !img.data('thumbSrc'); + var expand = !img.data('thumbSrc'); img.closest('article').toggleClass('expanded', expand); var $imgs = img; if (THREAD && (event.altKey || event.shiftKey)) { @@ -332,7 +332,7 @@ function toggle_expansion(img, event) { with_dom(function () { $imgs.each(function () { var $img = $(this); - if (expand) + if (expand) expand_image($img); else { contract_image($img, event); @@ -344,24 +344,30 @@ function toggle_expansion(img, event) { function contract_image($img, event) { var thumb = $img.data('thumbSrc'); - if (!thumb) - return; - // try to keep the thumbnail in-window for large images - var h = $img.height(); - var th = parseInt($img.data('thumbHeight'), 10); - if (event) { - var y = $img.offset().top, t = $(window).scrollTop(); - if (y < t && th < h) - window.scrollBy(0, Math.max(th - h, - y - t - event.clientY + th/2)); + var audio = $($img).parent().siblings("audio"); + if (audio.length > 0) { + $img.data("thumbSrc", null); + audio.remove(); + } + else { + if (!thumb) + return; + // try to keep the thumbnail in-window for large images + var h = $img.height(); + var th = parseInt($img.data('thumbHeight'), 10); + if (event) { + var y = $img.offset().top, t = $(window).scrollTop(); + if (y < t && th < h) + window.scrollBy(0, Math.max(th - h, + y - t - event.clientY + th/2)); + } + if (fullWidthExpansion) + contract_full_width(parent_post($img)); + $img.replaceWith($('') + .width($img.data('thumbWidth')).height(th) + .attr('src', thumb)); } - if (fullWidthExpansion) - contract_full_width(parent_post($img)); - $img.replaceWith($('') - .width($img.data('thumbWidth')).height(th) - .attr('src', thumb)); } - function expand_image($img) { if ($img.data('thumbSrc')) return; @@ -372,36 +378,49 @@ function expand_image($img) { var cap = a.siblings('figcaption').text(); var dims = cap.match(/(\d+)x(\d+)/); var video = /^Video/.test(cap); - if (!dims) - return; - var tw = $img.width(), th = $img.height(); - var w = parseInt(dims[1], 10), h = parseInt(dims[2], 10); - // if this is a high-density screen, reduce image size appropriately - var r = window.devicePixelRatio; - if (!options.get('nohighres') && !video && r && r > 1) { - var min = 1000; - if ((w > min || h > min) && w/r > tw && h/r > th) { - w /= r; - h /= r; + var audio = /^Audio/.test(cap); + if (dims) { + var tw = $img.width(), th = $img.height(); + var w = parseInt(dims[1], 10), h = parseInt(dims[2], 10); + // if this is a high-density screen, reduce image size appropriately + var r = window.devicePixelRatio; + if (!options.get('nohighres') && !video && r && r > 1) { + var min = 1000; + if ((w > min || h > min) && w/r > tw && h/r > th) { + w /= r; + h /= r; + } } - } - - $img.remove(); - $img = $(video ? '