1 | function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
|
2 |
|
3 | import { ConcreteBounds, NewElementBuilder } from '@glimmer/runtime';
|
4 | var TEXT_NODE = 3;
|
5 | var NEEDS_EXTRA_CLOSE = new WeakMap();
|
6 |
|
7 | function currentNode(cursor) {
|
8 | var element = cursor.element,
|
9 | nextSibling = cursor.nextSibling;
|
10 |
|
11 | if (nextSibling === null) {
|
12 | return element.lastChild;
|
13 | } else {
|
14 | return nextSibling.previousSibling;
|
15 | }
|
16 | }
|
17 |
|
18 | var SerializeBuilder = /*#__PURE__*/function (_NewElementBuilder) {
|
19 | _inheritsLoose(SerializeBuilder, _NewElementBuilder);
|
20 |
|
21 | function SerializeBuilder() {
|
22 | var _this;
|
23 |
|
24 | _this = _NewElementBuilder.apply(this, arguments) || this;
|
25 | _this.serializeBlockDepth = 0;
|
26 | return _this;
|
27 | }
|
28 |
|
29 | var _proto = SerializeBuilder.prototype;
|
30 |
|
31 | _proto.__openBlock = function __openBlock() {
|
32 | var tagName = this.element.tagName;
|
33 |
|
34 | if (tagName !== 'TITLE' && tagName !== 'SCRIPT' && tagName !== 'STYLE') {
|
35 | var depth = this.serializeBlockDepth++;
|
36 |
|
37 | this.__appendComment("%+b:" + depth + "%");
|
38 | }
|
39 |
|
40 | _NewElementBuilder.prototype.__openBlock.call(this);
|
41 | };
|
42 |
|
43 | _proto.__closeBlock = function __closeBlock() {
|
44 | var tagName = this.element.tagName;
|
45 |
|
46 | _NewElementBuilder.prototype.__closeBlock.call(this);
|
47 |
|
48 | if (tagName !== 'TITLE' && tagName !== 'SCRIPT' && tagName !== 'STYLE') {
|
49 | var depth = --this.serializeBlockDepth;
|
50 |
|
51 | this.__appendComment("%-b:" + depth + "%");
|
52 | }
|
53 | };
|
54 |
|
55 | _proto.__appendHTML = function __appendHTML(html) {
|
56 | var tagName = this.element.tagName;
|
57 |
|
58 | if (tagName === 'TITLE' || tagName === 'SCRIPT' || tagName === 'STYLE') {
|
59 | return _NewElementBuilder.prototype.__appendHTML.call(this, html);
|
60 | } // Do we need to run the html tokenizer here?
|
61 |
|
62 |
|
63 | var first = this.__appendComment('%glmr%');
|
64 |
|
65 | if (tagName === 'TABLE') {
|
66 | var openIndex = html.indexOf('<');
|
67 |
|
68 | if (openIndex > -1) {
|
69 | var tr = html.slice(openIndex + 1, openIndex + 3);
|
70 |
|
71 | if (tr === 'tr') {
|
72 | html = "<tbody>" + html + "</tbody>";
|
73 | }
|
74 | }
|
75 | }
|
76 |
|
77 | if (html === '') {
|
78 | this.__appendComment('% %');
|
79 | } else {
|
80 | _NewElementBuilder.prototype.__appendHTML.call(this, html);
|
81 | }
|
82 |
|
83 | var last = this.__appendComment('%glmr%');
|
84 |
|
85 | return new ConcreteBounds(this.element, first, last);
|
86 | };
|
87 |
|
88 | _proto.__appendText = function __appendText(string) {
|
89 | var tagName = this.element.tagName;
|
90 | var current = currentNode(this);
|
91 |
|
92 | if (tagName === 'TITLE' || tagName === 'SCRIPT' || tagName === 'STYLE') {
|
93 | return _NewElementBuilder.prototype.__appendText.call(this, string);
|
94 | } else if (string === '') {
|
95 | return this.__appendComment('% %');
|
96 | } else if (current && current.nodeType === TEXT_NODE) {
|
97 | this.__appendComment('%|%');
|
98 | }
|
99 |
|
100 | return _NewElementBuilder.prototype.__appendText.call(this, string);
|
101 | };
|
102 |
|
103 | _proto.closeElement = function closeElement() {
|
104 | if (NEEDS_EXTRA_CLOSE.has(this.element)) {
|
105 | NEEDS_EXTRA_CLOSE["delete"](this.element);
|
106 |
|
107 | _NewElementBuilder.prototype.closeElement.call(this);
|
108 | }
|
109 |
|
110 | return _NewElementBuilder.prototype.closeElement.call(this);
|
111 | };
|
112 |
|
113 | _proto.openElement = function 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 _NewElementBuilder.prototype.openElement.call(this, tag);
|
127 | };
|
128 |
|
129 | _proto.pushRemoteElement = function pushRemoteElement(element, cursorId, insertBefore) {
|
130 | if (insertBefore === void 0) {
|
131 | insertBefore = null;
|
132 | }
|
133 |
|
134 | var dom = this.dom;
|
135 | var script = dom.createElement('script');
|
136 | script.setAttribute('glmr', cursorId);
|
137 | dom.insertBefore(element, script, insertBefore);
|
138 | return _NewElementBuilder.prototype.pushRemoteElement.call(this, element, cursorId, insertBefore);
|
139 | };
|
140 |
|
141 | return SerializeBuilder;
|
142 | }(NewElementBuilder);
|
143 |
|
144 | export function serializeBuilder(env, cursor) {
|
145 | return SerializeBuilder.forInitialRender(env, cursor);
|
146 | }
|
147 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL25vZGUvbGliL3NlcmlhbGl6ZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsU0FBQSxjQUFBLEVBQUEsaUJBQUEsUUFBQSxrQkFBQTtBQUlBLElBQU0sU0FBUyxHQUFmLENBQUE7QUFFQSxJQUFNLGlCQUFpQixHQUFHLElBQTFCLE9BQTBCLEVBQTFCOztBQUVBLFNBQUEsV0FBQSxDQUFBLE1BQUEsRUFDOEU7QUFBQSxNQUV4RSxPQUZ3RSxHQUU1RSxNQUY0RSxDQUV4RSxPQUZ3RTtBQUFBLE1BRTdELFdBRjZELEdBRTVFLE1BRjRFLENBRTdELFdBRjZEOztBQUk1RSxNQUFJLFdBQVcsS0FBZixJQUFBLEVBQTBCO0FBQ3hCLFdBQU8sT0FBTyxDQUFkLFNBQUE7QUFERixHQUFBLE1BRU87QUFDTCxXQUFPLFdBQVcsQ0FBbEIsZUFBQTtBQUNEO0FBQ0Y7O0lBRUQsZ0I7OztBQUFBLDhCQUFBO0FBQUE7OztBQUNVLFVBQUEsbUJBQUEsR0FBQSxDQUFBO0FBRFY7QUE0R0M7Ozs7U0F6R0MsVyxHQUFBLHVCQUFXO0FBQUEsUUFDSCxPQURHLEdBQ1MsS0FBbEIsT0FEUyxDQUNILE9BREc7O0FBR1QsUUFBSSxPQUFPLEtBQVAsT0FBQSxJQUF1QixPQUFPLEtBQTlCLFFBQUEsSUFBK0MsT0FBTyxLQUExRCxPQUFBLEVBQXdFO0FBQ3RFLFVBQUksS0FBSyxHQUFHLEtBQVosbUJBQVksRUFBWjs7QUFDQSxXQUFBLGVBQUEsVUFBQSxLQUFBO0FBQ0Q7O0FBRUQsaUNBQUEsV0FBQTtBQUNELEc7O1NBRUQsWSxHQUFBLHdCQUFZO0FBQUEsUUFDSixPQURJLEdBQ1EsS0FBbEIsT0FEVSxDQUNKLE9BREk7O0FBR1YsaUNBQUEsWUFBQTs7QUFFQSxRQUFJLE9BQU8sS0FBUCxPQUFBLElBQXVCLE9BQU8sS0FBOUIsUUFBQSxJQUErQyxPQUFPLEtBQTFELE9BQUEsRUFBd0U7QUFDdEUsVUFBSSxL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QUd3QztBQUFBLFFBQXRDLFlBQXNDO0FBQXRDLE1BQUEsWUFBc0MsR0FIdkIsSUFHdUI7QUFBQTs7QUFBQSxRQUVoQyxHQUZnQyxHQUV0QyxJQUZzQyxDQUVoQyxHQUZnQztBQUd0QyxRQUFJLE1BQU0sR0FBRyxHQUFHLENBQUgsYUFBQSxDQUFiLFFBQWEsQ0FBYjtBQUNBLElBQUEsTUFBTSxDQUFOLFlBQUEsQ0FBQSxNQUFBLEVBQUEsUUFBQTtBQUNBLElBQUEsR0FBRyxDQUFILFlBQUEsQ0FBQSxPQUFBLEVBQUEsTUFBQSxFQUFBLFlBQUE7QUFDQSx3Q0FBTyxpQkFBUCxZQUFPLE9BQVAsRUFBTyxRQUFQLEVBQUEsWUFBQTtBQUNELEc7OztFQTNHSCxpQjs7QUE4R0EsT0FBTSxTQUFBLGdCQUFBLENBQUEsR0FBQSxFQUFBLE1BQUEsRUFFK0Q7QUFFbkUsU0FBTyxnQkFBZ0IsQ0FBaEIsZ0JBQUEsQ0FBQSxHQUFBLEVBQVAsTUFBTyxDQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEJvdW5kcyxcbiAgRW52aXJvbm1lbnQsXG4gIE9wdGlvbixcbiAgRWxlbWVudEJ1aWxkZXIsXG4gIE1heWJlLFxuICBNb2RpZmllckluc3RhbmNlLFxufSBmcm9tICdAZ2xpbW1lci9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbmNyZXRlQm91bmRzLCBOZXdFbGVtZW50QnVpbGRlciB9IGZyb20gJ0BnbGltbWVyL3J1bnRpbWUnO1xuaW1wb3J0IHsgUmVtb3RlTGl2ZUJsb2NrIH0gZnJvbSAnQGdsaW1tZXIvcnVudGltZSc7XG5pbXBvcnQgdHlwZSB7IFNpbXBsZUVsZW1lbnQsIFNpbXBsZU5vZGUsIFNpbXBsZVRleHQgfSBmcm9tICdAc2ltcGxlLWRvbS9pbnRlcmZhY2UnO1xuXG5jb25zdCBURVhUX05PREUgPSAzO1xuXG5jb25zdCBORUVEU19FWFRSQV9DTE9TRSA9IG5ldyBXZWFrTWFwPFNpbXBsZU5vZGU+KCk7XG5cbmZ1bmN0aW9uIGN1cnJlbnROb2RlKFxuICBjdXJzb3I6IEVsZW1lbnRCdWlsZGVyIHwgeyBlbGVtZW50OiBTaW1wbGVFbGVtZW50OyBuZXh0U2libGluZzogU2ltcGxlTm9kZSB9XG4pOiBPcHRpb248U2ltcGxlTm9kZT4ge1xuICBsZXQgeyBlbGVtZW50LCBuZXh0U2libGluZyB9ID0gY3Vyc29yO1xuXG4gIGlmIChuZXh0U2libGluZyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBlbGVtZW50Lmxhc3RDaGlsZDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV4dFNpYmxpbmcucHJldmlvdXNTaWJsaW5nO1xuICB9XG59XG5cbmNsYXNzIFNlcmlhbGl6ZUJ1aWxkZXIgZXh0ZW5kcyBOZXdFbGVtZW50QnVpbGRlciBpbXBsZW1lbnRzIEVsZW1lbnRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBzZXJpYWxpemVCbG9ja0RlcHRoID0gMDtcblxuICBfX29wZW5CbG9jaygpOiB2b2lkIHtcbiAgICBsZXQgeyB0YWdOYW1lIH0gPSB0aGlzLmVsZW1lbnQ7XG5cbiAgICBpZiAodGFnTmFtZSAhPT0gJ1RJVExFJyAmJiB0YWdOYW1lICE9PSAnU0NSSVBUJyAmJiB0YWdOYW1lICE9PSAnU1RZTEUnKSB7XG4gICAgICBsZXQgZGVwdGggPSB0aGlzLnNlcmlhbGl6ZUJsb2NrRGVwdGgrKztcbiAgICAgIHRoaXMuX19hcHBlbmRDb21tZW50KGAlK2I6JHtkZXB0aH0lYCk7XG4gICAgfVxuXG4gICAgc3VwZXIuX19vcGVuQmxvY2soKTtcbiAgfVxuXG4gIF9fY2xvc2VCbG9jaygpOiB2b2lkIHtcbiAgICBsZXQgeyB0YWdOYW1lIH0gPSB0aGlzLmVsZW1lbnQ7XG5cbiAgICBzdXBlci5fX2Nsb3NlQmxvY2soKTtcblxuICAgIGlmICh0YWdOYW1lICE9PSAnVElUTEUnICYmIHRhZ05hbWUgIT09ICdTQ1JJUFQnICYmIHRhZ05hbWUgIT09ICdTVFlMRScpIHtcbiAgICAgIGxldCBkZXB0aCA9IC0tdGhpcy5zZXJpYWxpemVCbG9ja0RlcHRoO1xuICAgICAgdGhpcy5fX2FwcGVuZENvbW1lbnQoYCUtYjoke2RlcHRofSVgKTtcbiAgICB9XG4gIH1cblxuICBfX2FwcGVuZEhUTUwoaHRtbDogc3RyaW5nKTogQm91bmRzIHtcbiAgICBsZXQgeyB0YWdOYW1lIH0gPSB0aGlzLmVsZW1lbnQ7XG5cbiAgICBpZiAodGFnTmFtZSA9PT0gJ1RJVExFJyB8fCB0YWdOYW1lID09PSAnU0NSSVBUJyB8fCB0YWdOYW1lID09PSAnU1RZTEUnKSB7XG4gICAgICByZXR1cm4gc3VwZXIuX19hcHBlbmRIVE1MKGh0bWwpO1xuICAgIH1cblxuICAgIC8vIERvIHdlIG5lZWQgdG8gcnVuIHRoZSBodG1sIHRva2VuaXplciBoZXJlP1xuICAgIGxldCBmaXJzdCA9IHRoaXMuX19hcHBlbmRDb21tZW50KCclZ2xtciUnKTtcbiAgICBpZiAodGFnTmFtZSA9PT0gJ1RBQkxFJykge1xuICAgICAgbGV0IG9wZW5JbmRleCA9IGh0bWwuaW5kZXhPZignPCcpO1xuICAgICAgaWYgKG9wZW5JbmRleCA+IC0xKSB7XG4gICAgICAgIGxldCB0ciA9IGh0bWwuc2xpY2Uob3BlbkluZGV4ICsgMSwgb3BlbkluZGV4ICsgMyk7XG4gICAgICAgIGlmICh0ciA9PT0gJ3RyJykge1xuICAgICAgICAgIGh0bWwgPSBgPHRib2R5PiR7aHRtbH08L3Rib2R5PmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGh0bWwgPT09ICcnKSB7XG4gICAgICB0aGlzLl9fYXBwZW5kQ29tbWVudCgnJSAlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLl9fYXBwZW5kSFRNTChodG1sKTtcbiAgICB9XG5cbiAgICBsZXQgbGFzdCA9IHRoaXMuX19hcHBlbmRDb21tZW50KCclZ2xtciUnKTtcbiAgICByZXR1cm4gbmV3IENvbmNyZXRlQm91bmRzKHRoaXMuZWxlbWVudCwgZmlyc3QsIGxhc3QpO1xuICB9XG5cbiAgX19hcHBlbmRUZXh0KHN0cmluZzogc3RyaW5nKTogU2ltcGxlVGV4dCB7XG4gICAgbGV0IHsgdGFnTmFtZSB9ID0gdGhpcy5lbGVtZW50O1xuICAgIGxldCBjdXJyZW50ID0gY3VycmVudE5vZGUodGhpcyk7XG5cbiAgICBpZiAodGFnTmFtZSA9PT0gJ1RJVExFJyB8fCB0YWdOYW1lID09PSAnU0NSSVBUJyB8fCB0YWdOYW1lID09PSAnU1RZTEUnKSB7XG4gICAgICByZXR1cm4gc3VwZXIuX19hcHBlbmRUZXh0KHN0cmluZyk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT09ICcnKSB7XG4gICAgICByZXR1cm4gKHRoaXMuX19hcHBlbmRDb21tZW50KCclICUnKSBhcyBhbnkpIGFzIFNpbXBsZVRleHQ7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50ICYmIGN1cnJlbnQubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgdGhpcy5fX2FwcGVuZENvbW1lbnQoJyV8JScpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5fX2FwcGVuZFRleHQoc3RyaW5nKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudCgpOiBPcHRpb248TW9kaWZpZXJJbnN0YW5jZVtdPiB7XG4gICAgaWYgKE5FRURTX0VYVFJBX0NMT1NFLmhhcyh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICBORUVEU19FWFRSQV9DTE9TRS5kZWxldGUodGhpcy5lbGVtZW50KTtcbiAgICAgIHN1cGVyLmNsb3NlRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5jbG9zZUVsZW1lbnQoKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KHRhZzogc3RyaW5nKSB7XG4gICAgaWYgKHRhZyA9PT0gJ3RyJykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmVsZW1lbnQudGFnTmFtZSAhPT0gJ1RCT0RZJyAmJlxuICAgICAgICB0aGlzLmVsZW1lbnQudGFnTmFtZSAhPT0gJ1RIRUFEJyAmJlxuICAgICAgICB0aGlzLmVsZW1lbnQudGFnTmFtZSAhPT0gJ1RGT09UJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnQoJ3Rib2R5Jyk7XG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNsb3NlQmxvY2sgY29tbWVudCBmcm9tIGJlaW5nIHJlLXBhcmVudGVkXG4gICAgICAgIC8vIHVuZGVyIHRoZSBhdXRvIGluc2VydGVkIHRib2R5LiBSZWh5ZHJhdGlvbiBidWlsZGVyIG5lZWRzIHRvXG4gICAgICAgIC8vIGFjY291bnQgZm9yIHRoZSBpbnNlcnRpb24gc2luY2UgaXQgaXMgaW5qZWN0ZWQgaGVyZSBhbmQgbm90XG4gICAgICAgIC8vIHJlYWxseSBpbiB0aGUgdGVtcGxhdGUuXG4gICAgICAgIE5FRURTX0VYVFJBX0NMT1NFLnNldCh0aGlzLmNvbnN0cnVjdGluZyEsIHRydWUpO1xuICAgICAgICB0aGlzLmZsdXNoRWxlbWVudChudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIub3BlbkVsZW1lbnQodGFnKTtcbiAgfVxuXG4gIHB1c2hSZW1vdGVFbGVtZW50KFxuICAgIGVsZW1lbnQ6IFNpbXBsZUVsZW1lbnQsXG4gICAgY3Vyc29ySWQ6IHN0cmluZyxcbiAgICBpbnNlcnRCZWZvcmU6IE1heWJlPFNpbXBsZU5vZGU+ID0gbnVsbFxuICApOiBPcHRpb248UmVtb3RlTGl2ZUJsb2NrPiB7XG4gICAgbGV0IHsgZG9tIH0gPSB0aGlzO1xuICAgIGxldCBzY3JpcHQgPSBkb20uY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnZ2xtcicsIGN1cnNvcklkKTtcbiAgICBkb20uaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHNjcmlwdCwgaW5zZXJ0QmVmb3JlKTtcbiAgICByZXR1cm4gc3VwZXIucHVzaFJlbW90ZUVsZW1lbnQoZWxlbWVudCwgY3Vyc29ySWQsIGluc2VydEJlZm9yZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUJ1aWxkZXIoXG4gIGVudjogRW52aXJvbm1lbnQsXG4gIGN1cnNvcjogeyBlbGVtZW50OiBTaW1wbGVFbGVtZW50OyBuZXh0U2libGluZzogT3B0aW9uPFNpbXBsZU5vZGU+IH1cbik6IEVsZW1lbnRCdWlsZGVyIHtcbiAgcmV0dXJuIFNlcmlhbGl6ZUJ1aWxkZXIuZm9ySW5pdGlhbFJlbmRlcihlbnYsIGN1cnNvcik7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 |
\ | No newline at end of file |