2019-05-09 18:54:39 +12:00
|
|
|
(function (window) {
|
2019-05-09 20:01:51 +12:00
|
|
|
window.ls.container.get('view').add(
|
2019-05-09 18:54:39 +12:00
|
|
|
{
|
|
|
|
selector: 'data-ui-modal',
|
|
|
|
controller: function(document, element, expression) {
|
|
|
|
let name = element.dataset['name'] || null;
|
|
|
|
let buttonText = expression.parse(element.dataset['buttonText'] || '');
|
|
|
|
let buttonClass = element.dataset['buttonClass'] || 'button-class';
|
|
|
|
let buttonIcon = element.dataset['buttonIcon'] || null;
|
|
|
|
let buttonEvent = element.dataset['buttonEvent'] || '';
|
|
|
|
let buttonAlias = element.dataset['buttonAlias'] || '';
|
2019-06-09 15:44:20 +12:00
|
|
|
let buttonElements = (!buttonAlias) ? [document.createElement('button')] : document.querySelectorAll(buttonAlias);
|
2019-05-09 18:54:39 +12:00
|
|
|
let openEvent = element.dataset['openEvent'] || null; // When event triggers modal will open
|
|
|
|
let background = document.getElementById('modal-bg');
|
|
|
|
|
|
|
|
if(!background) {
|
|
|
|
background = document.createElement('div');
|
|
|
|
background.id = 'modal-bg';
|
|
|
|
background.className = 'modal-bg';
|
|
|
|
|
|
|
|
document.body.appendChild(background);
|
|
|
|
|
|
|
|
background.addEventListener('click', function() {
|
|
|
|
document.dispatchEvent(new CustomEvent('modal-close', {
|
|
|
|
bubbles: false,
|
|
|
|
cancelable: true
|
|
|
|
}));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!buttonAlias) {
|
2019-06-09 15:44:20 +12:00
|
|
|
buttonElements.forEach((button) => {
|
2019-05-09 18:54:39 +12:00
|
|
|
|
2019-06-09 15:44:20 +12:00
|
|
|
button.innerText = buttonText;
|
|
|
|
button.className = buttonClass;
|
|
|
|
button.type = 'button';
|
2019-05-09 18:54:39 +12:00
|
|
|
|
2019-06-09 15:44:20 +12:00
|
|
|
if(buttonIcon) {
|
|
|
|
let iconElement = document.createElement('i');
|
|
|
|
iconElement.className = buttonIcon;
|
|
|
|
|
|
|
|
button.insertBefore(iconElement, button.firstChild);
|
|
|
|
}
|
|
|
|
});
|
2019-05-09 18:54:39 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
if(buttonEvent) {
|
2019-06-09 15:44:20 +12:00
|
|
|
buttonElements.forEach((button) => {
|
|
|
|
button.addEventListener('click', function () {
|
|
|
|
document.dispatchEvent(new CustomEvent(buttonEvent, {
|
|
|
|
bubbles: false,
|
|
|
|
cancelable: true
|
|
|
|
}));
|
|
|
|
});
|
2019-05-09 18:54:39 +12:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
element.classList.add('modal');
|
|
|
|
|
|
|
|
if(!buttonAlias) { // Add to DOM when not alias
|
2019-06-09 15:44:20 +12:00
|
|
|
buttonElements.forEach((button) => {
|
|
|
|
element.parentNode.insertBefore(button, element);
|
|
|
|
});
|
2019-05-09 18:54:39 +12:00
|
|
|
}
|
|
|
|
|
|
|
|
let open = function () {
|
|
|
|
document.documentElement.classList.add('modal-open');
|
|
|
|
|
|
|
|
document.dispatchEvent(new CustomEvent('modal-open', {
|
|
|
|
bubbles: false,
|
|
|
|
cancelable: true
|
|
|
|
}));
|
|
|
|
|
|
|
|
element.classList.add('open');
|
|
|
|
element.classList.remove('close');
|
|
|
|
};
|
|
|
|
|
2019-05-13 08:27:33 +12:00
|
|
|
let close = function () {
|
|
|
|
document.documentElement.classList.remove('modal-open');
|
|
|
|
|
|
|
|
element.classList.add('close');
|
|
|
|
element.classList.remove('open');
|
|
|
|
};
|
|
|
|
|
2019-05-09 18:54:39 +12:00
|
|
|
if(name) {
|
|
|
|
document.querySelectorAll("[data-ui-modal-ref='" + name + "']").forEach(function(elem) {
|
|
|
|
elem.addEventListener('click', open);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if(openEvent) {
|
|
|
|
document.addEventListener(openEvent, open);
|
|
|
|
}
|
|
|
|
|
2019-06-09 15:44:20 +12:00
|
|
|
buttonElements.forEach((button) => {
|
|
|
|
button.addEventListener('click', open);
|
|
|
|
});
|
2019-05-09 18:54:39 +12:00
|
|
|
|
|
|
|
document.addEventListener('keydown', function(event) {
|
|
|
|
if (event.which === 27) {
|
2019-05-13 08:27:33 +12:00
|
|
|
close();
|
2019-05-09 18:54:39 +12:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2019-05-13 08:27:33 +12:00
|
|
|
element.addEventListener('blur', close);
|
2019-05-09 18:54:39 +12:00
|
|
|
|
2019-05-13 08:27:33 +12:00
|
|
|
let closeButtons = element.querySelectorAll('[data-ui-modal-close]');
|
2019-05-09 18:54:39 +12:00
|
|
|
|
2019-05-13 08:27:33 +12:00
|
|
|
for(let i =0; i < closeButtons.length; i++){
|
|
|
|
closeButtons[i].addEventListener('click', close);
|
|
|
|
}
|
|
|
|
|
|
|
|
document.addEventListener('modal-close', close);
|
2019-06-08 08:53:12 +12:00
|
|
|
element.addEventListener('submit', close);
|
2019-05-09 18:54:39 +12:00
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
})(window);
|