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;', "");
$.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;', "