Fix a bunch of Unread features.

This commit is contained in:
Zixaphir 2014-08-17 18:50:21 -07:00
parent 7e93f5a405
commit ceef9f9edc
6 changed files with 104 additions and 73 deletions

View File

@ -1,5 +1,5 @@
/*
* appchan x - Version 2.9.33 - 2014-07-31
* appchan x - Version 2.9.33 - 2014-08-17
*
* Licensed under the MIT license.
* https://github.com/zixaphir/appchan-x/blob/master/LICENSE

View File

@ -28,7 +28,7 @@
// ==/UserScript==
/*
* appchan x - Version 2.9.33 - 2014-07-31
* appchan x - Version 2.9.33 - 2014-08-17
*
* Licensed under the MIT license.
* https://github.com/zixaphir/appchan-x/blob/master/LICENSE
@ -4107,6 +4107,10 @@
}
};
SimpleDict.prototype.first = function() {
return this[this.keys[0]];
};
SimpleDict.prototype.forEach = function(fn) {
var key, _i, _len, _ref;
_ref = __slice.call(this.keys);
@ -8411,7 +8415,7 @@
return el.textContent = "ERROR " + status;
}
files = this.response.files;
_ref = ['video/mp4', 'video/webm', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'audio/mpeg', 'audio/ogg'];
_ref = ['video/webm', 'video/mp4', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'audio/mpeg', 'audio/ogg'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
type = _ref[_i];
for (_j = 0, _len1 = files.length; _j < _len1; _j++) {
@ -12899,11 +12903,12 @@
if (hr = Unread.hr, Unread) {
$.rm(hr);
}
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title', 'lastReadPost'];
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
name = _ref[_i];
delete this[name];
}
this.lastReadPost = 0;
$.off(d, '4chanXInitFinished', this.ready);
$.off(d, 'ThreadUpdate', this.onUpdate);
$.off(d, 'scroll visibilitychange', this.read);
@ -12928,23 +12933,29 @@
}
},
ready: function() {
var posts;
var post, posts;
$.off(d, '4chanXInitFinished', Unread.ready);
if (!Conf['Quote Threading']) {
posts = [];
Unread.thread.posts.forEach(function(post) {
if (post.isReply) {
return posts.push(post);
}
});
Unread.addPosts(posts);
}
if (Conf['Quote Threading']) {
QuoteThreading.force();
}
if (Conf['Scroll to Last Read Post']) {
return Unread.scroll();
}
posts = Unread.thread.posts;
post = posts.first().nodes.root;
return $.asap((function() {
return post.getBoundingClientRect().bottom;
}), function() {
var arr;
if (Conf['Quote Threading']) {
QuoteThreading.force();
} else {
arr = [];
posts.forEach(function(post) {
if (post.isReply) {
return arr.push(post);
}
});
Unread.addPosts(arr);
}
if (Conf['Scroll to Last Read Post']) {
return setTimeout(Unread.scroll, 200);
}
});
},
scroll: function() {
var down, hash, keys, post, posts, root;
@ -12977,13 +12988,14 @@
threadID: Unread.thread.ID,
defaultValue: 0
});
if (!(Unread.lastReadPost < lastReadPost)) {
if (Unread.lastReadPost > lastReadPost) {
return;
}
Unread.lastReadPost = lastReadPost;
post = Unread.posts.first;
while (post) {
if ((ID = post.ID, post) > Unread.lastReadPost) {
ID = post.ID;
if (ID > lastReadPost) {
break;
}
post = post.next;
@ -13088,11 +13100,10 @@
return arr.splice(0, i);
},
read: $.debounce(100, function(e) {
var ID, data, height, post, posts;
var ID, data, post, posts;
if (d.hidden || !Unread.posts.length) {
return;
}
height = doc.clientHeight;
posts = Unread.posts;
while (post = posts.first) {
if (!(Header.getBottomOf(post.data.nodes.root) > -1)) {
@ -13111,7 +13122,7 @@
if (!ID) {
return;
}
if (Unread.lastReadPost < ID || !Unread.lastReadPost) {
if (Unread.lastReadPost < ID) {
Unread.lastReadPost = ID;
}
Unread.saveLastReadPost();
@ -13203,7 +13214,7 @@
}
return Redirect.data = o;
},
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","c","co","diy","gd","int","jp","m","out","po","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","gd","jp","m","po","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt"],"files":["d","i","lgbt"]},{"uid":8,"name":"Rebecca Black Tech","domain":"archive.rebeccablacktech.com","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":19,"name":"Deniable Plausibility","domain":"boards.deniableplausibility.net","http":true,"https":false,"software":"foolfuuka","boards":["v","vg"],"files":["v","vg"]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","c","co","d","diy","gd","h","i","int","jp","m","out","po","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","d","diy","gd","h","i","jp","m","po","s4s","sci","tg","u","v","vg","vp","vr","wsg"]}],
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","c","co","diy","gd","int","jp","m","out","po","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","gd","jp","m","po","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt","e","wg"],"files":["d","i","lgbt","e","wg"]},{"uid":8,"name":"Rebecca Black Tech","domain":"archive.rebeccablacktech.com","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":19,"name":"Deniable Plausibility","domain":"boards.deniableplausibility.net","http":true,"https":false,"software":"foolfuuka","boards":["v","vg"],"files":["v","vg"]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","c","co","d","diy","gd","h","i","int","jp","m","out","po","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","d","diy","gd","h","i","jp","m","po","s4s","sci","tg","u","v","vg","vp","vr","wsg"]}],
to: function(dest, data) {
var archive;
archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
@ -13303,8 +13314,8 @@
"http": true,
"https": true,
"software": "foolfuuka",
"boards": ["d", "i", "lgbt"],
"files": ["d", "i", "lgbt"]
"boards": ["d", "i", "lgbt", "e", "wg"],
"files": ["d", "i", "lgbt", "e", "wg"]
}, {
"uid": 8,
"name": "Rebecca Black Tech",

View File

@ -1,6 +1,6 @@
// Generated by CoffeeScript
/*
* appchan x - Version 2.9.33 - 2014-07-31
* appchan x - Version 2.9.33 - 2014-08-17
*
* Licensed under the MIT license.
* https://github.com/zixaphir/appchan-x/blob/master/LICENSE
@ -4156,6 +4156,10 @@
}
};
SimpleDict.prototype.first = function() {
return this[this.keys[0]];
};
SimpleDict.prototype.forEach = function(fn) {
var key, _i, _len, _ref;
_ref = __slice.call(this.keys);
@ -8455,7 +8459,7 @@
return el.textContent = "ERROR " + status;
}
files = this.response.files;
_ref = ['video/mp4', 'video/webm', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'audio/mpeg', 'audio/ogg'];
_ref = ['video/webm', 'video/mp4', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'audio/mpeg', 'audio/ogg'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
type = _ref[_i];
for (_j = 0, _len1 = files.length; _j < _len1; _j++) {
@ -12905,11 +12909,12 @@
if (hr = Unread.hr, Unread) {
$.rm(hr);
}
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title', 'lastReadPost'];
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title'];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
name = _ref[_i];
delete this[name];
}
this.lastReadPost = 0;
$.off(d, '4chanXInitFinished', this.ready);
$.off(d, 'ThreadUpdate', this.onUpdate);
$.off(d, 'scroll visibilitychange', this.read);
@ -12934,23 +12939,29 @@
}
},
ready: function() {
var posts;
var post, posts;
$.off(d, '4chanXInitFinished', Unread.ready);
if (!Conf['Quote Threading']) {
posts = [];
Unread.thread.posts.forEach(function(post) {
if (post.isReply) {
return posts.push(post);
}
});
Unread.addPosts(posts);
}
if (Conf['Quote Threading']) {
QuoteThreading.force();
}
if (Conf['Scroll to Last Read Post']) {
return Unread.scroll();
}
posts = Unread.thread.posts;
post = posts.first().nodes.root;
return $.asap((function() {
return post.getBoundingClientRect().bottom;
}), function() {
var arr;
if (Conf['Quote Threading']) {
QuoteThreading.force();
} else {
arr = [];
posts.forEach(function(post) {
if (post.isReply) {
return arr.push(post);
}
});
Unread.addPosts(arr);
}
if (Conf['Scroll to Last Read Post']) {
return setTimeout(Unread.scroll, 200);
}
});
},
scroll: function() {
var down, hash, keys, post, posts, root;
@ -12983,13 +12994,14 @@
threadID: Unread.thread.ID,
defaultValue: 0
});
if (!(Unread.lastReadPost < lastReadPost)) {
if (Unread.lastReadPost > lastReadPost) {
return;
}
Unread.lastReadPost = lastReadPost;
post = Unread.posts.first;
while (post) {
if ((ID = post.ID, post) > Unread.lastReadPost) {
ID = post.ID;
if (ID > lastReadPost) {
break;
}
post = post.next;
@ -13094,11 +13106,10 @@
return arr.splice(0, i);
},
read: $.debounce(100, function(e) {
var ID, data, height, post, posts;
var ID, data, post, posts;
if (d.hidden || !Unread.posts.length) {
return;
}
height = doc.clientHeight;
posts = Unread.posts;
while (post = posts.first) {
if (!(Header.getBottomOf(post.data.nodes.root) > -1)) {
@ -13117,7 +13128,7 @@
if (!ID) {
return;
}
if (Unread.lastReadPost < ID || !Unread.lastReadPost) {
if (Unread.lastReadPost < ID) {
Unread.lastReadPost = ID;
}
Unread.saveLastReadPost();
@ -13208,7 +13219,7 @@
}
return Redirect.data = o;
},
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","c","co","diy","gd","int","jp","m","out","po","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","gd","jp","m","po","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt"],"files":["d","i","lgbt"]},{"uid":8,"name":"Rebecca Black Tech","domain":"archive.rebeccablacktech.com","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":19,"name":"Deniable Plausibility","domain":"boards.deniableplausibility.net","http":true,"https":false,"software":"foolfuuka","boards":["v","vg"],"files":["v","vg"]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","c","co","d","diy","gd","h","i","int","jp","m","out","po","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","d","diy","gd","h","i","jp","m","po","s4s","sci","tg","u","v","vg","vp","vr","wsg"]}],
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","c","co","diy","gd","int","jp","m","out","po","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","c","co","diy","gd","jp","m","po","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt","e","wg"],"files":["d","i","lgbt","e","wg"]},{"uid":8,"name":"Rebecca Black Tech","domain":"archive.rebeccablacktech.com","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":19,"name":"Deniable Plausibility","domain":"boards.deniableplausibility.net","http":true,"https":false,"software":"foolfuuka","boards":["v","vg"],"files":["v","vg"]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","c","co","d","diy","gd","h","i","int","jp","m","out","po","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":["a","biz","c","co","d","diy","gd","h","i","jp","m","po","s4s","sci","tg","u","v","vg","vp","vr","wsg"]}],
to: function(dest, data) {
var archive;
archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
@ -13308,8 +13319,8 @@
"http": true,
"https": true,
"software": "foolfuuka",
"boards": ["d", "i", "lgbt"],
"files": ["d", "i", "lgbt"]
"boards": ["d", "i", "lgbt", "e", "wg"],
"files": ["d", "i", "lgbt", "e", "wg"]
}, {
"uid": 8,
"name": "Rebecca Black Tech",

View File

@ -12,6 +12,8 @@ class SimpleDict
if (i = @keys.indexOf key) isnt -1
@keys.splice i, 1
delete @[key]
first: -> @[@keys[0]]
forEach: (fn) ->
fn @[key] for key in [@keys...]

View File

@ -293,7 +293,7 @@ Linkify =
{status} = @
return el.textContent = "ERROR #{status}" unless status in [200, 304]
{files} = @response
for type in ['video/mp4', 'video/webm', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'audio/mpeg', 'audio/ogg']
for type in ['video/webm', 'video/mp4', 'video/ogv', 'image/svg+xml', 'image/png', 'image/gif', 'image/jpeg', 'audio/mpeg', 'audio/ogg']
for file in files
if file.type is type
embed = file

View File

@ -18,7 +18,8 @@ Unread =
Unread.db.disconnect()
$.rm hr if {hr} = Unread
delete @[name] for name in ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title', 'lastReadPost']
delete @[name] for name in ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title']
@lastReadPost = 0
$.off d, '4chanXInitFinished', @ready
$.off d, 'ThreadUpdate', @onUpdate
@ -31,8 +32,8 @@ Unread =
Unread.thread = @
Unread.title = d.title
Unread.lastReadPost = Unread.db.get
boardID: @board.ID
threadID: @ID
boardID: @board.ID
threadID: @ID
defaultValue: 0
$.on d, '4chanXInitFinished', Unread.ready
$.on d, 'ThreadUpdate', Unread.onUpdate
@ -41,12 +42,17 @@ Unread =
ready: ->
$.off d, '4chanXInitFinished', Unread.ready
unless Conf['Quote Threading']
posts = []
Unread.thread.posts.forEach (post) -> posts.push post if post.isReply
Unread.addPosts posts
QuoteThreading.force() if Conf['Quote Threading']
Unread.scroll() if Conf['Scroll to Last Read Post']
{posts} = Unread.thread
post = posts.first().nodes.root
# XXX I'm guessing the browser isn't reflowing fast enough?
$.asap (-> post.getBoundingClientRect().bottom), ->
if Conf['Quote Threading']
QuoteThreading.force()
else
arr = []
posts.forEach (post) -> arr.push post if post.isReply
Unread.addPosts arr
setTimeout Unread.scroll, 200 if Conf['Scroll to Last Read Post']
scroll: ->
# Let the header's onload callback handle it.
@ -68,15 +74,17 @@ Unread =
sync: ->
lastReadPost = Unread.db.get
boardID: Unread.thread.board.ID
threadID: Unread.thread.ID
boardID: Unread.thread.board.ID
threadID: Unread.thread.ID
defaultValue: 0
return unless Unread.lastReadPost < lastReadPost
Unread.lastReadPost = lastReadPost
return if Unread.lastReadPost > lastReadPost
Unread.lastReadPost = lastReadPost
post = Unread.posts.first
while post
break if ({ID} = post) > Unread.lastReadPost
{ID} = post
break if ID > lastReadPost
post = post.next
Unread.posts.rm ID
@ -147,9 +155,8 @@ Unread =
read: $.debounce 100, (e) ->
return if d.hidden or !Unread.posts.length
height = doc.clientHeight
{posts} = Unread
while post = posts.first
break unless Header.getBottomOf(post.data.nodes.root) > -1 # post is not completely read
{ID, data} = post
@ -164,7 +171,7 @@ Unread =
return unless ID
Unread.lastReadPost = ID if Unread.lastReadPost < ID or !Unread.lastReadPost
Unread.lastReadPost = ID if Unread.lastReadPost < ID
Unread.saveLastReadPost()
Unread.readArray Unread.postsQuotingYou
Unread.update() if e