Add text files support for the QR. Close #777.

This commit is contained in:
Nicolas Stepien 2013-02-27 02:50:31 +01:00
parent bda10a5a0d
commit 5c1f2128af
3 changed files with 59 additions and 14 deletions

View File

@ -5981,7 +5981,7 @@
return $.addClass(QR.nodes.el, 'dump');
},
fileInput: function(files) {
var file, length, max, _i, _len, _ref, _ref1;
var file, length, max, post, _i, _len, _ref, _ref1;
if (!(files instanceof FileList)) {
files = __slice.call(this.files);
}
@ -5994,7 +5994,9 @@
QR.cleanNotifications();
if (length === 1) {
file = files[0];
if (file.size > max) {
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 if (_ref = file.type, __indexOf.call(QR.mimeTypes, _ref) < 0) {
QR.error('Unsupported file type.');
@ -6005,14 +6007,19 @@
}
for (_i = 0, _len = files.length; _i < _len; _i++) {
file = files[_i];
if (file.size > max) {
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 if (_ref1 = file.type, __indexOf.call(QR.mimeTypes, _ref1) < 0) {
QR.error("" + file.name + ": Unsupported file type.");
} else if (!QR.posts[QR.posts.length - 1].file) {
QR.posts[QR.posts.length - 1].setFile(file);
} else if ((post = QR.posts[QR.posts.length - 1]).file) {
post = new QR.post();
} else {
new QR.post().setFile(file);
post.setFile(file);
}
}
return $.addClass(QR.nodes.el, 'dump');
@ -6258,6 +6265,26 @@
}
};
_Class.prototype.pasteText = function(file) {
var reader,
_this = this;
reader = new FileReader();
reader.onload = function(e) {
var text;
text = e.target.result;
if (_this.com) {
_this.com += "\n" + text;
} else {
_this.com = text;
}
if (QR.selected === _this) {
QR.nodes.com.value = _this.com;
}
return _this.nodes.span.textContent = _this.com;
};
return reader.readAsText(file);
};
_Class.prototype.dragStart = function() {
return $.addClass(this, 'drag');
};
@ -6487,7 +6514,7 @@
QR.mimeTypes.push('');
nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value;
if ($.engine !== 'presto') {
nodes.fileInput.accept = mimeTypes;
nodes.fileInput.accept = "text/*, " + mimeTypes;
}
QR.spoiler = !!$('input[name=spoiler]');
nodes.spoiler.hidden = !QR.spoiler;

View File

@ -16,6 +16,7 @@ beta
Delete links in the post menu will only appear for your posts.
QR changes:
Opening text files will insert their content in the comment field.
Cooldown start time is now more accurate, which means shorter cooldown period and faster auto-posting.
Clicking the submit button while uploading will abort the upload and won't start re-uploading automatically anymore.
Closing the QR while uploading will abort the upload and won't close the QR anymore.

View File

@ -307,7 +307,9 @@ QR =
# Set or change current post's file.
if length is 1
file = files[0]
if file.size > max
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.'
@ -316,15 +318,18 @@ QR =
return
# Create new posts with these files.
for file in files
if file.size > max
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 unless QR.posts[QR.posts.length - 1].file
# set last post's file
QR.posts[QR.posts.length - 1].setFile file
else if (post = QR.posts[QR.posts.length - 1]).file
post = new QR.post()
else
new QR.post().setFile file
post.setFile file
$.addClass QR.nodes.el, 'dump'
resetThreadSelector: ->
if g.VIEW is 'thread'
@ -504,6 +509,18 @@ QR =
$.addClass QR.nodes.fileSubmit, 'has-file'
else
$.rmClass QR.nodes.fileSubmit, 'has-file'
pasteText: (file) ->
reader = new FileReader()
reader.onload = (e) =>
text = e.target.result
if @com
@com += "\n#{text}"
else
@com = text
if QR.selected is @
QR.nodes.com.value = @com
@nodes.span.textContent = @com
reader.readAsText file
dragStart: ->
$.addClass @, 'drag'
dragEnd: ->
@ -705,7 +722,7 @@ QR =
# Add empty mimeType to avoid errors with URLs selected in Window's file dialog.
QR.mimeTypes.push ''
nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value
nodes.fileInput.accept = mimeTypes if $.engine isnt 'presto' # Opera's accept attribute is fucked up
nodes.fileInput.accept = "text/*, #{mimeTypes}" if $.engine isnt 'presto' # Opera's accept attribute is fucked up
QR.spoiler = !!$ 'input[name=spoiler]'
nodes.spoiler.hidden = !QR.spoiler