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:
parent
150b03e6b8
commit
39eccf1457
@ -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?
|
||||
|
||||
@ -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 ->
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user