diff --git a/4chan_x.user.js b/4chan_x.user.js
index d8068d999..dc2a79c5b 100644
--- a/4chan_x.user.js
+++ b/4chan_x.user.js
@@ -1258,8 +1258,12 @@
qr = {
init: function() {
- var form, iframe, link, loadChecking;
if (!$.id('recaptcha_challenge_field_holder')) return;
+ g.callbacks.push(this.node);
+ return setTimeout(this.asyncInit);
+ },
+ asyncInit: function() {
+ var form, iframe, link, loadChecking, script;
if (conf['Hide Original Post Form']) {
link = $.el('h1', {
innerHTML: "" + (g.REPLY ? 'Quick Reply' : 'New Thread') + ""
@@ -1271,7 +1275,6 @@
form = d.forms[0];
$.before(form, link);
}
- g.callbacks.push(this.node);
if (/chrome/i.test(navigator.userAgent)) {
qr.status({
ready: true
@@ -1299,19 +1302,14 @@
});
$.add(d.head, iframe);
}
- setTimeout(function() {
- var script;
- script = $.el('script', {
- textContent: 'Recaptcha.focus_response_field=function(){}'
- });
- $.add(d.head, script);
- return $.rm(script);
+ script = $.el('script', {
+ textContent: 'Recaptcha.focus_response_field=function(){}'
});
+ $.add(d.head, script);
+ $.rm(script);
if (conf['Persistent QR']) {
- setTimeout(function() {
- qr.dialog();
- if (conf['Auto Hide QR']) return qr.hide();
- });
+ qr.dialog();
+ if (conf['Auto Hide QR']) qr.hide();
}
$.on(d, 'dragover', qr.dragOver);
$.on(d, 'drop', qr.dropFile);
@@ -3948,19 +3946,51 @@
Favicon.init();
if (conf['Quick Reply']) qr.init();
if (conf['Image Expansion']) ImageExpand.init();
- if (conf['Thread Watcher']) Watcher.init();
- if (conf['Keybinds']) Keybinds.init();
+ if (conf['Thread Watcher']) {
+ setTimeout(function() {
+ return Watcher.init();
+ });
+ }
+ if (conf['Keybinds']) {
+ setTimeout(function() {
+ return Keybinds.init();
+ });
+ }
if (g.REPLY) {
- if (conf['Thread Updater']) Updater.init();
+ if (conf['Thread Updater']) {
+ setTimeout(function() {
+ return Updater.init();
+ });
+ }
if (conf['Thread Stats']) ThreadStats.init();
- if (conf['Reply Navigation']) Nav.init();
+ if (conf['Reply Navigation']) {
+ setTimeout(function() {
+ return Nav.init();
+ });
+ }
if (conf['Post in Title']) TitlePost.init();
if (conf['Unread Count'] || conf['Unread Favicon']) Unread.init();
} else {
- if (conf['Thread Hiding']) ThreadHiding.init();
- if (conf['Thread Expansion']) ExpandThread.init();
- if (conf['Comment Expansion']) ExpandComment.init();
- if (conf['Index Navigation']) Nav.init();
+ if (conf['Thread Hiding']) {
+ setTimeout(function() {
+ return ThreadHiding.init();
+ });
+ }
+ if (conf['Thread Expansion']) {
+ setTimeout(function() {
+ return ExpandThread.init();
+ });
+ }
+ if (conf['Comment Expansion']) {
+ setTimeout(function() {
+ return ExpandComment.init();
+ });
+ }
+ if (conf['Index Navigation']) {
+ setTimeout(function() {
+ return Nav.init();
+ });
+ }
}
nodes = [];
_ref2 = $$('.op, a + table', form);
diff --git a/script.coffee b/script.coffee
index b5e9667dc..c86936f61 100644
--- a/script.coffee
+++ b/script.coffee
@@ -1031,6 +1031,10 @@ Nav =
qr =
init: ->
return unless $.id 'recaptcha_challenge_field_holder'
+ g.callbacks.push @node
+ setTimeout @asyncInit
+
+ asyncInit: ->
if conf['Hide Original Post Form']
link = $.el 'h1', innerHTML: "#{if g.REPLY then 'Quick Reply' else 'New Thread'}"
$.on $('a', link), 'click', ->
@@ -1038,7 +1042,6 @@ qr =
$('textarea', qr.el).focus()
form = d.forms[0]
$.before form, link
- g.callbacks.push @node
# CORS is ignored for content script on Chrome, but not Safari/Oprah/Firefox.
if /chrome/i.test navigator.userAgent
@@ -1056,17 +1059,14 @@ qr =
$.on iframe, 'load', -> if @src isnt 'about:blank' then setTimeout loadChecking, 500, @
$.add d.head, iframe
- # This is extemely slow, execute is asynchronously.
- setTimeout ->
- # Prevent original captcha input from being focused on reload.
- script = $.el 'script', textContent: 'Recaptcha.focus_response_field=function(){}'
- $.add d.head, script
- $.rm script
+ # Prevent original captcha input from being focused on reload.
+ script = $.el 'script', textContent: 'Recaptcha.focus_response_field=function(){}'
+ $.add d.head, script
+ $.rm script
if conf['Persistent QR']
- setTimeout ->
- qr.dialog()
- qr.hide() if conf['Auto Hide QR']
+ qr.dialog()
+ qr.hide() if conf['Auto Hide QR']
$.on d, 'dragover', qr.dragOver
$.on d, 'drop', qr.dropFile
$.on d, 'dragstart', qr.drag
@@ -2054,7 +2054,7 @@ ThreadHiding =
hiddenThreads = $.get "hiddenThreads/#{g.BOARD}/", {}
for thread in $$ '.thread'
op = thread.firstChild
- a = $.el 'a',
+ a = $.el 'a',
textContent: '[ - ]'
href: 'javascript:;'
$.on a, 'click', ThreadHiding.cb.hide
@@ -3266,20 +3266,20 @@ Main =
ImageExpand.init()
if conf['Thread Watcher']
- Watcher.init()
+ setTimeout -> Watcher.init()
if conf['Keybinds']
- Keybinds.init()
+ setTimeout -> Keybinds.init()
if g.REPLY
if conf['Thread Updater']
- Updater.init()
+ setTimeout -> Updater.init()
if conf['Thread Stats']
ThreadStats.init()
if conf['Reply Navigation']
- Nav.init()
+ setTimeout -> Nav.init()
if conf['Post in Title']
TitlePost.init()
@@ -3289,16 +3289,16 @@ Main =
else #not reply
if conf['Thread Hiding']
- ThreadHiding.init()
+ setTimeout -> ThreadHiding.init()
if conf['Thread Expansion']
- ExpandThread.init()
+ setTimeout -> ExpandThread.init()
if conf['Comment Expansion']
- ExpandComment.init()
+ setTimeout -> ExpandComment.init()
if conf['Index Navigation']
- Nav.init()
+ setTimeout -> Nav.init()
nodes = []
for node in $$ '.op, a + table', form