diff options
Diffstat (limited to 'internal/ui/static/js/dom_helper.js')
-rw-r--r-- | internal/ui/static/js/dom_helper.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/internal/ui/static/js/dom_helper.js b/internal/ui/static/js/dom_helper.js new file mode 100644 index 00000000..fffa6965 --- /dev/null +++ b/internal/ui/static/js/dom_helper.js @@ -0,0 +1,65 @@ +class DomHelper { + static isVisible(element) { + return element.offsetParent !== null; + } + + static openNewTab(url) { + let win = window.open(""); + win.opener = null; + win.location = url; + win.focus(); + } + + static scrollPageTo(element, evenIfOnScreen) { + let windowScrollPosition = window.pageYOffset; + let windowHeight = document.documentElement.clientHeight; + let viewportPosition = windowScrollPosition + windowHeight; + let itemBottomPosition = element.offsetTop + element.offsetHeight; + + if (evenIfOnScreen || viewportPosition - itemBottomPosition < 0 || viewportPosition - element.offsetTop > windowHeight) { + window.scrollTo(0, element.offsetTop - 10); + } + } + + static getVisibleElements(selector) { + let elements = document.querySelectorAll(selector); + let result = []; + + for (let i = 0; i < elements.length; i++) { + if (this.isVisible(elements[i])) { + result.push(elements[i]); + } + } + + return result; + } + + static findParent(element, selector) { + for (; element && element !== document; element = element.parentNode) { + if (element.classList.contains(selector)) { + return element; + } + } + + return null; + } + + static hasPassiveEventListenerOption() { + var passiveSupported = false; + + try { + var options = Object.defineProperty({}, "passive", { + get: function() { + passiveSupported = true; + } + }); + + window.addEventListener("test", options, options); + window.removeEventListener("test", options, options); + } catch(err) { + passiveSupported = false; + } + + return passiveSupported; + } +} |