SHOW:
|
|
- or go back to the newest paste.
1 | // ==UserScript== | |
2 | // @name Detect new comments on Hashtable's blog | |
3 | // @namespace http://h16free.pltplp.net/ | |
4 | // @version 0.2 | |
5 | // @description Detect new comments since last visit on h16free.com blog. This version supports comments on multiple pages | |
6 | // @match http://h16free.com/* | |
7 | // @copyright 2013, Etienne Bernard | |
8 | // ==/UserScript== | |
9 | ||
10 | // a function that loads jQuery and calls a callback function when jQuery has finished loading | |
11 | function addJQuery(callback) { | |
12 | var script = document.createElement("script"); | |
13 | script.setAttribute("src", "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"); | |
14 | script.addEventListener('load', function() { | |
15 | var script = document.createElement("script"); | |
16 | script.textContent = "window.jQ=jQuery.noConflict(true);(" + callback.toString() + ")();"; | |
17 | document.body.appendChild(script); | |
18 | }, false); | |
19 | document.body.appendChild(script); | |
20 | } | |
21 | ||
22 | // the guts of this userscript | |
23 | function main() { | |
24 | ||
25 | var cookies; | |
26 | var readCookie = function(name,c,C,i){ | |
27 | if(cookies){ return cookies[name]; } | |
28 | c = document.cookie.split('; '); | |
29 | cookies = {}; | |
30 | for(i=c.length-1; i>=0; i--){ | |
31 | C = c[i].split('='); | |
32 | cookies[C[0]] = C[1]; | |
33 | } | |
34 | return cookies[name]; | |
35 | }; | |
36 | ||
37 | var articleId = jQ('article.entry-plain').attr('id'); | |
38 | if (articleId) { | |
39 | articleId = articleId.substr(5); | |
40 | // Get comments' page | |
41 | var hr = jQ('article.comment-block:first header a').attr('href'); | |
42 | var commentPage = parseInt(hr.replace(/#.*/, '').replace(/^.*comment-page-/, ''), 10); | |
43 | var cookieName = 'lastVisits'; | |
44 | // Check if we have a cookie for this article | |
45 | var cookie = readCookie('lastVisits'); | |
46 | var lastVisits = {}; | |
47 | if (cookie !== undefined) { | |
48 | lastVisits = JSON.parse(cookie); | |
49 | } | |
50 | // Get last visit time | |
51 | var key = 'p' + articleId + '-' + commentPage; | |
52 | var lastViewed = lastVisits[key]; | |
53 | if (lastViewed !== undefined) { | |
54 | // Mark as new | |
55 | jQ('article.comment-block > header > a > time').each(function() { | |
56 | var t = new Date(jQ(this).attr('datetime')); | |
57 | - | t = t.getTime() - 7200000; // Fix timezone |
57 | + | t = t.getTime() - 3600000; // Fix timezone |
58 | if (t > lastViewed) { | |
59 | jQ(this).parents('article').parent('li').css('outline', '2px dotted red'); | |
60 | } | |
61 | }); | |
62 | } | |
63 | lastVisits[key] = new Date().getTime(); | |
64 | // Set cookie for next time | |
65 | document.cookie = cookieName + '=' + JSON.stringify(lastVisits) + ';path=/;expires=Tue, 31 Dec 2019 23:00:00 GMT'; | |
66 | } | |
67 | } | |
68 | ||
69 | // load jQuery and execute the main function | |
70 | addJQuery(main); |