Opravy střední priority - sjednocení cest, lazy loading, minifikace

- Sjednoceny všechny relativní cesty na absolutní (od kořene /web/)
- Přidáno loading="lazy" pro všechny obrázky pod foldem
- Vytvořeny minifikované verze:
  - web/js/min/shared.min.js (125 → 3 řádky)
  - web/css/min/shared.min.css
  - web/css/min/variables.min.css
- Přidány dev dependencies: cssnano, terser
- Vytvořen minify.js skript pro budoucí minifikaci

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
kankys committed 2026-08-10 20:08:15 +02:00
1 parent c816b42bc8
commit 31833adfb7
52 files changed
+4207 -51

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
npm notice run npx
npm notice run 'terser' js/shared.js
function setupMobileMenu(){const menuIcon=document.querySelector(".menu-icon");const menuList=document.querySelector("nav");const hamburgerIcon=document.querySelector(".fa-solid");if(menuIcon&&hamburgerIcon&&menuList){menuIcon.addEventListener("click",()=>{if(hamburgerIcon.classList.contains("fa-bars")){hamburgerIcon.classList.add("fa-xmark");hamburgerIcon.classList.remove("fa-bars");menuList.style.display="block"}else{hamburgerIcon.classList.add("fa-bars");hamburgerIcon.classList.remove("fa-xmark");menuList.style.display="none"}})}}function scrollToTop(){document.body.scrollTop=0;document.documentElement.scrollTop=0}function setupScrollToTopButton(buttonId="scrollToTopBtn"){const scrollToTopBtn=document.getElementById(buttonId);if(scrollToTopBtn){window.onscroll=function(){if(document.body.scrollTop>20||document.documentElement.scrollTop>20){scrollToTopBtn.style.display="block"}else{scrollToTopBtn.style.display="none"}}}}function setupThemeToggle(config={}){const defaults={toggleButtonId:"toggleButton",storageKey:"themePreference",defaultTheme:"dark"};const options={...defaults,...config};const toggleButton=document.getElementById(options.toggleButtonId);if(!toggleButton)return;const savedTheme=localStorage.getItem(options.storageKey)||options.defaultTheme;let isDarkMode=savedTheme==="dark";if(isDarkMode){document.body.classList.add("dark-theme")}else{document.body.classList.remove("dark-theme")}function toggleTheme(){isDarkMode=!isDarkMode;if(isDarkMode){document.body.classList.add("dark-theme");localStorage.setItem(options.storageKey,"dark")}else{document.body.classList.remove("dark-theme");localStorage.setItem(options.storageKey,"light")}if(options.onToggle){options.onToggle(isDarkMode)}}toggleButton.addEventListener("click",toggleTheme)}function setupImageZoom(selector=".picture",scale=2.2){const images=document.querySelectorAll(selector);images.forEach((img,index)=>{img.addEventListener("mouseenter",()=>{img.style.transform=`scale(${scale})`});img.addEventListener("mouseleave",()=>{img.style.transform="scale(1)"})})}document.addEventListener("DOMContentLoaded",function(){setupMobileMenu();setupScrollToTopButton();setupThemeToggle();setupImageZoom()});
+1
View File
@@ -0,0 +1 @@
function setupMobileMenu(){const e=document.querySelector(".menu-icon"),t=document.querySelector("nav"),o=document.querySelector(".fa-solid");e&&o&&t&&e.addEventListener("click",()=>{o.classList.contains("fa-bars")?(o.classList.add("fa-xmark"),o.classList.remove("fa-bars"),t.style.display="block"):(o.classList.add("fa-bars"),o.classList.remove("fa-xmark"),t.style.display="none")})}function scrollToTop(){document.body.scrollTop=0,document.documentElement.scrollTop=0}function setupScrollToTopButton(e="scrollToTopBtn"){const t=document.getElementById(e);t&&(window.onscroll=function(){document.body.scrollTop>20||document.documentElement.scrollTop>20?t.style.display="block":t.style.display="none"})}function setupThemeToggle(e={}){const t={toggleButtonId:"toggleButton",storageKey:"themePreference",defaultTheme:"dark",...e},o=document.getElementById(t.toggleButtonId);if(!o)return;let n="dark"===(localStorage.getItem(t.storageKey)||t.defaultTheme);n?document.body.classList.add("dark-theme"):document.body.classList.remove("dark-theme"),o.addEventListener("click",function(){n=!n,n?(document.body.classList.add("dark-theme"),localStorage.setItem(t.storageKey,"dark")):(document.body.classList.remove("dark-theme"),localStorage.setItem(t.storageKey,"light")),t.onToggle&&t.onToggle(n)})}function setupImageZoom(e=".picture",t=2.2){document.querySelectorAll(e).forEach((e,o)=>{e.addEventListener("mouseenter",()=>{e.style.transform=`scale(${t})`}),e.addEventListener("mouseleave",()=>{e.style.transform="scale(1)"})})}document.addEventListener("DOMContentLoaded",function(){setupMobileMenu(),setupScrollToTopButton(),setupThemeToggle(),setupImageZoom()});