1 | import { ConcreteBounds, NewElementBuilder } from '@glimmer/runtime';
|
2 | const TEXT_NODE = 3;
|
3 | const NEEDS_EXTRA_CLOSE = new WeakMap();
|
4 |
|
5 | function currentNode(cursor) {
|
6 | let {
|
7 | element,
|
8 | nextSibling
|
9 | } = cursor;
|
10 |
|
11 | if (nextSibling === null) {
|
12 | return element.lastChild;
|
13 | } else {
|
14 | return nextSibling.previousSibling;
|
15 | }
|
16 | }
|
17 |
|
18 | class SerializeBuilder extends NewElementBuilder {
|
19 | constructor() {
|
20 | super(...arguments);
|
21 | this.serializeBlockDepth = 0;
|
22 | }
|
23 |
|
24 | __openBlock() {
|
25 | let {
|
26 | tagName
|
27 | } = this.element;
|
28 |
|
29 | if (tagName !== 'TITLE' && tagName !== 'SCRIPT' && tagName !== 'STYLE') {
|
30 | let depth = this.serializeBlockDepth++;
|
31 |
|
32 | this.__appendComment(`%+b:${depth}%`);
|
33 | }
|
34 |
|
35 | super.__openBlock();
|
36 | }
|
37 |
|
38 | __closeBlock() {
|
39 | let {
|
40 | tagName
|
41 | } = this.element;
|
42 |
|
43 | super.__closeBlock();
|
44 |
|
45 | if (tagName !== 'TITLE' && tagName !== 'SCRIPT' && tagName !== 'STYLE') {
|
46 | let depth = --this.serializeBlockDepth;
|
47 |
|
48 | this.__appendComment(`%-b:${depth}%`);
|
49 | }
|
50 | }
|
51 |
|
52 | __appendHTML(html) {
|
53 | let {
|
54 | tagName
|
55 | } = this.element;
|
56 |
|
57 | if (tagName === 'TITLE' || tagName === 'SCRIPT' || tagName === 'STYLE') {
|
58 | return super.__appendHTML(html);
|
59 | } // Do we need to run the html tokenizer here?
|
60 |
|
61 |
|
62 | let first = this.__appendComment('%glmr%');
|
63 |
|
64 | if (tagName === 'TABLE') {
|
65 | let openIndex = html.indexOf('<');
|
66 |
|
67 | if (openIndex > -1) {
|
68 | let tr = html.slice(openIndex + 1, openIndex + 3);
|
69 |
|
70 | if (tr === 'tr') {
|
71 | html = `<tbody>${html}</tbody>`;
|
72 | }
|
73 | }
|
74 | }
|
75 |
|
76 | if (html === '') {
|
77 | this.__appendComment('% %');
|
78 | } else {
|
79 | super.__appendHTML(html);
|
80 | }
|
81 |
|
82 | let last = this.__appendComment('%glmr%');
|
83 |
|
84 | return new ConcreteBounds(this.element, first, last);
|
85 | }
|
86 |
|
87 | __appendText(string) {
|
88 | let {
|
89 | tagName
|
90 | } = this.element;
|
91 | let current = currentNode(this);
|
92 |
|
93 | if (tagName === 'TITLE' || tagName === 'SCRIPT' || tagName === 'STYLE') {
|
94 | return super.__appendText(string);
|
95 | } else if (string === '') {
|
96 | return this.__appendComment('% %');
|
97 | } else if (current && current.nodeType === TEXT_NODE) {
|
98 | this.__appendComment('%|%');
|
99 | }
|
100 |
|
101 | return super.__appendText(string);
|
102 | }
|
103 |
|
104 | closeElement() {
|
105 | if (NEEDS_EXTRA_CLOSE.has(this.element)) {
|
106 | NEEDS_EXTRA_CLOSE.delete(this.element);
|
107 | super.closeElement();
|
108 | }
|
109 |
|
110 | return super.closeElement();
|
111 | }
|
112 |
|
113 | openElement(tag) {
|
114 | if (tag === 'tr') {
|
115 | if (this.element.tagName !== 'TBODY' && this.element.tagName !== 'THEAD' && this.element.tagName !== 'TFOOT') {
|
116 | this.openElement('tbody'); // This prevents the closeBlock comment from being re-parented
|
117 | // under the auto inserted tbody. Rehydration builder needs to
|
118 | // account for the insertion since it is injected here and not
|
119 | // really in the template.
|
120 |
|
121 | NEEDS_EXTRA_CLOSE.set(this.constructing, true);
|
122 | this.flushElement(null);
|
123 | }
|
124 | }
|
125 |
|
126 | return super.openElement(tag);
|
127 | }
|
128 |
|
129 | pushRemoteElement(element, cursorId, insertBefore = null) {
|
130 | let {
|
131 | dom
|
132 | } = this;
|
133 | let script = dom.createElement('script');
|
134 | script.setAttribute('glmr', cursorId);
|
135 | dom.insertBefore(element, script, insertBefore);
|
136 | return super.pushRemoteElement(element, cursorId, insertBefore);
|
137 | }
|
138 |
|
139 | }
|
140 |
|
141 | export function serializeBuilder(env, cursor) {
|
142 | return SerializeBuilder.forInitialRender(env, cursor);
|
143 | }
|
144 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL25vZGUvbGliL3NlcmlhbGl6ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLFNBQVMsY0FBVCxFQUF5QixpQkFBekIsUUFBa0Qsa0JBQWxEO0FBSUEsTUFBTSxTQUFTLEdBQUcsQ0FBbEI7QUFFQSxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBSixFQUExQjs7QUFFQSxTQUFTLFdBQVQsQ0FDRSxNQURGLEVBQzhFO0FBRTVFLE1BQUk7QUFBRSxJQUFBLE9BQUY7QUFBVyxJQUFBO0FBQVgsTUFBMkIsTUFBL0I7O0FBRUEsTUFBSSxXQUFXLEtBQUssSUFBcEIsRUFBMEI7QUFDeEIsV0FBTyxPQUFPLENBQUMsU0FBZjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU8sV0FBVyxDQUFDLGVBQW5CO0FBQ0Q7QUFDRjs7QUFFRCxNQUFNLGdCQUFOLFNBQStCLGlCQUEvQixDQUFnRDtBQUFoRCxFQUFBLFdBQUEsR0FBQTs7QUFDVSxTQUFBLG1CQUFBLEdBQXNCLENBQXRCO0FBMkdUOztBQXpHQyxFQUFBLFdBQVcsR0FBQTtBQUNULFFBQUk7QUFBRSxNQUFBO0FBQUYsUUFBYyxLQUFLLE9BQXZCOztBQUVBLFFBQUksT0FBTyxLQUFLLE9BQVosSUFBdUIsT0FBTyxLQUFLLFFBQW5DLElBQStDLE9BQU8sS0FBSyxPQUEvRCxFQUF3RTtBQUN0RSxVQUFJLEtBQUssR0FBRyxLQUFLLG1CQUFMLEVBQVo7O0FBQ0EsV0FBSyxlQUFMLENBQXFCLE9BQU8sS0FBSyxHQUFqQztBQUNEOztBQUVELFVBQU0sV0FBTjtBQUNEOztBQUVELEVBQUEsWUFBWSxHQUFBO0FBQ1YsUUFBSTtBQUFFLE1BQUE7QUFBRixRQUFjLEtBQUssT0FBdkI7O0FBRUEsVUFBTSxZQUFOOztBQUVBLFFBQUksT0FBTyxLQUFLLE9BQVosSUFBdUIsT0FBTyxLQUFLLFFBQW5DLElBQStDLE9BQU8sS0FBSyxPQUEvRCxFQUF3RTtBQUN0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Q0Y7O0FBRUQsV0FBTyxNQUFNLFdBQU4sQ0FBa0IsR0FBbEIsQ0FBUDtBQUNEOztBQUVELEVBQUEsaUJBQWlCLENBQ2YsT0FEZSxFQUVmLFFBRmUsRUFHZixZQUFBLEdBQWtDLElBSG5CLEVBR3VCO0FBRXRDLFFBQUk7QUFBRSxNQUFBO0FBQUYsUUFBVSxJQUFkO0FBQ0EsUUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLGFBQUosQ0FBa0IsUUFBbEIsQ0FBYjtBQUNBLElBQUEsTUFBTSxDQUFDLFlBQVAsQ0FBb0IsTUFBcEIsRUFBNEIsUUFBNUI7QUFDQSxJQUFBLEdBQUcsQ0FBQyxZQUFKLENBQWlCLE9BQWpCLEVBQTBCLE1BQTFCLEVBQWtDLFlBQWxDO0FBQ0EsV0FBTyxNQUFNLGlCQUFOLENBQXdCLE9BQXhCLEVBQWlDLFFBQWpDLEVBQTJDLFlBQTNDLENBQVA7QUFDRDs7QUEzRzZDOztBQThHaEQsT0FBTSxTQUFVLGdCQUFWLENBQ0osR0FESSxFQUVKLE1BRkksRUFFK0Q7QUFFbkUsU0FBTyxnQkFBZ0IsQ0FBQyxnQkFBakIsQ0FBa0MsR0FBbEMsRUFBdUMsTUFBdkMsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBCb3VuZHMsXG4gIEVudmlyb25tZW50LFxuICBPcHRpb24sXG4gIEVsZW1lbnRCdWlsZGVyLFxuICBNYXliZSxcbiAgTW9kaWZpZXJJbnN0YW5jZSxcbn0gZnJvbSAnQGdsaW1tZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb25jcmV0ZUJvdW5kcywgTmV3RWxlbWVudEJ1aWxkZXIgfSBmcm9tICdAZ2xpbW1lci9ydW50aW1lJztcbmltcG9ydCB7IFJlbW90ZUxpdmVCbG9jayB9IGZyb20gJ0BnbGltbWVyL3J1bnRpbWUnO1xuaW1wb3J0IHR5cGUgeyBTaW1wbGVFbGVtZW50LCBTaW1wbGVOb2RlLCBTaW1wbGVUZXh0IH0gZnJvbSAnQHNpbXBsZS1kb20vaW50ZXJmYWNlJztcblxuY29uc3QgVEVYVF9OT0RFID0gMztcblxuY29uc3QgTkVFRFNfRVhUUkFfQ0xPU0UgPSBuZXcgV2Vha01hcDxTaW1wbGVOb2RlPigpO1xuXG5mdW5jdGlvbiBjdXJyZW50Tm9kZShcbiAgY3Vyc29yOiBFbGVtZW50QnVpbGRlciB8IHsgZWxlbWVudDogU2ltcGxlRWxlbWVudDsgbmV4dFNpYmxpbmc6IFNpbXBsZU5vZGUgfVxuKTogT3B0aW9uPFNpbXBsZU5vZGU+IHtcbiAgbGV0IHsgZWxlbWVudCwgbmV4dFNpYmxpbmcgfSA9IGN1cnNvcjtcblxuICBpZiAobmV4dFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudC5sYXN0Q2hpbGQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5leHRTaWJsaW5nLnByZXZpb3VzU2libGluZztcbiAgfVxufVxuXG5jbGFzcyBTZXJpYWxpemVCdWlsZGVyIGV4dGVuZHMgTmV3RWxlbWVudEJ1aWxkZXIgaW1wbGVtZW50cyBFbGVtZW50QnVpbGRlciB7XG4gIHByaXZhdGUgc2VyaWFsaXplQmxvY2tEZXB0aCA9IDA7XG5cbiAgX19vcGVuQmxvY2soKTogdm9pZCB7XG4gICAgbGV0IHsgdGFnTmFtZSB9ID0gdGhpcy5lbGVtZW50O1xuXG4gICAgaWYgKHRhZ05hbWUgIT09ICdUSVRMRScgJiYgdGFnTmFtZSAhPT0gJ1NDUklQVCcgJiYgdGFnTmFtZSAhPT0gJ1NUWUxFJykge1xuICAgICAgbGV0IGRlcHRoID0gdGhpcy5zZXJpYWxpemVCbG9ja0RlcHRoKys7XG4gICAgICB0aGlzLl9fYXBwZW5kQ29tbWVudChgJStiOiR7ZGVwdGh9JWApO1xuICAgIH1cblxuICAgIHN1cGVyLl9fb3BlbkJsb2NrKCk7XG4gIH1cblxuICBfX2Nsb3NlQmxvY2soKTogdm9pZCB7XG4gICAgbGV0IHsgdGFnTmFtZSB9ID0gdGhpcy5lbGVtZW50O1xuXG4gICAgc3VwZXIuX19jbG9zZUJsb2NrKCk7XG5cbiAgICBpZiAodGFnTmFtZSAhPT0gJ1RJVExFJyAmJiB0YWdOYW1lICE9PSAnU0NSSVBUJyAmJiB0YWdOYW1lICE9PSAnU1RZTEUnKSB7XG4gICAgICBsZXQgZGVwdGggPSAtLXRoaXMuc2VyaWFsaXplQmxvY2tEZXB0aDtcbiAgICAgIHRoaXMuX19hcHBlbmRDb21tZW50KGAlLWI6JHtkZXB0aH0lYCk7XG4gICAgfVxuICB9XG5cbiAgX19hcHBlbmRIVE1MKGh0bWw6IHN0cmluZyk6IEJvdW5kcyB7XG4gICAgbGV0IHsgdGFnTmFtZSB9ID0gdGhpcy5lbGVtZW50O1xuXG4gICAgaWYgKHRhZ05hbWUgPT09ICdUSVRMRScgfHwgdGFnTmFtZSA9PT0gJ1NDUklQVCcgfHwgdGFnTmFtZSA9PT0gJ1NUWUxFJykge1xuICAgICAgcmV0dXJuIHN1cGVyLl9fYXBwZW5kSFRNTChodG1sKTtcbiAgICB9XG5cbiAgICAvLyBEbyB3ZSBuZWVkIHRvIHJ1biB0aGUgaHRtbCB0b2tlbml6ZXIgaGVyZT9cbiAgICBsZXQgZmlyc3QgPSB0aGlzLl9fYXBwZW5kQ29tbWVudCgnJWdsbXIlJyk7XG4gICAgaWYgKHRhZ05hbWUgPT09ICdUQUJMRScpIHtcbiAgICAgIGxldCBvcGVuSW5kZXggPSBodG1sLmluZGV4T2YoJzwnKTtcbiAgICAgIGlmIChvcGVuSW5kZXggPiAtMSkge1xuICAgICAgICBsZXQgdHIgPSBodG1sLnNsaWNlKG9wZW5JbmRleCArIDEsIG9wZW5JbmRleCArIDMpO1xuICAgICAgICBpZiAodHIgPT09ICd0cicpIHtcbiAgICAgICAgICBodG1sID0gYDx0Ym9keT4ke2h0bWx9PC90Ym9keT5gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChodG1sID09PSAnJykge1xuICAgICAgdGhpcy5fX2FwcGVuZENvbW1lbnQoJyUgJScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5fX2FwcGVuZEhUTUwoaHRtbCk7XG4gICAgfVxuXG4gICAgbGV0IGxhc3QgPSB0aGlzLl9fYXBwZW5kQ29tbWVudCgnJWdsbXIlJyk7XG4gICAgcmV0dXJuIG5ldyBDb25jcmV0ZUJvdW5kcyh0aGlzLmVsZW1lbnQsIGZpcnN0LCBsYXN0KTtcbiAgfVxuXG4gIF9fYXBwZW5kVGV4dChzdHJpbmc6IHN0cmluZyk6IFNpbXBsZVRleHQge1xuICAgIGxldCB7IHRhZ05hbWUgfSA9IHRoaXMuZWxlbWVudDtcbiAgICBsZXQgY3VycmVudCA9IGN1cnJlbnROb2RlKHRoaXMpO1xuXG4gICAgaWYgKHRhZ05hbWUgPT09ICdUSVRMRScgfHwgdGFnTmFtZSA9PT0gJ1NDUklQVCcgfHwgdGFnTmFtZSA9PT0gJ1NUWUxFJykge1xuICAgICAgcmV0dXJuIHN1cGVyLl9fYXBwZW5kVGV4dChzdHJpbmcpO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nID09PSAnJykge1xuICAgICAgcmV0dXJuICh0aGlzLl9fYXBwZW5kQ29tbWVudCgnJSAlJykgYXMgYW55KSBhcyBTaW1wbGVUZXh0O1xuICAgIH0gZWxzZSBpZiAoY3VycmVudCAmJiBjdXJyZW50Lm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIHRoaXMuX19hcHBlbmRDb21tZW50KCclfCUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuX19hcHBlbmRUZXh0KHN0cmluZyk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoKTogT3B0aW9uPE1vZGlmaWVySW5zdGFuY2VbXT4ge1xuICAgIGlmIChORUVEU19FWFRSQV9DTE9TRS5oYXModGhpcy5lbGVtZW50KSkge1xuICAgICAgTkVFRFNfRVhUUkFfQ0xPU0UuZGVsZXRlKHRoaXMuZWxlbWVudCk7XG4gICAgICBzdXBlci5jbG9zZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuY2xvc2VFbGVtZW50KCk7XG4gIH1cblxuICBvcGVuRWxlbWVudCh0YWc6IHN0cmluZykge1xuICAgIGlmICh0YWcgPT09ICd0cicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5lbGVtZW50LnRhZ05hbWUgIT09ICdUQk9EWScgJiZcbiAgICAgICAgdGhpcy5lbGVtZW50LnRhZ05hbWUgIT09ICdUSEVBRCcgJiZcbiAgICAgICAgdGhpcy5lbGVtZW50LnRhZ05hbWUgIT09ICdURk9PVCdcbiAgICAgICkge1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50KCd0Ym9keScpO1xuICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHRoZSBjbG9zZUJsb2NrIGNvbW1lbnQgZnJvbSBiZWluZyByZS1wYXJlbnRlZFxuICAgICAgICAvLyB1bmRlciB0aGUgYXV0byBpbnNlcnRlZCB0Ym9keS4gUmVoeWRyYXRpb24gYnVpbGRlciBuZWVkcyB0b1xuICAgICAgICAvLyBhY2NvdW50IGZvciB0aGUgaW5zZXJ0aW9uIHNpbmNlIGl0IGlzIGluamVjdGVkIGhlcmUgYW5kIG5vdFxuICAgICAgICAvLyByZWFsbHkgaW4gdGhlIHRlbXBsYXRlLlxuICAgICAgICBORUVEU19FWFRSQV9DTE9TRS5zZXQodGhpcy5jb25zdHJ1Y3RpbmchLCB0cnVlKTtcbiAgICAgICAgdGhpcy5mbHVzaEVsZW1lbnQobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLm9wZW5FbGVtZW50KHRhZyk7XG4gIH1cblxuICBwdXNoUmVtb3RlRWxlbWVudChcbiAgICBlbGVtZW50OiBTaW1wbGVFbGVtZW50LFxuICAgIGN1cnNvcklkOiBzdHJpbmcsXG4gICAgaW5zZXJ0QmVmb3JlOiBNYXliZTxTaW1wbGVOb2RlPiA9IG51bGxcbiAgKTogT3B0aW9uPFJlbW90ZUxpdmVCbG9jaz4ge1xuICAgIGxldCB7IGRvbSB9ID0gdGhpcztcbiAgICBsZXQgc2NyaXB0ID0gZG9tLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ2dsbXInLCBjdXJzb3JJZCk7XG4gICAgZG9tLmluc2VydEJlZm9yZShlbGVtZW50LCBzY3JpcHQsIGluc2VydEJlZm9yZSk7XG4gICAgcmV0dXJuIHN1cGVyLnB1c2hSZW1vdGVFbGVtZW50KGVsZW1lbnQsIGN1cnNvcklkLCBpbnNlcnRCZWZvcmUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVCdWlsZGVyKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBjdXJzb3I6IHsgZWxlbWVudDogU2ltcGxlRWxlbWVudDsgbmV4dFNpYmxpbmc6IE9wdGlvbjxTaW1wbGVOb2RlPiB9XG4pOiBFbGVtZW50QnVpbGRlciB7XG4gIHJldHVybiBTZXJpYWxpemVCdWlsZGVyLmZvckluaXRpYWxSZW5kZXIoZW52LCBjdXJzb3IpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== |
\ | No newline at end of file |