Skip to content
This repository was archived by the owner on Sep 20, 2019. It is now read-only.

Commit 9056419

Browse files
committed
fix safari 7 tests
1 parent 98d33df commit 9056419

2 files changed

Lines changed: 37 additions & 8 deletions

File tree

src/Template/Template.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@
138138
document.createElement = function() {
139139
'use strict';
140140
var el = createElement.apply(document, arguments);
141-
if (el.localName == 'template') {
141+
if (el.localName === 'template') {
142142
TemplateImpl.decorate(el);
143143
}
144144
return el;
@@ -173,7 +173,7 @@
173173
var nativeCloneNode = Node.prototype.cloneNode;
174174

175175
TemplateImpl.cloneNode = function(template, deep) {
176-
var clone = nativeCloneNode.call(template);
176+
var clone = nativeCloneNode.call(template, false);
177177
// NOTE: decorate doesn't auto-fix children because they are already
178178
// decorated so they need special clone fixup.
179179
if (this.decorate) {

tests/Template/tests.html

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,32 @@
3737
template = document.querySelector('template');
3838
});
3939

40+
var canInnerHTML = (function() {
41+
var el = document.createElement('div');
42+
try {
43+
Object.defineProperty(el, 'innerHTML', {
44+
get: function(){},
45+
set: function(){}
46+
});
47+
return true;
48+
} catch(e) {
49+
return false;
50+
}
51+
})();
52+
53+
function setupTemplate(template, string) {
54+
if (canInnerHTML) {
55+
template.innerHTML = string;
56+
} else {
57+
var el = document.createElement('div');
58+
el.innerHTML = string;
59+
var nodes = Array.prototype.slice.call(el.childNodes, 0);
60+
for (var i = 0; i < nodes.length; i++) {
61+
template.content.appendChild(nodes[i]);
62+
}
63+
}
64+
}
65+
4066
test('No rendering', function() {
4167
var bcr = template.getBoundingClientRect();
4268
assert.equal(bcr.height, 0);
@@ -58,6 +84,9 @@
5884
});
5985

6086
test('innerHTML', function() {
87+
if (!canInnerHTML) {
88+
this.skip();
89+
}
6190
var imp = document.createElement('template');
6291
assert.equal(imp.innerHTML, '');
6392
var s = 'pre<div>Hi</div><div>Bye</div>post';
@@ -84,7 +113,7 @@
84113
test('clone', function() {
85114
var imp = document.createElement('template');
86115
var s = '<div>Hi</div>';
87-
imp.innerHTML = s;
116+
setupTemplate(imp, s);
88117
var clone = imp.cloneNode();
89118
assert.notEqual(clone, imp, 'element is not cloned');
90119
assert.isDefined(clone.content, 'cloned template content dne');
@@ -100,7 +129,7 @@
100129
test('clone nested', function() {
101130
var imp = document.createElement('template');
102131
var s = 'a<template id="a">b<template id="b">c<template id="c">d</template></template></template>';
103-
imp.innerHTML = s;
132+
setupTemplate(imp, s);
104133
var clone = imp.cloneNode();
105134
assert.notEqual(clone, imp, 'element is not cloned');
106135
assert.isDefined(clone.content, 'cloned template content dne');
@@ -129,7 +158,7 @@
129158
var imp = document.createElement('div');
130159
var t = document.createElement('template');
131160
var s = 'a<template id="a">b<template id="b">c<template id="c">d</template></template></template>';
132-
t.innerHTML = s;
161+
setupTemplate(t, s);
133162
imp.appendChild(t);
134163
var impClone = imp.cloneNode(true);
135164
var imp = imp.firstChild;
@@ -155,7 +184,7 @@
155184
test('importNode', function() {
156185
var imp = document.createElement('template');
157186
var s = '<div>Hi</div>';
158-
imp.innerHTML = s;
187+
setupTemplate(imp, s)
159188
var clone = document.importNode(imp, false);
160189
assert.notEqual(clone, imp, 'element is not cloned');
161190
assert.isDefined(clone.content, 'cloned template content dne');
@@ -171,7 +200,7 @@
171200
test('importNode: nested', function() {
172201
var imp = document.createElement('template');
173202
var s = 'a<template id="a">b<template id="b">c<template id="c">d</template></template></template>';
174-
imp.innerHTML = s;
203+
setupTemplate(imp, s);
175204
var clone = document.importNode(imp, false);
176205
assert.notEqual(clone, imp, 'element is not cloned');
177206
assert.isDefined(clone.content, 'cloned template content dne');
@@ -200,7 +229,7 @@
200229
var imp = document.createElement('div');
201230
var t = document.createElement('template');
202231
var s = 'a<template id="a">b<template id="b">c<template id="c">d</template></template></template>';
203-
t.innerHTML = s;
232+
setupTemplate(t, s);
204233
imp.appendChild(t);
205234
var impClone = document.importNode(imp, true);
206235
imp = imp.firstChild;

0 commit comments

Comments
 (0)