|
9 | 9 | <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> |
10 | 10 | <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap" rel="stylesheet" /> |
11 | 11 | <script src="https://unpkg.com/lucide@latest"></script> |
| 12 | + <!-- Include the same CSS and JS as index.html --> |
| 13 | + <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" /> |
| 14 | + <link rel="stylesheet" href="style.css" /> |
| 15 | + <link rel="icon" href="Images/favicon.jpg" type="image/png" /> |
| 16 | + <script src="https://cdn.tailwindcss.com"></script> |
| 17 | + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" /> |
| 18 | + <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" |
| 19 | + integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous" /> |
12 | 20 | <style> |
13 | 21 | * { |
14 | 22 | box-sizing: border-box; |
|
618 | 626 |
|
619 | 627 | </style> |
620 | 628 | </head> |
621 | | -<body> |
| 629 | +<body class="bg-gray-900 text-gray-300 d-flex flex-column min-vh-100"> |
| 630 | + <script> |
| 631 | + // Initialize theme with fallback (no localStorage dependency) |
| 632 | + (function() { |
| 633 | + try { |
| 634 | + const saved = localStorage.getItem('theme'); |
| 635 | + const theme = saved === 'light' ? 'light' : 'dark'; |
| 636 | + document.documentElement.setAttribute('data-theme', theme); |
| 637 | + if (document.body) { |
| 638 | + document.body.classList.remove('light-theme', 'dark-theme'); |
| 639 | + document.body.classList.add(theme + '-theme'); |
| 640 | + } |
| 641 | + } catch (e) { |
| 642 | + // Fallback to dark theme if localStorage fails |
| 643 | + document.documentElement.setAttribute('data-theme', 'dark'); |
| 644 | + if (document.body) { |
| 645 | + document.body.classList.add('dark-theme'); |
| 646 | + } |
| 647 | + console.warn('Theme init error, using default dark theme', e); |
| 648 | + } |
| 649 | + })(); |
| 650 | + </script> |
622 | 651 |
|
623 | 652 |
|
624 | 653 | <script> |
|
650 | 679 | } |
651 | 680 | </script> |
652 | 681 |
|
653 | | -<nav class="navbar"> |
654 | | - <div class="container"> |
655 | | - <a class="logo" href="./index.html"> |
656 | | - Lisbook |
657 | | - </a> |
658 | | - |
659 | | - <div id="menu" class="nav-menu"> |
660 | | - <button id="menu-close" class="menu-close-btn"> |
661 | | - <svg xmlns="http://www.w3.org/2000/svg" class="icon" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
662 | | - <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" /> |
663 | | - </svg> |
664 | | - </button> |
665 | | - <a href="./index.html" class="nav-link">Home</a> |
666 | | - <a href="./about.html" class="nav-link">About</a> |
667 | | - <a href="./contact.html" class="nav-link">Contact</a> |
668 | | - <a href="./faq.html" class="nav-link">FAQs</a> |
669 | | - |
670 | | - |
671 | | - </div> |
672 | | - |
673 | | - <button id="menu-toggle" title="Menu" class="menu-toggle-btn"> |
674 | | - <svg xmlns="http://www.w3.org/2000/svg" class="icon" fill="none" viewBox="0 0 24 24" stroke="currentColor"> |
675 | | - <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" /> |
676 | | - </svg> |
677 | | - </button> |
678 | | - </div> |
679 | | - </nav> |
| 682 | + <!-- Dynamic Navbar Placeholder --> |
| 683 | + <div id="navbar-placeholder"></div> |
680 | 684 |
|
681 | 685 |
|
682 | 686 |
|
@@ -914,115 +918,23 @@ <h2>Join Our Open-Source Project!</h2> |
914 | 918 | }); |
915 | 919 | </script> |
916 | 920 |
|
| 921 | + <!-- Scripts --> |
| 922 | + <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" |
| 923 | + integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" |
| 924 | + crossorigin="anonymous"></script> |
| 925 | + |
| 926 | + <!-- Dynamic Components Loader --> |
| 927 | + <script src="dynamic-components.js"></script> |
| 928 | + |
| 929 | + <!-- Your page-specific scripts go here --> |
| 930 | + <script src="script.js"></script> |
| 931 | + <script src="app.js"></script> |
| 932 | + <script src="translation.js"></script> |
917 | 933 |
|
918 | | -<footer class="site-footer"> |
919 | | - <div class="footer-column"> |
920 | | - <div class="footer-brand"> |
921 | | - <a href="./index.html" class="brand-link"> |
922 | | - <img src="https://i.imgur.com/uR1GFCk.png" alt="Lisbook Logo" width="84" /> |
923 | | - </a> |
924 | | - <div class="brand-text"> |
925 | | - <div class="brand-title">Lisbook</div> |
926 | | - <p class="brand-tagline">LisBook is a straightforward audiobook player designed for simplicity and ease of use. |
927 | | - </p> |
928 | | - </div> |
929 | | - </div> |
930 | | - </div> |
931 | | - |
932 | | - <div class="footer-column"> |
933 | | - <h5 class="footer-col-title">Important Link</h5> |
934 | | - <ul class="footer-nav"> |
935 | | - <li class="nav-item"><a href="index.html">Home</a></li> |
936 | | - <li class="nav-item"><a href="about.html">About</a></li> |
937 | | - <li class="nav-item"><a href="contact.html">Contact</a></li> |
938 | | - <li class="nav-item"><a href="faq.html">FAQs</a></li> |
939 | | - <li class="nav-item"><a href="profile.html">Profile</a></li> |
940 | | - </ul> |
941 | | - </div> |
942 | | - |
943 | | - <div class="footer-column"> |
944 | | - <h5 class="footer-col-title">Features</h5> |
945 | | - <ul class="footer-nav"> |
946 | | - <li class="nav-item"><a href="#">Play/Pause</a></li> |
947 | | - <li class="nav-item"><a href="#">Skip Chapters</a></li> |
948 | | - <li class="nav-item"><a href="#">Change Speed</a></li> |
949 | | - <li class="nav-item"><a href="#">Change Volume</a></li> |
950 | | - <li class="nav-item"><a href="#">Change Theme</a></li> |
951 | | - </ul> |
952 | | - </div> |
953 | 934 |
|
954 | | - <div class="footer-column"> |
955 | | - <h5 class="footer-col-title">Follow Us</h5> |
956 | | - <ul class="footer-nav"> |
957 | | - <li class="nav-item"> |
958 | | - <a href="https://www.instagram.com/dev_with_ctoic" target="_blank"> |
959 | | - <i class="bi bi-instagram"></i> Instagram |
960 | | - </a> |
961 | | - </li> |
962 | | - <li class="nav-item"> |
963 | | - <a href="https://x.com/Ct0ic" target="_blank"> |
964 | | - <i class="bi bi-twitter-x"></i> Twitter-X |
965 | | - </a> |
966 | | - </li> |
967 | | - <li class="nav-item"> |
968 | | - <a href="https://www.linkedin.com/in/ctoic/" target="_blank"> |
969 | | - <i class="bi bi-linkedin"></i> LinkedIn |
970 | | - </a> |
971 | | - </li> |
972 | | - <li class="nav-item"> |
973 | | - <a href="https://github.com/Ctoic" target="_blank"> |
974 | | - <i class="bi bi-github"></i> GitHub |
975 | | - </a> |
976 | | - </li> |
977 | | - </ul> |
978 | | - </div> |
| 935 | + <!-- Dynamic Footer Placeholder --> |
| 936 | + <div id="footer-placeholder" class="mt-auto"></div> |
979 | 937 |
|
980 | | - <div class="footer-column"> |
981 | | - <h5 class="footer-col-title">Stay Updated</h5> |
982 | | - <p>Subscribe to our newsletter for updates on new features and audiobooks.</p> |
983 | | - <form id="newsletterForm"> |
984 | | - <input type="email" id="newsletterEmail" placeholder="Enter your email" required> |
985 | | - <div id="emailError" class="invalid-feedback">Please provide a valid email address.</div> |
986 | | - <button type="submit">Subscribe</button> |
987 | | - </form> |
988 | | - <div id="newsletterMessage" class="newsletter-message"></div> |
989 | | - </div> |
990 | | -</footer> |
991 | | - |
992 | | -<script > |
993 | | - document.addEventListener('DOMContentLoaded', function () { |
994 | | - const newsletterForm = document.getElementById('newsletterForm'); |
995 | | - const emailInput = document.getElementById('newsletterEmail'); |
996 | | - const emailError = document.getElementById('emailError'); |
997 | | - const newsletterMessage = document.getElementById('newsletterMessage'); |
998 | | - |
999 | | - newsletterForm.addEventListener('submit', function (event) { |
1000 | | - // Prevent the form from actually submitting to a server |
1001 | | - event.preventDefault(); |
1002 | | - |
1003 | | - // Clear previous messages |
1004 | | - newsletterMessage.textContent = ''; |
1005 | | - emailError.style.display = 'none'; |
1006 | | - emailInput.classList.remove('is-invalid'); |
1007 | | - |
1008 | | - // Simple email validation regex |
1009 | | - const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; |
1010 | | - const email = emailInput.value.trim(); |
1011 | | - |
1012 | | - if (email === '' || !emailPattern.test(email)) { |
1013 | | - // Show validation error |
1014 | | - emailError.style.display = 'block'; |
1015 | | - emailInput.classList.add('is-invalid'); |
1016 | | - newsletterMessage.textContent = ''; |
1017 | | - } else { |
1018 | | - // Show success message |
1019 | | - newsletterMessage.textContent = 'Thank you for subscribing!'; |
1020 | | - newsletterMessage.style.color = '#198754'; // Success green |
1021 | | - emailInput.value = ''; // Clear the input field |
1022 | | - } |
1023 | | - }); |
1024 | | - }); |
1025 | | -</script> |
1026 | 938 |
|
1027 | 939 |
|
1028 | 940 |
|
|
0 commit comments