aico-image-editor
Version:
Combine multiple image into and create single combined image
116 lines (86 loc) • 2.87 kB
JavaScript
// import Alpine from 'alpinejs';
let Modal;
if (!window.bootstrap) {
Modal = require('bootstrap/js/dist/modal');
} else {
Modal = window.bootstrap.Modal;
}
// import { Modal } from 'bootstrap';
// required impports for bootstrap modal's override
import EventHandler from 'bootstrap/js/src/dom/event-handler.js';
import SelectorEngine from 'bootstrap/js/src/dom/selector-engine.js';
import {reflow} from 'bootstrap/js/src/util/index'
const DATA_KEY = 'bs.modal'
const EVENT_KEY = `.${DATA_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}`
const SELECTOR_MODAL_BODY = '.modal-body';
const CLASS_NAME_SHOW = 'show'
class CustomModal extends Modal {
constructor(element, config) {
super(element, config)
}
_showElement(relatedTarget) {
// try to append dynamic modal
if (!document.body.contains(this._element)) {
//document.body.append(this._element)
}
this._element.style.display = 'block'
this._element.removeAttribute('aria-hidden')
this._element.setAttribute('aria-modal', true)
this._element.setAttribute('role', 'dialog')
this._element.scrollTop = 0
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)
if (modalBody) {
modalBody.scrollTop = 0
}
reflow(this._element)
this._element.classList.add(CLASS_NAME_SHOW)
const transitionComplete = () => {
if (this._config.focus) {
//this._focustrap.activate()
}
this._isTransitioning = false
EventHandler.trigger(this._element, EVENT_SHOWN, {
relatedTarget
})
}
this._queueCallback(transitionComplete, this._dialog, this._isAnimated())
}
}
Alpine.store('modal', {
modalsCount: 0,
createModal(el, $dispatch, options = {}) {
new CustomModal(el,{
backdrop: false,
focus: false
});
el.addEventListener('shown.bs.modal', function(event) {
event.stopPropagation()
$dispatch(el.id.toLowerCase() + '-shown', { message: 'Hello World!' })
// this.modalsCount++;
// const zIndex = 1055 + 10 * this.modalsCount;
// el.style.zIndex = zIndex;
// this.getInstance(el)._backdrop._element.style.zIndex = zIndex - 5;
}.bind(this))
el.addEventListener('hidden.bs.modal', function(event) {
event.stopPropagation()
$dispatch(el.id.toLowerCase() + '-hidden', { message: 'Hello World!' })
//this.modalsCount--;
}.bind(this))
},
openModal(el) {
const modalInstance = CustomModal.getOrCreateInstance(el);
modalInstance?.show();
},
closeModal(el) {
const modalInstance = CustomModal.getOrCreateInstance(el);
modalInstance?.hide();
},
getInstance(el) {
return CustomModal.getOrCreateInstance(el);
},
isModalVisible(el) {
el.isVisible = !el.isVisible;
return el.isVisible;
},
})