Refactor file input handling.
This commit is contained in:
parent
7d51b560d8
commit
ae8e633ee3
@ -392,56 +392,51 @@ QR =
|
|||||||
return unless e.dataTransfer.files.length
|
return unless e.dataTransfer.files.length
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
QR.open()
|
QR.open()
|
||||||
QR.fileInput e.dataTransfer.files
|
QR.handleFiles e.dataTransfer.files
|
||||||
$.addClass QR.nodes.el, 'dump'
|
$.addClass QR.nodes.el, 'dump'
|
||||||
paste: (e) ->
|
paste: (e) ->
|
||||||
files = []
|
files = []
|
||||||
for item in e.clipboardData.items
|
for item in e.clipboardData.items when item.kind is 'file'
|
||||||
if item.kind is 'file'
|
blob = item.getAsFile()
|
||||||
blob = item.getAsFile()
|
blob.name = 'file'
|
||||||
blob.name = 'file'
|
blob.name += '.' + blob.type.split('/')[1] if blob.type
|
||||||
blob.name += '.' + blob.type.split('/')[1] if blob.type
|
files.push blob
|
||||||
files.push blob
|
|
||||||
return unless files.length
|
return unless files.length
|
||||||
QR.open()
|
QR.open()
|
||||||
QR.fileInput files
|
QR.handleFiles files
|
||||||
|
$.addClass QR.nodes.el, 'dump'
|
||||||
|
handleFiles: (files) ->
|
||||||
|
if @ isnt QR # file input
|
||||||
|
files = [@files...]
|
||||||
|
@value = null
|
||||||
|
return unless files.length
|
||||||
|
max = QR.nodes.fileInput.max
|
||||||
|
isSingle = files.length is 1
|
||||||
|
QR.cleanNotifications()
|
||||||
|
for file in files
|
||||||
|
QR.handleFile file, isSingle, max
|
||||||
|
$.addClass QR.nodes.el, 'dump' unless isSingle
|
||||||
|
handleFile: (file, isSingle, max) ->
|
||||||
|
if file.size > max
|
||||||
|
QR.error "#{file.name}: File too large (file: #{$.bytesToString file.size}, max: #{$.bytesToString max})."
|
||||||
|
return
|
||||||
|
unless file.type in QR.mimeTypes
|
||||||
|
unless /^text/.test file.type
|
||||||
|
QR.error "#{file.name}: Unsupported file type."
|
||||||
|
return
|
||||||
|
if isSingle
|
||||||
|
post = QR.selected
|
||||||
|
else if (post = QR.posts[QR.posts.length - 1]).com
|
||||||
|
post = new QR.post()
|
||||||
|
post.pasteText file
|
||||||
|
return
|
||||||
|
if isSingle
|
||||||
|
post = QR.selected
|
||||||
|
else if (post = QR.posts[QR.posts.length - 1]).file
|
||||||
|
post = new QR.post()
|
||||||
|
post.setFile file
|
||||||
openFileInput: ->
|
openFileInput: ->
|
||||||
QR.nodes.fileInput.click()
|
QR.nodes.fileInput.click()
|
||||||
fileInput: (files) ->
|
|
||||||
if files instanceof Event # file input
|
|
||||||
files = [@files...]
|
|
||||||
QR.nodes.fileInput.value = null # Don't hold the files from being modified on windows
|
|
||||||
{length} = files
|
|
||||||
return unless length
|
|
||||||
max = QR.nodes.fileInput.max
|
|
||||||
QR.cleanNotifications()
|
|
||||||
# Set or change current post's file.
|
|
||||||
if length is 1
|
|
||||||
file = files[0]
|
|
||||||
if /^text/.test file.type
|
|
||||||
QR.selected.pasteText file
|
|
||||||
else if file.size > max
|
|
||||||
QR.error "File too large (file: #{$.bytesToString file.size}, max: #{$.bytesToString max})."
|
|
||||||
else unless file.type in QR.mimeTypes
|
|
||||||
QR.error 'Unsupported file type.'
|
|
||||||
else
|
|
||||||
QR.selected.setFile file
|
|
||||||
return
|
|
||||||
# Create new posts with these files.
|
|
||||||
for file in files
|
|
||||||
if /^text/.test file.type
|
|
||||||
if (post = QR.posts[QR.posts.length - 1]).com
|
|
||||||
post = new QR.post()
|
|
||||||
post.pasteText file
|
|
||||||
else if file.size > max
|
|
||||||
QR.error "#{file.name}: File too large (file: #{$.bytesToString file.size}, max: #{$.bytesToString max})."
|
|
||||||
else unless file.type in QR.mimeTypes
|
|
||||||
QR.error "#{file.name}: Unsupported file type."
|
|
||||||
else
|
|
||||||
if (post = QR.posts[QR.posts.length - 1]).file
|
|
||||||
post = new QR.post()
|
|
||||||
post.setFile file
|
|
||||||
$.addClass QR.nodes.el, 'dump'
|
|
||||||
|
|
||||||
posts: []
|
posts: []
|
||||||
post: class
|
post: class
|
||||||
@ -884,7 +879,7 @@ QR =
|
|||||||
$.on nodes.form, 'submit', QR.submit
|
$.on nodes.form, 'submit', QR.submit
|
||||||
$.on nodes.fileRM, 'click', -> QR.selected.rmFile()
|
$.on nodes.fileRM, 'click', -> QR.selected.rmFile()
|
||||||
$.on nodes.spoiler, 'change', -> QR.selected.nodes.spoiler.click()
|
$.on nodes.spoiler, 'change', -> QR.selected.nodes.spoiler.click()
|
||||||
$.on nodes.fileInput, 'change', QR.fileInput
|
$.on nodes.fileInput, 'change', QR.handleFiles
|
||||||
# save selected post's data
|
# save selected post's data
|
||||||
for name in ['name', 'email', 'sub', 'com', 'filename']
|
for name in ['name', 'email', 'sub', 'com', 'filename']
|
||||||
$.on nodes[name], 'input', -> QR.selected.save @
|
$.on nodes[name], 'input', -> QR.selected.save @
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user