Skip to content

Commit 69acdee

Browse files
committed
add(js-sdk-v2): uibuilder in vanilla JS
1 parent 2a9082e commit 69acdee

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

src/lib/templateBuilder.js

Whitespace-only changes.

src/lib/uiBuilder.js

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/* eslint wrap-iife: ["error", "inside"] */
2+
/* eslint arrow-parens: ["error", "as-needed"] */
3+
const MAX_LISTENERS = 1;
4+
const uiBuilder = document => {
5+
debugger;
6+
const listeners = [];
7+
const getAllListeners = listeners =>
8+
listeners.map(listener => listener.eventName);
9+
let matches;
10+
11+
(function(doc) {
12+
matches =
13+
doc.matchesSelector ||
14+
doc.webkitMatchesSelector ||
15+
doc.mozMatchesSelector ||
16+
doc.oMatchesSelector ||
17+
doc.msMatchesSelector;
18+
})(document.documentElement);
19+
20+
const findParent = (el, elementString) => {
21+
const matchFound = matches.call(el, elementString);
22+
return matchFound ? el : findParent(el.parentNode, elementString);
23+
};
24+
25+
const addEventListener = (eventName, handler) => {
26+
if (
27+
listeners.filter(listener => listener.eventName === eventName).length <=
28+
MAX_LISTENERS
29+
) {
30+
const eventHandler = e => {
31+
const els = listeners.filter(
32+
listener =>
33+
matches.call(e.target, [
34+
listener.elementString,
35+
`${listener.elementString} *`
36+
]) && listener.eventName === eventName
37+
);
38+
if (els.length > 0) {
39+
els.forEach(el => {
40+
const target = findParent(e.target, el.elementString);
41+
el.handler.call(target, e);
42+
});
43+
}
44+
};
45+
46+
if (document.addEventListener) {
47+
document.addEventListener(eventName, eventHandler);
48+
} else {
49+
document.attachEvent('on' + eventName, eventHandler);
50+
}
51+
}
52+
};
53+
54+
return {
55+
find(elementString) {
56+
return document.querySelector(elementString);
57+
},
58+
findAll(elementString) {
59+
return Array.prototype.slice.call(
60+
document.querySelectorAll(elementString)
61+
);
62+
},
63+
append(elementString, content) {
64+
const els = this.findAll(elementString);
65+
if (els.length > 0) {
66+
els.forEach(el => {
67+
if (typeof content === 'string') {
68+
el.insertAdjacentHTML('afterend', content);
69+
} else {
70+
el.appendChild(content);
71+
}
72+
});
73+
}
74+
},
75+
manageEvent(elementString, eventName, handler) {
76+
listeners.push({ eventName, elementString, handler });
77+
addEventListener(eventName, handler);
78+
}
79+
};
80+
};

0 commit comments

Comments
 (0)