Skip to content

Commit f6d259a

Browse files
committed
refactor dom.js, update demo
1 parent ec543a9 commit f6d259a

File tree

2 files changed

+47
-33
lines changed

2 files changed

+47
-33
lines changed

bower.json

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{
22
"name": "DOM-Builder",
3-
"version": "0.0.0",
43
"homepage": "https://github.com/Daniel-Hug/DOM-Builder",
54
"authors": [
65
"Daniel Hug"

dom.js

+47-32
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,69 @@
1010
}
1111
})(this, function() {
1212
'use strict';
13-
return function dom(nodeData) {
14-
// string -> text node
15-
if (typeof nodeData === 'string')
16-
return document.createTextNode(nodeData);
1713

18-
// DOM node -> DOM node
19-
if (nodeData instanceof Node) return nodeData;
20-
21-
// array -> document fragment
22-
if (Array.isArray(nodeData)) {
23-
// build each node and stick in docFrag
24-
var docFrag = document.createDocumentFragment();
25-
nodeData.forEach(function(nodeData) {
26-
docFrag.appendChild(dom(nodeData));
27-
});
14+
function createDocFrag(array) {
15+
// build each node and stick in docFrag
16+
var docFrag = document.createDocumentFragment();
17+
array.forEach(function(nodeData, i) {
18+
docFrag.appendChild(dom(nodeData));
19+
});
2820

29-
return docFrag;
30-
}
21+
return docFrag;
22+
}
3123

32-
// object -> element
33-
var el = document.createElement(nodeData.el || 'div');
24+
function createEl(elData) {
25+
var el = document.createElement(elData.el || 'div');
3426

35-
for (var attr in nodeData) {
36-
if (['el', 'kid', 'kids'].indexOf(attr) === -1) {
27+
Object.keys(elData).forEach(function(key) {
28+
if (['el', 'text', 'kids'].indexOf(key) === -1) {
3729
// set JS properties
38-
if (attr[0] === '_') el[attr.slice(1)] = nodeData[attr];
30+
if (key[0] === '_') {
31+
el[key.slice(1)] = elData[key];
32+
}
3933

40-
// add event listeners
41-
else if (attr.slice(0, 3) === 'on_') {
42-
var eventName = attr.slice(3);
43-
var handlers = nodeData[attr];
34+
// add event listener(s)
35+
else if (key.slice(0, 3) === 'on_') {
36+
var eventName = key.slice(3);
37+
var handlers = elData[key];
4438

4539
// accept a function
4640
if (typeof handlers === 'function') handlers = [handlers];
4741

4842
// or an array of functions
49-
for (var i = 0; i < handlers.length; i++) el.addEventListener(eventName, handlers[i], false);
43+
for (var i = 0; i < handlers.length; i++) {
44+
el.addEventListener(eventName, handlers[i], false);
45+
}
5046
}
5147

5248
// add html attributes
53-
else el.setAttribute(attr, nodeData[attr]);
49+
else el.setAttribute(key, elData[key]);
5450
}
55-
}
51+
});
5652

57-
// add child nodes
58-
if (nodeData.text) el.textContent = nodeData.text;
59-
else if (nodeData.kids) el.appendChild(dom(nodeData.kids));
53+
// set text
54+
if (elData.text) el.textContent = elData.text;
55+
56+
// otherwise add child nodes
57+
else if (elData.kids) el.appendChild(createDocFrag(elData.kids));
6058

6159
return el;
60+
}
61+
62+
return function dom(nodeData) {
63+
var type = typeof nodeData;
64+
65+
// string -> text node
66+
return type === 'string' || type === 'number' ?
67+
document.createTextNode(nodeData) :
68+
69+
// DOM node -> DOM node
70+
nodeData instanceof Node ? nodeData :
71+
72+
// array -> document fragment
73+
Array.isArray(nodeData) ? createDocFrag(nodeData) :
74+
75+
// object -> element
76+
createEl(nodeData);
6277
};
63-
});
78+
});

0 commit comments

Comments
 (0)