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')
|
$.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?
|
||||||
|
|||||||
@ -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 ->
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user