Starchik1 commited on
Commit
78a50fb
·
verified ·
1 Parent(s): 9381fae

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +18 -126
main.py CHANGED
@@ -113,22 +113,18 @@ def proxy(path):
113
  link.decompose()
114
 
115
  # Redirect part number links to Google search
116
- # Look for links that contain part numbers in any table cell
117
- part_number_links = soup.select('td a')
118
  for link in part_number_links:
119
  # Get the part number from the link text
120
  part_number = link.text.strip()
121
- # Check if it matches a part number pattern (alphanumeric with possible spaces and dashes)
122
- if re.match(r'^[A-Z0-9 -]+$', part_number) and not any(x in part_number.upper() for x in ['README', 'ZOOM']):
123
  # Create a Google search URL for this part number with avto.pro
124
  google_search_url = f"https://www.google.com/search?q={part_number} avto.pro"
125
  # Update the link's href attribute and add target="_blank" to open in new tab
126
  link['href'] = google_search_url
127
  link['target'] = '_blank'
128
- # Add styles to make part numbers more visible
129
- link['style'] = 'color: #4a90e2; font-weight: bold; text-decoration: none; padding: 2px 6px; background-color: rgba(74, 144, 226, 0.1); border-radius: 3px; transition: all 0.2s ease; display: inline-block;'
130
- link['onmouseover'] = 'this.style.backgroundColor="rgba(74, 144, 226, 0.2)"'
131
- link['onmouseout'] = 'this.style.backgroundColor="rgba(74, 144, 226, 0.1)"'
132
 
133
  # Update image sources to use our proxy
134
  for img in soup.find_all('img'):
@@ -319,40 +315,11 @@ def proxy(path):
319
  style_tag = soup.new_tag('style')
320
  style_tag.string = '''
321
  :root {
322
- /* Light mode variables */
323
  --primary-gradient: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
324
  --hover-gradient: linear-gradient(135deg, #2980b9 0%, #2471a3 100%);
325
  --bg-gradient: linear-gradient(135deg, #f5f7fa 0%, #e4e9f2 100%);
326
  --card-shadow: 0 8px 20px rgba(0,0,0,0.08);
327
  --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
328
- --text-color: #2c3e50;
329
- --bg-color: var(--bg-gradient);
330
- --card-bg: rgba(255, 255, 255, 0.98);
331
- --card-border: rgba(255, 255, 255, 0.8);
332
- --table-border: rgba(236, 240, 241, 0.8);
333
- --table-even-row: rgba(245, 247, 250, 0.5);
334
- --hr-color: rgba(44, 62, 80, 0.2);
335
- --link-color: #2563eb;
336
- --link-hover-color: #1d4ed8;
337
- --link-visited-color: #4338ca;
338
- }
339
-
340
- /* Dark mode variables */
341
- [data-theme="dark"] {
342
- --primary-gradient: linear-gradient(135deg, #2563eb 0%, #1e40af 100%);
343
- --hover-gradient: linear-gradient(135deg, #1e40af 0%, #1e3a8a 100%);
344
- --bg-gradient: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
345
- --card-shadow: 0 8px 20px rgba(0,0,0,0.2);
346
- --text-color: #e2e8f0;
347
- --bg-color: var(--bg-gradient);
348
- --card-bg: rgba(30, 41, 59, 0.98);
349
- --card-border: rgba(30, 41, 59, 0.8);
350
- --table-border: rgba(51, 65, 85, 0.8);
351
- --table-even-row: rgba(30, 41, 59, 0.5);
352
- --hr-color: rgba(226, 232, 240, 0.2);
353
- --link-color: #93c5fd;
354
- --link-hover-color: #bfdbfe;
355
- --link-visited-color: #c4b5fd;
356
  }
357
  body {
358
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
@@ -360,10 +327,9 @@ def proxy(path):
360
  padding: 30px;
361
  max-width: 1400px;
362
  margin: 0 auto;
363
- background: var(--bg-color);
364
- color: var(--text-color);
365
  min-height: 100vh;
366
- transition: background 0.3s ease, color 0.3s ease;
367
  }
368
  .breadcrumb {
369
  display: flex;
@@ -371,26 +337,21 @@ def proxy(path):
371
  gap: 15px;
372
  align-items: center;
373
  padding: 20px;
374
- background: var(--card-bg);
375
  border-radius: 16px;
376
  box-shadow: var(--card-shadow);
377
  margin-bottom: 30px;
378
  backdrop-filter: blur(10px);
379
- border: 1px solid var(--card-border);
380
  }
381
  .breadcrumb a {
382
  text-decoration: none;
383
- color: var(--link-color);
384
  padding: 8px 16px;
385
  border-radius: 8px;
386
  transition: var(--transition);
387
  font-weight: 500;
388
  background: rgba(52, 152, 219, 0.1);
389
- text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
390
- }
391
-
392
- [data-theme="dark"] a:hover {
393
- text-decoration: underline;
394
  }
395
  .breadcrumb a:hover {
396
  background: var(--primary-gradient);
@@ -413,12 +374,12 @@ def proxy(path):
413
  margin: 30px 0;
414
  }
415
  li {
416
- background: var(--card-bg);
417
  border-radius: 16px;
418
  overflow: hidden;
419
  transition: var(--transition);
420
  box-shadow: var(--card-shadow);
421
- border: 1px solid var(--card-border);
422
  }
423
  li:hover {
424
  transform: translateY(-5px);
@@ -428,14 +389,10 @@ def proxy(path):
428
  display: block;
429
  padding: 20px;
430
  text-decoration: none;
431
- color: var(--link-color);
432
  font-weight: 500;
433
  transition: var(--transition);
434
- background: var(--card-bg);
435
- }
436
-
437
- [data-theme="dark"] a {
438
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8);
439
  }
440
  li a:hover {
441
  background: var(--primary-gradient);
@@ -445,21 +402,21 @@ def proxy(path):
445
  width: 100%;
446
  border-collapse: separate;
447
  border-spacing: 0;
448
- background: var(--card-bg);
449
  border-radius: 16px;
450
  overflow: hidden;
451
  box-shadow: var(--card-shadow);
452
  margin: 30px 0;
453
  backdrop-filter: blur(10px);
454
- border: 1px solid var(--card-border);
455
  }
456
  td {
457
  padding: 20px;
458
- border: 1px solid var(--table-border);
459
  transition: var(--transition);
460
  }
461
  tr:nth-child(even) {
462
- background: var(--table-even-row);
463
  }
464
  tr:hover {
465
  background: var(--bg-gradient);
@@ -499,7 +456,7 @@ def proxy(path):
499
  hr {
500
  border: none;
501
  height: 1px;
502
- background: linear-gradient(to right, transparent, var(--hr-color), transparent);
503
  margin: 30px 0;
504
  }
505
  .modal {
@@ -517,10 +474,6 @@ def proxy(path):
517
  transition: opacity 0.3s ease;
518
  }
519
 
520
- [data-theme="dark"] .modal {
521
- background: rgba(0, 0, 0, 0.95);
522
- }
523
-
524
  .modal.show {
525
  opacity: 1;
526
  }
@@ -624,67 +577,6 @@ def proxy(path):
624
  soup.append(html_tag)
625
  soup.head.append(style_tag)
626
 
627
- # Add dark mode toggle button
628
- dark_mode_toggle = soup.new_tag('div')
629
- dark_mode_toggle['id'] = 'dark-mode-toggle'
630
- dark_mode_toggle['class'] = 'theme-toggle'
631
- 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);'
632
-
633
- toggle_icon = soup.new_tag('span')
634
- toggle_icon['class'] = 'toggle-icon'
635
- toggle_icon['style'] = 'font-size: 18px;'
636
- toggle_icon.string = '🌙'
637
-
638
- toggle_text = soup.new_tag('span')
639
- toggle_text['class'] = 'toggle-text'
640
- toggle_text.string = 'Тёмный режим'
641
-
642
- dark_mode_toggle.append(toggle_icon)
643
- dark_mode_toggle.append(toggle_text)
644
-
645
- if soup.body:
646
- soup.body.insert(0, dark_mode_toggle)
647
-
648
- # Add dark mode toggle script
649
- dark_mode_script = soup.new_tag('script')
650
- dark_mode_script.string = '''
651
- document.addEventListener('DOMContentLoaded', function() {
652
- const toggle = document.getElementById('dark-mode-toggle');
653
- const toggleIcon = toggle.querySelector('.toggle-icon');
654
- const toggleText = toggle.querySelector('.toggle-text');
655
- const htmlElement = document.documentElement;
656
-
657
- // Check for saved theme preference or use user's system preference
658
- const savedTheme = localStorage.getItem('theme');
659
- const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
660
-
661
- // Apply theme based on saved preference or system preference
662
- if (savedTheme === 'dark' || (!savedTheme && prefersDark)) {
663
- htmlElement.setAttribute('data-theme', 'dark');
664
- toggleIcon.textContent = '☀️';
665
- toggleText.textContent = 'Светлый режим';
666
- }
667
-
668
- // Toggle theme when button is clicked
669
- toggle.addEventListener('click', function() {
670
- if (htmlElement.getAttribute('data-theme') === 'dark') {
671
- htmlElement.removeAttribute('data-theme');
672
- toggleIcon.textContent = '🌙';
673
- toggleText.textContent = 'Тёмный режим';
674
- localStorage.setItem('theme', 'light');
675
- } else {
676
- htmlElement.setAttribute('data-theme', 'dark');
677
- toggleIcon.textContent = '☀️';
678
- toggleText.textContent = 'Светлый режим';
679
- localStorage.setItem('theme', 'dark');
680
- }
681
- });
682
- });
683
- '''
684
-
685
- if soup.body:
686
- soup.body.append(dark_mode_script)
687
-
688
  # Convert navigation links to breadcrumb
689
  nav_links = soup.find_all('a', href=True)
690
  breadcrumb_div = soup.new_tag('div')
 
113
  link.decompose()
114
 
115
  # Redirect part number links to Google search
116
+ # Look for links that contain part numbers (typically in the second column of the table)
117
+ part_number_links = soup.select('td:nth-child(2) a')
118
  for link in part_number_links:
119
  # Get the part number from the link text
120
  part_number = link.text.strip()
121
+ # Check if it matches a part number pattern (alphanumeric with possible spaces)
122
+ if re.match(r'^[A-Z0-9 ]+$', part_number):
123
  # Create a Google search URL for this part number with avto.pro
124
  google_search_url = f"https://www.google.com/search?q={part_number} avto.pro"
125
  # Update the link's href attribute and add target="_blank" to open in new tab
126
  link['href'] = google_search_url
127
  link['target'] = '_blank'
 
 
 
 
128
 
129
  # Update image sources to use our proxy
130
  for img in soup.find_all('img'):
 
315
  style_tag = soup.new_tag('style')
316
  style_tag.string = '''
317
  :root {
 
318
  --primary-gradient: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
319
  --hover-gradient: linear-gradient(135deg, #2980b9 0%, #2471a3 100%);
320
  --bg-gradient: linear-gradient(135deg, #f5f7fa 0%, #e4e9f2 100%);
321
  --card-shadow: 0 8px 20px rgba(0,0,0,0.08);
322
  --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
323
  }
324
  body {
325
  font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
 
327
  padding: 30px;
328
  max-width: 1400px;
329
  margin: 0 auto;
330
+ background: var(--bg-gradient);
331
+ color: #2c3e50;
332
  min-height: 100vh;
 
333
  }
334
  .breadcrumb {
335
  display: flex;
 
337
  gap: 15px;
338
  align-items: center;
339
  padding: 20px;
340
+ background: rgba(255, 255, 255, 0.98);
341
  border-radius: 16px;
342
  box-shadow: var(--card-shadow);
343
  margin-bottom: 30px;
344
  backdrop-filter: blur(10px);
345
+ border: 1px solid rgba(255, 255, 255, 0.8);
346
  }
347
  .breadcrumb a {
348
  text-decoration: none;
349
+ color: #3498db;
350
  padding: 8px 16px;
351
  border-radius: 8px;
352
  transition: var(--transition);
353
  font-weight: 500;
354
  background: rgba(52, 152, 219, 0.1);
 
 
 
 
 
355
  }
356
  .breadcrumb a:hover {
357
  background: var(--primary-gradient);
 
374
  margin: 30px 0;
375
  }
376
  li {
377
+ background: rgba(255, 255, 255, 0.98);
378
  border-radius: 16px;
379
  overflow: hidden;
380
  transition: var(--transition);
381
  box-shadow: var(--card-shadow);
382
+ border: 1px solid rgba(255, 255, 255, 0.8);
383
  }
384
  li:hover {
385
  transform: translateY(-5px);
 
389
  display: block;
390
  padding: 20px;
391
  text-decoration: none;
392
+ color: #2c3e50;
393
  font-weight: 500;
394
  transition: var(--transition);
395
+ background: rgba(255, 255, 255, 0.98);
 
 
 
 
396
  }
397
  li a:hover {
398
  background: var(--primary-gradient);
 
402
  width: 100%;
403
  border-collapse: separate;
404
  border-spacing: 0;
405
+ background: rgba(255, 255, 255, 0.98);
406
  border-radius: 16px;
407
  overflow: hidden;
408
  box-shadow: var(--card-shadow);
409
  margin: 30px 0;
410
  backdrop-filter: blur(10px);
411
+ border: 1px solid rgba(255, 255, 255, 0.8);
412
  }
413
  td {
414
  padding: 20px;
415
+ border: 1px solid rgba(236, 240, 241, 0.8);
416
  transition: var(--transition);
417
  }
418
  tr:nth-child(even) {
419
+ background: rgba(245, 247, 250, 0.5);
420
  }
421
  tr:hover {
422
  background: var(--bg-gradient);
 
456
  hr {
457
  border: none;
458
  height: 1px;
459
+ background: linear-gradient(to right, transparent, rgba(44, 62, 80, 0.2), transparent);
460
  margin: 30px 0;
461
  }
462
  .modal {
 
474
  transition: opacity 0.3s ease;
475
  }
476
 
 
 
 
 
477
  .modal.show {
478
  opacity: 1;
479
  }
 
577
  soup.append(html_tag)
578
  soup.head.append(style_tag)
579
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
580
  # Convert navigation links to breadcrumb
581
  nav_links = soup.find_all('a', href=True)
582
  breadcrumb_div = soup.new_tag('div')