diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee index fe8d18e95..011f35697 100644 --- a/src/Posting/QR.coffee +++ b/src/Posting/QR.coffee @@ -94,6 +94,7 @@ QR = $.prepend navLinksBot, linkBot if (navLinksBot = $ '.navLinksBot') $.on d, 'QRGetFile', QR.getFile + $.on d, 'QRDrawFile', QR.drawFile $.on d, 'QRSetFile', QR.setFile $.on d, 'paste', QR.paste @@ -349,6 +350,17 @@ QR = getFile: -> $.event 'QRFile', QR.selected?.file + drawFile: (e) -> + file = QR.selected?.file + return unless file and /^(image|video)\//.test(file.type) + isVideo = /^video\//.test file + el = $.el (if isVideo then 'video' else 'img') + $.on el, 'error', -> QR.error 'Could not open file.' + $.on el, (if isVideo then 'loadeddata' else 'load'), -> + e.target.getContext('2d').drawImage el, 0, 0 + URL.revokeObjectURL el.src + el.src = URL.createObjectURL file + setFile: (e) -> {file, name, source} = e.detail file.name = name if name? diff --git a/src/Posting/QR.oekaki.coffee b/src/Posting/QR.oekaki.coffee index cfb602d71..161f21457 100644 --- a/src/Posting/QR.oekaki.coffee +++ b/src/Posting/QR.oekaki.coffee @@ -122,30 +122,28 @@ QR.oekaki = detail: {type: 'warning', content, lifetime: 20} } cb = (e) -> - document.removeEventListener 'QRFile', cb, false - return error 'No file to edit.' unless e.detail - return error 'Not an image.' unless /^(image|video)\//.test e.detail.type - isVideo = /^video\//.test e.detail.type - file = document.createElement(if isVideo then 'video' else 'img') - file.addEventListener 'error', -> error 'Could not open file.', false - file.addEventListener (if isVideo then 'loadeddata' else 'load'), -> - Tegaki.destroy() if Tegaki.bg - FCX.oekakiName = name - Tegaki.open - onDone: FCX.oekakiCB - onCancel: -> Tegaki.bgColor = '#ffffff' - width: file.naturalWidth or file.videoWidth - height: file.naturalHeight or file.videoHeight - bgColor: 'transparent' - Tegaki.activeCtx.drawImage file, 0, 0 - , false - file.src = URL.createObjectURL e.detail + @removeEventListener('QRMetadata', cb, false) if e + selected = document.getElementById 'selected' + return error 'No file to edit.' unless selected?.dataset.type + return error 'Not an image.' unless /^(image|video)\//.test selected.dataset.type + return error 'Metadata not available.' unless selected.dataset.height + if selected.dataset.height is 'loading' + selected.addEventListener('QRMetadata', cb, false) + return + Tegaki.destroy() if Tegaki.bg + FCX.oekakiName = name + Tegaki.open + onDone: FCX.oekakiCB + onCancel: -> Tegaki.bgColor = '#ffffff' + width: +selected.dataset.width + height: +selected.dataset.height + bgColor: 'transparent' + Tegaki.activeCtx.canvas.dispatchEvent new CustomEvent 'QRDrawFile', {bubbles: true} if Tegaki.bg and Tegaki.onDoneCb is FCX.oekakiCB and source is FCX.oekakiLatest FCX.oekakiName = name Tegaki.resume() else - document.addEventListener 'QRFile', cb, false - document.dispatchEvent new CustomEvent 'QRGetFile', {bubbles: true} + cb() toggle: -> QR.oekaki.load -> diff --git a/src/Posting/QR.post.coffee b/src/Posting/QR.post.coffee index a467fb331..b18f3fdc1 100644 --- a/src/Posting/QR.post.coffee +++ b/src/Posting/QR.post.coffee @@ -239,11 +239,16 @@ QR.post = class $.off el, 'error', onerror @checkDimensions el @setThumbnail el + $.event 'QRMetadata', null, @nodes.el onerror = => $.off el, event, onload $.off el, 'error', onerror @fileError "Corrupt #{if isVideo then 'video' else 'image'} or error reading metadata.", '<%= meta.faq %>#error-reading-metadata' URL.revokeObjectURL el.src + # XXX https://bugzilla.mozilla.org/show_bug.cgi?id=1021289 + @nodes.el.removeAttribute 'data-height' + $.event 'QRMetadata', null, @nodes.el + @nodes.el.dataset.height = 'loading' $.on el, event, onload $.on el, 'error', onerror el.src = URL.createObjectURL @file