Eliminate Index.liveThreadIDs

This commit is contained in:
Zixaphir 2014-03-13 13:56:48 -07:00
parent 60b3d447c5
commit f81c03f5a2
4 changed files with 110 additions and 97 deletions

View File

@ -3145,7 +3145,7 @@
for (threadID in _ref) {
thread = _ref[threadID];
if (thread.isHidden) {
if (_ref1 = thread.ID, __indexOf.call(Index.liveThreadIDs, _ref1) >= 0) {
if (_ref1 = thread.ID, __indexOf.call(Index.liveThreadData.keys, _ref1) >= 0) {
hiddenCount++;
}
}
@ -3265,34 +3265,32 @@
return Index.buildIndex();
},
parseThreadList: function(pages) {
var data, i, live, page, thread;
var i, j, live, page, thread, threads;
Index.threadsNumPerPage = pages[0].threads.length;
live = [];
live = new SimpleDict();
i = 0;
while (page = pages[i++]) {
live = live.concat(page.threads);
}
data = [];
i = 0;
while (thread = live[i++]) {
data.push(thread.no);
j = 0;
threads = page.threads;
while (thread = threads[j++]) {
live.push(thread.no, thread);
}
}
Index.liveThreadData = live;
Index.liveThreadIDs = data;
return g.BOARD.threads.forEach(function(thread) {
var _ref;
if (_ref = thread.ID, __indexOf.call(Index.liveThreadIDs, _ref) < 0) {
if (_ref = thread.ID, __indexOf.call(Index.liveThreadData.keys, _ref) < 0) {
return thread.collect();
}
});
},
buildThreads: function() {
var err, errors, i, liveThreadData, posts, thread, threadData, threadRoot, threads;
var errors, posts, threads;
threads = [];
posts = [];
i = 0;
liveThreadData = Index.liveThreadData;
while (threadData = liveThreadData[i]) {
errors = null;
Index.liveThreadData.forEach(function(threadData) {
var err, thread, threadRoot;
threadRoot = Build.thread(g.BOARD, threadData);
if (thread = g.BOARD.threads[threadData.no]) {
thread.setPage(Math.floor(i / Index.threadsNumPerPage));
@ -3304,23 +3302,22 @@
thread = new Thread(threadData.no, g.BOARD);
threads.push(thread);
}
i++;
if (thread.ID in thread.posts) {
continue;
return;
}
try {
posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD));
return posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD));
} catch (_error) {
err = _error;
if (!errors) {
errors = [];
}
errors.push({
return errors.push({
message: "Parsing of Thread No." + thread + " failed. Thread will be skipped.",
error: err
});
}
}
});
if (errors) {
Main.handleErrors(errors);
}
@ -3330,13 +3327,12 @@
return $.event('IndexRefresh');
},
buildReplies: function(thread) {
var data, err, errors, i, lastReplies, node, nodes, post, posts, _i, _len;
var data, err, errors, lastReplies, node, nodes, post, posts, _i, _len;
if (!Conf['Show Replies']) {
return;
}
posts = [];
i = Index.liveThreadIDs.indexOf(thread.ID);
if (!(lastReplies = Index.liveThreadData[i].last_replies)) {
if (!(lastReplies = Index.liveThreadData[thread.ID].last_replies)) {
return;
}
nodes = [];
@ -3400,16 +3396,20 @@
}
},
sort: function() {
var i, sortedThreadIDs, sortedThreads, thread, threadID;
var i, liveData, sortedThreadIDs, sortedThreads, thread, threadID;
sortedThreads = [];
sortedThreadIDs = [];
liveData = [];
Index.liveThreadData.forEach(function(data) {
return liveData.push(data);
});
({
'bump': function() {
return sortedThreadIDs = Index.liveThreadIDs;
return sortedThreadIDs = Index.liveThreadData.keys;
},
'lastreply': function() {
var data, i, liveData;
liveData = __slice.call(Index.liveThreadData).sort(function(a, b) {
var data, i;
liveData.sort(function(a, b) {
var _ref, _ref1;
if ('last_replies' in a) {
_ref = a.last_replies, a = _ref[_ref.length - 1];
@ -3425,13 +3425,13 @@
}
},
'birth': function() {
return sortedThreadIDs = __slice.call(Index.liveThreadIDs).sort(function(a, b) {
return sortedThreadIDs = __slice.call(Index.liveThreadData.keys).sort(function(a, b) {
return b - a;
});
},
'replycount': function() {
var data, i, liveData;
liveData = __slice.call(Index.liveThreadData).sort(function(a, b) {
var data, i;
liveData.sort(function(a, b) {
return b.replies - a.replies;
});
i = 0;
@ -3440,8 +3440,12 @@
}
},
'filecount': function() {
var data, i, liveData;
liveData = __slice.call(Index.liveThreadData).sort(function(a, b) {
var data, i;
liveData = [];
Index.liveThreadData.forEach(function(data) {
return liveData.push(data);
});
liveData.sort(function(a, b) {
return b.images - a.images;
});
i = 0;
@ -3734,7 +3738,7 @@
sticky = isSticky ? " <img src=" + staticPath + "sticky" + gifIcon + " title=Sticky class=stickyIcon>" : '';
closed = isClosed ? " <img src=" + staticPath + "closed" + gifIcon + " title=Closed class=closedIcon>" : '';
if (isOP && g.VIEW === 'index') {
pageNum = Math.floor(Index.liveThreadIDs.indexOf(postID) / Index.threadsNumPerPage);
pageNum = Math.floor(Index.liveThreadData.keys.indexOf(postID) / Index.threadsNumPerPage);
pageIcon = " <span class=page-num title='This thread is on page " + pageNum + " in the original index.'>Page " + pageNum + "</span>";
replyLink = " &nbsp; <span>[<a href='/" + boardID + "/res/" + threadID + "' class=replylink>Reply</a>]</span>";
} else {
@ -3800,10 +3804,10 @@
catalogThread: function(thread) {
var comment, data, fileCount, gifIcon, pageCount, postCount, pp, quotelink, root, spoilerRange, src, staticPath, subject, thumb, _i, _j, _len, _len1, _ref, _ref1;
staticPath = Build.staticPath, gifIcon = Build.gifIcon;
data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)];
data = Index.liveThreadData[thread.ID];
postCount = data.replies + 1;
fileCount = data.images + !!data.ext;
pageCount = Math.floor(Index.liveThreadIDs.indexOf(thread.ID) / Index.threadsNumPerPage);
pageCount = Math.floor(Index.liveThreadData.keys.indexOf(thread.ID) / Index.threadsNumPerPage);
subject = thread.OP.info.subject ? "<div class='subject'>" + thread.OP.info.subject + "</div>" : '';
comment = thread.OP.nodes.comment.innerHTML.replace(/(<br>\s*){2,}/g, '<br>');
root = $.el('div', {

View File

@ -3204,7 +3204,7 @@
for (threadID in _ref) {
thread = _ref[threadID];
if (thread.isHidden) {
if (_ref1 = thread.ID, __indexOf.call(Index.liveThreadIDs, _ref1) >= 0) {
if (_ref1 = thread.ID, __indexOf.call(Index.liveThreadData.keys, _ref1) >= 0) {
hiddenCount++;
}
}
@ -3324,34 +3324,32 @@
return Index.buildIndex();
},
parseThreadList: function(pages) {
var data, i, live, page, thread;
var i, j, live, page, thread, threads;
Index.threadsNumPerPage = pages[0].threads.length;
live = [];
live = new SimpleDict();
i = 0;
while (page = pages[i++]) {
live = live.concat(page.threads);
}
data = [];
i = 0;
while (thread = live[i++]) {
data.push(thread.no);
j = 0;
threads = page.threads;
while (thread = threads[j++]) {
live.push(thread.no, thread);
}
}
Index.liveThreadData = live;
Index.liveThreadIDs = data;
return g.BOARD.threads.forEach(function(thread) {
var _ref;
if (_ref = thread.ID, __indexOf.call(Index.liveThreadIDs, _ref) < 0) {
if (_ref = thread.ID, __indexOf.call(Index.liveThreadData.keys, _ref) < 0) {
return thread.collect();
}
});
},
buildThreads: function() {
var err, errors, i, liveThreadData, posts, thread, threadData, threadRoot, threads;
var errors, posts, threads;
threads = [];
posts = [];
i = 0;
liveThreadData = Index.liveThreadData;
while (threadData = liveThreadData[i]) {
errors = null;
Index.liveThreadData.forEach(function(threadData) {
var err, thread, threadRoot;
threadRoot = Build.thread(g.BOARD, threadData);
if (thread = g.BOARD.threads[threadData.no]) {
thread.setPage(Math.floor(i / Index.threadsNumPerPage));
@ -3363,23 +3361,22 @@
thread = new Thread(threadData.no, g.BOARD);
threads.push(thread);
}
i++;
if (thread.ID in thread.posts) {
continue;
return;
}
try {
posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD));
return posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD));
} catch (_error) {
err = _error;
if (!errors) {
errors = [];
}
errors.push({
return errors.push({
message: "Parsing of Thread No." + thread + " failed. Thread will be skipped.",
error: err
});
}
}
});
if (errors) {
Main.handleErrors(errors);
}
@ -3389,13 +3386,12 @@
return $.event('IndexRefresh');
},
buildReplies: function(thread) {
var data, err, errors, i, lastReplies, node, nodes, post, posts, _i, _len;
var data, err, errors, lastReplies, node, nodes, post, posts, _i, _len;
if (!Conf['Show Replies']) {
return;
}
posts = [];
i = Index.liveThreadIDs.indexOf(thread.ID);
if (!(lastReplies = Index.liveThreadData[i].last_replies)) {
if (!(lastReplies = Index.liveThreadData[thread.ID].last_replies)) {
return;
}
nodes = [];
@ -3459,16 +3455,20 @@
}
},
sort: function() {
var i, sortedThreadIDs, sortedThreads, thread, threadID;
var i, liveData, sortedThreadIDs, sortedThreads, thread, threadID;
sortedThreads = [];
sortedThreadIDs = [];
liveData = [];
Index.liveThreadData.forEach(function(data) {
return liveData.push(data);
});
({
'bump': function() {
return sortedThreadIDs = Index.liveThreadIDs;
return sortedThreadIDs = Index.liveThreadData.keys;
},
'lastreply': function() {
var data, i, liveData;
liveData = __slice.call(Index.liveThreadData).sort(function(a, b) {
var data, i;
liveData.sort(function(a, b) {
var _ref, _ref1;
if ('last_replies' in a) {
_ref = a.last_replies, a = _ref[_ref.length - 1];
@ -3484,13 +3484,13 @@
}
},
'birth': function() {
return sortedThreadIDs = __slice.call(Index.liveThreadIDs).sort(function(a, b) {
return sortedThreadIDs = __slice.call(Index.liveThreadData.keys).sort(function(a, b) {
return b - a;
});
},
'replycount': function() {
var data, i, liveData;
liveData = __slice.call(Index.liveThreadData).sort(function(a, b) {
var data, i;
liveData.sort(function(a, b) {
return b.replies - a.replies;
});
i = 0;
@ -3499,8 +3499,12 @@
}
},
'filecount': function() {
var data, i, liveData;
liveData = __slice.call(Index.liveThreadData).sort(function(a, b) {
var data, i;
liveData = [];
Index.liveThreadData.forEach(function(data) {
return liveData.push(data);
});
liveData.sort(function(a, b) {
return b.images - a.images;
});
i = 0;
@ -3793,7 +3797,7 @@
sticky = isSticky ? " <img src=" + staticPath + "sticky" + gifIcon + " title=Sticky class=stickyIcon>" : '';
closed = isClosed ? " <img src=" + staticPath + "closed" + gifIcon + " title=Closed class=closedIcon>" : '';
if (isOP && g.VIEW === 'index') {
pageNum = Math.floor(Index.liveThreadIDs.indexOf(postID) / Index.threadsNumPerPage);
pageNum = Math.floor(Index.liveThreadData.keys.indexOf(postID) / Index.threadsNumPerPage);
pageIcon = " <span class=page-num title='This thread is on page " + pageNum + " in the original index.'>Page " + pageNum + "</span>";
replyLink = " &nbsp; <span>[<a href='/" + boardID + "/res/" + threadID + "' class=replylink>Reply</a>]</span>";
} else {
@ -3859,10 +3863,10 @@
catalogThread: function(thread) {
var comment, data, fileCount, gifIcon, pageCount, postCount, pp, quotelink, root, spoilerRange, src, staticPath, subject, thumb, _i, _j, _len, _len1, _ref, _ref1;
staticPath = Build.staticPath, gifIcon = Build.gifIcon;
data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)];
data = Index.liveThreadData[thread.ID];
postCount = data.replies + 1;
fileCount = data.images + !!data.ext;
pageCount = Math.floor(Index.liveThreadIDs.indexOf(thread.ID) / Index.threadsNumPerPage);
pageCount = Math.floor(Index.liveThreadData.keys.indexOf(thread.ID) / Index.threadsNumPerPage);
subject = thread.OP.info.subject ? "<div class='subject'>" + thread.OP.info.subject + "</div>" : '';
comment = thread.OP.nodes.comment.innerHTML.replace(/(<br>\s*){2,}/g, '<br>');
root = $.el('div', {

View File

@ -181,7 +181,7 @@ Build =
''
if isOP and g.VIEW is 'index'
pageNum = Index.liveThreadIDs.indexOf(postID) // Index.threadsNumPerPage
pageNum = Index.liveThreadData.keys.indexOf(postID) // Index.threadsNumPerPage
pageIcon = " <span class=page-num title='This thread is on page #{pageNum} in the original index.'>Page #{pageNum}</span>"
replyLink = " &nbsp; <span>[<a href='/#{boardID}/res/#{threadID}' class=replylink>Reply</a>]</span>"
else
@ -237,11 +237,11 @@ Build =
catalogThread: (thread) ->
{staticPath, gifIcon} = Build
data = Index.liveThreadData[Index.liveThreadIDs.indexOf thread.ID]
data = Index.liveThreadData[thread.ID]
postCount = data.replies + 1
fileCount = data.images + !!data.ext
pageCount = Index.liveThreadIDs.indexOf(thread.ID) // Index.threadsNumPerPage
pageCount = Index.liveThreadData.keys.indexOf(thread.ID) // Index.threadsNumPerPage
subject = if thread.OP.info.subject
"<div class='subject'>#{thread.OP.info.subject}</div>"

View File

@ -477,7 +477,7 @@ Index =
updateHideLabel: ->
hiddenCount = 0
for threadID, thread of g.BOARD.threads when thread.isHidden
hiddenCount++ if thread.ID in Index.liveThreadIDs
hiddenCount++ if thread.ID in Index.liveThreadData.keys
unless hiddenCount
Index.hideLabel.hidden = true
Index.cb.toggleHiddenThreads() if Index.showHiddenThreads
@ -576,28 +576,25 @@ Index =
parseThreadList: (pages) ->
Index.threadsNumPerPage = pages[0].threads.length
live = []
live = new SimpleDict()
i = 0
while page = pages[i++]
live = live.concat page.threads
j = 0
{threads} = page
while thread = threads[j++]
live.push thread.no, thread
data = []
i = 0
while thread = live[i++]
data.push thread.no
Index.liveThreadData = live
Index.liveThreadIDs = data
Index.liveThreadData = live
g.BOARD.threads.forEach (thread) ->
thread.collect() unless thread.ID in Index.liveThreadIDs
thread.collect() unless thread.ID in Index.liveThreadData.keys
buildThreads: ->
threads = []
posts = []
i = 0
{liveThreadData} = Index
while threadData = liveThreadData[i]
errors = null
Index.liveThreadData.forEach (threadData) ->
threadRoot = Build.thread g.BOARD, threadData
if thread = g.BOARD.threads[threadData.no]
thread.setPage i // Index.threadsNumPerPage
@ -605,31 +602,34 @@ Index =
thread.setCount 'file', threadData.images + !!threadData.ext, threadData.imagelimit
thread.setStatus 'Sticky', !!threadData.sticky
thread.setStatus 'Closed', !!threadData.closed
else
thread = new Thread threadData.no, g.BOARD
threads.push thread
i++
continue if thread.ID of thread.posts
return if thread.ID of thread.posts
try
posts.push new Post $('.opContainer', threadRoot), thread, g.BOARD
catch err
# Skip posts that we failed to parse.
errors = [] unless errors
errors.push
message: "Parsing of Thread No.#{thread} failed. Thread will be skipped."
error: err
Main.handleErrors errors if errors
Main.handleErrors errors if errors
Main.callbackNodes Thread, threads
Main.callbackNodes Post, posts
Index.updateHideLabel()
$.event 'IndexRefresh'
buildReplies: (thread) ->
return unless Conf['Show Replies']
posts = []
i = Index.liveThreadIDs.indexOf thread.ID
return unless lastReplies = Index.liveThreadData[i].last_replies
return unless lastReplies = Index.liveThreadData[thread.ID].last_replies
nodes = []
for data in lastReplies
if post = thread.posts[data.no]
@ -676,11 +676,14 @@ Index =
sortedThreads = []
sortedThreadIDs = []
liveData = []
Index.liveThreadData.forEach (data) -> liveData.push data
{
'bump': ->
sortedThreadIDs = Index.liveThreadIDs
sortedThreadIDs = Index.liveThreadData.keys
'lastreply': ->
liveData = [Index.liveThreadData...].sort (a, b) ->
liveData.sort (a, b) ->
[..., a] = a.last_replies if 'last_replies' of a
[..., b] = b.last_replies if 'last_replies' of b
b.no - a.no
@ -689,15 +692,17 @@ Index =
sortedThreadIDs.push data.no
return
'birth': ->
sortedThreadIDs = [Index.liveThreadIDs...].sort (a, b) -> b - a
sortedThreadIDs = [Index.liveThreadData.keys...].sort (a, b) -> b - a
'replycount': ->
liveData = [Index.liveThreadData...].sort((a, b) -> b.replies - a.replies)
liveData.sort (a, b) -> b.replies - a.replies
i = 0
while data = liveData[i++]
sortedThreadIDs.push data.no
return
'filecount': ->
liveData = [Index.liveThreadData...].sort((a, b) -> b.images - a.images)
liveData = []
Index.liveThreadData.forEach (data) -> liveData.push data
liveData.sort (a, b) -> b.images - a.images
i = 0
while data = liveData[i++]
sortedThreadIDs.push data.no