Move drawing of QR file onto Tegaki canvas into 4chan X so it is less likely to be affected by ad blocking.

This commit is contained in:
ccd0 2018-10-24 02:09:52 -07:00
parent 150b03e6b8
commit 39eccf1457
3 changed files with 35 additions and 20 deletions

View File

@ -94,6 +94,7 @@ QR =
$.prepend navLinksBot, linkBot if (navLinksBot = $ '.navLinksBot') $.prepend navLinksBot, linkBot if (navLinksBot = $ '.navLinksBot')
$.on d, 'QRGetFile', QR.getFile $.on d, 'QRGetFile', QR.getFile
$.on d, 'QRDrawFile', QR.drawFile
$.on d, 'QRSetFile', QR.setFile $.on d, 'QRSetFile', QR.setFile
$.on d, 'paste', QR.paste $.on d, 'paste', QR.paste
@ -349,6 +350,17 @@ QR =
getFile: -> getFile: ->
$.event 'QRFile', QR.selected?.file $.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) -> setFile: (e) ->
{file, name, source} = e.detail {file, name, source} = e.detail
file.name = name if name? file.name = name if name?

View File

@ -122,30 +122,28 @@ QR.oekaki =
detail: {type: 'warning', content, lifetime: 20} detail: {type: 'warning', content, lifetime: 20}
} }
cb = (e) -> cb = (e) ->
document.removeEventListener 'QRFile', cb, false @removeEventListener('QRMetadata', cb, false) if e
return error 'No file to edit.' unless e.detail selected = document.getElementById 'selected'
return error 'Not an image.' unless /^(image|video)\//.test e.detail.type return error 'No file to edit.' unless selected?.dataset.type
isVideo = /^video\//.test e.detail.type return error 'Not an image.' unless /^(image|video)\//.test selected.dataset.type
file = document.createElement(if isVideo then 'video' else 'img') return error 'Metadata not available.' unless selected.dataset.height
file.addEventListener 'error', -> error 'Could not open file.', false if selected.dataset.height is 'loading'
file.addEventListener (if isVideo then 'loadeddata' else 'load'), -> selected.addEventListener('QRMetadata', cb, false)
Tegaki.destroy() if Tegaki.bg return
FCX.oekakiName = name Tegaki.destroy() if Tegaki.bg
Tegaki.open FCX.oekakiName = name
onDone: FCX.oekakiCB Tegaki.open
onCancel: -> Tegaki.bgColor = '#ffffff' onDone: FCX.oekakiCB
width: file.naturalWidth or file.videoWidth onCancel: -> Tegaki.bgColor = '#ffffff'
height: file.naturalHeight or file.videoHeight width: +selected.dataset.width
bgColor: 'transparent' height: +selected.dataset.height
Tegaki.activeCtx.drawImage file, 0, 0 bgColor: 'transparent'
, false Tegaki.activeCtx.canvas.dispatchEvent new CustomEvent 'QRDrawFile', {bubbles: true}
file.src = URL.createObjectURL e.detail
if Tegaki.bg and Tegaki.onDoneCb is FCX.oekakiCB and source is FCX.oekakiLatest if Tegaki.bg and Tegaki.onDoneCb is FCX.oekakiCB and source is FCX.oekakiLatest
FCX.oekakiName = name FCX.oekakiName = name
Tegaki.resume() Tegaki.resume()
else else
document.addEventListener 'QRFile', cb, false cb()
document.dispatchEvent new CustomEvent 'QRGetFile', {bubbles: true}
toggle: -> toggle: ->
QR.oekaki.load -> QR.oekaki.load ->

View File

@ -239,11 +239,16 @@ QR.post = class
$.off el, 'error', onerror $.off el, 'error', onerror
@checkDimensions el @checkDimensions el
@setThumbnail el @setThumbnail el
$.event 'QRMetadata', null, @nodes.el
onerror = => onerror = =>
$.off el, event, onload $.off el, event, onload
$.off el, 'error', onerror $.off el, 'error', onerror
@fileError "Corrupt #{if isVideo then 'video' else 'image'} or error reading metadata.", '<%= meta.faq %>#error-reading-metadata' @fileError "Corrupt #{if isVideo then 'video' else 'image'} or error reading metadata.", '<%= meta.faq %>#error-reading-metadata'
URL.revokeObjectURL el.src 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, event, onload
$.on el, 'error', onerror $.on el, 'error', onerror
el.src = URL.createObjectURL @file el.src = URL.createObjectURL @file