1 | ;
|
2 |
|
3 | import { Context } from './core/context/context';
|
4 | import { ComponentEngine } from './core/engine/componentEngine';
|
5 | import { RenderingEngine } from './core/engine/engine';
|
6 | export class NailsDirectives {
|
7 | constructor() {
|
8 | this.directives = ['if', 'form', 'for', 'click', 'change'];
|
9 | }
|
10 | /*
|
11 | A directive consists of an element (string) in the @directives array and a function declaration
|
12 | below.
|
13 | directive and function need to have the same name
|
14 | sample body:
|
15 | sample(element, statement, state){
|
16 |
|
17 | }
|
18 | where element is the element where the directive is added and statemenet
|
19 | what has been declaired.
|
20 | sample arguments
|
21 | element = h1 reference
|
22 | statement = var object of objects
|
23 | state = current state
|
24 |
|
25 | For reactivness, only use elements in the data object within the state, as these
|
26 | are actively monitored.
|
27 |
|
28 | DONT PREFIX YOUR DIRECTIVE AND FUNCTIONS WITH AN N
|
29 | */
|
30 |
|
31 |
|
32 | click(element, statement, state) {
|
33 | const componentEngine = new ComponentEngine(state, new RenderingEngine(state), null, []);
|
34 |
|
35 | if (!state.click) {
|
36 | state.click.callbacks = [];
|
37 | }
|
38 |
|
39 | const callback = () => {
|
40 | const instance = componentEngine.getInstanceOfElementOrNull(element);
|
41 |
|
42 | if (instance !== null) {
|
43 | // tslint:disable-next-line: no-eval
|
44 | eval('instance.getComponent().' + statement);
|
45 | return;
|
46 | } // tslint:disable-next-line: no-eval
|
47 |
|
48 |
|
49 | eval('state.methods.' + statement);
|
50 | };
|
51 |
|
52 | element.onclick = callback;
|
53 | }
|
54 |
|
55 | change(element, statement, state) {
|
56 | const callback = () => {
|
57 | // tslint:disable-next-line: no-eval
|
58 | eval('state.methods.' + statement + '(' + element.value + ')');
|
59 | };
|
60 |
|
61 | element.onchange = callback;
|
62 | }
|
63 |
|
64 | form(element, statement, state) {
|
65 | if (element.getAttribute('type') === 'text') {
|
66 | if (state.data[statement] !== element.value) {
|
67 | state.data[statement] = element.value;
|
68 | }
|
69 | }
|
70 |
|
71 | element.addEventListener('input', () => {
|
72 | if (state.data[statement] !== element.value) {
|
73 | state.data[statement] = element.value;
|
74 | }
|
75 | });
|
76 | }
|
77 |
|
78 | for(element, statemenet, state) {
|
79 | console.error('called');
|
80 | const engine = new RenderingEngine(state);
|
81 | const componentEngine = new ComponentEngine(state, engine, null, []);
|
82 | engine.disableInterpolationForVariableNameOnElement(statemenet.split(' ')[1], element);
|
83 | element.style.display = 'none'; // tslint:disable-next-line: no-shadowed-variable
|
84 |
|
85 | function interpolateCustomElement(el, object, // tslint:disable-next-line: no-shadowed-variable
|
86 | descriptor) {
|
87 | // Performancewise, we render the whole html element.
|
88 | let html = el.innerHTML;
|
89 | const interpolations = engine.getInterpolationsForTextContent(html);
|
90 |
|
91 | for (const interpolation of interpolations) {
|
92 | let stripped = engine.stripAndTrimInterpolation(interpolation);
|
93 | const args = stripped.split('.');
|
94 | args[0] = '';
|
95 | stripped = '';
|
96 |
|
97 | for (const arg of args) {
|
98 | stripped += arg + '.';
|
99 | }
|
100 |
|
101 | stripped = stripped.substring(0, stripped.length - 1);
|
102 |
|
103 | if (engine.getValueOfInterpolation(interpolation, element) !== undefined) {
|
104 | html = html.replace(interpolation, engine.getValueOfInterpolation(interpolation, element));
|
105 | } else {
|
106 | // tslint:disable: no-eval
|
107 | html = html.replace(interpolation, engine.sanitize(eval('object' + stripped)));
|
108 | }
|
109 | }
|
110 |
|
111 | el.innerHTML = html;
|
112 | }
|
113 |
|
114 | const descriptor = statemenet.split(' ')[1];
|
115 | const arr = statemenet.split(' ')[3];
|
116 | const instance = componentEngine.getInstanceOfElementOrNull(element);
|
117 | const context = new Context(state, instance);
|
118 | const refArray = context.resolveOrUndefined(arr);
|
119 |
|
120 | if (!refArray) {
|
121 | return;
|
122 | }
|
123 |
|
124 | const parent = element.parentNode;
|
125 |
|
126 | if (parent === null) {
|
127 | return;
|
128 | }
|
129 |
|
130 | for (const i of refArray) {
|
131 | const child = document.createElement(element.nodeName);
|
132 | child.innerHTML = element.innerHTML;
|
133 | interpolateCustomElement(child, i, descriptor);
|
134 | parent.appendChild(child);
|
135 | engine.disableInterpolationForVariableNameOnElement(statemenet.split(' ')[1], child);
|
136 |
|
137 | for (const attr of element.attributes) {
|
138 | if (attr.name !== 'n-for' && attr.name !== 'style') {
|
139 | child.setAttribute(attr.name, attr.value);
|
140 | }
|
141 | }
|
142 |
|
143 | componentEngine.traverseElementAndExecuteDirectives(child); // engine.executeDirectivesOnElement(child, true)
|
144 | }
|
145 | }
|
146 |
|
147 | if(element, statement, state) {
|
148 | if (statement === 'true' || statement === 'false') {
|
149 | if (statement === 'true') {
|
150 | element.style.visibility = 'visible';
|
151 | return;
|
152 | } else {
|
153 | element.style.visibility = 'hidden';
|
154 | return;
|
155 | }
|
156 | }
|
157 |
|
158 | let reversed = false;
|
159 |
|
160 | if (statement[0] === '!') {
|
161 | statement = statement.substring(1);
|
162 | reversed = true;
|
163 | }
|
164 |
|
165 | const componentEngine = new ComponentEngine(state, new RenderingEngine(state), null, null); // tslint:disable-next-line:max-line-length
|
166 |
|
167 | const context = new Context(state, componentEngine.getInstanceOfElementOrNull(element));
|
168 |
|
169 | if (context.resolveOrUndefined(statement)) {
|
170 | if (reversed) {
|
171 | if (!eval(state.data[statement])) {
|
172 | element.style.visibility = 'visible';
|
173 | } else {
|
174 | element.style.visibility = 'hidden';
|
175 | }
|
176 | } else {
|
177 | if (eval(state.data[statement])) {
|
178 | element.style.visibility = 'visible';
|
179 | } else {
|
180 | element.style.visibility = 'hidden';
|
181 | }
|
182 | }
|
183 | } else {
|
184 | element.style.visibility = 'hidden';
|
185 | }
|
186 | }
|
187 |
|
188 | }
|
189 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RpdmVEZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6WyJDb250ZXh0IiwiQ29tcG9uZW50RW5naW5lIiwiUmVuZGVyaW5nRW5naW5lIiwiTmFpbHNEaXJlY3RpdmVzIiwiY29uc3RydWN0b3IiLCJkaXJlY3RpdmVzIiwiY2xpY2siLCJlbGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGUiLCJjb21wb25lbnRFbmdpbmUiLCJjYWxsYmFja3MiLCJjYWxsYmFjayIsImluc3RhbmNlIiwiZ2V0SW5zdGFuY2VPZkVsZW1lbnRPck51bGwiLCJldmFsIiwib25jbGljayIsImNoYW5nZSIsInZhbHVlIiwib25jaGFuZ2UiLCJmb3JtIiwiZ2V0QXR0cmlidXRlIiwiZGF0YSIsImFkZEV2ZW50TGlzdGVuZXIiLCJmb3IiLCJzdGF0ZW1lbmV0IiwiY29uc29sZSIsImVycm9yIiwiZW5naW5lIiwiZGlzYWJsZUludGVycG9sYXRpb25Gb3JWYXJpYWJsZU5hbWVPbkVsZW1lbnQiLCJzcGxpdCIsInN0eWxlIiwiZGlzcGxheSIsImludGVycG9sYXRlQ3VzdG9tRWxlbWVudCIsImVsIiwib2JqZWN0IiwiZGVzY3JpcHRvciIsImh0bWwiLCJpbm5lckhUTUwiLCJpbnRlcnBvbGF0aW9ucyIsImdldEludGVycG9sYXRpb25zRm9yVGV4dENvbnRlbnQiLCJpbnRlcnBvbGF0aW9uIiwic3RyaXBwZWQiLCJzdHJpcEFuZFRyaW1JbnRlcnBvbGF0aW9uIiwiYXJncyIsImFyZyIsInN1YnN0cmluZyIsImxlbmd0aCIsImdldFZhbHVlT2ZJbnRlcnBvbGF0aW9uIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNhbml0aXplIiwiYXJyIiwiY29udGV4dCIsInJlZkFycmF5IiwicmVzb2x2ZU9yVW5kZWZpbmVkIiwicGFyZW50IiwicGFyZW50Tm9kZSIsImkiLCJjaGlsZCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm5vZGVOYW1lIiwiYXBwZW5kQ2hpbGQiLCJhdHRyIiwiYXR0cmlidXRlcyIsIm5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJ0cmF2ZXJzZUVsZW1lbnRBbmRFeGVjdXRlRGlyZWN0aXZlcyIsImlmIiwidmlzaWJpbGl0eSIsInJldmVyc2VkIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxTQUFTQSxPQUFULFFBQXdCLHdCQUF4QjtBQUNBLFNBQVNDLGVBQVQsUUFBZ0MsK0JBQWhDO0FBQ0EsU0FBU0MsZUFBVCxRQUFnQyxzQkFBaEM7QUFFQSxPQUFPLE1BQU1DLGVBQU4sQ0FBc0I7QUFFM0JDLEVBQUFBLFdBQVcsR0FBRztBQUNaLFNBQUtDLFVBQUwsR0FBa0IsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLEtBQWYsRUFBc0IsT0FBdEIsRUFBK0IsUUFBL0IsQ0FBbEI7QUFDRDtBQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUJPQyxFQUFBQSxLQUFQLENBQWFDLE9BQWIsRUFBbUNDLFNBQW5DLEVBQXNEQyxLQUF0RCxFQUFvRTtBQUNsRSxVQUFNQyxlQUFlLEdBQUcsSUFBSVQsZUFBSixDQUFvQlEsS0FBcEIsRUFBMkIsSUFBSVAsZUFBSixDQUFvQk8sS0FBcEIsQ0FBM0IsRUFBdUQsSUFBdkQsRUFBNkQsRUFBN0QsQ0FBeEI7O0FBRUEsUUFBSSxDQUFDQSxLQUFLLENBQUNILEtBQVgsRUFBa0I7QUFDaEJHLE1BQUFBLEtBQUssQ0FBQ0gsS0FBTixDQUFZSyxTQUFaLEdBQXdCLEVBQXhCO0FBQ0Q7O0FBQ0QsVUFBTUMsUUFBUSxHQUFHLE1BQU07QUFDckIsWUFBTUMsUUFBUSxHQUFHSCxlQUFlLENBQUNJLDBCQUFoQixDQUEyQ1AsT0FBM0MsQ0FBakI7O0FBRUEsVUFBSU0sUUFBUSxLQUFLLElBQWpCLEVBQXVCO0FBQ3JCO0FBQ0FFLFFBQUFBLElBQUksQ0FBQyw2QkFBNkJQLFNBQTlCLENBQUo7QUFDQTtBQUNELE9BUG9CLENBUXJCOzs7QUFDQU8sTUFBQUEsSUFBSSxDQUFDLG1CQUFtQlAsU0FBcEIsQ0FBSjtBQUNELEtBVkQ7O0FBV0FELElBQUFBLE9B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b3J0IHsgSW5zdGFuY2UgfSBmcm9tICcuL2NsYXNzZXMvSW5zdGFuY2UnO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4vY29yZS9jb250ZXh0L2NvbnRleHQnO1xuaW1wb3J0IHsgQ29tcG9uZW50RW5naW5lIH0gZnJvbSAnLi9jb3JlL2VuZ2luZS9jb21wb25lbnRFbmdpbmUnO1xuaW1wb3J0IHsgUmVuZGVyaW5nRW5naW5lIH0gZnJvbSAnLi9jb3JlL2VuZ2luZS9lbmdpbmUnO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL2NvcmUvc3RhdGUnO1xuZXhwb3J0IGNsYXNzIE5haWxzRGlyZWN0aXZlcyB7XG4gIHB1YmxpYyBkaXJlY3RpdmVzOiBhbnk7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGlyZWN0aXZlcyA9IFsnaWYnLCAnZm9ybScsICdmb3InLCAnY2xpY2snLCAnY2hhbmdlJ107XG4gIH1cbiAgLypcbiAgICAgICAgICBBIGRpcmVjdGl2ZSBjb25zaXN0cyBvZiBhbiBlbGVtZW50IChzdHJpbmcpIGluIHRoZSBAZGlyZWN0aXZlcyBhcnJheSBhbmQgYSBmdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgICAgICAgIGJlbG93LlxuICAgICAgICAgIGRpcmVjdGl2ZSBhbmQgZnVuY3Rpb24gbmVlZCB0byBoYXZlIHRoZSBzYW1lIG5hbWVcbiAgICAgICAgICBzYW1wbGUgYm9keTpcbiAgICAgICAgICBzYW1wbGUoZWxlbWVudCwgc3RhdGVtZW50LCBzdGF0ZSl7XG4gIFxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGVyZSBlbGVtZW50IGlzIHRoZSBlbGVtZW50IHdoZXJlIHRoZSBkaXJlY3RpdmUgaXMgYWRkZWQgYW5kIHN0YXRlbWVuZXRcbiAgICAgICAgICB3aGF0IGhhcyBiZWVuIGRlY2xhaXJlZC5cbiAgICAgICAgICBzYW1wbGUgYXJndW1lbnRzXG4gICAgICAgICAgZWxlbWVudCA9IGgxIHJlZmVyZW5jZVxuICAgICAgICAgIHN0YXRlbWVudCA9IHZhciBvYmplY3Qgb2Ygb2JqZWN0c1xuICAgICAgICAgIHN0YXRlID0gY3VycmVudCBzdGF0ZVxuICBcbiAgICAgICAgICBGb3IgcmVhY3Rpdm5lc3MsIG9ubHkgdXNlIGVsZW1lbnRzIGluIHRoZSBkYXRhIG9iamVjdCB3aXRoaW4gdGhlIHN0YXRlLCBhcyB0aGVzZVxuICAgICAgICAgIGFyZSBhY3RpdmVseSBtb25pdG9yZWQuXG4gIFxuICAgICAgICAgIERPTlQgUFJFRklYIFlPVVIgRElSRUNUSVZFIEFORCBGVU5DVElPTlMgV0lUSCBBTiBOXG4gICAgICAqL1xuXG4gIHB1YmxpYyBjbGljayhlbGVtZW50OiBIVE1MRWxlbWVudCwgc3RhdGVtZW50OiBzdHJpbmcsIHN0YXRlOiBTdGF0ZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudEVuZ2luZSA9IG5ldyBDb21wb25lbnRFbmdpbmUoc3RhdGUsIG5ldyBSZW5kZXJpbmdFbmdpbmUoc3RhdGUpLCBudWxsLCBbXSk7XG5cbiAgICBpZiAoIXN0YXRlLmNsaWNrKSB7XG4gICAgICBzdGF0ZS5jbGljay5jYWxsYmFja3MgPSBbXTtcbiAgICB9XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudEVuZ2luZS5nZXRJbnN0YW5jZU9mRWxlbWVudE9yTnVsbChlbGVtZW50KSBhcyBJbnN0YW5jZTtcblxuICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tZXZhbFxuICAgICAgICBldmFsKCdpbnN0YW5jZS5nZXRDb21wb25lbnQoKS4nICsgc3RhdGVtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1ldmFsXG4gICAgICBldmFsKCdzdGF0ZS5tZXRob2RzLicgKyBzdGF0ZW1lbnQpO1xuICAgIH07XG4gICAgZWxlbWVudC5vbmNsaWNrID0gY2FsbGJhY2s7XG4gIH1cbiAgcHVibGljIGNoYW5nZShlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBzdGF0ZW1lbnQ6IHN0cmluZywgc3RhdGU6IFN0YXRlKSB7XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWV2YWxcbiAgICAgIGV2YWwoJ3N0YXRlLm1ldGhvZHMuJyArIHN0YXRlbWVudCArICcoJyArIGVsZW1lbnQudmFsdWUgKyAnKScpO1xuICAgIH07XG4gICAgZWxlbWVudC5vbmNoYW5nZSA9IGNhbGxiYWNrO1xuICB9XG4gIHB1YmxpYyBmb3JtKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQsIHN0YXRlbWVudDogc3RyaW5nLCBzdGF0ZTogU3RhdGUpIHtcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3RleHQnKSB7XG4gICAgICBpZiAoc3RhdGUuZGF0YVtzdGF0ZW1lbnRdICE9PSBlbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHN0YXRlLmRhdGFbc3RhdGVtZW50XSA9IGVsZW1lbnQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7XG4gICAgICBpZiAoc3RhdGUuZGF0YVtzdGF0ZW1lbnRdICE9PSBlbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHN0YXRlLmRhdGFbc3RhdGVtZW50XSA9IGVsZW1lbnQudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZm9yKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdGF0ZW1lbmV0OiBzdHJpbmcsIHN0YXRlOiBTdGF0ZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2NhbGxlZCcpO1xuICAgIGNvbnN0IGVuZ2luZSA9IG5ldyBSZW5kZXJpbmdFbmdpbmUoc3RhdGUpO1xuICAgIGNvbnN0IGNvbXBvbmVudEVuZ2luZSA9IG5ldyBDb21wb25lbnRFbmdpbmUoc3RhdGUsIGVuZ2luZSwgbnVsbCwgW10pO1xuICAgIGVuZ2luZS5kaXNhYmxlSW50ZXJwb2xhdGlvbkZvclZhcmlhYmxlTmFtZU9uRWxlbWVudChzdGF0ZW1lbmV0LnNwbGl0KCcgJylbMV0sIGVsZW1lbnQpO1xuXG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZUN1c3RvbUVsZW1lbnQoXG4gICAgICBlbDogSFRNTEVsZW1lbnQsXG4gICAgICBvYmplY3Q6IGFueSxcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc2hhZG93ZWQtdmFyaWFibGVcbiAgICAgIGRlc2NyaXB0b3I6IGFueSxcbiAgICApIHtcbiAgICAgIC8vIFBlcmZvcm1hbmNld2lzZSwgd2UgcmVuZGVyIHRoZSB3aG9sZSBodG1sIGVsZW1lbnQuXG4gICAgICBsZXQgaHRtbCA9IGVsLmlubmVySFRNTDtcbiAgICAgIGNvbnN0IGludGVycG9sYXRpb25zID0gZW5naW5lLmdldEludGVycG9sYXRpb25zRm9yVGV4dENvbnRlbnQoaHRtbCk7XG4gICAgICBmb3IgKGNvbnN0IGludGVycG9sYXRpb24gb2YgaW50ZXJwb2xhdGlvbnMpIHtcbiAgICAgICAgbGV0IHN0cmlwcGVkID0gZW5naW5lLnN0cmlwQW5kVHJpbUludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbik7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBzdHJpcHBlZC5zcGxpdCgnLicpO1xuICAgICAgICBhcmdzWzBdID0gJyc7XG4gICAgICAgIHN0cmlwcGVkID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICBzdHJpcHBlZCArPSBhcmcgKyAnLic7XG4gICAgICAgIH1cbiAgICAgICAgc3RyaXBwZWQgPSBzdHJpcHBlZC5zdWJzdHJpbmcoMCwgc3RyaXBwZWQubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKGVuZ2luZS5nZXRWYWx1ZU9mSW50ZXJwb2xhdGlvbihpbnRlcnBvbGF0aW9uLCBlbGVtZW50KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZShpbnRlcnBvbGF0aW9uLCBlbmdpbmUuZ2V0VmFsdWVPZkludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbiwgZWxlbWVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlOiBuby1ldmFsXG4gICAgICAgICAgaHRtbCA9IGh0bWwucmVwbGFjZShpbnRlcnBvbGF0aW9uLCBlbmdpbmUuc2FuaXRpemUoZXZhbCgnb2JqZWN0JyArIHN0cmlwcGVkKSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbC5pbm5lckhUTUwgPSBodG1sO1xuICAgIH1cbiAgICBjb25zdCBkZXNjcmlwdG9yID0gc3RhdGVtZW5ldC5zcGxpdCgnICcpWzFdO1xuICAgIGNvbnN0IGFyciA9IHN0YXRlbWVuZXQuc3BsaXQoJyAnKVszXTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudEVuZ2luZS5nZXRJbnN0YW5jZU9mRWxlbWVudE9yTnVsbChlbGVtZW50KSBhcyBJbnN0YW5jZTtcbiAgICBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUsIGluc3RhbmNlKTtcblxuICAgIGNvbnN0IHJlZkFycmF5ID0gY29udGV4dC5yZXNvbHZlT3JVbmRlZmluZWQoYXJyKTtcblxuICAgIGlmICghcmVmQXJyYXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGkgb2YgcmVmQXJyYXkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50Lm5vZGVOYW1lKTtcbiAgICAgIGNoaWxkLmlubmVySFRNTCA9IGVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgaW50ZXJwb2xhdGVDdXN0b21FbGVtZW50KGNoaWxkLCBpLCBkZXNjcmlwdG9yKTtcbiAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICBlbmdpbmUuZGlzYWJsZUludGVycG9sYXRpb25Gb3JWYXJpYWJsZU5hbWVPbkVsZW1lbnQoc3RhdGVtZW5ldC5zcGxpdCgnICcpWzFdLCBjaGlsZCk7XG5cbiAgICAgIGZvciAoY29uc3QgYXR0ciBvZiBlbGVtZW50LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ24tZm9yJyAmJiBhdHRyLm5hbWUgIT09ICdzdHlsZScpIHtcbiAgICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcG9uZW50RW5naW5lLnRyYXZlcnNlRWxlbWVudEFuZEV4ZWN1dGVEaXJlY3RpdmVzKGNoaWxkKTtcbiAgICAgIC8vIGVuZ2luZS5leGVjdXRlRGlyZWN0aXZlc09uRWxlbWVudChjaGlsZCwgdHJ1ZSlcbiAgICB9XG4gIH1cbiAgcHVibGljIGlmKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzdGF0ZW1lbnQ6IHN0cmluZywgc3RhdGU6IFN0YXRlKSB7XG4gICAgaWYgKHN0YXRlbWVudCA9PT0gJ3RydWUnIHx8IHN0YXRlbWVudCA9PT0gJ2ZhbHNlJykge1xuICAgICAgaWYgKHN0YXRlbWVudCA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcblxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJldmVyc2VkID0gZmFsc2U7XG4gICAgaWYgKHN0YXRlbWVudFswXSA9PT0gJyEnKSB7XG4gICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnQuc3Vic3RyaW5nKDEpO1xuICAgICAgcmV2ZXJzZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjb21wb25lbnRFbmdpbmUgPSBuZXcgQ29tcG9uZW50RW5naW5lKHN0YXRlLCBuZXcgUmVuZGVyaW5nRW5naW5lKHN0YXRlKSwgbnVsbCwgbnVsbCk7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0KHN0YXRlLCBjb21wb25lbnRFbmdpbmUuZ2V0SW5zdGFuY2VPZkVsZW1lbnRPck51bGwoZWxlbWVudCkpO1xuICAgIGlmIChjb250ZXh0LnJlc29sdmVPclVuZGVmaW5lZChzdGF0ZW1lbnQpKSB7XG4gICAgICBpZiAocmV2ZXJzZWQpIHtcbiAgICAgICAgaWYgKCFldmFsKHN0YXRlLmRhdGFbc3RhdGVtZW50XSkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChldmFsKHN0YXRlLmRhdGFbc3RhdGVtZW50XSkpIHtcbiAgICAgICAgICBlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgfVxuICB9XG59XG4iXX0= |
\ | No newline at end of file |