aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/xmpp
diff options
context:
space:
mode:
authorLibravatar Aman9das <Aman9das@users.noreply.github.com>2021-11-23 21:18:42 +0530
committerLibravatar Vijay A <vraravam@users.noreply.github.com>2021-11-23 21:26:03 +0530
commitb5266ada66a1c8a2409f5ca6c7de2fda968420fa (patch)
treed9503d529caef339c9ed787dabe83070871b7e2a /recipes/xmpp
parentFixing issue with 'toggl' recipe exposed by the pre-commit hook (diff)
downloadferdium-recipes-b5266ada66a1c8a2409f5ca6c7de2fda968420fa.tar.gz
ferdium-recipes-b5266ada66a1c8a2409f5ca6c7de2fda968420fa.tar.zst
ferdium-recipes-b5266ada66a1c8a2409f5ca6c7de2fda968420fa.zip
add new 'xmpp' service recipe
Diffstat (limited to 'recipes/xmpp')
-rw-r--r--recipes/xmpp/LICENSE21
-rw-r--r--recipes/xmpp/darkmode.css365
-rw-r--r--recipes/xmpp/icon.svg25
-rw-r--r--recipes/xmpp/index.js1
-rw-r--r--recipes/xmpp/package.json11
-rw-r--r--recipes/xmpp/webview.js13
6 files changed, 436 insertions, 0 deletions
diff --git a/recipes/xmpp/LICENSE b/recipes/xmpp/LICENSE
new file mode 100644
index 0000000..3e7d006
--- /dev/null
+++ b/recipes/xmpp/LICENSE
@@ -0,0 +1,21 @@
1MIT License
2
3Copyright (c) 2017 L91
4
5Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
7in the Software without restriction, including without limitation the rights
8to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9copies of the Software, and to permit persons to whom the Software is
10furnished to do so, subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in all
13copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21SOFTWARE.
diff --git a/recipes/xmpp/darkmode.css b/recipes/xmpp/darkmode.css
new file mode 100644
index 0000000..24413dc
--- /dev/null
+++ b/recipes/xmpp/darkmode.css
@@ -0,0 +1,365 @@
1/* ==UserStyle==
2@name Converse Dark
3@description A dark theme for the full screen version of Converse, a web-based XMPP client.
4@namespace gitlab.com/maxigaz/converse-dark
5@author maxigaz
6@homepageURL https://gitlab.com/maxigaz/converse-dark
7@version 1.0.2
8==/UserStyle== */
9
10@-moz-document domain("inverse.chat"), url-prefix("https://conversejs.org/fullscreen")
11{
12 :root {
13 --main-background: #383c4a;
14 --lighter-background-1: #3f4353;
15 --darker-background-1: #323542;
16
17 --main-text-color: #e4e4e4;
18 --lighter-text-color-1: #e7e7e7;
19 --lighter-text-color-2: #eee;
20 --lighter-text-color-3: #f4f4f4;
21 --lighter-text-color-4: #f7f7f7;
22 --lighter-text-color-5: #fff;
23 --darker-text-color-1: #eee;
24 --darker-text-color-3: #ddd;
25 --darker-text-color-2: #d4d4d4;
26 --darker-text-color-4: #c7c7c7;
27 --darker-text-color-5: #bababa;
28
29 --selected-text-background: #595e70;
30
31 --light-divider: #404555;
32 --main-border: #292c36;
33 --btn-border: #1b1b1b;
34
35 --border-green: #1d5534;
36 --border-orange: #924633;
37
38 --btn-background: #474b5d;
39 --btn-disabled-background: #464a5c;
40 --btn-disabled-color: #878787;
41
42 --a-text-color: #2596ff;
43 --a-text-color-hover: #23baff;
44 }
45
46 #conversejs ::selection {
47 background-color: var(--selected-text-background);
48 }
49
50 /* ===== Sidebar ===== */
51
52 #conversejs #controlbox .controlbox-pane {
53 background-color: var(--main-background);
54 }
55
56 #conversejs #controlbox .controlbox-panes {
57 background-color: var(--main-background);
58 }
59
60 #converse-embedded-chat, #conversejs {
61 color: var(--main-text-color);
62 }
63
64 /* Conferences */
65
66 #conversejs .list-container .list-toggle {
67 color: var(--main-text-color);
68 }
69
70 #conversejs .list-container .list-toggle:hover {
71 color: var(--lighter-text-color-5);
72 }
73
74 #conversejs .items-list .list-item:hover {
75 background-color: var(--lighter-background-1);
76 }
77
78 #conversejs .items-list .list-item .list-item-link {
79 color: var(--a-text-color);
80 }
81
82 #conversejs .items-list .list-item .list-item-link:hover {
83 color: var(--a-text-color-hover);
84 }
85
86 #conversejs .items-list .list-item .list-item-action.button-on {
87 color: var(--a-text-color);
88 }
89
90 #conversejs .items-list .list-item .list-item-action.button-on:hover {
91 color: var(--a-text-color-hover);
92 }
93
94 #conversejs .items-list .list-item.open {
95 background-color: #0f4071 !important;
96 }
97
98 #conversejs .items-list .list-item.open:hover {
99 background-color: #0f4071 !important;
100 }
101
102 #conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--delayed .chat-msg__text, #conversejs .message.chat-msg .chat-msg__content--me .chat-msg__body--groupchat.chat-msg__body--received .chat-msg__text {
103 color: var(--main-text-color);
104 }
105
106 /* Contacts */
107
108 #conversejs #converse-roster .roster-contacts .roster-group .group-toggle {
109 color: var(--main-text-color);
110 }
111
112 #conversejs #converse-roster .roster-contacts .roster-group .group-toggle:hover {
113 color: var(--lighter-text-color-5);
114 }
115
116 #conversejs #converse-roster .roster-contacts .roster-group li:hover {
117 background-color: var(--lighter-background-1) !important;
118 }
119
120 /* ===== Chat window ===== */
121
122 #converse-embedded-chat .chatbox .chat-content, #conversejs .chatbox .chat-content {
123 background-color: var(--main-background);
124 color: var(--lighter-text-color-2);
125 }
126
127 #conversejs .message.chat-msg .chat-msg__text {
128 color: var(--darker-text-color-2);
129 }
130
131 #conversejs .message.chat-msg .chat-msg__heading .chat-msg__time {
132 color: var(--darker-text-color-5);
133 }
134
135 #conversejs .message.chat-msg.correcting:not(.groupchat) {
136 background-color: #464b5d;
137 }
138
139 #conversejs .message.chat-msg.correcting.groupchat {
140 background-color: #464b5d;
141 }
142
143 #conversejs.converse-fullscreen .flyout {
144 border-color: var(--border-green);
145 }
146
147 #conversejs.converse-fullscreen .chatbox .box-flyout {
148 background-color: var(--border-green);
149 }
150
151 #conversejs .chat-head.chat-head-chatbox {
152 background-color: var(--border-green);
153 }
154
155 #conversejs.converse-fullscreen .chatroom .box-flyout, #conversejs.converse-mobile .chatroom .box-flyout {
156 background-color: var(--border-orange);
157 border-color: var(--border-orange);
158 }
159
160 #conversejs .chat-head-chatroom, #conversejs.converse-embedded .chat-head-chatroom {
161 background-color: var(--border-orange);
162 }
163
164 #conversejs .chat-head a.chatbox-btn.fa.button-on::before, #conversejs .chat-head a.chatbox-btn.far.button-on::before, #conversejs .chat-head a.chatbox-btn.fas.button-on::before, #conversejs .chat-head a:hover.chatbox-btn.fa.button-on::before, #conversejs .chat-head a:hover.chatbox-btn.far.button-on::before, #conversejs .chat-head a:hover.chatbox-btn.fas.button-on::before, #conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fa.button-on::before, #conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.far.button-on::before, #conversejs .chat-head a:not([href]):not([tabindex]).chatbox-btn.fas.button-on::before, #conversejs .chat-head a:visited.chatbox-btn.fa.button-on::before, #conversejs .chat-head a:visited.chatbox-btn.far.button-on::before, #conversejs .chat-head a:visited.chatbox-btn.fas.button-on::before {
165 background-color: var(--border-orange);
166 }
167
168 #conversejs .message.date-separator .separator-text {
169 background-color: var(--main-background);
170 color: var(--darker-text-color-3);
171 }
172
173 #conversejs .avatar {
174 background-color: var(--main-background);
175 border-color: var(--main-border);
176 }
177
178 /* Occupants */
179
180 #conversejs .chatbox .chat-body p {
181 color: var(--lighter-text-color-2);
182 }
183
184 #converse-embedded-chat .chatroom .box-flyout .chatroom-body .occupants, #conversejs .chatroom .box-flyout .chatroom-body .occupants {
185 background-color: var(--main-background);
186 color: var(--main-text-color);
187 }
188
189 #conversejs .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list, #conversejs.converse-embedded .chatroom .box-flyout .chatroom-body .occupants ul.occupant-list {
190 border-color: var(--light-divider);
191 }
192
193 #conversejs .chatroom .room-invite .invited-contact, #conversejs.converse-embedded .chatroom .room-invite .invited-contact {
194 border-color: var(--btn-border);
195 }
196
197 #conversejs .form-control:focus {
198 box-shadow: 0 0 0 .2rem rgba(37, 150, 255,.3);
199 }
200
201 /* Occupant invitation autocomplete */
202
203 #conversejs .awesomplete .suggestion-box__results::before, #conversejs .awesomplete > ul::before, #conversejs .suggestion-box .suggestion-box__results::before, #conversejs .suggestion-box > ul::before {
204 background-color: var(--lighter-background-1);
205 }
206
207 #conversejs .awesomplete .suggestion-box__results, #conversejs .awesomplete > ul, #conversejs .suggestion-box .suggestion-box__results, #conversejs .suggestion-box > ul {
208 background: var(--lighter-background-1);
209 border-color: var(--main-border);
210 }
211
212 /* Chatroom features */
213
214 #conversejs .chatroom-features .features-list .feature .fa, #conversejs.converse-embedded .chatroom-features .features-list .feature .fa {
215 color: var(--main-text-color);
216 }
217
218 /* Input field */
219
220 #conversejs .chatbox .sendXMPPMessage .chat-textarea {
221 background-color: var(--main-background);
222 color: var(--lighter-text-color-2);
223 }
224
225 #conversejs .chatbox .sendXMPPMessage .chat-textarea.correcting {
226 background-color: #464b5d;
227 }
228
229 #conversejs .chatbox .sendXMPPMessage .chat-toolbar {
230 background-color: var(--main-background);
231 border-color: var(--border-green);
232 }
233
234 #conversejs .chatroom .sendXMPPMessage .chat-toolbar, #conversejs.converse-embedded .chatroom .sendXMPPMessage .chat-toolbar {
235 border-color: var(--border-orange);
236 }
237
238 /* Emoji picker */
239
240 #conversejs .chatbox .sendXMPPMessage .chat-toolbar li .toolbar-menu {
241 background-color: var(--main-background);
242 }
243
244 #conversejs .chatbox .sendXMPPMessage .chat-toolbar li .toolbar-menu .emoji-picker-container {
245 background-color: var(--main-background);
246 }
247
248 #conversejs .chatbox .sendXMPPMessage .chat-toolbar li .toolbar-menu a {
249 color: var(--darker-text-color-2);
250 }
251
252 #conversejs .chatbox .sendXMPPMessage .chat-toolbar li .toolbar-menu ul li.insert-emoji a:hover {
253 color: var(--lighter-text-color-5);
254 }
255
256 #conversejs .chatbox .sendXMPPMessage .chat-toolbar li .toolbar-menu ul li.insert-emoji:hover {
257 background-color: var(--selected-text-background);
258 }
259
260 /* ===== Modal ===== */
261
262 /* Conference room info */
263
264 #conversejs .modal-content {
265 background-color: var(--main-background);
266 }
267
268 #conversejs .modal-header {
269 border-color: var(--light-divider);
270 }
271
272 #conversejs .modal-footer {
273 border-color: var(--light-divider);
274 }
275
276 #conversejs a, #conversejs a:not([href]):not([tabindex]), #conversejs a:visited {
277 color: var(--a-text-color);
278 }
279
280 #conversejs a:hover, #conversejs a:not([href]):not([tabindex]):hover, #conversejs a:visited:hover {
281 color: var(--a-text-color-hover);
282 }
283
284 #conversejs .close {
285 color: var(--darker-text-color-1);
286 }
287
288 #conversejs .close:hover {
289 color: var(--lighter-text-color-2);
290 }
291
292 #conversejs .nav-pills .nav-link.active, #conversejs .nav-pills .show > .nav-link {
293 background-color: #1f78d1;
294 }
295
296 /* Profile */
297
298 #conversejs form.converse-form {
299 background-color: var(--main-background);
300 }
301
302 #conversejs .form-control {
303 background-color: var(--darker-background-1);
304 border-color: var(--btn-border);
305 color: var(--main-text-color);
306 }
307
308 #conversejs .form-control:focus {
309 background-color: var(--darker-background-1);
310 border-color: #1f78d1;
311 color: var(--main-text-color);
312 }
313
314 #conversejs .btn-primary {
315 background-color: #1f78d1;
316 }
317
318 #conversejs .btn-primary:hover {
319 background-color: #2288ed;
320 }
321
322 #conversejs .btn-primary:not(:disabled):not(.disabled).active, #conversejs .btn-primary:not(:disabled):not(.disabled):active, .show > #conversejs .btn-primary.dropdown-toggle {
323 background-color: #1962ac;
324 border-color: #1965b0;
325 }
326
327 /* OMEMO */
328
329 #conversejs .list-group-item {
330 background-color: var(--main-background);
331 border-color: var(--main-border);
332 }
333
334 #conversejs .list-group-item.active {
335 background-color: #1f78d1;
336 border-color: #1f78d1;
337 }
338
339 /* ===== Login page ===== */
340
341 #conversejs form#converse-login, #conversejs form#converse-register {
342 background-color: var(--main-background);
343 }
344
345 .reset {
346 background-color: #0f4071;
347 }
348
349 #conversejs.converse-fullscreen #controlbox .brand-heading-container .brand-heading, #conversejs.converse-mobile #controlbox .brand-heading-container .brand-heading {
350 color: var(--a-text-color);
351 }
352
353 #conversejs .popover {
354 background-color: var(--lighter-background-1);
355 }
356
357 #conversejs .popover-header {
358 background-color: var(--lighter-background-1);
359 border-color: var(--light-divider);
360 }
361
362 #conversejs .popover-body {
363 color: var(--main-text-color);
364 }
365}
diff --git a/recipes/xmpp/icon.svg b/recipes/xmpp/icon.svg
new file mode 100644
index 0000000..6f54bde
--- /dev/null
+++ b/recipes/xmpp/icon.svg
@@ -0,0 +1,25 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
3<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
5<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" xml:space="preserve" viewBox="0 0 200 200" width="200px" height="200px" x="0px" y="0px" enable-background="new 0 0 200 200">
6 <linearGradient id="SVGID_right_" y2="1.279e-13" gradientUnits="userSpaceOnUse" x2="-1073.2" gradientTransform="translate(1196.604,37.368977)" y1="126.85" x1="-1073.2">
7 <stop stop-color="#1b3967" offset=".011"/>
8 <stop stop-color="#13b5ea" offset=".467"/>
9 <stop stop-color="#002b5c" offset=".9945"/>
10 </linearGradient>
11
12 <linearGradient id="SVGID_left_" y2="1.279e-13" gradientUnits="userSpaceOnUse" x2="-1073.2" gradientTransform="matrix(-1,0,0,1,-994.78801,37.367977)" y1="126.85" x1="-1073.2">
13 <stop stop-color="#1b3967" offset=".011"/>
14 <stop stop-color="#13b5ea" offset=".467"/>
15 <stop stop-color="#002b5c" offset=".9945"/>
16 </linearGradient>
17
18 <path d="m 151.80512,51.557978 c 0.077,1.313 -1.787,0.968 -1.787,2.293 0,38.551002 -46.558,97.366012 -91.687985,108.730012 v 1.639 C 118.28313,158.69999 186.89012,96.41998 188.40012,37.369977 l -36.599,14.189001 z" style="fill:url(#SVGID_right_)"/>
19 <path d="m 133.67312,56.300978 c 0.076,1.313 0.12,2.63 0.12,3.957 0,38.551002 -30.69898,90.497012 -75.826985,101.860012 v 1.639 c 59.044005,-2.79 105.809995,-63.02401 105.809995,-109.200012 0,-2.375 -0.128,-4.729 -0.371,-7.056 l -29.73,8.798 z" style="fill:#e96d1f"/>
20 <path d="m 163.69112,46.951978 -7.61699,2.722 c 0.041,0.962 0.066,2.254 0.066,3.225 0,41.219002 -37.271,98.204012 -87.271995,107.120012 -3.24501,1.088 -7.53801,2.077 -10.932,2.931 v 1.638 C 123.19013,159.02799 169.03613,92.72198 163.69612,46.947978 Z" style="fill:#d9541e"/>
21
22 <path d="m 50.011,51.556978 c -0.077,1.313 1.787,0.968 1.787,2.293 0,38.551002 46.558007,97.366012 91.68799,108.730012 v 1.639 C 83.533,158.69899 14.926,96.41898 13.416,37.368977 l 36.599,14.189001 z" style="fill:url(#SVGID_left_)"/>
23 <path d="m 68.143,56.299978 c -0.076,1.313 -0.12,2.63 -0.12,3.957 0,38.551002 30.698995,90.497012 75.82699,101.860012 v 1.639 C 84.806,160.96599 38.04,100.73198 38.04,54.555978 c 0,-2.375 0.128,-4.729 0.371,-7.056 l 29.73,8.798 z" style="fill:#a0ce67"/>
24 <path d="m 38.125,46.950978 7.617,2.722 c -0.041,0.962 -0.066,2.254 -0.066,3.225 0,41.219002 37.271,98.204012 87.27199,107.120012 3.245,1.088 7.538,2.077 10.932,2.931 v 1.638 C 78.626,159.02699 32.78,92.72098 38.12,46.946978 Z" style="fill:#439639"/>
25</svg>
diff --git a/recipes/xmpp/index.js b/recipes/xmpp/index.js
new file mode 100644
index 0000000..23607bd
--- /dev/null
+++ b/recipes/xmpp/index.js
@@ -0,0 +1 @@
module.exports = Ferdi => Ferdi;
diff --git a/recipes/xmpp/package.json b/recipes/xmpp/package.json
new file mode 100644
index 0000000..556eda5
--- /dev/null
+++ b/recipes/xmpp/package.json
@@ -0,0 +1,11 @@
1{
2 "id": "xmpp",
3 "name": "xmpp",
4 "version": "1.0.0",
5 "license": "MIT",
6 "repository": "https://github.com/Aman9das/ferdi-xmpp-recipe",
7 "config": {
8 "serviceURL": "https://inverse.chat",
9 "hasNotificationSound": true
10 }
11}
diff --git a/recipes/xmpp/webview.js b/recipes/xmpp/webview.js
new file mode 100644
index 0000000..dec648c
--- /dev/null
+++ b/recipes/xmpp/webview.js
@@ -0,0 +1,13 @@
1module.exports = (Ferdi) => {
2 function getMessages() {
3 let direct = 0;
4 for (const indicator of document.querySelectorAll('.msgs-indicator')) {
5 direct += Ferdi.safeParseInt(indicator.textContent)
6 }
7
8 direct = direct / 2 // as the messages are provided in 2 different locations..
9 Ferdi.setBadge(direct);
10 }
11
12 Ferdi.loop(getMessages);
13};