atr-components 0.2.417 → 2.0.1

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 (136) hide show
  1. package/atr-components.module.d.ts +9 -9
  2. package/atr-public-api.d.ts +53 -53
  3. package/core/animations/animations.d.ts +1 -1
  4. package/core/animations/fly-in.d.ts +1 -1
  5. package/core/animations/scroll-screen.d.ts +1 -1
  6. package/core/auth/auth.guard.d.ts +11 -11
  7. package/core/base/atr-common.d.ts +347 -347
  8. package/core/directive/error-img.directive.d.ts +10 -10
  9. package/core/directive/hq-spin.directive.d.ts +13 -13
  10. package/core/directive/role.directive.d.ts +16 -16
  11. package/core/interceptor/base.interceptor.d.ts +17 -17
  12. package/core/ngz-module/cus-zorro-antd.module.d.ts +75 -75
  13. package/core/pipe/china-num.pipe.d.ts +7 -7
  14. package/core/pipe/count.pipe.d.ts +7 -7
  15. package/core/pipe/day.pipe.d.ts +8 -8
  16. package/core/pipe/defaultVal.pipe.d.ts +7 -7
  17. package/core/pipe/dicts.pipe.d.ts +10 -10
  18. package/core/pipe/image-pipe.pipe.d.ts +8 -8
  19. package/core/pipe/is-empty.pipe.d.ts +7 -7
  20. package/core/pipe/is-not-empty.pipe.d.ts +7 -7
  21. package/core/pipe/oss.pipe.d.ts +7 -7
  22. package/core/pipe/ossStatic.pipe.d.ts +7 -7
  23. package/core/pipe/pipe-module.module.d.ts +21 -21
  24. package/core/pipe/remove-html.pipe.d.ts +10 -10
  25. package/core/pipe/safe-compute.pipe.d.ts +7 -7
  26. package/core/pipe/safe-html.pipe.d.ts +10 -10
  27. package/core/pipe/safe-url.pipe.d.ts +10 -10
  28. package/core/routereuse/atr-reuse-strategy.d.ts +19 -19
  29. package/core/services/dict/dict.service.d.ts +20 -20
  30. package/core/services/http.service.d.ts +31 -31
  31. package/core/services/menu.service.d.ts +29 -29
  32. package/core/services/upload-oss.service.d.ts +14 -14
  33. package/core/utils/ToolsUtil.d.ts +180 -180
  34. package/core/utils/localstorage.util.d.ts +15 -15
  35. package/core/utils/sessionstorage.util.d.ts +15 -15
  36. package/{esm2020 → esm2022}/atr-components.mjs +4 -4
  37. package/esm2022/atr-components.module.mjs +36 -0
  38. package/{esm2020 → esm2022}/atr-public-api.mjs +54 -54
  39. package/{esm2020 → esm2022}/core/animations/animations.mjs +9 -9
  40. package/{esm2020 → esm2022}/core/animations/fly-in.mjs +18 -18
  41. package/{esm2020 → esm2022}/core/animations/scroll-screen.mjs +22 -22
  42. package/{esm2020 → esm2022}/core/auth/auth.guard.mjs +37 -37
  43. package/esm2022/core/base/atr-common.mjs +47 -0
  44. package/{esm2020 → esm2022}/core/directive/error-img.directive.mjs +31 -31
  45. package/{esm2020 → esm2022}/core/directive/hq-spin.directive.mjs +48 -48
  46. package/esm2022/core/directive/role.directive.mjs +69 -0
  47. package/{esm2020 → esm2022}/core/interceptor/base.interceptor.mjs +165 -165
  48. package/{esm2020 → esm2022}/core/ngz-module/cus-zorro-antd.module.mjs +292 -292
  49. package/{esm2020 → esm2022}/core/pipe/china-num.pipe.mjs +36 -36
  50. package/{esm2020 → esm2022}/core/pipe/count.pipe.mjs +34 -34
  51. package/{esm2020 → esm2022}/core/pipe/day.pipe.mjs +24 -24
  52. package/{esm2020 → esm2022}/core/pipe/defaultVal.pipe.mjs +23 -23
  53. package/{esm2020 → esm2022}/core/pipe/dicts.pipe.mjs +28 -28
  54. package/{esm2020 → esm2022}/core/pipe/image-pipe.pipe.mjs +17 -17
  55. package/{esm2020 → esm2022}/core/pipe/is-empty.pipe.mjs +20 -20
  56. package/{esm2020 → esm2022}/core/pipe/is-not-empty.pipe.mjs +17 -17
  57. package/{esm2020 → esm2022}/core/pipe/oss.pipe.mjs +17 -17
  58. package/{esm2020 → esm2022}/core/pipe/ossStatic.pipe.mjs +17 -17
  59. package/esm2022/core/pipe/pipe-module.module.mjs +38 -0
  60. package/{esm2020 → esm2022}/core/pipe/remove-html.pipe.mjs +21 -21
  61. package/{esm2020 → esm2022}/core/pipe/safe-compute.pipe.mjs +23 -23
  62. package/{esm2020 → esm2022}/core/pipe/safe-html.pipe.mjs +20 -20
  63. package/{esm2020 → esm2022}/core/pipe/safe-url.pipe.mjs +20 -20
  64. package/esm2022/core/routereuse/atr-reuse-strategy.mjs +79 -0
  65. package/esm2022/core/services/dict/dict.service.mjs +152 -0
  66. package/{esm2020 → esm2022}/core/services/http.service.mjs +306 -306
  67. package/{esm2020 → esm2022}/core/services/menu.service.mjs +130 -130
  68. package/{esm2020 → esm2022}/core/services/upload-oss.service.mjs +74 -74
  69. package/esm2022/core/utils/ToolsUtil.mjs +622 -0
  70. package/{esm2020 → esm2022}/core/utils/localstorage.util.mjs +94 -94
  71. package/{esm2020 → esm2022}/core/utils/sessionstorage.util.mjs +72 -72
  72. package/{esm2020 → esm2022}/lib/hello/hello.component.mjs +15 -15
  73. package/esm2022/lib/hello/hello.module.mjs +20 -0
  74. package/esm2022/lib/shared/atr-shared.module.mjs +204 -0
  75. package/esm2022/lib/shared/echarts/echarts.component.mjs +77 -0
  76. package/esm2022/lib/shared/form/form.component.mjs +574 -0
  77. package/esm2022/lib/shared/img-canvas/img-canvas.component.mjs +132 -0
  78. package/esm2022/lib/shared/local-upload/local-upload.component.mjs +68 -0
  79. package/esm2022/lib/shared/quill-editor/quill-editor.component.mjs +248 -0
  80. package/esm2022/lib/shared/select-icons/select-icons.component.mjs +90 -0
  81. package/{esm2020 → esm2022}/lib/shared/select-tree/select-tree.component.mjs +55 -55
  82. package/{esm2020 → esm2022}/lib/shared/service/busi.service.mjs +69 -69
  83. package/{esm2020 → esm2022}/lib/shared/share.service.mjs +107 -107
  84. package/esm2022/lib/shared/table/table-form-item/table-form-item.component.mjs +96 -0
  85. package/esm2022/lib/shared/table/table-td/table-td.component.mjs +165 -0
  86. package/esm2022/lib/shared/table/table.component.mjs +749 -0
  87. package/{esm2020 → esm2022}/lib/shared/upload/upload.component.mjs +274 -274
  88. package/{esm2020 → esm2022}/lib/shared/validators/atr-validtors.mjs +8 -8
  89. package/esm2022/lib/shared/video/video.component.mjs +16 -0
  90. package/esm2022/lib/shared/view-form/view-form.component.mjs +181 -0
  91. package/{fesm2020 → fesm2022}/atr-components.mjs +5311 -5312
  92. package/fesm2022/atr-components.mjs.map +1 -0
  93. package/{atr-components.d.ts → index.d.ts} +5 -5
  94. package/lib/hello/hello.component.d.ts +8 -8
  95. package/lib/hello/hello.module.d.ts +8 -8
  96. package/lib/shared/atr-shared.module.d.ts +36 -33
  97. package/lib/shared/echarts/echarts.component.d.ts +34 -34
  98. package/lib/shared/form/form.component.d.ts +45 -45
  99. package/lib/shared/img-canvas/img-canvas.component.d.ts +28 -28
  100. package/lib/shared/local-upload/local-upload.component.d.ts +22 -22
  101. package/lib/shared/quill-editor/quill-editor.component.d.ts +45 -45
  102. package/lib/shared/select-icons/select-icons.component.d.ts +24 -24
  103. package/lib/shared/select-tree/select-tree.component.d.ts +23 -23
  104. package/lib/shared/service/busi.service.d.ts +20 -20
  105. package/lib/shared/share.service.d.ts +14 -14
  106. package/lib/shared/table/table-form-item/table-form-item.component.d.ts +25 -25
  107. package/lib/shared/table/table-td/table-td.component.d.ts +26 -26
  108. package/lib/shared/table/table.component.d.ts +94 -94
  109. package/lib/shared/upload/upload.component.d.ts +53 -53
  110. package/lib/shared/validators/atr-validtors.d.ts +2 -2
  111. package/lib/shared/video/video.component.d.ts +7 -7
  112. package/lib/shared/view-form/view-form.component.d.ts +28 -28
  113. package/package.json +14 -22
  114. package/esm2020/atr-components.module.mjs +0 -38
  115. package/esm2020/core/base/atr-common.mjs +0 -47
  116. package/esm2020/core/directive/role.directive.mjs +0 -69
  117. package/esm2020/core/pipe/pipe-module.module.mjs +0 -40
  118. package/esm2020/core/routereuse/atr-reuse-strategy.mjs +0 -79
  119. package/esm2020/core/services/dict/dict.service.mjs +0 -152
  120. package/esm2020/core/utils/ToolsUtil.mjs +0 -622
  121. package/esm2020/lib/hello/hello.module.mjs +0 -22
  122. package/esm2020/lib/shared/atr-shared.module.mjs +0 -199
  123. package/esm2020/lib/shared/echarts/echarts.component.mjs +0 -77
  124. package/esm2020/lib/shared/form/form.component.mjs +0 -574
  125. package/esm2020/lib/shared/img-canvas/img-canvas.component.mjs +0 -132
  126. package/esm2020/lib/shared/local-upload/local-upload.component.mjs +0 -68
  127. package/esm2020/lib/shared/quill-editor/quill-editor.component.mjs +0 -248
  128. package/esm2020/lib/shared/select-icons/select-icons.component.mjs +0 -90
  129. package/esm2020/lib/shared/table/table-form-item/table-form-item.component.mjs +0 -96
  130. package/esm2020/lib/shared/table/table-td/table-td.component.mjs +0 -165
  131. package/esm2020/lib/shared/table/table.component.mjs +0 -749
  132. package/esm2020/lib/shared/video/video.component.mjs +0 -15
  133. package/esm2020/lib/shared/view-form/view-form.component.mjs +0 -181
  134. package/fesm2015/atr-components.mjs +0 -5522
  135. package/fesm2015/atr-components.mjs.map +0 -1
  136. package/fesm2020/atr-components.mjs.map +0 -1
@@ -1,15 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "ngx-videogular";
4
- export class VideoComponent {
5
- constructor() { }
6
- }
7
- VideoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: VideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8
- VideoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: VideoComponent, selector: "app-video", inputs: { url: "url" }, ngImport: i0, template: "<vg-player>\r\n <vg-controls vgFor=\"__VG__VIDEO__\" >\r\n <vg-play-pause></vg-play-pause>\r\n <vg-scrub-bar>\r\n <vg-scrub-bar-current-time></vg-scrub-bar-current-time>\r\n <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>\r\n </vg-scrub-bar>\r\n <vg-time-display vgProperty=\"left\" vgFormat=\"mm:ss\"></vg-time-display>\r\n\r\n <!-- <vg-volume></vg-volume> -->\r\n <vg-mute></vg-mute>\r\n\r\n <vg-fullscreen></vg-fullscreen>\r\n </vg-controls>\r\n\r\n <video\r\n id=\"__VG__VIDEO__\"\r\n #media\r\n [vgMedia]=\"$any(media)\"\r\n preload=\"auto\"\r\n style=\"width: 100%;\"\r\n >\r\n <source [src]=\"url\" type=\"video/mp4\">\r\n </video>\r\n</vg-player>\r\n", styles: [":host{width:100%}\n"], components: [{ type: i1.VgPlayer, selector: "vg-player", outputs: ["onPlayerReady", "onMediaReady"] }, { type: i1.VgControls, selector: "vg-controls", inputs: ["vgFor", "vgAutohide", "vgAutohideTime"] }, { type: i1.VgPlayPause, selector: "vg-play-pause", inputs: ["vgFor"] }, { type: i1.VgScrubBar, selector: "vg-scrub-bar", inputs: ["vgFor", "vgSlider"] }, { type: i1.VgScrubBarCurrentTime, selector: "vg-scrub-bar-current-time", inputs: ["vgFor", "vgSlider"] }, { type: i1.VgScrubBarBufferingTime, selector: "vg-scrub-bar-buffering-time", inputs: ["vgFor"] }, { type: i1.VgTimeDisplay, selector: "vg-time-display", inputs: ["vgFor", "vgProperty", "vgFormat"] }, { type: i1.VgMute, selector: "vg-mute", inputs: ["vgFor"] }, { type: i1.VgFullscreen, selector: "vg-fullscreen" }], directives: [{ type: i1.VgMedia, selector: "[vgMedia]", inputs: ["vgMedia", "vgMaster"] }] });
9
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: VideoComponent, decorators: [{
10
- type: Component,
11
- args: [{ selector: 'app-video', template: "<vg-player>\r\n <vg-controls vgFor=\"__VG__VIDEO__\" >\r\n <vg-play-pause></vg-play-pause>\r\n <vg-scrub-bar>\r\n <vg-scrub-bar-current-time></vg-scrub-bar-current-time>\r\n <vg-scrub-bar-buffering-time></vg-scrub-bar-buffering-time>\r\n </vg-scrub-bar>\r\n <vg-time-display vgProperty=\"left\" vgFormat=\"mm:ss\"></vg-time-display>\r\n\r\n <!-- <vg-volume></vg-volume> -->\r\n <vg-mute></vg-mute>\r\n\r\n <vg-fullscreen></vg-fullscreen>\r\n </vg-controls>\r\n\r\n <video\r\n id=\"__VG__VIDEO__\"\r\n #media\r\n [vgMedia]=\"$any(media)\"\r\n preload=\"auto\"\r\n style=\"width: 100%;\"\r\n >\r\n <source [src]=\"url\" type=\"video/mp4\">\r\n </video>\r\n</vg-player>\r\n", styles: [":host{width:100%}\n"] }]
12
- }], ctorParameters: function () { return []; }, propDecorators: { url: [{
13
- type: Input
14
- }] } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC92aWRlby92aWRlby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3ZpZGVvL3ZpZGVvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLGNBQWM7SUFJekIsZ0JBQWdCLENBQUM7OzRHQUpOLGNBQWM7Z0dBQWQsY0FBYyx5RUNQM0Isd3RCQXlCQTs0RkRsQmEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXOzBFQU1aLEdBQUc7c0JBQVgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXZpZGVvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlkZW8uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpZGVvLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZGVvQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgdXJsOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIFxyXG59IiwiPHZnLXBsYXllcj5cclxuICA8dmctY29udHJvbHMgdmdGb3I9XCJfX1ZHX19WSURFT19fXCIgPlxyXG4gICAgPHZnLXBsYXktcGF1c2U+PC92Zy1wbGF5LXBhdXNlPlxyXG4gICAgPHZnLXNjcnViLWJhcj5cclxuICAgICAgPHZnLXNjcnViLWJhci1jdXJyZW50LXRpbWU+PC92Zy1zY3J1Yi1iYXItY3VycmVudC10aW1lPlxyXG4gICAgICA8dmctc2NydWItYmFyLWJ1ZmZlcmluZy10aW1lPjwvdmctc2NydWItYmFyLWJ1ZmZlcmluZy10aW1lPlxyXG4gICAgPC92Zy1zY3J1Yi1iYXI+XHJcbiAgICA8dmctdGltZS1kaXNwbGF5IHZnUHJvcGVydHk9XCJsZWZ0XCIgdmdGb3JtYXQ9XCJtbTpzc1wiPjwvdmctdGltZS1kaXNwbGF5PlxyXG5cclxuICAgIDwhLS0gPHZnLXZvbHVtZT48L3ZnLXZvbHVtZT4gLS0+XHJcbiAgICA8dmctbXV0ZT48L3ZnLW11dGU+XHJcblxyXG4gICAgPHZnLWZ1bGxzY3JlZW4+PC92Zy1mdWxsc2NyZWVuPlxyXG4gIDwvdmctY29udHJvbHM+XHJcblxyXG4gIDx2aWRlb1xyXG4gICAgaWQ9XCJfX1ZHX19WSURFT19fXCJcclxuICAgICNtZWRpYVxyXG4gICAgW3ZnTWVkaWFdPVwiJGFueShtZWRpYSlcIlxyXG4gICAgcHJlbG9hZD1cImF1dG9cIlxyXG4gICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxyXG4gICAgPlxyXG4gICAgPHNvdXJjZSBbc3JjXT1cInVybFwiIHR5cGU9XCJ2aWRlby9tcDRcIj5cclxuICA8L3ZpZGVvPlxyXG48L3ZnLXBsYXllcj5cclxuIl19
@@ -1,181 +0,0 @@
1
- import { Component, Input, Inject, LOCALE_ID } from '@angular/core';
2
- import { ToolsUtil } from "../../../core/utils/ToolsUtil";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../../core/services/http.service";
5
- import * as i2 from "ng-zorro-antd/descriptions";
6
- import * as i3 from "ng-zorro-antd/tree-select";
7
- import * as i4 from "ng-zorro-antd/select";
8
- import * as i5 from "../video/video.component";
9
- import * as i6 from "ng-zorro-antd/rate";
10
- import * as i7 from "../quill-editor/quill-editor.component";
11
- import * as i8 from "@angular/common";
12
- import * as i9 from "@angular/forms";
13
- import * as i10 from "ng-zorro-antd/image";
14
- import * as i11 from "../../../core/pipe/image-pipe.pipe";
15
- export class ViewFormComponent {
16
- constructor(injector, locale, httpService) {
17
- this.injector = injector;
18
- this.locale = locale;
19
- this.httpService = httpService;
20
- this.dicts = {};
21
- this.column = { xs: 8, sm: 16, md: 24 };
22
- }
23
- set items(items) {
24
- this.formOpts = {
25
- type: 'view',
26
- items: items
27
- };
28
- }
29
- ngOnInit() {
30
- setTimeout(() => {
31
- console.log("TEST RIGHT");
32
- console.log('atrForm.value', this.atrForm.value);
33
- console.log('atrForm.value formOpts', this.formOpts);
34
- }, 1150);
35
- }
36
- isShow(isHidden, operator) {
37
- if (isHidden) {
38
- return false;
39
- }
40
- let isShow = false;
41
- if (!operator || operator == null || operator == "") {
42
- return true;
43
- }
44
- else if (operator.indexOf('&&') > 0) {
45
- // a|eq|b &&c|eq|d
46
- const ops = operator.split('&&');
47
- if (ops.length > 1) {
48
- // tslint:disable-next-line:prefer-for-of
49
- for (let i = 0; i < ops.length; i++) {
50
- isShow = true;
51
- if (!this.checkIsShowBase(ops[i].split('|'))) {
52
- isShow = false;
53
- break;
54
- }
55
- }
56
- }
57
- }
58
- else if (operator.indexOf('||') > 0) {
59
- // a|eq|b||c|eq|d
60
- const ops = operator.split('&&');
61
- if (ops.length > 1) {
62
- for (let i = 0; i < ops.length; i++) {
63
- isShow = false;
64
- if (this.checkIsShowBase(ops[i].split('|'))) {
65
- isShow = true;
66
- break;
67
- }
68
- }
69
- }
70
- }
71
- else {
72
- let op = operator.split("|");
73
- isShow = this.checkIsShowBase(op);
74
- }
75
- return isShow;
76
- }
77
- checkIsShowBase(op) {
78
- let isShow = false;
79
- if (op.length > 1) {
80
- let value = this.atrForm.get(op[0]).value;
81
- isShow = this.compare(value, op[1], op[2]);
82
- }
83
- else
84
- isShow = false;
85
- return isShow;
86
- }
87
- compare(value, operator, target) {
88
- let isRight = false;
89
- switch (operator) {
90
- case 'eq':
91
- if (value == target) {
92
- isRight = true;
93
- }
94
- break;
95
- case 'gh':
96
- if (value >= target) {
97
- isRight = true;
98
- }
99
- break;
100
- case 'notEmpty':
101
- isRight = false;
102
- if (value) {
103
- isRight = true;
104
- }
105
- break;
106
- case 'empty':
107
- isRight = false;
108
- if (!value) {
109
- isRight = true;
110
- }
111
- break;
112
- default:
113
- isRight = false;
114
- break;
115
- }
116
- return isRight;
117
- }
118
- getCascaderLabel(value, item) {
119
- let result = this.getCascaderDefultV(item.dictList, value, 0, []);
120
- if (item.dictList[0].userObject?.showName) {
121
- return result[result.length - 1] || value;
122
- }
123
- return result || value;
124
- }
125
- getSelectCLabel(value, arr, key = 'key', valueKey = 'value') {
126
- if (ToolsUtil.isEmpty(value)) {
127
- return '';
128
- }
129
- let result = arr.filter((item) => {
130
- if (ToolsUtil.isArray(value)) {
131
- return value.some((v) => item[key] == v);
132
- }
133
- return value == item[key];
134
- });
135
- return result && result.length > 0 ? result.map((v) => v[valueKey]).join(",") : result[valueKey];
136
- }
137
- getSelectLabel(value, arr) {
138
- // console.log(value, arr)
139
- let result = arr.filter((item) => value == item.key || value == item.id);
140
- return result && result.length > 0 ? (result[0].title || result[0].typeName) : value;
141
- }
142
- getTagLabel(value, key = 'label') {
143
- return value ? value.map((v) => v[key]).join() : '';
144
- }
145
- getCascaderDefultV(dictList, value, index, result) {
146
- dictList.forEach((v) => {
147
- if (value[index] == v.value) {
148
- result.push(v.value);
149
- if (v.children) {
150
- this.getCascaderDefultV(v.children, value, index + 1, result);
151
- }
152
- return;
153
- }
154
- });
155
- return result;
156
- }
157
- getImgs(imgs) {
158
- if (!imgs) {
159
- return '';
160
- }
161
- return imgs.split(',');
162
- }
163
- }
164
- ViewFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ViewFormComponent, deps: [{ token: i0.Injector }, { token: LOCALE_ID }, { token: i1.HttpService }], target: i0.ɵɵFactoryTarget.Component });
165
- ViewFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ViewFormComponent, selector: "atr-view-form", inputs: { formOpts: "formOpts", atrForm: "atrForm", dicts: "dicts", items: "items" }, ngImport: i0, template: "<nz-descriptions [nzColumn]=\"column\" nzBordered [nzColon]=\"true\" [nzColumn]=\"24\">\r\n <ng-container *ngFor=\"let item of formOpts.items\">\r\n <ng-container *ngIf=\"!item.isHidden\">\r\n <nz-descriptions-item [nzTitle]=\"item.label\" [ngSwitch]=\"item.type\"\r\n *ngIf=\"isShow(item.isHidden,item.operator)\"\r\n [nzSpan]=\"item.span || 6\">\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container *ngFor=\"let o of item.dictList\">\r\n <label *ngIf=\"o.value == atrForm.value[item.key]\">{{o.label}}</label>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'treeSelect'\">\r\n <nz-tree-select\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n [(ngModel)]=\"atrForm.value[item.key]\"\r\n [nzDisabled]=\"true\"\r\n >\r\n </nz-tree-select>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n {{getSelectLabel(atrForm.value[item.key],dicts[item.dictCode])}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'selectCus'\">\r\n {{getSelectLabel(atrForm.value[item.key],item.dictList)}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'selectc'\">\r\n {{getSelectCLabel(atrForm.value[item.key],item.dictList,'value','label')}}\r\n<!-- <nz-select-->\r\n<!-- [nzDisabled]=\"true\"-->\r\n<!-- [(ngModel)]=\"atrForm.value[item.key]\"-->\r\n<!-- >-->\r\n<!-- <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.label\"-->\r\n<!-- [nzValue]=\"o.value\"></nz-option>-->\r\n<!-- </nz-select>-->\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'sceneUser'\">\r\n <nz-select\r\n [nzDisabled]=\"true\"\r\n [(ngModel)]=\"atrForm.value[item.key]\"\r\n >\r\n <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.title\"\r\n [nzValue]=\"o.key\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{atrForm.value[item.key]}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n {{atrForm.value[item.key] | date:(item.dateFormat || 'yyyy-MM-dd')}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dateTime'\">\r\n {{atrForm.value[item.key] | date:(item.dateFormat || 'yyyy-MM-dd 00:00:00')}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cascader'\">\r\n {{getCascaderLabel(atrForm.value[item.key],item)}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'tags'\">\r\n {{getTagLabel(atrForm.value[item.key], 'name')}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <ng-container *ngFor=\"let img of getImgs(atrForm.value[item.key])\">\r\n <div>\r\n <img *ngIf=\"!img.endsWith('.mp4')\" nz-image style=\"max-width: 200px;max-height: 200px\" [nzSrc]=\"img | ossImg\">\r\n <app-video *ngIf=\"img.endsWith('.mp4')\" style=\"max-width: 200px;max-height: 200px\" [url]=\"img | ossImg\"></app-video>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rate'\">\r\n <nz-rate [nzDisabled]=\"true\"\r\n [(ngModel)]=\"atrForm.value[item.key]\"></nz-rate>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <div>\r\n <app-quill-editor [(ngModel)]=\"atrForm.value[item.key]\" style=\"width: 60%\" [readOnly]=\"true\"\r\n [styles]=\"{height:item.height > 0 ? item.height + 'px' : '250px'}\"></app-quill-editor>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n </nz-descriptions-item>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n</nz-descriptions>\r\n", styles: [":host img{max-width:200px;max-height:200px}\n"], components: [{ type: i2.NzDescriptionsComponent, selector: "nz-descriptions", inputs: ["nzBordered", "nzLayout", "nzColumn", "nzSize", "nzTitle", "nzExtra", "nzColon"], exportAs: ["nzDescriptions"] }, { type: i2.NzDescriptionsItemComponent, selector: "nz-descriptions-item", inputs: ["nzSpan", "nzTitle"], exportAs: ["nzDescriptionsItem"] }, { type: i3.NzTreeSelectComponent, selector: "nz-tree-select", inputs: ["nzId", "nzAllowClear", "nzShowExpand", "nzShowLine", "nzDropdownMatchSelectWidth", "nzCheckable", "nzHideUnMatched", "nzShowIcon", "nzShowSearch", "nzDisabled", "nzAsyncData", "nzMultiple", "nzDefaultExpandAll", "nzCheckStrictly", "nzVirtualItemSize", "nzVirtualMaxBufferPx", "nzVirtualMinBufferPx", "nzVirtualHeight", "nzExpandedIcon", "nzNotFoundContent", "nzNodes", "nzOpen", "nzSize", "nzPlaceHolder", "nzDropdownStyle", "nzDropdownClassName", "nzBackdrop", "nzStatus", "nzExpandedKeys", "nzDisplayWith", "nzMaxTagCount", "nzMaxTagPlaceholder", "nzTreeTemplate"], outputs: ["nzOpenChange", "nzCleared", "nzRemoved", "nzExpandChange", "nzTreeClick", "nzTreeCheckBoxChange"], exportAs: ["nzTreeSelect"] }, { type: i4.NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzBorderless", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus"], exportAs: ["nzSelect"] }, { type: i4.NzOptionComponent, selector: "nz-option", inputs: ["nzLabel", "nzValue", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }, { type: i5.VideoComponent, selector: "app-video", inputs: ["url"] }, { type: i6.NzRateComponent, selector: "nz-rate", inputs: ["nzAllowClear", "nzAllowHalf", "nzDisabled", "nzAutoFocus", "nzCharacter", "nzCount", "nzTooltips"], outputs: ["nzOnBlur", "nzOnFocus", "nzOnHoverChange", "nzOnKeyDown"], exportAs: ["nzRate"] }, { type: i7.QuillEditorComponent, selector: "app-quill-editor", inputs: ["placeholder", "styles", "value", "readOnly", "needImgSeq"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i8.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i10.NzImageDirective, selector: "img[nz-image]", inputs: ["nzSrc", "nzSrcset", "nzDisablePreview", "nzFallback", "nzPlaceholder"], exportAs: ["nzImage"] }], pipes: { "date": i8.DatePipe, "ossImg": i11.OssImgPipe } });
166
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ViewFormComponent, decorators: [{
167
- type: Component,
168
- args: [{ selector: 'atr-view-form', template: "<nz-descriptions [nzColumn]=\"column\" nzBordered [nzColon]=\"true\" [nzColumn]=\"24\">\r\n <ng-container *ngFor=\"let item of formOpts.items\">\r\n <ng-container *ngIf=\"!item.isHidden\">\r\n <nz-descriptions-item [nzTitle]=\"item.label\" [ngSwitch]=\"item.type\"\r\n *ngIf=\"isShow(item.isHidden,item.operator)\"\r\n [nzSpan]=\"item.span || 6\">\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container *ngFor=\"let o of item.dictList\">\r\n <label *ngIf=\"o.value == atrForm.value[item.key]\">{{o.label}}</label>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'treeSelect'\">\r\n <nz-tree-select\r\n [nzNodes]=\"item.treeList\"\r\n nzShowSearch=\"true\"\r\n nzHideUnMatched=\"true\"\r\n [(ngModel)]=\"atrForm.value[item.key]\"\r\n [nzDisabled]=\"true\"\r\n >\r\n </nz-tree-select>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n {{getSelectLabel(atrForm.value[item.key],dicts[item.dictCode])}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'selectCus'\">\r\n {{getSelectLabel(atrForm.value[item.key],item.dictList)}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'selectc'\">\r\n {{getSelectCLabel(atrForm.value[item.key],item.dictList,'value','label')}}\r\n<!-- <nz-select-->\r\n<!-- [nzDisabled]=\"true\"-->\r\n<!-- [(ngModel)]=\"atrForm.value[item.key]\"-->\r\n<!-- >-->\r\n<!-- <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.label\"-->\r\n<!-- [nzValue]=\"o.value\"></nz-option>-->\r\n<!-- </nz-select>-->\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'sceneUser'\">\r\n <nz-select\r\n [nzDisabled]=\"true\"\r\n [(ngModel)]=\"atrForm.value[item.key]\"\r\n >\r\n <nz-option *ngFor=\"let o of item.dictList\" [nzLabel]=\"o.title\"\r\n [nzValue]=\"o.key\"></nz-option>\r\n </nz-select>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{atrForm.value[item.key]}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n {{atrForm.value[item.key] | date:(item.dateFormat || 'yyyy-MM-dd')}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dateTime'\">\r\n {{atrForm.value[item.key] | date:(item.dateFormat || 'yyyy-MM-dd 00:00:00')}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'cascader'\">\r\n {{getCascaderLabel(atrForm.value[item.key],item)}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'tags'\">\r\n {{getTagLabel(atrForm.value[item.key], 'name')}}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <ng-container *ngFor=\"let img of getImgs(atrForm.value[item.key])\">\r\n <div>\r\n <img *ngIf=\"!img.endsWith('.mp4')\" nz-image style=\"max-width: 200px;max-height: 200px\" [nzSrc]=\"img | ossImg\">\r\n <app-video *ngIf=\"img.endsWith('.mp4')\" style=\"max-width: 200px;max-height: 200px\" [url]=\"img | ossImg\"></app-video>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'rate'\">\r\n <nz-rate [nzDisabled]=\"true\"\r\n [(ngModel)]=\"atrForm.value[item.key]\"></nz-rate>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'editor'\">\r\n <div>\r\n <app-quill-editor [(ngModel)]=\"atrForm.value[item.key]\" style=\"width: 60%\" [readOnly]=\"true\"\r\n [styles]=\"{height:item.height > 0 ? item.height + 'px' : '250px'}\"></app-quill-editor>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n </nz-descriptions-item>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n</nz-descriptions>\r\n", styles: [":host img{max-width:200px;max-height:200px}\n"] }]
169
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
170
- type: Inject,
171
- args: [LOCALE_ID]
172
- }] }, { type: i1.HttpService }]; }, propDecorators: { formOpts: [{
173
- type: Input
174
- }], atrForm: [{
175
- type: Input
176
- }], dicts: [{
177
- type: Input
178
- }], items: [{
179
- type: Input
180
- }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdmlldy1mb3JtL3ZpZXctZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3ZpZXctZm9ybS92aWV3LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBVSxLQUFLLEVBQVksTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUlwRixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPeEQsTUFBTSxPQUFPLGlCQUFpQjtJQWM1QixZQUFzQixRQUFrQixFQUE2QixNQUFjLEVBQVUsV0FBd0I7UUFBL0YsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUE2QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFYNUcsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQVN6QixXQUFNLEdBQVEsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxDQUFBO0lBR3JDLENBQUM7SUFWRCxJQUFhLEtBQUssQ0FBQyxLQUFVO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFPRCxRQUFRO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8s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bkluaXQsIElucHV0LCBJbmplY3RvciwgSW5qZWN0LCBMT0NBTEVfSUR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtBdHJGb3JtT3B0fSBmcm9tIFwiLi4vLi4vLi4vY29yZS9iYXNlL2F0ci1jb21tb25cIjtcclxuaW1wb3J0IHtIdHRwU2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvc2VydmljZXMvaHR0cC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7VG9vbHNVdGlsfSBmcm9tIFwiLi4vLi4vLi4vY29yZS91dGlscy9Ub29sc1V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXRyLXZpZXctZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXctZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdmlldy1mb3JtLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBmb3JtT3B0czogQXRyRm9ybU9wdCB8IGFueTtcclxuICBASW5wdXQoKSBhdHJGb3JtOiBGb3JtR3JvdXAgfCBhbnk7XHJcbiAgQElucHV0KCkgZGljdHM6IGFueSA9IHt9O1xyXG5cclxuICBASW5wdXQoKSBzZXQgaXRlbXMoaXRlbXM6IGFueSkge1xyXG4gICAgdGhpcy5mb3JtT3B0cyA9IHtcclxuICAgICAgdHlwZTogJ3ZpZXcnLFxyXG4gICAgICBpdGVtczogaXRlbXNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb2x1bW46IGFueSA9IHt4czogOCwgc206IDE2LCBtZDogMjR9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGxvY2FsZTogc3RyaW5nLCBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCJURVNUIFJJR0hUXCIpXHJcbiAgICAgIGNvbnNvbGUubG9nKCdhdHJGb3JtLnZhbHVlJywgdGhpcy5hdHJGb3JtLnZhbHVlKVxyXG4gICAgICBjb25zb2xlLmxvZygnYXRyRm9ybS52YWx1ZSBmb3JtT3B0cycsIHRoaXMuZm9ybU9wdHMpXHJcbiAgICB9LCAxMTUwKVxyXG4gIH1cclxuXHJcbiAgaXNTaG93KGlzSGlkZGVuOiBhbnksIG9wZXJhdG9yOiBhbnkpIHtcclxuICAgIGlmIChpc0hpZGRlbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsZXQgaXNTaG93ID0gZmFsc2U7XHJcbiAgICBpZiAoIW9wZXJhdG9yIHx8IG9wZXJhdG9yID09IG51bGwgfHwgb3BlcmF0b3IgPT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAob3BlcmF0b3IuaW5kZXhPZignJiYnKSA+IDApIHtcclxuICAgICAgLy8gYXxlcXxiICYmY3xlcXxkXHJcbiAgICAgIGNvbnN0IG9wcyA9IG9wZXJhdG9yLnNwbGl0KCcmJicpO1xyXG4gICAgICBpZiAob3BzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpc1Nob3cgPSB0cnVlXHJcbiAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tJc1Nob3dCYXNlKG9wc1tpXS5zcGxpdCgnfCcpKSkge1xyXG4gICAgICAgICAgICBpc1Nob3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wZXJhdG9yLmluZGV4T2YoJ3x8JykgPiAwKSB7XHJcbiAgICAgIC8vIGF8ZXF8Ynx8Y3xlcXxkXHJcbiAgICAgIGNvbnN0IG9wcyA9IG9wZXJhdG9yLnNwbGl0KCcmJicpO1xyXG4gICAgICBpZiAob3BzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaXNTaG93ID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAodGhpcy5jaGVja0lzU2hvd0Jhc2Uob3BzW2ldLnNwbGl0KCd8JykpKSB7XHJcbiAgICAgICAgICAgIGlzU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IG9wID0gb3BlcmF0b3Iuc3BsaXQoXCJ8XCIpO1xyXG4gICAgICBpc1Nob3cgPSB0aGlzLmNoZWNrSXNTaG93QmFzZShvcCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNTaG93O1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJc1Nob3dCYXNlKG9wOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGxldCBpc1Nob3cgPSBmYWxzZTtcclxuICAgIGlmIChvcC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuYXRyRm9ybS5nZXQob3BbMF0pLnZhbHVlO1xyXG4gICAgICBpc1Nob3cgPSB0aGlzLmNvbXBhcmUodmFsdWUsIG9wWzFdLCBvcFsyXSlcclxuICAgIH0gZWxzZVxyXG4gICAgICBpc1Nob3cgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gaXNTaG93O1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZSh2YWx1ZTogYW55LCBvcGVyYXRvcjogYW55LCB0YXJnZXQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGlzUmlnaHQgPSBmYWxzZTtcclxuICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcclxuICAgICAgY2FzZSAnZXEnIDpcclxuICAgICAgICBpZiAodmFsdWUgPT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2doJyA6XHJcbiAgICAgICAgaWYgKHZhbHVlID49IHRhcmdldCkge1xyXG4gICAgICAgICAgaXNSaWdodCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdub3RFbXB0eSc6XHJcbiAgICAgICAgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgaXNSaWdodCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdlbXB0eSc6XHJcbiAgICAgICAgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgIGlzUmlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdCA6XHJcbiAgICAgICAgaXNSaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzUmlnaHQ7XHJcbiAgfVxyXG5cclxuICBnZXRDYXNjYWRlckxhYmVsKHZhbHVlOiBhbnksIGl0ZW06IGFueSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuZ2V0Q2FzY2FkZXJEZWZ1bHRWKGl0ZW0uZGljdExpc3QsIHZhbHVlLCAwLCBbXSk7XHJcbiAgICBpZiAoaXRlbS5kaWN0TGlzdFswXS51c2VyT2JqZWN0Py5zaG93TmFtZSkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSB8fCB2YWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQgfHwgdmFsdWVcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdENMYWJlbCh2YWx1ZTogYW55LCBhcnI6IGFueSwga2V5ID0gJ2tleScsIHZhbHVlS2V5ID0gJ3ZhbHVlJykge1xyXG4gICAgaWYgKFRvb2xzVXRpbC5pc0VtcHR5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuICAgIGxldCByZXN1bHQgPSBhcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKFRvb2xzVXRpbC5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5zb21lKCh2OiBhbnkpID0+IGl0ZW1ba2V5XSA9PSB2KVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBpdGVtW2tleV1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwID8gcmVzdWx0Lm1hcCgodjogYW55KSA9PiB2W3ZhbHVlS2V5XSkuam9pbihcIixcIikgOiByZXN1bHRbdmFsdWVLZXldO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0TGFiZWwodmFsdWU6IGFueSwgYXJyOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlLCBhcnIpXHJcbiAgICBsZXQgcmVzdWx0ID0gYXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiB2YWx1ZSA9PSBpdGVtLmtleSB8fCB2YWx1ZSA9PSBpdGVtLmlkKVxyXG4gICAgcmV0dXJuIHJlc3VsdCAmJiByZXN1bHQubGVuZ3RoID4gMCA/IChyZXN1bHRbMF0udGl0bGUgfHwgcmVzdWx0WzBdLnR5cGVOYW1lKSA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFnTGFiZWwodmFsdWU6IGFueSwga2V5ID0gJ2xhYmVsJykge1xyXG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUubWFwKCh2OiBhbnkpID0+IHZba2V5XSkuam9pbigpIDogJydcclxuICB9XHJcblxyXG4gIGdldENhc2NhZGVyRGVmdWx0VihkaWN0TGlzdDogYW55LCB2YWx1ZTogYW55LCBpbmRleDogYW55LCByZXN1bHQ6IGFueSkge1xyXG4gICAgZGljdExpc3QuZm9yRWFjaCgodjogYW55KSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZVtpbmRleF0gPT0gdi52YWx1ZSkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKHYudmFsdWUpXHJcbiAgICAgICAgaWYgKHYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2FzY2FkZXJEZWZ1bHRWKHYuY2hpbGRyZW4sIHZhbHVlLCBpbmRleCArIDEsIHJlc3VsdClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRJbWdzKGltZ3M6IGFueSkge1xyXG4gICAgaWYgKCFpbWdzKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBpbWdzLnNwbGl0KCcsJylcclxuICB9XHJcbn1cclxuIiwiPG56LWRlc2NyaXB0aW9ucyAgW256Q29sdW1uXT1cImNvbHVtblwiIG56Qm9yZGVyZWQgW256Q29sb25dPVwidHJ1ZVwiIFtuekNvbHVtbl09XCIyNFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmb3JtT3B0cy5pdGVtc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5pc0hpZGRlblwiPlxyXG4gICAgICAgICAgICA8bnotZGVzY3JpcHRpb25zLWl0ZW0gW256VGl0bGVdPVwiaXRlbS5sYWJlbFwiIFtuZ1N3aXRjaF09XCJpdGVtLnR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc1Nob3coaXRlbS5pc0hpZGRlbixpdGVtLm9wZXJhdG9yKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbnpTcGFuXT1cIml0ZW0uc3BhbiB8fCA2XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbyBvZiBpdGVtLmRpY3RMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAgKm5nSWY9XCJvLnZhbHVlID09IGF0ckZvcm0udmFsdWVbaXRlbS5rZXldXCI+e3tvLmxhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndHJlZVNlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bnotdHJlZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuek5vZGVzXT1cIml0ZW0udHJlZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnpTaG93U2VhcmNoPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuekhpZGVVbk1hdGNoZWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXRyRm9ybS52YWx1ZVtpdGVtLmtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbnotdHJlZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0U2VsZWN0TGFiZWwoYXRyRm9ybS52YWx1ZVtpdGVtLmtleV0sZGljdHNbaXRlbS5kaWN0Q29kZV0pfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdEN1cydcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2dldFNlbGVjdExhYmVsKGF0ckZvcm0udmFsdWVbaXRlbS5rZXldLGl0ZW0uZGljdExpc3QpfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdGMnXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7Z2V0U2VsZWN0Q0xhYmVsKGF0ckZvcm0udmFsdWVbaXRlbS5rZXldLGl0ZW0uZGljdExpc3QsJ3ZhbHVlJywnbGFiZWwnKX19XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxuei1zZWxlY3QtLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJ0cnVlXCItLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF0ckZvcm0udmFsdWVbaXRlbS5rZXldXCItLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgPG56LW9wdGlvbiAqbmdGb3I9XCJsZXQgbyBvZiBpdGVtLmRpY3RMaXN0XCIgW256TGFiZWxdPVwiby5sYWJlbFwiLS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuelZhbHVlXT1cIm8udmFsdWVcIj48L256LW9wdGlvbj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgPC9uei1zZWxlY3Q+LS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzY2VuZVVzZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG56LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF0ckZvcm0udmFsdWVbaXRlbS5rZXldXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuei1vcHRpb24gKm5nRm9yPVwibGV0IG8gb2YgaXRlbS5kaWN0TGlzdFwiIFtuekxhYmVsXT1cIm8udGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuelZhbHVlXT1cIm8ua2V5XCI+PC9uei1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uei1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAge3thdHJGb3JtLnZhbHVlW2l0ZW0ua2V5XX19XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7YXRyRm9ybS52YWx1ZVtpdGVtLmtleV0gfCBkYXRlOihpdGVtLmRhdGVGb3JtYXQgfHwgJ3l5eXktTU0tZGQnKX19XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVGltZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2F0ckZvcm0udmFsdWVbaXRlbS5rZXldIHwgZGF0ZTooaXRlbS5kYXRlRm9ybWF0IHx8ICd5eXl5LU1NLWRkIDAwOjAwOjAwJyl9fVxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FzY2FkZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tnZXRDYXNjYWRlckxhYmVsKGF0ckZvcm0udmFsdWVbaXRlbS5rZXldLGl0ZW0pfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhZ3MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tnZXRUYWdMYWJlbChhdHJGb3JtLnZhbHVlW2l0ZW0ua2V5XSwgJ25hbWUnKX19XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbWcgb2YgZ2V0SW1ncyhhdHJGb3JtLnZhbHVlW2l0ZW0ua2V5XSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgICpuZ0lmPVwiIWltZy5lbmRzV2l0aCgnLm1wNCcpXCIgbnotaW1hZ2UgIHN0eWxlPVwibWF4LXdpZHRoOiAyMDBweDttYXgtaGVpZ2h0OiAyMDBweFwiIFtuelNyY109XCJpbWcgfCBvc3NJbWdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdmlkZW8gKm5nSWY9XCJpbWcuZW5kc1dpdGgoJy5tcDQnKVwiIHN0eWxlPVwibWF4LXdpZHRoOiAyMDBweDttYXgtaGVpZ2h0OiAyMDBweFwiICBbdXJsXT1cImltZyB8IG9zc0ltZ1wiPjwvYXBwLXZpZGVvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG56LXJhdGUgW256RGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhdHJGb3JtLnZhbHVlW2l0ZW0ua2V5XVwiPjwvbnotcmF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VkaXRvcidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXF1aWxsLWVkaXRvciBbKG5nTW9kZWwpXT1cImF0ckZvcm0udmFsdWVbaXRlbS5rZXldXCIgc3R5bGU9XCJ3aWR0aDogNjAlXCIgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVzXT1cIntoZWlnaHQ6aXRlbS5oZWlnaHQgPiAwID8gaXRlbS5oZWlnaHQgKyAncHgnIDogJzI1MHB4J31cIj48L2FwcC1xdWlsbC1lZGl0b3I+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8L256LWRlc2NyaXB0aW9ucy1pdGVtPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuPC9uei1kZXNjcmlwdGlvbnM+XHJcbiJdfQ==