diff --git a/polyfills/Element/prototype/previousElementSibling/config.toml b/polyfills/Element/prototype/previousElementSibling/config.toml new file mode 100644 index 000000000..123e9e31b --- /dev/null +++ b/polyfills/Element/prototype/previousElementSibling/config.toml @@ -0,0 +1,25 @@ +aliases = [ ] +dependencies = [ + "Element", + "Object.defineProperty" +] +license = "MIT" +docs = "https://developer.mozilla.org/en-US/docs/Web/API/NonDocumentTypeChildNode/previousElementSibling" + +[browsers] +android = "todo" +bb = "todo" +chrome = "todo" +edge = "todo" +edge_mob = "todo" +firefox = "todo" +ios_chr = "todo" +ios_saf = "todo" +ie = "todo" +ie_mob = "todo" +opera = "todo" +op_mini = "todo" +op_mob = "todo" +safari = "todo" +firefox_mob = "todo" +samsung_mob = "todo" diff --git a/polyfills/Element/prototype/previousElementSibling/detect.js b/polyfills/Element/prototype/previousElementSibling/detect.js new file mode 100644 index 000000000..a0cc375c4 --- /dev/null +++ b/polyfills/Element/prototype/previousElementSibling/detect.js @@ -0,0 +1 @@ +'document' in self && "previousElementSibling" in document.documentElement diff --git a/polyfills/Element/prototype/previousElementSibling/polyfill.js b/polyfills/Element/prototype/previousElementSibling/polyfill.js new file mode 100644 index 000000000..efd20a14f --- /dev/null +++ b/polyfills/Element/prototype/previousElementSibling/polyfill.js @@ -0,0 +1,7 @@ +Object.defineProperty(Element.prototype, 'previousElementSibling', { + get: function(){ + var el = this.previousSibling; + while (el && el.nodeType !== 1) { el = el.previousSibling; } + return el; + } +}); diff --git a/polyfills/Element/prototype/previousElementSibling/tests.js b/polyfills/Element/prototype/previousElementSibling/tests.js new file mode 100644 index 000000000..cb8eff7d3 --- /dev/null +++ b/polyfills/Element/prototype/previousElementSibling/tests.js @@ -0,0 +1,45 @@ +it("should return null if the node is the only child of its parent node", function () { + var parent = document.createElement('div'), + p = document.createElement('p'); + parent.appendChild(p); + + proclaim.strictEqual(p.nextElementSibling, null); +}); + +it("should return null if the node only has text sibling", function () { + var parent = document.createElement('div'), + p = document.createElement('p'); + text = document.createTextNode('Hi there, how are you doing today?'); + parent.appendChild(p); + parent.appendChild(text); + + proclaim.strictEqual(p.nextElementSibling, null); +}); + +it("should return null if the node only has comment sibling", function () { + var parent = document.createElement('div'), + p = document.createElement('p'); + comment = document.createComment('This is a comment in the document.'); + parent.appendChild(p); + parent.appendChild(comment); + + proclaim.strictEqual(p.nextElementSibling, null); +}); + +it("should return the first child element", function () { + var parent = document.createElement('div'), + h2 = document.createElement('h2'), + p1 = document.createElement('p'), + p2 = document.createElement('p'), + p3 = document.createElement('p'), + text = document.createTextNode('Hi there, how are you doing today?'), + comment = document.createComment('This is a comment in the document.'); + parent.appendChild(h2); + parent.appendChild(text); + parent.appendChild(comment); + parent.appendChild(p1); + parent.appendChild(p2); + parent.appendChild(p3); + + proclaim.strictEqual(h2.nextElementSibling, p1); +});