aboutsummaryrefslogtreecommitdiff
path: root/internal/ui/static/js/dom_helper.js
diff options
context:
space:
mode:
Diffstat (limited to 'internal/ui/static/js/dom_helper.js')
-rw-r--r--internal/ui/static/js/dom_helper.js65
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;
+ }
+}