Skip to content

Commit 6cf974a

Browse files
committed
Add Polymer.DomApi.wrap
- Make sure nodes are wrapped under ShadowDOMPolyfill - Forwards `window.wrap` when defined - Remove weird forked `DomApi` definition - Remove calls to `wrap` from gestures - Add tests
1 parent ce32459 commit 6cf974a

File tree

6 files changed

+32
-16
lines changed

6 files changed

+32
-16
lines changed

src/lib/dom-api.html

+8-13
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,17 @@
2929
var nativeCloneNode = Element.prototype.cloneNode;
3030
var nativeImportNode = Document.prototype.importNode;
3131

32+
// ensure nodes are wrapped if SD polyfill is present
33+
var needsToWrap = Settings.hasShadow && !Settings.nativeShadow;
34+
var wrap = window.wrap ? window.wrap : function(node) { return node; };
35+
3236
var DomApi = function(node) {
33-
this.node = node;
37+
this.node = needsToWrap ? wrap(node) : node;
3438
if (this.patch) {
3539
this.patch();
3640
}
3741
};
3842

39-
// ensure nodes are wrapped if SD polyfill is present
40-
if (window.wrap && Settings.useShadow && !Settings.useNativeShadow) {
41-
DomApi = function(node) {
42-
this.node = wrap(node);
43-
if (this.patch) {
44-
this.patch();
45-
}
46-
};
47-
}
48-
4943
DomApi.prototype = {
5044

5145
flush: function() {
@@ -66,7 +60,7 @@
6660

6761
var n = node;
6862
// wrap document for SD polyfill
69-
var wrappedDocument = wrap(document);
63+
var wrappedDocument = Polymer.DomApi.wrap(document);
7064

7165
// walk from node to `this` or `document`
7266
while (n && n !== wrappedDocument && n !== this.node) {
@@ -977,7 +971,8 @@
977971
hasInsertionPoint: hasInsertionPoint,
978972
ctor: DomApi,
979973
factory: factory,
980-
hasDomApi: hasDomApi
974+
hasDomApi: hasDomApi,
975+
wrap: wrap
981976
};
982977

983978
})();

src/standard/gestures.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@
199199
handleNative: function(ev) {
200200
var handled;
201201
var type = ev.type;
202-
var node = wrap(ev.currentTarget);
202+
var node = Polymer.DomApi.wrap(ev.currentTarget);
203203
var gobj = node[GESTURE_KEY];
204204
if (!gobj) {
205205
return;
@@ -296,7 +296,7 @@
296296
// automate the event listeners for the native events
297297
add: function(node, evType, handler) {
298298
// SD polyfill: handle case where `node` is unwrapped, like `document`
299-
node = wrap(node);
299+
node = Polymer.DomApi.wrap(node);
300300
var recognizer = this.gestures[evType];
301301
var deps = recognizer.deps;
302302
var name = recognizer.name;
@@ -329,7 +329,7 @@
329329
// automate event listener removal for native events
330330
remove: function(node, evType, handler) {
331331
// SD polyfill: handle case where `node` is unwrapped, like `document`
332-
node = wrap(node);
332+
node = Polymer.DomApi.wrap(node);
333333
var recognizer = this.gestures[evType];
334334
var deps = recognizer.deps;
335335
var name = recognizer.name;

test/unit/polymer-dom-elements.html

+8
Original file line numberDiff line numberDiff line change
@@ -349,3 +349,11 @@
349349
});
350350
</script>
351351
</dom-module>
352+
353+
<dom-module id="x-wrapped">
354+
<script>
355+
Polymer({
356+
is: 'x-wrapped'
357+
});
358+
</script>
359+
</dom-module>

test/unit/polymer-dom-shadow.html

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
<x-deep-contains></x-deep-contains>
5757

58+
<x-wrapped></x-wrapped>
59+
5860
<script src="polymer-dom.js"></script>
5961

6062
</body>

test/unit/polymer-dom.html

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
<x-deep-contains></x-deep-contains>
5757

58+
<x-wrapped></x-wrapped>
59+
5860
<script src="polymer-dom.js"></script>
5961

6062
</body>

test/unit/polymer-dom.js

+9
Original file line numberDiff line numberDiff line change
@@ -936,4 +936,13 @@ suite('Polymer.dom non-distributed elements', function() {
936936

937937
document.body.removeChild(separate);
938938
});
939+
940+
test('Polymer.DomApi.wrap', function() {
941+
var wrap = window.wrap || function(node) { return node; };
942+
943+
var node = document.querySelector('x-wrapped');
944+
assert.equal(wrap(document), Polymer.DomApi.wrap(document), 'document should be wrapped');
945+
assert.equal(wrap(node), Polymer.DomApi.wrap(node), 'node should be wrapped');
946+
assert.equal(wrap(node), Polymer.dom(node).node, 'Polymer.dom should always wrap the input node');
947+
});
939948
});

0 commit comments

Comments
 (0)