aboutsummaryrefslogtreecommitdiffstats
path: root/uncompressed/hangoutschat/webview.js
diff options
context:
space:
mode:
Diffstat (limited to 'uncompressed/hangoutschat/webview.js')
-rw-r--r--uncompressed/hangoutschat/webview.js38
1 files changed, 23 insertions, 15 deletions
diff --git a/uncompressed/hangoutschat/webview.js b/uncompressed/hangoutschat/webview.js
index 27a2016..ea8a1b2 100644
--- a/uncompressed/hangoutschat/webview.js
+++ b/uncompressed/hangoutschat/webview.js
@@ -1,30 +1,36 @@
1"use strict"; 1module.exports = (Franz) => {
2
3 const muteSelector = '.DQy0Rb';
4 const directMessageSelector = '.eM5l9e.FVKzAb';
5 const indirectMessageSelector = '.PL5Wwe.H7du2 .t5F5nf';
6
7 const isMuted = node => !!node.closest('[role="listitem"]').querySelector(muteSelector);
2 8
3module.exports = Franz => {
4 const getMessages = function getMessages() { 9 const getMessages = function getMessages() {
5 const muteSelector = '.DQy0Rb'; 10
11 // get unread messages
6 let directCount = 0; 12 let directCount = 0;
7 document.querySelectorAll('.eM5l9e.FVKzAb').forEach(node => { 13 document.querySelectorAll(directMessageSelector).forEach((node) => {
8 if (!node.closest('content[role="listitem"]').querySelector(muteSelector)) { 14 // Hangouts Chat overrides the muted indicator when there is a direct mention
15 if (!isMuted(node)) {
9 directCount += 1; 16 directCount += 1;
10 } 17 }
11 }); 18 });
19
12 let indirectCount = 0; 20 let indirectCount = 0;
13 document.querySelectorAll('.PL5Wwe.H7du2 .t5F5nf').forEach(node => { 21 document.querySelectorAll(indirectMessageSelector).forEach((node) => {
14 if (!node.closest('content[role="listitem"]').querySelector(muteSelector)) { 22 if (!isMuted(node)) {
15 indirectCount = +1; 23 indirectCount += 1;
16 } 24 }
17 }); 25 });
18 indirectCount -= directCount; 26 indirectCount -= directCount;
27
28 // set Franz badge
19 Franz.setBadge(directCount, indirectCount); 29 Franz.setBadge(directCount, indirectCount);
20 }; 30 };
21 31
22 document.addEventListener('click', e => { 32 document.addEventListener('click', (e) => {
23 const { 33 const { tagName, target, href } = e.target;
24 tagName,
25 target,
26 href
27 } = e.target;
28 34
29 if (tagName === 'A' && target === '_blank') { 35 if (tagName === 'A' && target === '_blank') {
30 e.preventDefault(); 36 e.preventDefault();
@@ -32,5 +38,7 @@ module.exports = Franz => {
32 window.open(href); 38 window.open(href);
33 } 39 }
34 }); 40 });
41
42 // check for new messages every second and update Franz badge
35 Franz.loop(getMessages); 43 Franz.loop(getMessages);
36}; \ No newline at end of file 44};