mmhglobal-dynamicform 1.2.3 → 1.3.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 +14 -2
- package/esm2020/lib/directives/fieldelement.directive.mjs +16 -0
- package/esm2020/lib/directives/scrollbar.theme.directive.mjs +43 -0
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +464 -0
- package/esm2020/lib/services/main.service.mjs +752 -0
- package/esm2020/lib/services/zcomponent.debug.service.mjs +621 -0
- package/esm2020/lib/services/zcomponent.service.mjs +81 -0
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +265 -0
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +67 -0
- package/esm2020/lib/uicontent/uicontent.component.mjs +41 -0
- package/esm2020/lib/uiheader/uiheader.component.mjs +66 -0
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +35 -0
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +37 -0
- package/{esm2015/lib/uipage/uipage.component.js → esm2020/lib/uipage/uipage.component.mjs} +12 -13
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +41 -0
- package/esm2020/lib/zbullet/zbullet.component.mjs +74 -0
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +171 -0
- package/esm2020/lib/zcard/zcard.component.mjs +72 -0
- package/esm2020/lib/zchart/zchart.component.mjs +201 -0
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +166 -0
- package/esm2020/lib/zchip/zchip.component.mjs +121 -0
- package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +169 -0
- package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +60 -0
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +70 -0
- package/esm2020/lib/zdatetime/dateParser.pipe.mjs +30 -0
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +285 -0
- package/esm2020/lib/zdiv/zdiv.component.mjs +50 -0
- package/esm2020/lib/zdiv/zdiv.pipe.mjs +31 -0
- package/esm2020/lib/zform/zform.component.mjs +147 -0
- package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +49 -0
- package/esm2020/lib/zgauge/zgauge.component.mjs +148 -0
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +135 -0
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +490 -0
- package/esm2020/lib/zgrid/zgrid.component.mjs +847 -0
- package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +17 -0
- package/esm2020/lib/zimg/zimg.component.mjs +121 -0
- package/esm2020/lib/zkcard/zkcard.component.mjs +367 -0
- package/esm2020/lib/zlabel/zlabel.component.mjs +62 -0
- package/esm2020/lib/zmfb/zmfb.component.mjs +215 -0
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +120 -0
- package/esm2020/lib/zmodal/zmodal.component.mjs +125 -0
- package/esm2020/lib/znumeric/znumeric.component.mjs +119 -0
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +352 -0
- package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +204 -0
- package/esm2020/lib/zreport/zreport.component.mjs +105 -0
- package/esm2020/lib/zreport/zreport.config.mjs +117 -0
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +267 -0
- package/{esm2015/lib/zscheduler/zscheduler.toolbar.component.js → esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs} +55 -19
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +577 -0
- package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +35 -0
- package/esm2020/lib/ztab/ztab.component.mjs +187 -0
- package/esm2020/lib/ztab/ztab.pipe.mjs +26 -0
- package/esm2020/lib/ztext/ztext.component.mjs +297 -0
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +109 -0
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +57 -0
- package/esm2020/lib/ztree/ztree.component.mjs +380 -0
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +544 -0
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +92 -0
- package/esm2020/lib/zudf/zudf.component.mjs +205 -0
- package/esm2020/lib/zunknown/zunknown.component.mjs +20 -0
- package/esm2020/lib/zupload/zupload.component.mjs +359 -0
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +216 -0
- package/esm2020/mmhglobal-dynamicform.mjs +5 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/mmhglobal-dynamicform.mjs +10790 -0
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -0
- package/fesm2020/mmhglobal-dynamicform.mjs +10779 -0
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -0
- package/lib/directives/fieldelement.directive.d.ts +3 -0
- package/lib/directives/scrollbar.theme.directive.d.ts +3 -0
- package/lib/mmhglobal-dynamicform.module.d.ts +92 -0
- package/lib/services/main.service.d.ts +3 -0
- package/lib/services/zcomponent.debug.service.d.ts +8 -5
- package/lib/services/zcomponent.service.d.ts +7 -2
- package/lib/uiactionbutton/uiactionbutton.component.d.ts +3 -0
- package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +3 -0
- package/lib/uicontent/uicontent.component.d.ts +3 -0
- package/lib/uiheader/uiheader.component.d.ts +3 -0
- package/lib/uimenubutton/uimenubutton.component.d.ts +3 -0
- package/lib/uimenucontent/uimenucontent.component.d.ts +3 -0
- package/lib/uipage/uipage.component.d.ts +3 -0
- package/lib/uivalidationmessage/uivalidationmessage.component.d.ts +3 -0
- package/lib/zbullet/zbullet.component.d.ts +3 -0
- package/lib/zbuttons/zbuttons.component.d.ts +3 -0
- package/lib/zcard/zcard.component.d.ts +3 -0
- package/lib/zchart/zchart.component.d.ts +3 -0
- package/lib/zcheckbox/zcheckbox.component.d.ts +3 -0
- package/lib/zchip/zchip.component.d.ts +3 -0
- package/lib/zcodeeditor/zcodeeditor.component.d.ts +3 -0
- package/lib/zcodeeditor/zcodeeditor.pipe.d.ts +3 -0
- package/lib/zdaterange/zdaterange.component.d.ts +3 -0
- package/lib/zdatetime/dateParser.pipe.d.ts +3 -0
- package/lib/zdatetime/zdatetime.component.d.ts +3 -0
- package/lib/zdiv/zdiv.component.d.ts +3 -0
- package/lib/zdiv/zdiv.pipe.d.ts +3 -0
- package/lib/zform/zform.component.d.ts +3 -0
- package/lib/zformcontrol/zformcontrol.component.d.ts +3 -0
- package/lib/zgauge/zgauge.component.d.ts +3 -0
- package/lib/zgrid/date-range-cell-filter.component.d.ts +3 -0
- package/lib/zgrid/zgrid.binding.directive.d.ts +3 -0
- package/lib/zgrid/zgrid.component.d.ts +4 -1
- package/lib/zgrid/zgrid.popup.anchor-target.directive.d.ts +3 -0
- package/lib/zimg/zimg.component.d.ts +3 -0
- package/lib/zkcard/zkcard.component.d.ts +3 -0
- package/lib/zlabel/zlabel.component.d.ts +3 -0
- package/lib/zmfb/zmfb.component.d.ts +3 -0
- package/lib/zmodal/zmodal-mobile.component.d.ts +3 -0
- package/lib/zmodal/zmodal.component.d.ts +3 -0
- package/lib/znumeric/znumeric.component.d.ts +3 -0
- package/lib/zpostselectinput/zpostselectinput.component.d.ts +3 -0
- package/lib/zquerybuilder/zquerybuilder.component.d.ts +3 -0
- package/lib/zreport/zreport.component.d.ts +3 -0
- package/lib/zreport/zreport.config.d.ts +3 -0
- package/lib/zscheduler/zscheduler.component.d.ts +3 -0
- package/lib/zscheduler/zscheduler.toolbar.component.d.ts +3 -0
- package/lib/zselectmultiple/zselectmultiple.component.d.ts +3 -0
- package/lib/zselectmultiple/zselectmultiple.directive.d.ts +3 -0
- package/lib/ztab/ztab.component.d.ts +3 -0
- package/lib/ztab/ztab.pipe.d.ts +3 -0
- package/lib/ztext/ztext.component.d.ts +3 -0
- package/lib/ztextarea/ztextarea.component.d.ts +3 -0
- package/lib/ztexteditor/ztexteditor.component.d.ts +3 -0
- package/lib/ztree/ztree.component.d.ts +3 -0
- package/lib/ztreelist/ztreelist.component.d.ts +3 -0
- package/lib/ztrendcard/ztrendcard.component.d.ts +3 -0
- package/lib/zudf/zudf.component.d.ts +3 -0
- package/lib/zunknown/zunknown.component.d.ts +3 -0
- package/lib/zupload/zupload.component.d.ts +3 -0
- package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +3 -0
- package/mmhglobal-dynamicform.d.ts +1 -2
- package/package.json +20 -11
- package/bundles/mmhglobal-dynamicform.umd.js +0 -11360
- package/bundles/mmhglobal-dynamicform.umd.js.map +0 -1
- package/bundles/mmhglobal-dynamicform.umd.min.js +0 -16
- package/bundles/mmhglobal-dynamicform.umd.min.js.map +0 -1
- package/esm2015/lib/directives/fieldelement.directive.js +0 -15
- package/esm2015/lib/directives/scrollbar.theme.directive.js +0 -42
- package/esm2015/lib/mmhglobal-dynamicform.module.js +0 -314
- package/esm2015/lib/services/main.service.js +0 -766
- package/esm2015/lib/services/zcomponent.debug.service.js +0 -626
- package/esm2015/lib/services/zcomponent.service.js +0 -167
- package/esm2015/lib/uiactionbutton/uiactionbutton.component.js +0 -271
- package/esm2015/lib/uiappmenucontent/uiappmenucontent.component.js +0 -69
- package/esm2015/lib/uicontent/uicontent.component.js +0 -41
- package/esm2015/lib/uiheader/uiheader.component.js +0 -65
- package/esm2015/lib/uimenubutton/uimenubutton.component.js +0 -40
- package/esm2015/lib/uimenucontent/uimenucontent.component.js +0 -34
- package/esm2015/lib/uivalidationmessage/uivalidationmessage.component.js +0 -39
- package/esm2015/lib/zbullet/zbullet.component.js +0 -71
- package/esm2015/lib/zbuttons/zbuttons.component.js +0 -168
- package/esm2015/lib/zcard/zcard.component.js +0 -68
- package/esm2015/lib/zchart/zchart.component.js +0 -199
- package/esm2015/lib/zcheckbox/zcheckbox.component.js +0 -158
- package/esm2015/lib/zchip/zchip.component.js +0 -117
- package/esm2015/lib/zcodeeditor/zcodeeditor.component.js +0 -163
- package/esm2015/lib/zcodeeditor/zcodeeditor.pipe.js +0 -56
- package/esm2015/lib/zdaterange/zdaterange.component.js +0 -63
- package/esm2015/lib/zdatetime/dateParser.pipe.js +0 -26
- package/esm2015/lib/zdatetime/zdatetime.component.js +0 -279
- package/esm2015/lib/zdiv/zdiv.component.js +0 -48
- package/esm2015/lib/zdiv/zdiv.pipe.js +0 -27
- package/esm2015/lib/zform/zform.component.js +0 -148
- package/esm2015/lib/zformcontrol/zformcontrol.component.js +0 -49
- package/esm2015/lib/zgauge/zgauge.component.js +0 -146
- package/esm2015/lib/zgrid/date-range-cell-filter.component.js +0 -102
- package/esm2015/lib/zgrid/zgrid.binding.directive.js +0 -493
- package/esm2015/lib/zgrid/zgrid.component.js +0 -834
- package/esm2015/lib/zgrid/zgrid.popup.anchor-target.directive.js +0 -16
- package/esm2015/lib/zimg/zimg.component.js +0 -123
- package/esm2015/lib/zkcard/zkcard.component.js +0 -372
- package/esm2015/lib/zlabel/zlabel.component.js +0 -59
- package/esm2015/lib/zmfb/zmfb.component.js +0 -215
- package/esm2015/lib/zmodal/zmodal-mobile.component.js +0 -119
- package/esm2015/lib/zmodal/zmodal.component.js +0 -130
- package/esm2015/lib/znumeric/znumeric.component.js +0 -114
- package/esm2015/lib/zpostselectinput/zpostselectinput.component.js +0 -345
- package/esm2015/lib/zquerybuilder/zquerybuilder.component.js +0 -196
- package/esm2015/lib/zreport/zreport.component.js +0 -104
- package/esm2015/lib/zreport/zreport.config.js +0 -115
- package/esm2015/lib/zscheduler/zscheduler.component.js +0 -268
- package/esm2015/lib/zselectmultiple/zselectmultiple.component.js +0 -565
- package/esm2015/lib/zselectmultiple/zselectmultiple.directive.js +0 -28
- package/esm2015/lib/ztab/ztab.component.js +0 -180
- package/esm2015/lib/ztab/ztab.pipe.js +0 -22
- package/esm2015/lib/ztext/ztext.component.js +0 -286
- package/esm2015/lib/ztextarea/ztextarea.component.js +0 -104
- package/esm2015/lib/ztexteditor/ztexteditor.component.js +0 -52
- package/esm2015/lib/ztree/ztree.component.js +0 -374
- package/esm2015/lib/ztreelist/ztreelist.component.js +0 -539
- package/esm2015/lib/ztrendcard/ztrendcard.component.js +0 -89
- package/esm2015/lib/zudf/zudf.component.js +0 -206
- package/esm2015/lib/zunknown/zunknown.component.js +0 -20
- package/esm2015/lib/zupload/zupload.component.js +0 -358
- package/esm2015/lib/zworkflowbuttons/zworkflowbuttons.component.js +0 -215
- package/esm2015/mmhglobal-dynamicform.js +0 -7
- package/fesm2015/mmhglobal-dynamicform.js +0 -10729
- package/fesm2015/mmhglobal-dynamicform.js.map +0 -1
- package/mmhglobal-dynamicform.metadata.json +0 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/********** Angular **********/
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
|
+
/********** Ionic **********/
|
|
4
|
+
/********** Plugin **********/
|
|
5
|
+
/********** Component & Service **********/
|
|
6
|
+
import { ZComponentProperties, ZComponentHelper } from 'mmhglobal-zcore';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ionic/angular";
|
|
9
|
+
import * as i2 from "@progress/kendo-angular-editor";
|
|
10
|
+
import * as i3 from "@progress/kendo-angular-toolbar";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
import * as i5 from "@angular/forms";
|
|
13
|
+
export class ZtexteditorComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.componentProperties = new ZComponentProperties();
|
|
16
|
+
this.value = "";
|
|
17
|
+
this.labelText = "";
|
|
18
|
+
this.setVisible = (status) => {
|
|
19
|
+
this.componentProperties.isVisible = status;
|
|
20
|
+
this.data.Visible = status;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
ZComponentHelper.setComponentProperties(this);
|
|
25
|
+
ZComponentHelper.registerComponent(this);
|
|
26
|
+
this.widthReduce = this.data.WidthReduce || 60;
|
|
27
|
+
this.heightReduce = this.data.HeightReduce || 560;
|
|
28
|
+
}
|
|
29
|
+
getIon_InvalidClass(form, data) {
|
|
30
|
+
return ZComponentHelper.getIon_InvalidClass(form, data);
|
|
31
|
+
}
|
|
32
|
+
ngOnDestroy() {
|
|
33
|
+
}
|
|
34
|
+
getCompStyle() {
|
|
35
|
+
return {
|
|
36
|
+
"height.px": this.getCompHeight(),
|
|
37
|
+
"width.px": window.innerWidth - this.widthReduce
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
getCompHeight() {
|
|
41
|
+
const h = window.innerHeight - this.heightReduce;
|
|
42
|
+
return (h < 250) ? 250 : h;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
ZtexteditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZtexteditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
+
ZtexteditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: ZtexteditorComponent, selector: "app-ztexteditor", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<ion-item [formGroup]=\"form\" *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"getIon_InvalidClass(form, data)\">\r\n <div class=\"ion-row\" style=\"justify-content: space-between; width: 100%\">\r\n <div *ngIf=\"data.Title\" class=\"title\">{{data.Title}}</div>\r\n\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n position=\"stacked\"\r\n style=\"margin-bottom:10px;\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">\r\n *\r\n </ion-text>\r\n </ion-label>\r\n\r\n <span style=\"flex: 1;\">\r\n <kendo-editor [id]=\"data.Value\"\r\n [formControlName]=\"data.Value\"\r\n [value]=\"value\"\r\n [ngStyle]=\"getCompStyle()\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\">\r\n <kendo-toolbar *ngIf=\"data.ToolBarStyle === 'hidden'\">\r\n </kendo-toolbar>\r\n <kendo-toolbar *ngIf=\"data.ToolBarStyle === 'full'\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFormat></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertFileButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n </kendo-editor>\r\n </span>\r\n </div>\r\n</ion-item>\r\n", styles: [".title{margin:20px 10px 5px;font-size:18px;font-weight:700}\n"], components: [{ type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i2.EditorComponent, selector: "kendo-editor", inputs: ["iframe", "applyToWord", "preserveWhitespace", "resizable", "value", "disabled", "readonly", "schema", "plugins", "placeholder", "pasteCleanupSettings"], outputs: ["valueChange", "focus", "paste", "blur"] }, { type: i3.ToolBarComponent, selector: "kendo-toolbar", inputs: ["overflow", "tabindex", "resizable", "popupSettings", "tabIndex"], outputs: ["open", "close"], exportAs: ["kendoToolBar"] }, { type: i3.ToolBarButtonGroupComponent, selector: "kendo-toolbar-buttongroup", inputs: ["selection", "look", "disabled", "width"], exportAs: ["kendoToolBarButtonGroup"] }, { type: i3.ToolBarButtonComponent, selector: "kendo-toolbar-button", inputs: ["showText", "showIcon", "toggleable", "selected", "fillMode", "themeColor", "text", "look", "togglable", "icon", "iconClass", "imageUrl", "style", "className", "title", "disabled"], outputs: ["click", "pointerdown", "selectedChange"], exportAs: ["kendoToolBarButton"] }, { type: i2.EditorFormatComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFormat]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorFontSizeComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFontSize]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorFontFamilyComponent, selector: "kendo-toolbar-dropdownlist[kendoEditorFontFamily]", inputs: ["data"], outputs: ["valueChange"] }, { type: i2.EditorColorPickerComponent, selector: "kendo-toolbar-colorpicker", inputs: ["disabled", "views", "view", "value", "icon", "paletteSettings", "editorCommand"] }, { type: i2.EditorInsertTableButtonComponent, selector: "kendo-editor-insert-table-button" }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.EditorUndoButtonDirective, selector: "kendo-toolbar-button[kendoEditorUndoButton]" }, { type: i2.EditorRedoButtonDirective, selector: "kendo-toolbar-button[kendoEditorRedoButton]" }, { type: i2.EditorBoldButtonDirective, selector: "kendo-toolbar-button[kendoEditorBoldButton]" }, { type: i2.EditorItalicButtonDirective, selector: "kendo-toolbar-button[kendoEditorItalicButton]" }, { type: i2.EditorUnderlineButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnderlineButton]" }, { type: i2.EditorStrikethroughButtonDirective, selector: "kendo-toolbar-button[kendoEditorStrikethroughButton]" }, { type: i2.EditorSubscriptButtonDirective, selector: "kendo-toolbar-button[kendoEditorSubscriptButton]" }, { type: i2.EditorSuperscriptButtonDirective, selector: "kendo-toolbar-button[kendoEditorSuperscriptButton]" }, { type: i2.EditorAlignLeftButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignLeftButton]" }, { type: i2.EditorAlignCenterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignCenterButton]" }, { type: i2.EditorAlignRightButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignRightButton]" }, { type: i2.EditorAlignJustifyButtonDirective, selector: "kendo-toolbar-button[kendoEditorAlignJustifyButton]" }, { type: i2.EditorForeColorDirective, selector: "[kendoEditorForeColor]" }, { type: i2.EditorBackColorDirective, selector: "[kendoEditorBackColor]" }, { type: i2.EditorInsertUnorderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertUnorderedListButton]" }, { type: i2.EditorInsertOrderedListButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertOrderedListButton]" }, { type: i2.EditorIndentButtonDirective, selector: "kendo-toolbar-button[kendoEditorIndentButton]" }, { type: i2.EditorOutdentButtonDirective, selector: "kendo-toolbar-button[kendoEditorOutdentButton]" }, { type: i2.EditorCreateLinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorCreateLinkButton]" }, { type: i2.EditorUnlinkButtonDirective, selector: "kendo-toolbar-button[kendoEditorUnlinkButton]" }, { type: i2.EditorAddColumnBeforeButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddColumnBeforeButton]" }, { type: i2.EditorAddColumnAfterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddColumnAfterButton]" }, { type: i2.EditorAddRowBeforeButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddRowBeforeButton]" }, { type: i2.EditorAddRowAfterButtonDirective, selector: "kendo-toolbar-button[kendoEditorAddRowAfterButton]" }, { type: i2.EditorDeleteColumnButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteColumnButton]" }, { type: i2.EditorDeleteRowButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteRowButton]" }, { type: i2.EditorDeleteTableButtonDirective, selector: "kendo-toolbar-button[kendoEditorDeleteTableButton]" }, { type: i2.EditorInsertFileButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertFileButton]" }, { type: i2.EditorInsertImageButtonDirective, selector: "kendo-toolbar-button[kendoEditorInsertImageButton]" }, { type: i2.EditorViewSourceButtonDirective, selector: "kendo-toolbar-button[kendoEditorViewSourceButton]" }] });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZtexteditorComponent, decorators: [{
|
|
48
|
+
type: Component,
|
|
49
|
+
args: [{ selector: 'app-ztexteditor', template: "<ion-item [formGroup]=\"form\" *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n [ngClass]=\"getIon_InvalidClass(form, data)\">\r\n <div class=\"ion-row\" style=\"justify-content: space-between; width: 100%\">\r\n <div *ngIf=\"data.Title\" class=\"title\">{{data.Title}}</div>\r\n\r\n <ion-label [attr.for]=\"data.Value\"\r\n *ngIf=\"data.ShowLabel === undefined || data.ShowLabel\"\r\n position=\"stacked\"\r\n style=\"margin-bottom:10px;\">\r\n {{data.Label}}\r\n <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\"\r\n color=\"danger\">\r\n *\r\n </ion-text>\r\n </ion-label>\r\n\r\n <span style=\"flex: 1;\">\r\n <kendo-editor [id]=\"data.Value\"\r\n [formControlName]=\"data.Value\"\r\n [value]=\"value\"\r\n [ngStyle]=\"getCompStyle()\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\">\r\n <kendo-toolbar *ngIf=\"data.ToolBarStyle === 'hidden'\">\r\n </kendo-toolbar>\r\n <kendo-toolbar *ngIf=\"data.ToolBarStyle === 'full'\">\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorUndoButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorRedoButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorBoldButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorItalicButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnderlineButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorStrikethroughButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorSubscriptButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorSuperscriptButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAlignLeftButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignCenterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignRightButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAlignJustifyButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-dropdownlist kendoEditorFormat></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontSize></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-dropdownlist kendoEditorFontFamily></kendo-toolbar-dropdownlist>\r\n <kendo-toolbar-colorpicker kendoEditorForeColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-colorpicker kendoEditorBackColor></kendo-toolbar-colorpicker>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertUnorderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertOrderedListButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorIndentButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorOutdentButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorCreateLinkButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorUnlinkButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-editor-insert-table-button></kendo-editor-insert-table-button>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorAddColumnBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddColumnAfterButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowBeforeButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorAddRowAfterButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorDeleteColumnButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteRowButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorDeleteTableButton></kendo-toolbar-button>\r\n </kendo-toolbar-buttongroup>\r\n <kendo-toolbar-button kendoEditorInsertFileButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorInsertImageButton></kendo-toolbar-button>\r\n <kendo-toolbar-button kendoEditorViewSourceButton></kendo-toolbar-button>\r\n </kendo-toolbar>\r\n </kendo-editor>\r\n </span>\r\n </div>\r\n</ion-item>\r\n", styles: [".title{margin:20px 10px 5px;font-size:18px;font-weight:700}\n"] }]
|
|
50
|
+
}], ctorParameters: function () { return []; }, propDecorators: { data: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], group: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], form: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}] } });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRleHRlZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRleHRlZGl0b3IvenRleHRlZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRleHRlZGl0b3IvenRleHRlZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR3BFLDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFFOUIsMkNBQTJDO0FBQzNDLE9BQU8sRUFDVyxvQkFBb0IsRUFDeEIsZ0JBQWdCLEVBQzdCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7QUFRekIsTUFBTSxPQUFPLG9CQUFvQjtJQVcvQjtRQU5BLHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUcxQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFZUixlQUFVLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDN0IsQ0FBQyxDQUFBO0lBYmUsQ0FBQztJQUVqQixRQUFRO1FBQ04sZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUM7SUFDcEQsQ0FBQztJQU9ELG1CQUFtQixDQUFDLElBQWUsRUFBRSxJQUFZO1FBQy9DLE9BQU8sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxXQUFXO0lBRVgsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVc7U0FDakQsQ0FBQTtJQUNILENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNqRCxPQUFPLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDOztpSEE1Q1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsK0dDcEJqQywwaktBZ0ZBOzJGRDVEYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsaUJBQWlCOzBFQUtsQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpGaWVsZCwgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcyxcclxuICBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16dGV4dGVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3p0ZXh0ZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96dGV4dGVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnRleHRlZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgcHJpdmF0ZSB3aWR0aFJlZHVjZTogbnVtYmVyO1xyXG4gIHByaXZhdGUgaGVpZ2h0UmVkdWNlOiBudW1iZXI7XHJcbiAgcHVibGljIHZhbHVlID0gXCJcIjtcclxuICBsYWJlbFRleHQgPSBcIlwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgdGhpcy53aWR0aFJlZHVjZSA9IHRoaXMuZGF0YS5XaWR0aFJlZHVjZSB8fCA2MDtcclxuICAgIHRoaXMuaGVpZ2h0UmVkdWNlID0gdGhpcy5kYXRhLkhlaWdodFJlZHVjZSB8fCA1NjA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIGdldElvbl9JbnZhbGlkQ2xhc3MoZm9ybTogRm9ybUdyb3VwLCBkYXRhOiBaRmllbGQpIHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldElvbl9JbnZhbGlkQ2xhc3MoZm9ybSwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRDb21wU3R5bGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBcImhlaWdodC5weFwiOiB0aGlzLmdldENvbXBIZWlnaHQoKSxcclxuICAgICAgXCJ3aWR0aC5weFwiOiB3aW5kb3cuaW5uZXJXaWR0aCAtIHRoaXMud2lkdGhSZWR1Y2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29tcEhlaWdodCgpIHtcclxuICAgIGNvbnN0IGggPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLmhlaWdodFJlZHVjZTtcclxuICAgIHJldHVybiAoaCA8IDI1MCkgPyAyNTAgOiBoO1xyXG4gIH1cclxufVxyXG4iLCI8aW9uLWl0ZW0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SW9uX0ludmFsaWRDbGFzcyhmb3JtLCBkYXRhKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJpb24tcm93XCIgc3R5bGU9XCJqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IHdpZHRoOiAxMDAlXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5UaXRsZVwiIGNsYXNzPVwidGl0bGVcIj57e2RhdGEuVGl0bGV9fTwvZGl2PlxyXG5cclxuICAgIDxpb24tbGFiZWwgW2F0dHIuZm9yXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuU2hvd0xhYmVsID09PSB1bmRlZmluZWQgfHwgZGF0YS5TaG93TGFiZWxcIlxyXG4gICAgICAgICAgICAgICBwb3NpdGlvbj1cInN0YWNrZWRcIlxyXG4gICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1ib3R0b206MTBweDtcIj5cclxuICAgICAge3tkYXRhLkxhYmVsfX1cclxuICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWRGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQpXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCI+XHJcbiAgICAgICAgKlxyXG4gICAgICA8L2lvbi10ZXh0PlxyXG4gICAgPC9pb24tbGFiZWw+XHJcblxyXG4gICAgPHNwYW4gc3R5bGU9XCJmbGV4OiAxO1wiPlxyXG4gICAgICA8a2VuZG8tZWRpdG9yIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29tcFN0eWxlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhciAqbmdJZj1cImRhdGEuVG9vbEJhclN0eWxlID09PSAnaGlkZGVuJ1wiPlxyXG4gICAgICAgIDwva2VuZG8tdG9vbGJhcj5cclxuICAgICAgICA8a2VuZG8tdG9vbGJhciAqbmdJZj1cImRhdGEuVG9vbEJhclN0eWxlID09PSAnZnVsbCdcIj5cclxuICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JVbmRvQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclJlZG9CdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JCb2xkQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckl0YWxpY0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JVbmRlcmxpbmVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yU3RyaWtldGhyb3VnaEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclN1YnNjcmlwdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JTdXBlcnNjcmlwdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduTGVmdEJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBbGlnbkNlbnRlckJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBbGlnblJpZ2h0QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFsaWduSnVzdGlmeUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0IGtlbmRvRWRpdG9yRm9ybWF0Pjwva2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Q+XHJcbiAgICAgICAgICA8a2VuZG8tdG9vbGJhci1kcm9wZG93bmxpc3Qga2VuZG9FZGl0b3JGb250U2l6ZT48L2tlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0IGtlbmRvRWRpdG9yRm9udEZhbWlseT48L2tlbmRvLXRvb2xiYXItZHJvcGRvd25saXN0PlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItY29sb3JwaWNrZXIga2VuZG9FZGl0b3JGb3JlQ29sb3I+PC9rZW5kby10b29sYmFyLWNvbG9ycGlja2VyPlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItY29sb3JwaWNrZXIga2VuZG9FZGl0b3JCYWNrQ29sb3I+PC9rZW5kby10b29sYmFyLWNvbG9ycGlja2VyPlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluc2VydFVub3JkZXJlZExpc3RCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9ySW5zZXJ0T3JkZXJlZExpc3RCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9ySW5kZW50QnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvck91dGRlbnRCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JDcmVhdGVMaW5rQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvclVubGlua0J1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgPGtlbmRvLWVkaXRvci1pbnNlcnQtdGFibGUtYnV0dG9uPjwva2VuZG8tZWRpdG9yLWluc2VydC10YWJsZS1idXR0b24+XHJcbiAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yQWRkQ29sdW1uQmVmb3JlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZENvbHVtbkFmdGVyQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckFkZFJvd0JlZm9yZUJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JBZGRSb3dBZnRlckJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgPC9rZW5kby10b29sYmFyLWJ1dHRvbmdyb3VwPlxyXG4gICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uZ3JvdXA+XHJcbiAgICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckRlbGV0ZUNvbHVtbkJ1dHRvbj48L2tlbmRvLXRvb2xiYXItYnV0dG9uPlxyXG4gICAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JEZWxldGVSb3dCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgICAgPGtlbmRvLXRvb2xiYXItYnV0dG9uIGtlbmRvRWRpdG9yRGVsZXRlVGFibGVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgIDwva2VuZG8tdG9vbGJhci1idXR0b25ncm91cD5cclxuICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluc2VydEZpbGVCdXR0b24+PC9rZW5kby10b29sYmFyLWJ1dHRvbj5cclxuICAgICAgICAgIDxrZW5kby10b29sYmFyLWJ1dHRvbiBrZW5kb0VkaXRvckluc2VydEltYWdlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgICA8a2VuZG8tdG9vbGJhci1idXR0b24ga2VuZG9FZGl0b3JWaWV3U291cmNlQnV0dG9uPjwva2VuZG8tdG9vbGJhci1idXR0b24+XHJcbiAgICAgICAgPC9rZW5kby10b29sYmFyPlxyXG4gICAgICA8L2tlbmRvLWVkaXRvcj5cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuPC9pb24taXRlbT5cclxuIl19
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/********** Angular **********/
|
|
2
|
+
import { Component, Input, ViewChild } from "@angular/core";
|
|
3
|
+
import { Validators } from "@angular/forms";
|
|
4
|
+
/********** Component & Service **********/
|
|
5
|
+
import { ZComponentHelper, ZComponentProperties } from "mmhglobal-zcore";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@progress/kendo-angular-treeview";
|
|
8
|
+
import * as i2 from "@ionic/angular";
|
|
9
|
+
import * as i3 from "@fortawesome/angular-fontawesome";
|
|
10
|
+
import * as i4 from "@angular/common";
|
|
11
|
+
export class ZtreeComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.items = [];
|
|
14
|
+
this.originalItemList = null;
|
|
15
|
+
// modelzData: Array<any>;
|
|
16
|
+
// modelName: string;
|
|
17
|
+
// dataSet: any[] = null;
|
|
18
|
+
this.isNodeDrop = false;
|
|
19
|
+
this.nodeCounter = 1;
|
|
20
|
+
this.clickActName = null;
|
|
21
|
+
this.state = { expandedkeys: [] };
|
|
22
|
+
this.itemIndex = [];
|
|
23
|
+
this.selectedKeys = [];
|
|
24
|
+
this.absoluteText = false;
|
|
25
|
+
this.componentProperties = new ZComponentProperties();
|
|
26
|
+
this.isExpanded = (dataItem, index) => {
|
|
27
|
+
// console.log(index);
|
|
28
|
+
return this.state.expandedkeys.indexOf(index) > -1;
|
|
29
|
+
// return true;
|
|
30
|
+
};
|
|
31
|
+
this.expandNode = (field, value, setAsSelected) => {
|
|
32
|
+
this.itemIndex = [];
|
|
33
|
+
const node = this.getItems();
|
|
34
|
+
this.searchNodeIndex(node, value, '', field);
|
|
35
|
+
const index = this.itemIndex;
|
|
36
|
+
if (setAsSelected) {
|
|
37
|
+
this.selectedKeys = index;
|
|
38
|
+
}
|
|
39
|
+
const indexArr = [];
|
|
40
|
+
index.forEach((i) => {
|
|
41
|
+
const arr = i.split('_');
|
|
42
|
+
let indexs = "";
|
|
43
|
+
arr.forEach((x) => {
|
|
44
|
+
indexs = indexs.concat("_").concat(x);
|
|
45
|
+
indexArr.push(indexs.substring(1));
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
this.state.expandedkeys = this.state.expandedkeys.concat(indexArr);
|
|
49
|
+
};
|
|
50
|
+
this.collapseNode = (field, value, collapseParent) => {
|
|
51
|
+
this.itemIndex = [];
|
|
52
|
+
const node = this.getItems();
|
|
53
|
+
this.searchNodeIndex(node, value, '', field);
|
|
54
|
+
const index = this.itemIndex;
|
|
55
|
+
let indexArr = [];
|
|
56
|
+
if (collapseParent) {
|
|
57
|
+
index.forEach((i) => {
|
|
58
|
+
const arr = i.split('_');
|
|
59
|
+
let indexs = "";
|
|
60
|
+
arr.forEach((x) => {
|
|
61
|
+
indexs = indexs.concat("_").concat(x);
|
|
62
|
+
indexArr.push(indexs.substring(1));
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
indexArr = index;
|
|
68
|
+
}
|
|
69
|
+
this.state.expandedkeys = this.state.expandedkeys.filter(v => {
|
|
70
|
+
return !indexArr.includes(v);
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
this.expandAll = () => {
|
|
74
|
+
const node = this.getItems();
|
|
75
|
+
if (node) {
|
|
76
|
+
this.expandAllNode(node, '');
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
this.collapseAll = () => {
|
|
80
|
+
this.state.expandedkeys = [];
|
|
81
|
+
};
|
|
82
|
+
this.setEnable = (status) => {
|
|
83
|
+
this.componentProperties.isReadOnly = !status;
|
|
84
|
+
};
|
|
85
|
+
this.setVisible = (status) => {
|
|
86
|
+
this.componentProperties.isVisible = status;
|
|
87
|
+
this.data.Visible = status;
|
|
88
|
+
};
|
|
89
|
+
this.setRequire = (status) => {
|
|
90
|
+
this.componentProperties.isRequired = status;
|
|
91
|
+
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
ngOnInit() {
|
|
95
|
+
ZComponentHelper.setComponentProperties(this);
|
|
96
|
+
ZComponentHelper.registerComponent(this);
|
|
97
|
+
if (this.data.TreeviewExpandAll) {
|
|
98
|
+
this.expandAll();
|
|
99
|
+
}
|
|
100
|
+
// fix text align issue
|
|
101
|
+
if (this.data.OnAddNode || this.data.OnRemoveNode) {
|
|
102
|
+
this.absoluteText = true;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
ngAfterViewInit() {
|
|
106
|
+
// const componentId = ZComponentHelper.getComponentId(this.data);
|
|
107
|
+
// this.group.zComponents[componentId] = this;
|
|
108
|
+
ZComponentHelper.registerComponent(this);
|
|
109
|
+
}
|
|
110
|
+
getItems() {
|
|
111
|
+
// if (this.modelName) {
|
|
112
|
+
// return this.group[this.modelName];
|
|
113
|
+
// }
|
|
114
|
+
const fieldValue = this.data.Value;
|
|
115
|
+
if (fieldValue) {
|
|
116
|
+
this.nodeCounter = 1;
|
|
117
|
+
const fValue = ZComponentHelper.getGroupEvalValue.call(this, this.data.Value);
|
|
118
|
+
return fValue;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
console.warn('ztree field Value is not set correctly. ', fieldValue);
|
|
122
|
+
}
|
|
123
|
+
// if (fieldValue && fieldValue.startsWith('group.')) {
|
|
124
|
+
// // const newDataSet = JSON.parse(JSON.stringify(this.dataSet));
|
|
125
|
+
// const name = fieldValue.slice(6);
|
|
126
|
+
// this.nodeCounter = 1;
|
|
127
|
+
// // this.group[name] = this.setValuePropToNullAtLeafLeave(this.group[name]);
|
|
128
|
+
// this.modelName = name;
|
|
129
|
+
// return this.group[name];
|
|
130
|
+
// } else {
|
|
131
|
+
// console.warn('ztree field Value is not set correctly. ', fieldValue);
|
|
132
|
+
// }
|
|
133
|
+
}
|
|
134
|
+
searchNodeIndex(node, value, key, field) {
|
|
135
|
+
if (key) {
|
|
136
|
+
key = key + '_';
|
|
137
|
+
}
|
|
138
|
+
node.forEach((d, i) => {
|
|
139
|
+
if (d[field] === Number(value) || d[field] === value) {
|
|
140
|
+
this.itemIndex = this.itemIndex.concat(key + '' + i);
|
|
141
|
+
}
|
|
142
|
+
if (Array.isArray(d.Value)) {
|
|
143
|
+
const k = key + '' + i;
|
|
144
|
+
this.searchNodeIndex(d.Value, value, k, field);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
expandAllNode(node, key) {
|
|
149
|
+
if (key) {
|
|
150
|
+
key = key + '_';
|
|
151
|
+
}
|
|
152
|
+
node.forEach((d, i) => {
|
|
153
|
+
if (Array.isArray(d.Value)) {
|
|
154
|
+
const k = key + '' + i;
|
|
155
|
+
this.state.expandedkeys = this.state.expandedkeys.concat(k);
|
|
156
|
+
this.expandAllNode(d.Value, k);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
handleCollapse(node) {
|
|
161
|
+
this.state.expandedkeys = this.state.expandedkeys.filter(k => k !== node.index);
|
|
162
|
+
}
|
|
163
|
+
handleExpand(node) {
|
|
164
|
+
this.state.expandedkeys = this.state.expandedkeys.concat(node.index);
|
|
165
|
+
}
|
|
166
|
+
getTemplate(dataItem, data, group) {
|
|
167
|
+
if (data.ItemTemplate) {
|
|
168
|
+
const getTemplateFunc = ZComponentHelper.getGroupEvalValue.call(this, data.ItemTemplate);
|
|
169
|
+
if (!getTemplateFunc) {
|
|
170
|
+
console.warn("The (" +
|
|
171
|
+
data.ItemTemplate +
|
|
172
|
+
") is not defined correctly. Value contains: ", getTemplateFunc);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
return getTemplateFunc({
|
|
176
|
+
dataItem,
|
|
177
|
+
data,
|
|
178
|
+
group
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
return Object.values(dataItem)
|
|
183
|
+
.filter(data => typeof data === "string")
|
|
184
|
+
.join(", ");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
convertToTreeItems(dataSet) {
|
|
188
|
+
const toTreeItems = [];
|
|
189
|
+
const treeIndex = {};
|
|
190
|
+
const pendingItems = [];
|
|
191
|
+
dataSet.forEach((d) => {
|
|
192
|
+
if (!d.ParentId) {
|
|
193
|
+
toTreeItems.push(d);
|
|
194
|
+
treeIndex[d.Id] = d;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
if (treeIndex[d.ParentId]) {
|
|
198
|
+
const parentItem = treeIndex[d.ParentId];
|
|
199
|
+
if (!parentItem.Value) {
|
|
200
|
+
parentItem.Value = [];
|
|
201
|
+
}
|
|
202
|
+
parentItem.Value.push(d);
|
|
203
|
+
treeIndex[d.Id] = d;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
pendingItems.push(d);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
if (pendingItems.length > 0) {
|
|
211
|
+
pendingItems.forEach((d) => {
|
|
212
|
+
if (treeIndex[d.ParentId]) {
|
|
213
|
+
const parentItem = treeIndex[d.ParentId];
|
|
214
|
+
parentItem.Value.push(d);
|
|
215
|
+
treeIndex[d.Id] = d;
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return toTreeItems;
|
|
220
|
+
}
|
|
221
|
+
onSelectionChange(event) {
|
|
222
|
+
let targetName;
|
|
223
|
+
if (this.clickActName) {
|
|
224
|
+
switch (this.clickActName) {
|
|
225
|
+
case 'AddNode':
|
|
226
|
+
targetName = this.data.OnAddNode;
|
|
227
|
+
break;
|
|
228
|
+
case 'RemoveNode':
|
|
229
|
+
targetName = this.data.OnRemoveNode;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
targetName = this.data.OnItemClick;
|
|
235
|
+
}
|
|
236
|
+
this.clickActName = null;
|
|
237
|
+
this.group.subject.next({
|
|
238
|
+
type: "ztree_onSelectionChange",
|
|
239
|
+
target: targetName,
|
|
240
|
+
data: event.dataItem,
|
|
241
|
+
event: event.index
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
onAddNode(event, dataItem, data, group) {
|
|
245
|
+
this.clickActName = 'AddNode';
|
|
246
|
+
// event.stopPropagation();
|
|
247
|
+
// if (this.data.OnAddNode) {
|
|
248
|
+
// const func = ZComponentHelper.getGroupEvalValue.call(this, this.data.OnAddNode);
|
|
249
|
+
// if (typeof func === 'function') {
|
|
250
|
+
// const callFunc = func.bind(this.group.ctrlScope);
|
|
251
|
+
// callFunc(dataItem, data, group, event.index);
|
|
252
|
+
// }
|
|
253
|
+
// return;
|
|
254
|
+
// }
|
|
255
|
+
}
|
|
256
|
+
onRemoveNode(event, dataItem, data, group) {
|
|
257
|
+
this.clickActName = 'RemoveNode';
|
|
258
|
+
}
|
|
259
|
+
onEditNode(event) {
|
|
260
|
+
if (this.data.OnEditNode) {
|
|
261
|
+
const func = ZComponentHelper.getGroupEvalValue.call(this, this.data.OnEditNode);
|
|
262
|
+
if (typeof func === 'function') {
|
|
263
|
+
const callFunc = func.bind(this.group.ctrlScope);
|
|
264
|
+
callFunc(event);
|
|
265
|
+
}
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
handleNodeDrop(event) {
|
|
270
|
+
if (this.data.Draggable === false) {
|
|
271
|
+
event.setValid(false);
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
this.isNodeDrop = true;
|
|
275
|
+
const dropHandler = ZComponentHelper.getGroupEvalValue.call(this, this.data.OnDrop);
|
|
276
|
+
if (typeof dropHandler === "function") {
|
|
277
|
+
const callFunc = dropHandler.bind(this);
|
|
278
|
+
callFunc(event);
|
|
279
|
+
}
|
|
280
|
+
// prevent drop if attempting to add to file
|
|
281
|
+
// if (isFile(event.destinationItem.item.dataItem.text) && event.dropPosition === DropPosition.Over) {
|
|
282
|
+
// event.setValid(false);
|
|
283
|
+
// }
|
|
284
|
+
}
|
|
285
|
+
handleNodeDragEnd(event) {
|
|
286
|
+
if (!this.isNodeDrop) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
this.isNodeDrop = false;
|
|
290
|
+
const items = this.getItems();
|
|
291
|
+
// console.log('Items: ', this.items);
|
|
292
|
+
const target = [];
|
|
293
|
+
this.updateChangeToDataSet(items, target);
|
|
294
|
+
// this.dataSet = target;
|
|
295
|
+
ZComponentHelper.setModelValue(this.data.Value, target, this.group);
|
|
296
|
+
this.group.subject.next({
|
|
297
|
+
type: "ztree-onTreeNodeDragEnd",
|
|
298
|
+
target: this.data.OnChange,
|
|
299
|
+
data: target
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
updateChangeToDataSet(source, target) {
|
|
303
|
+
source.forEach(d => {
|
|
304
|
+
if (Array.isArray(d.Value)) {
|
|
305
|
+
const t = JSON.parse(JSON.stringify(d));
|
|
306
|
+
t.Value = [];
|
|
307
|
+
target.push(t);
|
|
308
|
+
this.updateChangeToDataSet(d.Value, t.Value);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
const t = Object.assign({}, d);
|
|
312
|
+
t.Value = t._DataValue;
|
|
313
|
+
delete t._DataValue;
|
|
314
|
+
target.push(t);
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
// #region search feature - filterable: true
|
|
319
|
+
handleFilter(value) {
|
|
320
|
+
if (this.items.length == 0) {
|
|
321
|
+
this.items = ZComponentHelper.getGroupEvalValue.call(this, this.data.Value);
|
|
322
|
+
if (this.originalItemList == null) {
|
|
323
|
+
this.originalItemList = this.items.map(item => Object.assign({}, item));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
this.items = this.originalItemList.map(item => Object.assign({}, item));
|
|
327
|
+
const target = this.search(this.items, value);
|
|
328
|
+
const gridValue = this.filterPrefix(this.data.Value);
|
|
329
|
+
this.group[gridValue] = target;
|
|
330
|
+
}
|
|
331
|
+
filterPrefix(valueName) {
|
|
332
|
+
if (valueName.startsWith('zData.')) {
|
|
333
|
+
return valueName.slice(6);
|
|
334
|
+
}
|
|
335
|
+
if (valueName.startsWith('group.zData.')) {
|
|
336
|
+
return valueName.slice(12);
|
|
337
|
+
}
|
|
338
|
+
if (valueName.startsWith('group.')) {
|
|
339
|
+
return valueName.slice(6);
|
|
340
|
+
}
|
|
341
|
+
if (valueName) {
|
|
342
|
+
return valueName;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
search(items, term) {
|
|
346
|
+
return items.reduce((acc, item) => {
|
|
347
|
+
if (this.contains(item.Name, term)) {
|
|
348
|
+
acc.push(item);
|
|
349
|
+
}
|
|
350
|
+
else if (item.Value && item.Value.length > 0) {
|
|
351
|
+
const newItems = this.search(item.Value, term);
|
|
352
|
+
if (newItems.length > 0) {
|
|
353
|
+
var filterItem = item;
|
|
354
|
+
filterItem.Value = newItems;
|
|
355
|
+
acc.push(filterItem);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return acc;
|
|
359
|
+
}, []);
|
|
360
|
+
}
|
|
361
|
+
contains(text, term) {
|
|
362
|
+
return text.toLowerCase().indexOf((term || "").toLowerCase()) >= 0;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
ZtreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZtreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
366
|
+
ZtreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.4", type: ZtreeComponent, selector: "app-ztree", inputs: { data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "nodetemplate", first: true, predicate: ["nodetemplate"], descendants: true, static: true }], ngImport: i0, template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"absoluteText\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!absoluteText\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host{--ion-color-primary: #479400;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff}:host ::ng-deep kendo-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;border:1px solid #c8dbf5;background-color:#e3ecf8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#a9c3e8!important;color:#0a45ab!important;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf:hover,:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#c9daf2;color:#0a45ab;font-size:13px;cursor:pointer}\n"], components: [{ type: i1.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "trackBy", "isDisabled", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "animate", "nodeTemplate", "loadMoreButtonTemplate", "nodes", "hasChildren", "isChecked", "isExpanded", "isSelected", "size", "textField"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["expandOnFilter", "isExpanded", "expandBy", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i1.SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { type: i1.DragAndDropDirective, selector: "[kendoTreeViewDragAndDrop]", inputs: ["allowCopy", "dropZoneTreeViews", "startDragAfter", "autoScroll"] }, { type: i1.DragAndDropEditingDirective, selector: "[kendoTreeViewDragAndDropEditing]", inputs: ["editService"] }, { type: i1.HierarchyBindingDirective, selector: "[kendoTreeViewHierarchyBinding]", inputs: ["loadOnDemand", "childrenField", "nodes", "isVisible"] }, { type: i1.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }] });
|
|
367
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.4", ngImport: i0, type: ZtreeComponent, decorators: [{
|
|
368
|
+
type: Component,
|
|
369
|
+
args: [{ selector: "app-ztree", template: "<div style=\"width:100%\"\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <kendo-treeview [nodes]=\"getItems()\"\r\n kendoTreeViewExpandable\r\n kendoTreeViewSelectable\r\n kendoTreeViewDragAndDrop\r\n kendoTreeViewDragAndDropEditing\r\n [isExpanded]=\"isExpanded\"\r\n (collapse)=\"handleCollapse($event)\"\r\n (expand)=\"handleExpand($event)\"\r\n (nodeDrop)=\"handleNodeDrop($event)\"\r\n (nodeDragEnd)=\"handleNodeDragEnd($event)\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [selectedKeys]=\"selectedKeys\"\r\n kendoTreeViewHierarchyBinding\r\n childrenField=\"Value\"\r\n [filterable]=\"data.Filterable\"\r\n textField=\"Name\"\r\n (filterChange)=\"handleFilter($event)\">\r\n\r\n <ng-template kendoTreeViewNodeTemplate let-dataItem #nodetemplate>\r\n\r\n <ion-button *ngIf=\"!!data.OnAddNode\"\r\n (click)=\"onAddNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 0 0 2px;\" mat-raised-button color=\"primary\" size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnAddNodeVisible)\"> \r\n <fa-icon [icon]=\"'plus'\"></fa-icon>\r\n </ion-button>\r\n <ion-button *ngIf=\"!!data.OnRemoveNode\" (click)=\"onRemoveNode($event, dataItem, data, group)\"\r\n style=\"zoom: 0.6; margin: 0 15px 0 10px;\" color=\"danger\" mat-raised-button size=\"medium\"\r\n [hidden]=\"(!!dataItem.OnRemoveNodeVisible)\"> \r\n <fa-icon [icon]=\"'minus'\"></fa-icon>\r\n </ion-button>\r\n\r\n <ion-label *ngIf=\"absoluteText\" style=\"position: absolute; top: 14px;\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n\r\n <ion-label *ngIf=\"!absoluteText\">\r\n {{ getTemplate(dataItem, data, group) }}\r\n </ion-label>\r\n </ng-template>\r\n </kendo-treeview>\r\n</div>\r\n", styles: [":host{--ion-color-primary: #479400;--ion-color-primary-rgb: 56, 128, 255;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #3171e0;--ion-color-primary-tint: #4c8dff}:host ::ng-deep kendo-treeview .k-treeview-leaf{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;border:1px solid #c8dbf5;background-color:#e3ecf8;color:#0a45ab;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf.k-selected{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#a9c3e8!important;color:#0a45ab!important;font-size:13px;cursor:pointer}:host ::ng-deep kendo-treeview .k-treeview-leaf:hover,:host ::ng-deep kendo-treeview .k-treeview-leaf.k-state-hover{width:100%;margin:5px;padding:9px 20px 9px 8px;border-radius:3px;background-color:#c9daf2;color:#0a45ab;font-size:13px;cursor:pointer}\n"] }]
|
|
370
|
+
}], ctorParameters: function () { return []; }, propDecorators: { data: [{
|
|
371
|
+
type: Input
|
|
372
|
+
}], group: [{
|
|
373
|
+
type: Input
|
|
374
|
+
}], form: [{
|
|
375
|
+
type: Input
|
|
376
|
+
}], nodetemplate: [{
|
|
377
|
+
type: ViewChild,
|
|
378
|
+
args: ["nodetemplate", { static: true }]
|
|
379
|
+
}] } });
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWUvenRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBU3ZELDJDQUEyQztBQUMzQyxPQUFPLEVBQ08sZ0JBQWdCLEVBQXlCLG9CQUFvQixFQUUxRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7QUFPekIsTUFBTSxPQUFPLGNBQWM7SUFvQnpCO1FBZkEsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUN2QixxQkFBZ0IsR0FBUSxJQUFJLENBQUM7UUFDN0IsMEJBQTBCO1FBQzFCLHFCQUFxQjtRQUNyQix5QkFBeUI7UUFDekIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNYLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLFVBQUssR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFckMsd0JBQW1CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1FBZ0QxQyxlQUFVLEdBQUcsQ0FBQyxRQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDakQsc0JBQXNCO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUss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LENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDOzsyR0FoWlUsY0FBYzsrRkFBZCxjQUFjLHFPQ3RCM0IsNHFFQTRDQTsyRkR0QmEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxXQUFXOzBFQUtaLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUN1QyxZQUFZO3NCQUF4RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBUcmVlSXRlbURyb3BFdmVudCxcclxuICBUcmVlSXRlbURyYWdFdmVudFxyXG59IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVldmlld1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCwgWkNvbXBvbmVudFByb3BlcnRpZXMsXHJcbiAgWkZpZWxkLCBaR3JvdXAsICBaVHJlZVRlbXBsYXRlUGFyYW1zXHJcbn0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXp0cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96dHJlZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBAVmlld0NoaWxkKFwibm9kZXRlbXBsYXRlXCIsIHsgc3RhdGljOiB0cnVlIH0pIG5vZGV0ZW1wbGF0ZTogRWxlbWVudFJlZjtcclxuICBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIG9yaWdpbmFsSXRlbUxpc3Q6IGFueSA9IG51bGw7XHJcbiAgLy8gbW9kZWx6RGF0YTogQXJyYXk8YW55PjtcclxuICAvLyBtb2RlbE5hbWU6IHN0cmluZztcclxuICAvLyBkYXRhU2V0OiBhbnlbXSA9IG51bGw7XHJcbiAgaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgbm9kZUNvdW50ZXIgPSAxO1xyXG4gIHByaXZhdGUgY2xpY2tBY3ROYW1lID0gbnVsbDtcclxuICBwdWJsaWMgc3RhdGUgPSB7IGV4cGFuZGVka2V5czogW10gfTtcclxuICBwdWJsaWMgaXRlbUluZGV4ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkS2V5czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYWJzb2x1dGVUZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVHJlZXZpZXdFeHBhbmRBbGwpIHtcclxuICAgICAgdGhpcy5leHBhbmRBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaXggdGV4dCBhbGlnbiBpc3N1ZVxyXG4gICAgaWYgKHRoaXMuZGF0YS5PbkFkZE5vZGUgfHwgdGhpcy5kYXRhLk9uUmVtb3ZlTm9kZSkge1xyXG4gICAgICB0aGlzLmFic29sdXRlVGV4dCA9IHRydWU7IFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gY29uc3QgY29tcG9uZW50SWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudElkKHRoaXMuZGF0YSk7XHJcbiAgICAvLyB0aGlzLmdyb3VwLnpDb21wb25lbnRzW2NvbXBvbmVudElkXSA9IHRoaXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5tb2RlbE5hbWUpIHtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMuZ3JvdXBbdGhpcy5tb2RlbE5hbWVdO1xyXG4gICAgLy8gfVxyXG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIGlmIChmaWVsZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubm9kZUNvdW50ZXIgPSAxO1xyXG4gICAgICBjb25zdCBmVmFsdWUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgICAgcmV0dXJuIGZWYWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGZpZWxkVmFsdWUgJiYgZmllbGRWYWx1ZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgLy8gICAvLyBjb25zdCBuZXdEYXRhU2V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTZXQpKTtcclxuICAgIC8vICAgY29uc3QgbmFtZSA9IGZpZWxkVmFsdWUuc2xpY2UoNik7XHJcbiAgICAvLyAgIHRoaXMubm9kZUNvdW50ZXIgPSAxO1xyXG4gICAgLy8gICAvLyB0aGlzLmdyb3VwW25hbWVdID0gdGhpcy5zZXRWYWx1ZVByb3BUb051bGxBdExlYWZMZWF2ZSh0aGlzLmdyb3VwW25hbWVdKTtcclxuICAgIC8vICAgdGhpcy5tb2RlbE5hbWUgPSBuYW1lO1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy5ncm91cFtuYW1lXTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGNvbnNvbGUud2FybignenRyZWUgZmllbGQgVmFsdWUgaXMgbm90IHNldCBjb3JyZWN0bHkuICcsIGZpZWxkVmFsdWUpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzRXhwYW5kZWQgPSAoZGF0YUl0ZW06IGFueSwgaW5kZXg6IHN0cmluZykgPT4ge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhpbmRleCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5pbmRleE9mKGluZGV4KSA+IC0xO1xyXG4gICAgICAvLyByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmROb2RlID0gKGZpZWxkOnN0cmluZywgdmFsdWU6IHN0cmluZywgc2V0QXNTZWxlY3RlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgobm9kZSwgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGlmIChzZXRBc1NlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzID0gaW5kZXg7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleEFyciA9IFtdO1xyXG4gICAgaW5kZXguZm9yRWFjaCgoaTphbnkpID0+IHtcclxuICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICBsZXQgaW5kZXhzID0gXCJcIjtcclxuICAgICAgYXJyLmZvckVhY2goKHg6YW55KSA9PiB7XHJcbiAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgIGluZGV4QXJyLnB1c2goaW5kZXhzLnN1YnN0cmluZygxKSk7XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMuY29uY2F0KGluZGV4QXJyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZU5vZGUgPSAoZmllbGQ6c3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBjb2xsYXBzZVBhcmVudDogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5pdGVtSW5kZXggPSBbXTtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEl0ZW1zKCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hOb2RlSW5kZXgobm9kZSwgdmFsdWUsICcnLCBmaWVsZCk7XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1JbmRleDtcclxuICAgIGxldCBpbmRleEFyciA9IFtdO1xyXG4gICAgaWYgKGNvbGxhcHNlUGFyZW50KSB7XHJcbiAgICAgIGluZGV4LmZvckVhY2goKGk6YW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyID0gaS5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCBpbmRleHMgPSBcIlwiO1xyXG4gICAgICAgIGFyci5mb3JFYWNoKCh4OmFueSkgPT4ge1xyXG4gICAgICAgICAgaW5kZXhzID0gaW5kZXhzLmNvbmNhdChcIl9cIikuY29uY2F0KHgpO1xyXG4gICAgICAgICAgaW5kZXhBcnIucHVzaChpbmRleHMuc3Vic3RyaW5nKDEpKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZGV4QXJyID0gaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIodiA9PiB7XHJcbiAgICAgIHJldHVybiAhaW5kZXhBcnIuaW5jbHVkZXModik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hOb2RlSW5kZXgobm9kZTogYW55LCB2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChkW2ZpZWxkXSA9PT0gTnVtYmVyKHZhbHVlKSB8fCBkW2ZpZWxkXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICB0aGlzLml0ZW1JbmRleCA9IHRoaXMuaXRlbUluZGV4LmNvbmNhdChrZXkgKyAnJyArIGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnNlYXJjaE5vZGVJbmRleChkLlZhbHVlLCB2YWx1ZSwgaywgZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmRBbGwgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRBbGxOb2RlKG5vZGUsICcnKTtcclxuICAgICAgfSAgICBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzID0gW107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGFuZEFsbE5vZGUobm9kZTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBrZXkgPSBrZXkgKyAnXyc7XHJcbiAgICB9XHJcbiAgICBub2RlLmZvckVhY2goKGQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGQuVmFsdWUpKSB7XHJcbiAgICAgICAgY29uc3QgayA9IGtleSArICcnICsgaTtcclxuICAgICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChrKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEFsbE5vZGUoZC5WYWx1ZSwgayk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZUNvbGxhcHNlKG5vZGUpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5leHBhbmRlZGtleXMgPSB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cy5maWx0ZXIoayA9PiBrICE9PSBub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVFeHBhbmQobm9kZSkge1xyXG4gICAgICB0aGlzLnN0YXRlLmV4cGFuZGVka2V5cyA9IHRoaXMuc3RhdGUuZXhwYW5kZWRrZXlzLmNvbmNhdChub2RlLmluZGV4KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG4gIGdldFRlbXBsYXRlKGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgaWYgKGRhdGEuSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGdldFRlbXBsYXRlRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGRhdGEuSXRlbVRlbXBsYXRlXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZ2V0VGVtcGxhdGVGdW5jKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgXCJUaGUgKFwiICtcclxuICAgICAgICAgIGRhdGEuSXRlbVRlbXBsYXRlICtcclxuICAgICAgICAgIFwiKSBpcyBub3QgZGVmaW5lZCBjb3JyZWN0bHkuIFZhbHVlIGNvbnRhaW5zOiBcIixcclxuICAgICAgICAgIGdldFRlbXBsYXRlRnVuY1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBkYXRhSXRlbSxcclxuICAgICAgICBkYXRhLFxyXG4gICAgICAgIGdyb3VwXHJcbiAgICAgIH0gYXMgWlRyZWVUZW1wbGF0ZVBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhSXRlbSlcclxuICAgICAgICAuZmlsdGVyKGRhdGEgPT4gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpXHJcbiAgICAgICAgLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb1RyZWVJdGVtcyhkYXRhU2V0OiBhbnlbXSkge1xyXG4gICAgY29uc3QgdG9UcmVlSXRlbXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCB0cmVlSW5kZXg6IGFueSA9IHt9O1xyXG4gICAgY29uc3QgcGVuZGluZ0l0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgZGF0YVNldC5mb3JFYWNoKChkOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkLlBhcmVudElkKSB7XHJcbiAgICAgICAgdG9UcmVlSXRlbXMucHVzaChkKTtcclxuICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uVmFsdWUpIHtcclxuICAgICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50SXRlbS5WYWx1ZS5wdXNoKGQpO1xyXG4gICAgICAgICAgdHJlZUluZGV4W2QuSWRdID0gZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGVuZGluZ0l0ZW1zLnB1c2goZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocGVuZGluZ0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcGVuZGluZ0l0ZW1zLmZvckVhY2goKGQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0cmVlSW5kZXhbZC5QYXJlbnRJZF0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0cmVlSW5kZXhbZC5QYXJlbnRJZF07XHJcbiAgICAgICAgICBwYXJlbnRJdGVtLlZhbHVlLnB1c2goZCk7XHJcbiAgICAgICAgICB0cmVlSW5kZXhbZC5JZF0gPSBkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRvVHJlZUl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgbGV0IHRhcmdldE5hbWU6IHN0cmluZztcclxuICAgIGlmICh0aGlzLmNsaWNrQWN0TmFtZSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY2xpY2tBY3ROYW1lKSB7XHJcbiAgICAgICAgY2FzZSAnQWRkTm9kZSc6XHJcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy5kYXRhLk9uQWRkTm9kZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ1JlbW92ZU5vZGUnOlxyXG4gICAgICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5PblJlbW92ZU5vZGU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFyZ2V0TmFtZSA9IHRoaXMuZGF0YS5Pbkl0ZW1DbGljaztcclxuICAgIH1cclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gbnVsbDtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJ6dHJlZV9vblNlbGVjdGlvbkNoYW5nZVwiLFxyXG4gICAgICB0YXJnZXQ6IHRhcmdldE5hbWUsXHJcbiAgICAgIGRhdGE6IGV2ZW50LmRhdGFJdGVtLFxyXG4gICAgICBldmVudDogZXZlbnQuaW5kZXhcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uQWRkTm9kZShldmVudDogYW55LCBkYXRhSXRlbTogYW55LCBkYXRhOiBaRmllbGQsIGdyb3VwOiBaR3JvdXApIHtcclxuICAgIHRoaXMuY2xpY2tBY3ROYW1lID0gJ0FkZE5vZGUnO1xyXG4gICAgLy8gZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLk9uQWRkTm9kZSkge1xyXG4gICAgLy8gICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkFkZE5vZGUpO1xyXG4gICAgLy8gICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIC8vICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAvLyAgICAgY2FsbEZ1bmMoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwLCBldmVudC5pbmRleCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKGV2ZW50OiBhbnksIGRhdGFJdGVtOiBhbnksIGRhdGE6IFpGaWVsZCwgZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgdGhpcy5jbGlja0FjdE5hbWUgPSAnUmVtb3ZlTm9kZSc7XHJcbiAgfVxyXG5cclxuICBvbkVkaXROb2RlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuT25FZGl0Tm9kZSkge1xyXG4gICAgICBjb25zdCBmdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkVkaXROb2RlKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJvcChldmVudDogVHJlZUl0ZW1Ecm9wRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMuZGF0YS5EcmFnZ2FibGUgPT09IGZhbHNlKXtcclxuICAgICAgZXZlbnQuc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc05vZGVEcm9wID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRyb3BIYW5kbGVyID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICB0aGlzLmRhdGEuT25Ecm9wXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiBkcm9wSGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZHJvcEhhbmRsZXIuYmluZCh0aGlzKTtcclxuICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByZXZlbnQgZHJvcCBpZiBhdHRlbXB0aW5nIHRvIGFkZCB0byBmaWxlXHJcbiAgICAvLyBpZiAoaXNGaWxlKGV2ZW50LmRlc3RpbmF0aW9uSXRlbS5pdGVtLmRhdGFJdGVtLnRleHQpICYmIGV2ZW50LmRyb3BQb3NpdGlvbiA9PT0gRHJvcFBvc2l0aW9uLk92ZXIpIHtcclxuICAgIC8vICAgICBldmVudC5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVOb2RlRHJhZ0VuZChldmVudDogVHJlZUl0ZW1EcmFnRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc05vZGVEcm9wKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNOb2RlRHJvcCA9IGZhbHNlO1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnSXRlbXM6ICcsIHRoaXMuaXRlbXMpO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gW107XHJcbiAgICB0aGlzLnVwZGF0ZUNoYW5nZVRvRGF0YVNldChpdGVtcywgdGFyZ2V0KTtcclxuICAgIC8vIHRoaXMuZGF0YVNldCA9IHRhcmdldDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIHRhcmdldCwgdGhpcy5ncm91cCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwienRyZWUtb25UcmVlTm9kZURyYWdFbmRcIixcclxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuT25DaGFuZ2UsXHJcbiAgICAgIGRhdGE6IHRhcmdldFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDaGFuZ2VUb0RhdGFTZXQoc291cmNlOiBBcnJheTxhbnk+LCB0YXJnZXQ6IEFycmF5PGFueT4pIHtcclxuICAgIHNvdXJjZS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkLlZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQpKTtcclxuICAgICAgICB0LlZhbHVlID0gW107XHJcbiAgICAgICAgdGFyZ2V0LnB1c2godCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGFuZ2VUb0RhdGFTZXQoZC5WYWx1ZSwgdC5WYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdCA9IE9iamVjdC5hc3NpZ24oe30sIGQpO1xyXG4gICAgICAgIHQuVmFsdWUgPSB0Ll9EYXRhVmFsdWU7XHJcbiAgICAgICAgZGVsZXRlIHQuX0RhdGFWYWx1ZTtcclxuICAgICAgICB0YXJnZXQucHVzaCh0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIHNlYXJjaCBmZWF0dXJlIC0gZmlsdGVyYWJsZTogdHJ1ZVxyXG4gIHB1YmxpYyBoYW5kbGVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbEl0ZW1MaXN0ID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbUxpc3QgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXRlbXMgPSB0aGlzLm9yaWdpbmFsSXRlbUxpc3QubWFwKGl0ZW0gPT4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSkpO1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5zZWFyY2godGhpcy5pdGVtcywgdmFsdWUpO1xyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gdGhpcy5maWx0ZXJQcmVmaXgodGhpcy5kYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXSA9IHRhcmdldDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyUHJlZml4KHZhbHVlTmFtZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ3pEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoNik7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWVOYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLnpEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZU5hbWUuc2xpY2UoMTIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lLnNsaWNlKDYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlTmFtZSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2goaXRlbXM6IGFueVtdLCB0ZXJtOiBzdHJpbmcpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29udGFpbnMoaXRlbS5OYW1lLCB0ZXJtKSkge1xyXG4gICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uVmFsdWUgJiYgaXRlbS5WYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLnNlYXJjaChpdGVtLlZhbHVlLCB0ZXJtKTtcclxuXHJcbiAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBmaWx0ZXJJdGVtID0gaXRlbTtcclxuICAgICAgICAgIGZpbHRlckl0ZW0uVmFsdWUgPSBuZXdJdGVtcztcclxuICAgICAgICAgIGFjYy5wdXNoKGZpbHRlckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb250YWlucyh0ZXh0OiBzdHJpbmcsIHRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCh0ZXJtIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkpID49IDA7XHJcbiAgfVxyXG4gIC8vICNlbmRyZWdpb24gc2VhcmNoIGZlYXR1cmUgLSBmaWx0ZXJhYmxlOiB0cnVlXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cIndpZHRoOjEwMCVcIlxyXG4gICAgICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCI+XHJcbiAgPGtlbmRvLXRyZWV2aWV3IFtub2Rlc109XCJnZXRJdGVtcygpXCJcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0V4cGFuZGFibGVcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld1NlbGVjdGFibGVcclxuICAgICAgICAgICAgICAgICAga2VuZG9UcmVlVmlld0RyYWdBbmREcm9wXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdEcmFnQW5kRHJvcEVkaXRpbmdcclxuICAgICAgICAgICAgICAgICAgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjb2xsYXBzZSk9XCJoYW5kbGVDb2xsYXBzZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGV4cGFuZCk9XCJoYW5kbGVFeHBhbmQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChub2RlRHJvcCk9XCJoYW5kbGVOb2RlRHJvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG5vZGVEcmFnRW5kKT1cImhhbmRsZU5vZGVEcmFnRW5kKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRLZXlzXT1cInNlbGVjdGVkS2V5c1wiXHJcbiAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZVZpZXdIaWVyYXJjaHlCaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImRhdGEuRmlsdGVyYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cIk5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCI+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZVZpZXdOb2RlVGVtcGxhdGUgbGV0LWRhdGFJdGVtICNub2RldGVtcGxhdGU+XHJcblxyXG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cIiEhZGF0YS5PbkFkZE5vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGROb2RlKCRldmVudCwgZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiem9vbTogMC42OyBtYXJnaW46IDAgMCAwIDJweDtcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBzaXplPVwibWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIoISFkYXRhSXRlbS5PbkFkZE5vZGVWaXNpYmxlKVwiPiBcclxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCIncGx1cydcIj48L2ZhLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCIhIWRhdGEuT25SZW1vdmVOb2RlXCIgKGNsaWNrKT1cIm9uUmVtb3ZlTm9kZSgkZXZlbnQsIGRhdGFJdGVtLCBkYXRhLCBncm91cClcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInpvb206IDAuNjsgbWFyZ2luOiAwIDE1cHggMCAxMHB4O1wiIGNvbG9yPVwiZGFuZ2VyXCIgbWF0LXJhaXNlZC1idXR0b24gc2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiKCEhZGF0YUl0ZW0uT25SZW1vdmVOb2RlVmlzaWJsZSlcIj4gXHJcbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiJ21pbnVzJ1wiPjwvZmEtaWNvbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG5cclxuICAgICAgPGlvbi1sYWJlbCAqbmdJZj1cImFic29sdXRlVGV4dFwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDE0cHg7XCI+XHJcbiAgICAgICAge3sgZ2V0VGVtcGxhdGUoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKSB9fVxyXG4gICAgICA8L2lvbi1sYWJlbD5cclxuXHJcbiAgICAgIDxpb24tbGFiZWwgKm5nSWY9XCIhYWJzb2x1dGVUZXh0XCI+XHJcbiAgICAgICAge3sgZ2V0VGVtcGxhdGUoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwKSB9fVxyXG4gICAgICA8L2lvbi1sYWJlbD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby10cmVldmlldz5cclxuPC9kaXY+XHJcbiJdfQ==
|