From 2b6970d33afd75be5bfef951dc3691d492004d43 Mon Sep 17 00:00:00 2001 From: George Halkiadakis Date: Tue, 18 Apr 2023 01:11:37 +0300 Subject: admin back-office environment (skeleton); admin categories --- public/assets/js/_dependency-control/utils/dom.js | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 public/assets/js/_dependency-control/utils/dom.js (limited to 'public/assets/js/_dependency-control/utils/dom.js') diff --git a/public/assets/js/_dependency-control/utils/dom.js b/public/assets/js/_dependency-control/utils/dom.js new file mode 100644 index 0000000..78f3562 --- /dev/null +++ b/public/assets/js/_dependency-control/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