yapp 3.0.8 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/example.js +1414 -1684
- package/lib/defaults.js +4 -4
- package/lib/example/div/sizeable/left.js +1 -1
- package/lib/example/div/sizeable/middle.js +1 -1
- package/lib/example/div/sizeable/right.js +1 -1
- package/lib/example/div/sizeable/top.js +1 -1
- package/lib/example/textarea/bnf.js +1 -1
- package/lib/example/textarea/lexicalEntries.js +1 -1
- package/lib/example/textarea/parseTree.js +1 -1
- package/lib/example/textarea/tokens.js +1 -1
- package/lib/example/view/javascript.js +1 -1
- package/lib/example/view/json.js +1 -1
- package/lib/example/view/xml.js +1 -1
- package/lib/example/view.js +23 -42
- package/lib/example/yapp.js +5 -3
- package/lib/gutter.js +7 -40
- package/lib/highlights.js +248 -0
- package/lib/lexer/javascript.js +1 -1
- package/lib/lexer/json.js +1 -1
- package/lib/lexer/plainText.js +1 -1
- package/lib/lexer/xml.js +1 -1
- package/lib/lineNumbers.js +13 -3
- package/lib/mixins/style.js +1 -1
- package/lib/parser/javascript.js +1 -1
- package/lib/parser/json.js +1 -1
- package/lib/parser/plainText.js +1 -1
- package/lib/parser/xml.js +1 -1
- package/lib/plugin/javascript.js +1 -1
- package/lib/plugin/json.js +1 -1
- package/lib/plugin/plainText.js +1 -1
- package/lib/plugin/xml.js +1 -1
- package/lib/plugin.js +1 -1
- package/lib/prettyPrinter.js +29 -145
- package/lib/processor/javascript.js +1 -1
- package/lib/processor/json.js +1 -1
- package/lib/processor/plainText.js +1 -1
- package/lib/processor/xml.js +1 -1
- package/lib/processor.js +1 -1
- package/lib/renderYappStyles.js +1 -1
- package/lib/richTextarea.js +5 -26
- package/lib/styles.js +1 -5
- package/lib/syntax.js +77 -19
- package/lib/token/significant/argument.js +1 -1
- package/lib/token/significant/attribute.js +1 -1
- package/lib/token/significant/comment.js +1 -1
- package/lib/token/significant/error.js +1 -1
- package/lib/token/significant/jsx/attributeName.js +1 -1
- package/lib/token/significant/jsx/tagName.js +1 -1
- package/lib/token/significant/name.js +1 -1
- package/lib/token/significant/string.js +1 -1
- package/lib/token/significant/variable.js +1 -1
- package/lib/utilities/content.js +1 -1
- package/lib/utilities/css.js +1 -1
- package/lib/utilities/plugin.js +1 -1
- package/lib/utilities/properties.js +1 -1
- package/lib/utilities/rules.js +1 -1
- package/lib/utilities/scrollbarThickness.js +1 -1
- package/lib/utilities/tokens.js +1 -1
- package/lib/yapp.js +34 -96
- package/package.json +1 -1
- package/src/defaults.js +1 -1
- package/src/example/view.js +8 -28
- package/src/example/yapp.js +3 -2
- package/src/gutter.js +9 -41
- package/src/highlights.js +70 -0
- package/src/lineNumbers.js +13 -2
- package/src/prettyPrinter.js +24 -134
- package/src/richTextarea.js +4 -28
- package/src/styles.js +0 -1
- package/src/syntax.js +20 -22
- package/src/yapp.js +49 -130
- package/lib/element/scrollable.js +0 -338
- package/src/element/scrollable.js +0 -166
package/lib/yapp.js
CHANGED
|
@@ -11,7 +11,6 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
var _easyWithStyle = /*#__PURE__*/ _interopRequireDefault(require("easy-with-style"));
|
|
12
12
|
var _easy = require("easy");
|
|
13
13
|
var _style = /*#__PURE__*/ _interopRequireDefault(require("./mixins/style"));
|
|
14
|
-
var _richTextarea = /*#__PURE__*/ _interopRequireDefault(require("./richTextarea"));
|
|
15
14
|
var _prettyPrinter = /*#__PURE__*/ _interopRequireDefault(require("./prettyPrinter"));
|
|
16
15
|
var _scrollbarThickness = require("./utilities/scrollbarThickness");
|
|
17
16
|
var _plugin = require("./utilities/plugin");
|
|
@@ -191,7 +190,7 @@ function _createSuper(Derived) {
|
|
|
191
190
|
}
|
|
192
191
|
function _templateObject() {
|
|
193
192
|
var data = _taggedTemplateLiteral([
|
|
194
|
-
"\n\n width: 100%;\n
|
|
193
|
+
"\n\n width: 100%;\n height: 100%;\n\n border: 1px solid;\n \n color: ",
|
|
195
194
|
";\n caret-color: ",
|
|
196
195
|
";\n border-color: ",
|
|
197
196
|
";\n background-color: ",
|
|
@@ -209,6 +208,17 @@ var Yapp = /*#__PURE__*/ function(Element) {
|
|
|
209
208
|
_classCallCheck(this, Yapp);
|
|
210
209
|
var _this;
|
|
211
210
|
_this = _super.call(this, selector);
|
|
211
|
+
_defineProperty(_assertThisInitialized(_this), "changeHandler", function(event, element) {
|
|
212
|
+
var richTextarea = element, contentChanged = richTextarea.hasContentChanged();
|
|
213
|
+
if (contentChanged) {
|
|
214
|
+
var _properties = _this.properties, _onContentChange = _properties.onContentChange, onContentChange = _onContentChange === void 0 ? null : _onContentChange, contentChangeHandler = onContentChange; ///
|
|
215
|
+
_this.update();
|
|
216
|
+
if (contentChangeHandler) {
|
|
217
|
+
element = _assertThisInitialized(_this); ///
|
|
218
|
+
contentChangeHandler(event, element);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
});
|
|
212
222
|
_this.plugin = plugin;
|
|
213
223
|
return _this;
|
|
214
224
|
}
|
|
@@ -226,23 +236,6 @@ var Yapp = /*#__PURE__*/ function(Element) {
|
|
|
226
236
|
return content;
|
|
227
237
|
}
|
|
228
238
|
},
|
|
229
|
-
{
|
|
230
|
-
key: "getInnerBounds",
|
|
231
|
-
value: function getInnerBounds(gutterWidth) {
|
|
232
|
-
var top, left, width = this.getWidth(), height = this.getHeight();
|
|
233
|
-
var paddingTop = this.getPaddingTop(), paddingLeft = this.getPaddingLeft(), paddingRight = this.getPaddingRight(), paddingBottom = this.getPaddingBottom(), borderTopWidth = this.getBorderTopWidth(), borderLeftWidth = this.getBorderLeftWidth(), borderRightWidth = this.getBorderRightWidth(), borderBottomWidth = this.getBorderBottomWidth();
|
|
234
|
-
top = paddingTop;
|
|
235
|
-
left = paddingLeft;
|
|
236
|
-
width -= borderLeftWidth + paddingLeft + paddingRight + borderRightWidth;
|
|
237
|
-
height -= borderTopWidth + paddingTop + paddingBottom + borderBottomWidth;
|
|
238
|
-
if (gutterWidth !== null) {
|
|
239
|
-
left += gutterWidth;
|
|
240
|
-
width -= gutterWidth;
|
|
241
|
-
}
|
|
242
|
-
var bounds = _easy.Bounds.fromTopLeftWidthAndHeight(top, left, width, height), innerBounds = bounds; ///
|
|
243
|
-
return innerBounds;
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
239
|
{
|
|
247
240
|
key: "getInitialLineCount",
|
|
248
241
|
value: function getInitialLineCount() {
|
|
@@ -274,71 +267,26 @@ var Yapp = /*#__PURE__*/ function(Element) {
|
|
|
274
267
|
this.plugin.setParser(parser);
|
|
275
268
|
}
|
|
276
269
|
},
|
|
277
|
-
{
|
|
278
|
-
key: "changeHandler",
|
|
279
|
-
value: function changeHandler(event, element) {
|
|
280
|
-
var richTextarea = element, contentChanged = richTextarea.hasContentChanged();
|
|
281
|
-
if (contentChanged) {
|
|
282
|
-
var onContentChange = this.properties.onContentChange, contentChangeHandler = onContentChange; ///
|
|
283
|
-
this.update();
|
|
284
|
-
element = this; ///
|
|
285
|
-
contentChangeHandler && contentChangeHandler(event, element); ///
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
},
|
|
289
|
-
{
|
|
290
|
-
key: "scrollHandler",
|
|
291
|
-
value: function scrollHandler(event, element) {
|
|
292
|
-
var richTextarea = element, scrollTop = richTextarea.getScrollTop(), scrollLeft = richTextarea.getScrollLeft();
|
|
293
|
-
this.scrollPrettyPrinter(scrollTop, scrollLeft);
|
|
294
|
-
}
|
|
295
|
-
},
|
|
296
270
|
{
|
|
297
271
|
key: "update",
|
|
298
272
|
value: function update() {
|
|
299
273
|
var content = this.getContent();
|
|
300
274
|
this.plugin.update(content);
|
|
301
|
-
var tokens = this.plugin.getTokens()
|
|
302
|
-
|
|
303
|
-
var innerBounds = this.getInnerBounds(gutterWidth), richTextareaBounds = innerBounds; ///
|
|
304
|
-
this.setRichTextareaBounds(richTextareaBounds);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
key: "resize",
|
|
310
|
-
value: function resize() {
|
|
311
|
-
var innerBounds, gutterWidth;
|
|
312
|
-
gutterWidth = null;
|
|
313
|
-
innerBounds = this.getInnerBounds(gutterWidth);
|
|
314
|
-
var prettyPrinterBounds = innerBounds; ///
|
|
315
|
-
this.setPrettyPrinterBounds(prettyPrinterBounds);
|
|
316
|
-
gutterWidth = this.resizePrettyPrinter();
|
|
317
|
-
innerBounds = this.getInnerBounds(gutterWidth);
|
|
318
|
-
var richTextareaBounds = innerBounds; ///
|
|
319
|
-
this.setRichTextareaBounds(richTextareaBounds);
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
{
|
|
323
|
-
key: "render",
|
|
324
|
-
value: function render() {
|
|
325
|
-
var lineHeight = this.getLineHeight(), paddingTop = this.getPaddingTop(), paddingBottom = this.getPaddingBottom(), borderTopWidth = this.getBorderTopWidth(), initialLineCount = this.getInitialLineCount(), borderBottomWidth = this.getBorderBottomWidth(), scrollbarThickness = this.getScrollbarThickness(), height = borderTopWidth + paddingTop + initialLineCount * lineHeight + paddingBottom + borderBottomWidth + scrollbarThickness;
|
|
326
|
-
this.setHeight(height);
|
|
327
|
-
this.resize();
|
|
328
|
-
this.update();
|
|
275
|
+
var tokens = this.plugin.getTokens();
|
|
276
|
+
this.updatePrettyPrinter(tokens);
|
|
329
277
|
}
|
|
330
278
|
},
|
|
331
279
|
{
|
|
332
280
|
key: "didMount",
|
|
333
281
|
value: function didMount() {
|
|
334
|
-
var _properties = this.properties, _firaCode = _properties.firaCode, firaCode = _firaCode === void 0 ? _defaults.DEFAULT_FIRA_CODE : _firaCode,
|
|
282
|
+
var _properties = this.properties, _firaCode = _properties.firaCode, firaCode = _firaCode === void 0 ? _defaults.DEFAULT_FIRA_CODE : _firaCode, _autoHeight = _properties.autoHeight, autoHeight = _autoHeight === void 0 ? _defaults.DEFAULT_AUTO_HEIGHT : _autoHeight;
|
|
335
283
|
if (firaCode) {
|
|
336
284
|
this.addClass("fira-code");
|
|
337
285
|
}
|
|
338
|
-
if (
|
|
339
|
-
|
|
286
|
+
if (autoHeight) {
|
|
287
|
+
var lineHeight = this.getLineHeight(), paddingTop = this.getPaddingTop(), paddingBottom = this.getPaddingBottom(), borderTopWidth = this.getBorderTopWidth(), initialLineCount = this.getInitialLineCount(), borderBottomWidth = this.getBorderBottomWidth(), scrollbarThickness = this.getScrollbarThickness(), height = borderTopWidth + paddingTop + initialLineCount * lineHeight + paddingBottom + borderBottomWidth + scrollbarThickness;
|
|
288
|
+
this.setHeight(height);
|
|
340
289
|
}
|
|
341
|
-
this.render();
|
|
342
290
|
}
|
|
343
291
|
},
|
|
344
292
|
{
|
|
@@ -353,34 +301,27 @@ var Yapp = /*#__PURE__*/ function(Element) {
|
|
|
353
301
|
{
|
|
354
302
|
key: "childElements",
|
|
355
303
|
value: function childElements() {
|
|
356
|
-
var _properties = this.properties, _hiddenGutter = _properties.hiddenGutter, hiddenGutter = _hiddenGutter === void 0 ? _defaults.DEFAULT_HIDDEN_GUTTER : _hiddenGutter, _hiddenScrollbars = _properties.hiddenScrollbars, hiddenScrollbars = _hiddenScrollbars === void 0 ? _defaults.DEFAULT_HIDDEN_SCROLLBARS : _hiddenScrollbars, _fancyScrollbars = _properties.fancyScrollbars, fancyScrollbars = _fancyScrollbars === void 0 ? _defaults.DEFAULT_FANCY_SCROLLBARS : _fancyScrollbars,
|
|
357
|
-
return
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
onScroll: scrollHandler,
|
|
365
|
-
hiddenScrollbars: hiddenScrollbars,
|
|
366
|
-
fancyScrollbars: fancyScrollbars,
|
|
367
|
-
active: true
|
|
368
|
-
})
|
|
369
|
-
];
|
|
304
|
+
var _properties = this.properties, _hiddenGutter = _properties.hiddenGutter, hiddenGutter = _hiddenGutter === void 0 ? _defaults.DEFAULT_HIDDEN_GUTTER : _hiddenGutter, _hiddenScrollbars = _properties.hiddenScrollbars, hiddenScrollbars = _hiddenScrollbars === void 0 ? _defaults.DEFAULT_HIDDEN_SCROLLBARS : _hiddenScrollbars, _fancyScrollbars = _properties.fancyScrollbars, fancyScrollbars = _fancyScrollbars === void 0 ? _defaults.DEFAULT_FANCY_SCROLLBARS : _fancyScrollbars, scrollbarThickness = this.getScrollbarThickness();
|
|
305
|
+
return /*#__PURE__*/ _easy.React.createElement(_prettyPrinter.default, {
|
|
306
|
+
onChange: this.changeHandler,
|
|
307
|
+
hiddenGutter: hiddenGutter,
|
|
308
|
+
fancyScrollbars: fancyScrollbars,
|
|
309
|
+
hiddenScrollbars: hiddenScrollbars,
|
|
310
|
+
scrollbarThickness: scrollbarThickness
|
|
311
|
+
});
|
|
370
312
|
}
|
|
371
313
|
},
|
|
372
314
|
{
|
|
373
315
|
key: "parentContext",
|
|
374
316
|
value: function parentContext() {
|
|
375
|
-
var getPlugin = this.getPlugin.bind(this), getContent = this.getContent.bind(this), updateYapp = this.update.bind(this),
|
|
317
|
+
var getPlugin = this.getPlugin.bind(this), getContent = this.getContent.bind(this), updateYapp = this.update.bind(this), setYappLexer = this.setLexer.bind(this), setYappWidth = this.setWidth.bind(this), setYappHeight = this.setHeight.bind(this), setYappParser = this.setParser.bind(this); ///
|
|
376
318
|
return {
|
|
377
319
|
getPlugin: getPlugin,
|
|
378
320
|
getContent: getContent,
|
|
379
321
|
updateYapp: updateYapp,
|
|
380
|
-
|
|
322
|
+
setYappLexer: setYappLexer,
|
|
381
323
|
setYappWidth: setYappWidth,
|
|
382
324
|
setYappHeight: setYappHeight,
|
|
383
|
-
setYappLexer: setYappLexer,
|
|
384
325
|
setYappParser: setYappParser
|
|
385
326
|
};
|
|
386
327
|
}
|
|
@@ -388,16 +329,12 @@ var Yapp = /*#__PURE__*/ function(Element) {
|
|
|
388
329
|
{
|
|
389
330
|
key: "initialise",
|
|
390
331
|
value: function initialise() {
|
|
391
|
-
var _this = this;
|
|
392
332
|
this.assignContext();
|
|
393
|
-
var _properties = this.properties, childElements = _properties.childElements, _editable = _properties.editable, editable = _editable === void 0 ? _defaults.DEFAULT_EDITABLE : _editable, language = this.plugin.getLanguage(), content = (0, _content.contentFromChildElements)(childElements), readOnly = !editable
|
|
333
|
+
var _properties = this.properties, childElements = _properties.childElements, _editable = _properties.editable, editable = _editable === void 0 ? _defaults.DEFAULT_EDITABLE : _editable, language = this.plugin.getLanguage(), content = (0, _content.contentFromChildElements)(childElements), readOnly = !editable;
|
|
394
334
|
this.setLanguage(language);
|
|
395
|
-
this.scrollPrettyPrinter(scrollTop, scrollLeft);
|
|
396
335
|
this.setRichTextareaContent(content);
|
|
397
336
|
this.setRichTextareaReadOnly(readOnly);
|
|
398
|
-
this.
|
|
399
|
-
return _this.resize();
|
|
400
|
-
});
|
|
337
|
+
this.update();
|
|
401
338
|
}
|
|
402
339
|
}
|
|
403
340
|
], [
|
|
@@ -427,12 +364,13 @@ _defineProperty(Yapp, "ignoredProperties", [
|
|
|
427
364
|
"language",
|
|
428
365
|
"firaCode",
|
|
429
366
|
"editable",
|
|
430
|
-
"
|
|
367
|
+
"autoHeight",
|
|
431
368
|
"hiddenGutter",
|
|
432
369
|
"noScrollbars",
|
|
433
|
-
"fancyScrollbars"
|
|
370
|
+
"fancyScrollbars",
|
|
371
|
+
"onContentChange"
|
|
434
372
|
]);
|
|
435
373
|
Object.assign(Yapp.prototype, _style.default);
|
|
436
374
|
var _default = (0, _easyWithStyle.default)(Yapp)(_templateObject(), _colour.colour, _colour.caretColour, _colour.borderColour, _colour.backgroundColour);
|
|
437
375
|
|
|
438
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy95YXBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBSZWFjdCwgQm91bmRzLCBFbGVtZW50IH0gZnJvbSBcImVhc3lcIjtcblxuaW1wb3J0IHN0eWxlTWl4aW5zIGZyb20gXCIuL21peGlucy9zdHlsZVwiO1xuaW1wb3J0IFJpY2hUZXh0YXJlYSBmcm9tIFwiLi9yaWNoVGV4dGFyZWFcIjtcbmltcG9ydCBQcmV0dHlQcmludGVyIGZyb20gXCIuL3ByZXR0eVByaW50ZXJcIjtcblxuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Njcm9sbGJhclRoaWNrbmVzc1wiO1xuaW1wb3J0IHsgcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BsdWdpblwiO1xuaW1wb3J0IHsgcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Byb3BlcnRpZXNcIjtcbmltcG9ydCB7IGxpbmVDb3VudEZyb21Db250ZW50LCBjb250ZW50RnJvbUNoaWxkRWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29sb3VyLCBjYXJldENvbG91ciwgYm9yZGVyQ29sb3VyLCBiYWNrZ3JvdW5kQ29sb3VyIH0gZnJvbSBcIi4vc2NoZW1lL2NvbG91clwiO1xuaW1wb3J0IHsgREVGQVVMVF9FRElUQUJMRSwgREVGQVVMVF9GSVJBX0NPREUsIERFRkFVTFRfREVGRVJfUkVOREVSLCBERUZBVUxUX0hJRERFTl9HVVRURVIsIERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMsIERFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyB9IGZyb20gXCIuL2RlZmF1bHRzXCI7XG5cbmNsYXNzIFlhcHAgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioc2VsZWN0b3IsIHBsdWdpbikge1xuICAgIHN1cGVyKHNlbGVjdG9yKTtcblxuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZ2V0UGx1Z2luKCkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbjtcbiAgfVxuXG4gIGdldENvbnRlbnQoKSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhQ29udGVudCA9IHRoaXMuZ2V0UmljaFRleHRhcmVhQ29udGVudCgpLFxuICAgICAgICAgIGNvbnRlbnQgPSByaWNoVGV4dGFyZWFDb250ZW50OyAgLy8vXG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSB7XG4gICAgbGV0IHRvcCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgd2lkdGggPSB0aGlzLmdldFdpZHRoKCksXG4gICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0KCk7XG5cbiAgICBjb25zdCBwYWRkaW5nVG9wID0gdGhpcy5nZXRQYWRkaW5nVG9wKCksXG4gICAgICAgICAgcGFkZGluZ0xlZnQgPSB0aGlzLmdldFBhZGRpbmdMZWZ0KCksXG4gICAgICAgICAgcGFkZGluZ1JpZ2h0ID0gdGhpcy5nZXRQYWRkaW5nUmlnaHQoKSxcbiAgICAgICAgICBwYWRkaW5nQm90dG9tID0gdGhpcy5nZXRQYWRkaW5nQm90dG9tKCksXG4gICAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlclRvcFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyTGVmdFdpZHRoID0gdGhpcy5nZXRCb3JkZXJMZWZ0V2lkdGgoKSxcbiAgICAgICAgICBib3JkZXJSaWdodFdpZHRoID0gdGhpcy5nZXRCb3JkZXJSaWdodFdpZHRoKCksXG4gICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlckJvdHRvbVdpZHRoKCk7XG5cbiAgICB0b3AgPSBwYWRkaW5nVG9wO1xuICAgIGxlZnQgPSBwYWRkaW5nTGVmdDtcblxuICAgIHdpZHRoIC09ICggYm9yZGVyTGVmdFdpZHRoICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodFdpZHRoICk7XG4gICAgaGVpZ2h0IC09ICggYm9yZGVyVG9wV2lkdGggKyBwYWRkaW5nVG9wICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbVdpZHRoICk7XG5cbiAgICBpZiAoZ3V0dGVyV2lkdGggIT09IG51bGwpIHtcbiAgICAgIGxlZnQgKz0gZ3V0dGVyV2lkdGg7XG4gICAgICB3aWR0aCAtPSBndXR0ZXJXaWR0aDtcbiAgICB9XG5cbiAgICBjb25zdCBib3VuZHMgPSBCb3VuZHMuZnJvbVRvcExlZnRXaWR0aEFuZEhlaWdodCh0b3AsIGxlZnQsIHdpZHRoLCBoZWlnaHQpLFxuICAgICAgICAgIGlubmVyQm91bmRzID0gYm91bmRzOyAvLy9cblxuICAgIHJldHVybiBpbm5lckJvdW5kcztcbiAgfVxuXG4gIGdldEluaXRpYWxMaW5lQ291bnQoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGxpbmVDb3VudCA9IGxpbmVDb3VudEZyb21Db250ZW50KGNvbnRlbnQpLFxuICAgICAgICAgIGluaXRpYWxMaW5lQ291bnQgPSBsaW5lQ291bnQ7IC8vL1xuXG4gICAgcmV0dXJuIGluaXRpYWxMaW5lQ291bnQ7XG4gIH1cblxuICBnZXRTY3JvbGxiYXJUaGlja25lc3MoKSB7XG4gICAgbGV0IHNjcm9sbGJhclRoaWNrbmVzcyA9IDA7XG5cbiAgICBjb25zdCB7IGhpZGRlblNjcm9sbGJhcnMgPSBERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICBpZiAoIWhpZGRlblNjcm9sbGJhcnMpIHtcbiAgICAgIGNvbnN0IHsgZmFuY3lTY3JvbGxiYXJzID0gREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXM7XG5cbiAgICAgIHNjcm9sbGJhclRoaWNrbmVzcyA9IGdldFNjcm9sbGJhclRoaWNrbmVzcyhmYW5jeVNjcm9sbGJhcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzY3JvbGxiYXJUaGlja25lc3M7XG4gIH1cblxuICBzZXRMZXhlcihsZXhlcikgeyB0aGlzLnBsdWdpbi5zZXRMZXhlcihsZXhlcik7IH1cblxuICBzZXRQYXJzZXIocGFyc2VyKSB7IHRoaXMucGx1Z2luLnNldFBhcnNlcihwYXJzZXIpOyB9XG5cbiAgY2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICAgIGNvbnN0IHJpY2hUZXh0YXJlYSA9IGVsZW1lbnQsIC8vL1xuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gcmljaFRleHRhcmVhLmhhc0NvbnRlbnRDaGFuZ2VkKCk7XG5cbiAgICBpZiAoY29udGVudENoYW5nZWQpIHtcbiAgICAgIGNvbnN0IHsgb25Db250ZW50Q2hhbmdlIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBjb250ZW50Q2hhbmdlSGFuZGxlciA9IG9uQ29udGVudENoYW5nZTsgLy8vXG5cbiAgICAgIHRoaXMudXBkYXRlKCk7XG5cbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cblxuICAgICAgY29udGVudENoYW5nZUhhbmRsZXIgJiYgY29udGVudENoYW5nZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpOyAvLy9cbiAgICB9XG4gIH1cblxuICBzY3JvbGxIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgc2Nyb2xsVG9wID0gcmljaFRleHRhcmVhLmdldFNjcm9sbFRvcCgpLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSByaWNoVGV4dGFyZWEuZ2V0U2Nyb2xsTGVmdCgpO1xuXG4gICAgdGhpcy5zY3JvbGxQcmV0dHlQcmludGVyKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCk7XG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXG4gICAgdGhpcy5wbHVnaW4udXBkYXRlKGNvbnRlbnQpO1xuXG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy5wbHVnaW4uZ2V0VG9rZW5zKCksXG4gICAgICAgICAgZ3V0dGVyV2lkdGggPSB0aGlzLnVwZGF0ZVByZXR0eVByaW50ZXIodG9rZW5zKTtcblxuICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgaW5uZXJCb3VuZHMgPSB0aGlzLmdldElubmVyQm91bmRzKGd1dHRlcldpZHRoKSxcbiAgICAgICAgICAgIHJpY2hUZXh0YXJlYUJvdW5kcyA9IGlubmVyQm91bmRzOyAvLy9cblxuICAgICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFCb3VuZHMocmljaFRleHRhcmVhQm91bmRzKTtcbiAgICB9XG4gIH1cblxuICByZXNpemUoKSB7XG4gICAgbGV0IGlubmVyQm91bmRzLFxuICAgICAgICBndXR0ZXJXaWR0aDtcblxuICAgIGd1dHRlcldpZHRoID0gbnVsbDtcblxuICAgIGlubmVyQm91bmRzID0gdGhpcy5nZXRJbm5lckJvdW5kcyhndXR0ZXJXaWR0aCk7XG5cbiAgICBjb25zdCBwcmV0dHlQcmludGVyQm91bmRzID0gaW5uZXJCb3VuZHM7ICAvLy9cblxuICAgIHRoaXMuc2V0UHJldHR5UHJpbnRlckJvdW5kcyhwcmV0dHlQcmludGVyQm91bmRzKTtcblxuICAgIGd1dHRlcldpZHRoID0gdGhpcy5yZXNpemVQcmV0dHlQcmludGVyKCk7XG5cbiAgICBpbm5lckJvdW5kcyA9IHRoaXMuZ2V0SW5uZXJCb3VuZHMoZ3V0dGVyV2lkdGgpO1xuXG4gICAgY29uc3QgcmljaFRleHRhcmVhQm91bmRzID0gaW5uZXJCb3VuZHM7IC8vL1xuXG4gICAgdGhpcy5zZXRSaWNoVGV4dGFyZWFCb3VuZHMocmljaFRleHRhcmVhQm91bmRzKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdGhpcy5nZXRMaW5lSGVpZ2h0KCksXG4gICAgICAgICAgcGFkZGluZ1RvcCA9IHRoaXMuZ2V0UGFkZGluZ1RvcCgpLFxuICAgICAgICAgIHBhZGRpbmdCb3R0b20gPSB0aGlzLmdldFBhZGRpbmdCb3R0b20oKSxcbiAgICAgICAgICBib3JkZXJUb3BXaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyVG9wV2lkdGgoKSxcbiAgICAgICAgICBpbml0aWFsTGluZUNvdW50ID0gdGhpcy5nZXRJbml0aWFsTGluZUNvdW50KCksXG4gICAgICAgICAgYm9yZGVyQm90dG9tV2lkdGggPSB0aGlzLmdldEJvcmRlckJvdHRvbVdpZHRoKCksXG4gICAgICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5nZXRTY3JvbGxiYXJUaGlja25lc3MoKSxcbiAgICAgICAgICBoZWlnaHQgPSBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3AgKyBpbml0aWFsTGluZUNvdW50ICogbGluZUhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b21XaWR0aCArIHNjcm9sbGJhclRoaWNrbmVzcztcblxuICAgIHRoaXMuc2V0SGVpZ2h0KGhlaWdodCk7XG5cbiAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZmlyYUNvZGUgPSBERUZBVUxUX0ZJUkFfQ09ERSwgZGVmZXJSZW5kZXIgPSBERUZBVUxUX0RFRkVSX1JFTkRFUiB9ID0gdGhpcy5wcm9wZXJ0aWVzO1xuXG4gICAgaWYgKGZpcmFDb2RlKSB7XG4gICAgICB0aGlzLmFkZENsYXNzKFwiZmlyYS1jb2RlXCIpO1xuICAgIH1cblxuICAgIGlmIChkZWZlclJlbmRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IGZpcmFDb2RlID0gREVGQVVMVF9GSVJBX0NPREUgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmIChmaXJhQ29kZSkge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImZpcmEtY29kZVwiKTtcbiAgICB9XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgaGlkZGVuR3V0dGVyID0gREVGQVVMVF9ISURERU5fR1VUVEVSLCBoaWRkZW5TY3JvbGxiYXJzID0gREVGQVVMVF9ISURERU5fU0NST0xMQkFSUywgZmFuY3lTY3JvbGxiYXJzID0gREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IHRoaXMuY2hhbmdlSGFuZGxlci5iaW5kKHRoaXMpLFxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSB0aGlzLnNjcm9sbEhhbmRsZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICBzY3JvbGxiYXJUaGlja25lc3MgPSB0aGlzLmdldFNjcm9sbGJhclRoaWNrbmVzcygpO1xuXG4gICAgcmV0dXJuIChbXG5cbiAgICAgIDxQcmV0dHlQcmludGVyIGhpZGRlbkd1dHRlcj17aGlkZGVuR3V0dGVyfSBzY3JvbGxiYXJUaGlja25lc3M9e3Njcm9sbGJhclRoaWNrbmVzc30gLz4sXG4gICAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfSBvblNjcm9sbD17c2Nyb2xsSGFuZGxlcn0gaGlkZGVuU2Nyb2xsYmFycz17aGlkZGVuU2Nyb2xsYmFyc30gZmFuY3lTY3JvbGxiYXJzPXtmYW5jeVNjcm9sbGJhcnN9IGFjdGl2ZSAvPlxuXG4gICAgXSk7XG4gIH1cblxuICBwYXJlbnRDb250ZXh0KCkge1xuICAgIGNvbnN0IGdldFBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luLmJpbmQodGhpcyksXG4gICAgICAgICAgZ2V0Q29udGVudCA9IHRoaXMuZ2V0Q29udGVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIHVwZGF0ZVlhcHAgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpLCAgLy8vXG4gICAgICAgICAgcmVzaXplWWFwcCA9IHRoaXMucmVzaXplLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwV2lkdGggPSB0aGlzLnNldFdpZHRoLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwSGVpZ2h0ID0gdGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBMZXhlciA9IHRoaXMuc2V0TGV4ZXIuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBQYXJzZXIgPSB0aGlzLnNldFBhcnNlci5iaW5kKHRoaXMpOyAgLy8vXG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFBsdWdpbixcbiAgICAgIGdldENvbnRlbnQsXG4gICAgICB1cGRhdGVZYXBwLFxuICAgICAgcmVzaXplWWFwcCxcbiAgICAgIHNldFlhcHBXaWR0aCxcbiAgICAgIHNldFlhcHBIZWlnaHQsXG4gICAgICBzZXRZYXBwTGV4ZXIsXG4gICAgICBzZXRZYXBwUGFyc2VyXG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXNlKCkge1xuICAgIHRoaXMuYXNzaWduQ29udGV4dCgpO1xuXG4gICAgY29uc3QgeyBjaGlsZEVsZW1lbnRzLCBlZGl0YWJsZSA9IERFRkFVTFRfRURJVEFCTEUgfSA9IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBsYW5ndWFnZSA9IHRoaXMucGx1Z2luLmdldExhbmd1YWdlKCksXG4gICAgICAgICAgY29udGVudCA9IGNvbnRlbnRGcm9tQ2hpbGRFbGVtZW50cyhjaGlsZEVsZW1lbnRzKSxcbiAgICAgICAgICByZWFkT25seSA9ICFlZGl0YWJsZSxcbiAgICAgICAgICBzY3JvbGxUb3AgPSAwLCAgLy8vXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IDA7IC8vL1xuXG4gICAgdGhpcy5zZXRMYW5ndWFnZShsYW5ndWFnZSk7XG5cbiAgICB0aGlzLnNjcm9sbFByZXR0eVByaW50ZXIoc2Nyb2xsVG9wLCBzY3JvbGxMZWZ0KTtcblxuICAgIHRoaXMuc2V0UmljaFRleHRhcmVhQ29udGVudChjb250ZW50KTtcblxuICAgIHRoaXMuc2V0UmljaFRleHRhcmVhUmVhZE9ubHkocmVhZE9ubHkpO1xuXG4gICAgdGhpcy5vblJlc2l6ZSgoZXZlbnQsIGVsZW1lbnQpID0+IHRoaXMucmVzaXplKCkpO1xuICB9XG5cbiAgc3RhdGljIHRhZ05hbWUgPSBcImRpdlwiO1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcbiAgICBjbGFzc05hbWU6IFwieWFwcFwiXG4gIH07XG5cbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xuICAgIFwiUGx1Z2luXCIsXG4gICAgXCJsYW5ndWFnZVwiLFxuICAgIFwiZmlyYUNvZGVcIixcbiAgICBcImVkaXRhYmxlXCIsXG4gICAgXCJkZWZlclJlbmRlclwiLFxuICAgIFwiaGlkZGVuR3V0dGVyXCIsXG4gICAgXCJub1Njcm9sbGJhcnNcIixcbiAgICBcImZhbmN5U2Nyb2xsYmFyc1wiXG4gIF07XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQsIGxhbmd1YWdlLCBQbHVnaW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBDbGFzcyA9IFlhcHAsXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tQ29udGVudExhbmd1YWdlUGx1Z2luQW5kT3B0aW9ucyhjb250ZW50LCBsYW5ndWFnZSwgUGx1Z2luLCBvcHRpb25zKSxcbiAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4obGFuZ3VhZ2UsIFBsdWdpbiksXG4gICAgICAgICAgeWFwcCA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBwbHVnaW4pO1xuXG4gICAgcmV0dXJuIHlhcHA7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBsYW5ndWFnZSwgUGx1Z2luIH0gPSBwcm9wZXJ0aWVzLFxuICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbihsYW5ndWFnZSwgUGx1Z2luKSxcbiAgICAgICAgICB5YXBwID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIHBsdWdpbik7XG5cbiAgICByZXR1cm4geWFwcDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFlhcHAucHJvdG90eXBlLCBzdHlsZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShZYXBwKWBcblxuICB3aWR0aDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBcbiAgY29sb3I6ICR7Y29sb3VyfTtcbiAgY2FyZXQtY29sb3I6ICR7Y2FyZXRDb2xvdXJ9O1xuICBib3JkZXItY29sb3I6ICR7Ym9yZGVyQ29sb3VyfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtiYWNrZ3JvdW5kQ29sb3VyfTtcblxuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LWZhbWlseTogXCJNZW5sb1wiLCBcIkx1Y2lkYSBTYW5zIFR5cGV3cml0ZXJcIiwgbW9ub3NwYWNlO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IG5vcm1hbDtcblxuICAuZmlyYS1jb2RlIHtcblxuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJjYWx0XCIgMTtcbiAgICBcbiAgfVxuXG5gO1xuIl0sIm5hbWVzIjpbIllhcHAiLCJzZWxlY3RvciIsInBsdWdpbiIsImdldFBsdWdpbiIsImdldENvbnRlbnQiLCJyaWNoVGV4dGFyZWFDb250ZW50IiwiZ2V0UmljaFRleHRhcmVhQ29udGVudCIsImNvbnRlbnQiLCJnZXRJbm5lckJvdW5kcyIsImd1dHRlcldpZHRoIiwidG9wIiwibGVmdCIsIndpZHRoIiwiZ2V0V2lkdGgiLCJoZWlnaHQiLCJnZXRIZWlnaHQiLCJwYWRkaW5nVG9wIiwiZ2V0UGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwiZ2V0UGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJnZXRQYWRkaW5nUmlnaHQiLCJwYWRkaW5nQm90dG9tIiwiZ2V0UGFkZGluZ0JvdHRvbSIsImJvcmRlclRvcFdpZHRoIiwiZ2V0Qm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJnZXRCb3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiZ2V0Qm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiZ2V0Qm9yZGVyQm90dG9tV2lkdGgiLCJib3VuZHMiLCJCb3VuZHMiLCJmcm9tVG9wTGVmdFdpZHRoQW5kSGVpZ2h0IiwiaW5uZXJCb3VuZHMiLCJnZXRJbml0aWFsTGluZUNvdW50IiwibGluZUNvdW50IiwibGluZUNvdW50RnJvbUNvbnRlbnQiLCJpbml0aWFsTGluZUNvdW50IiwiZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIiwic2Nyb2xsYmFyVGhpY2tuZXNzIiwicHJvcGVydGllcyIsImhpZGRlblNjcm9sbGJhcnMiLCJERUZBVUxUX0hJRERFTl9TQ1JPTExCQVJTIiwiZmFuY3lTY3JvbGxiYXJzIiwiREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIiwic2V0TGV4ZXIiLCJsZXhlciIsInNldFBhcnNlciIsInBhcnNlciIsImNoYW5nZUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJyaWNoVGV4dGFyZWEiLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwib25Db250ZW50Q2hhbmdlIiwiY29udGVudENoYW5nZUhhbmRsZXIiLCJ1cGRhdGUiLCJzY3JvbGxIYW5kbGVyIiwic2Nyb2xsVG9wIiwiZ2V0U2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsImdldFNjcm9sbExlZnQiLCJzY3JvbGxQcmV0dHlQcmludGVyIiwidG9rZW5zIiwiZ2V0VG9rZW5zIiwidXBkYXRlUHJldHR5UHJpbnRlciIsInJpY2hUZXh0YXJlYUJvdW5kcyIsInNldFJpY2hUZXh0YXJlYUJvdW5kcyIsInJlc2l6ZSIsInByZXR0eVByaW50ZXJCb3VuZHMiLCJzZXRQcmV0dHlQcmludGVyQm91bmRzIiwicmVzaXplUHJldHR5UHJpbnRlciIsInJlbmRlciIsImxpbmVIZWlnaHQiLCJnZXRMaW5lSGVpZ2h0Iiwic2V0SGVpZ2h0IiwiZGlkTW91bnQiLCJmaXJhQ29kZSIsIkRFRkFVTFRfRklSQV9DT0RFIiwiZGVmZXJSZW5kZXIiLCJERUZBVUxUX0RFRkVSX1JFTkRFUiIsImFkZENsYXNzIiwid2lsbFVubW91bnQiLCJyZW1vdmVDbGFzcyIsImNoaWxkRWxlbWVudHMiLCJoaWRkZW5HdXR0ZXIiLCJERUZBVUxUX0hJRERFTl9HVVRURVIiLCJiaW5kIiwiUHJldHR5UHJpbnRlciIsIlJpY2hUZXh0YXJlYSIsIm9uQ2hhbmdlIiwib25TY3JvbGwiLCJhY3RpdmUiLCJwYXJlbnRDb250ZXh0IiwidXBkYXRlWWFwcCIsInJlc2l6ZVlhcHAiLCJzZXRZYXBwV2lkdGgiLCJzZXRXaWR0aCIsInNldFlhcHBIZWlnaHQiLCJzZXRZYXBwTGV4ZXIiLCJzZXRZYXBwUGFyc2VyIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJlZGl0YWJsZSIsIkRFRkFVTFRfRURJVEFCTEUiLCJsYW5ndWFnZSIsImdldExhbmd1YWdlIiwiY29udGVudEZyb21DaGlsZEVsZW1lbnRzIiwicmVhZE9ubHkiLCJzZXRMYW5ndWFnZSIsInNldFJpY2hUZXh0YXJlYUNvbnRlbnQiLCJzZXRSaWNoVGV4dGFyZWFSZWFkT25seSIsIm9uUmVzaXplIiwiZnJvbUNvbnRlbnQiLCJQbHVnaW4iLCJvcHRpb25zIiwiQ2xhc3MiLCJwcm9wZXJ0aWVzRnJvbUNvbnRlbnRMYW5ndWFnZVBsdWdpbkFuZE9wdGlvbnMiLCJwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4iLCJ5YXBwIiwiRWxlbWVudCIsImZyb21DbGFzcyIsInRhZ05hbWUiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiT2JqZWN0IiwiYXNzaWduIiwicHJvdG90eXBlIiwic3R5bGVNaXhpbnMiLCJ3aXRoU3R5bGUiLCJjb2xvdXIiLCJjYXJldENvbG91ciIsImJvcmRlckNvbG91ciIsImJhY2tncm91bmRDb2xvdXIiXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7OzsrQkErUmIsU0E2QkU7OztlQTdCRixRQTZCRTs7O2tFQTFUb0IsaUJBQWlCO29CQUVBLE1BQU07MERBRXJCLGdCQUFnQjtpRUFDZixnQkFBZ0I7a0VBQ2YsaUJBQWlCO2tDQUVMLGdDQUFnQztzQkFDMUIsb0JBQW9COzBCQUNGLHdCQUF3Qjt1QkFDdkIscUJBQXFCO3NCQUNoQixpQkFBaUI7d0JBQ2lFLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEssSUFBQSxBQUFNQSxJQUFJLGlCQTRRUCxBQTVRSDs7O2FBQU1BLElBQUksQ0FDSUMsUUFBUSxFQUFFQyxNQUFNOzs7a0NBQ3BCRCxRQUFRLEVBQUU7UUFFaEIsTUFBS0MsTUFBTSxHQUFHQSxNQUFNLENBQUM7Ozs7O1lBR3ZCQyxHQUFTLEVBQVRBLFdBQVM7bUJBQVRBLFNBQUFBLFNBQVMsR0FBRztnQkFDVixPQUFPLElBQUks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
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy95YXBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgd2l0aFN0eWxlIGZyb20gXCJlYXN5LXdpdGgtc3R5bGVcIjsgIC8vL1xuXG5pbXBvcnQgeyBSZWFjdCwgRWxlbWVudCB9IGZyb20gXCJlYXN5XCI7XG5cbmltcG9ydCBzdHlsZU1peGlucyBmcm9tIFwiLi9taXhpbnMvc3R5bGVcIjtcbmltcG9ydCBQcmV0dHlQcmludGVyIGZyb20gXCIuL3ByZXR0eVByaW50ZXJcIjtcblxuaW1wb3J0IHsgZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Njcm9sbGJhclRoaWNrbmVzc1wiO1xuaW1wb3J0IHsgcGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3BsdWdpblwiO1xuaW1wb3J0IHsgcHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3Byb3BlcnRpZXNcIjtcbmltcG9ydCB7IGxpbmVDb3VudEZyb21Db250ZW50LCBjb250ZW50RnJvbUNoaWxkRWxlbWVudHMgfSBmcm9tIFwiLi91dGlsaXRpZXMvY29udGVudFwiO1xuaW1wb3J0IHsgY29sb3VyLCBjYXJldENvbG91ciwgYm9yZGVyQ29sb3VyLCBiYWNrZ3JvdW5kQ29sb3VyIH0gZnJvbSBcIi4vc2NoZW1lL2NvbG91clwiO1xuaW1wb3J0IHsgREVGQVVMVF9FRElUQUJMRSwgREVGQVVMVF9GSVJBX0NPREUsIERFRkFVTFRfQVVUT19IRUlHSFQsIERFRkFVTFRfSElEREVOX0dVVFRFUiwgREVGQVVMVF9ISURERU5fU0NST0xMQkFSUywgREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gZnJvbSBcIi4vZGVmYXVsdHNcIjtcblxuY2xhc3MgWWFwcCBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgcGx1Z2luKSB7XG4gICAgc3VwZXIoc2VsZWN0b3IpO1xuXG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gIH1cblxuICBjaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcmljaFRleHRhcmVhID0gZWxlbWVudCwgLy8vXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSByaWNoVGV4dGFyZWEuaGFzQ29udGVudENoYW5nZWQoKTtcblxuICAgIGlmIChjb250ZW50Q2hhbmdlZCkge1xuICAgICAgY29uc3QgeyBvbkNvbnRlbnRDaGFuZ2UgPSBudWxsIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgICBjb250ZW50Q2hhbmdlSGFuZGxlciA9IG9uQ29udGVudENoYW5nZTsgIC8vL1xuXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgICBpZiAoY29udGVudENoYW5nZUhhbmRsZXIpIHtcbiAgICAgICAgZWxlbWVudCA9IHRoaXM7IC8vL1xuXG4gICAgICAgIGNvbnRlbnRDaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRQbHVnaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luO1xuICB9XG5cbiAgZ2V0Q29udGVudCgpIHtcbiAgICBjb25zdCByaWNoVGV4dGFyZWFDb250ZW50ID0gdGhpcy5nZXRSaWNoVGV4dGFyZWFDb250ZW50KCksXG4gICAgICAgICAgY29udGVudCA9IHJpY2hUZXh0YXJlYUNvbnRlbnQ7ICAvLy9cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgZ2V0SW5pdGlhbExpbmVDb3VudCgpIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgbGluZUNvdW50ID0gbGluZUNvdW50RnJvbUNvbnRlbnQoY29udGVudCksXG4gICAgICAgICAgaW5pdGlhbExpbmVDb3VudCA9IGxpbmVDb3VudDsgLy8vXG5cbiAgICByZXR1cm4gaW5pdGlhbExpbmVDb3VudDtcbiAgfVxuXG4gIGdldFNjcm9sbGJhclRoaWNrbmVzcygpIHtcbiAgICBsZXQgc2Nyb2xsYmFyVGhpY2tuZXNzID0gMDtcblxuICAgIGNvbnN0IHsgaGlkZGVuU2Nyb2xsYmFycyA9IERFRkFVTFRfSElEREVOX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmICghaGlkZGVuU2Nyb2xsYmFycykge1xuICAgICAgY29uc3QgeyBmYW5jeVNjcm9sbGJhcnMgPSBERUZBVUxUX0ZBTkNZX1NDUk9MTEJBUlMgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKGZhbmN5U2Nyb2xsYmFycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjcm9sbGJhclRoaWNrbmVzcztcbiAgfVxuXG4gIHNldExleGVyKGxleGVyKSB7IHRoaXMucGx1Z2luLnNldExleGVyKGxleGVyKTsgfVxuXG4gIHNldFBhcnNlcihwYXJzZXIpIHsgdGhpcy5wbHVnaW4uc2V0UGFyc2VyKHBhcnNlcik7IH1cblxuICB1cGRhdGUoKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXG4gICAgdGhpcy5wbHVnaW4udXBkYXRlKGNvbnRlbnQpO1xuXG4gICAgY29uc3QgdG9rZW5zID0gdGhpcy5wbHVnaW4uZ2V0VG9rZW5zKCk7XG5cbiAgICB0aGlzLnVwZGF0ZVByZXR0eVByaW50ZXIodG9rZW5zKTtcbiAgfVxuXG4gIGRpZE1vdW50KCkge1xuICAgIGNvbnN0IHsgZmlyYUNvZGUgPSBERUZBVUxUX0ZJUkFfQ09ERSwgYXV0b0hlaWdodCA9IERFRkFVTFRfQVVUT19IRUlHSFQgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmIChmaXJhQ29kZSkge1xuICAgICAgdGhpcy5hZGRDbGFzcyhcImZpcmEtY29kZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoYXV0b0hlaWdodCkge1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRoaXMuZ2V0TGluZUhlaWdodCgpLFxuICAgICAgICAgICAgcGFkZGluZ1RvcCA9IHRoaXMuZ2V0UGFkZGluZ1RvcCgpLFxuICAgICAgICAgICAgcGFkZGluZ0JvdHRvbSA9IHRoaXMuZ2V0UGFkZGluZ0JvdHRvbSgpLFxuICAgICAgICAgICAgYm9yZGVyVG9wV2lkdGggPSB0aGlzLmdldEJvcmRlclRvcFdpZHRoKCksXG4gICAgICAgICAgICBpbml0aWFsTGluZUNvdW50ID0gdGhpcy5nZXRJbml0aWFsTGluZUNvdW50KCksXG4gICAgICAgICAgICBib3JkZXJCb3R0b21XaWR0aCA9IHRoaXMuZ2V0Qm9yZGVyQm90dG9tV2lkdGgoKSxcbiAgICAgICAgICAgIHNjcm9sbGJhclRoaWNrbmVzcyA9IHRoaXMuZ2V0U2Nyb2xsYmFyVGhpY2tuZXNzKCksXG4gICAgICAgICAgICBoZWlnaHQgPSBib3JkZXJUb3BXaWR0aCArIHBhZGRpbmdUb3AgKyBpbml0aWFsTGluZUNvdW50ICogbGluZUhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b21XaWR0aCArIHNjcm9sbGJhclRoaWNrbmVzcztcblxuICAgICAgdGhpcy5zZXRIZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICB3aWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IGZpcmFDb2RlID0gREVGQVVMVF9GSVJBX0NPREUgfSA9IHRoaXMucHJvcGVydGllcztcblxuICAgIGlmIChmaXJhQ29kZSkge1xuICAgICAgdGhpcy5yZW1vdmVDbGFzcyhcImZpcmEtY29kZVwiKTtcbiAgICB9XG4gIH1cblxuICBjaGlsZEVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHsgaGlkZGVuR3V0dGVyID0gREVGQVVMVF9ISURERU5fR1VUVEVSLCBoaWRkZW5TY3JvbGxiYXJzID0gREVGQVVMVF9ISURERU5fU0NST0xMQkFSUywgZmFuY3lTY3JvbGxiYXJzID0gREVGQVVMVF9GQU5DWV9TQ1JPTExCQVJTIH0gPSB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgc2Nyb2xsYmFyVGhpY2tuZXNzID0gdGhpcy5nZXRTY3JvbGxiYXJUaGlja25lc3MoKTtcblxuICAgIHJldHVybiAoXG5cbiAgICAgIDxQcmV0dHlQcmludGVyIG9uQ2hhbmdlPXt0aGlzLmNoYW5nZUhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICAgICBoaWRkZW5HdXR0ZXI9e2hpZGRlbkd1dHRlcn1cbiAgICAgICAgICAgICAgICAgICAgIGZhbmN5U2Nyb2xsYmFycz17ZmFuY3lTY3JvbGxiYXJzfVxuICAgICAgICAgICAgICAgICAgICAgaGlkZGVuU2Nyb2xsYmFycz17aGlkZGVuU2Nyb2xsYmFyc31cbiAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhclRoaWNrbmVzcz17c2Nyb2xsYmFyVGhpY2tuZXNzfSAvPlxuXG4gICAgKTtcbiAgfVxuXG4gIHBhcmVudENvbnRleHQoKSB7XG4gICAgY29uc3QgZ2V0UGx1Z2luID0gdGhpcy5nZXRQbHVnaW4uYmluZCh0aGlzKSxcbiAgICAgICAgICBnZXRDb250ZW50ID0gdGhpcy5nZXRDb250ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgdXBkYXRlWWFwcCA9IHRoaXMudXBkYXRlLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwTGV4ZXIgPSB0aGlzLnNldExleGVyLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwV2lkdGggPSB0aGlzLnNldFdpZHRoLmJpbmQodGhpcyksICAvLy9cbiAgICAgICAgICBzZXRZYXBwSGVpZ2h0ID0gdGhpcy5zZXRIZWlnaHQuYmluZCh0aGlzKSwgIC8vL1xuICAgICAgICAgIHNldFlhcHBQYXJzZXIgPSB0aGlzLnNldFBhcnNlci5iaW5kKHRoaXMpOyAgLy8vXG5cbiAgICByZXR1cm4gKHtcbiAgICAgIGdldFBsdWdpbixcbiAgICAgIGdldENvbnRlbnQsXG4gICAgICB1cGRhdGVZYXBwLFxuICAgICAgc2V0WWFwcExleGVyLFxuICAgICAgc2V0WWFwcFdpZHRoLFxuICAgICAgc2V0WWFwcEhlaWdodCxcbiAgICAgIHNldFlhcHBQYXJzZXJcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpc2UoKSB7XG4gICAgdGhpcy5hc3NpZ25Db250ZXh0KCk7XG5cbiAgICBjb25zdCB7IGNoaWxkRWxlbWVudHMsIGVkaXRhYmxlID0gREVGQVVMVF9FRElUQUJMRSB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxuICAgICAgICAgIGxhbmd1YWdlID0gdGhpcy5wbHVnaW4uZ2V0TGFuZ3VhZ2UoKSxcbiAgICAgICAgICBjb250ZW50ID0gY29udGVudEZyb21DaGlsZEVsZW1lbnRzKGNoaWxkRWxlbWVudHMpLFxuICAgICAgICAgIHJlYWRPbmx5ID0gIWVkaXRhYmxlO1xuXG4gICAgdGhpcy5zZXRMYW5ndWFnZShsYW5ndWFnZSk7XG5cbiAgICB0aGlzLnNldFJpY2hUZXh0YXJlYUNvbnRlbnQoY29udGVudCk7XG5cbiAgICB0aGlzLnNldFJpY2hUZXh0YXJlYVJlYWRPbmx5KHJlYWRPbmx5KTtcblxuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBzdGF0aWMgdGFnTmFtZSA9IFwiZGl2XCI7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJ5YXBwXCJcbiAgfTtcblxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXG4gICAgXCJQbHVnaW5cIixcbiAgICBcImxhbmd1YWdlXCIsXG4gICAgXCJmaXJhQ29kZVwiLFxuICAgIFwiZWRpdGFibGVcIixcbiAgICBcImF1dG9IZWlnaHRcIixcbiAgICBcImhpZGRlbkd1dHRlclwiLFxuICAgIFwibm9TY3JvbGxiYXJzXCIsXG4gICAgXCJmYW5jeVNjcm9sbGJhcnNcIixcbiAgICBcIm9uQ29udGVudENoYW5nZVwiXG4gIF07XG5cbiAgc3RhdGljIGZyb21Db250ZW50KGNvbnRlbnQsIGxhbmd1YWdlLCBQbHVnaW4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBDbGFzcyA9IFlhcHAsXG4gICAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXNGcm9tQ29udGVudExhbmd1YWdlUGx1Z2luQW5kT3B0aW9ucyhjb250ZW50LCBsYW5ndWFnZSwgUGx1Z2luLCBvcHRpb25zKSxcbiAgICAgICAgICBwbHVnaW4gPSBwbHVnaW5Gcm9tTGFuZ3VhZ2VBbmRQbHVnaW4obGFuZ3VhZ2UsIFBsdWdpbiksXG4gICAgICAgICAgeWFwcCA9IEVsZW1lbnQuZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzLCBwbHVnaW4pO1xuXG4gICAgcmV0dXJuIHlhcHA7XG4gIH1cblxuICBzdGF0aWMgZnJvbUNsYXNzKENsYXNzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgeyBsYW5ndWFnZSwgUGx1Z2luIH0gPSBwcm9wZXJ0aWVzLFxuICAgICAgICAgIHBsdWdpbiA9IHBsdWdpbkZyb21MYW5ndWFnZUFuZFBsdWdpbihsYW5ndWFnZSwgUGx1Z2luKSxcbiAgICAgICAgICB5YXBwID0gRWxlbWVudC5mcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIHBsdWdpbik7XG5cbiAgICByZXR1cm4geWFwcDtcbiAgfVxufVxuXG5PYmplY3QuYXNzaWduKFlhcHAucHJvdG90eXBlLCBzdHlsZU1peGlucyk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZShZYXBwKWBcblxuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuXG4gIGJvcmRlcjogMXB4IHNvbGlkO1xuICBcbiAgY29sb3I6ICR7Y29sb3VyfTtcbiAgY2FyZXQtY29sb3I6ICR7Y2FyZXRDb2xvdXJ9O1xuICBib3JkZXItY29sb3I6ICR7Ym9yZGVyQ29sb3VyfTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtiYWNrZ3JvdW5kQ29sb3VyfTtcblxuICBmb250LXNpemU6IDEzcHg7XG4gIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICBmb250LWZhbWlseTogXCJNZW5sb1wiLCBcIkx1Y2lkYSBTYW5zIFR5cGV3cml0ZXJcIiwgbW9ub3NwYWNlO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICBmb250LWZlYXR1cmUtc2V0dGluZ3M6IG5vcm1hbDtcblxuICAuZmlyYS1jb2RlIHtcblxuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBmb250LWZhbWlseTogXCJGaXJhIENvZGVcIjtcbiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogXCJjYWx0XCIgMTtcbiAgICBcbiAgfVxuXG5gO1xuIl0sIm5hbWVzIjpbIllhcHAiLCJzZWxlY3RvciIsInBsdWdpbiIsImNoYW5nZUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJyaWNoVGV4dGFyZWEiLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwicHJvcGVydGllcyIsIm9uQ29udGVudENoYW5nZSIsImNvbnRlbnRDaGFuZ2VIYW5kbGVyIiwidXBkYXRlIiwiZ2V0UGx1Z2luIiwiZ2V0Q29udGVudCIsInJpY2hUZXh0YXJlYUNvbnRlbnQiLCJnZXRSaWNoVGV4dGFyZWFDb250ZW50IiwiY29udGVudCIsImdldEluaXRpYWxMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJsaW5lQ291bnRGcm9tQ29udGVudCIsImluaXRpYWxMaW5lQ291bnQiLCJnZXRTY3JvbGxiYXJUaGlja25lc3MiLCJzY3JvbGxiYXJUaGlja25lc3MiLCJoaWRkZW5TY3JvbGxiYXJzIiwiREVGQVVMVF9ISURERU5fU0NST0xMQkFSUyIsImZhbmN5U2Nyb2xsYmFycyIsIkRFRkFVTFRfRkFOQ1lfU0NST0xMQkFSUyIsInNldExleGVyIiwibGV4ZXIiLCJzZXRQYXJzZXIiLCJwYXJzZXIiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJ1cGRhdGVQcmV0dHlQcmludGVyIiwiZGlkTW91bnQiLCJmaXJhQ29kZSIsIkRFRkFVTFRfRklSQV9DT0RFIiwiYXV0b0hlaWdodCIsIkRFRkFVTFRfQVVUT19IRUlHSFQiLCJhZGRDbGFzcyIsImxpbmVIZWlnaHQiLCJnZXRMaW5lSGVpZ2h0IiwicGFkZGluZ1RvcCIsImdldFBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiZ2V0UGFkZGluZ0JvdHRvbSIsImJvcmRlclRvcFdpZHRoIiwiZ2V0Qm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImdldEJvcmRlckJvdHRvbVdpZHRoIiwiaGVpZ2h0Iiwic2V0SGVpZ2h0Iiwid2lsbFVubW91bnQiLCJyZW1vdmVDbGFzcyIsImNoaWxkRWxlbWVudHMiLCJoaWRkZW5HdXR0ZXIiLCJERUZBVUxUX0hJRERFTl9HVVRURVIiLCJQcmV0dHlQcmludGVyIiwib25DaGFuZ2UiLCJwYXJlbnRDb250ZXh0IiwiYmluZCIsInVwZGF0ZVlhcHAiLCJzZXRZYXBwTGV4ZXIiLCJzZXRZYXBwV2lkdGgiLCJzZXRXaWR0aCIsInNldFlhcHBIZWlnaHQiLCJzZXRZYXBwUGFyc2VyIiwiaW5pdGlhbGlzZSIsImFzc2lnbkNvbnRleHQiLCJlZGl0YWJsZSIsIkRFRkFVTFRfRURJVEFCTEUiLCJsYW5ndWFnZSIsImdldExhbmd1YWdlIiwiY29udGVudEZyb21DaGlsZEVsZW1lbnRzIiwicmVhZE9ubHkiLCJzZXRMYW5ndWFnZSIsInNldFJpY2hUZXh0YXJlYUNvbnRlbnQiLCJzZXRSaWNoVGV4dGFyZWFSZWFkT25seSIsImZyb21Db250ZW50IiwiUGx1Z2luIiwib3B0aW9ucyIsIkNsYXNzIiwicHJvcGVydGllc0Zyb21Db250ZW50TGFuZ3VhZ2VQbHVnaW5BbmRPcHRpb25zIiwicGx1Z2luRnJvbUxhbmd1YWdlQW5kUGx1Z2luIiwieWFwcCIsIkVsZW1lbnQiLCJmcm9tQ2xhc3MiLCJ0YWdOYW1lIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsIk9iamVjdCIsImFzc2lnbiIsInByb3RvdHlwZSIsInN0eWxlTWl4aW5zIiwid2l0aFN0eWxlIiwiY29sb3VyIiwiY2FyZXRDb2xvdXIiLCJib3JkZXJDb2xvdXIiLCJiYWNrZ3JvdW5kQ29sb3VyIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7Ozs7K0JBK01iLFNBNEJFOzs7ZUE1QkYsUUE0QkU7OztrRUF6T29CLGlCQUFpQjtvQkFFUixNQUFNOzBEQUViLGdCQUFnQjtrRUFDZCxpQkFBaUI7a0NBRUwsZ0NBQWdDO3NCQUMxQixvQkFBb0I7MEJBQ0Ysd0JBQXdCO3VCQUN2QixxQkFBcUI7c0JBQ2hCLGlCQUFpQjt3QkFDZ0UsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqSyxJQUFBLEFBQU1BLElBQUksaUJBNkxQLEFBN0xIO2NBQU1BLElBQUk7OEJBQUpBLElBQUk7YUFBSkEsSUFBSSxDQUNJQyxRQUFRLEVBQUVDLE1BQU07OEJBRHhCRixJQUFJOztrQ0FFQUMsUUFBUSxFQUFFO1FBS2xCRSwrQ0FBQUEsZUFBYSxFQUFHLFNBQUNDLEtBQUssRUFBRUMsT0FBTyxFQUFLO1lBQ2xDLElBQU1DLFlBQVksR0FBR0QsT0FBTyxFQUN0QkUsY0FBYyxHQUFHRCxZQUFZLENBQUNFLGlCQUFpQixFQUFFLEFBQUM7WUFFeEQsSUFBSUQsY0FBYyxFQUFFO2dCQUNsQixJQUFtQyxXQUFlLEdBQWYsTUFBS0UsVUFBVSxxQkFBZixXQUFlLENBQTFDQyxlQUFlLEVBQWZBLGVBQWUsaUNBQUcsSUFBSSxtQkFBQSxFQUN4QkMsb0JBQW9CLEdBQUdELGVBQWUsQUFBQyxFQUFFLEdBQUc7Z0JBRWxELE1BQUtFLE1BQU0sRUFBRSxDQUFDO2dCQUVkLElBQUlELG9CQUFvQixFQUFFO29CQUN4Qk4s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
|
package/package.json
CHANGED
package/src/defaults.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
export const DEFAULT_HOST = "";
|
|
4
4
|
export const DEFAULT_EDITABLE = false;
|
|
5
5
|
export const DEFAULT_FIRA_CODE = false;
|
|
6
|
-
export const
|
|
6
|
+
export const DEFAULT_AUTO_HEIGHT = true;
|
|
7
7
|
export const DEFAULT_HIDDEN_GUTTER = false;
|
|
8
8
|
export const DEFAULT_FANCY_SCROLLBARS = false;
|
|
9
9
|
export const DEFAULT_HIDDEN_SCROLLBARS = false;
|
package/src/example/view.js
CHANGED
|
@@ -20,11 +20,11 @@ import LexicalEntriesTextarea from "./textarea/lexicalEntries";
|
|
|
20
20
|
const { rulesFromBNF } = parserUtilities;
|
|
21
21
|
|
|
22
22
|
class View extends Element {
|
|
23
|
-
contentChangeHandler(event, element) {
|
|
23
|
+
contentChangeHandler = (event, element) => {
|
|
24
24
|
this.update();
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
keyUpHandler(event, element) {
|
|
27
|
+
keyUpHandler = (event, element) => {
|
|
28
28
|
try {
|
|
29
29
|
const { Plugin } = this.constructor,
|
|
30
30
|
{ Lexer, Parser } = Plugin,
|
|
@@ -49,19 +49,6 @@ class View extends Element {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
dragHandler() {
|
|
53
|
-
const leftSizeableDivWidth = this.getLeftSizeableDivWidth(),
|
|
54
|
-
topSizeableDivHeight = this.getTopSizeableDivHeight(),
|
|
55
|
-
yappWidth = leftSizeableDivWidth, ///
|
|
56
|
-
yappHeight = topSizeableDivHeight; ///
|
|
57
|
-
|
|
58
|
-
this.setYappWidth(yappWidth);
|
|
59
|
-
|
|
60
|
-
this.setYappHeight(yappHeight);
|
|
61
|
-
|
|
62
|
-
this.resizeYapp();
|
|
63
|
-
}
|
|
64
|
-
|
|
65
52
|
update() {
|
|
66
53
|
try {
|
|
67
54
|
let parseTree = null;
|
|
@@ -90,10 +77,6 @@ class View extends Element {
|
|
|
90
77
|
|
|
91
78
|
didMount() {
|
|
92
79
|
this.update();
|
|
93
|
-
|
|
94
|
-
this.dragHandler(); ///
|
|
95
|
-
|
|
96
|
-
this.resizeYapp(); ///
|
|
97
80
|
}
|
|
98
81
|
|
|
99
82
|
willUnmount() {
|
|
@@ -101,10 +84,7 @@ class View extends Element {
|
|
|
101
84
|
}
|
|
102
85
|
|
|
103
86
|
childElements() {
|
|
104
|
-
const { Plugin, firaCode, initialContent } = this.constructor
|
|
105
|
-
dragHandler = this.dragHandler.bind(this),
|
|
106
|
-
keyUpHandler = this.keyUpHandler.bind(this),
|
|
107
|
-
contentChangeHandler = this.contentChangeHandler.bind(this);
|
|
87
|
+
const { Plugin, firaCode, initialContent } = this.constructor;
|
|
108
88
|
|
|
109
89
|
return ([
|
|
110
90
|
|
|
@@ -112,11 +92,11 @@ class View extends Element {
|
|
|
112
92
|
<LeftSizeableDiv>
|
|
113
93
|
<RowsDiv>
|
|
114
94
|
<TopSizeableDiv>
|
|
115
|
-
<Yapp Plugin={Plugin} firaCode={firaCode} onContentChange={contentChangeHandler} >
|
|
95
|
+
<Yapp Plugin={Plugin} firaCode={firaCode} onContentChange={this.contentChangeHandler} >
|
|
116
96
|
{initialContent}
|
|
117
97
|
</Yapp>
|
|
118
98
|
</TopSizeableDiv>
|
|
119
|
-
<HorizontalSplitterDiv
|
|
99
|
+
<HorizontalSplitterDiv/>
|
|
120
100
|
<RowDiv>
|
|
121
101
|
<RowsDiv>
|
|
122
102
|
<MiddleSizeableDiv>
|
|
@@ -138,7 +118,7 @@ class View extends Element {
|
|
|
138
118
|
</RowDiv>
|
|
139
119
|
</RowsDiv>
|
|
140
120
|
</LeftSizeableDiv>
|
|
141
|
-
<VerticalSplitterDiv
|
|
121
|
+
<VerticalSplitterDiv/>
|
|
142
122
|
<ColumnDiv>
|
|
143
123
|
<RowsDiv>
|
|
144
124
|
<RightSizeableDiv>
|
|
@@ -146,7 +126,7 @@ class View extends Element {
|
|
|
146
126
|
<SubHeading>
|
|
147
127
|
Lexical entries
|
|
148
128
|
</SubHeading>
|
|
149
|
-
<LexicalEntriesTextarea onKeyUp={keyUpHandler} />
|
|
129
|
+
<LexicalEntriesTextarea onKeyUp={this.keyUpHandler} />
|
|
150
130
|
</RowsDiv>
|
|
151
131
|
</RightSizeableDiv>
|
|
152
132
|
<HorizontalSplitterDiv />
|
|
@@ -155,7 +135,7 @@ class View extends Element {
|
|
|
155
135
|
<SubHeading>
|
|
156
136
|
BNF
|
|
157
137
|
</SubHeading>
|
|
158
|
-
<BNFTextarea onKeyUp={keyUpHandler} />
|
|
138
|
+
<BNFTextarea onKeyUp={this.keyUpHandler} />
|
|
159
139
|
</RowsDiv>
|
|
160
140
|
</RowDiv>
|
|
161
141
|
</RowsDiv>
|
package/src/example/yapp.js
CHANGED
|
@@ -6,11 +6,12 @@ import Yapp from "../index"; ///
|
|
|
6
6
|
|
|
7
7
|
export default withStyle(class extends Yapp {
|
|
8
8
|
static defaultProperties = {
|
|
9
|
-
editable: true
|
|
9
|
+
editable: true,
|
|
10
|
+
autoHeight: false,
|
|
11
|
+
hiddenGutter: true
|
|
10
12
|
};
|
|
11
13
|
})`
|
|
12
14
|
|
|
13
|
-
border: 1px solid;
|
|
14
15
|
border-color: #666;
|
|
15
16
|
|
|
16
17
|
`;
|
package/src/gutter.js
CHANGED
|
@@ -6,7 +6,6 @@ import { React, Element } from "easy";
|
|
|
6
6
|
|
|
7
7
|
import LineNumbers from "./lineNumbers";
|
|
8
8
|
|
|
9
|
-
import { gutterHeight } from "./styles";
|
|
10
9
|
import { lineCountFromTokens } from "./utilities/tokens";
|
|
11
10
|
|
|
12
11
|
class Gutter extends Element {
|
|
@@ -19,20 +18,7 @@ class Gutter extends Element {
|
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
scroll(scrollTop, scrollLeft) {
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
this.position();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
position() {
|
|
28
|
-
const scrollTop = this.getScrollTop();
|
|
29
|
-
|
|
30
|
-
const top = `${-scrollTop}px`,
|
|
31
|
-
css = {
|
|
32
|
-
top
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
this.css(css);
|
|
21
|
+
this.scrollLineNumbers(scrollTop, scrollLeft);
|
|
36
22
|
}
|
|
37
23
|
|
|
38
24
|
getLineCount() {
|
|
@@ -42,54 +28,35 @@ class Gutter extends Element {
|
|
|
42
28
|
return lineCount;
|
|
43
29
|
}
|
|
44
30
|
|
|
45
|
-
getScrollTop() {
|
|
46
|
-
const state = this.getState(),
|
|
47
|
-
{ scrollTop } = state;
|
|
48
|
-
|
|
49
|
-
return scrollTop;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
31
|
setLineCount(lineCount) {
|
|
53
32
|
this.updateState({
|
|
54
33
|
lineCount
|
|
55
34
|
});
|
|
56
35
|
}
|
|
57
36
|
|
|
58
|
-
setScrollTop(scrollTop) {
|
|
59
|
-
this.updateState({
|
|
60
|
-
scrollTop
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
|
|
64
37
|
setInitialState() {
|
|
65
|
-
const
|
|
66
|
-
lineCount = null;
|
|
38
|
+
const lineCount = null;
|
|
67
39
|
|
|
68
40
|
this.setState({
|
|
69
|
-
scrollTop,
|
|
70
41
|
lineCount
|
|
71
42
|
});
|
|
72
43
|
}
|
|
73
44
|
|
|
74
45
|
childElements() {
|
|
75
|
-
return (
|
|
46
|
+
return (
|
|
76
47
|
|
|
77
|
-
<LineNumbers
|
|
48
|
+
<LineNumbers />
|
|
78
49
|
|
|
79
|
-
|
|
50
|
+
);
|
|
80
51
|
}
|
|
81
52
|
|
|
82
53
|
parentContext() {
|
|
83
54
|
const context = this.getContext(),
|
|
84
55
|
getLineCount = this.getLineCount.bind(this),
|
|
85
|
-
getGutterWidth = this.getWidth.bind(this), ///
|
|
86
|
-
positionGutter = this.position.bind(this), ///
|
|
87
56
|
updateGutter = this.update.bind(this), ///
|
|
88
57
|
scrollGutter = this.scroll.bind(this), ///
|
|
89
58
|
parentContext = Object.assign({}, context, {
|
|
90
59
|
getLineCount,
|
|
91
|
-
getGutterWidth,
|
|
92
|
-
positionGutter,
|
|
93
60
|
updateGutter,
|
|
94
61
|
scrollGutter
|
|
95
62
|
});
|
|
@@ -112,9 +79,10 @@ class Gutter extends Element {
|
|
|
112
79
|
|
|
113
80
|
export default withStyle(Gutter)`
|
|
114
81
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
position:
|
|
82
|
+
width: fit-content;
|
|
83
|
+
overflow: hidden;
|
|
84
|
+
position: relative;
|
|
85
|
+
grid-area: gutter;
|
|
118
86
|
text-align: right;
|
|
119
87
|
user-select: none;
|
|
120
88
|
pointer-events: none;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import withStyle from "easy-with-style"; ///
|
|
4
|
+
|
|
5
|
+
import { Element } from "easy";
|
|
6
|
+
|
|
7
|
+
import Syntax from "./syntax";
|
|
8
|
+
|
|
9
|
+
class Highlights extends Element {
|
|
10
|
+
update(tokens) {
|
|
11
|
+
this.updateSyntax(tokens);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
scroll(scrollTop, scrollLeft) {
|
|
15
|
+
this.scrollSyntax(scrollTop, scrollLeft);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
childElements() {
|
|
19
|
+
return (
|
|
20
|
+
|
|
21
|
+
<Syntax/>
|
|
22
|
+
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
parentContext() {
|
|
27
|
+
const context = this.getContext(),
|
|
28
|
+
updateHighlights = this.update.bind(this), ///
|
|
29
|
+
scrollHighlights = this.scroll.bind(this), ///
|
|
30
|
+
parentContext = Object.assign({}, context, {
|
|
31
|
+
updateHighlights,
|
|
32
|
+
scrollHighlights
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
return parentContext;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
initialise() {
|
|
39
|
+
this.assignContext([
|
|
40
|
+
"updateHighlights",
|
|
41
|
+
"scrollHighlights",
|
|
42
|
+
"scrollbarThickness"
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
static tagName = "div";
|
|
47
|
+
|
|
48
|
+
static defaultProperties = {
|
|
49
|
+
className: "syntax"
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default withStyle(Highlights)`
|
|
54
|
+
|
|
55
|
+
z-index: 0;
|
|
56
|
+
width: 100%;
|
|
57
|
+
height: 100%;
|
|
58
|
+
overflow: hidden;
|
|
59
|
+
position: relative;
|
|
60
|
+
grid-area: syntax;
|
|
61
|
+
|
|
62
|
+
background-color: inherit;
|
|
63
|
+
|
|
64
|
+
font-size: inherit;
|
|
65
|
+
line-height: inherit;
|
|
66
|
+
font-family: inherit;
|
|
67
|
+
text-rendering: inherit;
|
|
68
|
+
font-feature-settings: inherit;
|
|
69
|
+
|
|
70
|
+
`;
|
package/src/lineNumbers.js
CHANGED
|
@@ -17,10 +17,21 @@ class LineNumbers extends Element {
|
|
|
17
17
|
this.html(html);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
+
scroll(scrollTop, scrollLeft) {
|
|
21
|
+
const top = `${-scrollTop}px`,
|
|
22
|
+
css = {
|
|
23
|
+
top
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
this.css(css);
|
|
27
|
+
}
|
|
28
|
+
|
|
20
29
|
parentContext() {
|
|
21
|
-
const
|
|
30
|
+
const scrollLineNumbers = this.scroll.bind(this), ///
|
|
31
|
+
updateLineNumbers = this.update.bind(this); ///
|
|
22
32
|
|
|
23
33
|
return ({
|
|
34
|
+
scrollLineNumbers,
|
|
24
35
|
updateLineNumbers
|
|
25
36
|
});
|
|
26
37
|
}
|
|
@@ -34,8 +45,8 @@ class LineNumbers extends Element {
|
|
|
34
45
|
|
|
35
46
|
export default withStyle(LineNumbers)`
|
|
36
47
|
|
|
37
|
-
float: left;
|
|
38
48
|
margin: 0 6px 0 6px;
|
|
49
|
+
position: relative;
|
|
39
50
|
|
|
40
51
|
color: inherit;
|
|
41
52
|
|