jsOMS/Model/Action/Dom/Popup.js
2022-02-19 13:57:39 +01:00

82 lines
2.4 KiB
JavaScript
Executable File

/**
* Show popup.
*
* @param {Object} action Action data
* @param {function} callback Callback
* @param {string} id Action element
*
* @since 1.0.0
*/
export function popupButtonAction (action, callback, id)
{
"use strict";
const popup = action.base === 'self' ? (action.selector === '' ? [document.getElementById(id)] : document.getElementById(id).querySelectorAll(action.selector)) : document.querySelectorAll(action.selector);
for (const i in popup) {
/** global: HTMLElement */
if (!popup.hasOwnProperty(i) || !popup[i] || !(popup[i] instanceof HTMLElement)) {
continue;
}
const clone = document.importNode(popup[i].content, true);
const dim = document.getElementById('dim');
if (dim) {
document.getElementById('dim').classList.remove('vh');
}
for (const j in clone) {
if (!clone.hasOwnProperty(j) || !(clone[j] instanceof HTMLElement)) {
continue;
}
clone[j].innerHTML = clone[j].innerHTML.replace(/\{\$id\}/g, action.id);
}
document.body.insertBefore(clone, document.body.firstChild);
let e = document.getElementById(popup[i].id.substr(0, popup[i].id.length - 4));
if (!e) {
continue;
}
window.omsApp.uiManager.getActionManager().bind(e.querySelectorAll('[data-action]'));
e.classList.add('animated');
if (typeof action.aniIn !== 'undefined') {
e.classList.add(action.aniIn);
}
if (action.stay > 0) {
setTimeout(function ()
{
let out = 0;
if (typeof action.aniOut !== 'undefined') {
e.classList.remove(action.aniIn);
e.classList.add(action.aniOut);
out = 200;
}
setTimeout(function ()
{
if (typeof action.aniOut !== 'undefined') {
e.classList.add(action.aniOut);
}
e.parentElement.removeChild(e);
const dim = document.getElementById('dim');
if (dim) {
document.getElementById('dim').classList.add('vh');
}
}, out);
}, action.stay);
}
}
callback();
};