import { parseClassList } from './utils'; const initSynopsisToggle = (): void => { document.addEventListener('click', e => { const target = e.target; if (!(target instanceof Element)) return; const btn = target.closest('[data-synopsis-toggle]'); if (!btn) return; const container = document.getElementById('synopsis-container'); if (!container) return; const isClamped = container.classList.contains('line-clamp-6'); if (isClamped) { container.classList.remove('line-clamp-6'); btn.textContent = 'Show less'; return; } container.classList.add('line-clamp-6'); btn.textContent = 'Read more'; }); }; initSynopsisToggle(); const setDropdownMenuState = (menu: HTMLElement, isOpen: boolean): void => { // data attributes store the class lists to add/remove const openClasses = parseClassList(menu.getAttribute('data-dropdown-open-classes')); const closedClasses = parseClassList(menu.getAttribute('data-dropdown-closed-classes')); if (isOpen) { menu.classList.remove(...closedClasses); menu.classList.add(...openClasses); return; } menu.classList.remove(...openClasses); menu.classList.add(...closedClasses); }; const setWatchlistDropdownState = (isOpen: boolean): void => { const dropdown = document.getElementById('watchlist-dropdown'); if (!dropdown) { return; } dropdown.classList.toggle('open', isOpen); const menu = dropdown.querySelector('[data-dropdown-menu]'); if (menu instanceof HTMLElement) { setDropdownMenuState(menu, isOpen); } }; const toggleWatchlistDropdown = (): void => { const dropdown = document.getElementById('watchlist-dropdown'); if (!dropdown) { return; } setWatchlistDropdownState(!dropdown.classList.contains('open')); }; const closeDropdownOnOutsideClick = (event: MouseEvent): void => { const dropdown = document.getElementById('watchlist-dropdown'); if (!dropdown) { return; } const target = event.target; if (!(target instanceof Node)) { return; } if (!dropdown.contains(target)) { setWatchlistDropdownState(false); } }; const initWatchlistDropdown = (): void => { (window as Window & { toggleDropdown?: () => void }).toggleDropdown = toggleWatchlistDropdown; document.addEventListener('click', closeDropdownOnOutsideClick); }; initWatchlistDropdown();