| // 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; |
| } |
| }); |
| }); |