|
- import GlobalEvents from "/app/js/common/EventCaller.js";
- import Input from "/app/js/ui/Input.js";
-
- class Modal{
- constructor(){
- this.__currentModalEl = null;
-
- window.addEventListener("click", (function(event){
- if (event.target === this.__currentModalEl){
- this.close_modal();
- }
- }).bind(this));
-
- GlobalEvents.listen("modal-open", (function(target, event){
- if (event.hasOwnProperty("id") && typeof(event.id) === 'string'){
- var force = (event.hasOwnProperty("force")) ? event.force === true : false;
- this.open_modal_id(event.id, force);
- }
- }).bind(this));
-
- GlobalEvents.listen("modal-close", (function(target, event){
- this.close_modal();
- }).bind(this));
-
- GlobalEvents.listen("modal-submit", (function(target, event){
- if (target !== this.__currentModalEl)
- return;
- if (!event.hasOwnProperty("subevent"))
- return;
- var ename = event.subevent;
- var vals = {};
- if (event.hasOwnProperty("ids")){
- var ids = event.ids.split(",");
- var cel = this.__currentModalEl;
- ids.forEach((item) => {
- var id = item.trim();
- var el = cel.querySelector("[name='" + id + "']");
- if (el && el.hasOwnProperty("value"))
- vals[id] = el.value;
- });
- }
- GlobalEvents.emit(ename, vals);
- if (event.hasOwnProperty("closeoncomplete"))
- this.close_modal();
- }).bind(this));
- }
-
- get currentModalElement(){
- return this.__currentModalEl;
- }
-
- open_modal_id(idname, force=false){
- var el = document.getElementById(idname);
- if (el.classList.contains("modal") && this.__currentModalEl !== el){
- if (this.__currentModalEl !== null && force)
- this.close_modal();
- if (this.__currentModalEl === null){
- if (el){
- return this.open_modal_element(el);
- }
- }
- }
- return this;
- }
-
- open_modal_element(el, force=false){
- if (el.classList.contains("modal")){
- if (this.__currentModalEl !== null && force)
- this.close_modal();
- if (this.__currentModalEl === null){
- el.classList.add("modal-visible");
- this.__currentModalEl = el;
- }
- }
- return this;
- }
-
- close_modal(){
- if (this.__currentModalEl !== null){
- this.__currentModalEl.classList.remove("modal-visible");
- this.__currentModalEl = null;
- }
- return this;
- }
- }
-
-
- const instance = new Modal();
- export default instance;
|