ThreadHiding refactor.

This commit is contained in:
Nicolas Stepien 2012-03-10 18:37:17 +01:00
parent e9c7e71e23
commit 628ae5d9db
2 changed files with 92 additions and 122 deletions

View File

@ -605,7 +605,7 @@
if (result === true) { if (result === true) {
if (isOP) { if (isOP) {
if (!g.REPLY) { if (!g.REPLY) {
ThreadHiding.hideHide(post.el.parentNode); ThreadHiding.hide(post.el.parentNode);
} else { } else {
continue; continue;
} }
@ -1051,7 +1051,7 @@
Keybinds.hl(-1, thread); Keybinds.hl(-1, thread);
break; break;
case conf.hide: case conf.hide:
ThreadHiding.toggle(thread); if (/\bthread\b/.test(thread.className)) ThreadHiding.toggle(thread);
break; break;
default: default:
return; return;
@ -2443,10 +2443,9 @@
ThreadHiding = { ThreadHiding = {
init: function() { init: function() {
var a, hiddenThreads, op, thread, _i, _len, _ref, _results; var a, hiddenThreads, op, thread, _i, _len, _ref;
hiddenThreads = $.get("hiddenThreads/" + g.BOARD + "/", {}); hiddenThreads = $.get("hiddenThreads/" + g.BOARD + "/", {});
_ref = $$('.thread'); _ref = $$('.thread');
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
thread = _ref[_i]; thread = _ref[_i];
op = thread.firstChild; op = thread.firstChild;
@ -2454,83 +2453,62 @@
textContent: '[ - ]', textContent: '[ - ]',
href: 'javascript:;' href: 'javascript:;'
}); });
$.on(a, 'click', ThreadHiding.cb.hide); $.on(a, 'click', ThreadHiding.cb);
$.prepend(op, a); $.prepend(op, a);
if (op.id in hiddenThreads) { if (op.id in hiddenThreads) ThreadHiding.hide(thread);
_results.push(ThreadHiding.hideHide(thread));
} else {
_results.push(void 0);
}
} }
return _results;
}, },
cb: { cb: function() {
hide: function() { return ThreadHiding.toggle(this.parentNode.parentNode);
var thread;
thread = this.parentNode.parentNode;
return ThreadHiding.hide(thread);
},
show: function() {
var thread;
thread = this.parentNode.parentNode;
return ThreadHiding.show(thread);
}
}, },
toggle: function(thread) { toggle: function(thread) {
if (/\bstub\b/.test(thread.className) || thread.hidden) { var hiddenThreads, id;
return ThreadHiding.show(thread); hiddenThreads = $.get("hiddenThreads/" + g.BOARD + "/", {});
id = $('.op', thread).id;
if (thread.hidden || /\bstub\b/.test(thread.className)) {
ThreadHiding.show(thread);
delete hiddenThreads[id];
} else { } else {
return ThreadHiding.hide(thread); ThreadHiding.hide(thread);
hiddenThreads[id] = Date.now();
} }
return $.set("hiddenThreads/" + g.BOARD + "/", hiddenThreads);
}, },
hide: function(thread) { hide: function(thread) {
var hiddenThreads, id; var a, div, name, num, op, span, text, trip, uid, _ref, _ref2;
ThreadHiding.hideHide(thread); if (!conf['Show Stubs']) {
id = thread.firstChild.id;
hiddenThreads = $.get("hiddenThreads/" + g.BOARD + "/", {});
hiddenThreads[id] = Date.now();
return $.set("hiddenThreads/" + g.BOARD + "/", hiddenThreads);
},
hideHide: function(thread) {
var a, div, name, num, span, text, trip, uid, _ref, _ref2;
if (conf['Show Stubs']) {
if (/stub/.test(thread.className)) return;
if (span = $('.omittedposts', thread)) {
num = Number(span.textContent.match(/\d+/)[0]);
} else {
num = 0;
}
num += $$('table', thread).length;
text = num === 1 ? "1 reply" : "" + num + " replies";
name = $('.postername', thread).textContent;
uid = ((_ref = $('.posteruid', thread)) != null ? _ref.textContent : void 0) || '';
trip = ((_ref2 = $('.postername + .postertrip', thread)) != null ? _ref2.textContent : void 0) || '';
a = $.el('a', {
innerHTML: "<span>[ + ]</span> " + name + uid + trip + " (" + text + ")",
href: 'javascript:;'
});
$.on(a, 'click', ThreadHiding.cb.show);
div = $.el('div', {
className: 'block'
});
$.add(div, a);
$.add(thread, div);
return $.addClass(thread, 'stub');
} else {
thread.hidden = true; thread.hidden = true;
return thread.nextSibling.hidden = true; thread.nextSibling.hidden = true;
return;
} }
if (/\bstub\b/.test(thread.className)) return;
num = 0;
if (span = $('.omittedposts', thread)) {
num = Number(span.textContent.match(/\d+/)[0]);
}
num += $$('.op ~ table', thread).length;
text = num === 1 ? '1 reply' : "" + num + " replies";
op = $('.op', thread);
name = $('.postername', op).textContent;
uid = ((_ref = $('.posteruid', op)) != null ? _ref.textContent : void 0) || '';
trip = ((_ref2 = $('.postertrip', op)) != null ? _ref2.textContent : void 0) || '';
a = $.el('a', {
innerHTML: "<span>[ + ]</span> " + name + " " + uid + " " + trip + " (" + text + ")",
href: 'javascript:;'
});
$.on(a, 'click', ThreadHiding.cb);
div = $.el('div', {
className: 'block'
});
$.add(div, a);
$.prepend(thread, div);
return $.addClass(thread, 'stub');
}, },
show: function(thread) { show: function(thread, id) {
var hiddenThreads, id; $.rm($('.block', thread));
$.rm($('div.block', thread));
$.removeClass(thread, 'stub'); $.removeClass(thread, 'stub');
thread.hidden = false; thread.hidden = false;
thread.nextSibling.hidden = false; return thread.nextSibling.hidden = false;
id = thread.firstChild.id;
hiddenThreads = $.get("hiddenThreads/" + g.BOARD + "/", {});
delete hiddenThreads[id];
return $.set("hiddenThreads/" + g.BOARD + "/", hiddenThreads);
} }
}; };
@ -4097,7 +4075,9 @@ a[href="javascript:;"] {\
text-decoration: none;\ text-decoration: none;\
}\ }\
\ \
.thread.stub > :not(.block),\ .block ~ .op,\
.block ~ .omittedposts,\
.block ~ table,\
#content > [name=tab]:not(:checked) + div,\ #content > [name=tab]:not(:checked) + div,\
#updater:not(:hover) > :not(.move),\ #updater:not(:hover) > :not(.move),\
#qp > input, #qp .inline, .forwarded {\ #qp > input, #qp .inline, .forwarded {\

View File

@ -540,7 +540,7 @@ Filter =
if result is true if result is true
if isOP if isOP
unless g.REPLY unless g.REPLY
ThreadHiding.hideHide post.el.parentNode ThreadHiding.hide post.el.parentNode
else else
continue continue
else else
@ -888,7 +888,7 @@ Keybinds =
when conf.previousReply when conf.previousReply
Keybinds.hl -1, thread Keybinds.hl -1, thread
when conf.hide when conf.hide
ThreadHiding.toggle thread ThreadHiding.toggle thread if /\bthread\b/.test thread.className
else else
return return
e.preventDefault() e.preventDefault()
@ -2057,75 +2057,63 @@ ThreadHiding =
a = $.el 'a', a = $.el 'a',
textContent: '[ - ]' textContent: '[ - ]'
href: 'javascript:;' href: 'javascript:;'
$.on a, 'click', ThreadHiding.cb.hide $.on a, 'click', ThreadHiding.cb
$.prepend op, a $.prepend op, a
if op.id of hiddenThreads if op.id of hiddenThreads
ThreadHiding.hideHide thread ThreadHiding.hide thread
return
cb: cb: ->
hide: -> ThreadHiding.toggle @parentNode.parentNode
thread = @parentNode.parentNode
ThreadHiding.hide thread
show: ->
thread = @parentNode.parentNode
ThreadHiding.show thread
toggle: (thread) -> toggle: (thread) ->
if /\bstub\b/.test(thread.className) or thread.hidden hiddenThreads = $.get "hiddenThreads/#{g.BOARD}/", {}
id = $('.op', thread).id
if thread.hidden or /\bstub\b/.test thread.className
ThreadHiding.show thread ThreadHiding.show thread
delete hiddenThreads[id]
else else
ThreadHiding.hide thread ThreadHiding.hide thread
hiddenThreads[id] = Date.now()
hide: (thread) ->
ThreadHiding.hideHide thread
id = thread.firstChild.id
hiddenThreads = $.get "hiddenThreads/#{g.BOARD}/", {}
hiddenThreads[id] = Date.now()
$.set "hiddenThreads/#{g.BOARD}/", hiddenThreads $.set "hiddenThreads/#{g.BOARD}/", hiddenThreads
hideHide: (thread) -> hide: (thread) ->
if conf['Show Stubs'] unless conf['Show Stubs']
return if /stub/.test thread.className #already hidden by filter
if span = $ '.omittedposts', thread
num = Number span.textContent.match(/\d+/)[0]
else
num = 0
num += $$('table', thread).length
text = if num is 1 then "1 reply" else "#{num} replies"
name = $('.postername', thread).textContent
uid = $('.posteruid', thread)?.textContent or ''
trip = $('.postername + .postertrip', thread)?.textContent or ''
a = $.el 'a',
innerHTML: "<span>[ + ]</span> #{name}#{uid}#{trip} (#{text})"
href: 'javascript:;'
$.on a, 'click', ThreadHiding.cb.show
div = $.el 'div',
className: 'block'
$.add div, a
$.add thread, div
$.addClass thread, 'stub'
else
thread.hidden = true thread.hidden = true
thread.nextSibling.hidden = true thread.nextSibling.hidden = true
return
show: (thread) -> return if /\bstub\b/.test thread.className # already hidden by filter
$.rm $ 'div.block', thread
num = 0
if span = $ '.omittedposts', thread
num = Number span.textContent.match(/\d+/)[0]
num += $$('.op ~ table', thread).length
text = if num is 1 then '1 reply' else "#{num} replies"
op = $ '.op', thread
name = $('.postername', op).textContent
uid = $('.posteruid', op)?.textContent or ''
trip = $('.postertrip', op)?.textContent or ''
a = $.el 'a',
innerHTML: "<span>[ + ]</span> #{name} #{uid} #{trip} (#{text})"
href: 'javascript:;'
$.on a, 'click', ThreadHiding.cb
div = $.el 'div',
className: 'block'
$.add div, a
$.prepend thread, div
$.addClass thread, 'stub'
show: (thread, id) ->
$.rm $ '.block', thread
$.removeClass thread, 'stub' $.removeClass thread, 'stub'
thread.hidden = false thread.hidden = false
thread.nextSibling.hidden = false thread.nextSibling.hidden = false
id = thread.firstChild.id
hiddenThreads = $.get "hiddenThreads/#{g.BOARD}/", {}
delete hiddenThreads[id]
$.set "hiddenThreads/#{g.BOARD}/", hiddenThreads
Updater = Updater =
init: -> init: ->
html = "<div class=move><span id=count></span> <span id=timer>-#{conf['Interval']}</span></div>" html = "<div class=move><span id=count></span> <span id=timer>-#{conf['Interval']}</span></div>"
@ -3376,7 +3364,9 @@ a[href="javascript:;"] {
text-decoration: none; text-decoration: none;
} }
.thread.stub > :not(.block), .block ~ .op,
.block ~ .omittedposts,
.block ~ table,
#content > [name=tab]:not(:checked) + div, #content > [name=tab]:not(:checked) + div,
#updater:not(:hover) > :not(.move), #updater:not(:hover) > :not(.move),
#qp > input, #qp .inline, .forwarded { #qp > input, #qp .inline, .forwarded {