SamSunder commited on
Commit
a98f3fa
1 Parent(s): 141aacc

Added settings in settings page and added search link to navbar

Browse files
public/static/colorschemes/catppuccin-mocha.css CHANGED
@@ -2,8 +2,10 @@
2
  --bg: #1e1e2e;
3
  --fg: #cdd6f4;
4
  --1: #45475a;
 
5
  --2: #f38ba8;
6
  --3: #a6e3a1;
 
7
  --4: #f9e2af;
8
  --5: #89b4fa;
9
  --6: #f5c2e7;
 
2
  --bg: #1e1e2e;
3
  --fg: #cdd6f4;
4
  --1: #45475a;
5
+ --1_1: #4f5169;
6
  --2: #f38ba8;
7
  --3: #a6e3a1;
8
+ --3_1: #7ce073;
9
  --4: #f9e2af;
10
  --5: #89b4fa;
11
  --6: #f5c2e7;
public/static/settings.js ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function toggleSelectOptions(elem, state) {
2
+ elem.classList.remove("invalid");
3
+ try { elem.parentElement.querySelector('.errTxt').remove();} catch (error) {}
4
+ let options = elem.querySelector('.options');
5
+ const pos = elem.getBoundingClientRect();
6
+ const windowWidth = document.getElementsByTagName("body")[0].clientHeight;
7
+ if(pos.y + 250 > windowWidth) {
8
+ options.style.bottom = '40px';
9
+ } else { options.style.bottom = null }
10
+ options.style.display = state != 'close' ? getComputedStyle(options).display == 'none' ? 'block': 'none' : 'none';
11
+ }
12
+
13
+ let selectElements = document.querySelectorAll('.custom-select');
14
+ Array.from(selectElements).forEach(element => {
15
+ element.childNodes[0].nodeValue = (element.hasAttribute('data-multiple') ? element.getAttribute('data-placeholder') : element.getAttribute('data-default'));
16
+ element.addEventListener('click', (e) => {if (e.target === element) toggleSelectOptions(element)});
17
+ element.addEventListener('focusout', (e) => {if (e.target === element) toggleSelectOptions(element, 'close')});
18
+ });
19
+
20
+ function removeSelectOption(elem, optionId) {
21
+ let option = document.querySelector('#'+optionId);
22
+ let selectDiv = option.closest('.custom-select');
23
+ let input = document.querySelector(`[name="${selectDiv.getAttribute('data-input')}"]`);
24
+ elem.parentElement.remove();
25
+ option.removeAttribute('selected');
26
+ option.querySelector('svg').remove();
27
+ input.value = input.value.replace(option.getAttribute('data-value') ? option.getAttribute('data-value') + "," : '', '');
28
+ }
29
+
30
+ function multiSelectClickHandler(elem) {
31
+ let selectDiv = elem.closest('.custom-select');
32
+ let input = document.querySelector(`[name="${selectDiv.getAttribute('data-input')}"]`);
33
+ if (!elem.hasAttribute('selected')) {
34
+ document.querySelector('#'+elem.closest(".custom-select").getAttribute("data-showDivId")).innerHTML +=
35
+ `<span class='selected-multiple-option' id='${elem.getAttribute('id')}-selected'>${elem.innerText} &ensp;
36
+ <span onclick="removeSelectOption(this, '${elem.getAttribute('id')}')">
37
+ <svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M376.6 84.5c11.3-13.6 9.5-33.8-4.1-45.1s-33.8-9.5-45.1 4.1L192 206 56.6 43.5C45.3 29.9 25.1 28.1 11.5 39.4S-3.9 70.9 7.4 84.5L150.3 256 7.4 427.5c-11.3 13.6-9.5 33.8 4.1 45.1s33.8 9.5 45.1-4.1L192 306 327.4 468.5c11.3 13.6 31.5 15.4 45.1 4.1s15.4-31.5 4.1-45.1L233.7 256 376.6 84.5z"/>
38
+ </svg>
39
+ </span>
40
+ </span>`;
41
+ elem.setAttribute('selected', '');
42
+ elem.innerHTML = `${elem.innerText}
43
+ <svg fill="currentColor" height="1.5rem" width="1.5rem" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 490 490" xml:space="preserve">
44
+ <g id="SVGRepo_iconCarrier"> <polygon points="452.253,28.326 197.831,394.674 29.044,256.875 0,292.469 207.253,461.674 490,54.528 "></polygon> </g></svg>`
45
+
46
+ // Code where value in inserted into input
47
+ input.value += elem.getAttribute('data-value') ? elem.getAttribute('data-value') + "," : '';
48
+ } else {
49
+ // similar to removeSelectOption method
50
+ document.querySelector('#'+elem.getAttribute('id')+'-selected').remove();
51
+ elem.removeAttribute('selected');
52
+ elem.querySelector('svg').remove();
53
+
54
+ input.value = input.value.replace(elem.getAttribute('data-value') ? elem.getAttribute('data-value') + "," : '', '');
55
+ }
56
+
57
+ }
58
+
59
+ function singleSelectClickHandler(elem) {
60
+ let selectDiv = elem.closest('.custom-select');
61
+ let selectedOption = selectDiv.querySelector('span[selected]');
62
+ let input = document.querySelector(`[name="${selectDiv.getAttribute('data-input')}"]`);
63
+ if (!elem.hasAttribute('selected')) {
64
+ if (selectedOption != null) {
65
+ selectedOption.removeAttribute('selected');
66
+ selectedOption.querySelector('svg').remove();
67
+ }
68
+ elem.setAttribute('selected', '');
69
+ elem.innerHTML = `${elem.innerText}
70
+ <svg fill="currentColor" height="1.5rem" width="1.5rem" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 490 490" xml:space="preserve">
71
+ <g id="SVGRepo_iconCarrier"> <polygon points="452.253,28.326 197.831,394.674 29.044,256.875 0,292.469 207.253,461.674 490,54.528 "></polygon> </g></svg>`
72
+ // Code where value is inserted to input
73
+ input.value = elem.getAttribute('data-value') ? elem.getAttribute('data-value') : '';
74
+ selectDiv.childNodes[0].nodeValue = elem.innerText;
75
+ } else {
76
+ elem.removeAttribute('selected');
77
+ elem.querySelector('svg').remove();
78
+ selectDiv.childNodes[0].nodeValue = selectDiv.getAttribute('data-default');
79
+
80
+ input.value = "";
81
+ }
82
+ selectDiv.blur();
83
+ }
84
+
85
+ let multiSelectOptions = document.querySelectorAll('.custom-select[data-multiple="1"]>.options span');
86
+ for (let i = 0; i < multiSelectOptions.length; i++) {
87
+ multiSelectOptions[i].addEventListener('click', () => {multiSelectClickHandler(multiSelectOptions[i])});
88
+ multiSelectOptions[i].setAttribute('id', 'option-'+i.toString());
89
+ }
90
+
91
+ let singleSelectOptions = document.querySelectorAll('.custom-select:not([data-multiple="1"])>.options span');
92
+ for (let i = 0; i < singleSelectOptions.length; i++) {
93
+ singleSelectOptions[i].addEventListener('click', () => {singleSelectClickHandler(singleSelectOptions[i])});
94
+ singleSelectOptions[i].setAttribute('id', 'option-'+i.toString());
95
+ }
96
+
97
+ function selectAllHandler(elem) {
98
+ let options = elem.parentElement.querySelectorAll('.custom-select[data-multiple="1"]>.options span');
99
+ Array.from(options).forEach((option) => {
100
+ try {
101
+ let selectedShownElem = document.getElementById(option.getAttribute('id')+'-selected');
102
+ removeSelectOption(selectedShownElem.querySelector('span'), option.getAttribute('id'))
103
+ } catch (err) {}
104
+ if (elem.innerText == 'select all') { option.click() };
105
+ });
106
+ elem.innerText = elem.innerText == 'select all' ? 'deselect all' : 'select all'
107
+ }
108
+
109
+
110
+ // On settings form submit
111
+ function submitSettings() {
112
+ let form = document.settings;
113
+ document.querySelectorAll('.errTxt').forEach(e => e.remove());
114
+ for(let i = 0; i < form.elements.length; i++) {
115
+ let input = form.elements[i];
116
+ if (input.value == "" && input.hasAttribute('required')) {
117
+ let elem = input.parentElement.querySelector('[takeInput]')
118
+ let errTxt = document.createElement('p')
119
+ errTxt.classList.add('errTxt')
120
+ errTxt.innerText = 'This setting can\'t be empty!!'
121
+ elem.classList.add('invalid');
122
+ elem.parentElement.insertBefore(errTxt, elem);
123
+ }
124
+ }
125
+ return false;
126
+ }
127
+
128
+ document.querySelectorAll('.settings-sidebar .set-name').forEach(filter => {
129
+ let target = filter.getAttribute('data-detailId');
130
+ filter.addEventListener('click', () => {
131
+ try {document.querySelector('.set-name.active').classList.remove('active');} catch(e){}
132
+ filter.classList.add('active');
133
+ if (target == 'all') {
134
+ document.querySelectorAll('.set-item').forEach((elem) => {
135
+ elem.style.display = 'block';
136
+ })
137
+ return;
138
+ }
139
+ document.querySelectorAll('.set-item[data-id="'+target+'"]').forEach((elem) => {
140
+ elem.style.display = 'block'
141
+ })
142
+ document.querySelectorAll('.set-item:not([data-id="'+target+'"])').forEach((elem) => {
143
+ elem.style.display = 'none'
144
+ })
145
+ })
146
+ })
147
+
148
+ function fadeOut(element) {
149
+ var op = 1; // initial opacity
150
+ var timer = setInterval(function () {
151
+ if (op <= 0.1){
152
+ clearInterval(timer);
153
+ element.style.display = 'none';
154
+ element.classList.add('fade');
155
+ }
156
+ element.style.opacity = op;
157
+ element.style.filter = 'alpha(opacity=' + op * 100 + ")";
158
+ op -= op * 0.1;
159
+ }, 50);
160
+ }
161
+
162
+ function fadeIn(element) {
163
+ var op = 0.1; // initial opacity
164
+ element.style.display = 'block';
165
+ var timer = setInterval(function () {
166
+ if (op >= 1){
167
+ clearInterval(timer);
168
+ }
169
+ element.style.opacity = op;
170
+ element.style.filter = 'alpha(opacity=' + op * 100 + ")";
171
+ op += op * 0.1;
172
+ }, 10);
173
+ }
public/static/themes/simple.css CHANGED
@@ -263,41 +263,212 @@ footer {
263
 
264
  /* Styles for the about page */
265
 
266
- .about-container article{
267
- font-size: 1.5rem;
268
- color:var(--fg);
269
- padding-bottom: 10px;
270
- }
271
-
272
- .about-container article h1{
273
- color: var(--2);
274
- font-size: 2.8rem;
275
- }
276
-
277
- .about-container article div{
278
- padding-bottom: 15px;
279
- }
280
-
281
- .about-container a{
282
- color:var(--3);
283
- }
284
-
285
- .about-container article h2{
286
- color: var(--3);
287
- font-size: 1.8rem;
288
- padding-bottom: 10px;
289
- }
290
-
291
- .about-container p{
292
- color:var(--fg);
293
- font-size: 1.6rem;
294
- padding-bottom: 10px;
295
- }
296
-
297
- .about-container h3{
298
- font-size: 1.5rem;
299
- }
300
-
301
- .about-container {
302
- width: 80%;
303
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
263
 
264
  /* Styles for the about page */
265
 
266
+ .about-container article{
267
+ font-size: 1.5rem;
268
+ color:var(--fg);
269
+ padding-bottom: 10px;
270
+ }
271
+
272
+ .about-container article h1{
273
+ color: var(--2);
274
+ font-size: 2.8rem;
275
+ }
276
+
277
+ .about-container article div{
278
+ padding-bottom: 15px;
279
+ }
280
+
281
+ .about-container a{
282
+ color:var(--3);
283
+ }
284
+
285
+ .about-container article h2{
286
+ color: var(--3);
287
+ font-size: 1.8rem;
288
+ padding-bottom: 10px;
289
+ }
290
+
291
+ .about-container p{
292
+ color:var(--fg);
293
+ font-size: 1.6rem;
294
+ padding-bottom: 10px;
295
+ }
296
+
297
+ .about-container h3{
298
+ font-size: 1.5rem;
299
+ }
300
+
301
+ .about-container {
302
+ width: 80%;
303
+ }
304
+
305
+ .settings {
306
+ margin: 2rem;
307
+ width: 80%;
308
+ height: 100%;
309
+ color: var(--fg);
310
+ }
311
+
312
+ .settings h1 {
313
+ color: var(--2);
314
+ font-size: 2.5rem;
315
+ }
316
+
317
+
318
+ .settings hr {
319
+ border-color: var(--3);
320
+ margin: .3rem 0 1rem 0;
321
+ }
322
+
323
+ .settings-view {
324
+ display: flex;
325
+ flex: 1 0 auto;
326
+ }
327
+
328
+ .settings-sidebar {
329
+ width: 25%;
330
+ height: 100%;
331
+ }
332
+
333
+ .settings-sidebar .set-name {
334
+ cursor: pointer;
335
+ font-size: 2rem;
336
+ display: block;
337
+ margin-right: .5rem;
338
+ margin-left: -.7rem;
339
+ padding: .7rem;
340
+ border-radius: 5px;
341
+ font-weight: bold;
342
+ }
343
+
344
+ .settings-sidebar .set-name:hover, .settings-sidebar .set-name.active {
345
+ background-color: var(--1_1);
346
+ }
347
+
348
+ .settings-detail {
349
+ border-left: 1.5px solid var(--3);
350
+ padding-left: 3rem;
351
+ margin-top: .7rem;
352
+ }
353
+
354
+ .settings-detail .set-item {
355
+ margin: 2rem 0;
356
+ margin-top: 0;
357
+ }
358
+
359
+ .settings-detail .set-name {
360
+ font-size: 2rem;
361
+ font-weight: bold;
362
+ color: var(--4)
363
+ }
364
+
365
+ .settings-detail .set-desc {
366
+ font-size: 1.5rem;
367
+ margin-bottom: .5rem;
368
+ }
369
+
370
+ .custom-select, .options {
371
+ font-size: 1.5rem;
372
+ background-color: var(--bg);
373
+ width: 250px;
374
+ padding: 1rem 1.7rem;
375
+ border-radius: 7px;
376
+ }
377
+
378
+ .custom-select {
379
+ position: relative;
380
+ vertical-align: middle;
381
+ margin: .7rem 0;
382
+ }
383
+
384
+ .custom-select.invalid {
385
+ border: 1px solid red;
386
+ }
387
+
388
+ .custom-select svg {
389
+ float: right;
390
+ }
391
+
392
+ .options {
393
+ display: none;
394
+ position: absolute;
395
+ left: 0;
396
+ margin-top: 1.3rem;
397
+ width: 100%;
398
+ padding: .7rem 1rem;
399
+ cursor: pointer;
400
+ z-index: 3;
401
+ max-height: 15rem;
402
+ overflow-y: auto;
403
+ }
404
+
405
+ .options span {
406
+ display: block;
407
+ padding: 1rem;
408
+ width: 100%;
409
+ border-radius: 5px;
410
+ vertical-align: middle;
411
+ }
412
+
413
+ .options span:hover {
414
+ background-color: var(--1_1);
415
+ }
416
+
417
+ .selected-multiple-option {
418
+ padding: .8rem;
419
+ border-radius: 5px;
420
+ background-color: var(--bg);
421
+ margin: .5rem .3rem;
422
+ }
423
+
424
+ .selected-multiple-option svg {
425
+ width: 1.3rem;
426
+ height: 1.3rem;
427
+ vertical-align: middle;
428
+ margin-bottom: .5rem;
429
+ cursor: pointer;
430
+ }
431
+
432
+ .select-multiple-show {
433
+ margin: 1rem 0;
434
+ font-size: 1.5rem;
435
+ }
436
+
437
+ .underlined-text {
438
+ font-size: 1.7rem;
439
+ cursor: pointer;
440
+ margin-bottom: .5rem;
441
+ display: block;
442
+ }
443
+
444
+ .settings .submit-btn {
445
+ padding: 1rem 2rem;
446
+ font-size: 1.5rem;
447
+ background: var(--3);
448
+ color: var(--bg);
449
+ border-radius: .5rem;
450
+ border: 1px solid transparent;
451
+ font-weight: bold;
452
+ transition: background .5s ease-in;
453
+ cursor: pointer;
454
+ }
455
+
456
+ .settings .submit-btn:hover {
457
+ border: 1px solid var(--bg);
458
+ background: var(--3_1);
459
+ box-shadow: 0px 0px 2px 2px var(--fg);
460
+ }
461
+
462
+ .settings .submit-btn:active {
463
+ outline: none;
464
+ border: 2px solid var(--bg);
465
+ }
466
+
467
+ .errTxt {
468
+ color: white;
469
+ background: red;
470
+ padding: .5rem;
471
+ border-radius: 5px;
472
+ font-size: 1.3rem;
473
+ width: max-content;
474
+ }
public/templates/navbar.html CHANGED
@@ -1,5 +1,6 @@
1
  <nav>
2
  <ul>
 
3
  <li><a href="about">about</a></li>
4
  <li><a href="settings">settings</a></li>
5
  </ul>
 
1
  <nav>
2
  <ul>
3
+ <li><a href="/">search</a></li>
4
  <li><a href="about">about</a></li>
5
  <li><a href="settings">settings</a></li>
6
  </ul>
public/templates/settings.html CHANGED
@@ -1,5 +1,88 @@
1
  {{>header this}}
2
  <main class="settings">
3
- <h1>Page is under construction</h1>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  </main>
 
5
  {{>footer}}
 
1
  {{>header this}}
2
  <main class="settings">
3
+ <h1>Settings</h1>
4
+ <hr>
5
+ <div class="settings-view">
6
+ <div class="settings-sidebar">
7
+ <span class="set-name active" data-detailId="all">All</span>
8
+ <span class="set-name" data-detailId="searchEng">Search Engine</span>
9
+ <span class="set-name" data-detailId="theme">Theme</span>
10
+ </div>
11
+ <div class="settings-detail">
12
+ <form method="post" name="settings" onsubmit="return submitSettings();">
13
+ <!-- Search engine settings -->
14
+ <div class="set-item" data-id="searchEng">
15
+ <h3 class="set-name">Select search engines</h3>
16
+ <p class="set-desc">Select the search engines from the list of engines that you want results from</p>
17
+ <!-- Select element -->
18
+ <input name="search-engine" disabled style="display: none;" required></input>
19
+ <div id="engines-selected" class="select-multiple-show">
20
+ <span>Selected Engines: </span>
21
+ </div>
22
+ <div class="custom-select" tabindex="0" data-multiple="1" data-showDivId="engines-selected" data-input="search-engine" data-placeholder="Select" takeInput>
23
+ <svg viewBox="0 0 24 24" width="2rem" height="2rem" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
24
+ <path d="M6.1018 8C5.02785 8 4.45387 9.2649 5.16108 10.0731L10.6829 16.3838C11.3801 17.1806 12.6197 17.1806 13.3169 16.3838L18.8388 10.0731C19.5459 9.2649 18.972 8 17.898 8H6.1018Z"></path></svg>
25
+ <div class="options">
26
+ <span data-value="ddg">Duck duck go</span>
27
+ <span data-value="searx">Searx</span>
28
+ </div>
29
+ </div>
30
+ <u class="underlined-text" onclick="selectAllHandler(this)">select all</u>
31
+ <!-- End search select -->
32
+ </div>
33
+ <!-- End search engine setting -->
34
+
35
+ <!-- Theme selection settings -->
36
+ <div class="set-item" data-id="theme">
37
+ <h3 class="set-name">Select theme</h3>
38
+ <p class="set-desc">Select the theme from the available themes to be used in user interface</p>
39
+ <!-- Select element -->
40
+ <input name="theme" disabled style="display: none;" required></input>
41
+ <div class="custom-select" tabindex="0" data-input="theme" data-default="Select" takeInput>
42
+ <svg viewBox="0 0 24 24" width="2rem" height="2rem" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
43
+ <path d="M6.1018 8C5.02785 8 4.45387 9.2649 5.16108 10.0731L10.6829 16.3838C11.3801 17.1806 12.6197 17.1806 13.3169 16.3838L18.8388 10.0731C19.5459 9.2649 18.972 8 17.898 8H6.1018Z"></path>
44
+ </svg>
45
+ <div class="options">
46
+ <span data-value="simple">Simple</span>
47
+ </div>
48
+ </div>
49
+ <!-- End select element -->
50
+ </div>
51
+ <!-- End theme selection select -->
52
+
53
+ <!-- Color scheme selection settings -->
54
+ <div class="set-item" data-id="theme">
55
+ <h3 class="set-name">Select Color Scheme</h3>
56
+ <p class="set-desc">Select the color scheme for your theme to be used in user interface</p>
57
+ <!-- Select element -->
58
+ <input name="color-sch" disabled style="display: none;" required></input>
59
+ <div class="custom-select" tabindex="0" data-input="color-sch" data-default="Select" takeInput>
60
+ <svg viewBox="0 0 24 24" width="2rem" height="2rem" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
61
+ <path d="M6.1018 8C5.02785 8 4.45387 9.2649 5.16108 10.0731L10.6829 16.3838C11.3801 17.1806 12.6197 17.1806 13.3169 16.3838L18.8388 10.0731C19.5459 9.2649 18.972 8 17.898 8H6.1018Z"></path>
62
+ </svg>
63
+ <div class="options">
64
+ <span data-value="catppuccin-mocha">catppuccin-mocha</span>
65
+ <span data-value="dracula">dracula</span>
66
+ <span data-value="monokai">monokai</span>
67
+ <span data-value="nord">nord</span>
68
+ <span data-value="oceanic-next">oceanic-next</span>
69
+ <span data-value="solarized-dark">solarized-dark</span>
70
+ <span data-value="solarized-light">solarized-light</span>
71
+ <span data-value="tomorrow-night">tomorrow-night</span>
72
+ </div>
73
+ </div>
74
+ <!-- End select element -->
75
+ </div>
76
+ <!-- End color scheme selection -->
77
+
78
+ <!-- ACTIONS -->
79
+ <div class="actions">
80
+ <input type="submit" value="Submit" class="submit-btn">
81
+ </div>
82
+ <!-- End Actions -->
83
+ </form>
84
+ </div>
85
+ </div>
86
  </main>
87
+ <script src="static/settings.js"></script>
88
  {{>footer}}