/** * @module collapseToggleHandler * @description Обработчик для Bootstrap Collapse с переключением текста/состояния. * Управляет показом/скрытием контента с синхронизацией UI (кнопки, тексты). * * HTML структура: *
Краткий текст...
*
* Полный текст... *
* * * Использование: * import { initCollapseToggle } from './collapseToggleHandler.js'; * initCollapseToggle(); */ /** * Инициализирует обработчик переключения collapse. * @returns {Object} API с методом destroy */ export function initCollapseToggle() { /** * Обработчик события show.bs.collapse. * Скрывает краткий текст и обновляет кнопку. * @param {Event} event - Bootstrap collapse событие */ function handleShow(event) { const target = event.target; const excerptSelector = target.dataset.excerpt; const btnSelector = target.dataset.btn; // Скрываем краткий текст if (excerptSelector) { const excerptEl = document.querySelector(excerptSelector); excerptEl?.classList.add('d-none'); } // Обновляем кнопку if (btnSelector) { const btn = document.querySelector(btnSelector); if (btn) { btn.querySelector('.txt-more')?.classList.add('d-none'); btn.querySelector('.txt-less')?.classList.remove('d-none'); btn.setAttribute('aria-expanded', 'true'); } } } /** * Обработчик события hide.bs.collapse. * Показывает краткий текст и обновляет кнопку. * @param {Event} event - Bootstrap collapse событие */ function handleHide(event) { const target = event.target; const excerptSelector = target.dataset.excerpt; const btnSelector = target.dataset.btn; // Показываем краткий текст if (excerptSelector) { const excerptEl = document.querySelector(excerptSelector); excerptEl?.classList.remove('d-none'); } // Обновляем кнопку if (btnSelector) { const btn = document.querySelector(btnSelector); if (btn) { btn.querySelector('.txt-more')?.classList.remove('d-none'); btn.querySelector('.txt-less')?.classList.add('d-none'); btn.setAttribute('aria-expanded', 'false'); } } } // Установка обработчиков на document (делегирование) document.addEventListener('show.bs.collapse', handleShow); document.addEventListener('hide.bs.collapse', handleHide); /** * Удаление обработчиков. */ function destroy() { document.removeEventListener('show.bs.collapse', handleShow); document.removeEventListener('hide.bs.collapse', handleHide); } return { destroy }; } // Экспорт для совместимости с неModular кодом if (typeof window !== 'undefined') { window.initCollapseToggle = initCollapseToggle; }