97 lines
2.7 KiB
JavaScript
97 lines
2.7 KiB
JavaScript
class ModalController {
|
|
constructor() {
|
|
const self = this;
|
|
self.modalContainer = $('v-modal-container');
|
|
self.observer = new MutationObserver(function () {
|
|
if (self.modalContainer.children.length > 0) {
|
|
self.modalContainer.classList.add('open');
|
|
} else {
|
|
self.modalContainer.classList.remove('open');
|
|
}
|
|
});
|
|
const config = {attributes: false, childList: true, characterData: false};
|
|
self.observer.observe(self.modalContainer, config);
|
|
}
|
|
|
|
static create(header, content, closeButton = true) {
|
|
return registry.get('modal').createModal(header, content, closeButton);
|
|
}
|
|
|
|
createModal(header, content, closeButton) {
|
|
return template.render('gui/modal', {
|
|
header: header,
|
|
content: content,
|
|
closeButton: closeButton ? '' : 'close'
|
|
}).then(node => {
|
|
this.modalContainer.appendChild(node);
|
|
if (closeButton) {
|
|
node.addDelegatedEventListener('click', '.close-modal', () => {
|
|
console.log("remove");
|
|
node.remove();
|
|
})
|
|
}
|
|
return node;
|
|
});
|
|
}
|
|
}
|
|
|
|
class ConfirmDialog {
|
|
constructor() {
|
|
const self = this;
|
|
this.dissmiss = new Promise((resolve, reject) => {
|
|
self.resolve = resolve;
|
|
self.reject = reject;
|
|
});
|
|
this.id = VUtils.tempId();
|
|
}
|
|
|
|
static async create(header, text, options) {
|
|
const dialog = new ConfirmDialog();
|
|
const data = dialog.getContent(text, options);
|
|
const content = await template.renderOn('gui/dialog-confirm', data);
|
|
const modal = await ModalController.create(header, content, false);
|
|
modal.addDelegatedEventListener('click', '.modal-confirm-button', (ev, el) => {
|
|
dialog.close(el.dataset.value);
|
|
});
|
|
dialog.modal = modal;
|
|
return dialog.onDismiss();
|
|
}
|
|
|
|
static async createBasic(header, text) {
|
|
return this.create(header, text, [
|
|
{
|
|
type: 'error',
|
|
value: "0",
|
|
content: 'Nein',
|
|
}, {
|
|
type: 'primary',
|
|
value: "1",
|
|
content: 'Ja',
|
|
}
|
|
]);
|
|
}
|
|
|
|
getContent(text, options) {
|
|
return {
|
|
text: text,
|
|
options: options
|
|
}
|
|
}
|
|
|
|
close(value) {
|
|
this.modal.remove();
|
|
this.resolve(value);
|
|
}
|
|
|
|
onDismiss() {
|
|
return this.dissmiss;
|
|
}
|
|
}
|
|
|
|
(() => {
|
|
moduleLoader.isModuleLoaded(['Registry'], () => {
|
|
const modal = new ModalController();
|
|
registry.set('modal', modal);
|
|
})
|
|
})();
|