summaryrefslogtreecommitdiff
path: root/public/assets/js/utils/dom.js
diff options
context:
space:
mode:
authorGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-17 12:12:22 +0300
committerGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-04-17 12:12:22 +0300
commit68fc9e55e538e03f94509731ab41a0c8cf96710f (patch)
tree3edb1e81864ac3eb35ba0fe8087ed24da1b812bf /public/assets/js/utils/dom.js
parent84b2da85a1b452922dadb6a609533b9945afe51d (diff)
downloadclassroom-68fc9e55e538e03f94509731ab41a0c8cf96710f.tar.gz
classroom-68fc9e55e538e03f94509731ab41a0c8cf96710f.tar.bz2
classroom-68fc9e55e538e03f94509731ab41a0c8cf96710f.zip
setup a real server environment (apache DocumentRoot=/var/www/public)
Diffstat (limited to 'public/assets/js/utils/dom.js')
-rw-r--r--public/assets/js/utils/dom.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/public/assets/js/utils/dom.js b/public/assets/js/utils/dom.js
new file mode 100644
index 0000000..78f3562
--- /dev/null
+++ b/public/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