Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit 374b24f

Browse files
committed
Update & pass child-accessing test
1 parent 3f7c02e commit 374b24f

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

src/index.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,9 @@ function transformTree(document, visitedNodes, currentNode, callback) {
4444

4545
visitedNodes.add(currentNode);
4646

47-
let visitChildren = () => Promise.all(
48-
map(currentNode.childNodes, (child) => transformTree(document, visitedNodes, child, callback))
49-
);
50-
51-
return Promise.resolve(task).then(visitChildren);
47+
for (var child of currentNode.childNodes) {
48+
transformTree(document, visitedNodes, child, callback);
49+
}
5250
}
5351

5452
/**
@@ -88,7 +86,7 @@ function renderNode(rootNode) {
8886
var visitedNodes = new Set();
8987
var customElements = exports.customElements;
9088

91-
return transformTree(document, visitedNodes, rootNode, function render (element) {
89+
transformTree(document, visitedNodes, rootNode, function render (element) {
9290

9391
const definition = customElements.getDefinition(element.localName);
9492

@@ -99,13 +97,14 @@ function renderNode(rootNode) {
9997
upgradeElement(element, definition, true);
10098

10199
if (definition.connectedCallback) {
102-
return new Promise(function(resolve, reject) {
100+
var p = new Promise(function(resolve, reject) {
103101
resolve( definition.connectedCallback.call(element, document) );
104102
});
103+
createdPromises.push(p);
105104
}
106105
}
107-
})
108-
.then(() => rootNode);
106+
});
107+
return Promise.all(createdPromises).then(function(){ return rootNode; });
109108
}
110109

111110
/**

test/multiple-element-interactions-test.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,19 @@ describe("When multiple DOM elements are present", () => {
4747
});
4848
});
4949

50-
// Pending until we decide on a good solution
51-
xit("can read attributes from custom child element's prototypes", () => {
50+
it("can read attributes from custom child element's prototypes", () => {
5251
class DataSource extends customElements.HTMLElement {
52+
get data() {
53+
return [10, 20, 30];
54+
}
55+
}
56+
customElements.define("data-source", DataSource);
57+
58+
class DataDisplayer extends customElements.HTMLElement {
5359
connectedCallback() {
5460
return new Promise((resolve) => {
5561
// Has to be async, as child node prototypes aren't set: http://stackoverflow.com/questions/36187227/
56-
// This is a web customElements limitation generally. TODO: Find a nicer pattern for handle this.
62+
// This is a web components limitation generally. TODO: Find a nicer pattern for handle this.
5763
setTimeout(() => {
5864
var data = this.childNodes[0].data;
5965
this.textContent = "Data: " + JSON.stringify(data);
@@ -62,9 +68,8 @@ describe("When multiple DOM elements are present", () => {
6268
});
6369
}
6470
}
65-
DataSource.data = [10, 20, 30];
6671

67-
customElements.define("data-displayer", DataSource);
72+
customElements.define("data-displayer", DataDisplayer);
6873

6974
return customElements.renderFragment(
7075
"<data-displayer><data-source></data-source></data-displayer>"

0 commit comments

Comments
 (0)