UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

136 lines (122 loc) 4.39 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _dom = _interopRequireDefault(require("../../shared/dom7")); var _utils = require("../../shared/utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Accordion = { toggleClicked: function toggleClicked($clickedEl) { var app = this; var $accordionItemEl = $clickedEl.closest('.accordion-item').eq(0); if (!$accordionItemEl.length) $accordionItemEl = $clickedEl.parents('li').eq(0); var $accordionContent = $clickedEl.parents('.accordion-item-content').eq(0); if ($accordionContent.length) { if ($accordionContent.parents($accordionItemEl).length) return; } if ($clickedEl.parents('li').length > 1 && $clickedEl.parents('li')[0] !== $accordionItemEl[0]) return; app.accordion.toggle($accordionItemEl); }, open: function open(el) { var app = this; var $el = (0, _dom.default)(el); var prevented = false; function prevent() { prevented = true; } $el.trigger('accordion:beforeopen', { prevent: prevent }, prevent); app.emit('accordionBeforeOpen', $el[0], prevent); if (prevented) return; var $list = $el.parents('.accordion-list').eq(0); var $contentEl = $el.children('.accordion-item-content'); $contentEl.removeAttr('aria-hidden'); if ($contentEl.length === 0) $contentEl = $el.find('.accordion-item-content'); if ($contentEl.length === 0) return; var $openedItem = $list.length > 0 && $el.parent().children('.accordion-item-opened'); if ($openedItem.length > 0) { app.accordion.close($openedItem); } $contentEl.transitionEnd(function () { if ($el.hasClass('accordion-item-opened')) { $contentEl.transition(0); $contentEl.css('height', 'auto'); (0, _utils.nextFrame)(function () { $contentEl.transition(''); $el.trigger('accordion:opened'); app.emit('accordionOpened', $el[0]); }); } else { $contentEl.css('height', ''); $el.trigger('accordion:closed'); app.emit('accordionClosed', $el[0]); } }); $contentEl.css('height', $contentEl[0].scrollHeight + "px"); $el.trigger('accordion:open'); $el.addClass('accordion-item-opened'); app.emit('accordionOpen', $el[0]); }, close: function close(el) { var app = this; var $el = (0, _dom.default)(el); var prevented = false; function prevent() { prevented = true; } $el.trigger('accordion:beforeclose', { prevent: prevent }, prevent); app.emit('accordionBeforeClose', $el[0], prevent); if (prevented) return; var $contentEl = $el.children('.accordion-item-content'); if ($contentEl.length === 0) $contentEl = $el.find('.accordion-item-content'); $el.removeClass('accordion-item-opened'); $contentEl.attr('aria-hidden', true); $contentEl.transition(0); $contentEl.css('height', $contentEl[0].scrollHeight + "px"); // Close $contentEl.transitionEnd(function () { if ($el.hasClass('accordion-item-opened')) { $contentEl.transition(0); $contentEl.css('height', 'auto'); (0, _utils.nextFrame)(function () { $contentEl.transition(''); $el.trigger('accordion:opened'); app.emit('accordionOpened', $el[0]); }); } else { $contentEl.css('height', ''); $el.trigger('accordion:closed'); app.emit('accordionClosed', $el[0]); } }); (0, _utils.nextFrame)(function () { $contentEl.transition(''); $contentEl.css('height', ''); $el.trigger('accordion:close'); app.emit('accordionClose', $el[0]); }); }, toggle: function toggle(el) { var app = this; var $el = (0, _dom.default)(el); if ($el.length === 0) return; if ($el.hasClass('accordion-item-opened')) app.accordion.close(el);else app.accordion.open(el); } }; var _default = { name: 'accordion', create: function create() { var app = this; (0, _utils.bindMethods)(app, { accordion: Accordion }); }, clicks: { '.accordion-item .item-link, .accordion-item-toggle, .links-list.accordion-list > ul > li > a': function open($clickedEl) { var app = this; Accordion.toggleClicked.call(app, $clickedEl); } } }; exports.default = _default;