From 7aa203150fc1a2ec79c681c13f0d486d531746eb Mon Sep 17 00:00:00 2001 From: George Halkiadakis Date: Sun, 12 Mar 2023 23:57:48 +0200 Subject: error pages; js system to support back/front-end --- html/assets/js/utils/dom.js | 68 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 html/assets/js/utils/dom.js (limited to 'html/assets/js/utils/dom.js') diff --git a/html/assets/js/utils/dom.js b/html/assets/js/utils/dom.js new file mode 100644 index 0000000..78f3562 --- /dev/null +++ b/html/assets/js/utils/dom.js @@ -0,0 +1,68 @@ +define(function () { + const reduce = (elements, fn, initialValue) => { + return Array.prototype.reduce.call(elements, fn, initialValue); + } + + const forEach = (elements, fn) => { + Array.prototype.forEach.call(elements, fn); + } + const map = (elements, fn) => { + return Array.prototype.map.call(elements, fn); + } + + const replace = (toReplace, replacement) => { + var parentElement = toReplace.parentElement + if (parentElement) { + parentElement.replaceChild(replacement, toReplace); + } + } + + const matches = (element, selector) => { + var m = element.matches + || Element.prototype.matchesSelector + || Element.prototype.mozMatchesSelector + || Element.prototype.msMatchesSelector + || Element.prototype.oMatchesSelector + || Element.prototype.webkitMatchesSelector; + return m.call(element, selector); + } + + const closest = (element, selector) => { + while (element) { + if (matches(element, selector)) { + return element; + } else { + element = element.parentElement; + } + } + return null; + } + const isFunction = (input) => (typeof input === "function"); + const dispatchEvent = (eventName, data) => { + let event; + if (window.CustomEvent && isFunction(window.CustomEvent)) { + event = new CustomEvent(eventName, { detail: data, cancelable: true, bubbles: false }); + } else { + event = document.createEvent('CustomEvent'); + event.initCustomEvent(eventName, false, true, data); + } + return window.document.dispatchEvent(event); + } + + const parseHtml = (htmlString) => { + const c = document.createElement('div'); + c.innerHTML = htmlString.trim(); + return c.firstChild; + } + + return { + dispatchEvent, + closest, + matches, + reduce, + map, + forEach, + replace, + parseHtml + }; +}); \ No newline at end of file -- cgit v1.2.3