diff --git a/4chan_x.user.js b/4chan_x.user.js
index 169b39e31..3f4524e5c 100644
--- a/4chan_x.user.js
+++ b/4chan_x.user.js
@@ -229,7 +229,7 @@
el.innerHTML = html;
el.id = id;
el.style.cssText = (saved = localStorage["" + NAMESPACE + id + ".position"]) ? saved : position;
- el.querySelector('div.move').addEventListener('mousedown', ui.dragstart, false);
+ el.querySelector('.move').addEventListener('mousedown', ui.dragstart, false);
return el;
},
dragstart: function(e) {
@@ -1481,7 +1481,7 @@
init: function() {
var _this = this;
this.img = $('.captcha > img', qr.el);
- this.input = $('[name=captcha]', qr.el);
+ this.input = $('[autocomplete]', qr.el);
this.challenge = $.id('recaptcha_challenge_field_holder');
$.on(this.img.parentNode, 'click', this.reload);
$.on(this.input, 'keydown', this.keydown);
@@ -1541,7 +1541,39 @@
}
},
dialog: function() {
- var input, mimeTypes, thread, threads, _i, _j, _len, _len2, _ref, _ref2;
+ var fileInput, input, mimeTypes, spoiler, thread, threads, _i, _j, _len, _len2, _ref, _ref2;
+ qr.el = ui.dialog('qr', 'top:0;right:0;', '\
+
\
+');
+ mimeTypes = $('.rules').textContent.match(/: (.+) /)[1].toLowerCase().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(', ');
+ fileInput = $('[type=file]', qr.el);
+ fileInput.max = $('[name=MAX_FILE_SIZE]').value;
+ fileInput.accept = mimeTypes;
+ qr.spoiler = !!$('#com_submit + label');
+ spoiler = $('#spoilerLabel', qr.el);
+ spoiler.hidden = !qr.spoiler;
if (!g.REPLY) {
threads = '';
_ref = $$('.op');
@@ -1549,22 +1581,9 @@
thread = _ref[_i];
threads += "";
}
- threads = "";
- }
- 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.spoiler = !!$('#com_submit + label');
- qr.el = ui.dialog('qr', 'top:0;right:0;', "");
- if (!g.REPLY) {
+ $.prepend($('.move > span', qr.el), $.el('select', {
+ innerHTML: threads
+ }));
$.on($('select', qr.el), 'mousedown', function(e) {
return e.stopPropagation();
});
@@ -1581,8 +1600,8 @@
$.on($('textarea', qr.el), 'change', function() {
return qr.selected.el.lastChild.textContent = this.value;
});
- $.on($('[type=file]', qr.el), 'change', qr.fileInput);
- $.on($('#spoiler', qr.el), 'change', function() {
+ $.on(fileInput, 'change', qr.fileInput);
+ $.on(spoiler.firstChild, 'change', function() {
return $('input', qr.selected.el).click();
});
new qr.reply().select();
@@ -3528,7 +3547,7 @@ a[href="javascript:;"] {\
background: -o-linear-gradient(#CCC, #DDD);\
background: linear-gradient(#CCC, #DDD);\
}\
-#qr:not(.dump) output, .dump > form > label {\
+#qr:not(.dump) #replies, .dump > form > label {\
display: none;\
}\
#replies {\
@@ -3642,7 +3661,7 @@ textarea.field {\
height: 57px;\
width: 300px;\
}\
-.field[name=captcha] {\
+.field:only-child {\
width: 100%;\
}\
#qr [type=file] {\
diff --git a/script.coffee b/script.coffee
index 58d24734c..b2dfcc453 100644
--- a/script.coffee
+++ b/script.coffee
@@ -136,7 +136,7 @@ ui =
el.innerHTML = html
el.id = id
el.style.cssText = if saved = localStorage["#{NAMESPACE}#{id}.position"] then saved else position
- el.querySelector('div.move').addEventListener 'mousedown', ui.dragstart, false
+ el.querySelector('.move').addEventListener 'mousedown', ui.dragstart, false
el
dragstart: (e) ->
#prevent text selection
@@ -1090,7 +1090,7 @@ qr =
captcha:
init: ->
@img = $ '.captcha > img', qr.el
- @input = $ '[name=captcha]', qr.el
+ @input = $ '[autocomplete]', qr.el
@challenge = $.id 'recaptcha_challenge_field_holder'
$.on @img.parentNode, 'click', @reload
$.on @input, 'keydown', @keydown
@@ -1136,48 +1136,55 @@ qr =
e.preventDefault()
dialog: ->
- # create a new thread or select thread to reply to
- unless g.REPLY
- threads = ''
- for thread in $$ '.op'
- threads += ""
- threads = ""
- # chose only supported files
- mimeTypes = $('.rules').textContent.toLowerCase().match(/: (.+) /)[1].replace /\w+/g, (type) ->
+ qr.el = ui.dialog 'qr', 'top:0;right:0;', '
+
+'
+
+ # Allow only this board's supported files.
+ mimeTypes = $('.rules').textContent.match(/: (.+) /)[1].toLowerCase().replace /\w+/g, (type) ->
switch type
when 'jpg'
'image/jpeg'
when 'pdf'
'application/pdf'
else
- 'image/' + type
- qr.mimeTypes = mimeTypes.split ', '
- qr.spoiler = !!$ '#com_submit + label'
- qr.el = ui.dialog 'qr', 'top:0;right:0;', "
-
- Quick Reply
-
#{if g.REPLY then '' else threads} x
-
-"
+ "image/#{type}"
+ qr.mimeTypes = mimeTypes.split ', '
+ fileInput = $ '[type=file]', qr.el
+ fileInput.max = $('[name=MAX_FILE_SIZE]').value
+ fileInput.accept = mimeTypes
+
+ qr.spoiler = !!$ '#com_submit + label'
+ spoiler = $ '#spoilerLabel', qr.el
+ spoiler.hidden = !qr.spoiler
+
unless g.REPLY
- $.on $('select', qr.el), 'mousedown', (e) -> e.stopPropagation()
- $.on $('#autohide', qr.el), 'change', qr.toggleHide
- $.on $('.close', qr.el), 'click', qr.close
- $.on $('#dump', qr.el), 'click', -> qr.el.classList.toggle 'dump'
- $.on $('#addReply', qr.el), 'click', -> new qr.reply().select()
- $.on $('form', qr.el), 'submit', qr.submit
- $.on $('textarea', qr.el), 'change', -> qr.selected.el.lastChild.textContent = @value
- $.on $('[type=file]', qr.el), 'change', qr.fileInput
- $.on $('#spoiler', qr.el), 'change', -> $('input', qr.selected.el).click()
+ # Make a list with visible threads and an option to create a new one.
+ threads = ''
+ for thread in $$ '.op'
+ threads += ""
+ $.prepend $('.move > span', qr.el), $.el 'select', innerHTML: threads
+ $.on $('select', qr.el), 'mousedown', (e) -> e.stopPropagation()
+ $.on $('#autohide', qr.el), 'change', qr.toggleHide
+ $.on $('.close', qr.el), 'click', qr.close
+ $.on $('#dump', qr.el), 'click', -> qr.el.classList.toggle 'dump'
+ $.on $('#addReply', qr.el), 'click', -> new qr.reply().select()
+ $.on $('form', qr.el), 'submit', qr.submit
+ $.on $('textarea', qr.el), 'change', -> qr.selected.el.lastChild.textContent = @value
+ $.on fileInput, 'change', qr.fileInput
+ $.on spoiler.firstChild, 'change', -> $('input', qr.selected.el).click()
new qr.reply().select()
# save selected reply's data
@@ -2782,7 +2789,7 @@ a[href="javascript:;"] {
background: -o-linear-gradient(#CCC, #DDD);
background: linear-gradient(#CCC, #DDD);
}
-#qr:not(.dump) output, .dump > form > label {
+#qr:not(.dump) #replies, .dump > form > label {
display: none;
}
#replies {
@@ -2896,7 +2903,7 @@ textarea.field {
height: 57px;
width: 300px;
}
-.field[name=captcha] {
+.field:only-child {
width: 100%;
}
#qr [type=file] {