diff --git a/builds/appchan-x.user.js b/builds/appchan-x.user.js
index 52f6feeef..02e6de206 100644
--- a/builds/appchan-x.user.js
+++ b/builds/appchan-x.user.js
@@ -8471,13 +8471,9 @@
$.extend(this.threadNewLink, {
innerHTML: "Thread New Posts"
});
- $.on($('input', this.controls), 'change', function() {
- return QuoteThreading.rethread(this.checked);
- });
- $.on(this.threadNewLink.firstElementChild, 'click', function() {
- QuoteThreading.threadNewLink.hidden = true;
- return QuoteThreading.rethread(true);
- });
+ $.on($('input', this.controls), 'change', this.cb.thread);
+ $.on(this.threadNewLink.firstElementChild, 'click', this.cb.click);
+ $.on(d, '4chanXInitFinished', this.cb.thread);
Header.menu.addEntry(this.entry = {
el: this.controls,
order: 98
@@ -8505,6 +8501,9 @@
this.parent = {};
this.children = {};
this.inserted = {};
+ $.off($('input', this.controls), 'change', this.cb.thread);
+ $.off(this.threadNewLink.firstElementChild, 'click', this.cb.click);
+ $.off(d, '4chanXInitFinished', this.cb.thread);
Thread.callbacks.disconnect('Quote Threading');
return Post.callbacks.disconnect('Quote Threading');
},
@@ -8528,11 +8527,9 @@
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
quote = _ref[_i];
- parent = g.posts[quote];
- if (!parent || parent.isFetchedQuote || !parent.isReply || parent.ID >= this.ID) {
- continue;
+ if ((parent = g.posts[quote]) && !parent.isFetchedQuote && parent.isReply && parent.ID <= this.ID) {
+ _results.push(parent);
}
- _results.push(parent);
}
return _results;
}).call(this);
@@ -8552,16 +8549,24 @@
return posts;
},
insert: function(post) {
- var child, children, descendants, i, next, nodes, order, parent, prev, prev2, threadContainer, x, _base, _i, _j, _k, _len, _name;
+ var child, children, descendants, i, next, nodes, order, parent, prev, prev2, threadContainer, x, _base, _i, _j, _len, _name;
if (!(QuoteThreading.enabled && (parent = QuoteThreading.parent[post.fullID]) && !QuoteThreading.inserted[post.fullID])) {
return false;
}
descendants = QuoteThreading.descendants(post);
- if (!Unread.posts.has(parent.ID) && descendants.some(function(x) {
- return Unread.posts.has(x.ID);
- })) {
- QuoteThreading.threadNewLink.hidden = false;
- return false;
+ if (!Unread.posts.has(parent.ID)) {
+ if ((function() {
+ var x, _i, _len;
+ for (_i = 0, _len = descendants.length; _i < _len; _i++) {
+ x = descendants[_i];
+ if (Unread.posts.has(x.ID)) {
+ return true;
+ }
+ }
+ })()) {
+ QuoteThreading.threadNewLink.hidden = false;
+ return false;
+ }
}
order = Unread.order;
children = ((_base = QuoteThreading.children)[_name = parent.fullID] || (_base[_name] = []));
@@ -8573,16 +8578,13 @@
nodes.push(post.nodes.threadContainer);
}
i = children.length;
- for (_i = children.length - 1; _i >= 0; _i += -1) {
- child = children[_i];
- if (child.ID >= post.ID) {
- i--;
- }
+ while ((child = children[i]) && child.ID >= post.ID) {
+ i--;
}
if (i !== children.length) {
next = children[i];
- for (_j = 0, _len = descendants.length; _j < _len; _j++) {
- x = descendants[_j];
+ for (_i = 0, _len = descendants.length; _i < _len; _i++) {
+ x = descendants[_i];
order.before(order[next.ID], order[x.ID]);
}
children.splice(i, 0, post);
@@ -8592,8 +8594,8 @@
while ((prev2 = QuoteThreading.children[prev.fullID]) && prev2.length) {
prev = prev2[prev2.length - 1];
}
- for (_k = descendants.length - 1; _k >= 0; _k += -1) {
- x = descendants[_k];
+ for (_j = descendants.length - 1; _j >= 0; _j += -1) {
+ x = descendants[_j];
order.after(order[prev.ID], order[x.ID]);
}
children.push(post);
@@ -8609,6 +8611,9 @@
},
rethread: function(enabled) {
var nodes, posts, thread;
+ if (enabled == null) {
+ enabled = true;
+ }
thread = QuoteThreading.thread;
posts = thread.posts;
if (QuoteThreading.enabled = enabled) {
@@ -8639,6 +8644,15 @@
Unread.setLine(true);
Unread.read();
return Unread.update();
+ },
+ cb: {
+ thread: function() {
+ return QuoteThreading.rethread(QuoteThreading.checked);
+ },
+ click: function() {
+ QuoteThreading.threadNewLink.hidden = true;
+ return QuoteThreading.cb.thread();
+ }
}
};
diff --git a/builds/crx/script.js b/builds/crx/script.js
index ee4e5ea7b..78b8fd5ce 100644
--- a/builds/crx/script.js
+++ b/builds/crx/script.js
@@ -8513,13 +8513,9 @@
$.extend(this.threadNewLink, {
innerHTML: "Thread New Posts"
});
- $.on($('input', this.controls), 'change', function() {
- return QuoteThreading.rethread(this.checked);
- });
- $.on(this.threadNewLink.firstElementChild, 'click', function() {
- QuoteThreading.threadNewLink.hidden = true;
- return QuoteThreading.rethread(true);
- });
+ $.on($('input', this.controls), 'change', this.cb.thread);
+ $.on(this.threadNewLink.firstElementChild, 'click', this.cb.click);
+ $.on(d, '4chanXInitFinished', this.cb.thread);
Header.menu.addEntry(this.entry = {
el: this.controls,
order: 98
@@ -8547,6 +8543,9 @@
this.parent = {};
this.children = {};
this.inserted = {};
+ $.off($('input', this.controls), 'change', this.cb.thread);
+ $.off(this.threadNewLink.firstElementChild, 'click', this.cb.click);
+ $.off(d, '4chanXInitFinished', this.cb.thread);
Thread.callbacks.disconnect('Quote Threading');
return Post.callbacks.disconnect('Quote Threading');
},
@@ -8570,11 +8569,9 @@
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
quote = _ref[_i];
- parent = g.posts[quote];
- if (!parent || parent.isFetchedQuote || !parent.isReply || parent.ID >= this.ID) {
- continue;
+ if ((parent = g.posts[quote]) && !parent.isFetchedQuote && parent.isReply && parent.ID <= this.ID) {
+ _results.push(parent);
}
- _results.push(parent);
}
return _results;
}).call(this);
@@ -8594,16 +8591,24 @@
return posts;
},
insert: function(post) {
- var child, children, descendants, i, next, nodes, order, parent, prev, prev2, threadContainer, x, _base, _i, _j, _k, _len, _name;
+ var child, children, descendants, i, next, nodes, order, parent, prev, prev2, threadContainer, x, _base, _i, _j, _len, _name;
if (!(QuoteThreading.enabled && (parent = QuoteThreading.parent[post.fullID]) && !QuoteThreading.inserted[post.fullID])) {
return false;
}
descendants = QuoteThreading.descendants(post);
- if (!Unread.posts.has(parent.ID) && descendants.some(function(x) {
- return Unread.posts.has(x.ID);
- })) {
- QuoteThreading.threadNewLink.hidden = false;
- return false;
+ if (!Unread.posts.has(parent.ID)) {
+ if ((function() {
+ var x, _i, _len;
+ for (_i = 0, _len = descendants.length; _i < _len; _i++) {
+ x = descendants[_i];
+ if (Unread.posts.has(x.ID)) {
+ return true;
+ }
+ }
+ })()) {
+ QuoteThreading.threadNewLink.hidden = false;
+ return false;
+ }
}
order = Unread.order;
children = ((_base = QuoteThreading.children)[_name = parent.fullID] || (_base[_name] = []));
@@ -8615,16 +8620,13 @@
nodes.push(post.nodes.threadContainer);
}
i = children.length;
- for (_i = children.length - 1; _i >= 0; _i += -1) {
- child = children[_i];
- if (child.ID >= post.ID) {
- i--;
- }
+ while ((child = children[i]) && child.ID >= post.ID) {
+ i--;
}
if (i !== children.length) {
next = children[i];
- for (_j = 0, _len = descendants.length; _j < _len; _j++) {
- x = descendants[_j];
+ for (_i = 0, _len = descendants.length; _i < _len; _i++) {
+ x = descendants[_i];
order.before(order[next.ID], order[x.ID]);
}
children.splice(i, 0, post);
@@ -8634,8 +8636,8 @@
while ((prev2 = QuoteThreading.children[prev.fullID]) && prev2.length) {
prev = prev2[prev2.length - 1];
}
- for (_k = descendants.length - 1; _k >= 0; _k += -1) {
- x = descendants[_k];
+ for (_j = descendants.length - 1; _j >= 0; _j += -1) {
+ x = descendants[_j];
order.after(order[prev.ID], order[x.ID]);
}
children.push(post);
@@ -8651,6 +8653,9 @@
},
rethread: function(enabled) {
var nodes, posts, thread;
+ if (enabled == null) {
+ enabled = true;
+ }
thread = QuoteThreading.thread;
posts = thread.posts;
if (QuoteThreading.enabled = enabled) {
@@ -8681,6 +8686,15 @@
Unread.setLine(true);
Unread.read();
return Unread.update();
+ },
+ cb: {
+ thread: function() {
+ return QuoteThreading.rethread(QuoteThreading.checked);
+ },
+ click: function() {
+ QuoteThreading.threadNewLink.hidden = true;
+ return QuoteThreading.cb.thread();
+ }
}
};
diff --git a/src/Quotelinks/QuoteThreading.coffee b/src/Quotelinks/QuoteThreading.coffee
index df190c6c4..a4874b494 100755
--- a/src/Quotelinks/QuoteThreading.coffee
+++ b/src/Quotelinks/QuoteThreading.coffee
@@ -9,16 +9,15 @@ QuoteThreading =
@enabled = true
@controls = $.el 'span',
<%= html('') %>
+
@threadNewLink = $.el 'span',
className: 'brackets-wrap threadnewlink'
hidden: true
$.extend @threadNewLink, <%= html('Thread New Posts') %>
- $.on $('input', @controls), 'change', ->
- QuoteThreading.rethread @checked
- $.on @threadNewLink.firstElementChild, 'click', ->
- QuoteThreading.threadNewLink.hidden = true
- QuoteThreading.rethread true
+ $.on $('input', @controls), 'change', @cb.thread
+ $.on @threadNewLink.firstElementChild, 'click', @cb.click
+ $.on d, '4chanXInitFinished', @cb.thread
Header.menu.addEntry @entry =
el: @controls
@@ -49,6 +48,10 @@ QuoteThreading =
@children = {}
@inserted = {}
+ $.off $('input', @controls), 'change', @cb.thread
+ $.off @threadNewLink.firstElementChild, 'click', @cb.click
+ $.off d, '4chanXInitFinished', @cb.thread
+
Thread.callbacks.disconnect 'Quote Threading'
Post.callbacks.disconnect 'Quote Threading'
@@ -60,10 +63,10 @@ QuoteThreading =
node: ->
return if @isFetchedQuote or @isClone or !@isReply
{thread} = QuoteThreading
- parents = for quote in @quotes
- parent = g.posts[quote]
- continue if !parent or parent.isFetchedQuote or !parent.isReply or parent.ID >= @ID
- parent
+ parents = (parent for quote in @quotes when (parent = g.posts[quote]) and
+ not parent.isFetchedQuote and parent.isReply and parent.ID <= @ID
+ )
+
if parents.length is 1
QuoteThreading.parent[@fullID] = parents[0]
@@ -80,9 +83,10 @@ QuoteThreading =
!QuoteThreading.inserted[post.fullID]
descendants = QuoteThreading.descendants post
- if !Unread.posts.has(parent.ID) and descendants.some((x) -> Unread.posts.has(x.ID))
- QuoteThreading.threadNewLink.hidden = false
- return false
+ if !Unread.posts.has(parent.ID)
+ if (do -> return true for x in descendants when Unread.posts.has x.ID)
+ QuoteThreading.threadNewLink.hidden = false
+ return false
{order} = Unread
children = (QuoteThreading.children[parent.fullID] or= [])
@@ -91,7 +95,7 @@ QuoteThreading =
nodes.push post.nodes.threadContainer if post.nodes.threadContainer
i = children.length
- i-- for child in children by -1 when child.ID >= post.ID
+ i-- while (child = children[i]) and child.ID >= post.ID
if i isnt children.length
next = children[i]
order.before order[next.ID], order[x.ID] for x in descendants
@@ -114,7 +118,7 @@ QuoteThreading =
return true
- rethread: (enabled) ->
+ rethread: (enabled = true) ->
{thread} = QuoteThreading
{posts} = thread
@@ -140,3 +144,9 @@ QuoteThreading =
Unread.setLine true
Unread.read()
Unread.update()
+
+ cb:
+ thread: -> QuoteThreading.rethread QuoteThreading.checked
+ click: ->
+ QuoteThreading.threadNewLink.hidden = true
+ QuoteThreading.cb.thread()
\ No newline at end of file