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')
$.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?

View File

@ -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 ->

View File

@ -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