diff options
Diffstat (limited to 'recipes/xmpp')
-rw-r--r-- | recipes/xmpp/LICENSE | 21 | ||||
-rw-r--r-- | recipes/xmpp/darkmode.css | 365 | ||||
-rw-r--r-- | recipes/xmpp/icon.svg | 25 | ||||
-rw-r--r-- | recipes/xmpp/index.js | 1 | ||||
-rw-r--r-- | recipes/xmpp/package.json | 11 | ||||
-rw-r--r-- | recipes/xmpp/webview.js | 13 |
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 @@ | |||
1 | MIT License | ||
2 | |||
3 | Copyright (c) 2017 L91 | ||
4 | |||
5 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
6 | of this software and associated documentation files (the "Software"), to deal | ||
7 | in the Software without restriction, including without limitation the rights | ||
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
9 | copies of the Software, and to permit persons to whom the Software is | ||
10 | furnished to do so, subject to the following conditions: | ||
11 | |||
12 | The above copyright notice and this permission notice shall be included in all | ||
13 | copies or substantial portions of the Software. | ||
14 | |||
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
21 | SOFTWARE. | ||
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 @@ | |||
1 | module.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 | }; | ||