diff options
author | Edgars <eandersons@users.noreply.github.com> | 2023-11-28 17:18:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-28 08:18:13 -0700 |
commit | 79ddd4bee344db29e69420c1b6514dbed2a9fa63 (patch) | |
tree | 3bc531d21161082067baa4576d24063481dcc77a /recipes | |
parent | Change name of Tutanota to Tuta Mail (#463) (diff) | |
download | ferdium-recipes-79ddd4bee344db29e69420c1b6514dbed2a9fa63.tar.gz ferdium-recipes-79ddd4bee344db29e69420c1b6514dbed2a9fa63.tar.zst ferdium-recipes-79ddd4bee344db29e69420c1b6514dbed2a9fa63.zip |
Fix selectors for Nextcloud Talk (#473)
Script and CSS was updated to add selectors for the latest Nextcloud
(27).
Previous selectors were left as is for backwards compatibility.
Additionally direct notifications count now is detected by unread
conversations count in the left sidebar, using Talk specific
notifications as a fallback.
Diffstat (limited to 'recipes')
-rw-r--r-- | recipes/nextcloud-talk/package.json | 2 | ||||
-rw-r--r-- | recipes/nextcloud-talk/service.css | 52 | ||||
-rw-r--r-- | recipes/nextcloud-talk/webview.js | 50 |
3 files changed, 62 insertions, 42 deletions
diff --git a/recipes/nextcloud-talk/package.json b/recipes/nextcloud-talk/package.json index aaf779f..4de0dfb 100644 --- a/recipes/nextcloud-talk/package.json +++ b/recipes/nextcloud-talk/package.json | |||
@@ -1,7 +1,7 @@ | |||
1 | { | 1 | { |
2 | "id": "nextcloud-talk", | 2 | "id": "nextcloud-talk", |
3 | "name": "Nextcloud Talk", | 3 | "name": "Nextcloud Talk", |
4 | "version": "1.4.0", | 4 | "version": "1.4.1", |
5 | "license": "MIT", | 5 | "license": "MIT", |
6 | "repository": "https://github.com/csolisr/ferdium-recipes/tree/master/recipes/nextcloud-tasks/", | 6 | "repository": "https://github.com/csolisr/ferdium-recipes/tree/master/recipes/nextcloud-tasks/", |
7 | "config": { | 7 | "config": { |
diff --git a/recipes/nextcloud-talk/service.css b/recipes/nextcloud-talk/service.css index ccdba58..e616dd6 100644 --- a/recipes/nextcloud-talk/service.css +++ b/recipes/nextcloud-talk/service.css | |||
@@ -1,25 +1,43 @@ | |||
1 | /* Hide all app links in the top menu except for Talk */ | 1 | /* |
2 | #appmenu li:not([data-id="spreed"]) { | 2 | With `/* Legacy [asterisk]/` are marked those selectors that were working for |
3 | some Nextcloud version before 27 (24 or 25). | ||
4 | */ | ||
5 | |||
6 | /*Hide all interactive elements that are not related to the Talk. */ | ||
7 | /* App links and contacts menu link in the top menu except for Talk. */ | ||
8 | #appmenu li:not([data-id="spreed"]), /* Legacy */ | ||
9 | .app-menu .app-menu-main > .app-menu-entry:not([data-app-id="spreed"]), | ||
10 | #unified-search, | ||
11 | #contactsmenu, | ||
12 | /* All settings options, except the option to log out */ | ||
13 | #settings #expanddiv li:not([data-id='logout']), /* Legacy */ | ||
14 | #header-menu-user-menu li:not([id='logout']), /* Nextcloud 27 */ | ||
15 | /* Hide notifications that are not related to Talk */ | ||
16 | .notification-container .notification-wrapper .notification:not([data-app="spreed"]), | ||
17 | /* "Dismiss all notifications" as this action will dismiss also hidden | ||
18 | notifications as this behaviour might not be desirable. */ | ||
19 | .notification-wrapper .dismiss-all, /* Legacy */ | ||
20 | #header-menu-notifications .notification-container .dismiss-all /* Nextcloud 27 */ { | ||
3 | display: none; | 21 | display: none; |
4 | } | 22 | } |
5 | 23 | ||
6 | /* Change cursor to the default pointer for top menu Nextcloud home and Talk | 24 | /* Change cursor to the default pointer for top menu Nextcloud home and Talk |
7 | links and disable them */ | 25 | links and disable them */ |
8 | #nextcloud, | 26 | #nextcloud, |
9 | #appmenu li[data-id="spreed"] a { | 27 | #appmenu li[data-id="spreed"] a, /* Legacy */ |
28 | .app-menu-main li[data-app-id="spreed"] a /* Nextcloud 27 */ { | ||
10 | cursor: default; | 29 | cursor: default; |
11 | pointer-events: none; | 30 | pointer-events: none; |
12 | } | 31 | } |
13 | 32 | ||
14 | /* Hide all settings options, except the option to log out */ | ||
15 | #settings #expanddiv li:not([data-id='logout']) { | ||
16 | display: none; | ||
17 | } | ||
18 | |||
19 | /* Fix the margin of the dropdown */ | 33 | /* Fix the margin of the dropdown */ |
20 | #settings #expanddiv, | 34 | #settings #expanddiv, /* Legacy */ |
21 | #settings #expanddiv > ul { | 35 | #settings #expanddiv > ul, /* Legacy */ |
22 | min-height: 0; | 36 | #header-menu-user-menu, /* Nextcloud 27 */ |
37 | #header-menu-user-menu > .header-menu__content, /* Nextcloud 27 */ | ||
38 | #header-menu-notifications, /* Nextcloud 27 */ | ||
39 | #header-menu-notifications > .header-menu__content /* Nextcloud 27 */ { | ||
40 | min-height: auto; | ||
23 | } | 41 | } |
24 | 42 | ||
25 | /* Hide "More" link in the top menu */ | 43 | /* Hide "More" link in the top menu */ |
@@ -28,16 +46,10 @@ links and disable them */ | |||
28 | } | 46 | } |
29 | 47 | ||
30 | /* Hide notifications that are not related to Talk */ | 48 | /* Hide notifications that are not related to Talk */ |
31 | .notifications .notification-wrapper .notification { | 49 | .notifications .notification-wrapper .notification /* Legacy */ { |
32 | display: none; | 50 | display: none; |
33 | } | 51 | } |
34 | .notifications .notification-wrapper .notification[object_type="chat"], | 52 | .notifications .notification-wrapper .notification[object_type="chat"], /* Legacy */ |
35 | .notifications .notification-wrapper .notification[object_type="room"] { | 53 | .notifications .notification-wrapper .notification[object_type="room"] /* Legacy */ { |
36 | display: initial; | 54 | display: initial; |
37 | } | 55 | } |
38 | |||
39 | /* Hide "Dismiss all notifications" as this action will dismiss also hidden | ||
40 | notifications */ | ||
41 | .notification-wrapper .dismiss-all { | ||
42 | display: none; | ||
43 | } | ||
diff --git a/recipes/nextcloud-talk/webview.js b/recipes/nextcloud-talk/webview.js index 0c7f5c2..15f4dfb 100644 --- a/recipes/nextcloud-talk/webview.js +++ b/recipes/nextcloud-talk/webview.js | |||
@@ -6,38 +6,46 @@ const _path = _interopRequireDefault(require('path')); | |||
6 | 6 | ||
7 | module.exports = Ferdium => { | 7 | module.exports = Ferdium => { |
8 | const getMessages = () => { | 8 | const getMessages = () => { |
9 | let direct = 0; | 9 | // With `// Legacy ` are marked those selectors that were working for some |
10 | 10 | // Nextcloud version before 27 (24 or 25). | |
11 | const notificationWrapper = document.querySelector( | 11 | const counterBubble = '.counter-bubble__counter'; |
12 | '.notifications .notification-wrapper', | 12 | const directFromLeftSideBar = document.querySelectorAll( |
13 | ); | 13 | `${counterBubble}--highlighted`, // Nextcloud 27 |
14 | 14 | ).length; | |
15 | if (notificationWrapper) { | ||
16 | const directSelector = notificationWrapper.querySelectorAll( | ||
17 | '.notification[object_type="chat"], .notification[object_type="room"]', | ||
18 | ); | ||
19 | direct = directSelector ? Ferdium.safeParseInt(directSelector.length) : 0; | ||
20 | } | ||
21 | |||
22 | let indirect = 0; | 15 | let indirect = 0; |
23 | |||
24 | for (const counter of document.querySelectorAll( | 16 | for (const counter of document.querySelectorAll( |
25 | '.app-navigation-entry__counter', | 17 | '.app-navigation-entry__counter, ' + // Legacy |
18 | `${counterBubble}:not(${counterBubble}--highlighted)`, // Nextcloud 27 | ||
26 | )) { | 19 | )) { |
27 | const entryCounter = counter | 20 | indirect += Ferdium.safeParseInt(counter?.textContent.trim()); |
28 | ? Ferdium.safeParseInt(counter.textContent) | ||
29 | : 0; | ||
30 | indirect += entryCounter; | ||
31 | } | 21 | } |
32 | 22 | ||
33 | if (document.title.startsWith('*')) { | 23 | if (document.title.startsWith('*')) { |
34 | indirect += 1; | 24 | indirect += 1; |
35 | } | 25 | } |
36 | 26 | ||
37 | Ferdium.setBadge(direct, indirect); | 27 | Ferdium.setBadge( |
28 | // Try to use the unread conversations count retrieved from the left | ||
29 | // sidebar, otherwise check Talk specific notifications | ||
30 | directFromLeftSideBar > 0 | ||
31 | ? directFromLeftSideBar | ||
32 | : Ferdium.safeParseInt( | ||
33 | document | ||
34 | .querySelector( | ||
35 | '.notifications .notification-wrapper, ' + // Legacy | ||
36 | '.notification-container .notification-wrapper', // Nextcloud 27 | ||
37 | ) | ||
38 | ?.querySelectorAll( | ||
39 | '.notification[object_type="chat"], ' + // Legacy | ||
40 | '.notification[object_type="room"], ' + // Legacy | ||
41 | '.notification[data-object-type="chat"], ' + // Nextcloud 27 | ||
42 | '.notification[data-object-type="room"]', // Nextcloud 27 | ||
43 | ).length, | ||
44 | ), | ||
45 | indirect, | ||
46 | ); | ||
38 | }; | 47 | }; |
39 | 48 | ||
40 | Ferdium.loop(getMessages); | 49 | Ferdium.loop(getMessages); |
41 | |||
42 | Ferdium.injectCSS(_path.default.join(__dirname, 'service.css')); | 50 | Ferdium.injectCSS(_path.default.join(__dirname, 'service.css')); |
43 | }; | 51 | }; |