diff --git a/src/lib/dom-api.html b/src/lib/dom-api.html index 75ceea0921..36a4e8368c 100644 --- a/src/lib/dom-api.html +++ b/src/lib/dom-api.html @@ -29,23 +29,17 @@ var nativeCloneNode = Element.prototype.cloneNode; var nativeImportNode = Document.prototype.importNode; + // ensure nodes are wrapped if SD polyfill is present + var needsToWrap = Settings.hasShadow && !Settings.nativeShadow; + var wrap = window.wrap ? window.wrap : function(node) { return node; }; + var DomApi = function(node) { - this.node = node; + this.node = needsToWrap ? wrap(node) : node; if (this.patch) { this.patch(); } }; - // ensure nodes are wrapped if SD polyfill is present - if (window.wrap && Settings.useShadow && !Settings.useNativeShadow) { - DomApi = function(node) { - this.node = wrap(node); - if (this.patch) { - this.patch(); - } - }; - } - DomApi.prototype = { flush: function() { @@ -66,7 +60,7 @@ var n = node; // wrap document for SD polyfill - var wrappedDocument = wrap(document); + var wrappedDocument = Polymer.DomApi.wrap(document); // walk from node to `this` or `document` while (n && n !== wrappedDocument && n !== this.node) { @@ -977,7 +971,8 @@ hasInsertionPoint: hasInsertionPoint, ctor: DomApi, factory: factory, - hasDomApi: hasDomApi + hasDomApi: hasDomApi, + wrap: wrap }; })(); diff --git a/src/standard/gestures.html b/src/standard/gestures.html index 48c184a952..735b0cb072 100644 --- a/src/standard/gestures.html +++ b/src/standard/gestures.html @@ -199,7 +199,7 @@ handleNative: function(ev) { var handled; var type = ev.type; - var node = wrap(ev.currentTarget); + var node = Polymer.DomApi.wrap(ev.currentTarget); var gobj = node[GESTURE_KEY]; if (!gobj) { return; @@ -296,7 +296,7 @@ // automate the event listeners for the native events add: function(node, evType, handler) { // SD polyfill: handle case where `node` is unwrapped, like `document` - node = wrap(node); + node = Polymer.DomApi.wrap(node); var recognizer = this.gestures[evType]; var deps = recognizer.deps; var name = recognizer.name; @@ -329,7 +329,7 @@ // automate event listener removal for native events remove: function(node, evType, handler) { // SD polyfill: handle case where `node` is unwrapped, like `document` - node = wrap(node); + node = Polymer.DomApi.wrap(node); var recognizer = this.gestures[evType]; var deps = recognizer.deps; var name = recognizer.name; diff --git a/test/unit/polymer-dom-elements.html b/test/unit/polymer-dom-elements.html index 8065f0b727..c0b28546aa 100644 --- a/test/unit/polymer-dom-elements.html +++ b/test/unit/polymer-dom-elements.html @@ -349,3 +349,11 @@ }); + + + + diff --git a/test/unit/polymer-dom-shadow.html b/test/unit/polymer-dom-shadow.html index 475a2c9e1e..f1f5267810 100644 --- a/test/unit/polymer-dom-shadow.html +++ b/test/unit/polymer-dom-shadow.html @@ -55,6 +55,8 @@ + + diff --git a/test/unit/polymer-dom.html b/test/unit/polymer-dom.html index 5d40275ec1..7899b1c2df 100644 --- a/test/unit/polymer-dom.html +++ b/test/unit/polymer-dom.html @@ -55,6 +55,8 @@ + + diff --git a/test/unit/polymer-dom.js b/test/unit/polymer-dom.js index 7e8336e14b..de6380db14 100644 --- a/test/unit/polymer-dom.js +++ b/test/unit/polymer-dom.js @@ -936,4 +936,13 @@ suite('Polymer.dom non-distributed elements', function() { document.body.removeChild(separate); }); + + test('Polymer.DomApi.wrap', function() { + var wrap = window.wrap || function(node) { return node; }; + + var node = document.querySelector('x-wrapped'); + assert.equal(wrap(document), Polymer.DomApi.wrap(document), 'document should be wrapped'); + assert.equal(wrap(node), Polymer.DomApi.wrap(node), 'node should be wrapped'); + assert.equal(wrap(node), Polymer.dom(node).node, 'Polymer.dom should always wrap the input node'); + }); });