@osovitny/anatoly 2.0.21 → 2.0.23

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.
Files changed (26) hide show
  1. package/bundles/osovitny-anatoly.umd.js +382 -234
  2. package/bundles/osovitny-anatoly.umd.js.map +1 -1
  3. package/bundles/osovitny-anatoly.umd.min.js +2 -2
  4. package/bundles/osovitny-anatoly.umd.min.js.map +1 -1
  5. package/esm2015/lib/core/localization/localization.service.js +115 -0
  6. package/esm2015/lib/core/utils.js +58 -14
  7. package/esm2015/lib/ui/components/html-editor/forms-html-editor.component.js +2 -2
  8. package/esm2015/lib/ui/index.js +4 -4
  9. package/esm2015/lib/ui/ui.module.js +25 -25
  10. package/esm2015/lib/ui/validation/form-validation-summary.component.js +64 -0
  11. package/esm2015/lib/ui/validation/item-validation-summary.component.js +38 -0
  12. package/esm2015/lib/ui/validation/validation-summary.component.js +117 -0
  13. package/fesm2015/osovitny-anatoly.js +328 -183
  14. package/fesm2015/osovitny-anatoly.js.map +1 -1
  15. package/lib/core/localization/localization.service.d.ts +18 -0
  16. package/lib/core/utils.d.ts +9 -0
  17. package/lib/ui/index.d.ts +3 -3
  18. package/lib/ui/ui.module.d.ts +2 -2
  19. package/lib/ui/{components/validation → validation}/validation-summary.component.d.ts +1 -1
  20. package/osovitny-anatoly.metadata.json +1 -1
  21. package/package.json +1 -1
  22. package/esm2015/lib/ui/components/validation/form-validation-summary.component.js +0 -64
  23. package/esm2015/lib/ui/components/validation/item-validation-summary.component.js +0 -38
  24. package/esm2015/lib/ui/components/validation/validation-summary.component.js +0 -117
  25. /package/lib/ui/{components/validation → validation}/form-validation-summary.component.d.ts +0 -0
  26. /package/lib/ui/{components/validation → validation}/item-validation-summary.component.d.ts +0 -0
@@ -1,64 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny
8
- Anatoly Osovitny
9
-
10
- Created:
11
- 7 Dec 2017
12
-
13
- Version:
14
- 1.0
15
-
16
- Copyright (c) 2016-2020 Osovitny Inc. All rights reserved.
17
- </file>
18
- */
19
- // Node
20
- import { Component, Input } from "@angular/core";
21
- import { ValidationSummaryComponent } from "./validation-summary.component";
22
- export class FormValidationSummaryComponent extends ValidationSummaryComponent {
23
- constructor() {
24
- super();
25
- this.visible = false;
26
- this.customerrors = [];
27
- /*
28
- 0 - only FormValidation messages
29
- 1 - only Custom messages
30
- 2 - all
31
- */
32
- this.viewtype = 0;
33
- }
34
- getErrors() {
35
- if (this.viewtype == 1) {
36
- return this.customerrors;
37
- }
38
- let formValidationMessages = this.getFormValidationMessages();
39
- if (this.viewtype == 0) {
40
- return formValidationMessages;
41
- }
42
- var messages = [];
43
- if (formValidationMessages.length > 0) {
44
- messages.push(...formValidationMessages);
45
- }
46
- if (this.customerrors.length > 0) {
47
- messages.push(...this.customerrors);
48
- }
49
- return messages;
50
- }
51
- }
52
- FormValidationSummaryComponent.decorators = [
53
- { type: Component, args: [{
54
- selector: "anatoly-form-validation-summary",
55
- template: "<div class=\"callout callout-danger\" *ngIf=\"visible\">\r\n <h6 class=\"box-title\">There are problems with the form</h6>\r\n <ul>\r\n <li *ngFor=\"let error of getErrors()\"><span>{{error}}</span></li>\r\n </ul>\r\n</div>\r\n\r\n"
56
- },] }
57
- ];
58
- FormValidationSummaryComponent.ctorParameters = () => [];
59
- FormValidationSummaryComponent.propDecorators = {
60
- visible: [{ type: Input }],
61
- customerrors: [{ type: Input }],
62
- viewtype: [{ type: Input }]
63
- };
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2NvbXBvbmVudHMvdmFsaWRhdGlvbi9mb3JtLXZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBRUYsT0FBTztBQUNQLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTTVFLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSwwQkFBMEI7SUFXNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQVhELFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsaUJBQVksR0FBYSxFQUFFLENBQUM7UUFFckM7Ozs7VUFJRTtRQUNPLGFBQVEsR0FBVyxDQUFDLENBQUM7SUFJOUIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQjtRQUVELElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRTtZQUN0QixPQUFPLHNCQUFzQixDQUFDO1NBQy9CO1FBRUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzs7WUF2Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQ0FBaUM7Z0JBQzNDLHlQQUF1RDthQUN4RDs7OztzQkFFRSxLQUFLOzJCQUNMLEtBQUs7dUJBT0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnlcclxuICAgIEFuYXRvbHkgT3Nvdml0bnlcclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDcgRGVjIDIwMTdcclxuXHJcbiAgVmVyc2lvbjpcclxuICAgIDEuMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMCBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vIE5vZGVcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IH0gZnJvbSBcIi4vdmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYW5hdG9seS1mb3JtLXZhbGlkYXRpb24tc3VtbWFyeVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZm9ybS12YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50Lmh0bWxcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1WYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudCBleHRlbmRzIFZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VzdG9tZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvKlxyXG4gICAgMCAtIG9ubHkgRm9ybVZhbGlkYXRpb24gbWVzc2FnZXNcclxuICAgIDEgLSBvbmx5IEN1c3RvbSBtZXNzYWdlc1xyXG4gICAgMiAtIGFsbFxyXG4gICovIFxyXG4gIEBJbnB1dCgpIHZpZXd0eXBlOiBudW1iZXIgPSAwOyBcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JzKCkge1xyXG4gICAgaWYgKHRoaXMudmlld3R5cGUgPT0gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21lcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZvcm1WYWxpZGF0aW9uTWVzc2FnZXMgPSB0aGlzLmdldEZvcm1WYWxpZGF0aW9uTWVzc2FnZXMoKTtcclxuICAgIGlmICh0aGlzLnZpZXd0eXBlID09IDApIHtcclxuICAgICAgcmV0dXJuIGZvcm1WYWxpZGF0aW9uTWVzc2FnZXM7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIG1lc3NhZ2VzID0gW107XHJcbiAgICBpZiAoZm9ybVZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG1lc3NhZ2VzLnB1c2goLi4uZm9ybVZhbGlkYXRpb25NZXNzYWdlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3VzdG9tZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbWVzc2FnZXMucHVzaCguLi50aGlzLmN1c3RvbWVycm9ycyk7XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,38 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny
8
- Anatoly Osovitny
9
-
10
- Created:
11
- 6 Dec 2017
12
-
13
- Version:
14
- 1.0
15
-
16
- Copyright (c) 2016-2020 Osovitny Inc. All rights reserved.
17
- </file>
18
- */
19
- // Node
20
- import { Component, Input } from "@angular/core";
21
- import { ValidationSummaryComponent } from "./validation-summary.component";
22
- export class ItemValidationSummaryComponent extends ValidationSummaryComponent {
23
- constructor() {
24
- super();
25
- }
26
- }
27
- ItemValidationSummaryComponent.decorators = [
28
- { type: Component, args: [{
29
- selector: "anatoly-item-validation-summary",
30
- template: "<ul class=\"list-unstyled\" *ngIf=\"isControlInvalid(controlName)\">\r\n <li *ngFor=\"let error of getValidationMessages(formGroup.get(controlName), controlTitle)\">\r\n <span class=\"help-block\">{{ error }}</span>\r\n </li>\r\n</ul>\r\n\r\n"
31
- },] }
32
- ];
33
- ItemValidationSummaryComponent.ctorParameters = () => [];
34
- ItemValidationSummaryComponent.propDecorators = {
35
- controlName: [{ type: Input }],
36
- controlTitle: [{ type: Input }]
37
- };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3VpL2NvbXBvbmVudHMvdmFsaWRhdGlvbi9pdGVtLXZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUJFO0FBRUYsT0FBTztBQUNQLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTTVFLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSwwQkFBMEI7SUFJNUU7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7OztZQVZGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUNBQWlDO2dCQUMzQyxtUUFBdUQ7YUFDeEQ7Ozs7MEJBRUUsS0FBSzsyQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueVxyXG4gICAgQW5hdG9seSBPc292aXRueVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgNiBEZWMgMjAxN1xyXG5cclxuICBWZXJzaW9uOlxyXG4gICAgMS4wXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy8gTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVmFsaWRhdGlvblN1bW1hcnlDb21wb25lbnQgfSBmcm9tIFwiLi92YWxpZGF0aW9uLXN1bW1hcnkuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9pdGVtLXZhbGlkYXRpb24tc3VtbWFyeS5jb21wb25lbnQuaHRtbFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbVZhbGlkYXRpb25TdW1tYXJ5Q29tcG9uZW50IGV4dGVuZHMgVmFsaWRhdGlvblN1bW1hcnlDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbnRyb2xOYW1lOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udHJvbFRpdGxlOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,117 +0,0 @@
1
- /*
2
- <file>
3
- Project:
4
- @osovitny/anatoly
5
-
6
- Authors:
7
- Vadim Osovitny
8
- Anatoly Osovitny
9
-
10
- Created:
11
- 8 Dec 2017
12
-
13
- Version:
14
- 1.0
15
-
16
- Copyright (c) 2016-2020 Osovitny Inc. All rights reserved.
17
- </file>
18
- */
19
- //Custom
20
- import { BaseEditComponent } from "../base-edit.component";
21
- export class ValidationSummaryComponent extends BaseEditComponent {
22
- constructor() {
23
- super();
24
- }
25
- getFormValidationMessages() {
26
- let messages = [];
27
- Object.keys(this.formGroup.controls).forEach(k => {
28
- var control = this.formGroup.controls[k];
29
- if (control.controls != null) {
30
- Object.keys(control.controls).forEach(k => {
31
- var child = control.controls[k];
32
- this.getValidationMessages(child, this.getControlName(child, k)).forEach(m => messages.push(m));
33
- });
34
- }
35
- else {
36
- this.getValidationMessages(control, this.getControlName(control, k)).forEach(m => messages.push(m));
37
- }
38
- });
39
- return messages;
40
- }
41
- getValidationMessages(state, thingName) {
42
- let thing = state.path || thingName;
43
- let messages = [];
44
- if (state.errors) {
45
- for (let errorName in state.errors) {
46
- if (state.errors.hasOwnProperty(errorName)) {
47
- switch (errorName) {
48
- case 'required':
49
- messages.push(`${thing} is required`);
50
- break;
51
- case 'minlength':
52
- messages.push(`${thing} must be at least ${state.errors["minlength"].requiredLength} characters`);
53
- break;
54
- case 'pattern':
55
- messages.push(`${thing} contains illegal characters`);
56
- break;
57
- case 'format':
58
- messages.push(`${thing} format mismatch`);
59
- break;
60
- case 'maxlength':
61
- messages.push(`${thing} must have maximum ${state.errors["maxlength"].requiredLength} characters`);
62
- break;
63
- case 'specialcharacters':
64
- messages.push(`${thing} contains special characters`);
65
- break;
66
- }
67
- }
68
- }
69
- }
70
- return messages;
71
- }
72
- /**
73
- * Get Control Name
74
- * @param control
75
- * @param thingName
76
- */
77
- getControlName(control, thingName) {
78
- let value = this.getControlTitle(control);
79
- return value ? value : thingName;
80
- }
81
- /**
82
- * Retrieve tilte of control
83
- * @param control
84
- */
85
- getControlTitle(control) {
86
- if (control === null || control === void 0 ? void 0 : control.nativeElement) {
87
- let controlTitle = this.getTitleAttribute(control.nativeElement);
88
- if (controlTitle) {
89
- return controlTitle;
90
- }
91
- }
92
- return undefined;
93
- }
94
- /**
95
- * Return title attribute of form control
96
- */
97
- getTitleAttribute(nativeElement) {
98
- var _a, _b, _c, _d, _e, _f;
99
- let title;
100
- switch (nativeElement.tagName) {
101
- // For Kendo time and date picker element title is assigned to the 4th child control.
102
- case "KENDO-TIMEPICKER":
103
- case "KENDO-DATEPICKER":
104
- title = (_d = (_c = (_b = (_a = nativeElement.children[0]) === null || _a === void 0 ? void 0 : _a.children[0]) === null || _b === void 0 ? void 0 : _b.children[0]) === null || _c === void 0 ? void 0 : _c.children[0]) === null || _d === void 0 ? void 0 : _d.getAttribute('title');
105
- break;
106
- // For Kendo numaric element title is assigned to the 2nd child control.
107
- case "KENDO-NUMERICTEXTBOX":
108
- title = (_f = (_e = nativeElement.children[0]) === null || _e === void 0 ? void 0 : _e.children[0]) === null || _f === void 0 ? void 0 : _f.getAttribute('title');
109
- break;
110
- default:
111
- title = nativeElement.getAttribute('title');
112
- break;
113
- }
114
- return title;
115
- }
116
- }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi91aS9jb21wb25lbnRzL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi1zdW1tYXJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQkU7QUFLRixRQUFRO0FBQ1IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGlCQUFpQjtJQUMvRDtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFFNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6QyxJQUFnQixPQUFRLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtnQkFDekMsTUFBTSxDQUFDLElBQUksQ0FBYSxPQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNyRCxJQUFJLEtBQUssR0FBZSxPQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRyxD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QUMsMkNBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRyxNQUFNO1lBRVIsd0VBQXdFO1lBQ3hFLEtBQUssc0JBQXNCO2dCQUN6QixLQUFLLGVBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMENBQUUsUUFBUSxDQUFDLENBQUMsMkNBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RSxNQUFNO1lBRVI7Z0JBQ0UsS0FBSyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLE1BQU07U0FDVDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueVxyXG4gICAgQW5hdG9seSBPc292aXRueVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgOCBEZWMgMjAxN1xyXG5cclxuICBWZXJzaW9uOlxyXG4gICAgMS4wXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIwIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy8gTm9kZVxyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vQ3VzdG9tXHJcbmltcG9ydCB7IEJhc2VFZGl0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2Jhc2UtZWRpdC5jb21wb25lbnRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU3VtbWFyeUNvbXBvbmVudCBleHRlbmRzIEJhc2VFZGl0Q29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtVmFsaWRhdGlvbk1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChrID0+IHtcclxuICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1trXTtcclxuXHJcbiAgICAgIGlmICgoPEZvcm1Hcm91cD5jb250cm9sKS5jb250cm9scyAhPSBudWxsKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoKDxGb3JtR3JvdXA+Y29udHJvbCkuY29udHJvbHMpLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgICB2YXIgY2hpbGQgPSAoPEZvcm1Hcm91cD5jb250cm9sKS5jb250cm9sc1trXTtcclxuICAgICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKGNoaWxkLCB0aGlzLmdldENvbnRyb2xOYW1lKGNoaWxkLCBrKSkuZm9yRWFjaChtID0+IG1lc3NhZ2VzLnB1c2gobSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKGNvbnRyb2wsIHRoaXMuZ2V0Q29udHJvbE5hbWUoY29udHJvbCwgaykpLmZvckVhY2gobSA9PiBtZXNzYWdlcy5wdXNoKG0pKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKHN0YXRlOiBhbnksIHRoaW5nTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IHRoaW5nOiBzdHJpbmcgPSBzdGF0ZS5wYXRoIHx8IHRoaW5nTmFtZTtcclxuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBpZiAoc3RhdGUuZXJyb3JzKSB7XHJcbiAgICAgIGZvciAobGV0IGVycm9yTmFtZSBpbiBzdGF0ZS5lcnJvcnMpIHtcclxuICAgICAgICBpZiAoc3RhdGUuZXJyb3JzLmhhc093blByb3BlcnR5KGVycm9yTmFtZSkpIHtcclxuICAgICAgICAgIHN3aXRjaCAoZXJyb3JOYW1lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBpcyByZXF1aXJlZGApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBtdXN0IGJlIGF0IGxlYXN0ICR7c3RhdGUuZXJyb3JzW1wibWlubGVuZ3RoXCJdLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdwYXR0ZXJuJzpcclxuICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGAke3RoaW5nfSBjb250YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnNgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2Zvcm1hdCc6XHJcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGluZ30gZm9ybWF0IG1pc21hdGNoYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdtYXhsZW5ndGgnOlxyXG4gICAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goYCR7dGhpbmd9IG11c3QgaGF2ZSBtYXhpbXVtICR7c3RhdGUuZXJyb3JzW1wibWF4bGVuZ3RoXCJdLnJlcXVpcmVkTGVuZ3RofSBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdzcGVjaWFsY2hhcmFjdGVycyc6XHJcbiAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChgJHt0aGluZ30gY29udGFpbnMgc3BlY2lhbCBjaGFyYWN0ZXJzYCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgQ29udHJvbCBOYW1lXHJcbiAgKiBAcGFyYW0gY29udHJvbCBcclxuICAqIEBwYXJhbSB0aGluZ05hbWUgXHJcbiAgKi9cclxuICBnZXRDb250cm9sTmFtZShjb250cm9sOiBhbnksIHRoaW5nTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5nZXRDb250cm9sVGl0bGUoY29udHJvbCk7XHJcbiAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IHRoaW5nTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRpbHRlIG9mIGNvbnRyb2wgXHJcbiAgICogQHBhcmFtIGNvbnRyb2wgXHJcbiAgICovXHJcbiAgZ2V0Q29udHJvbFRpdGxlKGNvbnRyb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29udHJvbD8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBsZXQgY29udHJvbFRpdGxlID0gdGhpcy5nZXRUaXRsZUF0dHJpYnV0ZShjb250cm9sLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICBpZiAoY29udHJvbFRpdGxlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRyb2xUaXRsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGl0bGUgYXR0cmlidXRlIG9mIGZvcm0gY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFRpdGxlQXR0cmlidXRlKG5hdGl2ZUVsZW1lbnQ6IEhUTUxGb3JtRWxlbWVudCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGU6IHN0cmluZztcclxuXHJcbiAgICBzd2l0Y2ggKG5hdGl2ZUVsZW1lbnQudGFnTmFtZSkge1xyXG4gICAgICAvLyBGb3IgS2VuZG8gdGltZSBhbmQgZGF0ZSBwaWNrZXIgZWxlbWVudCB0aXRsZSBpcyBhc3NpZ25lZCB0byB0aGUgNHRoIGNoaWxkIGNvbnRyb2wuXHJcbiAgICAgIGNhc2UgXCJLRU5ETy1USU1FUElDS0VSXCI6XHJcbiAgICAgIGNhc2UgXCJLRU5ETy1EQVRFUElDS0VSXCI6XHJcbiAgICAgICAgdGl0bGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uY2hpbGRyZW5bMF0/LmNoaWxkcmVuWzBdPy5nZXRBdHRyaWJ1dGUoJ3RpdGxlJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAvLyBGb3IgS2VuZG8gbnVtYXJpYyBlbGVtZW50IHRpdGxlIGlzIGFzc2lnbmVkIHRvIHRoZSAybmQgY2hpbGQgY29udHJvbC5cclxuICAgICAgY2FzZSBcIktFTkRPLU5VTUVSSUNURVhUQk9YXCI6XHJcbiAgICAgICAgdGl0bGUgPSBuYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdPy5jaGlsZHJlblswXT8uZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aXRsZSA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aXRsZTtcclxuICB9XHJcbn1cclxuIl19