diff options
| author | George Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2023-04-17 12:12:22 +0300 |
|---|---|---|
| committer | George Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2023-04-17 12:12:22 +0300 |
| commit | 68fc9e55e538e03f94509731ab41a0c8cf96710f (patch) | |
| tree | 3edb1e81864ac3eb35ba0fe8087ed24da1b812bf /public/assets/js/utils/dom.js | |
| parent | 84b2da85a1b452922dadb6a609533b9945afe51d (diff) | |
| download | classroom-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.js | 68 |
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 |
