CORVO-AI commited on
Commit
d2b2ea7
·
verified ·
1 Parent(s): cef421c

Delete templates/settings.html

Browse files
Files changed (1) hide show
  1. templates/settings.html +0 -1150
templates/settings.html DELETED
@@ -1,1150 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ar" dir="rtl">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>إعدادات نظام تحليل الفوركس الذكي</title>
7
- <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
8
- <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@400;500;700&display=swap" rel="stylesheet">
9
- <style>
10
- :root {
11
- --primary: #2c3e50;
12
- --primary-light: #34495e;
13
- --primary-dark: #1a2530;
14
- --secondary: #3498db;
15
- --secondary-light: #5dade2;
16
- --secondary-dark: #2980b9;
17
- --accent: #f39c12;
18
- --accent-light: #f5b041;
19
- --accent-dark: #d68910;
20
- --success: #2ecc71;
21
- --success-light: #58d68d;
22
- --success-dark: #27ae60;
23
- --danger: #e74c3c;
24
- --danger-light: #ec7063;
25
- --danger-dark: #c0392b;
26
- --warning: #f1c40f;
27
- --warning-light: #f4d03f;
28
- --warning-dark: #d4ac0d;
29
- --info: #1abc9c;
30
- --info-light: #48c9b0;
31
- --info-dark: #16a085;
32
- --text: #ecf0f1;
33
- --text-dark: #bdc3c7;
34
- --text-darker: #95a5a6;
35
- --background: #121a24;
36
- --card-bg: #1e2a38;
37
- --card-border: #2c3e50;
38
- --card-highlight: #3a506b;
39
- --shadow-color: rgba(0, 0, 0, 0.5);
40
- --glow-color: rgba(52, 152, 219, 0.4);
41
- }
42
-
43
- * {
44
- margin: 0;
45
- padding: 0;
46
- box-sizing: border-box;
47
- font-family: 'Tajawal', sans-serif;
48
- }
49
-
50
- body {
51
- background: var(--background);
52
- color: var(--text);
53
- min-height: 100vh;
54
- overflow-x: hidden;
55
- }
56
-
57
- /* Scrollbar Styling */
58
- ::-webkit-scrollbar {
59
- width: 8px;
60
- height: 8px;
61
- }
62
-
63
- ::-webkit-scrollbar-track {
64
- background: var(--primary-dark);
65
- border-radius: 4px;
66
- }
67
-
68
- ::-webkit-scrollbar-thumb {
69
- background: var(--secondary-dark);
70
- border-radius: 4px;
71
- }
72
-
73
- ::-webkit-scrollbar-thumb:hover {
74
- background: var(--secondary);
75
- }
76
-
77
- /* Password Modal */
78
- .password-modal {
79
- position: fixed;
80
- top: 0;
81
- left: 0;
82
- width: 100%;
83
- height: 100%;
84
- background: rgba(0, 0, 0, 0.85);
85
- backdrop-filter: blur(10px);
86
- display: flex;
87
- justify-content: center;
88
- align-items: center;
89
- z-index: 1000;
90
- opacity: 1;
91
- transition: opacity 0.5s ease;
92
- }
93
-
94
- .password-modal.hidden {
95
- opacity: 0;
96
- pointer-events: none;
97
- }
98
-
99
- .password-box {
100
- background: var(--card-bg);
101
- padding: 40px;
102
- border-radius: 20px;
103
- text-align: center;
104
- box-shadow: 0 20px 40px var(--shadow-color);
105
- max-width: 400px;
106
- width: 90%;
107
- border: 1px solid var(--card-border);
108
- transform: translateY(0);
109
- transition: transform 0.5s ease;
110
- position: relative;
111
- overflow: hidden;
112
- }
113
-
114
- .password-box::before {
115
- content: '';
116
- position: absolute;
117
- top: -50%;
118
- left: -50%;
119
- width: 200%;
120
- height: 200%;
121
- background: radial-gradient(circle, var(--secondary-dark) 0%, transparent 70%);
122
- opacity: 0.1;
123
- z-index: -1;
124
- animation: pulse 15s infinite;
125
- }
126
-
127
- @keyframes pulse {
128
- 0% { transform: translate(0, 0); opacity: 0.1; }
129
- 50% { transform: translate(-30px, -30px); opacity: 0.15; }
130
- 100% { transform: translate(0, 0); opacity: 0.1; }
131
- }
132
-
133
- .password-modal.hidden .password-box {
134
- transform: translateY(50px);
135
- }
136
-
137
- .password-box h2 {
138
- color: var(--text);
139
- margin-bottom: 30px;
140
- font-size: 28px;
141
- position: relative;
142
- display: inline-block;
143
- }
144
-
145
- .password-box h2::after {
146
- content: '';
147
- position: absolute;
148
- bottom: -10px;
149
- left: 0;
150
- width: 100%;
151
- height: 3px;
152
- background: linear-gradient(to right, transparent, var(--secondary), transparent);
153
- }
154
-
155
- .password-input {
156
- width: 100%;
157
- padding: 16px 20px;
158
- border: 2px solid var(--card-border);
159
- background: var(--primary-dark);
160
- border-radius: 12px;
161
- font-size: 16px;
162
- margin-bottom: 25px;
163
- text-align: center;
164
- color: var(--text);
165
- transition: all 0.3s ease;
166
- outline: none;
167
- }
168
-
169
- .password-input:focus {
170
- border-color: var(--secondary);
171
- box-shadow: 0 0 0 3px var(--glow-color);
172
- }
173
-
174
- .password-btn {
175
- background: linear-gradient(135deg, var(--secondary), var(--secondary-dark));
176
- color: white;
177
- border: none;
178
- padding: 16px 30px;
179
- border-radius: 12px;
180
- font-size: 16px;
181
- font-weight: 600;
182
- cursor: pointer;
183
- width: 100%;
184
- transition: all 0.3s ease;
185
- position: relative;
186
- overflow: hidden;
187
- }
188
-
189
- .password-btn::before {
190
- content: '';
191
- position: absolute;
192
- top: 0;
193
- left: -100%;
194
- width: 100%;
195
- height: 100%;
196
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
197
- transition: all 0.5s ease;
198
- }
199
-
200
- .password-btn:hover::before {
201
- left: 100%;
202
- }
203
-
204
- .password-btn:hover {
205
- background: linear-gradient(135deg, var(--secondary-light), var(--secondary));
206
- transform: translateY(-2px);
207
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
208
- }
209
-
210
- .container {
211
- max-width: 1200px;
212
- margin: 0 auto;
213
- padding: 20px;
214
- opacity: 0;
215
- transform: translateY(20px);
216
- transition: opacity 0.5s ease, transform 0.5s ease;
217
- }
218
-
219
- .container.visible {
220
- opacity: 1;
221
- transform: translateY(0);
222
- }
223
-
224
- .container.hidden {
225
- display: none !important;
226
- }
227
-
228
- .header {
229
- padding: 20px 0;
230
- border-bottom: 1px solid var(--card-border);
231
- margin-bottom: 30px;
232
- display: flex;
233
- align-items: center;
234
- justify-content: space-between;
235
- flex-wrap: wrap;
236
- gap: 20px;
237
- }
238
-
239
- .logo {
240
- display: flex;
241
- align-items: center;
242
- gap: 15px;
243
- }
244
-
245
- .logo-icon {
246
- font-size: 40px;
247
- color: var(--accent);
248
- background: var(--primary-dark);
249
- width: 70px;
250
- height: 70px;
251
- display: flex;
252
- align-items: center;
253
- justify-content: center;
254
- border-radius: 16px;
255
- position: relative;
256
- overflow: hidden;
257
- }
258
-
259
- .logo-icon::after {
260
- content: '';
261
- position: absolute;
262
- width: 100%;
263
- height: 30%;
264
- background: linear-gradient(to bottom, var(--accent-light), transparent);
265
- top: 0;
266
- left: 0;
267
- opacity: 0.3;
268
- }
269
-
270
- .logo-text h1 {
271
- font-size: clamp(24px, 5vw, 32px);
272
- font-weight: 700;
273
- margin-bottom: 5px;
274
- background: linear-gradient(to right, var(--secondary-light), var(--accent-light));
275
- -webkit-background-clip: text;
276
- -webkit-text-fill-color: transparent;
277
- position: relative;
278
- }
279
-
280
- .logo-text p {
281
- font-size: 14px;
282
- color: var(--text-dark);
283
- font-weight: 500;
284
- }
285
-
286
- .back-btn {
287
- background: linear-gradient(135deg, var(--secondary), var(--secondary-dark));
288
- color: white;
289
- padding: 12px 25px;
290
- border: none;
291
- border-radius: 12px;
292
- text-decoration: none;
293
- font-size: 16px;
294
- font-weight: 600;
295
- display: inline-flex;
296
- align-items: center;
297
- gap: 10px;
298
- transition: all 0.3s ease;
299
- position: relative;
300
- overflow: hidden;
301
- }
302
-
303
- .back-btn::before {
304
- content: '';
305
- position: absolute;
306
- top: 0;
307
- left: -100%;
308
- width: 100%;
309
- height: 100%;
310
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
311
- transition: all 0.5s ease;
312
- }
313
-
314
- .back-btn:hover::before {
315
- left: 100%;
316
- }
317
-
318
- .back-btn:hover {
319
- transform: translateY(-3px);
320
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
321
- }
322
-
323
- .settings-section {
324
- background: var(--card-bg);
325
- border-radius: 20px;
326
- padding: 30px;
327
- margin-bottom: 30px;
328
- box-shadow: 0 15px 35px var(--shadow-color);
329
- border: 1px solid var(--card-border);
330
- position: relative;
331
- overflow: hidden;
332
- }
333
-
334
- .settings-section::before {
335
- content: '';
336
- position: absolute;
337
- top: 0;
338
- left: 0;
339
- width: 100%;
340
- height: 5px;
341
- background: linear-gradient(to right, var(--secondary), var(--accent));
342
- }
343
-
344
- .section-header {
345
- display: flex;
346
- align-items: center;
347
- margin-bottom: 25px;
348
- padding-bottom: 15px;
349
- border-bottom: 1px solid var(--card-border);
350
- }
351
-
352
- .section-title {
353
- font-size: 22px;
354
- font-weight: 700;
355
- color: var(--text);
356
- display: flex;
357
- align-items: center;
358
- gap: 12px;
359
- }
360
-
361
- .section-title i {
362
- color: var(--accent);
363
- font-size: 24px;
364
- }
365
-
366
- .form-grid {
367
- display: grid;
368
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
369
- gap: 25px;
370
- }
371
-
372
- .form-group {
373
- margin-bottom: 20px;
374
- }
375
-
376
- .form-group label {
377
- display: block;
378
- font-weight: 600;
379
- margin-bottom: 10px;
380
- color: var(--text);
381
- font-size: 15px;
382
- }
383
-
384
- .form-control {
385
- width: 100%;
386
- padding: 15px;
387
- border: 2px solid var(--card-border);
388
- background: var(--primary-dark);
389
- border-radius: 12px;
390
- font-size: 15px;
391
- color: var(--text);
392
- transition: all 0.3s ease;
393
- outline: none;
394
- }
395
-
396
- .form-control:focus {
397
- border-color: var(--secondary);
398
- box-shadow: 0 0 0 3px var(--glow-color);
399
- }
400
-
401
- select.form-control {
402
- appearance: none;
403
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='%23bdc3c7' viewBox='0 0 16 16'%3E%3Cpath d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/%3E%3C/svg%3E");
404
- background-repeat: no-repeat;
405
- background-position: left 15px center;
406
- background-size: 16px 16px;
407
- padding-left: 40px;
408
- }
409
-
410
- .input-group {
411
- display: flex;
412
- gap: 10px;
413
- }
414
-
415
- .input-group .form-control {
416
- flex: 1;
417
- }
418
-
419
- .input-group-text {
420
- display: flex;
421
- align-items: center;
422
- justify-content: center;
423
- padding: 0 15px;
424
- color: var(--text-dark);
425
- font-size: 15px;
426
- }
427
-
428
- .checkbox-group {
429
- display: flex;
430
- align-items: center;
431
- gap: 10px;
432
- margin-top: 10px;
433
- cursor: pointer;
434
- }
435
-
436
- .checkbox-group input[type="checkbox"] {
437
- appearance: none;
438
- -webkit-appearance: none;
439
- width: 22px;
440
- height: 22px;
441
- background: var(--primary-dark);
442
- border: 2px solid var(--card-border);
443
- border-radius: 6px;
444
- position: relative;
445
- cursor: pointer;
446
- transition: all 0.3s ease;
447
- }
448
-
449
- .checkbox-group input[type="checkbox"]:checked {
450
- background: var(--secondary);
451
- border-color: var(--secondary);
452
- }
453
-
454
- .checkbox-group input[type="checkbox"]:checked::after {
455
- content: '✓';
456
- position: absolute;
457
- top: 50%;
458
- left: 50%;
459
- transform: translate(-50%, -50%);
460
- color: white;
461
- font-size: 14px;
462
- font-weight: bold;
463
- }
464
-
465
- .checkbox-group input[type="checkbox"]:focus {
466
- box-shadow: 0 0 0 3px var(--glow-color);
467
- }
468
-
469
- .checkbox-group label {
470
- margin-bottom: 0;
471
- cursor: pointer;
472
- display: flex;
473
- align-items: center;
474
- gap: 8px;
475
- }
476
-
477
- .checkbox-group label i {
478
- color: var(--secondary);
479
- }
480
-
481
- .pairs-selector {
482
- margin-top: 30px;
483
- }
484
-
485
- .pairs-grid {
486
- display: grid;
487
- grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
488
- gap: 15px;
489
- margin-top: 20px;
490
- }
491
-
492
- .pair-item {
493
- position: relative;
494
- background: var(--primary-dark);
495
- border: 2px solid var(--card-border);
496
- border-radius: 12px;
497
- padding: 15px 10px;
498
- text-align: center;
499
- transition: all 0.3s ease;
500
- cursor: pointer;
501
- overflow: hidden;
502
- }
503
-
504
- .pair-item:hover {
505
- transform: translateY(-3px);
506
- border-color: var(--secondary-light);
507
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
508
- }
509
-
510
- .pair-item input[type="checkbox"] {
511
- position: absolute;
512
- opacity: 0;
513
- cursor: pointer;
514
- height: 0;
515
- width: 0;
516
- }
517
-
518
- .pair-item input[type="checkbox"]:checked + .pair-label {
519
- color: var(--secondary-light);
520
- font-weight: bold;
521
- }
522
-
523
- .pair-item input[type="checkbox"]:checked ~ .pair-checkmark {
524
- opacity: 1;
525
- transform: scale(1);
526
- }
527
-
528
- .pair-item input[type="checkbox"]:checked ~ .pair-bg {
529
- opacity: 0.15;
530
- }
531
-
532
- .pair-label {
533
- position: relative;
534
- z-index: 2;
535
- font-weight: 600;
536
- color: var(--text);
537
- transition: all 0.3s ease;
538
- }
539
-
540
- .pair-checkmark {
541
- position: absolute;
542
- top: 10px;
543
- right: 10px;
544
- width: 20px;
545
- height: 20px;
546
- background: var(--secondary);
547
- border-radius: 50%;
548
- display: flex;
549
- align-items: center;
550
- justify-content: center;
551
- color: white;
552
- font-size: 12px;
553
- opacity: 0;
554
- transform: scale(0);
555
- transition: all 0.3s ease;
556
- z-index: 2;
557
- }
558
-
559
- .pair-bg {
560
- position: absolute;
561
- top: 0;
562
- left: 0;
563
- width: 100%;
564
- height: 100%;
565
- background: var(--secondary);
566
- opacity: 0;
567
- transition: all 0.3s ease;
568
- z-index: 1;
569
- }
570
-
571
- .save-btn {
572
- background: linear-gradient(135deg, var(--success), var(--success-dark));
573
- color: white;
574
- border: none;
575
- padding: 16px 30px;
576
- border-radius: 12px;
577
- font-size: 16px;
578
- font-weight: 600;
579
- cursor: pointer;
580
- transition: all 0.3s ease;
581
- display: inline-flex;
582
- align-items: center;
583
- gap: 10px;
584
- margin-top: 30px;
585
- position: relative;
586
- overflow: hidden;
587
- }
588
-
589
- .save-btn::before {
590
- content: '';
591
- position: absolute;
592
- top: 0;
593
- left: -100%;
594
- width: 100%;
595
- height: 100%;
596
- background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
597
- transition: all 0.5s ease;
598
- }
599
-
600
- .save-btn:hover::before {
601
- left: 100%;
602
- }
603
-
604
- .save-btn:hover {
605
- transform: translateY(-3px);
606
- box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
607
- }
608
-
609
- .notification {
610
- position: fixed;
611
- bottom: 30px;
612
- right: 30px;
613
- background: var(--card-bg);
614
- border-radius: 12px;
615
- padding: 20px;
616
- box-shadow: 0 10px 30px var(--shadow-color);
617
- border-right: 4px solid var(--secondary);
618
- max-width: 350px;
619
- transform: translateX(400px);
620
- opacity: 0;
621
- transition: all 0.5s ease;
622
- z-index: 1000;
623
- display: flex;
624
- align-items: flex-start;
625
- gap: 15px;
626
- }
627
-
628
- .notification.show {
629
- transform: translateX(0);
630
- opacity: 1;
631
- }
632
-
633
- .notification-icon {
634
- width: 40px;
635
- height: 40px;
636
- border-radius: 50%;
637
- background: rgba(52, 152, 219, 0.2);
638
- color: var(--secondary);
639
- display: flex;
640
- align-items: center;
641
- justify-content: center;
642
- font-size: 18px;
643
- flex-shrink: 0;
644
- }
645
-
646
- .notification-content {
647
- flex-grow: 1;
648
- }
649
-
650
- .notification-title {
651
- font-size: 16px;
652
- font-weight: 600;
653
- margin-bottom: 5px;
654
- color: var(--text);
655
- }
656
-
657
- .notification-message {
658
- font-size: 14px;
659
- color: var(--text-dark);
660
- }
661
-
662
- .notification-close {
663
- position: absolute;
664
- top: 10px;
665
- right: 10px;
666
- color: var(--text-darker);
667
- cursor: pointer;
668
- font-size: 14px;
669
- transition: all 0.3s ease;
670
- }
671
-
672
- .notification-close:hover {
673
- color: var(--text);
674
- }
675
-
676
- .notification.success .notification-icon {
677
- background: rgba(46, 204, 113, 0.2);
678
- color: var(--success);
679
- }
680
-
681
- .notification.success {
682
- border-right-color: var(--success);
683
- }
684
-
685
- .notification.error .notification-icon {
686
- background: rgba(231, 76, 60, 0.2);
687
- color: var(--danger);
688
- }
689
-
690
- .notification.error {
691
- border-right-color: var(--danger);
692
- }
693
-
694
- .notification.warning .notification-icon {
695
- background: rgba(241, 196, 15, 0.2);
696
- color: var(--warning);
697
- }
698
-
699
- .notification.warning {
700
- border-right-color: var(--warning);
701
- }
702
-
703
- /* Admin section */
704
- .admin-section {
705
- margin-top: 50px;
706
- padding-top: 30px;
707
- border-top: 1px dashed var(--card-border);
708
- }
709
-
710
- .admin-title {
711
- color: var(--danger-light);
712
- font-size: 18px;
713
- margin-bottom: 20px;
714
- display: flex;
715
- align-items: center;
716
- gap: 10px;
717
- }
718
-
719
- .admin-form {
720
- background: rgba(231, 76, 60, 0.1);
721
- border: 1px dashed var(--danger);
722
- border-radius: 12px;
723
- padding: 20px;
724
- }
725
-
726
- /* Mobile Responsiveness */
727
- @media (max-width: 768px) {
728
- .container {
729
- padding: 15px;
730
- }
731
-
732
- .header {
733
- flex-direction: column;
734
- align-items: flex-start;
735
- }
736
-
737
- .logo {
738
- width: 100%;
739
- justify-content: center;
740
- }
741
-
742
- .back-btn {
743
- width: 100%;
744
- justify-content: center;
745
- }
746
-
747
- .form-grid {
748
- grid-template-columns: 1fr;
749
- gap: 15px;
750
- }
751
-
752
- .pairs-grid {
753
- grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
754
- }
755
-
756
- .save-btn {
757
- width: 100%;
758
- justify-content: center;
759
- }
760
-
761
- .notification {
762
- left: 20px;
763
- right: 20px;
764
- max-width: none;
765
- }
766
- }
767
-
768
- @media (max-width: 480px) {
769
- .container {
770
- padding: 10px;
771
- }
772
-
773
- .settings-section {
774
- padding: 20px 15px;
775
- }
776
-
777
- .section-title {
778
- font-size: 18px;
779
- }
780
-
781
- .pairs-grid {
782
- grid-template-columns: repeat(2, 1fr);
783
- }
784
-
785
- .input-group {
786
- flex-direction: column;
787
- }
788
-
789
- .password-box {
790
- padding: 30px 20px;
791
- }
792
- }
793
- </style>
794
- </head>
795
- <body>
796
- <!-- Password Modal -->
797
- <div class="password-modal" id="passwordModal">
798
- <div class="password-box">
799
- <h2><i class="fas fa-lock"></i> تسجيل الدخول</h2>
800
- <input type="password" class="password-input" id="passwordInput" placeholder="أدخل كلمة المرور">
801
- <button class="password-btn" onclick="checkPassword()">
802
- <i class="fas fa-sign-in-alt"></i> دخول
803
- </button>
804
- </div>
805
- </div>
806
-
807
- <!-- Notification -->
808
- <div class="notification" id="notification">
809
- <div class="notification-icon">
810
- <i class="fas fa-info-circle"></i>
811
- </div>
812
- <div class="notification-content">
813
- <div class="notification-title" id="notificationTitle">تم التحديث</div>
814
- <div class="notification-message" id="notificationMessage">تم تحديث البيانات بنجاح</div>
815
- </div>
816
- <div class="notification-close" onclick="hideNotification()">
817
- <i class="fas fa-times"></i>
818
- </div>
819
- </div>
820
-
821
- <div class="container hidden" id="mainContent">
822
- <div class="header">
823
- <div class="logo">
824
- <div class="logo-icon">
825
- <i class="fas fa-cog"></i>
826
- </div>
827
- <div class="logo-text">
828
- <h1>إعدادات نظام تحليل الفوركس</h1>
829
- <p>تخصيص معلمات التداول وأزواج العملات</p>
830
- </div>
831
- </div>
832
- <a href="/" class="back-btn">
833
- <i class="fas fa-arrow-right"></i> العودة إلى لوحة التحكم
834
- </a>
835
- </div>
836
-
837
- <form method="POST" action="/update-settings" id="settingsForm">
838
- <div class="settings-section">
839
- <div class="section-header">
840
- <div class="section-title">
841
- <i class="fas fa-chart-bar"></i> معلمات التداول
842
- </div>
843
- </div>
844
- <div class="form-grid">
845
- <div class="form-group">
846
- <label>نطاق وقف الخس��رة (نقاط):</label>
847
- <div class="input-group">
848
- <input type="number" name="stop_loss_min" value="{{ settings.stop_loss_min }}" min="10" max="100" class="form-control" placeholder="الحد الأدنى">
849
- <div class="input-group-text">إلى</div>
850
- <input type="number" name="stop_loss_max" value="{{ settings.stop_loss_max }}" min="10" max="100" class="form-control" placeholder="الحد الأقصى">
851
- </div>
852
- </div>
853
-
854
- <div class="form-group">
855
- <label>نطاق جني الأرباح (نقاط):</label>
856
- <div class="input-group">
857
- <input type="number" name="take_profit_min" value="{{ settings.take_profit_min }}" min="20" max="200" class="form-control" placeholder="الحد الأدنى">
858
- <div class="input-group-text">إلى</div>
859
- <input type="number" name="take_profit_max" value="{{ settings.take_profit_max }}" min="20" max="200" class="form-control" placeholder="الحد الأقصى">
860
- </div>
861
- </div>
862
-
863
- <div class="form-group">
864
- <label><i class="fas fa-clock"></i> مدة الصفقة القصوى (ساعات):</label>
865
- <input type="number" name="max_trade_duration" value="{{ settings.max_trade_duration }}" min="1" max="24" class="form-control">
866
- </div>
867
-
868
- <div class="form-group">
869
- <label><i class="fas fa-percentage"></i> نسبة المخاطرة (%):</label>
870
- <input type="number" step="0.1" name="risk_percentage" value="{{ settings.risk_percentage }}" min="0.5" max="10" class="form-control">
871
- </div>
872
-
873
- <div class="form-group">
874
- <label><i class="fas fa-bullseye"></i> الحد الأدنى للثقة (%):</label>
875
- <input type="number" name="min_confidence" value="{{ settings.min_confidence }}" min="50" max="95" class="form-control">
876
- </div>
877
-
878
- <div class="form-group">
879
- <label><i class="fas fa-arrows-alt-h"></i> اتجاه التداول:</label>
880
- <select name="trade_direction" class="form-control">
881
- <option value="both" {% if settings.trade_direction == 'both' %}selected{% endif %}>شراء وبيع</option>
882
- <option value="buy" {% if settings.trade_direction == 'buy' %}selected{% endif %}>شراء فقط</option>
883
- <option value="sell" {% if settings.trade_direction == 'sell' %}selected{% endif %}>بيع فقط</option>
884
- </select>
885
- </div>
886
-
887
- <div class="form-group">
888
- <label><i class="fas fa-hashtag"></i> الحد الأقصى للصفقات اليومية:</label>
889
- <input type="number" name="max_daily_trades" value="{{ settings.max_daily_trades }}" min="1" max="20" class="form-control">
890
- </div>
891
-
892
- <div class="form-group">
893
- <label><i class="fas fa-business-time"></i> ساعات التداول:</label>
894
- <div class="input-group">
895
- <input type="number" name="trading_hours_start" value="{{ settings.trading_hours_start }}" min="0" max="23" class="form-control" placeholder="البداية">
896
- <div class="input-group-text">إلى</div>
897
- <input type="number" name="trading_hours_end" value="{{ settings.trading_hours_end }}" min="0" max="23" class="form-control" placeholder="النهاية">
898
- </div>
899
- </div>
900
-
901
- <div class="form-group">
902
- <label>نطاق السبريد (نقاط):</label>
903
- <div class="input-group">
904
- <input type="number" step="0.1" name="min_spread" value="{{ settings.min_spread }}" min="0" max="10" class="form-control" placeholder="الحد الأدنى">
905
- <div class="input-group-text">إلى</div>
906
- <input type="number" step="0.1" name="max_spread" value="{{ settings.max_spread }}" min="0" max="20" class="form-control" placeholder="الحد الأقصى">
907
- </div>
908
- </div>
909
- </div>
910
-
911
- <div class="form-group">
912
- <div class="checkbox-group">
913
- <input type="checkbox" name="avoid_news_events" id="avoid_news" {% if settings.avoid_news_events %}checked{% endif %}>
914
- <label for="avoid_news"><i class="fas fa-newspaper"></i> تجنب التداول خلال الأخبار الاقتصادية</label>
915
- </div>
916
- </div>
917
- </div>
918
-
919
- <div class="settings-section">
920
- <div class="section-header">
921
- <div class="section-title">
922
- <i class="fas fa-coins"></i> أزواج العملات للتحليل
923
- </div>
924
- </div>
925
- <p>اختر من 2 إلى 8 أزواج عملات للتحليل التلقائي</p>
926
-
927
- <div class="pairs-grid">
928
- {% for pair in all_pairs %}
929
- <div class="pair-item">
930
- <input type="checkbox" id="pair-{{ pair }}" name="selected_pairs" value="{{ pair }}" {% if pair in selected_pairs %}checked{% endif %}>
931
- <label class="pair-label" for="pair-{{ pair }}">{{ pair }}</label>
932
- <div class="pair-checkmark"><i class="fas fa-check"></i></div>
933
- <div class="pair-bg"></div>
934
- </div>
935
- {% endfor %}
936
- </div>
937
-
938
- <div class="form-group" style="margin-top: 30px;">
939
- <button type="submit" class="save-btn">
940
- <i class="fas fa-save"></i> حفظ الإعدادات
941
- </button>
942
- </div>
943
- </div>
944
- </form>
945
-
946
- <div class="admin-section">
947
- <div class="section-header">
948
- <div class="section-title">
949
- <i class="fas fa-user-shield"></i> إعدادات المطور
950
- </div>
951
- </div>
952
-
953
- <div class="admin-controls">
954
- <div class="admin-control-item">
955
- <label>تعديل الفاصل الزمني للتحليل (بالدقائق):</label>
956
- <div class="input-group">
957
- <input type="number" id="analysisInterval" value="{{ analysis_interval }}" min="5" max="240" class="form-control">
958
- <input type="password" id="adminPassword" placeholder="كلمة مرور المشرف" class="form-control">
959
- <button type="button" id="updateIntervalBtn" class="admin-btn">
960
- <i class="fas fa-save"></i> تحديث
961
- </button>
962
- </div>
963
- <small class="form-text">الفاصل الزمني الحالي: {{ analysis_interval }} دقيقة</small>
964
- </div>
965
- </div>
966
- </div>
967
- </div>
968
-
969
- <script>
970
- let isAuthenticated = false;
971
-
972
- // Check if user is already authenticated
973
- function checkAuthStatus() {
974
- const authStatus = localStorage.getItem('forex_auth');
975
- if (authStatus === 'authenticated') {
976
- isAuthenticated = true;
977
- showMainContent();
978
- } else {
979
- showPasswordModal();
980
- }
981
- }
982
-
983
- function showPasswordModal() {
984
- document.getElementById('passwordModal').classList.remove('hidden');
985
- document.getElementById('mainContent').classList.add('hidden');
986
- document.getElementById('passwordInput').focus();
987
- }
988
-
989
- function showMainContent() {
990
- document.getElementById('passwordModal').classList.add('hidden');
991
-
992
- // Delay showing content for animation
993
- setTimeout(() => {
994
- document.getElementById('mainContent').classList.remove('hidden');
995
- setTimeout(() => {
996
- document.getElementById('mainContent').classList.add('visible');
997
- }, 100);
998
- }, 300);
999
- }
1000
-
1001
- function checkPassword() {
1002
- const password = document.getElementById('passwordInput').value;
1003
- if (password === 'hakim1234') {
1004
- isAuthenticated = true;
1005
- localStorage.setItem('forex_auth', 'authenticated');
1006
- showMainContent();
1007
- } else {
1008
- showNotification('خطأ', 'كلمة المرور غير صحيحة!', 'error');
1009
- document.getElementById('passwordInput').value = '';
1010
- }
1011
- }
1012
-
1013
- function showNotification(title, message, type = 'info') {
1014
- const notification = document.getElementById('notification');
1015
- const notificationTitle = document.getElementById('notificationTitle');
1016
- const notificationMessage = document.getElementById('notificationMessage');
1017
- const notificationIcon = notification.querySelector('.notification-icon i');
1018
-
1019
- // Set notification content
1020
- notificationTitle.textContent = title;
1021
- notificationMessage.textContent = message;
1022
-
1023
- // Set notification type
1024
- notification.className = 'notification';
1025
- notification.classList.add(type);
1026
-
1027
- // Set icon based on type
1028
- switch(type) {
1029
- case 'success':
1030
- notificationIcon.className = 'fas fa-check-circle';
1031
- break;
1032
- case 'error':
1033
- notificationIcon.className = 'fas fa-exclamation-circle';
1034
- break;
1035
- case 'warning':
1036
- notificationIcon.className = 'fas fa-exclamation-triangle';
1037
- break;
1038
- default:
1039
- notificationIcon.className = 'fas fa-info-circle';
1040
- }
1041
-
1042
- // Show notification
1043
- notification.classList.add('show');
1044
-
1045
- // Auto hide after 5 seconds
1046
- setTimeout(hideNotification, 5000);
1047
- }
1048
-
1049
- function hideNotification() {
1050
- const notification = document.getElementById('notification');
1051
- notification.classList.remove('show');
1052
- }
1053
-
1054
- function validatePairsSelection() {
1055
- const selectedPairs = document.querySelectorAll('input[name="selected_pairs"]:checked');
1056
-
1057
- if (selectedPairs.length < 2 || selectedPairs.length > 8) {
1058
- showNotification('خطأ', 'يجب اختيار من 2 إلى 8 أزواج عملات', 'error');
1059
- return false;
1060
- }
1061
-
1062
- return true;
1063
- }
1064
-
1065
- function updateAnalysisInterval() {
1066
- const password = document.getElementById('adminPassword').value;
1067
- const interval = document.getElementById('analysisInterval').value;
1068
-
1069
- if (!password || !interval) {
1070
- showNotification('خطأ', 'يرجى إدخال كلمة المرور والفاصل الزمني', 'error');
1071
- return;
1072
- }
1073
-
1074
- const formData = new FormData();
1075
- formData.append('admin_password', password);
1076
- formData.append('analysis_interval', interval);
1077
-
1078
- fetch('/update-interval', {
1079
- method: 'POST',
1080
- body: formData
1081
- })
1082
- .then(response => response.json())
1083
- .then(data => {
1084
- if (data.success) {
1085
- showNotification('تم التحديث', data.message, 'success');
1086
- document.getElementById('adminPassword').value = '';
1087
-
1088
- // Update displayed interval
1089
- document.querySelector('.form-text').textContent = `الفاصل الزمني الحالي: ${data.new_interval} دقيقة`;
1090
- } else {
1091
- showNotification('خطأ', data.message, 'error');
1092
- }
1093
- })
1094
- .catch(error => {
1095
- showNotification('خطأ', 'حدث خطأ أثناء تحديث الفاصل الزمني', 'error');
1096
- console.error('Error updating interval:', error);
1097
- });
1098
- }
1099
-
1100
- // Enter key for password
1101
- document.addEventListener('keypress', function(e) {
1102
- if (e.key === 'Enter' && !isAuthenticated) {
1103
- checkPassword();
1104
- }
1105
- });
1106
-
1107
- // Initialize on page load
1108
- document.addEventListener('DOMContentLoaded', function() {
1109
- checkAuthStatus();
1110
-
1111
- // Add form validation
1112
- document.getElementById('settingsForm').addEventListener('submit', function(e) {
1113
- if (!validatePairsSelection()) {
1114
- e.preventDefault();
1115
- } else {
1116
- showNotification('جاري المعالجة', 'جاري حفظ الإعدادات...', 'info');
1117
- }
1118
- });
1119
-
1120
- // Add event listener for update interval button
1121
- document.getElementById('updateIntervalBtn').addEventListener('click', updateAnalysisInterval);
1122
-
1123
- // Add event listeners for pair selection items to improve UX
1124
- document.querySelectorAll('.pair-item').forEach(item => {
1125
- item.addEventListener('click', function(e) {
1126
- // If the click was directly on the checkbox, don't interfere
1127
- if (e.target.type === 'checkbox') return;
1128
-
1129
- // Otherwise toggle the checkbox
1130
- const checkbox = this.querySelector('input[type="checkbox"]');
1131
- checkbox.checked = !checkbox.checked;
1132
-
1133
- // Visual feedback
1134
- if (checkbox.checked) {
1135
- this.classList.add('selected');
1136
- } else {
1137
- this.classList.remove('selected');
1138
- }
1139
- });
1140
-
1141
- // Set initial selected state
1142
- const checkbox = item.querySelector('input[type="checkbox"]');
1143
- if (checkbox.checked) {
1144
- item.classList.add('selected');
1145
- }
1146
- });
1147
- });
1148
- </script>
1149
- </body>
1150
- </html>