min-document
Advanced tools
Comparing version 2.5.0 to 2.6.0
@@ -30,2 +30,6 @@ var dispatchEvent = require("./event/dispatch-event.js") | ||
DOMElement.prototype.appendChild = function _Element_appendChild(child) { | ||
if (child.parentNode) { | ||
child.parentNode.removeChild(child) | ||
} | ||
this.childNodes.push(child) | ||
@@ -37,4 +41,11 @@ child.parentNode = this | ||
function _Element_replaceChild(elem, needle) { | ||
// TODO: Throw NotFoundError if needle.parentNode !== this | ||
if (elem.parentNode) { | ||
elem.parentNode.removeChild(elem) | ||
} | ||
var index = this.childNodes.indexOf(needle) | ||
needle.parentNode = null | ||
this.childNodes[index] = elem | ||
@@ -45,7 +56,32 @@ elem.parentNode = this | ||
DOMElement.prototype.removeChild = function _Element_removeChild(elem) { | ||
// TODO: Throw NotFoundError if elem.parentNode !== this | ||
var index = this.childNodes.indexOf(elem) | ||
this.childNodes[index].parentNode = null | ||
this.childNodes.splice(index, 1) | ||
} | ||
DOMElement.prototype.insertBefore = | ||
function _Element_insertBefore(newElement, referenceElement) { | ||
// TODO: Throw NotFoundError if referenceElement is a dom node | ||
// and parentNode !== this | ||
if (newElement.parentNode) { | ||
newElement.parentNode.removeChild(newElement) | ||
} | ||
var index = referenceElement ? | ||
this.childNodes.indexOf(referenceElement) : | ||
-1 | ||
if (index > -1) { | ||
this.childNodes.splice(index, 0, newElement) | ||
} else { | ||
this.childNodes.push(newElement) | ||
} | ||
newElement.parentNode = this | ||
} | ||
DOMElement.prototype.addEventListener = addEventListener | ||
@@ -52,0 +88,0 @@ DOMElement.prototype.dispatchEvent = dispatchEvent |
{ | ||
"name": "min-document", | ||
"version": "2.5.0", | ||
"version": "2.6.0", | ||
"description": "A minimal DOM implementation", | ||
@@ -5,0 +5,0 @@ "keywords": [], |
@@ -57,3 +57,2 @@ var test = require("tape") | ||
test("can getElementById", function (assert) { | ||
@@ -137,27 +136,27 @@ | ||
assert.equal(noNS.namespaceURI, htmlURI) | ||
assert.equal(String(noNS.outerHTML || noNS), "<div></div>") | ||
assert.equal(elemString(noNS), "<div></div>") | ||
assert.equal(svgNS.tagName, "svg") | ||
assert.equal(svgNS.namespaceURI, svgURI) | ||
assert.equal(String(svgNS.outerHTML || svgNS), "<svg></svg>") | ||
assert.equal(elemString(svgNS), "<svg></svg>") | ||
assert.equal(emptyNS.tagName, "div") | ||
assert.equal(emptyNS.namespaceURI, null) | ||
assert.equal(String(emptyNS.outerHTML || emptyNS), "<div></div>") | ||
assert.equal(elemString(emptyNS), "<div></div>") | ||
assert.equal(nullNS.tagName, "div") | ||
assert.equal(nullNS.namespaceURI, null) | ||
assert.equal(String(nullNS.outerHTML || nullNS), "<div></div>") | ||
assert.equal(elemString(nullNS), "<div></div>") | ||
assert.equal(undefNS.tagName, "div") | ||
assert.equal(undefNS.namespaceURI, "undefined") | ||
assert.equal(String(undefNS.outerHTML || undefNS), "<div></div>") | ||
assert.equal(elemString(undefNS), "<div></div>") | ||
assert.equal(caseNS.tagName, "AbC") | ||
assert.equal(caseNS.namespaceURI, "Oops") | ||
assert.equal(String(caseNS.outerHTML || caseNS), "<AbC></AbC>") | ||
assert.equal(elemString(caseNS), "<AbC></AbC>") | ||
assert.equal(htmlNS.tagName, "DIV") | ||
assert.equal(htmlNS.namespaceURI, htmlURI) | ||
assert.equal(String(htmlNS.outerHTML || undefNS), "<div></div>") | ||
assert.equal(elemString(htmlNS), "<div></div>") | ||
@@ -167,2 +166,69 @@ assert.end() | ||
test("Can insert before", function (assert) { | ||
var rootNode = document.createElement("div") | ||
var child = document.createElement("div") | ||
var newElement = document.createElement("div") | ||
rootNode.appendChild(child) | ||
rootNode.insertBefore(newElement, child) | ||
assert.equal(rootNode.childNodes.length, 2) | ||
assert.equal(rootNode.childNodes[0], newElement) | ||
assert.equal(rootNode.childNodes[1], child) | ||
assert.end() | ||
}) | ||
test("Insert before null appends to end", function (assert) { | ||
var rootNode = document.createElement("div") | ||
var child = document.createElement("div") | ||
var newElement = document.createElement("div") | ||
rootNode.appendChild(child) | ||
rootNode.insertBefore(newElement, null) | ||
assert.equal(rootNode.childNodes.length, 2) | ||
assert.equal(rootNode.childNodes[0], child) | ||
assert.equal(rootNode.childNodes[1], newElement) | ||
assert.end() | ||
}) | ||
test("Node insertions remove node from parent", function (assert) { | ||
var parent = document.createElement("div") | ||
var c1 = document.createElement("div") | ||
var c2 = document.createElement("div") | ||
var c3 = document.createElement("div") | ||
parent.appendChild(c1) | ||
parent.appendChild(c2) | ||
parent.appendChild(c3) | ||
var rootNode = document.createElement("div") | ||
rootNode.appendChild(c1) | ||
assert.equal(parent.childNodes.length, 2) | ||
assert.equal(c1.parentNode, rootNode) | ||
rootNode.insertBefore(c2, c1) | ||
assert.equal(parent.childNodes.length, 1) | ||
assert.equal(c2.parentNode, rootNode) | ||
rootNode.replaceChild(c3, c2) | ||
assert.equal(parent.childNodes.length, 0) | ||
assert.equal(c3.parentNode, rootNode) | ||
assert.equal(c2.parentNode, null) | ||
assert.end() | ||
}) | ||
function elemString(element) { | ||
var html = String(element) || "[]" | ||
if (html.charAt(0) === "[") { | ||
html = element.outerHTML | ||
if (!html && !element.parentNode) { | ||
var div = document.createElement("div") | ||
div.appendChild(element) | ||
html = div.innerHTML | ||
div.removeChild(element) | ||
} | ||
} | ||
return html | ||
} | ||
function fragString(fragment) { | ||
@@ -169,0 +235,0 @@ var html = String(fragment) |
26140
523