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

Commit 88aaf5d

Browse files
committed
Remove server-side components feature for now
1 parent 63ad32a commit 88aaf5d

File tree

4 files changed

+22
-249
lines changed

4 files changed

+22
-249
lines changed

package.json

+12-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,18 @@
4444
},
4545
"jshintConfig": {
4646
"esversion": 6,
47-
"node": true
47+
"node": true,
48+
"globals": {
49+
"describe": false,
50+
"xdescribe": false,
51+
"it": false,
52+
"xit": false,
53+
"before": false,
54+
"beforeEach": false,
55+
"after": false,
56+
"afterEach": false,
57+
"expect": false
58+
}
4859
},
4960
"engines": {
5061
"node": ">= 4.0.0"

src/index.js

+9-109
Original file line numberDiff line numberDiff line change
@@ -22,78 +22,22 @@ exports.HTMLElement = CustomElementRegistry.HTMLElement;
2222

2323
const _upgradedProp = '__$CE_upgraded';
2424

25-
/**
26-
* Registers a transformer for a tag that is intended to run server-side.
27-
*
28-
* At the moment, only one transformer is permitted per tag.
29-
*/
30-
var transformers = {};
31-
32-
exports.registerTransformer = function registerTransformer (name, handler) {
33-
if ( transformers[name] && typeof transformers[name] !== 'function' ) {
34-
throw new Error(`Registration failed for '${name}'. Name is already taken by another transformer.`);
35-
}
36-
transformers[name] = handler;
37-
return handler;
38-
};
39-
4025

4126
function transformTree(document, visitedNodes, currentNode, callback) {
4227

4328
var task = visitedNodes.has(currentNode) ? undefined : callback(currentNode);
4429

4530
visitedNodes.add(currentNode);
4631

47-
if ( task !== undefined ) {
48-
let replaceNode = function replaceNode (results) {
49-
if (results === null) {
50-
currentNode.parentNode.removeChild(currentNode);
51-
return Promise.resolve();
52-
}
53-
if (typeof results === 'string') {
54-
var temp = document.createElement('template');
55-
temp.innerHTML = results;
56-
results = temp.content.childNodes;
57-
}
58-
if (results) {
59-
var fragment = document.createDocumentFragment();
60-
var newNodes = results.length ? slice.call(results) : [results];
61-
62-
newNodes.map( (newNode) => {
63-
if (newNode.parentNode === currentNode) currentNode.removeChild(newNode);
64-
fragment.appendChild(newNode);
65-
});
66-
currentNode.parentNode.replaceChild(fragment, currentNode);
67-
68-
return Promise.all(
69-
newNodes.map((child) => transformTree(document, visitedNodes, child, callback))
70-
);
71-
}
72-
else {
73-
return Promise.all(
74-
map(currentNode.childNodes, (child) => transformTree(document, visitedNodes, child, callback))
75-
);
76-
}
77-
};
32+
let visitChildren = () => Promise.all(
33+
map(currentNode.childNodes, (child) => transformTree(document, visitedNodes, child, callback))
34+
);
7835

79-
if ( task === null ) {
80-
return replaceNode(null);
81-
}
82-
if ( task.then ) {
83-
// Promise task; potential transformation
84-
return task.then(replaceNode);
85-
}
86-
else {
87-
// Syncronous transformation
88-
return replaceNode(task);
89-
}
36+
if ( task && task.then ) {
37+
return task.then(visitChildren);
9038
}
9139
else {
92-
// This element has opted to do nothing to itself.
93-
// Recurse on its children.
94-
return Promise.all(
95-
map(currentNode.childNodes, (child) => transformTree(document, visitedNodes, child, callback))
96-
);
40+
return visitChildren();
9741
}
9842
}
9943

@@ -137,36 +81,6 @@ function renderNode(rootNode) {
13781

13882
return transformTree(document, visitedNodes, rootNode, function render (element) {
13983

140-
var transformer = transformers[element.localName];
141-
142-
if (transformer && ! element.serverTransformed) {
143-
let result = transformer(element, document);
144-
element.serverTransformed = true;
145-
146-
let handleTransformerResult = (result) => {
147-
if ( result === undefined && customElements.get(element.localName) ) {
148-
// Re-render the transformed element as a custom element,
149-
// since a corresponding custom tag is defined.
150-
return render(element);
151-
}
152-
if ( result === undefined ) {
153-
// Replace the element with its children; its server-side duties are fulfilled.
154-
return element.childNodes;
155-
}
156-
else {
157-
// The transformer has opted to do something specific.
158-
return result;
159-
}
160-
};
161-
162-
if ( result && result.then ) {
163-
return result.then(handleTransformerResult);
164-
}
165-
else {
166-
return handleTransformerResult(result);
167-
}
168-
}
169-
17084
const definition = customElements.getDefinition(element.localName);
17185

17286
if (definition) {
@@ -177,17 +91,9 @@ function renderNode(rootNode) {
17791
upgradedNodes.add(element);
17892

17993
if (definition.connectedCallback) {
180-
try {
181-
let result = definition.connectedCallback.call(element, document);
182-
if ( result && result.then ) {
183-
// Client-side custom elements never replace themselves;
184-
// resolve with undefined to prevent such a scenario.
185-
return result.then( () => undefined );
186-
}
187-
}
188-
catch (err) {
189-
return Promise.reject(err);
190-
}
94+
return new Promise(function(resolve, reject) {
95+
resolve( definition.connectedCallback.call(element, document) );
96+
});
19197
}
19298
}
19399
})
@@ -276,9 +182,3 @@ function map (arrayLike, fn) {
276182
}
277183
return results;
278184
}
279-
280-
function isClass(v) {
281-
return typeof v === 'function' && /^\s*class\s+/.test(v.toString());
282-
}
283-
284-
var slice = Array.prototype.slice;

test/multiple-element-interactions-test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ describe("When multiple DOM elements are present", () => {
6161
}
6262
DataSource.data = [10, 20, 30];
6363

64-
components.customElements.define("data-displayer", DataDisplayer);
64+
components.customElements.define("data-displayer", DataSource);
6565

6666
return components.renderFragment(
6767
"<data-displayer><data-source></data-source></data-displayer>"

test/serverside-components-test.js

-138
This file was deleted.

0 commit comments

Comments
 (0)