diff --git a/4chan_x.user.js b/4chan_x.user.js index da1764adb..72b4addae 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -1257,8 +1257,11 @@ var file, _i, _len, _ref; qr.cleanError(); if (this.files.length === 1) { - if (this.files[0].size > this.max) { + file = this.files[0]; + if (file.size > this.max) { qr.error('File too large.'); + } else if (-1 === qr.mimeTypes.indexOf(file.type)) { + qr.error('Unsupported file type.'); } else { } @@ -1270,105 +1273,27 @@ if (file.size > this.max) { qr.error("File " + file.name + " is too large."); break; + } else if (-1 === qr.mimeTypes.indexOf(file.type)) { + qr.error("" + file.name + ": Unsupported file type."); + break; } } return $.addClass(qr.el, 'dump'); }, dialog: function() { - var file, input, name, _ref; - qr.el = ui.dialog('qr', 'top:0;right:0;', '\ -\ -\ -
\ - Quick Reply\ - \ - \ -
\ -
\ -
\ -
\ -
\ -
\ -
\ -
\ -
\ -
'); + var input, mimeTypes, name, _ref; + mimeTypes = $('.rules').textContent.toLowerCase().match(/: (.+)/)[1].replace(/\w+/g, function(type) { + switch (type) { + case 'jpg': + return 'image/jpeg'; + case 'pdf': + return 'application/pdf'; + default: + return 'image/' + type; + } + }); + qr.mimeTypes = mimeTypes.split(', '); + qr.el = ui.dialog('qr', 'top:0;right:0;', "
Quick Reply
"); $.on($('#autohide', qr.el), 'click', qr.hide); $.on($('.close', qr.el), 'click', qr.close); $.on($('#dump', qr.el), 'click', function() { @@ -1391,19 +1316,7 @@ textarea.field {\ return qr.inputs[match[1]].value = JSON.parse(e.newValue); } }); - file = $('[type=file]', qr.el); - file.accept = $('.rules').textContent.match(/: (.+)/)[1].replace(/\w+/g, function(type) { - switch (type) { - case 'JPG': - return 'image/JPEG'; - case 'PDF': - return 'application/PDF'; - default: - return 'image/' + type; - } - }); - file.max = $('[name=MAX_FILE_SIZE]').value; - $.on(file, 'change', qr.fileInput); + $.on($('[type=file]', qr.el), 'change', qr.fileInput); if (g.dead) { $.extend($('[type=submit]', qr.el), { disabled: true, diff --git a/script.coffee b/script.coffee index 05bc1e536..3b612052c 100644 --- a/script.coffee +++ b/script.coffee @@ -924,8 +924,11 @@ qr = fileInput: -> qr.cleanError() if @files.length is 1 - if @files[0].size > @max + file = @files[0] + if file.size > @max qr.error 'File too large.' + else if -1 is qr.mimeTypes.indexOf file.type + qr.error 'Unsupported file type.' else # modify selected reply's file return @@ -933,12 +936,25 @@ qr = if file.size > @max qr.error "File #{file.name} is too large." break + else if -1 is qr.mimeTypes.indexOf file.type + qr.error "#{file.name}: Unsupported file type." + break # add new reply # set reply's file $.addClass qr.el, 'dump' dialog: -> - qr.el = ui.dialog 'qr', 'top:0;right:0;', ' + # chose only allowed files + mimeTypes = $('.rules').textContent.toLowerCase().match(/: (.+)/)[1].replace /\w+/g, (type) -> + switch type + when 'jpg' + 'image/jpeg' + when 'pdf' + 'application/pdf' + else + 'image/' + type + qr.mimeTypes = mimeTypes.split ', ' + qr.el = ui.dialog 'qr', 'top:0;right:0;', "