-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathraptor-dom-client.js
123 lines (116 loc) · 3.54 KB
/
raptor-dom-client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
var raptorPubsub = require('raptor-pubsub');
function getNode(el) {
if (typeof el === 'string') {
var elId = el;
el = document.getElementById(elId);
if (!el) {
throw new Error('Target element not found: "' + elId + '"');
}
}
return el;
}
function _beforeRemove(referenceEl) {
if (raptorPubsub) {
raptorPubsub.emit('dom/beforeRemove', {
el: referenceEl
});
}
}
var dom = {
forEachChildEl: function(node, callback, scope) {
dom.forEachChild(node, callback, scope, 1);
},
forEachChild: function(node, callback, scope, nodeType) {
if (!node) {
return;
}
var i = 0;
var childNodes = node.childNodes;
var len = childNodes.length;
for (; i < len; i++) {
var childNode = childNodes[i];
if (childNode && (nodeType == null || nodeType == childNode.nodeType)) {
callback.call(scope, childNode);
}
}
},
detach: function(child) {
child = getNode(child);
child.parentNode.removeChild(child);
},
appendTo: function(newChild, referenceParentEl) {
getNode(referenceParentEl).appendChild(getNode(newChild));
},
remove: function(el) {
el = getNode(el);
_beforeRemove(el);
if (el.parentNode) {
el.parentNode.removeChild(el);
}
},
removeChildren: function(parentEl) {
parentEl = getNode(parentEl);
var i = 0;
var childNodes = parentEl.childNodes;
var len = childNodes.length;
for (; i < len; i++) {
var childNode = childNodes[i];
if (childNode && childNode.nodeType === 1) {
_beforeRemove(childNode);
}
}
parentEl.innerHTML = '';
},
replace: function(newChild, replacedChild) {
replacedChild = getNode(replacedChild);
_beforeRemove(replacedChild);
replacedChild.parentNode.replaceChild(getNode(newChild), replacedChild);
},
replaceChildrenOf: function(newChild, referenceParentEl) {
referenceParentEl = getNode(referenceParentEl);
dom.forEachChildEl(referenceParentEl, function(childEl) {
_beforeRemove(childEl);
});
referenceParentEl.innerHTML = '';
referenceParentEl.appendChild(getNode(newChild));
},
insertBefore: function(newChild, referenceChild) {
referenceChild = getNode(referenceChild);
referenceChild.parentNode.insertBefore(getNode(newChild), referenceChild);
},
insertAfter: function(newChild, referenceChild) {
referenceChild = getNode(referenceChild);
newChild = getNode(newChild);
var nextSibling = referenceChild.nextSibling;
var parentNode = referenceChild.parentNode;
if (nextSibling) {
parentNode.insertBefore(newChild, nextSibling);
} else {
parentNode.appendChild(newChild);
}
},
prependTo: function(newChild, referenceParentEl) {
referenceParentEl = getNode(referenceParentEl);
referenceParentEl.insertBefore(getNode(newChild), referenceParentEl.firstChild || null);
}
};
/*
var jquery = window.$;
if (!jquery) {
try {
jquery = require('jquery');
}
catch(e) {}
}
if (jquery) {
dom.ready = function(callback, thisObj) {
jquery(function() {
callback.call(thisObj);
});
};
} else {
dom.ready = require('./raptor-dom_documentReady');
}
*/
dom.ready = require('./ready');
module.exports = dom;