From be8a3b96861d0cf0c601f6a7fe57c3a5d97b79ba Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Wed, 20 Jul 2011 23:39:03 +0200 Subject: [PATCH 1/2] General qr.el --- 4chan_x.user.js | 102 ++++++++++++++++++++++++------------------------ script.coffee | 90 +++++++++++++++++++++--------------------- 2 files changed, 95 insertions(+), 97 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index 72ceb39d7..dcb67a4c9 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -743,7 +743,7 @@ }, cb: { keydown: function(e) { - var key, o, qr, range, selEnd, selStart, ta, thread, valEnd, valMid, valStart, value, _ref, _ref2, _ref3; + var key, o, range, selEnd, selStart, ta, thread, valEnd, valMid, valStart, value, _ref, _ref2, _ref3; if (((_ref = d.activeElement.nodeName) === 'TEXTAREA' || _ref === 'INPUT') && !e.altKey && !e.ctrlKey && !(e.keyCode === 27)) { return; } @@ -759,8 +759,8 @@ case keybinds.close: if (o = $('#overlay')) { $.rm(o); - } else if (qr = $('#qr')) { - $.rm(qr); + } else if (qr.el) { + qr.close(); } break; case keybinds.spoiler: @@ -834,8 +834,8 @@ } break; case keybinds.submit: - if (qr = $('#qr_form')) { - qr.submit(); + if (qr.el) { + qr.submit.call($('form', qr.el)); } else { $('.postarea form').submit(); } @@ -881,10 +881,10 @@ if (quote) { return qr.quote(qrLink); } else { - if (!$('#qr')) { + if (!qr.el) { qr.dialog(qrLink); } - return $('#qr textarea').focus(); + return $('textarea', qr.el).focus(); } }, open: function(thread, tab) { @@ -1226,8 +1226,8 @@ submit.disabled = false; submit.value = 'Submit'; } - if ((_ref = $('#auto')) != null ? _ref.checked : void 0) { - return qr.submit.call($('#qr_form')); + if ((_ref = $('#auto', qr.el)) != null ? _ref.checked : void 0) { + return qr.submit.call($('form', qr.el)); } } } @@ -1247,40 +1247,37 @@ autohide: { set: function() { var _ref; - return (_ref = $('#qr input[title=autohide]:not(:checked)')) != null ? _ref.click() : void 0; + return (_ref = $('input[title=autohide]:not(:checked)', qr.el)) != null ? _ref.click() : void 0; }, unset: function() { var _ref; - return (_ref = $('#qr input[title=autohide]:checked')) != null ? _ref.click() : void 0; + return (_ref = $('input[title=autohide]:checked', qr.el)) != null ? _ref.click() : void 0; } }, cb: { autohide: function(e) { - var dialog; - dialog = $('#qr'); if (this.checked) { - return $.addClass(dialog, 'auto'); + return $.addClass(qr.el, 'auto'); } else { - return $.removeClass(dialog, 'auto'); + return $.removeClass(qr.el, 'auto'); } }, message: function(e) { - var data, dialog, duration; + var data, duration; Recaptcha.reload(); $('iframe[name=iframe]').src = 'about:blank'; data = e.data; - dialog = $('#qr'); if (data) { - $('input[name=recaptcha_response_field]', dialog).value = ''; - $('#error').textContent = data; + $('input[name=recaptcha_response_field]', qr.el).value = ''; + $('#error', qr.el).textContent = data; qr.autohide.unset(); return; } - if (dialog) { + if (qr.el) { if (g.REPLY && $.config('Persistent QR')) { - qr.refresh(dialog); + qr.refresh(); } else { - $.rm(dialog); + qr.close(); } } if ($.config('Cooldown')) { @@ -1305,7 +1302,7 @@ if (g.REPLY && $('img.favicon').src === Favicon.empty) { watcher.watch(null, g.THREAD_ID); } else { - id = $('input[name=resto]').value; + id = $('input[name=resto]', qr.el).value; op = d.getElementById(id); if ($('img.favicon', op).src === Favicon.empty) { watcher.watch(op, id); @@ -1319,7 +1316,7 @@ e.preventDefault(); } if (isQR) { - return $('#error').textContent = 'Error: File too large.'; + return $('#error', qr.el).textContent = 'Error: File too large.'; } else { return alert('Error: File too large.'); } @@ -1327,17 +1324,17 @@ if (!e) { this.submit(); } - $('#error').textContent = ''; + $('#error', qr.el).textContent = ''; qr.autohide.set(); return qr.sage = /sage/i.test($('input[name=email]', this).value); } }, quote: function(link) { - var dialog, id, s, selection, selectionID, ta, text, _ref; - if (dialog = $('#qr')) { + var id, s, selection, selectionID, ta, text, _ref; + if (qr.el) { qr.autohide.unset(); } else { - dialog = qr.dialog(link); + qr.dialog(link); } id = link.textContent; text = ">>" + id + "\n"; @@ -1348,48 +1345,49 @@ text += ">" + s + "\n"; } } - ta = $('textarea', dialog); + ta = $('textarea', qr.el); ta.focus(); return ta.value += text; }, - refresh: function(dialog) { + refresh: function() { var c, m; - $('form', dialog).reset(); + $('form', qr.el).reset(); c = d.cookie; - $('input[name=name]', dialog).value = (m = c.match(/4chan_name=([^;]+)/)) ? decodeURIComponent(m[1]) : ''; - $('input[name=email]', dialog).value = (m = c.match(/4chan_email=([^;]+)/)) ? decodeURIComponent(m[1]) : ''; - return $('input[name=pwd]', dialog).value = (m = c.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $('input[name=pwd]').value; + $('input[name=name]', qr.el).value = (m = c.match(/4chan_name=([^;]+)/)) ? decodeURIComponent(m[1]) : ''; + $('input[name=email]', qr.el).value = (m = c.match(/4chan_email=([^;]+)/)) ? decodeURIComponent(m[1]) : ''; + return $('input[name=pwd]', qr.el).value = (m = c.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $('input[name=pwd]').value; }, dialog: function(link) { - var THREAD_ID, challenge, dialog, html, spoiler, submitDisabled, submitValue; + var THREAD_ID, challenge, html, spoiler, submitDisabled, submitValue; submitValue = $('#com_submit').value; submitDisabled = $('#com_submit').disabled ? 'disabled' : ''; THREAD_ID = g.THREAD_ID || $.x('ancestor::div[@class="thread"]/div', link).id; spoiler = $('.postarea label') ? '' : ''; challenge = $('input[name=recaptcha_challenge_field]').value; html = "
Quick Reply X
" + spoiler + "
"; - dialog = ui.dialog('qr', { + qr.el = ui.dialog('qr', { top: '0px', left: '0px' }, html); - qr.refresh(dialog); - $.bind($('input[name=name]', dialog), 'mousedown', function(e) { + qr.refresh; + $.bind($('input[name=name]', qr.el), 'mousedown', function(e) { return e.stopPropagation(); }); - $.bind($('#autohide', dialog), 'click', qr.cb.autohide); - $.bind($('a[name=close]', dialog), 'click', function() { - return $.rm(dialog); - }); - $.bind($('form', dialog), 'submit', qr.submit); - $.bind($('img', dialog), 'click', Recaptcha.reload); - $.bind($('input[name=recaptcha_response_field]', dialog), 'keydown', Recaptcha.listener); - $.append(d.body, dialog); - return dialog; + $.bind($('#autohide', qr.el), 'click', qr.cb.autohide); + $.bind($('a[name=close]', qr.el), 'click', qr.close); + $.bind($('form', qr.el), 'submit', qr.submit); + $.bind($('img', qr.el), 'click', Recaptcha.reload); + $.bind($('input[name=recaptcha_response_field]', qr.el), 'keydown', Recaptcha.listener); + return $.append(d.body, qr.el); }, persist: function() { $.append(d.body, qr.dialog()); return qr.autohide.set(); }, + close: function() { + $.rm(qr.el); + return qr.el = null; + }, sys: function() { var c, duration, id, noko, recaptcha, thread, _, _ref; if (recaptcha = $('#recaptcha_response_field')) { @@ -2411,7 +2409,7 @@ Recaptcha.reload(); } if (e.keyCode === 13 && cooldown.duration) { - $('#auto').checked = true; + $('#auto', qr.el).checked = true; return qr.autohide.set(); } }, @@ -2419,13 +2417,13 @@ return window.location = 'javascript:Recaptcha.reload()'; }, reloaded: function(e) { - var dialog, target; - if (!(dialog = $('#qr'))) { + var target; + if (!qr.el) { return; } target = e.target; - $('img', dialog).src = "http://www.google.com/recaptcha/api/image?c=" + target.value; - return $('input[name=recaptcha_challenge_field]', dialog).value = target.value; + $('img', qr.el).src = "http://www.google.com/recaptcha/api/image?c=" + target.value; + return $('input[name=recaptcha_challenge_field]', qr.el).value = target.value; } }; nodeInserted = function(e) { diff --git a/script.coffee b/script.coffee index 6f9312029..285856b62 100644 --- a/script.coffee +++ b/script.coffee @@ -546,8 +546,8 @@ keybinds = when keybinds.close if o = $ '#overlay' $.rm o - else if qr = $ '#qr' - $.rm qr + else if qr.el + qr.close() when keybinds.spoiler ta = d.activeElement return unless ta.nodeName is 'TEXTAREA' @@ -598,8 +598,8 @@ keybinds = when keybinds.previousPage $('input[value=Previous]')?.click() when keybinds.submit - if qr = $('#qr_form') - qr.submit() + if qr.el + qr.submit.call $ 'form', qr.el else $('.postarea form').submit() else @@ -635,9 +635,9 @@ keybinds = if quote qr.quote qrLink else - unless $ '#qr' + unless qr.el qr.dialog qrLink - $('#qr textarea').focus() + $('textarea', qr.el).focus() open: (thread, tab) -> id = thread.firstChild.id @@ -960,8 +960,8 @@ cooldown = for submit in submits submit.disabled = false submit.value = 'Submit' - if $('#auto')?.checked - qr.submit.call $ '#qr_form' + if $('#auto', qr.el)?.checked + qr.submit.call $ 'form', qr.el qr = init: -> @@ -977,35 +977,33 @@ qr = autohide: set: -> - $('#qr input[title=autohide]:not(:checked)')?.click() + $('input[title=autohide]:not(:checked)', qr.el)?.click() unset: -> - $('#qr input[title=autohide]:checked')?.click() + $('input[title=autohide]:checked', qr.el)?.click() cb: autohide: (e) -> - dialog = $ '#qr' if @checked - $.addClass dialog, 'auto' + $.addClass qr.el, 'auto' else - $.removeClass dialog, 'auto' + $.removeClass qr.el, 'auto' message: (e) -> Recaptcha.reload() $('iframe[name=iframe]').src = 'about:blank' {data} = e - dialog = $ '#qr' if data # error message - $('input[name=recaptcha_response_field]', dialog).value = '' - $('#error').textContent = data + $('input[name=recaptcha_response_field]', qr.el).value = '' + $('#error', qr.el).textContent = data qr.autohide.unset() return - if dialog + if qr.el if g.REPLY and $.config 'Persistent QR' - qr.refresh dialog + qr.refresh() else - $.rm dialog + qr.close() if $.config 'Cooldown' duration = if qr.sage then 60 else 30 $.setValue g.BOARD+'/cooldown', Date.now() + duration * 1000 @@ -1024,7 +1022,7 @@ qr = if g.REPLY and $('img.favicon').src is Favicon.empty watcher.watch null, g.THREAD_ID else - id = $('input[name=resto]').value + id = $('input[name=resto]', qr.el).value op = d.getElementById id if $('img.favicon', op).src is Favicon.empty watcher.watch op, id @@ -1035,21 +1033,21 @@ qr = if inputfile.value and inputfile.files[0].size > $('input[name=MAX_FILE_SIZE]').value e.preventDefault() if e if isQR - $('#error').textContent = 'Error: File too large.' + $('#error', qr.el).textContent = 'Error: File too large.' else alert 'Error: File too large.' else if isQR if !e then @submit() - $('#error').textContent = '' + $('#error', qr.el).textContent = '' qr.autohide.set() qr.sage = /sage/i.test $('input[name=email]', @).value quote: (link) -> - if dialog = $ '#qr' + if qr.el qr.autohide.unset() else - dialog = qr.dialog link + qr.dialog link id = link.textContent text = ">>#{id}\n" @@ -1060,16 +1058,16 @@ qr = if selectionID == id text += ">#{s}\n" - ta = $ 'textarea', dialog + ta = $ 'textarea', qr.el ta.focus() ta.value += text - refresh: (dialog) -> - $('form', dialog).reset() + refresh: -> + $('form', qr.el).reset() c = d.cookie - $('input[name=name]', dialog).value = if m = c.match(/4chan_name=([^;]+)/) then decodeURIComponent m[1] else '' - $('input[name=email]', dialog).value = if m = c.match(/4chan_email=([^;]+)/) then decodeURIComponent m[1] else '' - $('input[name=pwd]', dialog).value = if m = c.match(/4chan_pass=([^;]+)/) then decodeURIComponent m[1] else $('input[name=pwd]').value + $('input[name=name]', qr.el).value = if m = c.match(/4chan_name=([^;]+)/) then decodeURIComponent m[1] else '' + $('input[name=email]', qr.el).value = if m = c.match(/4chan_email=([^;]+)/) then decodeURIComponent m[1] else '' + $('input[name=pwd]', qr.el).value = if m = c.match(/4chan_pass=([^;]+)/) then decodeURIComponent m[1] else $('input[name=pwd]').value dialog: (link) -> submitValue = $('#com_submit').value @@ -1098,25 +1096,27 @@ qr =
" - dialog = ui.dialog 'qr', top: '0px', left: '0px', html + qr.el = ui.dialog 'qr', top: '0px', left: '0px', html - qr.refresh dialog + qr.refresh - $.bind $('input[name=name]', dialog), 'mousedown', (e) -> e.stopPropagation() - $.bind $('#autohide', dialog), 'click', qr.cb.autohide - $.bind $('a[name=close]', dialog), 'click', -> $.rm dialog - $.bind $('form', dialog), 'submit', qr.submit - $.bind $('img', dialog), 'click', Recaptcha.reload - $.bind $('input[name=recaptcha_response_field]', dialog), 'keydown', Recaptcha.listener + $.bind $('input[name=name]', qr.el), 'mousedown', (e) -> e.stopPropagation() + $.bind $('#autohide', qr.el), 'click', qr.cb.autohide + $.bind $('a[name=close]', qr.el), 'click', qr.close + $.bind $('form', qr.el), 'submit', qr.submit + $.bind $('img', qr.el), 'click', Recaptcha.reload + $.bind $('input[name=recaptcha_response_field]', qr.el), 'keydown', Recaptcha.listener - $.append d.body, dialog - - dialog + $.append d.body, qr.el persist: -> $.append d.body, qr.dialog() qr.autohide.set() + close: -> + $.rm qr.el + qr.el = null + sys: -> if recaptcha = $ '#recaptcha_response_field' #post reporting $.bind recaptcha, 'keydown', Recaptcha.listener @@ -1826,15 +1826,15 @@ Recaptcha = if e.keyCode is 8 and @value is '' # backspace to reload Recaptcha.reload() if e.keyCode is 13 and cooldown.duration # press enter to enable auto-post if cooldown is still running - $('#auto').checked = true + $('#auto', qr.el).checked = true qr.autohide.set() reload: -> window.location = 'javascript:Recaptcha.reload()' reloaded: (e) -> - return unless dialog = $ '#qr' + return unless qr.el {target} = e - $('img', dialog).src = "http://www.google.com/recaptcha/api/image?c=" + target.value - $('input[name=recaptcha_challenge_field]', dialog).value = target.value + $('img', qr.el).src = "http://www.google.com/recaptcha/api/image?c=" + target.value + $('input[name=recaptcha_challenge_field]', qr.el).value = target.value nodeInserted = (e) -> {target} = e From cf32915e0faddd1dca4cf2ae978d059dffa7c9a9 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Wed, 20 Jul 2011 23:40:45 +0200 Subject: [PATCH 2/2] Chenjurogu. --- changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog b/changelog index 7de145d3f..794f682f8 100644 --- a/changelog +++ b/changelog @@ -6,6 +6,7 @@ github - aeosynth: - fix an upgrading problem (1.x -> 2.x) - fix minor bugs with auto-posting + - new IRC Updating feature 2.15.1 - mayhem: