From 7d9a5160b6c003c8074b5160d4526a1d281ea48f Mon Sep 17 00:00:00 2001 From: James Campos Date: Wed, 20 Apr 2011 17:57:11 -0700 Subject: [PATCH] favicon --- 4chan_x.js | 48 ++++++++++++++++++++++++------------------------ script.coffee | 48 ++++++++++++++++++++++++++---------------------- 2 files changed, 50 insertions(+), 46 deletions(-) diff --git a/4chan_x.js b/4chan_x.js index 9db9e30ad..e391aa5e9 100644 --- a/4chan_x.js +++ b/4chan_x.js @@ -59,7 +59,7 @@ */ (function() { - var $, $$, NAMESPACE, Recaptcha, anonymize, config, d, expandComment, expandThread, fav, g, imageHover, imgExpand, imgGif, imgPreloading, keybinds, localize, log, main, nav, nodeInserted, options, qr, quickReport, redirect, replyHiding, sauce, threadHiding, titlePost, ui, unread, updater, watcher, _config, _ref; + var $, $$, Favicon, NAMESPACE, Recaptcha, anonymize, config, d, expandComment, expandThread, g, imageHover, imgExpand, imgGif, imgPreloading, keybinds, localize, log, main, nav, nodeInserted, options, qr, quickReport, redirect, replyHiding, sauce, threadHiding, titlePost, ui, unread, updater, watcher, _config, _ref; var __slice = Array.prototype.slice; if (typeof console != "undefined" && console !== null) { log = function(arg) { @@ -1389,9 +1389,9 @@ input = inputs[_i]; id = input.name; if (id in watchedBoard) { - src = fav["default"]; + src = Favicon["default"]; } else { - src = fav.empty; + src = Favicon.empty; } favicon = $.el('img', { src: src, @@ -1428,7 +1428,7 @@ var favicon, id; favicon = $('img.favicon', thread); id = favicon.nextSibling.name; - if (favicon.src === fav.empty) { + if (favicon.src === Favicon.empty) { return watcher.watch(thread); } else { return watcher.unwatch(g.BOARD, id); @@ -1441,7 +1441,7 @@ $.remove(div); if (input = $("input[name=\"" + id + "\"]")) { favicon = input.previousSibling; - favicon.src = fav.empty; + favicon.src = Favicon.empty; } watched = $.getValue('watched', {}); delete watched[board][id]; @@ -1450,10 +1450,10 @@ watch: function(thread) { var favicon, id, props, tc, watched, _name; favicon = $('img.favicon', thread); - if (favicon.src === fav["default"]) { + if (favicon.src === Favicon["default"]) { return; } - favicon.src = fav["default"]; + favicon.src = Favicon["default"]; id = favicon.nextSibling.name; tc = $('span.filetitle', thread).textContent || $('blockquote', thread).textContent; props = { @@ -1606,7 +1606,7 @@ node: function(root) { unread.replies = unread.replies.concat($$('td[id]', root)); unread.updateTitle(); - return unread.updateFavicon(); + return Favicon.update(); }, scroll: function(e) { var bottom, height, i, reply, _len, _ref; @@ -1625,27 +1625,35 @@ unread.replies = unread.replies.slice(i); unread.updateTitle(); if (unread.replies.length === 0) { - return unread.updateFavicon(); + return Favicon.update(); } } }, updateTitle: function() { return d.title = d.title.replace(/\d+/, unread.replies.length); - }, - updateFavicon: function() { + } + }; + Favicon = { + dead: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD/AAA9+90tAAAAAXRSTlMAQObYZgAAADtJREFUCB0FwUERxEAIALDszMG730PNSkBEBSECoU0AEPe0mly5NWprRUcDQAdn68qtkVsj3/84z++CD5u7CsnoBJoaAAAAAElFTkSuQmCC', + deadHalo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XrWSAQoAIAgD/f+njSApsTqjGoTQ5oGWPJMOOs60CzsWwIwz1I4PUIYh+WYEMGQ6I/txw91kP4oA9BdwhKp1My4xQq6e8Q9ANgDJjOErewFiNesV2uGSfGv1/HYAAAAASUVORK5CYII=', + "default": ((_ref = $('link[rel="shortcut icon"]', d.head)) != null ? _ref.href : void 0) || '', + empty: 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', + haloSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAZklEQVR4XrWRQQoAIQwD+6L97j7Ih9WTQQxhDqJQCk4Mranuvqod6LgwawSqSuUmWSPw/UNlJlnDAmA2ARjABLYj8ZyCzJHHqOg+GdAKZmKPIQUzuYrxicHqEgHzP9g7M0+hj45sAnRWxtPj3zSPAAAAAElFTkSuQmCC', + haloNSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAABmzDP///8AAABet0i+AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', + update: function() { var clone, favicon, href, l; l = unread.replies.length; if (g.dead) { if (l > 0) { - href = fav.deadHalo; + href = Favicon.headHalo; } else { - href = fav.dead; + href = Favicon.dead; } } else { if (l > 0) { - href = fav.halo; + href = Favicon.halo; } else { - href = fav["default"]; + href = Favicon["default"]; } } favicon = $('link[rel="shortcut icon"]', d.head); @@ -1961,18 +1969,10 @@ callbacks: [], flavors: ['http://regex.info/exif.cgi?url=', 'http://iqdb.org/?url=', 'http://tineye.com/search?url='].join('\n') }; - fav = { - dead: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD/AAA9+90tAAAAAXRSTlMAQObYZgAAADtJREFUCB0FwUERxEAIALDszMG730PNSkBEBSECoU0AEPe0mly5NWprRUcDQAdn68qtkVsj3/84z++CD5u7CsnoBJoaAAAAAElFTkSuQmCC', - deadHalo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XrWSAQoAIAgD/f+njSApsTqjGoTQ5oGWPJMOOs60CzsWwIwz1I4PUIYh+WYEMGQ6I/txw91kP4oA9BdwhKp1My4xQq6e8Q9ANgDJjOErewFiNesV2uGSfGv1/HYAAAAASUVORK5CYII=', - "default": ((_ref = $('link[rel="shortcut icon"]', d.head)) != null ? _ref.href : void 0) || '', - empty: 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', - haloSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAZklEQVR4XrWRQQoAIQwD+6L97j7Ih9WTQQxhDqJQCk4Mranuvqod6LgwawSqSuUmWSPw/UNlJlnDAmA2ARjABLYj8ZyCzJHHqOg+GdAKZmKPIQUzuYrxicHqEgHzP9g7M0+hj45sAnRWxtPj3zSPAAAAAElFTkSuQmCC', - haloNSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAABmzDP///8AAABet0i+AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=' - }; main = { init: function() { var callback, navtopr, pathname, temp, tzOffset, _i, _len, _ref; - fav.halo = /ws/.test(fav["default"]) ? fav.haloSFW : fav.haloNSFW; + Favicon.halo = /ws/.test(Favicon["default"]) ? Favicon.haloSFW : Favicon.haloNSFW; pathname = location.pathname.substring(1).split('/'); g.BOARD = pathname[0], temp = pathname[1]; if (temp === 'res') { diff --git a/script.coffee b/script.coffee index ecee51d14..d6300d348 100644 --- a/script.coffee +++ b/script.coffee @@ -1096,9 +1096,9 @@ watcher = for input in inputs id = input.name if id of watchedBoard - src = fav.default + src = Favicon.default else - src = fav.empty + src = Favicon.empty favicon = $.el 'img', src: src className: 'favicon' @@ -1127,9 +1127,9 @@ watcher = toggle: (thread) -> favicon = $ 'img.favicon', thread id = favicon.nextSibling.name - if favicon.src == fav.empty + if favicon.src == Favicon.empty watcher.watch thread - else # favicon.src == fav.default + else # favicon.src == Favicon.default watcher.unwatch g.BOARD, id unwatch: (board, id) -> @@ -1139,7 +1139,7 @@ watcher = if input = $ "input[name=\"#{id}\"]" favicon = input.previousSibling - favicon.src = fav.empty + favicon.src = Favicon.empty watched = $.getValue 'watched', {} delete watched[board][id] @@ -1147,9 +1147,9 @@ watcher = watch: (thread) -> favicon = $ 'img.favicon', thread - return if favicon.src is fav.default + return if favicon.src is Favicon.default - favicon.src = fav.default + favicon.src = Favicon.default id = favicon.nextSibling.name tc = $('span.filetitle', thread).textContent or $('blockquote', thread).textContent props = @@ -1255,7 +1255,7 @@ unread = node: (root) -> unread.replies = unread.replies.concat $$ 'td[id]', root unread.updateTitle() - unread.updateFavicon() + Favicon.update() scroll: (e) -> height = d.body.clientHeight @@ -1268,28 +1268,39 @@ unread = unread.replies = unread.replies[i..] unread.updateTitle() if unread.replies.length is 0 - unread.updateFavicon() + Favicon.update() updateTitle: -> d.title = d.title.replace /\d+/, unread.replies.length - updateFavicon: -> +Favicon = + dead: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD/AAA9+90tAAAAAXRSTlMAQObYZgAAADtJREFUCB0FwUERxEAIALDszMG730PNSkBEBSECoU0AEPe0mly5NWprRUcDQAdn68qtkVsj3/84z++CD5u7CsnoBJoaAAAAAElFTkSuQmCC' + deadHalo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XrWSAQoAIAgD/f+njSApsTqjGoTQ5oGWPJMOOs60CzsWwIwz1I4PUIYh+WYEMGQ6I/txw91kP4oA9BdwhKp1My4xQq6e8Q9ANgDJjOErewFiNesV2uGSfGv1/HYAAAAASUVORK5CYII=' + default: $('link[rel="shortcut icon"]', d.head)?.href or '' #no favicon in `post successful` page + empty: 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==' + haloSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAZklEQVR4XrWRQQoAIQwD+6L97j7Ih9WTQQxhDqJQCk4Mranuvqod6LgwawSqSuUmWSPw/UNlJlnDAmA2ARjABLYj8ZyCzJHHqOg+GdAKZmKPIQUzuYrxicHqEgHzP9g7M0+hj45sAnRWxtPj3zSPAAAAAElFTkSuQmCC' + haloNSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAABmzDP///8AAABet0i+AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=' + + update: -> l = unread.replies.length if g.dead if l > 0 - href = fav.deadHalo + href = Favicon.headHalo else - href = fav.dead + href = Favicon.dead else if l > 0 - href = fav.halo + href = Favicon.halo else - href = fav.default + href = Favicon.default + + #XXX `favicon.href = href` doesn't work favicon = $ 'link[rel="shortcut icon"]', d.head clone = favicon.cloneNode true clone.href = href $.replace favicon, clone + redirect = -> switch g.BOARD when 'a', 'g', 'lit', 'sci', 'tv' @@ -1496,17 +1507,10 @@ g = 'http://iqdb.org/?url=' 'http://tineye.com/search?url=' ].join '\n' -fav = - dead: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD/AAA9+90tAAAAAXRSTlMAQObYZgAAADtJREFUCB0FwUERxEAIALDszMG730PNSkBEBSECoU0AEPe0mly5NWprRUcDQAdn68qtkVsj3/84z++CD5u7CsnoBJoaAAAAAElFTkSuQmCC' - deadHalo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAWUlEQVR4XrWSAQoAIAgD/f+njSApsTqjGoTQ5oGWPJMOOs60CzsWwIwz1I4PUIYh+WYEMGQ6I/txw91kP4oA9BdwhKp1My4xQq6e8Q9ANgDJjOErewFiNesV2uGSfGv1/HYAAAAASUVORK5CYII=' - default: $('link[rel="shortcut icon"]', d.head)?.href or '' #no favicon in `post successful` page - empty: 'data:image/gif;base64,R0lGODlhEAAQAJEAAAAAAP///9vb2////yH5BAEAAAMALAAAAAAQABAAAAIvnI+pq+D9DBAUoFkPFnbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==' - haloSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAZklEQVR4XrWRQQoAIQwD+6L97j7Ih9WTQQxhDqJQCk4Mranuvqod6LgwawSqSuUmWSPw/UNlJlnDAmA2ARjABLYj8ZyCzJHHqOg+GdAKZmKPIQUzuYrxicHqEgHzP9g7M0+hj45sAnRWxtPj3zSPAAAAAElFTkSuQmCC' - haloNSFW: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUAAABmzDP///8AAABet0i+AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=' main = init: -> - fav.halo = if /ws/.test fav.default then fav.haloSFW else fav.haloNSFW + Favicon.halo = if /ws/.test Favicon.default then Favicon.haloSFW else Favicon.haloNSFW pathname = location.pathname.substring(1).split('/') [g.BOARD, temp] = pathname if temp is 'res'