diff --git a/templates/home.hamlet b/templates/home.hamlet index 48134ec0d..0ee62ec29 100644 --- a/templates/home.hamlet +++ b/templates/home.hamlet @@ -74,8 +74,8 @@ ^{btnWdgt}

  • Modals: - ^{modal ".toggler" Nothing} - Klick mich für Ajax-Test + ^{modal ".toggler1" Nothing} + Klick mich für Ajax-Test ^{modal ".toggler2" (Just "Test wegen Modal")}
    Klick mich für Content-Test diff --git a/templates/standalone/modal.julius b/templates/standalone/modal.julius index 6917aeffc..e5ae95c3d 100644 --- a/templates/standalone/modal.julius +++ b/templates/standalone/modal.julius @@ -8,11 +8,8 @@ var closer = document.createElement('div'); var trigger = document.querySelector(modal.dataset.trigger); var origParent = modal.parentNode; - var closeBound; - var self = this; - var lastOverlayTouch = 0; - this.open = function openFn(event) { + function open(event) { if (event) { event.preventDefault(); } @@ -26,80 +23,65 @@ if (modal.dataset.closeable === 'true') { closer.classList.add('modal__closer'); modal.insertBefore(closer, null); - closer.addEventListener('click', closeBound, false); - overlay.addEventListener('click', closeBound, false); + closer.addEventListener('click', close, false); + overlay.addEventListener('click', close, false); } - }; + } - this.openOnEvent = function openOnEventFn(event) { + // open this modal with an event: + // document.dispatchEvent(new CustomEvent('modal-open', { dateils: {for: 'modal-13'}})) + function openOnEvent(event) { if (event.detail.for === modal.getAttribute('id')) { - self.open(); + open(); } - }; - this.close = function closeFn(event) { + } + + function close(event) { if (typeof event === 'undefined' || event.target === closer || event.target === overlay) { overlay.remove(); origParent.insertBefore(modal, null); modal.classList.remove('modal--open'); toggleScroll(true); - closer.removeEventListener('click', closeBound, false); + closer.removeEventListener('click', close, false); } }; - document.addEventListener('modal-open', self.openOnEvent, false); - closeBound = self.close; - if (trigger) { - trigger.classList.add('modal__trigger'); - trigger.addEventListener('click', self.open, false); + function setup() { + document.addEventListener('modal-open', openOnEvent, false); + if (trigger) { + trigger.classList.add('modal__trigger'); + trigger.addEventListener('click', open, false); + } + var replaceMe = modal.querySelector('.replace-me'); + var replaceWith = trigger ? trigger.getAttribute('href') : ''; + if (replaceMe) { + replaceMe.classList.remove('replace-me'); + replaceMe.innerText = '...loading'; + if (replaceWith.length > 0) { + fetch(replaceWith).then(function(response) { + return response.text(); + }).then(function(body) { + var modalContent = document.createElement('div'); + modalContent.innerHTML = body; + var main = modalContent.querySelector('.main__content'); + if (main) { + replaceMe.innerText = ''; + replaceMe.insertBefore(main, null); + } else { + replaceMe.innerhTML = body; + } + }); + + } + } + modal.classList.add('js-modal-initialized'); } - modal.classList.add('js-modal-initialized'); + setup(); }; function toggleScroll(scrollable) { - if (!scrollable) { - // document.addEventListener('scroll', catchScroll, false); - disableScroll(); - } else { - enableScroll(); - } + document.body.classList.toggle('no-scroll', !scrollable); } - - - // following from here: https://stackoverflow.com/questions/4770025/how-to-disable-scrolling-temporarily - var keys = {37: 1, 38: 1, 39: 1, 40: 1}; - - function preventDefault(e) { - e = e || window.event; - if (e.preventDefault) - e.preventDefault(); - e.returnValue = false; - } - - function preventDefaultForScrollKeys(e) { - if (keys[e.keyCode]) { - preventDefault(e); - return false; - } - } - - function disableScroll() { - if (window.addEventListener) // older FF - window.addEventListener('DOMMouseScroll', preventDefault, false); - window.onwheel = preventDefault; // modern standard - window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE - window.ontouchmove = preventDefault; // mobile - document.onkeydown = preventDefaultForScrollKeys; - } - - function enableScroll() { - if (window.removeEventListener) - window.removeEventListener('DOMMouseScroll', preventDefault, false); - window.onmousewheel = document.onmousewheel = null; - window.onwheel = null; - window.ontouchmove = null; - document.onkeydown = null; - } - // till here })(); document.addEventListener('DOMContentLoaded', function() { diff --git a/templates/widgets/modal.lucius b/templates/standalone/modal.lucius similarity index 98% rename from templates/widgets/modal.lucius rename to templates/standalone/modal.lucius index bb449f0ed..a511f58c6 100644 --- a/templates/widgets/modal.lucius +++ b/templates/standalone/modal.lucius @@ -73,6 +73,7 @@ background-color: var(--darkbase); border-radius: 2px; cursor: pointer; + z-index: 20; &::before { content: '\e014';