Starchik1 commited on
Commit
d33ae55
·
verified ·
1 Parent(s): 23cb099

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +87 -26
main.py CHANGED
@@ -315,39 +315,34 @@ def proxy(path):
315
  style_tag = soup.new_tag('style')
316
  style_tag.string = '''
317
  :root {
318
- /* Light theme (default) */
319
  --primary-gradient: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
320
  --hover-gradient: linear-gradient(135deg, #2980b9 0%, #2471a3 100%);
321
  --bg-gradient: linear-gradient(135deg, #f5f7fa 0%, #e4e9f2 100%);
322
  --card-shadow: 0 8px 20px rgba(0,0,0,0.08);
323
  --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
324
  --text-color: #2c3e50;
 
325
  --card-bg: rgba(255, 255, 255, 0.98);
326
  --card-border: rgba(255, 255, 255, 0.8);
327
  --table-border: rgba(236, 240, 241, 0.8);
328
- --table-row-even: rgba(245, 247, 250, 0.5);
329
- --modal-bg: rgba(0, 0, 0, 0.9);
330
- --modal-text: #f1f1f1;
331
- --zoom-btn-bg: rgba(255, 255, 255, 0.2);
332
- --zoom-btn-border: rgba(255, 255, 255, 0.4);
333
- --zoom-btn-color: white;
334
  }
335
 
 
336
  [data-theme="dark"] {
337
  --primary-gradient: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
338
  --hover-gradient: linear-gradient(135deg, #1e40af 0%, #1e3a8a 100%);
339
  --bg-gradient: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
340
  --card-shadow: 0 8px 20px rgba(0,0,0,0.2);
341
  --text-color: #e2e8f0;
 
342
  --card-bg: rgba(30, 41, 59, 0.98);
343
  --card-border: rgba(30, 41, 59, 0.8);
344
  --table-border: rgba(51, 65, 85, 0.8);
345
- --table-row-even: rgba(30, 41, 59, 0.5);
346
- --modal-bg: rgba(0, 0, 0, 0.95);
347
- --modal-text: #f1f1f1;
348
- --zoom-btn-bg: rgba(30, 41, 59, 0.4);
349
- --zoom-btn-border: rgba(51, 65, 85, 0.6);
350
- --zoom-btn-color: #e2e8f0;
351
  }
352
  body {
353
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
@@ -355,9 +350,10 @@ def proxy(path):
355
  padding: 30px;
356
  max-width: 1400px;
357
  margin: 0 auto;
358
- background: var(--bg-gradient);
359
- color: #2c3e50;
360
  min-height: 100vh;
 
361
  }
362
  .breadcrumb {
363
  display: flex;
@@ -365,12 +361,12 @@ def proxy(path):
365
  gap: 15px;
366
  align-items: center;
367
  padding: 20px;
368
- background: rgba(255, 255, 255, 0.98);
369
  border-radius: 16px;
370
  box-shadow: var(--card-shadow);
371
  margin-bottom: 30px;
372
  backdrop-filter: blur(10px);
373
- border: 1px solid rgba(255, 255, 255, 0.8);
374
  }
375
  .breadcrumb a {
376
  text-decoration: none;
@@ -402,12 +398,12 @@ def proxy(path):
402
  margin: 30px 0;
403
  }
404
  li {
405
- background: rgba(255, 255, 255, 0.98);
406
  border-radius: 16px;
407
  overflow: hidden;
408
  transition: var(--transition);
409
  box-shadow: var(--card-shadow);
410
- border: 1px solid rgba(255, 255, 255, 0.8);
411
  }
412
  li:hover {
413
  transform: translateY(-5px);
@@ -417,10 +413,10 @@ def proxy(path):
417
  display: block;
418
  padding: 20px;
419
  text-decoration: none;
420
- color: #2c3e50;
421
  font-weight: 500;
422
  transition: var(--transition);
423
- background: rgba(255, 255, 255, 0.98);
424
  }
425
  li a:hover {
426
  background: var(--primary-gradient);
@@ -430,21 +426,21 @@ def proxy(path):
430
  width: 100%;
431
  border-collapse: separate;
432
  border-spacing: 0;
433
- background: rgba(255, 255, 255, 0.98);
434
  border-radius: 16px;
435
  overflow: hidden;
436
  box-shadow: var(--card-shadow);
437
  margin: 30px 0;
438
  backdrop-filter: blur(10px);
439
- border: 1px solid rgba(255, 255, 255, 0.8);
440
  }
441
  td {
442
  padding: 20px;
443
- border: 1px solid rgba(236, 240, 241, 0.8);
444
  transition: var(--transition);
445
  }
446
  tr:nth-child(even) {
447
- background: rgba(245, 247, 250, 0.5);
448
  }
449
  tr:hover {
450
  background: var(--bg-gradient);
@@ -484,7 +480,7 @@ def proxy(path):
484
  hr {
485
  border: none;
486
  height: 1px;
487
- background: linear-gradient(to right, transparent, rgba(44, 62, 80, 0.2), transparent);
488
  margin: 30px 0;
489
  }
490
  .modal {
@@ -502,6 +498,10 @@ def proxy(path):
502
  transition: opacity 0.3s ease;
503
  }
504
 
 
 
 
 
505
  .modal.show {
506
  opacity: 1;
507
  }
@@ -605,6 +605,67 @@ def proxy(path):
605
  soup.append(html_tag)
606
  soup.head.append(style_tag)
607
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
608
  # Convert navigation links to breadcrumb
609
  nav_links = soup.find_all('a', href=True)
610
  breadcrumb_div = soup.new_tag('div')
 
315
  style_tag = soup.new_tag('style')
316
  style_tag.string = '''
317
  :root {
318
+ /* Light mode variables */
319
  --primary-gradient: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
320
  --hover-gradient: linear-gradient(135deg, #2980b9 0%, #2471a3 100%);
321
  --bg-gradient: linear-gradient(135deg, #f5f7fa 0%, #e4e9f2 100%);
322
  --card-shadow: 0 8px 20px rgba(0,0,0,0.08);
323
  --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
324
  --text-color: #2c3e50;
325
+ --bg-color: var(--bg-gradient);
326
  --card-bg: rgba(255, 255, 255, 0.98);
327
  --card-border: rgba(255, 255, 255, 0.8);
328
  --table-border: rgba(236, 240, 241, 0.8);
329
+ --table-even-row: rgba(245, 247, 250, 0.5);
330
+ --hr-color: rgba(44, 62, 80, 0.2);
 
 
 
 
331
  }
332
 
333
+ /* Dark mode variables */
334
  [data-theme="dark"] {
335
  --primary-gradient: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
336
  --hover-gradient: linear-gradient(135deg, #1e40af 0%, #1e3a8a 100%);
337
  --bg-gradient: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
338
  --card-shadow: 0 8px 20px rgba(0,0,0,0.2);
339
  --text-color: #e2e8f0;
340
+ --bg-color: var(--bg-gradient);
341
  --card-bg: rgba(30, 41, 59, 0.98);
342
  --card-border: rgba(30, 41, 59, 0.8);
343
  --table-border: rgba(51, 65, 85, 0.8);
344
+ --table-even-row: rgba(30, 41, 59, 0.5);
345
+ --hr-color: rgba(226, 232, 240, 0.2);
 
 
 
 
346
  }
347
  body {
348
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
 
350
  padding: 30px;
351
  max-width: 1400px;
352
  margin: 0 auto;
353
+ background: var(--bg-color);
354
+ color: var(--text-color);
355
  min-height: 100vh;
356
+ transition: background 0.3s ease, color 0.3s ease;
357
  }
358
  .breadcrumb {
359
  display: flex;
 
361
  gap: 15px;
362
  align-items: center;
363
  padding: 20px;
364
+ background: var(--card-bg);
365
  border-radius: 16px;
366
  box-shadow: var(--card-shadow);
367
  margin-bottom: 30px;
368
  backdrop-filter: blur(10px);
369
+ border: 1px solid var(--card-border);
370
  }
371
  .breadcrumb a {
372
  text-decoration: none;
 
398
  margin: 30px 0;
399
  }
400
  li {
401
+ background: var(--card-bg);
402
  border-radius: 16px;
403
  overflow: hidden;
404
  transition: var(--transition);
405
  box-shadow: var(--card-shadow);
406
+ border: 1px solid var(--card-border);
407
  }
408
  li:hover {
409
  transform: translateY(-5px);
 
413
  display: block;
414
  padding: 20px;
415
  text-decoration: none;
416
+ color: var(--text-color);
417
  font-weight: 500;
418
  transition: var(--transition);
419
+ background: var(--card-bg);
420
  }
421
  li a:hover {
422
  background: var(--primary-gradient);
 
426
  width: 100%;
427
  border-collapse: separate;
428
  border-spacing: 0;
429
+ background: var(--card-bg);
430
  border-radius: 16px;
431
  overflow: hidden;
432
  box-shadow: var(--card-shadow);
433
  margin: 30px 0;
434
  backdrop-filter: blur(10px);
435
+ border: 1px solid var(--card-border);
436
  }
437
  td {
438
  padding: 20px;
439
+ border: 1px solid var(--table-border);
440
  transition: var(--transition);
441
  }
442
  tr:nth-child(even) {
443
+ background: var(--table-even-row);
444
  }
445
  tr:hover {
446
  background: var(--bg-gradient);
 
480
  hr {
481
  border: none;
482
  height: 1px;
483
+ background: linear-gradient(to right, transparent, var(--hr-color), transparent);
484
  margin: 30px 0;
485
  }
486
  .modal {
 
498
  transition: opacity 0.3s ease;
499
  }
500
 
501
+ [data-theme="dark"] .modal {
502
+ background: rgba(0, 0, 0, 0.95);
503
+ }
504
+
505
  .modal.show {
506
  opacity: 1;
507
  }
 
605
  soup.append(html_tag)
606
  soup.head.append(style_tag)
607
 
608
+ # Add dark mode toggle button
609
+ dark_mode_toggle = soup.new_tag('div')
610
+ dark_mode_toggle['id'] = 'dark-mode-toggle'
611
+ dark_mode_toggle['class'] = 'theme-toggle'
612
+ dark_mode_toggle['style'] = 'position: fixed; top: 20px; right: 20px; z-index: 999; display: flex; align-items: center; gap: 10px; background: var(--card-bg); padding: 10px 15px; border-radius: 30px; box-shadow: var(--card-shadow); cursor: pointer; transition: var(--transition);'
613
+
614
+ toggle_icon = soup.new_tag('span')
615
+ toggle_icon['class'] = 'toggle-icon'
616
+ toggle_icon['style'] = 'font-size: 18px;'
617
+ toggle_icon.string = '🌙'
618
+
619
+ toggle_text = soup.new_tag('span')
620
+ toggle_text['class'] = 'toggle-text'
621
+ toggle_text.string = 'Тёмный режим'
622
+
623
+ dark_mode_toggle.append(toggle_icon)
624
+ dark_mode_toggle.append(toggle_text)
625
+
626
+ if soup.body:
627
+ soup.body.insert(0, dark_mode_toggle)
628
+
629
+ # Add dark mode toggle script
630
+ dark_mode_script = soup.new_tag('script')
631
+ dark_mode_script.string = '''
632
+ document.addEventListener('DOMContentLoaded', function() {
633
+ const toggle = document.getElementById('dark-mode-toggle');
634
+ const toggleIcon = toggle.querySelector('.toggle-icon');
635
+ const toggleText = toggle.querySelector('.toggle-text');
636
+ const htmlElement = document.documentElement;
637
+
638
+ // Check for saved theme preference or use user's system preference
639
+ const savedTheme = localStorage.getItem('theme');
640
+ const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
641
+
642
+ // Apply theme based on saved preference or system preference
643
+ if (savedTheme === 'dark' || (!savedTheme && prefersDark)) {
644
+ htmlElement.setAttribute('data-theme', 'dark');
645
+ toggleIcon.textContent = '☀️';
646
+ toggleText.textContent = 'Светлый режим';
647
+ }
648
+
649
+ // Toggle theme when button is clicked
650
+ toggle.addEventListener('click', function() {
651
+ if (htmlElement.getAttribute('data-theme') === 'dark') {
652
+ htmlElement.removeAttribute('data-theme');
653
+ toggleIcon.textContent = '🌙';
654
+ toggleText.textContent = 'Тёмный режим';
655
+ localStorage.setItem('theme', 'light');
656
+ } else {
657
+ htmlElement.setAttribute('data-theme', 'dark');
658
+ toggleIcon.textContent = '☀️';
659
+ toggleText.textContent = 'Светлый режим';
660
+ localStorage.setItem('theme', 'dark');
661
+ }
662
+ });
663
+ });
664
+ '''
665
+
666
+ if soup.body:
667
+ soup.body.append(dark_mode_script)
668
+
669
  # Convert navigation links to breadcrumb
670
  nav_links = soup.find_all('a', href=True)
671
  breadcrumb_div = soup.new_tag('div')