/
ethyne
/
notes
Обзор
Документация
Войти
/
ethyne
/
notes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
v4
quartz/components/scripts/callout.inline.ts
44 строки
1 KB
Jacky Zhao
chore: add window.addCleanup() for cleaning up handlers
02 фев 2024, 08:19
02 фев 2024, 08:19
c00089b
Код
Авторство
О чём код?
function toggleCallout(this: HTMLElement) { const outerBlock = this.parentElement! outerBlock.classList.toggle("is-collapsed") const collapsed = outerBlock.classList.contains("is-collapsed") const height = collapsed ? this.scrollHeight : outerBlock.scrollHeight outerBlock.style.maxHeight = height + "px" // walk and adjust height of all parents let current = outerBlock let parent = outerBlock.parentElement while (parent) { if (!parent.classList.contains("callout")) { return } const collapsed = parent.classList.contains("is-collapsed") const height = collapsed ? parent.scrollHeight : parent.scrollHeight + current.scrollHeight parent.style.maxHeight = height + "px" current = parent parent = parent.parentElement } } function setupCallout() { const collapsible = document.getElementsByClassName( `callout is-collapsible`, ) as HTMLCollectionOf<HTMLElement> for (const div of collapsible) { const title = div.firstElementChild if (title) { title.addEventListener("click", toggleCallout) window.addCleanup(() => title.removeEventListener("click", toggleCallout)) const collapsed = div.classList.contains("is-collapsed") const height = collapsed ? title.scrollHeight : div.scrollHeight div.style.maxHeight = height + "px" } } } document.addEventListener("nav", setupCallout) window.addEventListener("resize", setupCallout)