diff --git a/4chan_x.js b/4chan_x.js index 2f1798b9e..0de870b65 100644 --- a/4chan_x.js +++ b/4chan_x.js @@ -1464,54 +1464,46 @@ }; watcher = { init: function() { - var dialog, favicon, html, id, input, inputs, src, watched, watchedBoard, _i, _len, _results; + var dialog, favicon, html, input, inputs, watched, _i, _len; html = '
Thread Watcher
'; dialog = ui.dialog('watcher', { top: '50px', left: '0px' }, html); $.append(d.body, dialog); - watched = $.getValue('watched', {}); - watcher.refresh(watched); - watchedBoard = watched[g.BOARD] || {}; inputs = $$('form > input[value=delete], div.thread > input[value=delete]'); - _results = []; for (_i = 0, _len = inputs.length; _i < _len; _i++) { input = inputs[_i]; - id = input.name; - if (id in watchedBoard) { - src = Favicon["default"]; - } else { - src = Favicon.empty; - } favicon = $.el('img', { - src: src, className: 'favicon' }); $.bind(favicon, 'click', watcher.cb.toggle); - _results.push($.before(input, favicon)); + $.before(input, favicon); } - return _results; + watched = $.getValue('watched', {}); + return watcher.refresh(watched); }, refresh: function(watched) { - var board, div, id, props, _i, _len, _ref, _results; + var board, div, favicon, id, props, watchedBoard, _i, _j, _len, _len2, _ref, _ref2, _ref3, _results; _ref = $$('#watcher > div:not(.move)'); for (_i = 0, _len = _ref.length; _i < _len; _i++) { div = _ref[_i]; $.remove(div); } - _results = []; for (board in watched) { - _results.push((function() { - var _ref2, _results2; - _ref2 = watched[board]; - _results2 = []; - for (id in _ref2) { - props = _ref2[id]; - _results2.push(watcher.addLink(props, $('#watcher'))); - } - return _results2; - })()); + _ref2 = watched[board]; + for (id in _ref2) { + props = _ref2[id]; + watcher.addLink(props, $('#watcher')); + } + } + watchedBoard = watched[g.BOARD] || {}; + _ref3 = $$('img.favicon'); + _results = []; + for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) { + favicon = _ref3[_j]; + id = favicon.nextSibling.name; + _results.push(id in watchedBoard ? favicon.src = Favicon["default"] : favicon.src = Favicon.empty); } return _results; }, @@ -1541,30 +1533,20 @@ favicon = $('img.favicon', thread); id = favicon.nextSibling.name; if (favicon.src === Favicon.empty) { - return watcher.watch(thread); + return watcher.watch(thread, id); } else { return watcher.unwatch(g.BOARD, id); } }, unwatch: function(board, id) { - var favicon, input, watched; - if (input = $("input[name=\"" + id + "\"]")) { - favicon = input.previousSibling; - favicon.src = Favicon.empty; - } + var watched; watched = $.getValue('watched', {}); delete watched[board][id]; $.setValue('watched', watched); return watcher.refresh(watched); }, - watch: function(thread) { - var favicon, id, props, tc, watched, _name; - favicon = $('img.favicon', thread); - if (favicon.src === Favicon["default"]) { - return; - } - favicon.src = Favicon["default"]; - id = favicon.nextSibling.name; + watch: function(thread, id) { + var props, tc, watched, _name; tc = $('span.filetitle', thread).textContent || $('blockquote', thread).textContent; props = { textContent: "/" + g.BOARD + "/ - " + tc.slice(0, 25), diff --git a/script.coffee b/script.coffee index 0ef275f32..d52872294 100644 --- a/script.coffee +++ b/script.coffee @@ -1167,31 +1167,31 @@ watcher = dialog = ui.dialog 'watcher', top: '50px', left: '0px', html $.append d.body, dialog - #populate watcher - watched = $.getValue 'watched', {} - watcher.refresh watched - #add watch buttons - watchedBoard = watched[g.BOARD] or {} inputs = $$ 'form > input[value=delete], div.thread > input[value=delete]' for input in inputs - id = input.name - if id of watchedBoard - src = Favicon.default - else - src = Favicon.empty favicon = $.el 'img', - src: src className: 'favicon' $.bind favicon, 'click', watcher.cb.toggle $.before input, favicon + #populate watcher, display watch buttons + watched = $.getValue 'watched', {} + watcher.refresh watched + refresh: (watched) -> for div in $$ '#watcher > div:not(.move)' $.remove div for board of watched for id, props of watched[board] watcher.addLink props, $ '#watcher' + watchedBoard = watched[g.BOARD] or {} + for favicon in $$ 'img.favicon' + id = favicon.nextSibling.name + if id of watchedBoard + favicon.src = Favicon.default + else + favicon.src = Favicon.empty addLink: (props, dialog) -> div = $.el 'div' @@ -1215,29 +1215,18 @@ watcher = favicon = $ 'img.favicon', thread id = favicon.nextSibling.name if favicon.src == Favicon.empty - watcher.watch thread + watcher.watch thread, id else # favicon.src == Favicon.default watcher.unwatch g.BOARD, id unwatch: (board, id) -> - if input = $ "input[name=\"#{id}\"]" - favicon = input.previousSibling - favicon.src = Favicon.empty - watched = $.getValue 'watched', {} delete watched[board][id] $.setValue 'watched', watched watcher.refresh watched - watch: (thread) -> - favicon = $ 'img.favicon', thread - - #this happens if we try to auto-watch an already watched thread. - return if favicon.src is Favicon.default - - favicon.src = Favicon.default - id = favicon.nextSibling.name + watch: (thread, id) -> tc = $('span.filetitle', thread).textContent or $('blockquote', thread).textContent props = textContent: "/#{g.BOARD}/ - #{tc[...25]}"