kody revised this gist . Go to revision
1 file changed, 2 insertions, 2 deletions
4chan-page-notifier.user.js
@@ -4,7 +4,7 @@ | |||
4 | 4 | // @match https://boards.4chan.org/*/thread/* | |
5 | 5 | // @run-at document-end | |
6 | 6 | // @grant none | |
7 | - | // @version 1.2.1 | |
7 | + | // @version 1.2.2 | |
8 | 8 | // @author Kody | |
9 | 9 | // @description Notify when the thread gets to page 10. | |
10 | 10 | // @icon https://www.google.com/s2/favicons?domain=4chan.org | |
@@ -42,7 +42,7 @@ | |||
42 | 42 | } | |
43 | 43 | ||
44 | 44 | // Send a browser notification | |
45 | - | const subject = document.querySelector('.subject')?.innerHTML || 'Last Page Reached' | |
45 | + | const subject = document.querySelector('.subject')?.innerText || 'Last Page Reached' | |
46 | 46 | if (window.Notification.permission === 'granted') { | |
47 | 47 | const notification = new window.Notification( | |
48 | 48 | subject, |
kody revised this gist . Go to revision
1 file changed, 2 insertions, 2 deletions
4chan-page-notifier.user.js
@@ -4,7 +4,7 @@ | |||
4 | 4 | // @match https://boards.4chan.org/*/thread/* | |
5 | 5 | // @run-at document-end | |
6 | 6 | // @grant none | |
7 | - | // @version 1.2.0 | |
7 | + | // @version 1.2.1 | |
8 | 8 | // @author Kody | |
9 | 9 | // @description Notify when the thread gets to page 10. | |
10 | 10 | // @icon https://www.google.com/s2/favicons?domain=4chan.org | |
@@ -42,7 +42,7 @@ | |||
42 | 42 | } | |
43 | 43 | ||
44 | 44 | // Send a browser notification | |
45 | - | const subject = document.querySelector('.subject').innerHTML || 'Last Page Reached' | |
45 | + | const subject = document.querySelector('.subject')?.innerHTML || 'Last Page Reached' | |
46 | 46 | if (window.Notification.permission === 'granted') { | |
47 | 47 | const notification = new window.Notification( | |
48 | 48 | subject, |
kody revised this gist . Go to revision
1 file changed, 6 insertions, 3 deletions
4chan-page-notifier.user.js
@@ -4,7 +4,7 @@ | |||
4 | 4 | // @match https://boards.4chan.org/*/thread/* | |
5 | 5 | // @run-at document-end | |
6 | 6 | // @grant none | |
7 | - | // @version 1.1.0 | |
7 | + | // @version 1.2.0 | |
8 | 8 | // @author Kody | |
9 | 9 | // @description Notify when the thread gets to page 10. | |
10 | 10 | // @icon https://www.google.com/s2/favicons?domain=4chan.org | |
@@ -14,14 +14,15 @@ | |||
14 | 14 | (function () { | |
15 | 15 | 'use strict' | |
16 | 16 | ||
17 | - | const lastPage = 10 | |
18 | 17 | let pageCountEl | |
18 | + | const lastPage = 10 | |
19 | 19 | let notified = false | |
20 | 20 | ||
21 | 21 | const pageNotify = () => { | |
22 | 22 | // Extract the current page number from the text | |
23 | 23 | // but be careful that it might be 10(x) | |
24 | 24 | const currPage = parseInt(pageCountEl.innerText.split('(')[0]?.trim(), 10) | |
25 | + | console.log('Current page:', currPage) | |
25 | 26 | ||
26 | 27 | // Check if it's a valid number and greater than 0 | |
27 | 28 | if (isNaN(currPage) || currPage < 1) { | |
@@ -41,9 +42,11 @@ | |||
41 | 42 | } | |
42 | 43 | ||
43 | 44 | // Send a browser notification | |
45 | + | const subject = document.querySelector('.subject').innerHTML || 'Last Page Reached' | |
44 | 46 | if (window.Notification.permission === 'granted') { | |
45 | 47 | const notification = new window.Notification( | |
46 | - | 'Last Page Reached', { | |
48 | + | subject, | |
49 | + | { | |
47 | 50 | body: `The thread has reached page ${currPage}.`, | |
48 | 51 | icon: 'https://www.google.com/s2/favicons?domain=4chan.org', | |
49 | 52 | } |
kody revised this gist . Go to revision
1 file changed, 1 insertion, 1 deletion
4chan-page-notifier.user.js
@@ -14,8 +14,8 @@ | |||
14 | 14 | (function () { | |
15 | 15 | 'use strict' | |
16 | 16 | ||
17 | - | let pageCountEl | |
18 | 17 | const lastPage = 10 | |
18 | + | let pageCountEl | |
19 | 19 | let notified = false | |
20 | 20 | ||
21 | 21 | const pageNotify = () => { |
kody revised this gist . Go to revision
1 file changed, 44 insertions, 27 deletions
4chan-page-notifier.user.js
@@ -1,24 +1,42 @@ | |||
1 | 1 | // ==UserScript== | |
2 | 2 | // @name 4chan Page 10 Notifier | |
3 | - | // @namespace Violentmonkey Scripts | |
3 | + | // @namespace moe.rita.4chanPage10Notifier | |
4 | 4 | // @match https://boards.4chan.org/*/thread/* | |
5 | + | // @run-at document-end | |
5 | 6 | // @grant none | |
6 | - | // @version 1.0 | |
7 | + | // @version 1.1.0 | |
7 | 8 | // @author Kody | |
8 | - | // @icon https://www.google.com/s2/favicons?domain=4chan.org | |
9 | 9 | // @description Notify when the thread gets to page 10. | |
10 | + | // @icon https://www.google.com/s2/favicons?domain=4chan.org | |
11 | + | // @downloadURL https://gist.rita.moe/kody/c3cd33a8d923423c9045ad738ec302ba/raw/HEAD/4chan-page-notifier.user.js | |
10 | 12 | // ==/UserScript== | |
11 | 13 | ||
12 | 14 | (function () { | |
13 | 15 | 'use strict' | |
14 | 16 | ||
17 | + | let pageCountEl | |
15 | 18 | const lastPage = 10 | |
16 | - | ||
17 | - | let curPage | |
18 | 19 | let notified = false | |
19 | 20 | ||
20 | - | const pageNotify = (page) => { | |
21 | - | if (curPage < lastPage || notified) { | |
21 | + | const pageNotify = () => { | |
22 | + | // Extract the current page number from the text | |
23 | + | // but be careful that it might be 10(x) | |
24 | + | const currPage = parseInt(pageCountEl.innerText.split('(')[0]?.trim(), 10) | |
25 | + | ||
26 | + | // Check if it's a valid number and greater than 0 | |
27 | + | if (isNaN(currPage) || currPage < 1) { | |
28 | + | console.warn('Invalid page number:', currPage) | |
29 | + | return | |
30 | + | } | |
31 | + | ||
32 | + | // Reset notification state if page is less than 10 | |
33 | + | if (currPage < lastPage && notified) { | |
34 | + | notified = false | |
35 | + | return | |
36 | + | } | |
37 | + | ||
38 | + | // Skip if already notified or current page is less than the last page | |
39 | + | if (currPage < lastPage || notified) { | |
22 | 40 | return | |
23 | 41 | } | |
24 | 42 | ||
@@ -26,7 +44,7 @@ | |||
26 | 44 | if (window.Notification.permission === 'granted') { | |
27 | 45 | const notification = new window.Notification( | |
28 | 46 | 'Last Page Reached', { | |
29 | - | body: `The thread has reached page ${page}.`, | |
47 | + | body: `The thread has reached page ${currPage}.`, | |
30 | 48 | icon: 'https://www.google.com/s2/favicons?domain=4chan.org', | |
31 | 49 | } | |
32 | 50 | ) | |
@@ -37,27 +55,26 @@ | |||
37 | 55 | ||
38 | 56 | notified = true | |
39 | 57 | } | |
40 | - | ||
41 | - | curPage = page | |
42 | 58 | } | |
43 | 59 | ||
44 | - | const pageCountEl = document.getElementById('page-count') | |
45 | - | if (pageCountEl) { | |
46 | - | let pageCount = pageCountEl.innerText | |
47 | - | console.log('Current page:', pageCount) | |
60 | + | const setupObserver = () => { | |
61 | + | pageCountEl = document.getElementById('page-count') | |
48 | 62 | ||
49 | - | const observer = new window.MutationObserver( | |
50 | - | () => { | |
51 | - | pageCount = pageCountEl.innerText | |
52 | - | pageNotify(pageCount) | |
53 | - | } | |
54 | - | ) | |
55 | - | observer.observe( | |
56 | - | pageCountEl, | |
57 | - | { | |
58 | - | childList: true, | |
59 | - | subtree: true, | |
60 | - | } | |
61 | - | ) | |
63 | + | if (pageCountEl) { | |
64 | + | const observer = new window.MutationObserver(pageNotify) | |
65 | + | observer.observe( | |
66 | + | pageCountEl, | |
67 | + | { | |
68 | + | childList: true, | |
69 | + | subtree: true, | |
70 | + | characterData: true, | |
71 | + | } | |
72 | + | ) | |
73 | + | } else { | |
74 | + | console.error('Could not find element with ID "page-count"') | |
75 | + | } | |
62 | 76 | } | |
77 | + | ||
78 | + | // Wait 3 seconds before setting up the observer | |
79 | + | setTimeout(setupObserver, 3000) | |
63 | 80 | })() |
kody revised this gist . Go to revision
1 file changed, 63 insertions
4chan-page-notifier.user.js(file created)
@@ -0,0 +1,63 @@ | |||
1 | + | // ==UserScript== | |
2 | + | // @name 4chan Page 10 Notifier | |
3 | + | // @namespace Violentmonkey Scripts | |
4 | + | // @match https://boards.4chan.org/*/thread/* | |
5 | + | // @grant none | |
6 | + | // @version 1.0 | |
7 | + | // @author Kody | |
8 | + | // @icon https://www.google.com/s2/favicons?domain=4chan.org | |
9 | + | // @description Notify when the thread gets to page 10. | |
10 | + | // ==/UserScript== | |
11 | + | ||
12 | + | (function () { | |
13 | + | 'use strict' | |
14 | + | ||
15 | + | const lastPage = 10 | |
16 | + | ||
17 | + | let curPage | |
18 | + | let notified = false | |
19 | + | ||
20 | + | const pageNotify = (page) => { | |
21 | + | if (curPage < lastPage || notified) { | |
22 | + | return | |
23 | + | } | |
24 | + | ||
25 | + | // Send a browser notification | |
26 | + | if (window.Notification.permission === 'granted') { | |
27 | + | const notification = new window.Notification( | |
28 | + | 'Last Page Reached', { | |
29 | + | body: `The thread has reached page ${page}.`, | |
30 | + | icon: 'https://www.google.com/s2/favicons?domain=4chan.org', | |
31 | + | } | |
32 | + | ) | |
33 | + | notification.onclick = () => { | |
34 | + | window.focus() | |
35 | + | notification.close() | |
36 | + | } | |
37 | + | ||
38 | + | notified = true | |
39 | + | } | |
40 | + | ||
41 | + | curPage = page | |
42 | + | } | |
43 | + | ||
44 | + | const pageCountEl = document.getElementById('page-count') | |
45 | + | if (pageCountEl) { | |
46 | + | let pageCount = pageCountEl.innerText | |
47 | + | console.log('Current page:', pageCount) | |
48 | + | ||
49 | + | const observer = new window.MutationObserver( | |
50 | + | () => { | |
51 | + | pageCount = pageCountEl.innerText | |
52 | + | pageNotify(pageCount) | |
53 | + | } | |
54 | + | ) | |
55 | + | observer.observe( | |
56 | + | pageCountEl, | |
57 | + | { | |
58 | + | childList: true, | |
59 | + | subtree: true, | |
60 | + | } | |
61 | + | ) | |
62 | + | } | |
63 | + | })() |