UNPKG

framework7

Version:

Full featured mobile HTML framework for building iOS & Android apps

101 lines (87 loc) 2.39 kB
import $ from 'dom7'; import Utils from '../../utils/utils'; import Modal from '../modal/modal-class'; class Popup extends Modal { constructor(app, params) { const extendedParams = Utils.extend( { on: {} }, app.params.popup, params ); // Extends with open/close Modal methods; super(app, extendedParams); const popup = this; popup.params = extendedParams; // Find Element let $el; if (!popup.params.el) { $el = $(popup.params.content); } else { $el = $(popup.params.el); } if ($el && $el.length > 0 && $el[0].f7Modal) { return $el[0].f7Modal; } if ($el.length === 0) { return popup.destroy(); } let $backdropEl; if (popup.params.backdrop) { $backdropEl = app.root.children('.popup-backdrop'); if ($backdropEl.length === 0) { $backdropEl = $('<div class="popup-backdrop"></div>'); app.root.append($backdropEl); } } Utils.extend(popup, { app, $el, el: $el[0], $backdropEl, backdropEl: $backdropEl && $backdropEl[0], type: 'popup', }); function handleClick(e) { const target = e.target; const $target = $(target); if ($target.closest(popup.el).length === 0) { if ( popup.params && popup.params.closeByBackdropClick && popup.params.backdrop && popup.backdropEl && popup.backdropEl === target ) { let needToClose = true; popup.$el.nextAll('.popup.modal-in').each((index, popupEl) => { const popupInstance = popupEl.f7Modal; if (!popupInstance) return; if ( popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === popup.backdropEl ) { needToClose = false; } }); if (needToClose) { popup.close(); } } } } popup.on('popupOpened', () => { if (popup.params.closeByBackdropClick) { app.on('click', handleClick); } }); popup.on('popupClose', () => { if (popup.params.closeByBackdropClick) { app.off('click', handleClick); } }); $el[0].f7Modal = popup; return popup; } } export default Popup;