45 lines
915 B
JavaScript
45 lines
915 B
JavaScript
// This object will be used as the prototype for Nodes when creating a
|
|
// DOM-Level-1-compliant structure.
|
|
var NodePrototype = module.exports = {
|
|
get firstChild() {
|
|
var children = this.children;
|
|
return children && children[0] || null;
|
|
},
|
|
get lastChild() {
|
|
var children = this.children;
|
|
return children && children[children.length - 1] || null;
|
|
},
|
|
get nodeType() {
|
|
return nodeTypes[this.type] || nodeTypes.element;
|
|
}
|
|
};
|
|
|
|
var domLvl1 = {
|
|
tagName: "name",
|
|
childNodes: "children",
|
|
parentNode: "parent",
|
|
previousSibling: "prev",
|
|
nextSibling: "next",
|
|
nodeValue: "data"
|
|
};
|
|
|
|
var nodeTypes = {
|
|
element: 1,
|
|
text: 3,
|
|
cdata: 4,
|
|
comment: 8
|
|
};
|
|
|
|
Object.keys(domLvl1).forEach(function(key) {
|
|
var shorthand = domLvl1[key];
|
|
Object.defineProperty(NodePrototype, key, {
|
|
get: function() {
|
|
return this[shorthand] || null;
|
|
},
|
|
set: function(val) {
|
|
this[shorthand] = val;
|
|
return val;
|
|
}
|
|
});
|
|
});
|