More or less just trying to optimize this.
This commit is contained in:
parent
ef99677f14
commit
69288c7ebe
@ -2360,7 +2360,7 @@
|
||||
});
|
||||
},
|
||||
scroll: $.debounce(100, function() {
|
||||
var nodes, nodesPerPage, pageNum;
|
||||
var nodes, nodesPerPage, offset, pageNum;
|
||||
if (Index.req || Conf['Index Mode'] !== 'infinite' || (doc.scrollTop <= doc.scrollHeight - (300 + window.innerHeight)) || g.VIEW === 'thread') {
|
||||
return;
|
||||
}
|
||||
@ -2371,12 +2371,13 @@
|
||||
if (pageNum >= Index.pagesNum) {
|
||||
return Index.endNotice();
|
||||
}
|
||||
nodesPerPage = Index.threadsNumPerPage * 2;
|
||||
nodes = Index.sortedNodes.slice(nodesPerPage * pageNum, nodesPerPage * (pageNum + 1));
|
||||
nodesPerPage = Index.threadsNumPerPage;
|
||||
offset = nodesPerPage * pageNum;
|
||||
nodes = Index.sortedNodes.slice(offset, offset + nodesPerPage);
|
||||
if (Conf['Show Replies']) {
|
||||
Index.buildReplies(nodes);
|
||||
}
|
||||
$.add(Index.root, nodes);
|
||||
Index.buildStructure(nodes);
|
||||
return Index.setPage(pageNum);
|
||||
}),
|
||||
endNotice: (function() {
|
||||
@ -2655,7 +2656,7 @@
|
||||
thread = new Thread(threadData.no, g.BOARD);
|
||||
threads.push(thread);
|
||||
}
|
||||
Index.nodes.push(threadRoot, $.el('hr'));
|
||||
Index.nodes.push(threadRoot);
|
||||
if (thread.ID in thread.posts) {
|
||||
continue;
|
||||
}
|
||||
@ -2682,7 +2683,7 @@
|
||||
buildReplies: function(threadRoots) {
|
||||
var data, err, errors, i, lastReplies, node, nodes, post, posts, thread, threadRoot, _i, _j, _len, _len1;
|
||||
posts = [];
|
||||
for (_i = 0, _len = threadRoots.length; _i < _len; _i += 2) {
|
||||
for (_i = 0, _len = threadRoots.length; _i < _len; _i++) {
|
||||
threadRoot = threadRoots[_i];
|
||||
thread = Get.threadFromRoot(threadRoot);
|
||||
i = Index.liveThreadIDs.indexOf(thread.ID);
|
||||
@ -2718,7 +2719,7 @@
|
||||
return Main.callbackNodes(Post, posts);
|
||||
},
|
||||
sort: function() {
|
||||
var cnd, fn, i, item, items, sortOnTop, sortedThreadIDs, threadID, _i, _len;
|
||||
var cnd, fn, i, item, items, nodes, sortedThreadIDs, threadID, _i, _len;
|
||||
sortedThreadIDs = {
|
||||
lastreply: __slice.call(Index.liveThreadData).sort(function(a, b) {
|
||||
if ('last_replies' in a) {
|
||||
@ -2747,15 +2748,14 @@
|
||||
})
|
||||
}[Conf['Index Sort']];
|
||||
Index.sortedNodes = [];
|
||||
nodes = Index.nodes;
|
||||
for (_i = 0, _len = sortedThreadIDs.length; _i < _len; _i++) {
|
||||
threadID = sortedThreadIDs[_i];
|
||||
i = Index.liveThreadIDs.indexOf(threadID) * 2;
|
||||
Index.sortedNodes.push(Index.nodes[i], Index.nodes[i + 1]);
|
||||
Index.sortedNodes.push(nodes[Index.liveThreadIDs.indexOf(threadID)]);
|
||||
}
|
||||
if (Index.isSearching) {
|
||||
Index.sortedNodes = Index.querySearch(Index.searchInput.value) || Index.sortedNodes;
|
||||
if (Index.isSearching && (nodes = Index.querySearch(Index.searchInput.value))) {
|
||||
Index.sortedNodes = nodes;
|
||||
}
|
||||
sortOnTop = Index.sortOnTop;
|
||||
items = [
|
||||
{
|
||||
fn: function(thread) {
|
||||
@ -2777,28 +2777,30 @@
|
||||
i = 0;
|
||||
while (item = items[i++]) {
|
||||
fn = item.fn, cnd = item.cnd;
|
||||
if (fn) {
|
||||
sortOnTop(fn);
|
||||
if (cnd) {
|
||||
Index.sortOnTop(fn);
|
||||
}
|
||||
}
|
||||
},
|
||||
sortOnTop: function(match) {
|
||||
var i, offset, threadRoot, _i, _len, _ref, _ref1;
|
||||
var i, offset, threadRoot, _i, _len, _ref;
|
||||
offset = 0;
|
||||
i = 0;
|
||||
_ref = Index.sortedNodes;
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = _i += 2) {
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
||||
threadRoot = _ref[i];
|
||||
if (match(Get.threadFromRoot(threadRoot))) {
|
||||
(_ref1 = Index.sortedNodes).splice.apply(_ref1, [offset++ * 2, 0].concat(__slice.call(Index.sortedNodes.splice(i, 2))));
|
||||
Index.sortedNodes.splice(offset++, 0, Index.sortedNodes.splice(i, 1)[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
buildIndex: function() {
|
||||
var nodes, nodesPerPage, pageNum;
|
||||
var nodes, nodesPerPage, offset, pageNum;
|
||||
if (Conf['Index Mode'] !== 'all pages') {
|
||||
pageNum = Index.getCurrentPage();
|
||||
nodesPerPage = Index.threadsNumPerPage * 2;
|
||||
nodes = Index.sortedNodes.slice(nodesPerPage * pageNum, nodesPerPage * (pageNum + 1));
|
||||
nodesPerPage = Index.threadsNumPerPage;
|
||||
offset = nodesPerPage * pageNum;
|
||||
nodes = Index.sortedNodes.slice(offset, offset + nodesPerPage);
|
||||
} else {
|
||||
nodes = Index.sortedNodes;
|
||||
}
|
||||
@ -2807,8 +2809,22 @@
|
||||
if (Conf['Show Replies']) {
|
||||
Index.buildReplies(nodes);
|
||||
}
|
||||
$.add(Index.root, nodes);
|
||||
return $.event('IndexBuild', nodes);
|
||||
return Index.buildStructure(nodes);
|
||||
},
|
||||
buildStructure: function(nodes) {
|
||||
var hr, i, node, result, _i, _len, _ref;
|
||||
result = $.frag();
|
||||
i = 0;
|
||||
while (node = nodes[i++]) {
|
||||
$.add(result, [node, $.el('hr')]);
|
||||
}
|
||||
$.add(Index.root, result);
|
||||
_ref = $$('hr + hr', Index.root);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
hr = _ref[_i];
|
||||
$.rm(hr);
|
||||
}
|
||||
return $.event('IndexBuild', result);
|
||||
},
|
||||
isSearching: false,
|
||||
clearSearch: function() {
|
||||
@ -2851,16 +2867,16 @@
|
||||
return Index.search(keywords);
|
||||
},
|
||||
search: function(keywords) {
|
||||
var found, i, threadRoot, _i, _len, _ref;
|
||||
found = [];
|
||||
var threadRoot, _i, _len, _ref, _results;
|
||||
_ref = Index.sortedNodes;
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = _i += 2) {
|
||||
threadRoot = _ref[i];
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
threadRoot = _ref[_i];
|
||||
if (Index.searchMatch(Get.threadFromRoot(threadRoot), keywords)) {
|
||||
found.push(Index.sortedNodes[i], Index.sortedNodes[i + 1]);
|
||||
_results.push(threadRoot);
|
||||
}
|
||||
}
|
||||
return found;
|
||||
return _results;
|
||||
},
|
||||
searchMatch: function(thread, keywords) {
|
||||
var file, info, key, keyword, text, _i, _j, _len, _len1, _ref, _ref1;
|
||||
|
||||
@ -2370,7 +2370,7 @@
|
||||
});
|
||||
},
|
||||
scroll: $.debounce(100, function() {
|
||||
var nodes, nodesPerPage, pageNum;
|
||||
var nodes, nodesPerPage, offset, pageNum;
|
||||
if (Index.req || Conf['Index Mode'] !== 'infinite' || (doc.scrollTop <= doc.scrollHeight - (300 + window.innerHeight)) || g.VIEW === 'thread') {
|
||||
return;
|
||||
}
|
||||
@ -2381,12 +2381,13 @@
|
||||
if (pageNum >= Index.pagesNum) {
|
||||
return Index.endNotice();
|
||||
}
|
||||
nodesPerPage = Index.threadsNumPerPage * 2;
|
||||
nodes = Index.sortedNodes.slice(nodesPerPage * pageNum, nodesPerPage * (pageNum + 1));
|
||||
nodesPerPage = Index.threadsNumPerPage;
|
||||
offset = nodesPerPage * pageNum;
|
||||
nodes = Index.sortedNodes.slice(offset, offset + nodesPerPage);
|
||||
if (Conf['Show Replies']) {
|
||||
Index.buildReplies(nodes);
|
||||
}
|
||||
$.add(Index.root, nodes);
|
||||
Index.buildStructure(nodes);
|
||||
return Index.setPage(pageNum);
|
||||
}),
|
||||
endNotice: (function() {
|
||||
@ -2665,7 +2666,7 @@
|
||||
thread = new Thread(threadData.no, g.BOARD);
|
||||
threads.push(thread);
|
||||
}
|
||||
Index.nodes.push(threadRoot, $.el('hr'));
|
||||
Index.nodes.push(threadRoot);
|
||||
if (thread.ID in thread.posts) {
|
||||
continue;
|
||||
}
|
||||
@ -2692,7 +2693,7 @@
|
||||
buildReplies: function(threadRoots) {
|
||||
var data, err, errors, i, lastReplies, node, nodes, post, posts, thread, threadRoot, _i, _j, _len, _len1;
|
||||
posts = [];
|
||||
for (_i = 0, _len = threadRoots.length; _i < _len; _i += 2) {
|
||||
for (_i = 0, _len = threadRoots.length; _i < _len; _i++) {
|
||||
threadRoot = threadRoots[_i];
|
||||
thread = Get.threadFromRoot(threadRoot);
|
||||
i = Index.liveThreadIDs.indexOf(thread.ID);
|
||||
@ -2728,7 +2729,7 @@
|
||||
return Main.callbackNodes(Post, posts);
|
||||
},
|
||||
sort: function() {
|
||||
var cnd, fn, i, item, items, sortOnTop, sortedThreadIDs, threadID, _i, _len;
|
||||
var cnd, fn, i, item, items, nodes, sortedThreadIDs, threadID, _i, _len;
|
||||
sortedThreadIDs = {
|
||||
lastreply: __slice.call(Index.liveThreadData).sort(function(a, b) {
|
||||
if ('last_replies' in a) {
|
||||
@ -2757,15 +2758,14 @@
|
||||
})
|
||||
}[Conf['Index Sort']];
|
||||
Index.sortedNodes = [];
|
||||
nodes = Index.nodes;
|
||||
for (_i = 0, _len = sortedThreadIDs.length; _i < _len; _i++) {
|
||||
threadID = sortedThreadIDs[_i];
|
||||
i = Index.liveThreadIDs.indexOf(threadID) * 2;
|
||||
Index.sortedNodes.push(Index.nodes[i], Index.nodes[i + 1]);
|
||||
Index.sortedNodes.push(nodes[Index.liveThreadIDs.indexOf(threadID)]);
|
||||
}
|
||||
if (Index.isSearching) {
|
||||
Index.sortedNodes = Index.querySearch(Index.searchInput.value) || Index.sortedNodes;
|
||||
if (Index.isSearching && (nodes = Index.querySearch(Index.searchInput.value))) {
|
||||
Index.sortedNodes = nodes;
|
||||
}
|
||||
sortOnTop = Index.sortOnTop;
|
||||
items = [
|
||||
{
|
||||
fn: function(thread) {
|
||||
@ -2787,28 +2787,30 @@
|
||||
i = 0;
|
||||
while (item = items[i++]) {
|
||||
fn = item.fn, cnd = item.cnd;
|
||||
if (fn) {
|
||||
sortOnTop(fn);
|
||||
if (cnd) {
|
||||
Index.sortOnTop(fn);
|
||||
}
|
||||
}
|
||||
},
|
||||
sortOnTop: function(match) {
|
||||
var i, offset, threadRoot, _i, _len, _ref, _ref1;
|
||||
var i, offset, threadRoot, _i, _len, _ref;
|
||||
offset = 0;
|
||||
i = 0;
|
||||
_ref = Index.sortedNodes;
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = _i += 2) {
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
||||
threadRoot = _ref[i];
|
||||
if (match(Get.threadFromRoot(threadRoot))) {
|
||||
(_ref1 = Index.sortedNodes).splice.apply(_ref1, [offset++ * 2, 0].concat(__slice.call(Index.sortedNodes.splice(i, 2))));
|
||||
Index.sortedNodes.splice(offset++, 0, Index.sortedNodes.splice(i, 1)[0]);
|
||||
}
|
||||
}
|
||||
},
|
||||
buildIndex: function() {
|
||||
var nodes, nodesPerPage, pageNum;
|
||||
var nodes, nodesPerPage, offset, pageNum;
|
||||
if (Conf['Index Mode'] !== 'all pages') {
|
||||
pageNum = Index.getCurrentPage();
|
||||
nodesPerPage = Index.threadsNumPerPage * 2;
|
||||
nodes = Index.sortedNodes.slice(nodesPerPage * pageNum, nodesPerPage * (pageNum + 1));
|
||||
nodesPerPage = Index.threadsNumPerPage;
|
||||
offset = nodesPerPage * pageNum;
|
||||
nodes = Index.sortedNodes.slice(offset, offset + nodesPerPage);
|
||||
} else {
|
||||
nodes = Index.sortedNodes;
|
||||
}
|
||||
@ -2817,8 +2819,22 @@
|
||||
if (Conf['Show Replies']) {
|
||||
Index.buildReplies(nodes);
|
||||
}
|
||||
$.add(Index.root, nodes);
|
||||
return $.event('IndexBuild', nodes);
|
||||
return Index.buildStructure(nodes);
|
||||
},
|
||||
buildStructure: function(nodes) {
|
||||
var hr, i, node, result, _i, _len, _ref;
|
||||
result = $.frag();
|
||||
i = 0;
|
||||
while (node = nodes[i++]) {
|
||||
$.add(result, [node, $.el('hr')]);
|
||||
}
|
||||
$.add(Index.root, result);
|
||||
_ref = $$('hr + hr', Index.root);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
hr = _ref[_i];
|
||||
$.rm(hr);
|
||||
}
|
||||
return $.event('IndexBuild', result);
|
||||
},
|
||||
isSearching: false,
|
||||
clearSearch: function() {
|
||||
@ -2861,16 +2877,16 @@
|
||||
return Index.search(keywords);
|
||||
},
|
||||
search: function(keywords) {
|
||||
var found, i, threadRoot, _i, _len, _ref;
|
||||
found = [];
|
||||
var threadRoot, _i, _len, _ref, _results;
|
||||
_ref = Index.sortedNodes;
|
||||
for (i = _i = 0, _len = _ref.length; _i < _len; i = _i += 2) {
|
||||
threadRoot = _ref[i];
|
||||
_results = [];
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
threadRoot = _ref[_i];
|
||||
if (Index.searchMatch(Get.threadFromRoot(threadRoot), keywords)) {
|
||||
found.push(Index.sortedNodes[i], Index.sortedNodes[i + 1]);
|
||||
_results.push(threadRoot);
|
||||
}
|
||||
}
|
||||
return found;
|
||||
return _results;
|
||||
},
|
||||
searchMatch: function(thread, keywords) {
|
||||
var file, info, key, keyword, text, _i, _j, _len, _len1, _ref, _ref1;
|
||||
|
||||
@ -115,12 +115,16 @@ Index =
|
||||
scroll: $.debounce 100, ->
|
||||
return if Index.req or Conf['Index Mode'] isnt 'infinite' or (doc.scrollTop <= doc.scrollHeight - (300 + window.innerHeight)) or g.VIEW is 'thread'
|
||||
Index.pageNum = Index.getCurrentPage() unless Index.pageNum? # Avoid having to pushState to keep track of the current page
|
||||
|
||||
pageNum = Index.pageNum++
|
||||
return Index.endNotice() if pageNum >= Index.pagesNum
|
||||
nodesPerPage = Index.threadsNumPerPage * 2
|
||||
nodes = Index.sortedNodes[nodesPerPage * pageNum ... nodesPerPage * (pageNum + 1)]
|
||||
|
||||
nodesPerPage = Index.threadsNumPerPage
|
||||
offset = nodesPerPage * pageNum
|
||||
nodes = Index.sortedNodes[offset ... offset + nodesPerPage]
|
||||
|
||||
Index.buildReplies nodes if Conf['Show Replies']
|
||||
$.add Index.root, nodes
|
||||
Index.buildStructure nodes
|
||||
Index.setPage pageNum
|
||||
|
||||
endNotice: do ->
|
||||
@ -331,7 +335,7 @@ Index =
|
||||
else
|
||||
thread = new Thread threadData.no, g.BOARD
|
||||
threads.push thread
|
||||
Index.nodes.push threadRoot, $.el 'hr'
|
||||
Index.nodes.push threadRoot
|
||||
continue if thread.ID of thread.posts
|
||||
posts.push new Post $('.opContainer', threadRoot), thread, g.BOARD
|
||||
catch err
|
||||
@ -350,7 +354,7 @@ Index =
|
||||
|
||||
buildReplies: (threadRoots) ->
|
||||
posts = []
|
||||
for threadRoot in threadRoots by 2
|
||||
for threadRoot in threadRoots
|
||||
thread = Get.threadFromRoot threadRoot
|
||||
i = Index.liveThreadIDs.indexOf thread.ID
|
||||
continue unless lastReplies = Index.liveThreadData[i].last_replies
|
||||
@ -382,19 +386,18 @@ Index =
|
||||
b.no - a.no
|
||||
).map (data) -> data.no
|
||||
bump: Index.liveThreadIDs
|
||||
birth: [Index.liveThreadIDs...].sort (a, b) -> b - a
|
||||
birth: [Index.liveThreadIDs... ].sort (a, b) -> b - a
|
||||
replycount: [Index.liveThreadData...].sort((a, b) -> b.replies - a.replies).map (data) -> data.no
|
||||
filecount: [Index.liveThreadData...].sort((a, b) -> b.images - a.images).map (data) -> data.no
|
||||
filecount: [Index.liveThreadData...].sort((a, b) -> b.images - a.images ).map (data) -> data.no
|
||||
}[Conf['Index Sort']]
|
||||
Index.sortedNodes = []
|
||||
{nodes} = Index
|
||||
for threadID in sortedThreadIDs
|
||||
i = Index.liveThreadIDs.indexOf(threadID) * 2
|
||||
Index.sortedNodes.push Index.nodes[i], Index.nodes[i + 1]
|
||||
if Index.isSearching
|
||||
Index.sortedNodes = Index.querySearch(Index.searchInput.value) or Index.sortedNodes
|
||||
# Sticky threads
|
||||
{sortOnTop} = Index
|
||||
Index.sortedNodes.push nodes[Index.liveThreadIDs.indexOf(threadID)]
|
||||
if Index.isSearching and nodes = Index.querySearch(Index.searchInput.value)
|
||||
Index.sortedNodes = nodes
|
||||
items = [
|
||||
# Sticky threads
|
||||
fn: (thread) -> thread.isSticky
|
||||
cnd: true
|
||||
, # Highlighted threads
|
||||
@ -407,27 +410,37 @@ Index =
|
||||
i = 0
|
||||
while item = items[i++]
|
||||
{fn, cnd} = item
|
||||
sortOnTop fn if fn
|
||||
Index.sortOnTop fn if cnd
|
||||
return
|
||||
|
||||
sortOnTop: (match) ->
|
||||
offset = 0
|
||||
for threadRoot, i in Index.sortedNodes by 2 when match Get.threadFromRoot threadRoot
|
||||
Index.sortedNodes.splice offset++ * 2, 0, Index.sortedNodes.splice(i, 2)...
|
||||
i = 0
|
||||
for threadRoot, i in Index.sortedNodes
|
||||
if match Get.threadFromRoot threadRoot
|
||||
Index.sortedNodes.splice offset++, 0, Index.sortedNodes.splice(i, 1)[0]
|
||||
return
|
||||
|
||||
buildIndex: ->
|
||||
if Conf['Index Mode'] isnt 'all pages'
|
||||
pageNum = Index.getCurrentPage()
|
||||
nodesPerPage = Index.threadsNumPerPage * 2
|
||||
nodes = Index.sortedNodes[nodesPerPage * pageNum ... nodesPerPage * (pageNum + 1)]
|
||||
nodesPerPage = Index.threadsNumPerPage
|
||||
offset = nodesPerPage * pageNum
|
||||
nodes = Index.sortedNodes[offset ... offset + nodesPerPage]
|
||||
else
|
||||
nodes = Index.sortedNodes
|
||||
$.rmAll Index.root
|
||||
$.rmAll Header.hover
|
||||
Index.buildReplies nodes if Conf['Show Replies']
|
||||
$.add Index.root, nodes
|
||||
$.event 'IndexBuild', nodes
|
||||
Index.buildStructure nodes
|
||||
|
||||
buildStructure: (nodes) ->
|
||||
result = $.frag()
|
||||
i = 0
|
||||
$.add result, [node, $.el 'hr'] while node = nodes[i++]
|
||||
$.add Index.root, result
|
||||
$.rm hr for hr in $$ 'hr + hr', Index.root # Temp fix until I figure out where I fucked up
|
||||
$.event 'IndexBuild', result
|
||||
|
||||
isSearching: false
|
||||
|
||||
@ -467,12 +480,7 @@ Index =
|
||||
return unless keywords = query.toLowerCase().match /\S+/g
|
||||
Index.search keywords
|
||||
|
||||
search: (keywords) ->
|
||||
found = []
|
||||
for threadRoot, i in Index.sortedNodes by 2
|
||||
if Index.searchMatch Get.threadFromRoot(threadRoot), keywords
|
||||
found.push Index.sortedNodes[i], Index.sortedNodes[i + 1]
|
||||
found
|
||||
search: (keywords) -> threadRoot for threadRoot in Index.sortedNodes when Index.searchMatch Get.threadFromRoot(threadRoot), keywords
|
||||
|
||||
searchMatch: (thread, keywords) ->
|
||||
{info, file} = thread.OP
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user