├── .gitignore
├── README.md
├── css.css
├── globals.css
├── index.html
├── keyfield.html
├── keyfield.js
├── kf.css
├── main.js
├── package-lock.json
├── package.json
├── popup.html
├── popup.js
├── popup_ex.css
├── renderer.js
└── resc
├── branding
├── brand_ico.ico
└── brand_png.png
├── fonts
├── FluentSystemIcons-Filled.ttf
├── FluentSystemIcons-Regular.ttf
└── SegoeIcons.ttf
└── imgs
├── copilot.svg
├── search
├── dark.svg
└── light.svg
└── weather
├── clearsky.svg
├── densedrizzle.svg
├── densefreezingdrizzle.svg
├── depositingrimefog.svg
├── foggy.svg
├── heavyfreezingrain.svg
├── heavyrain.svg
├── heavysnowfall.svg
├── heavysnowshowers.svg
├── lightdrizzle.svg
├── lightfreezingdrizzle.svg
├── lightfreezingrain.svg
├── mainlyclear.svg
├── moderatedrizzle.svg
├── moderaterain.svg
├── moderaterainshowers.svg
├── moderatesnowfall.svg
├── overcast.svg
├── partlycloudy.svg
├── slightrain.svg
├── slightrainshowers.svg
├── slightsnowfall.svg
├── slightsnowshowers.svg
├── snowgrains.svg
├── thunderstormwithhail.svg
├── thunderstormwithheavyhail.svg
├── thunderstormwithslighthail.svg
└── violentrainshowers.svg
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | package-lock.json
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 12Bar
2 | 
3 | TODO: Write howto/explainer :P
4 | For now, click Releases on the sidebar to download, or click Wiki at the top to view some more information!
5 |
6 |
7 | ## Installation:
8 | **Note:** The current version of 12Bar **requires** DesktopCoral to be installed to use it within apps.
9 | This won't be required forever, but the app's built-in docking functionality isn't quite ready yet!
10 | Follow the steps below to get started.
11 |
12 | 1. Download 12Bar and DesktopCoral:
13 | https://github.com/Futur3Sn0w/12Bar/releases/latest
14 | https://www.donationcoder.com/software/mouser/other-windows-apps/desktopcoral
15 |
16 | 2. Install and open DesktopCoral's options
17 | Change the options to match below:
18 | 
19 |
20 | 3. Run 12Bar!
21 | Running 12Bar before opening DesktopCoral will cause issues, so be sure to run it first!
22 |
23 |
24 | ## Options Popup
25 | You can change options within 12Bar or exit it from the options popup, which you can open at any time from the tray icon!
26 | Double-click it to jump to settings, or right click for more options.
27 | 
28 |
--------------------------------------------------------------------------------
/css.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | padding: 0;
4 |
5 | height: 100vh;
6 | width: 100vw;
7 |
8 | display: flex;
9 | align-items: center;
10 | justify-content: center;
11 |
12 | filter: blur(10px);
13 | transform: scale(.9);
14 | opacity: 0;
15 |
16 | overflow: hidden;
17 | color: var(--global-text);
18 |
19 | user-select: none !important;
20 | font-family: 'Segoe UI' !important;
21 |
22 | transition: .2s;
23 | transition-delay: .75s;
24 | }
25 |
26 | body.loaded {
27 | opacity: 1;
28 | filter: blur(0);
29 | transform: scale(1);
30 | }
31 |
32 | * {
33 | -webkit-user-drag: none !important;
34 | }
35 |
36 | /* :root,
37 | html,
38 | body {
39 | background-color: transparent !important;
40 | background: transparent !important;
41 | } */
42 |
43 | body[popup] {
44 | background-color: var(--main-pill);
45 | }
46 |
47 | .backgroundFill {
48 | width: 100vw;
49 | height: 100vh;
50 |
51 | position: absolute;
52 | z-index: -10;
53 | transition: .4s;
54 | opacity: 0;
55 | }
56 |
57 | .backgroundFill.enabled {
58 | opacity: 1;
59 | }
60 |
61 | .main-sect {
62 | display: flex;
63 |
64 | position: absolute;
65 | }
66 |
67 | .center {
68 | position: absolute;
69 | z-index: 9;
70 | display: flex;
71 | align-items: center;
72 | justify-content: center;
73 |
74 | /* background-color: #fff !important; */
75 | }
76 |
77 | .right {
78 | z-index: 10;
79 | right: 10px;
80 | font-weight: 500;
81 | height: 100%;
82 |
83 | display: flex;
84 | align-items: center;
85 | gap: 10px
86 | }
87 |
88 | .timeDate {
89 | font-size: 15px;
90 |
91 | display: flex;
92 | gap: 10px;
93 | align-items: center;
94 | padding: 0 8px;
95 | }
96 |
97 | .statIcons {
98 | font-size: 20px;
99 |
100 | display: flex;
101 | gap: 7px;
102 | align-items: center;
103 | padding: 0 8px;
104 |
105 | font-weight: lighter;
106 | font-family: FluentIcons-Reg;
107 | }
108 |
109 | .batteryIcn {
110 | font-size: 17px;
111 | font-family: SegoeSystemIcns !important;
112 | }
113 |
114 | .volIcon {
115 | font-size: 18px;
116 | font-family: SegoeSystemIcns !important;
117 | }
118 |
119 | .volIcon.mute {
120 | font-family: FluentIcons-Reg !important;
121 | }
122 |
123 | .wifiIcon.eth {
124 | font-size: 17px;
125 | font-family: SegoeSystemIcns !important;
126 | }
127 |
128 | .dropDownBtn {
129 | font-size: 14px;
130 | font-family: FluentIcons-Reg;
131 | }
132 |
133 | .dropDownBtn p {
134 | transition: .15s;
135 | }
136 |
137 | .dropDownBtn:active p {
138 | transform: scale(.8);
139 | }
140 |
141 | .profileBtn {
142 | border-radius: 100px !important;
143 | width: 40px;
144 | }
145 |
146 | .profileBtn.hide {
147 | display: none !important;
148 | }
149 |
150 | .profileImg {
151 | width: 35px;
152 | height: 35px;
153 | border-radius: 100px;
154 | background-color: white;
155 |
156 | transition: .15s;
157 | }
158 |
159 | .profileBtn:active .profileImg {
160 | transform: scale(.85);
161 | }
162 |
163 | .fiBtn {
164 | aspect-ratio: 1/1;
165 | display: flex;
166 | align-items: center;
167 | justify-content: center;
168 |
169 | position: relative;
170 | padding: 0 10px;
171 | }
172 |
173 | .frontItem {
174 | position: relative;
175 |
176 | display: flex;
177 | align-items: center;
178 | justify-content: center;
179 | }
180 |
181 | .frontItem:not(.restartable)::before {
182 | content: "";
183 | width: 100%;
184 | height: 100%;
185 |
186 | position: absolute;
187 | z-index: -2;
188 | border: 1px solid transparent;
189 | transition: .2s;
190 | height: 40px;
191 |
192 | border-radius: 5px;
193 | }
194 |
195 | .frontItem:not(.restartable):hover::before {
196 | background-color: var(--btn-back);
197 | border-color: var(--btn-border);
198 | border-top-color: var(--btn-top-border);
199 | }
200 |
201 | .frontItem:not(.restartable):active::before {
202 | background-color: rgba(255, 255, 255, .1);
203 | }
204 |
205 | @keyframes shrinkOut {
206 | 0% {
207 | transform: scale(1);
208 | opacity: 1;
209 | }
210 |
211 | 99% {
212 | transform: scale(.8);
213 | opacity: 0;
214 | }
215 |
216 | 100% {
217 | transform: scale(1);
218 | opacity: 0;
219 | }
220 | }
221 |
222 | .mainBar {
223 | display: flex;
224 | align-items: center;
225 | width: fit-content;
226 | min-width: 450px;
227 | height: 38px;
228 | overflow: hidden;
229 |
230 | border: none !important;
231 | border-color: transparent !important;
232 | /* border-color: var(--btn-border); */
233 |
234 | /* padding: 2px; */
235 | border-radius: 100px;
236 | /* background-color: var(--main-pill); */
237 | box-shadow: 0 2px 6px 0 var(--shadow-color);
238 | }
239 |
240 | .mainBar::before {
241 | content: "";
242 |
243 | position: absolute;
244 | z-index: -2;
245 |
246 | width: 100%;
247 | height: 100%;
248 | background-color: var(--main-pill);
249 | border: 1px solid var(--btn-border);
250 | border-radius: inherit;
251 | box-sizing: border-box;
252 |
253 | opacity: .5;
254 | transition: .15s;
255 | }
256 |
257 | .mainBar:hover::before {
258 | opacity: .75;
259 | }
260 |
261 | .mainBar::after {
262 | content: "";
263 |
264 | position: absolute;
265 | top: 0;
266 | left: 50%;
267 | transform: translateX(-50%);
268 | z-index: 1;
269 |
270 | width: calc(100% - 30px);
271 | height: 1px;
272 | background: linear-gradient(to right, transparent, white 20%, white 80%, transparent);
273 | border-radius: inherit;
274 |
275 | opacity: .15;
276 | }
277 |
278 | .mainBar:active::before,
279 | .mainBar:focus::before,
280 | .mainBar:focus-within::before {
281 | opacity: .7;
282 | }
283 |
284 | .mainBar.desktop .appIcn,
285 | .mainBar.desktop .appLabel,
286 | .appIcn.hide,
287 | .appLabel.hide {
288 | display: none;
289 | }
290 |
291 | .mainBar div {
292 | display: flex;
293 | align-items: center;
294 | justify-content: center;
295 |
296 | height: 100%;
297 | }
298 |
299 | .appIcn {
300 | background-color: var(--app-icon-plate);
301 | border-radius: 30px 0 0 30px;
302 | width: 47px;
303 |
304 | height: 31px !important;
305 |
306 | margin-right: -15px;
307 | }
308 |
309 | .aiImg {
310 | aspect-ratio: 1/1;
311 | height: 100% !important;
312 | width: 20px;
313 | /* background-color: rgba(255, 255, 255, 0.24); */
314 | object-fit: contain;
315 |
316 | margin-left: -10px;
317 | }
318 |
319 | .appLabel {
320 | background-color: var(--app-label-plate);
321 | border-radius: 100px;
322 |
323 | font-size: 14px;
324 | color: var(--app-label-text);
325 |
326 | display: flex;
327 | align-items: center;
328 | justify-content: center;
329 | gap: 5px;
330 |
331 | padding: 0 15px;
332 | }
333 |
334 | .appLabel.notitle {
335 | gap: 0;
336 | }
337 |
338 | .appLabel.notitle .sep {
339 | display: none;
340 | }
341 |
342 | .appLabel p {
343 | opacity: .75;
344 | }
345 |
346 | .appLabel p.title {
347 | max-width: 450px;
348 | white-space: nowrap;
349 | overflow: hidden;
350 | text-overflow: ellipsis;
351 | }
352 |
353 | .search {
354 | height: 100%;
355 | width: max-content;
356 | color: var(--app-label-text);
357 |
358 | justify-content: flex-start !important;
359 |
360 | margin-right: auto;
361 | padding-right: 10px;
362 | }
363 |
364 | .search .icn {
365 | position: relative;
366 | height: 100%;
367 | width: 45px;
368 | font-family: FluentIcons-Fill;
369 | font-size: 20px;
370 | /* background-color: white; */
371 | border-radius: 100%;
372 |
373 | display: flex;
374 | text-align: center;
375 | align-items: center;
376 | justify-content: center;
377 | opacity: .25;
378 | }
379 |
380 | .search .icn.img {
381 | color: transparent;
382 | opacity: 1;
383 | }
384 |
385 | .search .icn img {
386 | position: absolute;
387 | width: 20px;
388 | transition: .15s;
389 | opacity: 0;
390 | }
391 |
392 | .search .icn.img img {
393 | opacity: 1;
394 | }
395 |
396 | .mainBar:active .search .icn img {
397 | transform: scale(.8);
398 | }
399 |
400 | .search .searchBox {
401 | height: fit-content;
402 |
403 | width: max-content;
404 | border: none;
405 | padding: 0;
406 | margin: 0;
407 | margin-left: -5px;
408 | margin-top: -1px;
409 |
410 | color: var(--app-label-text);
411 | opacity: .5;
412 | font-size: 13px;
413 | font-family: 'Segoe UI Variable Small';
414 |
415 | display: flex;
416 | justify-content: start;
417 | }
418 |
419 | .mainBar.desktop .search .searchBox {
420 | width: 350px;
421 | }
422 |
423 | .left {
424 | display: flex;
425 | align-items: center;
426 | justify-content: center;
427 | gap: 5px;
428 |
429 | position: absolute;
430 | left: 10px;
431 | }
432 |
433 | .left .weather {
434 | display: flex;
435 | align-items: center;
436 | gap: 5px;
437 |
438 | box-sizing: border-box;
439 | font-size: 16px;
440 |
441 | padding: 3px 10px 3px 2px;
442 | /* height: fit-content !important; */
443 | }
444 |
445 | .weather:active .wicon {
446 | transform: scale(.8);
447 | }
448 |
449 | .wicon {
450 | width: 35px;
451 | object-fit: contain;
452 | object-position: center;
453 | transition: .15s;
454 | }
455 |
456 | .wtemp {
457 | font-weight: 500;
458 | }
459 |
460 | .wfeel {
461 | font-weight: 400;
462 | opacity: .5;
463 | width: max-content;
464 | }
465 |
466 | .left .copilot {
467 | display: flex;
468 | padding: 0 8px;
469 | }
470 |
471 | .left .copilot.user-disable,
472 | .left .copilot.unsupported {
473 | display: none;
474 | }
475 |
476 | .left .copilot:active img {
477 | transform: scale(.8);
478 | }
479 |
480 | .left .copilot img {
481 | transition: .2s;
482 | width: 25px;
483 | }
--------------------------------------------------------------------------------
/globals.css:
--------------------------------------------------------------------------------
1 | /* I usually hate doing globals because it just feels
2 | janky, but for maximum realism; here we go! */
3 |
4 | :root {
5 | --global-text: #FFF;
6 |
7 | --btn-back: rgba(255, 255, 255, .05);
8 | --btn-border: rgba(255, 255, 255, .05);
9 | --btn-top-border: rgba(255, 255, 255, .1);
10 |
11 | --main-pill: rgba(22, 22, 22, 0.75);
12 | --app-icon-plate: rgba(255, 255, 255, 0.1);
13 | --app-label-plate: black;
14 | --app-label-text: white;
15 | --surface-text: white;
16 |
17 | --popup-back: hsl(0, 0%, 96%);
18 | --popup-btn: white;
19 | --popup-btn-checked: #047CD6;
20 | --popup-btn-hover: #f7f7f7;
21 | --popup-btn-border: #EDEDED;
22 | --popup-btn-border-bottom: #D3D3D3;
23 | --popup-footer: hsl(0, 0%, 93%);
24 | --popup-surface-text: black;
25 | }
26 |
27 | .dark-theme {
28 | --main-pill: #222222bf;
29 | --app-icon-plate: rgba(255, 255, 255, 0.1);
30 | --app-label-plate: #222222;
31 | --app-label-text: white;
32 | --surface-text: white;
33 |
34 | --btn-back: rgba(255, 255, 255, .05);
35 | --btn-border: rgba(255, 255, 255, .05);
36 | --btn-top-border: rgba(255, 255, 255, .1);
37 |
38 | --popup-back: rgb(42, 42, 42);
39 | --popup-btn: #373737;
40 | --popup-btn-checked: #047CD6;
41 | --popup-btn-hover: #3C3C3C;
42 | --popup-btn-border: #444444;
43 | --popup-btn-border-bottom: #484848;
44 | --popup-sect: #ffffff10;
45 | --popup-footer: #202020;
46 | --popup-surface-text: white;
47 | --imgFilter: brightness(100) contrast(0) saturate(100) brightness(100);
48 | }
49 |
50 | .light-theme {
51 | --main-pill: #ffffffbf;
52 | --app-icon-plate: rgba(0, 0, 0, 0.1);
53 | --app-label-plate: #fefefe;
54 | --app-label-text: black;
55 | --surface-text: black;
56 |
57 | --btn-back: rgba(255, 255, 255, .25);
58 | --btn-border: rgba(255, 255, 255, .025);
59 | --btn-top-border: rgba(255, 255, 255, .075);
60 |
61 | --popup-back: hsl(0, 0%, 96%);
62 | --popup-btn: white;
63 | --popup-btn-checked: #047CD6;
64 | --popup-btn-hover: #f7f7f7;
65 | --popup-btn-border: #EDEDED;
66 | --popup-btn-border-bottom: #D3D3D3;
67 | --popup-sect: #e7e6e6;
68 | --popup-footer: hsl(0, 0%, 93%);
69 | --popup-surface-text: black;
70 | --imgFilter: brightness(100) contrast(0) saturate(100) brightness(100) invert(1);
71 | }
72 |
73 | @font-face {
74 | font-family: FluentIcons-Fill;
75 | src: url('resc/fonts/FluentSystemIcons-Filled.ttf');
76 | }
77 |
78 | @font-face {
79 | font-family: FluentIcons-Reg;
80 | src: url('resc/fonts/FluentSystemIcons-Regular.ttf');
81 | }
82 |
83 | @font-face {
84 | font-family: SegoeSystemIcns;
85 | src: url('resc/fonts/SegoeIcons.ttf');
86 | }
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
Loading...
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
Type here to search
34 |
35 |
36 |
37 |
38 |
43 |
44 |
45 |
46 |
49 |
50 |
51 |
52 |
53 |
54 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/keyfield.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
20 |
21 | It looks like this is your first time using 12Bar. Welcome!
22 |
23 | This is a very early beta, things are bound to be incorrect, broken, or just missing.
24 |
25 | Thanks for testing!
26 |
27 | Okay
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/keyfield.js:
--------------------------------------------------------------------------------
1 | const { ipcRenderer } = require('electron')
2 | const $ = require('jquery');
3 |
4 | $('.saveBtn').on('click', function () {
5 | window.close();
6 | localStorage.setItem('oobe', 'done')
7 | })
8 |
9 | $('.quitBtn').on('click', function () {
10 | ipcRenderer.send('exit');
11 | })
--------------------------------------------------------------------------------
/kf.css:
--------------------------------------------------------------------------------
1 | body {
2 | display: flex;
3 | flex-direction: column;
4 | gap: 5px;
5 |
6 | font-family: 'Segoe UI';
7 |
8 | width: 100vw;
9 | height: 100vh;
10 | overflow: hidden;
11 | box-sizing: border-box;
12 |
13 | margin: 0;
14 | padding: 10px;
15 | user-select: none;
16 |
17 | background-color: var(--popup-back);
18 | color: var(--popup-surface-text);
19 | --webkit-app-region: no-drag;
20 | }
21 |
22 | p {
23 | margin: 0;
24 | padding: 0;
25 | }
26 |
27 | p.header {
28 | font-size: 22px;
29 | font-weight: bold;
30 |
31 | width: calc(100vw - 8px);
32 | margin-top: -6px;
33 | padding: 2px 10px;
34 | margin-left: -6px;
35 | box-sizing: border-box;
36 | border-radius: 5px;
37 |
38 | background-color: var(--popup-btn-border);
39 | --webkit-app-region: drag;
40 | }
41 |
42 | p.subhead {
43 | font-family: 'Segoe UI Variable Small';
44 | font-size: 12.5px;
45 | padding: 4px 0;
46 | }
47 |
48 | .hide {
49 | display: none;
50 | }
51 |
52 | .keyTB {
53 | width: 80%;
54 | margin: 0 auto;
55 | background-color: var(--popup-btn);
56 | box-sizing: border-box;
57 |
58 | outline: none !important;
59 |
60 | font-family: monospace;
61 | color: var(--popup-surface-text);
62 | border: 1px solid transparent;
63 | border-top-color: var(--popup-btn-border-bottom);
64 | border-color: var(--popup-btn-border);
65 | border-radius: 5px;
66 |
67 | padding: 3px 5px;
68 |
69 | transition: .15s;
70 | }
71 |
72 | .keyTB:focus {
73 | background-color: var(--popup-btn-hover);
74 | }
75 |
76 | .kfBtn {
77 | width: fit-content;
78 | position: absolute;
79 | bottom: 10px;
80 | right: 10px;
81 |
82 | padding: 5px 10px;
83 | font-size: 13px;
84 | border-radius: 5px;
85 | box-sizing: border-box;
86 |
87 | background-color: var(--popup-btn);
88 |
89 | border: 1px solid transparent;
90 | border-top-color: var(--popup-btn-border-bottom);
91 | border-color: var(--popup-btn-border);
92 |
93 | transition: .15s;
94 | }
95 |
96 | .kfBtn:hover {
97 | background-color: var(--popup-btn-hover);
98 | }
99 |
100 | .kfBtn:active {
101 | padding: 6.5px 13.5px;
102 | font-size: 10px;
103 | }
104 |
105 | .kfBtn.quitBtn {
106 | right: unset;
107 | left: 10px;
108 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "12bar",
3 | "version": "0.2.0",
4 | "description": "An Electron-based replica of the leaked Windows 12 topchrome UI.",
5 | "main": "main.js",
6 | "scripts": {
7 | "start": "electron .",
8 | "start-with-warnings": "electron . --trace-warnings",
9 | "start-debug": "electron . --inspect",
10 | "build": " electron-builder --win --x64",
11 | "rebuild": ".\\node_modules\\.bin\\electron-rebuild.cmd"
12 | },
13 | "author": "Futur3Sn0w",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "electron": "^26.2.1",
17 | "electron-rebuild": "^3.2.9"
18 | },
19 | "dependencies": {
20 | "@electron/remote": "^2.0.12",
21 | "@lwahonen/ffi-napi": "^4.0.12",
22 | "@lwahonen/ref-napi": "^4.0.8",
23 | "@nut-tree/nut-js": "^3.1.2",
24 | "active-win": "^8.1.0",
25 | "electron-acrylic-window": "^0.5.11",
26 | "electron-store": "^8.1.0",
27 | "ffi-napi": "^4.0.3",
28 | "file-icon-info": "^1.1.1",
29 | "jquery": "^3.7.1",
30 | "node-gyp-build": "^4.6.1",
31 | "ps-list": "^8.1.1",
32 | "ref-napi": "^3.0.3",
33 | "robotjs": "^0.6.0",
34 | "wifi-name": "^3.1.1",
35 | "win-audio": "^2.0.2"
36 | },
37 | "build": {
38 | "directories": {
39 | "output": "../build"
40 | },
41 | "win": {
42 | "icon": "resc/branding/brand_png.png"
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/popup.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 12Bar Options
8 |
9 |
10 |
11 |
12 |
13 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
31 |
32 |
33 |
34 |
38 |
39 |
40 |
Appearance
41 |
45 |
49 |
50 |
51 |
Item options
52 |
56 |
60 |
65 |
66 |
67 |
Item visibility
68 |
69 |
70 |
71 |
72 |
76 |
77 |
78 |
79 |
80 |
81 |
--------------------------------------------------------------------------------
/popup.js:
--------------------------------------------------------------------------------
1 | const { shell, ipcRenderer } = require('electron')
2 | const $ = require('jquery');
3 | const remote = require('@electron/remote');
4 | var bg = localStorage.getItem('background');
5 | var themePreference = localStorage.getItem('themePreference');
6 | var searchPref = localStorage.getItem('searchPref');
7 | var userMenu = localStorage.getItem('userMenuPref');
8 | var tempUnit = localStorage.getItem('tempUnit');
9 | var userCopilot = localStorage.getItem('user-copilot');
10 | var altSearch = localStorage.getItem('altSearch');
11 |
12 | const os = require('os');
13 |
14 | $(window).on('load', function () {
15 | var userImg = localStorage.getItem('userImgPath');
16 | var username = os.userInfo().username;
17 |
18 | ipcRenderer.send('get-appver')
19 | ipcRenderer.send('checkCopilot');
20 |
21 | if (bg == 'true') {
22 | $('.backgroundCB').attr('checked', true)
23 | }
24 |
25 | if (themePreference) {
26 | $(':root').addClass(themePreference);
27 | $('.themeCB').prop('checked', themePreference === 'dark-theme');
28 | }
29 |
30 | if (tempUnit == 'f') {
31 | $('.tempUnitCB').prop('checked', true)
32 | $('.tempUnitBtn .tuTemp').text('°F');
33 | } else if (tempUnit == 'c') {
34 | $('.tempUnitCB').prop('checked', false)
35 | $('.tempUnitBtn .tuTemp').text('°C');
36 | }
37 |
38 | if (searchPref == 'true') {
39 | $('.searchToggleCB').attr('checked', true);
40 | }
41 |
42 | if (userMenu == 'true') {
43 | $('.userimgCB').attr('checked', true);
44 | } else if (userMenu == 'false') {
45 | $('.userimgCB').attr('checked', false);
46 | }
47 |
48 | if (userCopilot == 'true') {
49 | $('.copilotCB').attr('checked', true)
50 | }
51 |
52 | if (altSearch == 'y') {
53 | $('.searchProvCB').attr('checked', true)
54 | }
55 |
56 | $('.userImg').attr('src', userImg);
57 | $('.username').text(username);
58 | if (themePreference) {
59 | $('.searchImg').attr('src', 'resc/imgs/search/' + themePreference.replace('-theme', '') + '.svg')
60 | }
61 |
62 | ipcRenderer.send('cwin-ready', -8);
63 | })
64 |
65 | ipcRenderer.on('got-appver', (_event, ver) => {
66 | $('.username').attr("label", ' v' + ver);
67 | })
68 |
69 | ipcRenderer.on('no-copilot', function () {
70 | $('.copilotBtn').addClass('hide');
71 | })
72 |
73 | $('.copilotBtn').on('click', function () {
74 | localStorage.setItem('user-copilot', $('.copilotCB').is(':checked'))
75 | if (localStorage.getItem('user-copilot') == 'true') {
76 | ipcRenderer.send('user-enable-copilot')
77 | } else if (localStorage.getItem('user-copilot') == 'false') {
78 | ipcRenderer.send('user-disable-copilot')
79 | }
80 | })
81 |
82 | $('.refreshBtn').on('click', function () {
83 | if ($('.refreshBtn').hasClass('debug')) {
84 | ipcRenderer.send('devTools');
85 | } else {
86 | ipcRenderer.send('hotKey', 'ctrl', 'r');
87 | }
88 | })
89 |
90 | $('.tempUnitBtn').on('click', function () {
91 | var newTempUnitPref = $('.tempUnitCB').is(':checked') ? 'f' : 'c';
92 | localStorage.setItem('tempUnit', newTempUnitPref);
93 | if (newTempUnitPref == 'f') {
94 | $('.tempUnitBtn .tuTemp').text('°F');
95 | } else if (newTempUnitPref == 'c') {
96 | $('.tempUnitBtn .tuTemp').text('°C');
97 | }
98 | ipcRenderer.send('hotKey', 'ctrl', 'r');
99 | })
100 |
101 | $('.backgroundCB').on('click', function () {
102 | ipcRenderer.send('toggleBackground');
103 | localStorage.setItem('background', $('.backgroundCB').is(':checked'))
104 | })
105 |
106 | $('.themeCB').on('click', function () {
107 | $(':root').toggleClass('light-theme dark-theme');
108 | var newThemePref = $(':root').hasClass('light-theme') ? 'light-theme' : 'dark-theme';
109 | var themeToSend = $(':root').hasClass('light-theme') ? 'light' : 'dark';
110 | localStorage.setItem('themePreference', newThemePref);
111 | ipcRenderer.send('toggleTheme', themeToSend);
112 | });
113 |
114 | $('.searchToggleCB').on('click', function () {
115 | ipcRenderer.send('toggleSearch');
116 | var searchStat = $('.searchToggleCB').is(':checked') ? 'true' : 'false';
117 | localStorage.setItem('searchPref', searchStat);
118 | });
119 |
120 | $('.userimgBtn').on('click', function () {
121 | ipcRenderer.send('toggleUserMenu');
122 | var userMenuPref = $('.userimgCB').is(':checked') ? 'true' : 'false';
123 | localStorage.setItem('userMenuPref', userMenuPref);
124 | });
125 |
126 | $('.searchProvCB').on('click', function () {
127 | var newSearchProvPref = $('.searchProvCB').is(':checked') ? 'y' : 'n';
128 | localStorage.setItem('altSearch', newSearchProvPref);
129 | ipcRenderer.send('hotKey', 'ctrl', 'r');
130 | })
131 |
132 | $('.exitBtn').on('click', function () {
133 | ipcRenderer.send('exit');
134 | })
135 |
136 | ipcRenderer.on("before-input-event", (event, input) => {
137 | localStorage.setItem('ctrl', input.control)
138 | });
139 |
140 | $('.resetBtn').on('click', function () {
141 | var ctrl = localStorage.getItem('ctrl')
142 | if (ctrl == 'true') {
143 | ipcRenderer.send('reset-app')
144 | } else {
145 | alert('In order to prevent accidental presses, hold the Ctrl key before clicking this to reset 12Bar.')
146 | }
147 | });
148 |
149 | $('.popupCloseBtn').on('click', function () {
150 | window.close();
151 | })
152 |
153 | ipcRenderer.on('refresh', function () {
154 | location.reload();
155 | })
156 |
157 | $('.btn1').on('click', function () {
158 | ipcRenderer.send('hotKey', 'command', 'i');
159 | })
160 |
161 | $('.btn2').on('click', function () {
162 | if ($('.btn2').attr('btnTxt') == 'Dev tools') {
163 | ipcRenderer.send('devTools')
164 | } else {
165 | ipcRenderer.send('show-popup');
166 | }
167 | })
168 |
169 | $('.btn3').on('click', function () {
170 | ipcRenderer.send('power-dialog');
171 | })
172 |
173 | $('.btnSubCont label').on('click', function () {
174 | if ($(this).parent().hasClass('expand')) {
175 | $(this).parent().removeClass('expand');
176 | } else {
177 | $('.btnSubCont.expand').removeClass('expand');
178 | $(this).parent().addClass('expand');
179 | }
180 | let newHeight;
181 |
182 | // setTimeout(() => {
183 | if ($('.btnSubCont').hasClass('expand')) {
184 | newHeight = Math.round($(this).parent().height() - 28);
185 | } else {
186 | newHeight = -8;
187 | }
188 | ipcRenderer.send('cwin-ready', newHeight);
189 | // }, 150);
190 | })
191 |
192 | $('.userImgDiv').on('mouseover', function () {
193 | $('.userArea').addClass('uiHover')
194 | })
195 |
196 | $('.userImgDiv').on('mouseout', function () {
197 | $('.userArea').removeClass('uiHover')
198 |
199 | })
200 |
201 | $('.userImgDiv').on('click', function () {
202 | ipcRenderer.send('open-yourinfo');
203 | })
204 |
205 | ipcRenderer.on('before-input-event', (_event, input) => {
206 | if (input.control) {
207 | $('.btn2').attr('btnTxt', 'Dev tools').text('')
208 | } else {
209 | $('.btn2').attr('btnTxt', 'Refresh 12Bar').text('')
210 | }
211 | })
--------------------------------------------------------------------------------
/popup_ex.css:
--------------------------------------------------------------------------------
1 | body {
2 | /* background-color: var(--popup-back) !important; */
3 | background-color: transparent !important;
4 | color: var(--popup-surface-text);
5 |
6 | box-sizing: border-box;
7 |
8 | display: flex;
9 | flex-direction: column;
10 | justify-content: start;
11 | }
12 |
13 | .titleBar {
14 | display: flex;
15 | align-items: center;
16 | width: 100%;
17 | height: 35px;
18 | box-sizing: border-box;
19 | padding-left: 10px;
20 |
21 | background-color: var(--popup-footer);
22 | color: var(--popup-surface-text);
23 | font-size: 13px;
24 | font-family: 'Segoe UI Variable Small';
25 |
26 | position: absolute;
27 | top: 0;
28 | left: 0;
29 |
30 | -webkit-app-region: drag;
31 | }
32 |
33 | .popupCloseBtn {
34 | width: 45px;
35 | height: 35px;
36 |
37 | position: absolute;
38 | top: 0;
39 | right: 0;
40 |
41 | display: flex;
42 | align-items: center;
43 | justify-content: center;
44 |
45 | font-family: SegoeSystemIcns;
46 | color: var(--popup-surface-text);
47 | font-size: 10px;
48 | transition: .15s;
49 |
50 | -webkit-app-region: no-drag;
51 | }
52 |
53 | .popupCloseBtn:hover {
54 | color: white;
55 | background-color: #e81123;
56 | }
57 |
58 | .userArea {
59 | width: 100%;
60 | height: 103px;
61 |
62 | box-sizing: border-box;
63 | display: flex;
64 | gap: 5px;
65 | position: relative;
66 | }
67 |
68 | .username {
69 | font-family: 'Segoe UI';
70 | font-size: 17px;
71 | font-weight: 700;
72 |
73 | position: absolute;
74 | top: 5px;
75 | left: 103px;
76 | z-index: 13;
77 |
78 | display: flex;
79 | justify-content: flex-start;
80 |
81 | padding: 5px 0;
82 | width: 100% - 191px;
83 | box-sizing: border-box;
84 | /* border-radius: 10px 0 0 0; */
85 | }
86 |
87 | .username::before {
88 | content: 'Click to open account settings';
89 | position: absolute;
90 | top: 27px;
91 | left: 0;
92 | z-index: 12;
93 |
94 | width: max-content;
95 | box-sizing: border-box;
96 | border-radius: 50px;
97 |
98 | font-size: 12px;
99 | font-weight: normal;
100 | transition: .2s;
101 | opacity: 0;
102 | }
103 |
104 | .userArea.uiHover .username::before {
105 | opacity: 1;
106 | }
107 |
108 | .username::after {
109 | content: '12Bar' attr(label);
110 | position: absolute;
111 | top: 27px;
112 | left: 0;
113 | z-index: 12;
114 |
115 | width: max-content;
116 | box-sizing: border-box;
117 | border-radius: 50px;
118 |
119 | font-size: 12px;
120 | font-weight: normal;
121 | transition: .2s;
122 | opacity: .75;
123 | }
124 |
125 | .userArea.uiHover .username::after {
126 | opacity: 0;
127 | }
128 |
129 | .userImgDiv {
130 | display: flex;
131 | width: min-content;
132 | height: 100%;
133 | position: relative;
134 | margin-right: auto;
135 | margin-left: 8px;
136 | margin-top: 8px;
137 |
138 | /* -webkit-mask-image: linear-gradient(to right, transparent, black); */
139 | /* mask-image: linear-gradient(to right, transparent, black); */
140 | }
141 |
142 | .userImg {
143 | height: calc(100% - 16px);
144 | border-radius: 7px;
145 | aspect-ratio: 1/1;
146 | object-fit: contain;
147 |
148 | transition: .2s;
149 | }
150 |
151 | .userImg:active {
152 | transform: scale(.95);
153 | }
154 |
155 |
156 | .buttons {
157 | width: 100%;
158 | height: 30px;
159 | display: flex;
160 | /* flex-direction: column; */
161 | box-sizing: border-box;
162 | gap: 1px;
163 |
164 | margin-top: auto;
165 | margin-bottom: 8px;
166 | margin-left: auto;
167 | margin-right: 8px;
168 | /* padding: 8px; */
169 | padding-bottom: 0;
170 | /* position: absolute; */
171 | /* left: 5px; */
172 | /* bottom: 5px; */
173 | /* z-index: 14; */
174 | }
175 |
176 | .button {
177 | width: 30px;
178 | height: 30px;
179 |
180 | border-radius: 5px;
181 | border: 1px solid transparent;
182 | font-size: 14px;
183 | font-family: SegoeSystemIcns;
184 |
185 | transition: .15s;
186 |
187 | box-sizing: border-box;
188 | padding: 3px 8px;
189 | padding-left: 7px;
190 | box-sizing: border-box;
191 |
192 | display: flex;
193 | align-items: center;
194 | justify-content: center;
195 | gap: 7px;
196 | }
197 |
198 | .button::after {
199 | /* content: attr(btnTxt); */
200 | font-size: 12px;
201 | font-family: 'Segoe UI Variable Small';
202 | }
203 |
204 | .button:hover {
205 | background-color: var(--btn-back);
206 | border-color: var(--btn-border);
207 | border-bottom-color: var(--btn-top-border);
208 | }
209 |
210 | .button:active {
211 | font-size: 12px;
212 | }
213 |
214 | .btn3 {
215 | margin-left: auto;
216 | }
217 |
218 | .btnContainer {
219 | width: 100%;
220 | height: fit-content;
221 | /* max-height: 100%; */
222 | flex-shrink: 0;
223 |
224 | gap: 5px;
225 | display: flex;
226 | flex-direction: column;
227 | align-items: center;
228 | justify-content: flex-start;
229 |
230 | box-sizing: border-box;
231 | padding: 0 8px;
232 | margin-top: 0;
233 | }
234 |
235 | .btnContainer::-webkit-scrollbar {
236 | display: none !important;
237 | opacity: 0 !important;
238 | width: 0 !important;
239 | }
240 |
241 | .btnSubCont {
242 | height: fit-content;
243 | max-height: 40px;
244 | width: 100%;
245 |
246 | position: relative;
247 | overflow: hidden;
248 | border-radius: 7px;
249 | background-color: var(--popup-footer);
250 |
251 | gap: 5px;
252 | display: flex;
253 | flex-direction: column;
254 | align-items: flex-end;
255 | justify-content: flex-start;
256 |
257 | box-sizing: border-box;
258 | padding: 10px;
259 | /* transition: .2s; */
260 | }
261 |
262 | .btnSubCont::before {
263 | content: '';
264 | width: 100%;
265 | height: 34px;
266 | flex-shrink: 0;
267 | }
268 |
269 | .btnSubCont.expand {
270 | max-height: 200px;
271 | }
272 |
273 | .btnSubCont label {
274 | font-size: 15px;
275 | font-family: 'Segoe UI Variable Small';
276 | font-weight: 500;
277 | align-self: flex-start;
278 | box-sizing: border-box;
279 | padding: 5px 12px;
280 |
281 | display: flex;
282 | align-items: center;
283 |
284 | position: absolute;
285 | top: 0;
286 | left: 0;
287 | width: 100%;
288 | height: 40px;
289 | background-color: var(--popup-sect);
290 | }
291 |
292 | .btnSubCont label::after {
293 | content: "";
294 | font-size: 14px;
295 | font-family: FluentIcons-Reg, 'Segoe UI';
296 | position: absolute;
297 | z-index: 1;
298 | left: 251px;
299 | top: 12px;
300 | transition: .15s;
301 |
302 | display: flex;
303 | align-items: center;
304 | justify-content: center;
305 | }
306 |
307 | .btnSubCont label::before {
308 | content: attr(num);
309 | font-size: 12px;
310 | font-family: FluentIcons-Reg, 'Segoe UI';
311 | position: absolute;
312 | left: 230px;
313 | top: 7px;
314 | transition: .15s;
315 |
316 | display: flex;
317 | align-items: center;
318 | justify-content: center;
319 |
320 | background-color: var(--popup-btn-hover);
321 | box-sizing: border-box;
322 | padding: 4px 29px 4px 10px;
323 | border-radius: 50px;
324 | }
325 |
326 | .btnSubCont.expand label::after {
327 | transform: rotate(180deg);
328 | }
329 |
330 | .btnSubCont label:active::after {
331 | transform: scale(.8);
332 | }
333 |
334 | .btnSubCont.expand label:active::after {
335 | transform: rotate(180deg) scale(.8);
336 | }
337 |
338 | .fiBtn {
339 | width: 35px;
340 | height: 35px;
341 | flex-shrink: 0;
342 | border-radius: 5px;
343 | padding: 0;
344 | margin: 0;
345 | /* transform: translateY(-10px); */
346 | border: 1px solid transparent;
347 | box-sizing: border-box;
348 | /* background-color: purple; */
349 | }
350 |
351 | .fiBtn .icon {
352 | pointer-events: none !important;
353 | transition: .1s;
354 | position: relative;
355 | z-index: 1;
356 | font-family: FluentIcons-Reg;
357 | font-size: 18px;
358 |
359 | position: absolute;
360 | left: 0;
361 | transform: translateX(-225px);
362 | }
363 |
364 | .fiBtn:active i {
365 | transform: scale(.8);
366 | }
367 |
368 | .fiBtn::after {
369 | content: attr(label);
370 | position: absolute;
371 | left: 0;
372 | transform: translateX(-200px);
373 | /* bottom: 50%; */
374 | font-size: 12.5px;
375 | font-weight: 400;
376 | width: max-content;
377 |
378 | font-family: 'Segoe UI Variable Small';
379 |
380 | pointer-events: none;
381 | }
382 |
383 | .restartable::before {
384 | content: 'Will restart 12Bar' !important;
385 | font-size: 10px;
386 | font-family: 'Segoe UI Variable Small';
387 | opacity: .75;
388 |
389 | position: absolute !important;
390 | bottom: 2px !important;
391 | left: -200px !important;
392 |
393 | width: max-content !important;
394 | height: min-content;
395 | }
396 |
397 | .restartable::after {
398 | top: 2px;
399 | }
400 |
401 | input[type="checkbox"] {
402 | appearance: none;
403 | margin: 0;
404 | padding: 0;
405 | box-sizing: border-box;
406 |
407 | width: 100%;
408 | height: 100%;
409 |
410 | position: absolute;
411 | z-index: 0;
412 | top: 0;
413 | left: 0;
414 |
415 | display: flex;
416 | align-items: center;
417 | justify-content: center;
418 |
419 | font-family: SegoeSystemIcns;
420 |
421 | border-radius: inherit;
422 |
423 | border: 1px solid transparent;
424 | border-color: var(--popup-btn-border);
425 | border-bottom-color: var(--popup-btn-border-bottom);
426 | background-color: var(--popup-btn);
427 |
428 | transition: .15s;
429 | }
430 |
431 | input[type="checkbox"]::before {
432 | content: '';
433 | font-size: 14px;
434 | color: var(--popup-surface-text);
435 | transition: .15s;
436 | }
437 |
438 | input[type="checkbox"]:checked::before {
439 | content: '';
440 | color: white;
441 | }
442 |
443 | .themeBtn input[type="checkbox"]::before {
444 | content: '';
445 | }
446 |
447 | .themeBtn input[type="checkbox"]:checked::before {
448 | content: '';
449 | }
450 |
451 | .fiBtn:active input[type="checkbox"]::before {
452 | transform: scale(.75);
453 | }
454 |
455 | input[type="checkbox"]:checked {
456 | background-color: var(--popup-btn-checked);
457 | }
458 |
459 | .copilotBtn .icon {
460 | width: 19px;
461 | }
462 |
463 | .copilotBtn.hide {
464 | display: none;
465 | }
466 |
467 | .bsc2 * .icon {
468 | font-family: SegoeSystemIcns !important;
469 | }
470 |
471 | .tempUnitCB {
472 | display: flex;
473 | background-color: var(--popup-btn) !important;
474 | }
475 |
476 | .tempUnitCB::before {
477 | content: '' !important;
478 | }
479 |
480 | .tuTemp {
481 | display: flex;
482 | font-family: 'Segoe UI Variable Small' !important;
483 | color: var(--popup-surface-text) !important;
484 | z-index: 10;
485 | pointer-events: none;
486 | transition: .15s;
487 | }
488 |
489 | .tempUnitBtn:active .tuTemp {
490 | transform: scale(.75);
491 | }
--------------------------------------------------------------------------------
/renderer.js:
--------------------------------------------------------------------------------
1 | const { ipcRenderer, ipcMain, net } = require('electron')
2 | const { exec } = require('child_process');
3 | const os = require('os');
4 | const $ = require('jquery');
5 |
6 | var bg = localStorage.getItem('background');
7 | var lat = localStorage.getItem('locLat');
8 | var lon = localStorage.getItem('locLon');
9 | var themePreference = localStorage.getItem('themePreference');
10 | var altSearch = localStorage.getItem('altSearch');
11 | var searchPref = localStorage.getItem('searchPref');
12 | var tempUnit = localStorage.getItem('tempUnit');
13 | var userMenu = localStorage.getItem('userMenuPref');
14 | var userCopilot = localStorage.getItem('user-copilot');
15 | var currentWinBuild = os.release().replace('10.0.', '');
16 |
17 | const weatherCodes = {
18 | 0: "Clear sky",
19 | 1: "Mainly clear",
20 | 2: "Partly cloudy",
21 | 3: "Overcast",
22 | 45: "Foggy",
23 | 48: "Depositing rime fog",
24 | 51: "Light Drizzle",
25 | 53: "Moderate Drizzle",
26 | 55: "Dense Drizzle",
27 | 56: "Light Freezing Drizzle",
28 | 57: "Dense Freezing Drizzle",
29 | 61: "Slight Rain",
30 | 63: "Moderate Rain",
31 | 65: "Heavy Rain",
32 | 66: "Light Freezing Rain",
33 | 67: "Heavy Freezing Rain",
34 | 71: "Slight Snow fall",
35 | 73: "Moderate Snow fall",
36 | 75: "Heavy Snow fall",
37 | 77: "Snow grains",
38 | 80: "Slight Rain showers",
39 | 81: "Moderate Rain showers",
40 | 82: "Violent Rain showers",
41 | 85: "Slight snow showers ",
42 | 86: "Heavy snow showers ",
43 | 95: "Thunderstorm with slight hail",
44 | 96: "Thunderstorm with hail",
45 | 99: "Thunderstorm with heavy hail"
46 | };
47 |
48 | let batteryIsCharging = false;
49 |
50 | $(window).on('load', function () {
51 | checkOobe();
52 | // appLblCheck();
53 | currentTime();
54 |
55 |
56 | ipcRenderer.send('getVolumeLevel');
57 | ipcRenderer.send('getUserImage');
58 |
59 | $('.appLabel').addClass('notitle')
60 | $('p.name').hide();
61 | $('.appLabel .sep').hide();
62 |
63 | if (bg == null) {
64 | localStorage.setItem('background', false);
65 | } else if (bg == 'true') {
66 | $('.backgroundFill').addClass('enabled')
67 | }
68 | ipcRenderer.send('set-bg-state', $('.backgroundFill').hasClass('enabled'));
69 |
70 | if (altSearch == null) {
71 | localStorage.setItem('altSearch', 'n');
72 | } else if (altSearch == 'y') {
73 | $('.mainBar').addClass('altSearch')
74 | }
75 |
76 | if (userMenu == null) {
77 | localStorage.setItem('userMenuPref', true);
78 | } else if (userMenu == 'true') {
79 | $('.profileBtn').removeClass('hide')
80 | } else if (userMenu == 'false') {
81 | $('.profileBtn').addClass('hide')
82 | }
83 |
84 | if (tempUnit == null) {
85 | localStorage.setItem('tempUnit', 'c');
86 | } else if (tempUnit == 'f') {
87 | localStorage.setItem('tempUnit', 'f');
88 | } else if (tempUnit == 'c') {
89 | localStorage.setItem('tempUnit', 'c');
90 | }
91 | checkKey();
92 |
93 |
94 |
95 | if (themePreference) {
96 | $(':root').addClass(themePreference);
97 | $('.searchImg').attr('src', 'resc/imgs/search/' + themePreference.replace('-theme', '') + '.svg')
98 | } else {
99 | $(':root').addClass('light-theme');
100 | localStorage.setItem('themePreference', 'light-theme');
101 | }
102 |
103 | if (searchPref) {
104 | if (searchPref == 'true') {
105 | $('.search .icn').addClass('img')
106 | }
107 | }
108 |
109 | if (currentWinBuild < 23493) {
110 | $('.copilot').addClass('unsupported');
111 | }
112 |
113 | if (userCopilot == null) {
114 | localStorage.setItem('user-copilot', true);
115 | } else if (userCopilot == 'true') {
116 | $('.copilot').removeClass('user-disable')
117 | } else if (userCopilot == 'false') {
118 | $('.copilot').addClass('user-disable')
119 | }
120 |
121 | $('.wifiIcon').hide();
122 | ipcRenderer.send('get-netinfo')
123 |
124 | $('body').addClass('loaded');
125 | })
126 |
127 | ipcRenderer.on('network-info', (_event, netInf) => {
128 | var conType = netInf['InterfaceAlias'];
129 | // var conName = netInf['Name'];
130 | // The above should work, just isn't needed at the moment
131 |
132 | if (conType == 'Wi-Fi') {
133 | $('.wifiIcon').show();
134 | $('.wifiIcon').text('')
135 | $('.wifiIcon').removeClass('eth');
136 | } else if (conType.indexOf('Ethernet') !== 1) {
137 | $('.wifiIcon').show();
138 | $('.wifiIcon').addClass('eth');
139 | $('.wifiIcon').text('')
140 | } else {
141 | $('.wifiIcon').hide();
142 | $('.wifiIcon').removeClass('eth');
143 | }
144 | })
145 |
146 | ipcRenderer.on('userimage-output', (_event, path) => {
147 | if (path == null || path == 'null') {
148 | $('.profileImg').attr('src', process.env.systemdrive + "\\ProgramData\\Microsoft\\User Account Pictures\\user.png");
149 | localStorage.setItem('userImgPath', process.env.systemdrive + "\\ProgramData\\Microsoft\\User Account Pictures\\user.png");
150 | } else {
151 | $('.profileImg').attr('src', path);
152 | localStorage.setItem('userImgPath', path);
153 | }
154 | })
155 |
156 | ipcRenderer.on('toggleTempUnit', function () {
157 | checkKey();
158 | })
159 |
160 | ipcRenderer.on('checkCopilot', function () {
161 | if (currentWinBuild < 23493) {
162 | ipcRenderer.send('no-copilot');
163 | }
164 | })
165 |
166 | ipcRenderer.on('user-enable-copilot', function () {
167 | $('.copilot').removeClass('user-disable')
168 | })
169 |
170 | ipcRenderer.on('user-disable-copilot', function () {
171 | $('.copilot').addClass('user-disable')
172 | })
173 |
174 | ipcRenderer.on('toggleUserMenu', function () {
175 | userMenu = localStorage.getItem('userMenuPref')
176 | if (userMenu == 'true') {
177 | $('.profileBtn').removeClass('hide')
178 | } else if (userMenu == 'false') {
179 | $('.profileBtn').addClass('hide')
180 | }
181 | })
182 |
183 | function currentTime() {
184 | let date = new Date();
185 | let hh = date.getHours();
186 | let mm = date.getMinutes();
187 | let smallDay = date.getDate();
188 | let smallMonth = date.getMonth() + 1;
189 | const days = [
190 | "Sun",
191 | "Mon",
192 | "Tue",
193 | "Wed",
194 | "Thu",
195 | "Fri",
196 | "Sat",
197 | ];
198 |
199 | const currentDay = days[date.getDay()];
200 |
201 | if (hh == 0) {
202 | hh = 12;
203 | }
204 | if (hh > 12) {
205 | hh = hh - 12;
206 | }
207 |
208 | hh = (hh < 10) ? "0" + hh : hh;
209 | mm = (mm < 10) ? "0" + mm : mm;
210 | smallMonth = (smallMonth < 10) ? "0" + smallMonth : smallMonth;
211 | smallDay = (smallDay < 10) ? "0" + smallDay : smallDay;
212 |
213 | let time = hh + ":" + mm;
214 | let dateString = currentDay + " " + smallMonth + "/" + smallDay;
215 |
216 | $('.date').text(dateString);
217 | $('.time').text(time);
218 | let t = setTimeout(function () { currentTime() }, 1000);
219 | }
220 |
221 | function checkKey() {
222 | if (navigator.geolocation) {
223 | console.log("Geolocation is supported.");
224 | getLatLon().catch((error) => {
225 | alert(`Error: ${error.message}`);
226 | });
227 | } else {
228 | console.log("Geolocation is not enabled and/or supported by this device.");
229 | }
230 | ipcRenderer.send('win-show');
231 | newWeatherBalloon(lat, lon);
232 | window.setInterval("newWeatherBalloon(lat, lon);", 10000);
233 | }
234 |
235 | function checkOobe() {
236 | if (localStorage.getItem('oobe') == 'done') {
237 |
238 | } else {
239 | ipcRenderer.send('show-keyfield');
240 | }
241 | }
242 |
243 | async function getLatLon() {
244 | try {
245 | const response = await fetch(`http://ip-api.com/json`);
246 | const { lat, lon } = await response.json();
247 |
248 | localStorage.setItem("locLat", lat);
249 | localStorage.setItem("locLon", lon);
250 | } catch (error) {
251 | console.log(error);
252 | throw error;
253 | }
254 | }
255 |
256 | function newWeatherBalloon() {
257 | fetch('https://api.open-meteo.com/v1/forecast?latitude=' + lat + '&longitude=' + lon + '&daily=weathercode¤t_weather=true&timezone=auto&forecast_days=1')
258 | .then(function (resp) { return resp.json() }) // Convert data to json
259 | .then(function (data) {
260 | $('.weather').show();
261 | setTimeout(newDrawWeather(data), 10000);
262 | })
263 | .catch(function (error) {
264 | location.reload();
265 | blankFunction();
266 | console.error('An error occurred:', error);
267 | });
268 | }
269 |
270 | function newDrawWeather(d) {
271 | var feel = weatherCodes[d.current_weather.weathercode];
272 | var theme;
273 | var tempPref;
274 | if (tempUnit == 'c') {
275 | tempPref = Math.round(d.current_weather.temperature);
276 | } else if (tempUnit == 'f') {
277 | tempPref = Math.round((d.current_weather.temperature * 1.8) + 32);
278 | }
279 | document.getElementById('wtemp').innerText = tempPref + '°';
280 | var wIcon = d.current_weather.weathercode;
281 | if ($(':root').hasClass('dark-theme')) {
282 | theme = 'dark';
283 | } else {
284 | theme = 'light';
285 | }
286 | $('.wicon').attr('src', "resc/imgs/weather/" + weatherCodes[d.current_weather.weathercode].replace(/\s+/g, "").toLowerCase() + '.svg');
287 | $('.wfeel').text(feel)
288 | }
289 |
290 | function blankFunction() {
291 | $('.weather').hide();
292 | }
293 |
294 | function toTitleCase(str) {
295 | return str.replace(/\b\w/g, function (match) {
296 | return match.toUpperCase();
297 | });
298 | }
299 |
300 | function appLblCheck() {
301 | if ($('.appLabel').width() <= 30 || $('.appLabel').text().includes('No app selected')) {
302 | $('.appLabel').addClass('hide');
303 | $('.appIcn').addClass('hide');
304 | $('.searchBox').text('Type here to search the web, apps, and your device')
305 | } else {
306 | $('.appLabel').removeClass('hide');
307 | $('.appIcn').removeClass('hide');
308 | // $('.searchBox').text('Type here to search')
309 | }
310 | }
311 |
312 | function changeTextColor() {
313 | var backgroundColor = $(".backgroundFill").css("background-color");
314 | var rgb = backgroundColor.match(/\d+/g);
315 | var brightness = (299 * rgb[0] + 587 * rgb[1] + 114 * rgb[2]) / 1000;
316 | var textColor = brightness > 128 ? "black" : "white";
317 | var shadowColor = brightness > 128 ? "#00000010" : "transparent";
318 | $(':root').css('--global-text', textColor);
319 | $(':root').css('--shadow-color', shadowColor);
320 | }
321 |
322 | $('.statIcons').on('click', function () {
323 | ipcRenderer.send('hotKey', 'command', 'a');
324 | })
325 |
326 | $('.timeDate').on('click', function () {
327 | ipcRenderer.send('hotKey', 'command', 'n');
328 | })
329 |
330 | $('.mainBar').on('click', function () {
331 | if (altSearch == 'y') {
332 | ipcRenderer.send('hotKey', 'alt', 'space');
333 | } else {
334 | ipcRenderer.send('hotKey', 'command', 's');
335 | }
336 | })
337 |
338 | $('.weather').on('click', function () {
339 | ipcRenderer.send('hotKey', 'command', 'w');
340 | })
341 |
342 | $('.copilot').on('click', function () {
343 | ipcRenderer.send('hotKey', 'command', 'c');
344 | })
345 |
346 | $('.profileBtn').on('click', function () {
347 | let themeToSend
348 | if (themePreference == 'light-theme') {
349 | themeToSend = 'light'
350 | } else if (themePreference == 'dark-theme') {
351 | themeToSend = 'dark'
352 | }
353 | ipcRenderer.send('show-popup', themeToSend);
354 | })
355 |
356 | $('.dropDownBtn').on('click', function () {
357 | // var inputCtrl = localStorage.getItem('ctrl2');
358 | // if (inputCtrl == 'true') {
359 | // ipcRenderer.send('show-popup');
360 | // } else {
361 | ipcRenderer.send('show-tray-popup')
362 | // }
363 | })
364 |
365 | if (navigator.getBattery()) {
366 | setInterval(() => {
367 | navigator.getBattery().then((battery) => {
368 | var battNum = battery.level * 100;
369 | $('.batteryIcn .fill').width(battNum + "%");
370 |
371 | if (battNum <= 10) {
372 | $('.batteryIcn').text('');
373 | } else if (battNum <= 20) {
374 | $('.batteryIcn').text('');
375 | } else if (battNum <= 30) {
376 | $('.batteryIcn').text('');
377 | } else if (battNum <= 40) {
378 | $('.batteryIcn').text('');
379 | } else if (battNum <= 50) {
380 | $('.batteryIcn').text('');
381 | } else if (battNum <= 60) {
382 | $('.batteryIcn').text('');
383 | } else if (battNum <= 70) {
384 | $('.batteryIcn').text('');
385 | } else if (battNum <= 80) {
386 | $('.batteryIcn').text('');
387 | } else if (battNum <= 90) {
388 | $('.batteryIcn').text('');
389 | } else if (battNum <= 100) {
390 | $('.batteryIcn').text('');
391 | }
392 |
393 | batteryIsCharging = battery.charging;
394 | battery.addEventListener("chargingchange", () => {
395 | batteryIsCharging = battery.charging;
396 | });
397 | if (batteryIsCharging) {
398 | $('.batteryIcn').text('');
399 | }
400 | });
401 | }, 5000);
402 | } else {
403 | $('.batteryIcn').hide();
404 | }
405 |
406 | ipcRenderer.on('winTitle', (_event, name, title) => {
407 | // appLblCheck();
408 | // console.log(data)
409 | $('.appLabel p.name').text(name);
410 | $('.appLabel p.title').text(title);
411 |
412 | if (name == "Visual Studio Code"
413 | || name == "Microsoft Edge"
414 | || name == "Notepad.exe"
415 | || name == "Discord"
416 | || name == "mspaint.exe"
417 | || name == "Google Chrome"
418 | || name == title) {
419 | $('.appLabel').addClass('notitle')
420 | $('p.name').hide();
421 | $('.appLabel .sep').hide();
422 | } else {
423 | $('.appLabel').removeClass('notitle')
424 | $('p.name').show();
425 | $('.appLabel .sep').show();
426 | }
427 |
428 | if (title == "") {
429 | $('.appLabel').addClass('notitle')
430 | } else {
431 | $('.appLabel').removeClass('notitle')
432 | }
433 | appLblCheck();
434 | })
435 |
436 | ipcRenderer.on('get-theme', function () {
437 | let themeToSend
438 | if (themePreference == 'light-theme') {
439 | themeToSend = 'light'
440 | } else if (themePreference == 'dark-theme') {
441 | themeToSend = 'dark'
442 | }
443 | ipcRenderer.send('got-theme-sw', themeToSend);
444 | })
445 |
446 | ipcRenderer.on('desktop', function () {
447 | $('.mainBar').addClass('desktop')
448 | $('.searchBox').text('Type here to search the web, apps, and your device')
449 | })
450 |
451 | ipcRenderer.on('no-desktop', function () {
452 | $('.mainBar').removeClass('desktop')
453 | $('.searchBox').text('Type here to search')
454 | })
455 |
456 | ipcRenderer.on('checkBackground', (_event) => {
457 | if (bg == null) {
458 | localStorage.setItem('background', false);
459 | } else if (bg == 'true') {
460 | $('.backgroundFill').addClass('enabled')
461 | } else if (bg == 'false') {
462 | $('.backgroundFill').removeClass('enabled')
463 | }
464 | })
465 |
466 | ipcRenderer.on('backColor', (_event, color) => {
467 | $('.backgroundFill').css('background-color', color);
468 | changeTextColor();
469 | })
470 |
471 | ipcRenderer.on('icon-data', (_event, data) => {
472 | $('.aiImg').attr('src', `data:image/png;base64,${data}`);
473 | });
474 |
475 | ipcRenderer.on('toggleTheme', function () {
476 | $(':root').toggleClass('light-theme dark-theme')
477 | location.reload();
478 | })
479 |
480 | ipcRenderer.on('toggleUserMenu', function () {
481 | if (userMenu == null) {
482 | localStorage.setItem('userMenuPref', true);
483 | } else if (userMenu == 'true') {
484 | $('.profileBtn').removeClass('hide')
485 | } else if (userMenu == 'false') {
486 | $('.profileBtn').addClass('hide')
487 | }
488 | })
489 |
490 | ipcRenderer.on('toggleBackground', (_event) => {
491 | $('.backgroundFill').toggleClass('enabled');
492 | ipcRenderer.send('set-bg-state', $('.backgroundFill').hasClass('enabled'));
493 | })
494 |
495 | ipcRenderer.on('toggleSearch', function () {
496 | $('.search .icn').toggleClass('img');
497 | })
498 |
499 | ipcRenderer.on('disableBackground', (_event) => {
500 | $('.backgroundFill').removeClass('enabled');
501 | })
502 |
503 | ipcRenderer.on('volumeLevel', (event, volumeLevel) => {
504 | console.log('System volume level:', volumeLevel);
505 | if (volumeLevel <= 1) {
506 | $('.volIcon').text('')
507 | $('.volIcon').addClass('mute')
508 | } else if (volumeLevel <= 5) {
509 | $('.volIcon').text('')
510 | $('.volIcon').removeClass('mute')
511 | } else if (volumeLevel <= 33) {
512 | $('.volIcon').text('')
513 | $('.volIcon').removeClass('mute')
514 | } else if (volumeLevel <= 66) {
515 | $('.volIcon').text('')
516 | $('.volIcon').removeClass('mute')
517 | } else if (volumeLevel <= 100) {
518 | $('.volIcon').text('')
519 | $('.volIcon').removeClass('mute')
520 | }
521 | });
522 |
523 | ipcRenderer.on('reset-app', function () {
524 | localStorage.clear();
525 | })
526 |
527 | ipcRenderer.on('main-console-forward', (_event, errorMsg) => {
528 | console.log(errorMsg);
529 | })
--------------------------------------------------------------------------------
/resc/branding/brand_ico.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Futur3Sn0w/12Bar/5599be012bc12382a147bc87660f814fd4cde8e0/resc/branding/brand_ico.ico
--------------------------------------------------------------------------------
/resc/branding/brand_png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Futur3Sn0w/12Bar/5599be012bc12382a147bc87660f814fd4cde8e0/resc/branding/brand_png.png
--------------------------------------------------------------------------------
/resc/fonts/FluentSystemIcons-Filled.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Futur3Sn0w/12Bar/5599be012bc12382a147bc87660f814fd4cde8e0/resc/fonts/FluentSystemIcons-Filled.ttf
--------------------------------------------------------------------------------
/resc/fonts/FluentSystemIcons-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Futur3Sn0w/12Bar/5599be012bc12382a147bc87660f814fd4cde8e0/resc/fonts/FluentSystemIcons-Regular.ttf
--------------------------------------------------------------------------------
/resc/fonts/SegoeIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Futur3Sn0w/12Bar/5599be012bc12382a147bc87660f814fd4cde8e0/resc/fonts/SegoeIcons.ttf
--------------------------------------------------------------------------------
/resc/imgs/copilot.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resc/imgs/search/dark.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resc/imgs/search/light.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resc/imgs/weather/clearsky.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/resc/imgs/weather/densedrizzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/densefreezingdrizzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/depositingrimefog.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/foggy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/heavyfreezingrain.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/heavyrain.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/resc/imgs/weather/heavysnowfall.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/resc/imgs/weather/heavysnowshowers.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/resc/imgs/weather/lightdrizzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/lightfreezingdrizzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/lightfreezingrain.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/mainlyclear.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/resc/imgs/weather/moderatedrizzle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/moderaterain.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/resc/imgs/weather/moderaterainshowers.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/resc/imgs/weather/moderatesnowfall.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/resc/imgs/weather/overcast.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/resc/imgs/weather/partlycloudy.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/resc/imgs/weather/slightrain.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/resc/imgs/weather/slightrainshowers.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/resc/imgs/weather/slightsnowfall.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resc/imgs/weather/slightsnowshowers.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/resc/imgs/weather/snowgrains.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resc/imgs/weather/thunderstormwithhail.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/resc/imgs/weather/thunderstormwithheavyhail.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/resc/imgs/weather/thunderstormwithslighthail.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/resc/imgs/weather/violentrainshowers.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------