mmhglobal-dynamicform 2.40.0 → 3.0.0-beta
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 +0 -11
- package/fesm2022/mmhglobal-dynamicform.mjs +15336 -0
- package/fesm2022/mmhglobal-dynamicform.mjs.map +1 -0
- package/{mmhglobal-dynamicform.d.ts → index.d.ts} +5 -5
- package/lib/animations/component-animations.d.ts +3 -3
- package/lib/components/{buttonfieldbase.component.d.ts → base/buttonfieldbase.component.d.ts} +18 -26
- package/lib/components/{containerfieldbase.component.d.ts → base/containerfieldbase.component.d.ts} +20 -25
- package/lib/components/{datalistingfieldbase.component.d.ts → base/datalistingfieldbase.component.d.ts} +45 -51
- package/lib/components/{fieldbase.component.d.ts → base/fieldbase.component.d.ts} +49 -49
- package/lib/components/{inputfieldbase.component.d.ts → base/inputfieldbase.component.d.ts} +23 -27
- package/lib/{dropdown_buttons → components/button/dropdown_buttons}/dropdown_buttons.component.d.ts +15 -21
- package/lib/components/button/zbuttons/zbuttons.component.d.ts +19 -0
- package/lib/{zchip → components/button/zchip}/zchip.component.d.ts +22 -26
- package/lib/{zmfb → components/button/zmfb}/zmfb.component.d.ts +38 -43
- package/lib/components/button/zworkflowbuttons/zworkflowbuttons.component.d.ts +29 -0
- package/lib/{zchart → components/chart/zchart}/zchart.component.d.ts +73 -71
- package/lib/{zganttchart → components/chart/zganttchart}/zganttchart.component.d.ts +40 -40
- package/lib/{zgauge → components/chart/zgauge}/zgauge.component.d.ts +67 -63
- package/lib/{zprogressbar → components/chart/zprogressbar}/zprogressbar.component.d.ts +29 -30
- package/lib/{zreport → components/chart/zreport}/zreport.component.d.ts +47 -53
- package/lib/{zscheduler → components/chart/zscheduler}/zscheduler.component.d.ts +53 -52
- package/lib/{zscheduler → components/chart/zscheduler}/zscheduler.toolbar.component.d.ts +20 -20
- package/lib/{ztrendcard → components/chart/ztrendcard}/ztrendcard.component.d.ts +40 -36
- package/lib/components/container/kcard/kcard.component.d.ts +21 -0
- package/lib/{kscrollview → components/container/kscrollview}/kscrollview.component.d.ts +19 -20
- package/lib/{ksplitter → components/container/ksplitter}/ksplitter.component.d.ts +18 -19
- package/lib/{zcard → components/container/zcard}/zcard.component.d.ts +12 -17
- package/lib/components/container/zdiv/zdiv.component.d.ts +12 -0
- package/lib/{zdiv → components/container/zdiv}/zdiv.pipe.d.ts +7 -7
- package/lib/{zloop → components/container/zloop}/zloop.component.d.ts +21 -24
- package/lib/{ztab → components/container/ztab}/ztab.component.d.ts +34 -38
- package/lib/{ztab → components/container/ztab}/ztab.pipe.d.ts +7 -7
- package/lib/{zudf → components/container/zudf}/zudf.component.d.ts +208 -212
- package/lib/{virtual-scroll → components/data-listing/virtual-scroll}/virtual-scroll.component.d.ts +40 -45
- package/lib/{zgrid → components/data-listing/zgrid}/container/zgrid-container.component.d.ts +27 -31
- package/lib/{zgrid → components/data-listing/zgrid}/date-range-cell-filter.component.d.ts +20 -19
- package/lib/{zgrid → components/data-listing/zgrid}/zgrid.binding.directive.d.ts +174 -168
- package/lib/{zgrid → components/data-listing/zgrid}/zgrid.component.d.ts +187 -186
- package/lib/{zgrid → components/data-listing/zgrid}/zgrid.popup.anchor-target.directive.d.ts +8 -8
- package/lib/{zgrid → components/data-listing/zgrid}/zgrid.service.d.ts +27 -27
- package/lib/{ztree → components/data-listing/ztree}/ztree.component.d.ts +77 -78
- package/lib/{ztreelist → components/data-listing/ztreelist}/ztreelist.component.d.ts +100 -107
- package/lib/{sfdatetimepicker → components/input/sfdatetimepicker}/sfdatetimepicker.component.d.ts +26 -31
- package/lib/{sfquerybuilder → components/input/sfquerybuilder}/sfquerybuilder.component.d.ts +71 -73
- package/lib/{zcheckbox → components/input/zcheckbox}/zcheckbox.component.d.ts +18 -20
- package/lib/components/input/zcodeeditor/zcodeeditor.component.d.ts +43 -0
- package/lib/components/input/zcodeeditor/zcodeeditor.service.d.ts +32 -0
- package/lib/{zcolorpicker → components/input/zcolorpicker}/zcolorpicker.component.d.ts +19 -25
- package/lib/{zdatetime → components/input/zdatetime}/dateIonicFormatParser.pipe.d.ts +10 -10
- package/lib/{zdatetime → components/input/zdatetime}/dateIonicMinMaxDate.pipe.d.ts +7 -7
- package/lib/{zdatetime → components/input/zdatetime}/dateKendoFormatParser.pipe.d.ts +10 -10
- package/lib/{zdatetime → components/input/zdatetime}/dateParser.pipe.d.ts +11 -11
- package/lib/{zdatetime → components/input/zdatetime}/zdatetime.component.d.ts +32 -32
- package/lib/{zimg → components/input/zimg}/zimg.component.d.ts +16 -20
- package/lib/{zinput-container → components/input/zinput-container}/zinput-container.component.d.ts +31 -38
- package/lib/{zinput-container → components/input/zinput-container}/zinput-container.pipe.d.ts +25 -25
- package/lib/{zlabel → components/input/zlabel}/zlabel.component.d.ts +20 -26
- package/lib/{znumeric → components/input/znumeric}/znumeric.component.d.ts +29 -31
- package/lib/{znumeric → components/input/znumeric}/znumeric.component.pipe.d.ts +10 -10
- package/lib/{zpostselectinput → components/input/zpostselectinput}/zpostselectinput.component.d.ts +48 -65
- package/lib/{zselectmultiple → components/input/zselectmultiple}/zselectmultiple.component.d.ts +105 -123
- package/lib/{zselectmultiple → components/input/zselectmultiple}/zselectmultiple.directive.d.ts +12 -12
- package/lib/{zselectmultiple → components/input/zselectmultiple}/zselectmultiple.pipe.d.ts +11 -11
- package/lib/{ztext → components/input/ztext}/ztext.component.d.ts +33 -33
- package/lib/{ztextarea → components/input/ztextarea}/ztextarea.component.d.ts +21 -25
- package/lib/{ztexteditor → components/input/ztexteditor}/ztexteditor.component.d.ts +44 -42
- package/lib/{zupload → components/input/zupload}/zupload.component.d.ts +45 -50
- package/lib/{embed-components → components/menu}/context-menu/context-menu.component.d.ts +24 -28
- package/lib/{kmenu → components/menu/kmenu}/kmenu.component.d.ts +13 -14
- package/lib/components/others/zform/zform.component.d.ts +30 -0
- package/lib/components/others/zformcontrol/zformcontrol.component.d.ts +21 -0
- package/lib/components/others/zformcontrol/zformcontrol.service.d.ts +12 -0
- package/lib/components/others/zmodal/zmodal-component-helper.service.d.ts +15 -0
- package/lib/components/others/zmodal/zmodal.component.d.ts +24 -0
- package/lib/components/others/zmodal/zmodal.service.d.ts +25 -0
- package/lib/components/others/zunknown/zunknown.component.d.ts +10 -0
- package/lib/components/utility/e1-root/e1-root.component.d.ts +20 -0
- package/lib/components/utility/input-error-message/input-error-message.component.d.ts +14 -0
- package/lib/{embed-components → components/utility}/input-field-addons/input-field-addons.component.d.ts +18 -23
- package/lib/{embed-components → components/utility}/page-loader/page-loader.component.d.ts +8 -8
- package/lib/{embed-components → components/utility}/processing-record-loader/processing-record-loader.component.d.ts +8 -8
- package/lib/{embed-components → components/utility}/spinner/spinner.component.d.ts +12 -14
- package/lib/components/utility/uiappmenucontent/uiappmenucontent.component.d.ts +17 -0
- package/lib/{uibulletin → components/utility/uibulletin}/uibulletin.component.d.ts +31 -36
- package/lib/{uicontainer → components/utility/uicontainer}/uicontainer.component.d.ts +16 -19
- package/lib/components/utility/uicontent/uicontent.component.d.ts +21 -0
- package/lib/components/utility/uiheader/uiheader.component.d.ts +40 -0
- package/lib/{uipage → components/utility/uipage}/uipage.component.d.ts +18 -23
- package/lib/constants/constant.d.ts +3 -3
- package/lib/directives/elementcontainer.directive.d.ts +8 -8
- package/lib/interfaces/modal.interface.d.ts +4 -0
- package/lib/pipe/htmlSanitize.pipe.d.ts +10 -10
- package/lib/pipe/panel-area.pipe.d.ts +7 -7
- package/lib/services/main.service.d.ts +136 -142
- package/lib/services/zcomponent.debug.service.d.ts +289 -68
- package/lib/services/zcomponent.service.d.ts +31 -44
- package/package.json +6 -13
- package/public-api.d.ts +93 -100
- package/styles/all.scss +643 -0
- package/styles/component.scss +0 -0
- package/styles/notificationkit.scss +53 -0
- package/esm2020/lib/animations/component-animations.mjs +0 -39
- package/esm2020/lib/components/buttonfieldbase.component.mjs +0 -80
- package/esm2020/lib/components/containerfieldbase.component.mjs +0 -50
- package/esm2020/lib/components/datalistingfieldbase.component.mjs +0 -277
- package/esm2020/lib/components/fieldbase.component.mjs +0 -178
- package/esm2020/lib/components/inputfieldbase.component.mjs +0 -202
- package/esm2020/lib/constants/constant.mjs +0 -4
- package/esm2020/lib/directives/elementcontainer.directive.mjs +0 -16
- package/esm2020/lib/directives/fieldelement.directive.mjs +0 -16
- package/esm2020/lib/directives/scrollbar.theme.directive.mjs +0 -45
- package/esm2020/lib/dropdown_buttons/dropdown_buttons.component.mjs +0 -109
- package/esm2020/lib/embed-components/context-menu/context-menu.component.mjs +0 -113
- package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +0 -93
- package/esm2020/lib/embed-components/page-loader/page-loader.component.mjs +0 -14
- package/esm2020/lib/embed-components/processing-record-loader/processing-record-loader.component.mjs +0 -14
- package/esm2020/lib/embed-components/spinner/spinner.component.mjs +0 -27
- package/esm2020/lib/ficon/ficon.component.mjs +0 -53
- package/esm2020/lib/input-error-message/input-error-message.component.mjs +0 -53
- package/esm2020/lib/kcard/kcard.component.mjs +0 -90
- package/esm2020/lib/kmenu/kmenu.component.mjs +0 -46
- package/esm2020/lib/kscrollview/kscrollview.component.mjs +0 -77
- package/esm2020/lib/ksplitter/ksplitter.component.mjs +0 -67
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +0 -657
- package/esm2020/lib/pipe/htmlSanitize.pipe.mjs +0 -18
- package/esm2020/lib/pipe/panel-area.pipe.mjs +0 -28
- package/esm2020/lib/services/main.service.mjs +0 -1307
- package/esm2020/lib/services/zcomponent.debug.service.mjs +0 -742
- package/esm2020/lib/services/zcomponent.service.mjs +0 -300
- package/esm2020/lib/sfdatetimepicker/sfdatetimepicker.component.mjs +0 -108
- package/esm2020/lib/sfquerybuilder/sfquerybuilder.component.mjs +0 -501
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +0 -229
- package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +0 -55
- package/esm2020/lib/uibulletin/uibulletin.component.mjs +0 -96
- package/esm2020/lib/uicontainer/uicontainer.component.mjs +0 -41
- package/esm2020/lib/uicontent/uicontent.component.mjs +0 -63
- package/esm2020/lib/uiheader/uiheader.component.mjs +0 -116
- package/esm2020/lib/uiheader/uiheader.service.mjs +0 -27
- package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +0 -36
- package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +0 -38
- package/esm2020/lib/uipage/uipage.component.mjs +0 -160
- package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +0 -40
- package/esm2020/lib/virtual-scroll/virtual-scroll.component.mjs +0 -249
- package/esm2020/lib/zbullet/zbullet.component.mjs +0 -77
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +0 -151
- package/esm2020/lib/zcard/zcard.component.mjs +0 -36
- package/esm2020/lib/zchart/zchart.component.mjs +0 -222
- package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +0 -42
- package/esm2020/lib/zchip/zchip.component.mjs +0 -119
- package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +0 -169
- package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +0 -60
- package/esm2020/lib/zcolorpicker/zcolorpicker.component.mjs +0 -47
- package/esm2020/lib/zdaterange/zdaterange.component.mjs +0 -72
- package/esm2020/lib/zdatetime/dateIonicFormatParser.pipe.mjs +0 -40
- package/esm2020/lib/zdatetime/dateIonicMinMaxDate.pipe.mjs +0 -22
- package/esm2020/lib/zdatetime/dateKendoFormatParser.pipe.mjs +0 -41
- package/esm2020/lib/zdatetime/dateParser.pipe.mjs +0 -36
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +0 -134
- package/esm2020/lib/zdiv/zdiv.component.mjs +0 -79
- package/esm2020/lib/zdiv/zdiv.pipe.mjs +0 -31
- package/esm2020/lib/zform/zform.component.mjs +0 -188
- package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +0 -51
- package/esm2020/lib/zganttchart/zganttchart.component.mjs +0 -160
- package/esm2020/lib/zgauge/zgauge.component.mjs +0 -122
- package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +0 -107
- package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +0 -146
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +0 -881
- package/esm2020/lib/zgrid/zgrid.component.mjs +0 -1131
- package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +0 -17
- package/esm2020/lib/zgrid/zgrid.service.mjs +0 -113
- package/esm2020/lib/zimg/zimg.component.mjs +0 -61
- package/esm2020/lib/zinput-container/zinput-container.component.mjs +0 -91
- package/esm2020/lib/zinput-container/zinput-container.pipe.mjs +0 -132
- package/esm2020/lib/zlabel/zlabel.component.mjs +0 -52
- package/esm2020/lib/zloop/zloop.component.mjs +0 -123
- package/esm2020/lib/zmfb/zmfb.component.mjs +0 -217
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +0 -124
- package/esm2020/lib/zmodal/zmodal.component.mjs +0 -129
- package/esm2020/lib/znumeric/znumeric.component.mjs +0 -110
- package/esm2020/lib/znumeric/znumeric.component.pipe.mjs +0 -19
- package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +0 -315
- package/esm2020/lib/zprogressbar/zprogressbar.component.mjs +0 -61
- package/esm2020/lib/zradiobutton/zradiobutton.component.mjs +0 -106
- package/esm2020/lib/zreport/zreport.component.mjs +0 -184
- package/esm2020/lib/zscheduler/zscheduler.component.mjs +0 -271
- package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +0 -150
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +0 -689
- package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +0 -35
- package/esm2020/lib/zselectmultiple/zselectmultiple.pipe.mjs +0 -29
- package/esm2020/lib/ztab/ztab.component.mjs +0 -211
- package/esm2020/lib/ztab/ztab.pipe.mjs +0 -28
- package/esm2020/lib/ztext/ztext.component.mjs +0 -167
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +0 -66
- package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +0 -135
- package/esm2020/lib/ztree/ztree.component.mjs +0 -539
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +0 -546
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +0 -106
- package/esm2020/lib/zudf/zudf.component.mjs +0 -1016
- package/esm2020/lib/zunknown/zunknown.component.mjs +0 -20
- package/esm2020/lib/zupload/zupload.component.mjs +0 -403
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +0 -244
- package/esm2020/mmhglobal-dynamicform.mjs +0 -5
- package/esm2020/public-api.mjs +0 -107
- package/fesm2015/mmhglobal-dynamicform.mjs +0 -16119
- package/fesm2015/mmhglobal-dynamicform.mjs.map +0 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +0 -16079
- package/fesm2020/mmhglobal-dynamicform.mjs.map +0 -1
- package/lib/directives/fieldelement.directive.d.ts +0 -8
- package/lib/directives/scrollbar.theme.directive.d.ts +0 -10
- package/lib/ficon/ficon.component.d.ts +0 -34
- package/lib/input-error-message/input-error-message.component.d.ts +0 -19
- package/lib/kcard/kcard.component.d.ts +0 -25
- package/lib/mmhglobal-dynamicform.module.d.ts +0 -133
- package/lib/uiactionbutton/uiactionbutton.component.d.ts +0 -39
- package/lib/uiappmenucontent/uiappmenucontent.component.d.ts +0 -27
- package/lib/uicontent/uicontent.component.d.ts +0 -29
- package/lib/uiheader/uiheader.component.d.ts +0 -39
- package/lib/uiheader/uiheader.service.d.ts +0 -11
- package/lib/uimenubutton/uimenubutton.component.d.ts +0 -20
- package/lib/uimenucontent/uimenucontent.component.d.ts +0 -24
- package/lib/uivalidationmessage/uivalidationmessage.component.d.ts +0 -21
- package/lib/zbullet/zbullet.component.d.ts +0 -27
- package/lib/zbuttons/zbuttons.component.d.ts +0 -25
- package/lib/zcodeeditor/zcodeeditor.component.d.ts +0 -43
- package/lib/zcodeeditor/zcodeeditor.pipe.d.ts +0 -12
- package/lib/zdaterange/zdaterange.component.d.ts +0 -29
- package/lib/zdiv/zdiv.component.d.ts +0 -22
- package/lib/zform/zform.component.d.ts +0 -38
- package/lib/zformcontrol/zformcontrol.component.d.ts +0 -25
- package/lib/zmodal/zmodal-mobile.component.d.ts +0 -38
- package/lib/zmodal/zmodal.component.d.ts +0 -44
- package/lib/zradiobutton/zradiobutton.component.d.ts +0 -34
- package/lib/zunknown/zunknown.component.d.ts +0 -17
- package/lib/zworkflowbuttons/zworkflowbuttons.component.d.ts +0 -32
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
/********** Angular **********/
|
|
2
|
-
import { Component, Input } from "@angular/core";
|
|
3
|
-
import { Validators } from "@angular/forms";
|
|
4
|
-
/********** Ionic **********/
|
|
5
|
-
/********** Plugin **********/
|
|
6
|
-
import { of } from 'rxjs';
|
|
7
|
-
import { delay, take } from 'rxjs/operators';
|
|
8
|
-
/********** Component & Service **********/
|
|
9
|
-
import { ZComponentHelper, ZComponentProperties } from "mmhglobal-zcore";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "mmhglobal-zcore";
|
|
12
|
-
import * as i2 from "@ionic/angular";
|
|
13
|
-
import * as i3 from "@progress/kendo-angular-scheduler";
|
|
14
|
-
import * as i4 from "./zscheduler.toolbar.component";
|
|
15
|
-
import * as i5 from "@angular/common";
|
|
16
|
-
import * as i6 from "@angular/forms";
|
|
17
|
-
import * as i7 from "@progress/kendo-angular-intl";
|
|
18
|
-
export class ZschedulerComponent {
|
|
19
|
-
// eventFields: SchedulerModelFields = {
|
|
20
|
-
// id: "Id",
|
|
21
|
-
// title: "Objective",
|
|
22
|
-
// description: "Description",
|
|
23
|
-
// // startTimezone: 'StartTimezone',
|
|
24
|
-
// start: "Date_UTC",
|
|
25
|
-
// end: "End_UTC"
|
|
26
|
-
// // endTimezone: 'EndTimezone',
|
|
27
|
-
// // isAllDay: 'IsAllDay',
|
|
28
|
-
// // recurrenceRule: 'RecurrenceRule',
|
|
29
|
-
// // recurrenceId: 'RecurrenceID',
|
|
30
|
-
// // recurrenceExceptions: 'RecurrenceException'
|
|
31
|
-
// };
|
|
32
|
-
constructor(changeDetector, storageService, authService) {
|
|
33
|
-
this.changeDetector = changeDetector;
|
|
34
|
-
this.storageService = storageService;
|
|
35
|
-
this.authService = authService;
|
|
36
|
-
this.isLoading = true;
|
|
37
|
-
this.events = [];
|
|
38
|
-
this.selectedDate = new Date();
|
|
39
|
-
this.local = {
|
|
40
|
-
inProgress: false,
|
|
41
|
-
ctrlScope: null
|
|
42
|
-
};
|
|
43
|
-
// selectedDate: Date = new Date();
|
|
44
|
-
this.selectedViewIndex = 3;
|
|
45
|
-
this.componentProperties = new ZComponentProperties();
|
|
46
|
-
this.getEventStyles = (args) => {
|
|
47
|
-
if (args && args.event && args.event.dataItem) {
|
|
48
|
-
const BGColor = args.event.dataItem["backgroundColor"];
|
|
49
|
-
const BorderColor = args.event.dataItem["borderColor"];
|
|
50
|
-
if (BGColor && BorderColor) {
|
|
51
|
-
return { backgroundColor: BGColor, bordercolor: BorderColor, color: "white" };
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return { backgroundColor: "#ff7c73", bordercolor: "#ff7c73", color: "white" };
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
this.getSlotClass = (args) => {
|
|
59
|
-
const hour = args.start.getHours();
|
|
60
|
-
args.resources = this.events;
|
|
61
|
-
return {
|
|
62
|
-
args
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
this.setData = (gData) => {
|
|
66
|
-
this.selectedViewIndex = gData || this.selectedViewIndex;
|
|
67
|
-
//reset data
|
|
68
|
-
this.getItems();
|
|
69
|
-
};
|
|
70
|
-
this.setEnable = (status) => {
|
|
71
|
-
this.componentProperties.isReadOnly = !status;
|
|
72
|
-
};
|
|
73
|
-
this.setVisible = (status) => {
|
|
74
|
-
this.componentProperties.isVisible = status;
|
|
75
|
-
this.data.Visible = status;
|
|
76
|
-
};
|
|
77
|
-
this.setRequire = (status) => {
|
|
78
|
-
this.componentProperties.isRequired = status;
|
|
79
|
-
ZComponentHelper.changeValidator(status, this.group, this.data.Value, this.componentProperties, Validators.required);
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
ngOnInit() {
|
|
83
|
-
ZComponentHelper.setComponentProperties(this);
|
|
84
|
-
ZComponentHelper.registerComponent(this);
|
|
85
|
-
this.local.ctrlScope = this.group.ctrlScope;
|
|
86
|
-
//this.selectedViewIndex = this.data.SelectedViewIndex || this.selectedViewIndex;
|
|
87
|
-
//
|
|
88
|
-
if (this.data['SaveFilter']) {
|
|
89
|
-
this.setSchedulerSessionKey(this.group);
|
|
90
|
-
this.getSchedulerSessionFilter(this.group);
|
|
91
|
-
}
|
|
92
|
-
this.getItems();
|
|
93
|
-
}
|
|
94
|
-
ngAfterViewInit() {
|
|
95
|
-
//this.selectedViewIndex = this.data.SelectedViewIndex || this.selectedViewIndex;
|
|
96
|
-
}
|
|
97
|
-
getItems() {
|
|
98
|
-
// if (this.isLoading) {
|
|
99
|
-
// return [];
|
|
100
|
-
// }
|
|
101
|
-
// debugger;
|
|
102
|
-
const v = this.data.Value;
|
|
103
|
-
if (Array.isArray(v)) {
|
|
104
|
-
return v;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
const evalValue = ZComponentHelper.getGroupEvalValue.call(this, v);
|
|
108
|
-
// debugger;
|
|
109
|
-
if (evalValue) {
|
|
110
|
-
this.events = evalValue;
|
|
111
|
-
if (this.events) {
|
|
112
|
-
this.isLoading = false;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
console.warn("Invalid field.Value setting ", this.data.Value);
|
|
117
|
-
return [];
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
onDateChange(args) {
|
|
122
|
-
// this.events = generateEvents(args.dateRange.start, 7);
|
|
123
|
-
if (this.local.inProgress) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
//Set session values
|
|
127
|
-
this.group["selectedDate"] = args.selectedDate;
|
|
128
|
-
console.log("zschedule component date-change selection: ", args.dateRange);
|
|
129
|
-
// this.local.selectedDate = args.dateRange.start;
|
|
130
|
-
this.group.subject.next({
|
|
131
|
-
type: "zscheduler-onDateChange",
|
|
132
|
-
target: this.data.CalendarOptions + ".dateClick",
|
|
133
|
-
event: args.dateRange
|
|
134
|
-
});
|
|
135
|
-
// We're setting the events after the current change detection cycle
|
|
136
|
-
// has completed, hence we need to trigger a new one.
|
|
137
|
-
this.changeDetector.detectChanges();
|
|
138
|
-
}
|
|
139
|
-
onSlotDblClick({ sender, start, end, isAllDay }) {
|
|
140
|
-
console.log("zscheduler component slot-double-click: ", sender, start, end, isAllDay);
|
|
141
|
-
if (sender.selectedView.name === "month" ||
|
|
142
|
-
sender.selectedView.name === "week") {
|
|
143
|
-
this.local.inProgress = true;
|
|
144
|
-
this.selectedViewIndex = 3;
|
|
145
|
-
this.selectedDate = start;
|
|
146
|
-
of([]).pipe(take(1), delay(1000)).subscribe(() => this.local.inProgress = false);
|
|
147
|
-
}
|
|
148
|
-
// this.group.subject.next({
|
|
149
|
-
// Type: "zscheduler-onSlotDblClick",
|
|
150
|
-
// Target: this.data.CalendarOptions + 'select',
|
|
151
|
-
// event: { sender, start, end, isAllDay }
|
|
152
|
-
// });
|
|
153
|
-
// this.closeEditor(sender);
|
|
154
|
-
// this.formGroup = this.formBuilder.group({
|
|
155
|
-
// 'Start': [start, Validators.required],
|
|
156
|
-
// 'End': [end, Validators.required],
|
|
157
|
-
// 'StartTimezone': new FormControl(),
|
|
158
|
-
// 'EndTimezone': new FormControl(),
|
|
159
|
-
// 'IsAllDay': isAllDay,
|
|
160
|
-
// 'Title': new FormControl(''),
|
|
161
|
-
// 'Description': new FormControl(''),
|
|
162
|
-
// 'RecurrenceRule': new FormControl(),
|
|
163
|
-
// 'RecurrenceID': new FormControl()
|
|
164
|
-
// });
|
|
165
|
-
// sender.addEvent(this.formGroup);
|
|
166
|
-
}
|
|
167
|
-
onEventDblClick({ sender, event }) {
|
|
168
|
-
console.log("zscheduler component event-double-click: ", sender, event);
|
|
169
|
-
// this.group.subject.next({
|
|
170
|
-
// type: "zscheduler-onEventDblClick" + ".eventClick",
|
|
171
|
-
// target: this.data.CalendarOptions,
|
|
172
|
-
// event: { sender, event }
|
|
173
|
-
// } as ZComponentOutputEvent);
|
|
174
|
-
// this.closeEditor(sender);
|
|
175
|
-
// let dataItem = event.dataItem;
|
|
176
|
-
// if (this.editService.isRecurring(dataItem)) {
|
|
177
|
-
// sender.openRecurringConfirmationDialog(CrudOperation.Edit)
|
|
178
|
-
// // The result will be undefined if the dialog was closed.
|
|
179
|
-
// .pipe(filter(editMode => editMode !== undefined))
|
|
180
|
-
// .subscribe((editMode: EditMode) => {
|
|
181
|
-
// if (editMode === EditMode.Series) {
|
|
182
|
-
// dataItem = this.editService.findRecurrenceMaster(dataItem);
|
|
183
|
-
// }
|
|
184
|
-
// this.formGroup = this.createFormGroup(dataItem);
|
|
185
|
-
// sender.editEvent(dataItem, { group: this.formGroup, mode: editMode });
|
|
186
|
-
// });
|
|
187
|
-
// } else {
|
|
188
|
-
// this.formGroup = this.createFormGroup(dataItem);
|
|
189
|
-
// sender.editEvent(dataItem, { group: this.formGroup });
|
|
190
|
-
// }
|
|
191
|
-
if (this.data.OnItemClick) {
|
|
192
|
-
//Restore session
|
|
193
|
-
this.beforeSchedulerGetData(this.group);
|
|
194
|
-
this.setSchedulerSessionFilter(this.group);
|
|
195
|
-
const func = ZComponentHelper.getGroupEvalValue.call(this, this.data.OnItemClick);
|
|
196
|
-
if (typeof func === 'function') {
|
|
197
|
-
const callFunc = func.bind(this.group.ctrlScope);
|
|
198
|
-
callFunc(event);
|
|
199
|
-
}
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
setSchedulerSessionKey(group) {
|
|
204
|
-
if (group["SchedulerStorageKey"]) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
group["SchedulerStorageKey"] = 'zgrid_' + group.resourceURL + '_' + this.data.Value + '::' + this.authService.e1Token.userName;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
beforeSchedulerGetData(group) {
|
|
212
|
-
console.warn("beforeDateRangeBinding triggered");
|
|
213
|
-
if (!group.beforeSchedulerGetData) {
|
|
214
|
-
console.warn("group.beforeDateRangeBinding is undefined");
|
|
215
|
-
return of(true);
|
|
216
|
-
}
|
|
217
|
-
return group.beforeSchedulerGetData(group);
|
|
218
|
-
}
|
|
219
|
-
async setSchedulerSessionFilter(group) {
|
|
220
|
-
if (!group["SchedulerStorageKey"]) {
|
|
221
|
-
return null;
|
|
222
|
-
}
|
|
223
|
-
const StorageKey = group["SchedulerStorageKey"];
|
|
224
|
-
let lstFilter = {};
|
|
225
|
-
if (group && this.storageService && this.data['SaveFilter']) {
|
|
226
|
-
//list of data for StateFilter and FilterParams
|
|
227
|
-
lstFilter = {
|
|
228
|
-
"SelectedDate": JSON.stringify(group["selectedDate"])
|
|
229
|
-
};
|
|
230
|
-
//create session storage
|
|
231
|
-
this.storageService.set(StorageKey, JSON.stringify(lstFilter));
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
async getSchedulerSessionFilter(group) {
|
|
235
|
-
if (!group["SchedulerStorageKey"]) {
|
|
236
|
-
return null;
|
|
237
|
-
}
|
|
238
|
-
const StorageKey = group["SchedulerStorageKey"];
|
|
239
|
-
if (this.storageService) {
|
|
240
|
-
await this.storageService.get(StorageKey)
|
|
241
|
-
.then(data => {
|
|
242
|
-
if (!data || !data.value || data.value === "null") {
|
|
243
|
-
return null;
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
const result = JSON.parse(data.value);
|
|
247
|
-
this.selectedDate = new Date(JSON.parse(result["SelectedDate"]));
|
|
248
|
-
return data;
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
return null;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
ZschedulerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZschedulerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.StorageSessionService }, { token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Component });
|
|
258
|
-
ZschedulerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZschedulerComponent, selector: "app-zscheduler", inputs: { data: "data", group: "group", form: "form", ngStyle: "ngStyle" }, ngImport: i0, template: "<ion-item [formGroup]=\"form\" *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\" *ngIf=\"data.ShowLabel\" position=\"stacked\">\r\n {{data.Label}} <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\" color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <kendo-scheduler *ngIf=\"!isLoading\" [kendoSchedulerBinding]=\"events\" [selectedDate]=\"selectedDate\" (dateChange)=\"onDateChange($event)\"\r\n [selectedViewIndex]=\"selectedViewIndex\" [eventStyles]=\"getEventStyles\" [slotClass]=\"getSlotClass\"\r\n (slotDblClick)=\"onSlotDblClick($event)\" (eventDblClick)=\"onEventDblClick($event)\" scrollTime=\"08:00\"\r\n [style.height]=\"(!!data.Height ? [data.Height] : '600px')\">\r\n <!-- [style.font-size]=\"(!!data.FontSize ? [data.FontSize] : '12px')\"> -->\r\n <!--Note: line-height same with [eventHeight]-->\r\n <ng-template kendoSchedulerEventTemplate let-event>\r\n <span style=\"margin-left: -5px;line-height: 25px;\">{{ event.title }}</span>\r\n </ng-template>\r\n\r\n <ng-template kendoSchedulerToolbarTemplate let-selectedDate=\"selectedDate\">\r\n <zschedulertoolbar [local]=\"local\" [selectedDate]=\"selectedDate\">\r\n </zschedulertoolbar>\r\n <ul kendoSchedulerToolbarViewSelector></ul>\r\n </ng-template>\r\n\r\n <ng-template kendoSchedulerAllDaySlotTemplate let-date=\"date\">\r\n <strong>{{ date | kendoDate: 'dd-MMM-yyyy' }}</strong>\r\n </ng-template>\r\n <ng-template kendoSchedulerDateHeaderTemplate let-date=\"date\">\r\n <strong>{{ date | kendoDate: \"ccc\" }}</strong>\r\n </ng-template>\r\n\r\n\r\n <!-- <kendo-scheduler-day-view startTime=\"08:00\">\r\n </kendo-scheduler-day-view>\r\n\r\n <kendo-scheduler-week-view startTime=\"08:00\">\r\n </kendo-scheduler-week-view> -->\r\n\r\n <kendo-scheduler-day-view>\r\n </kendo-scheduler-day-view>\r\n\r\n <kendo-scheduler-week-view>\r\n </kendo-scheduler-week-view>\r\n\r\n <kendo-scheduler-month-view [eventHeight]=\"25\">\r\n </kendo-scheduler-month-view>\r\n\r\n <!-- <kendo-scheduler-timeline-view>\r\n </kendo-scheduler-timeline-view> -->\r\n\r\n <kendo-scheduler-agenda-view>\r\n </kendo-scheduler-agenda-view>\r\n </kendo-scheduler>\r\n\r\n</ion-item>\r\n", styles: ["ion-item{--padding-start: 0px;--inner-padding-end: 0px}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i3.SchedulerComponent, selector: "kendo-scheduler", inputs: ["selectedViewIndex", "editable", "selectable", "min", "max", "eventHeight", "columnWidth", "showWorkHours", "startTime", "endTime", "workDayStart", "workDayEnd", "workWeekStart", "workWeekEnd", "weekStart", "slotDuration", "slotDivisions", "slotFill", "scrollTime", "group", "resources", "loading", "timezone", "events", "selectedDate", "modelFields", "currentTimeMarker", "highlightOngoingEvents", "slotClass", "eventClass", "eventStyles", "isSlotSelected"], outputs: ["selectedViewIndexChange", "navigate", "dateChange", "slotClick", "slotDblClick", "create", "eventClick", "eventDblClick", "eventKeydown", "cancel", "save", "remove", "resizeStart", "resize", "resizeEnd", "dragStart", "drag", "dragEnd", "slotDragStart", "slotDrag", "slotDragEnd", "pdfExport"] }, { type: i4.ZSchedulerToolBarComponent, selector: "zschedulertoolbar", inputs: ["local", "selectedDate"] }, { type: i3.ToolbarViewSelectorComponent, selector: "[kendoSchedulerToolbarViewSelector]" }, { type: i3.DayViewComponent, selector: "kendo-scheduler-day-view", inputs: ["selectedDateFormat", "selectedShortDateFormat"] }, { type: i3.WeekViewComponent, selector: "kendo-scheduler-week-view", inputs: ["selectedDateFormat", "selectedShortDateFormat"] }, { type: i3.MonthViewComponent, selector: "kendo-scheduler-month-view", inputs: ["eventHeight", "selectedDateFormat", "selectedShortDateFormat"] }, { type: i3.AgendaViewComponent, selector: "kendo-scheduler-agenda-view", inputs: ["selectedDateFormat", "selectedShortDateFormat", "numberOfDays"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.ShortcutsDirective, selector: "kendo-scheduler" }, { type: i3.DataBindingDirective, selector: "[kendoSchedulerBinding]", inputs: ["kendoSchedulerBinding"] }, { type: i3.EventTemplateDirective, selector: "[kendoSchedulerEventTemplate]" }, { type: i3.ToolbarTemplateDirective, selector: "[kendoSchedulerToolbarTemplate]" }, { type: i3.AllDaySlotTemplateDirective, selector: "[kendoSchedulerAllDaySlotTemplate]" }, { type: i3.DateHeaderTemplateDirective, selector: "[kendoSchedulerDateHeaderTemplate]" }], pipes: { "kendoDate": i7.DatePipe } });
|
|
259
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZschedulerComponent, decorators: [{
|
|
260
|
-
type: Component,
|
|
261
|
-
args: [{ selector: "app-zscheduler", template: "<ion-item [formGroup]=\"form\" *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <ion-label [attr.for]=\"data.Value\" *ngIf=\"data.ShowLabel\" position=\"stacked\">\r\n {{data.Label}} <ion-text *ngIf=\"(!!componentProperties.isRequiredField ? group[componentProperties.isRequiredField] : componentProperties.isRequired)\" color=\"danger\">*</ion-text>\r\n </ion-label>\r\n <kendo-scheduler *ngIf=\"!isLoading\" [kendoSchedulerBinding]=\"events\" [selectedDate]=\"selectedDate\" (dateChange)=\"onDateChange($event)\"\r\n [selectedViewIndex]=\"selectedViewIndex\" [eventStyles]=\"getEventStyles\" [slotClass]=\"getSlotClass\"\r\n (slotDblClick)=\"onSlotDblClick($event)\" (eventDblClick)=\"onEventDblClick($event)\" scrollTime=\"08:00\"\r\n [style.height]=\"(!!data.Height ? [data.Height] : '600px')\">\r\n <!-- [style.font-size]=\"(!!data.FontSize ? [data.FontSize] : '12px')\"> -->\r\n <!--Note: line-height same with [eventHeight]-->\r\n <ng-template kendoSchedulerEventTemplate let-event>\r\n <span style=\"margin-left: -5px;line-height: 25px;\">{{ event.title }}</span>\r\n </ng-template>\r\n\r\n <ng-template kendoSchedulerToolbarTemplate let-selectedDate=\"selectedDate\">\r\n <zschedulertoolbar [local]=\"local\" [selectedDate]=\"selectedDate\">\r\n </zschedulertoolbar>\r\n <ul kendoSchedulerToolbarViewSelector></ul>\r\n </ng-template>\r\n\r\n <ng-template kendoSchedulerAllDaySlotTemplate let-date=\"date\">\r\n <strong>{{ date | kendoDate: 'dd-MMM-yyyy' }}</strong>\r\n </ng-template>\r\n <ng-template kendoSchedulerDateHeaderTemplate let-date=\"date\">\r\n <strong>{{ date | kendoDate: \"ccc\" }}</strong>\r\n </ng-template>\r\n\r\n\r\n <!-- <kendo-scheduler-day-view startTime=\"08:00\">\r\n </kendo-scheduler-day-view>\r\n\r\n <kendo-scheduler-week-view startTime=\"08:00\">\r\n </kendo-scheduler-week-view> -->\r\n\r\n <kendo-scheduler-day-view>\r\n </kendo-scheduler-day-view>\r\n\r\n <kendo-scheduler-week-view>\r\n </kendo-scheduler-week-view>\r\n\r\n <kendo-scheduler-month-view [eventHeight]=\"25\">\r\n </kendo-scheduler-month-view>\r\n\r\n <!-- <kendo-scheduler-timeline-view>\r\n </kendo-scheduler-timeline-view> -->\r\n\r\n <kendo-scheduler-agenda-view>\r\n </kendo-scheduler-agenda-view>\r\n </kendo-scheduler>\r\n\r\n</ion-item>\r\n", styles: ["ion-item{--padding-start: 0px;--inner-padding-end: 0px}\n"] }]
|
|
262
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.StorageSessionService }, { type: i1.AuthService }]; }, propDecorators: { data: [{
|
|
263
|
-
type: Input
|
|
264
|
-
}], group: [{
|
|
265
|
-
type: Input
|
|
266
|
-
}], form: [{
|
|
267
|
-
type: Input
|
|
268
|
-
}], ngStyle: [{
|
|
269
|
-
type: Input
|
|
270
|
-
}] } });
|
|
271
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNjaGVkdWxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96c2NoZWR1bGVyL3pzY2hlZHVsZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenNjaGVkdWxlci96c2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzdDLDJDQUEyQztBQUMzQyxPQUFPLEVBQ08sZ0JBQWdCLEVBQ1osb0JBQW9CLEVBQ3JDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sbUJBQW1CO0lBaUI5Qix3Q0FBd0M7SUFDeEMsY0FBYztJQUNkLHdCQUF3QjtJQUN4QixnQ0FBZ0M7SUFDaEMsdUNBQXVDO0lBQ3ZDLHVCQUF1QjtJQUN2QixtQkFBbUI7SUFDbkIsbUNBQW1DO0lBQ25DLDZCQUE2QjtJQUM3Qix5Q0FBeUM7SUFDekMscUNBQXFDO0lBQ3JDLG1EQUFtRDtJQUNuRCxLQUFLO0lBRUwsWUFDVSxjQUFpQyxFQUNqQyxjQUFxQyxFQUNyQyxXQUF3QjtRQUZ4QixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FB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QUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERhdGVDaGFuZ2VFdmVudCwgU2xvdENsaWNrRXZlbnQsIEV2ZW50Q2xpY2tFdmVudCwgRXZlbnRTdHlsZUFyZ3MsIFNsb3RDbGFzc0FyZ3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItc2NoZWR1bGVyXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LFxyXG4gIFpHcm91cCwgWkZpZWxkLCBaQ29tcG9uZW50UHJvcGVydGllcywgU3RvcmFnZVNlc3Npb25TZXJ2aWNlLCBBdXRoU2VydmljZVxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenNjaGVkdWxlclwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venNjaGVkdWxlci5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi96c2NoZWR1bGVyLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWnNjaGVkdWxlckNvbXBvbmVudCBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIG5nU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnk7IH1cclxuXHJcbiAgaXNMb2FkaW5nID0gdHJ1ZTtcclxuICBldmVudHM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoKTtcclxuICBsb2NhbCA9IHtcclxuICAgIGluUHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgY3RybFNjb3BlOiBudWxsXHJcbiAgfTtcclxuICAvLyBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIHNlbGVjdGVkVmlld0luZGV4ID0gMztcclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcblxyXG4gIC8vIGV2ZW50RmllbGRzOiBTY2hlZHVsZXJNb2RlbEZpZWxkcyA9IHtcclxuICAvLyAgIGlkOiBcIklkXCIsXHJcbiAgLy8gICB0aXRsZTogXCJPYmplY3RpdmVcIixcclxuICAvLyAgIGRlc2NyaXB0aW9uOiBcIkRlc2NyaXB0aW9uXCIsXHJcbiAgLy8gICAvLyBzdGFydFRpbWV6b25lOiAnU3RhcnRUaW1lem9uZScsXHJcbiAgLy8gICBzdGFydDogXCJEYXRlX1VUQ1wiLFxyXG4gIC8vICAgZW5kOiBcIkVuZF9VVENcIlxyXG4gIC8vICAgLy8gZW5kVGltZXpvbmU6ICdFbmRUaW1lem9uZScsXHJcbiAgLy8gICAvLyBpc0FsbERheTogJ0lzQWxsRGF5JyxcclxuICAvLyAgIC8vIHJlY3VycmVuY2VSdWxlOiAnUmVjdXJyZW5jZVJ1bGUnLFxyXG4gIC8vICAgLy8gcmVjdXJyZW5jZUlkOiAnUmVjdXJyZW5jZUlEJyxcclxuICAvLyAgIC8vIHJlY3VycmVuY2VFeGNlcHRpb25zOiAnUmVjdXJyZW5jZUV4Y2VwdGlvbidcclxuICAvLyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2VcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuICAgIHRoaXMubG9jYWwuY3RybFNjb3BlID0gdGhpcy5ncm91cC5jdHJsU2NvcGU7XHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRWaWV3SW5kZXggPSB0aGlzLmRhdGEuU2VsZWN0ZWRWaWV3SW5kZXggfHwgdGhpcy5zZWxlY3RlZFZpZXdJbmRleDtcclxuICAgIC8vXHJcbiAgICBpZiAodGhpcy5kYXRhWydTYXZlRmlsdGVyJ10pIHtcclxuICAgICAgdGhpcy5zZXRTY2hlZHVsZXJTZXNzaW9uS2V5KHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLmdldFNjaGVkdWxlclNlc3Npb25GaWx0ZXIodGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRWaWV3SW5kZXggPSB0aGlzLmRhdGEuU2VsZWN0ZWRWaWV3SW5kZXggfHwgdGhpcy5zZWxlY3RlZFZpZXdJbmRleDtcclxuICB9XHJcblxyXG4gIGdldEV2ZW50U3R5bGVzID0gKGFyZ3M6IEV2ZW50U3R5bGVBcmdzKSA9PiB7XHJcblxyXG4gICAgaWYoYXJncyAmJiBhcmdzLmV2ZW50ICYmIGFyZ3MuZXZlbnQuZGF0YUl0ZW0pXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IEJHQ29sb3I9YXJncy5ldmVudC5kYXRhSXRlbVtcImJhY2tncm91bmRDb2xvclwiXTtcclxuICAgICAgY29uc3QgQm9yZGVyQ29sb3I9YXJncy5ldmVudC5kYXRhSXRlbVtcImJvcmRlckNvbG9yXCJdO1xyXG5cclxuICAgIGlmIChCR0NvbG9yICYmIEJvcmRlckNvbG9yKSBcclxuICAgIHsgcmV0dXJuIHsgYmFja2dyb3VuZENvbG9yOiBCR0NvbG9yLCBib3JkZXJjb2xvcjogQm9yZGVyQ29sb3IsIGNvbG9yOiBcIndoaXRlXCIgfTsgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB7IGJhY2tncm91bmRDb2xvcjogXCIjZmY3YzczXCIsIGJvcmRlcmNvbG9yOiBcIiNmZjdjNzNcIiAsIGNvbG9yOiBcIndoaXRlXCIgfTtcclxuICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2xvdENsYXNzID0gKGFyZ3M6IFNsb3RDbGFzc0FyZ3MpID0+IHtcclxuICAgIGNvbnN0IGhvdXIgPSBhcmdzLnN0YXJ0LmdldEhvdXJzKCk7XHJcbiAgICBhcmdzLnJlc291cmNlcyA9IHRoaXMuZXZlbnRzXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhcmdzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5pc0xvYWRpbmcpIHtcclxuICAgIC8vICAgIHJldHVybiBbXTtcclxuICAgIC8vICB9XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIGNvbnN0IHYgPSB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICByZXR1cm4gdjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGV2YWxWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB2KTtcclxuICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgIGlmIChldmFsVmFsdWUpIHtcclxuICAgICAgICB0aGlzLmV2ZW50cyA9IGV2YWxWYWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5ldmVudHMpIHtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcIkludmFsaWQgZmllbGQuVmFsdWUgc2V0dGluZyBcIiwgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRGF0ZUNoYW5nZShhcmdzOiBEYXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcclxuXHJcbiAgICAvLyB0aGlzLmV2ZW50cyA9IGdlbmVyYXRlRXZlbnRzKGFyZ3MuZGF0ZVJhbmdlLnN0YXJ0LCA3KTtcclxuXHJcbiAgICBpZiAodGhpcy5sb2NhbC5pblByb2dyZXNzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL1NldCBzZXNzaW9uIHZhbHVlc1xyXG4gICAgdGhpcy5ncm91cFtcInNlbGVjdGVkRGF0ZVwiXSA9IGFyZ3Muc2VsZWN0ZWREYXRlO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwienNjaGVkdWxlIGNvbXBvbmVudCBkYXRlLWNoYW5nZSBzZWxlY3Rpb246IFwiLCBhcmdzLmRhdGVSYW5nZSk7XHJcbiAgICAgLy8gdGhpcy5sb2NhbC5zZWxlY3RlZERhdGUgPSBhcmdzLmRhdGVSYW5nZS5zdGFydDtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgIHR5cGU6IFwienNjaGVkdWxlci1vbkRhdGVDaGFuZ2VcIixcclxuICAgIHRhcmdldDogdGhpcy5kYXRhLkNhbGVuZGFyT3B0aW9ucyArIFwiLmRhdGVDbGlja1wiLFxyXG4gICAgZXZlbnQ6IGFyZ3MuZGF0ZVJhbmdlXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICAvLyBXZSdyZSBzZXR0aW5nIHRoZSBldmVudHMgYWZ0ZXIgdGhlIGN1cnJlbnQgY2hhbmdlIGRldGVjdGlvbiBjeWNsZVxyXG4gICAgLy8gaGFzIGNvbXBsZXRlZCwgaGVuY2Ugd2UgbmVlZCB0byB0cmlnZ2VyIGEgbmV3IG9uZS5cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2xvdERibENsaWNrKHsgc2VuZGVyLCBzdGFydCwgZW5kLCBpc0FsbERheSB9OiBTbG90Q2xpY2tFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXHJcbiAgICAgIFwienNjaGVkdWxlciBjb21wb25lbnQgc2xvdC1kb3VibGUtY2xpY2s6IFwiLFxyXG4gICAgICBzZW5kZXIsXHJcbiAgICAgIHN0YXJ0LFxyXG4gICAgICBlbmQsXHJcbiAgICAgIGlzQWxsRGF5XHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgc2VuZGVyLnNlbGVjdGVkVmlldy5uYW1lID09PSBcIm1vbnRoXCIgfHxcclxuICAgICAgc2VuZGVyLnNlbGVjdGVkVmlldy5uYW1lID09PSBcIndlZWtcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMubG9jYWwuaW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3SW5kZXggPSAzO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHN0YXJ0O1xyXG4gICAgICBvZihbXSkucGlwZSh0YWtlKDEpLCBkZWxheSgxMDAwKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9jYWwuaW5Qcm9ncmVzcyA9IGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAvLyAgIFR5cGU6IFwienNjaGVkdWxlci1vblNsb3REYmxDbGlja1wiLFxyXG4gICAgLy8gICBUYXJnZXQ6IHRoaXMuZGF0YS5DYWxlbmRhck9wdGlvbnMgKyAnc2VsZWN0JyxcclxuICAgIC8vICAgZXZlbnQ6IHsgc2VuZGVyLCBzdGFydCwgZW5kLCBpc0FsbERheSB9XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMuY2xvc2VFZGl0b3Ioc2VuZGVyKTtcclxuICAgIC8vIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAvLyAgICAgJ1N0YXJ0JzogW3N0YXJ0LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgIC8vICAgICAnRW5kJzogW2VuZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAvLyAgICAgJ1N0YXJ0VGltZXpvbmUnOiBuZXcgRm9ybUNvbnRyb2woKSxcclxuICAgIC8vICAgICAnRW5kVGltZXpvbmUnOiBuZXcgRm9ybUNvbnRyb2woKSxcclxuICAgIC8vICAgICAnSXNBbGxEYXknOiBpc0FsbERheSxcclxuICAgIC8vICAgICAnVGl0bGUnOiBuZXcgRm9ybUNvbnRyb2woJycpLFxyXG4gICAgLy8gICAgICdEZXNjcmlwdGlvbic6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAvLyAgICAgJ1JlY3VycmVuY2VSdWxlJzogbmV3IEZvcm1Db250cm9sKCksXHJcbiAgICAvLyAgICAgJ1JlY3VycmVuY2VJRCc6IG5ldyBGb3JtQ29udHJvbCgpXHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHNlbmRlci5hZGRFdmVudCh0aGlzLmZvcm1Hcm91cCk7XHJcbiAgfVxyXG5cclxuICBvbkV2ZW50RGJsQ2xpY2soeyBzZW5kZXIsIGV2ZW50IH06IEV2ZW50Q2xpY2tFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJ6c2NoZWR1bGVyIGNvbXBvbmVudCBldmVudC1kb3VibGUtY2xpY2s6IFwiLCBzZW5kZXIsIGV2ZW50KTtcclxuXHJcbiAgICAvLyB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAvLyAgIHR5cGU6IFwienNjaGVkdWxlci1vbkV2ZW50RGJsQ2xpY2tcIiArIFwiLmV2ZW50Q2xpY2tcIixcclxuICAgIC8vICAgdGFyZ2V0OiB0aGlzLmRhdGEuQ2FsZW5kYXJPcHRpb25zLFxyXG4gICAgLy8gICBldmVudDogeyBzZW5kZXIsIGV2ZW50IH1cclxuICAgIC8vIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuXHJcbiAgICAvLyB0aGlzLmNsb3NlRWRpdG9yKHNlbmRlcik7XHJcbiAgICAvLyBsZXQgZGF0YUl0ZW0gPSBldmVudC5kYXRhSXRlbTtcclxuICAgIC8vIGlmICh0aGlzLmVkaXRTZXJ2aWNlLmlzUmVjdXJyaW5nKGRhdGFJdGVtKSkge1xyXG4gICAgLy8gICAgIHNlbmRlci5vcGVuUmVjdXJyaW5nQ29uZmlybWF0aW9uRGlhbG9nKENydWRPcGVyYXRpb24uRWRpdClcclxuICAgIC8vICAgICAgICAgLy8gVGhlIHJlc3VsdCB3aWxsIGJlIHVuZGVmaW5lZCBpZiB0aGUgZGlhbG9nIHdhcyBjbG9zZWQuXHJcbiAgICAvLyAgICAgICAgIC5waXBlKGZpbHRlcihlZGl0TW9kZSA9PiBlZGl0TW9kZSAhPT0gdW5kZWZpbmVkKSlcclxuICAgIC8vICAgICAgICAgLnN1YnNjcmliZSgoZWRpdE1vZGU6IEVkaXRNb2RlKSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICBpZiAoZWRpdE1vZGUgPT09IEVkaXRNb2RlLlNlcmllcykge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGFJdGVtID0gdGhpcy5lZGl0U2VydmljZS5maW5kUmVjdXJyZW5jZU1hc3RlcihkYXRhSXRlbSk7XHJcbiAgICAvLyAgICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuY3JlYXRlRm9ybUdyb3VwKGRhdGFJdGVtKTtcclxuICAgIC8vICAgICAgICAgICAgIHNlbmRlci5lZGl0RXZlbnQoZGF0YUl0ZW0sIHsgZ3JvdXA6IHRoaXMuZm9ybUdyb3VwLCBtb2RlOiBlZGl0TW9kZSB9KTtcclxuICAgIC8vICAgICAgICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5jcmVhdGVGb3JtR3JvdXAoZGF0YUl0ZW0pO1xyXG4gICAgLy8gICAgIHNlbmRlci5lZGl0RXZlbnQoZGF0YUl0ZW0sIHsgZ3JvdXA6IHRoaXMuZm9ybUdyb3VwIH0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuT25JdGVtQ2xpY2spIHtcclxuXHJcbiAgICAgIC8vUmVzdG9yZSBzZXNzaW9uXHJcbiAgICAgIHRoaXMuYmVmb3JlU2NoZWR1bGVyR2V0RGF0YSh0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5zZXRTY2hlZHVsZXJTZXNzaW9uRmlsdGVyKHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2spO1xyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcblxyXG4gIH1cclxuICBcclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmlld0luZGV4ID0gZ0RhdGEgfHwgdGhpcy5zZWxlY3RlZFZpZXdJbmRleDtcclxuICAgIC8vcmVzZXQgZGF0YVxyXG4gICAgdGhpcy5nZXRJdGVtcygpO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc2V0U2NoZWR1bGVyU2Vzc2lvbktleShncm91cDogWkdyb3VwKSB7XHJcblxyXG4gICAgaWYgKGdyb3VwW1wiU2NoZWR1bGVyU3RvcmFnZUtleVwiXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZ3JvdXBbXCJTY2hlZHVsZXJTdG9yYWdlS2V5XCJdID0gJ3pncmlkXycgKyBncm91cC5yZXNvdXJjZVVSTCArICdfJyArIHRoaXMuZGF0YS5WYWx1ZSArICc6OicgKyB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJlZm9yZVNjaGVkdWxlckdldERhdGEoZ3JvdXA6IFpHcm91cCkge1xyXG4gICAgY29uc29sZS53YXJuKFwiYmVmb3JlRGF0ZVJhbmdlQmluZGluZyB0cmlnZ2VyZWRcIik7XHJcbiAgICBpZiAoIWdyb3VwLmJlZm9yZVNjaGVkdWxlckdldERhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXAuYmVmb3JlRGF0ZVJhbmdlQmluZGluZyBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlU2NoZWR1bGVyR2V0RGF0YShncm91cCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzZXRTY2hlZHVsZXJTZXNzaW9uRmlsdGVyKGdyb3VwOiBaR3JvdXApIHtcclxuXHJcbiAgICBpZiAoIWdyb3VwW1wiU2NoZWR1bGVyU3RvcmFnZUtleVwiXSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IFN0b3JhZ2VLZXkgPSBncm91cFtcIlNjaGVkdWxlclN0b3JhZ2VLZXlcIl07XHJcblxyXG4gICAgbGV0IGxzdEZpbHRlcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICAgIGlmIChncm91cCAmJiB0aGlzLnN0b3JhZ2VTZXJ2aWNlICYmIHRoaXMuZGF0YVsnU2F2ZUZpbHRlciddKSB7XHJcblxyXG4gICAgICAvL2xpc3Qgb2YgZGF0YSBmb3IgU3RhdGVGaWx0ZXIgYW5kIEZpbHRlclBhcmFtc1xyXG4gICAgICBsc3RGaWx0ZXIgPSB7XHJcbiAgICAgICAgXCJTZWxlY3RlZERhdGVcIjogSlNPTi5zdHJpbmdpZnkoZ3JvdXBbXCJzZWxlY3RlZERhdGVcIl0pXHJcbiAgICAgIH1cclxuICAgICAgLy9jcmVhdGUgc2Vzc2lvbiBzdG9yYWdlIFxyXG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShsc3RGaWx0ZXIpKTtcclxuXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U2NoZWR1bGVyU2Vzc2lvbkZpbHRlcihncm91cDogWkdyb3VwKSB7XHJcblxyXG4gICAgaWYgKCFncm91cFtcIlNjaGVkdWxlclN0b3JhZ2VLZXlcIl0pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBTdG9yYWdlS2V5ID0gZ3JvdXBbXCJTY2hlZHVsZXJTdG9yYWdlS2V5XCJdO1xyXG5cclxuICAgIGlmICh0aGlzLnN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KFN0b3JhZ2VLZXkpXHJcbiAgICAgICAgLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEudmFsdWUgfHwgZGF0YS52YWx1ZSA9PT0gXCJudWxsXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShkYXRhLnZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZShKU09OLnBhcnNlKHJlc3VsdFtcIlNlbGVjdGVkRGF0ZVwiXSkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8aW9uLWl0ZW0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8aW9uLWxhYmVsIFthdHRyLmZvcl09XCJkYXRhLlZhbHVlXCIgKm5nSWY9XCJkYXRhLlNob3dMYWJlbFwiIHBvc2l0aW9uPVwic3RhY2tlZFwiPlxyXG4gICAge3tkYXRhLkxhYmVsfX0gPGlvbi10ZXh0ICpuZ0lmPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWRGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQpXCIgY29sb3I9XCJkYW5nZXJcIj4qPC9pb24tdGV4dD5cclxuICA8L2lvbi1sYWJlbD5cclxuICA8a2VuZG8tc2NoZWR1bGVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiIFtrZW5kb1NjaGVkdWxlckJpbmRpbmddPVwiZXZlbnRzXCIgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIiAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWaWV3SW5kZXhdPVwic2VsZWN0ZWRWaWV3SW5kZXhcIiBbZXZlbnRTdHlsZXNdPVwiZ2V0RXZlbnRTdHlsZXNcIiBbc2xvdENsYXNzXT1cImdldFNsb3RDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAoc2xvdERibENsaWNrKT1cIm9uU2xvdERibENsaWNrKCRldmVudClcIiAoZXZlbnREYmxDbGljayk9XCJvbkV2ZW50RGJsQ2xpY2soJGV2ZW50KVwiIHNjcm9sbFRpbWU9XCIwODowMFwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIighIWRhdGEuSGVpZ2h0ID8gW2RhdGEuSGVpZ2h0XSA6ICc2MDBweCcpXCI+XHJcbiAgICA8IS0tIFtzdHlsZS5mb250LXNpemVdPVwiKCEhZGF0YS5Gb250U2l6ZSA/IFtkYXRhLkZvbnRTaXplXSA6ICcxMnB4JylcIj4gLS0+XHJcbiAgICA8IS0tTm90ZTogbGluZS1oZWlnaHQgc2FtZSB3aXRoIFtldmVudEhlaWdodF0tLT5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1NjaGVkdWxlckV2ZW50VGVtcGxhdGUgbGV0LWV2ZW50PlxyXG4gICAgICA8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4O2xpbmUtaGVpZ2h0OiAyNXB4O1wiPnt7IGV2ZW50LnRpdGxlIH19PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9TY2hlZHVsZXJUb29sYmFyVGVtcGxhdGUgbGV0LXNlbGVjdGVkRGF0ZT1cInNlbGVjdGVkRGF0ZVwiPlxyXG4gICAgICA8enNjaGVkdWxlcnRvb2xiYXIgW2xvY2FsXT1cImxvY2FsXCIgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIj5cclxuICAgICAgPC96c2NoZWR1bGVydG9vbGJhcj5cclxuICAgICAgPHVsIGtlbmRvU2NoZWR1bGVyVG9vbGJhclZpZXdTZWxlY3Rvcj48L3VsPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9TY2hlZHVsZXJBbGxEYXlTbG90VGVtcGxhdGUgbGV0LWRhdGU9XCJkYXRlXCI+XHJcbiAgICAgIDxzdHJvbmc+e3sgZGF0ZSB8IGtlbmRvRGF0ZTogJ2RkLU1NTS15eXl5JyB9fTwvc3Ryb25nPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1NjaGVkdWxlckRhdGVIZWFkZXJUZW1wbGF0ZSBsZXQtZGF0ZT1cImRhdGVcIj5cclxuICAgICAgPHN0cm9uZz57eyBkYXRlIHwga2VuZG9EYXRlOiBcImNjY1wiIH19PC9zdHJvbmc+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbiAgICA8IS0tIDxrZW5kby1zY2hlZHVsZXItZGF5LXZpZXcgc3RhcnRUaW1lPVwiMDg6MDBcIj5cclxuICAgIDwva2VuZG8tc2NoZWR1bGVyLWRheS12aWV3PlxyXG5cclxuICAgIDxrZW5kby1zY2hlZHVsZXItd2Vlay12aWV3IHN0YXJ0VGltZT1cIjA4OjAwXCI+XHJcbiAgICA8L2tlbmRvLXNjaGVkdWxlci13ZWVrLXZpZXc+IC0tPlxyXG5cclxuICAgIDxrZW5kby1zY2hlZHVsZXItZGF5LXZpZXc+XHJcbiAgICA8L2tlbmRvLXNjaGVkdWxlci1kYXktdmlldz5cclxuXHJcbiAgICA8a2VuZG8tc2NoZWR1bGVyLXdlZWstdmlldz5cclxuICAgIDwva2VuZG8tc2NoZWR1bGVyLXdlZWstdmlldz5cclxuXHJcbiAgICA8a2VuZG8tc2NoZWR1bGVyLW1vbnRoLXZpZXcgW2V2ZW50SGVpZ2h0XT1cIjI1XCI+XHJcbiAgICA8L2tlbmRvLXNjaGVkdWxlci1tb250aC12aWV3PlxyXG5cclxuICAgIDwhLS0gPGtlbmRvLXNjaGVkdWxlci10aW1lbGluZS12aWV3PlxyXG4gICAgPC9rZW5kby1zY2hlZHVsZXItdGltZWxpbmUtdmlldz4gLS0+XHJcblxyXG4gICAgPGtlbmRvLXNjaGVkdWxlci1hZ2VuZGEtdmlldz5cclxuICAgIDwva2VuZG8tc2NoZWR1bGVyLWFnZW5kYS12aWV3PlxyXG4gIDwva2VuZG8tc2NoZWR1bGVyPlxyXG5cclxuPC9pb24taXRlbT5cclxuIl19
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/********** Angular **********/
|
|
2
|
-
import { Component, Input, HostListener } from "@angular/core";
|
|
3
|
-
/********** Ionic **********/
|
|
4
|
-
/********** Plugin **********/
|
|
5
|
-
import { of } from "rxjs";
|
|
6
|
-
import { delay, take } from "rxjs/operators";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@progress/kendo-angular-scheduler";
|
|
9
|
-
import * as i2 from "@progress/kendo-angular-popup";
|
|
10
|
-
import * as i3 from "@progress/kendo-angular-dateinputs";
|
|
11
|
-
import * as i4 from "@angular/common";
|
|
12
|
-
import * as i5 from "@progress/kendo-angular-intl";
|
|
13
|
-
/********** Component & Service **********/
|
|
14
|
-
export class ZSchedulerToolBarComponent {
|
|
15
|
-
constructor(toolbarService) {
|
|
16
|
-
this.toolbarService = toolbarService;
|
|
17
|
-
this.local = {};
|
|
18
|
-
this.showCalendar = false;
|
|
19
|
-
}
|
|
20
|
-
today() {
|
|
21
|
-
this.toolbarService.navigate({
|
|
22
|
-
type: "today"
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
next(event) {
|
|
26
|
-
this.toolbarService.navigate({
|
|
27
|
-
type: "next"
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
prev(event) {
|
|
31
|
-
this.toolbarService.navigate({
|
|
32
|
-
type: "prev"
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
onChange_Calendar(value) {
|
|
36
|
-
this.local.inProgress = true;
|
|
37
|
-
this.toolbarService.navigate({
|
|
38
|
-
type: 'select-date',
|
|
39
|
-
date: value
|
|
40
|
-
});
|
|
41
|
-
this.toggleCalendar();
|
|
42
|
-
of([])
|
|
43
|
-
.pipe(take(1), delay(1000))
|
|
44
|
-
.subscribe(() => (this.local.inProgress = false));
|
|
45
|
-
}
|
|
46
|
-
onBlur_Calendar() {
|
|
47
|
-
this.toggleCalendar();
|
|
48
|
-
}
|
|
49
|
-
toggleCalendar(status) {
|
|
50
|
-
if (status === false) {
|
|
51
|
-
this.showCalendar = false;
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
this.showCalendar = !this.showCalendar;
|
|
55
|
-
}
|
|
56
|
-
keydown(event) {
|
|
57
|
-
if (event.keyCode === 27 && this.showCalendar === true) {
|
|
58
|
-
this.toggleCalendar(false);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
documentClick(event) {
|
|
62
|
-
if (event.target.className === "k-nav-current") {
|
|
63
|
-
this.toggleCalendar();
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
if (this.showCalendar === true) {
|
|
67
|
-
this.toggleCalendar(false);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
ZSchedulerToolBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZSchedulerToolBarComponent, deps: [{ token: i1.ToolbarService }], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
-
ZSchedulerToolBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: ZSchedulerToolBarComponent, selector: "zschedulertoolbar", inputs: { local: "local", selectedDate: "selectedDate" }, host: { listeners: { "keydown": "keydown($event)", "document:click": "documentClick($event)" } }, ngImport: i0, template: `
|
|
74
|
-
<div class="k-scheduler-navigation">
|
|
75
|
-
<button class="k-nav-today" (click)="today()">
|
|
76
|
-
Today
|
|
77
|
-
</button>
|
|
78
|
-
<button class="k-nav-prev" (click)="prev($event)">
|
|
79
|
-
<span class="k-icon k-i-arrow-60-left"></span>
|
|
80
|
-
</button>
|
|
81
|
-
<span>
|
|
82
|
-
<a class="k-nav-current" #anchor
|
|
83
|
-
>
|
|
84
|
-
<!-- <span class="k-icon k-i-calendar"></span> -->
|
|
85
|
-
{{ selectedDate | kendoDate: "dd-MMM-yyyy" }}
|
|
86
|
-
</a>
|
|
87
|
-
</span>
|
|
88
|
-
<button class="k-nav-next" (click)="next($event)">
|
|
89
|
-
<span class="k-icon k-i-arrow-60-right"></span>
|
|
90
|
-
</button>
|
|
91
|
-
</div>
|
|
92
|
-
<kendo-popup
|
|
93
|
-
style="margin:15px 0px 0px 0px;"
|
|
94
|
-
[anchor]="anchor"
|
|
95
|
-
(anchorViewportLeave)="showCalendar = false"
|
|
96
|
-
*ngIf="showCalendar"
|
|
97
|
-
>
|
|
98
|
-
<kendo-calendar
|
|
99
|
-
[focusedDate]="selectedDate"
|
|
100
|
-
(blur)="onBlur_Calendar()"
|
|
101
|
-
(valueChange)="onChange_Calendar($event)"
|
|
102
|
-
></kendo-calendar>
|
|
103
|
-
</kendo-popup>
|
|
104
|
-
`, isInline: true, styles: [":host{margin:5px 0}\n"], components: [{ type: i2.PopupComponent, selector: "kendo-popup", inputs: ["animate", "anchor", "anchorAlign", "collision", "popupAlign", "copyAnchorStyles", "popupClass", "positionMode", "offset", "margin"], outputs: ["anchorViewportLeave", "close", "open", "positionChange"], exportAs: ["kendo-popup"] }, { type: i3.CalendarComponent, selector: "kendo-calendar", inputs: ["id", "focusedDate", "min", "max", "rangeValidation", "selection", "value", "disabled", "tabindex", "tabIndex", "disabledDates", "navigation", "activeView", "bottomView", "topView", "type", "animateNavigation", "weekNumber", "cellTemplate", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "navigationItemTemplate"], outputs: ["activeViewChange", "navigate", "activeViewDateChange", "valueChange"], exportAs: ["kendo-calendar"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "kendoDate": i5.DatePipe } });
|
|
105
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZSchedulerToolBarComponent, decorators: [{
|
|
106
|
-
type: Component,
|
|
107
|
-
args: [{ selector: "zschedulertoolbar", template: `
|
|
108
|
-
<div class="k-scheduler-navigation">
|
|
109
|
-
<button class="k-nav-today" (click)="today()">
|
|
110
|
-
Today
|
|
111
|
-
</button>
|
|
112
|
-
<button class="k-nav-prev" (click)="prev($event)">
|
|
113
|
-
<span class="k-icon k-i-arrow-60-left"></span>
|
|
114
|
-
</button>
|
|
115
|
-
<span>
|
|
116
|
-
<a class="k-nav-current" #anchor
|
|
117
|
-
>
|
|
118
|
-
<!-- <span class="k-icon k-i-calendar"></span> -->
|
|
119
|
-
{{ selectedDate | kendoDate: "dd-MMM-yyyy" }}
|
|
120
|
-
</a>
|
|
121
|
-
</span>
|
|
122
|
-
<button class="k-nav-next" (click)="next($event)">
|
|
123
|
-
<span class="k-icon k-i-arrow-60-right"></span>
|
|
124
|
-
</button>
|
|
125
|
-
</div>
|
|
126
|
-
<kendo-popup
|
|
127
|
-
style="margin:15px 0px 0px 0px;"
|
|
128
|
-
[anchor]="anchor"
|
|
129
|
-
(anchorViewportLeave)="showCalendar = false"
|
|
130
|
-
*ngIf="showCalendar"
|
|
131
|
-
>
|
|
132
|
-
<kendo-calendar
|
|
133
|
-
[focusedDate]="selectedDate"
|
|
134
|
-
(blur)="onBlur_Calendar()"
|
|
135
|
-
(valueChange)="onChange_Calendar($event)"
|
|
136
|
-
></kendo-calendar>
|
|
137
|
-
</kendo-popup>
|
|
138
|
-
`, styles: [":host{margin:5px 0}\n"] }]
|
|
139
|
-
}], ctorParameters: function () { return [{ type: i1.ToolbarService }]; }, propDecorators: { local: [{
|
|
140
|
-
type: Input
|
|
141
|
-
}], selectedDate: [{
|
|
142
|
-
type: Input
|
|
143
|
-
}], keydown: [{
|
|
144
|
-
type: HostListener,
|
|
145
|
-
args: ["keydown", ["$event"]]
|
|
146
|
-
}], documentClick: [{
|
|
147
|
-
type: HostListener,
|
|
148
|
-
args: ["document:click", ["$event"]]
|
|
149
|
-
}] } });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNjaGVkdWxlci50b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pzY2hlZHVsZXIvenNjaGVkdWxlci50b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBRzdDLDJDQUEyQztBQXVDM0MsTUFBTSxPQUFPLDBCQUEwQjtJQUtyQyxZQUFtQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFKeEMsVUFBSyxHQUFRLEVBQUUsQ0FBQztRQUV6QixpQkFBWSxHQUFHLEtBQUssQ0FBQztJQUUrQixDQUFDO0lBRTlDLEtBQUs7UUFDVixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxJQUFJLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFVO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLEVBQUUsYUFBYTtZQUNuQixJQUFJLEVBQUUsS0FBSztTQUNaLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWdCO1FBQzdCLElBQUksTUFBTSxLQUFLLEtBQUssRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUN6QyxDQUFDO0lBR00sT0FBTyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUdNLGFBQWEsQ0FBQyxLQUFVO1FBQzdCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssZUFBZSxFQUFFO1lBQzlDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM1QjtTQUNGO0lBQ0gsQ0FBQzs7dUhBakVVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHFOQWxDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQ7MkZBR1UsMEJBQTBCO2tCQXBDdEMsU0FBUzsrQkFDRSxtQkFBbUIsWUFDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQlQ7cUdBSVEsS0FBSztzQkFBYixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBZ0RDLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUTVCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZGVsYXksIHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgVG9vbGJhclNlcnZpY2UgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItc2NoZWR1bGVyXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwienNjaGVkdWxlcnRvb2xiYXJcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cImstc2NoZWR1bGVyLW5hdmlnYXRpb25cIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImstbmF2LXRvZGF5XCIgKGNsaWNrKT1cInRvZGF5KClcIj5cclxuICAgICAgICBUb2RheVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImstbmF2LXByZXZcIiAoY2xpY2spPVwicHJldigkZXZlbnQpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWFycm93LTYwLWxlZnRcIj48L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPiAmbmJzcDtcclxuICAgICAgPHNwYW4+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJrLW5hdi1jdXJyZW50XCIgI2FuY2hvclxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktY2FsZW5kYXJcIj48L3NwYW4+IC0tPlxyXG4gICAgICAgICAge3sgc2VsZWN0ZWREYXRlIHwga2VuZG9EYXRlOiBcImRkLU1NTS15eXl5XCIgfX1cclxuICAgICAgICA8L2E+XHJcbiAgICAgIDwvc3Bhbj4gJm5ic3A7XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJrLW5hdi1uZXh0XCIgKGNsaWNrKT1cIm5leHQoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1hcnJvdy02MC1yaWdodFwiPjwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxrZW5kby1wb3B1cFxyXG4gICAgICAgIHN0eWxlPVwibWFyZ2luOjE1cHggMHB4IDBweCAwcHg7XCJcclxuICAgICAgW2FuY2hvcl09XCJhbmNob3JcIlxyXG4gICAgICAoYW5jaG9yVmlld3BvcnRMZWF2ZSk9XCJzaG93Q2FsZW5kYXIgPSBmYWxzZVwiXHJcbiAgICAgICpuZ0lmPVwic2hvd0NhbGVuZGFyXCJcclxuICAgID5cclxuICAgICAgICA8a2VuZG8tY2FsZW5kYXJcclxuICAgICAgICAgIFtmb2N1c2VkRGF0ZV09XCJzZWxlY3RlZERhdGVcIlxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyX0NhbGVuZGFyKClcIlxyXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlX0NhbGVuZGFyKCRldmVudClcIlxyXG4gICAgICAgID48L2tlbmRvLWNhbGVuZGFyPlxyXG4gICAgPC9rZW5kby1wb3B1cD5cclxuICBgLFxyXG4gIHN0eWxlVXJsczogW1wiLi96c2NoZWR1bGVyLnRvb2xiYXIuY29tcG9uZW50LmNzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWlNjaGVkdWxlclRvb2xCYXJDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGxvY2FsOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWREYXRlOiBEYXRlO1xyXG4gIHNob3dDYWxlbmRhciA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdG9vbGJhclNlcnZpY2U6IFRvb2xiYXJTZXJ2aWNlKSB7fVxyXG5cclxuICBwdWJsaWMgdG9kYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvb2xiYXJTZXJ2aWNlLm5hdmlnYXRlKHtcclxuICAgICAgdHlwZTogXCJ0b2RheVwiXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZXh0KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudG9vbGJhclNlcnZpY2UubmF2aWdhdGUoe1xyXG4gICAgICB0eXBlOiBcIm5leHRcIlxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJldihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRvb2xiYXJTZXJ2aWNlLm5hdmlnYXRlKHtcclxuICAgICAgdHlwZTogXCJwcmV2XCJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VfQ2FsZW5kYXIodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2NhbC5pblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMudG9vbGJhclNlcnZpY2UubmF2aWdhdGUoe1xyXG4gICAgICB0eXBlOiAnc2VsZWN0LWRhdGUnLFxyXG4gICAgICBkYXRlOiB2YWx1ZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRvZ2dsZUNhbGVuZGFyKCk7XHJcbiAgICBvZihbXSlcclxuICAgICAgLnBpcGUodGFrZSgxKSwgZGVsYXkoMTAwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKHRoaXMubG9jYWwuaW5Qcm9ncmVzcyA9IGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXJfQ2FsZW5kYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvZ2dsZUNhbGVuZGFyKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDYWxlbmRhcihzdGF0dXM/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoc3RhdHVzID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNob3dDYWxlbmRhciA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dDYWxlbmRhciA9ICF0aGlzLnNob3dDYWxlbmRhcjtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSlcclxuICBwdWJsaWMga2V5ZG93bihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcgJiYgdGhpcy5zaG93Q2FsZW5kYXIgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy50b2dnbGVDYWxlbmRhcihmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIHB1YmxpYyBkb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NOYW1lID09PSBcImstbmF2LWN1cnJlbnRcIikge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNhbGVuZGFyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5zaG93Q2FsZW5kYXIgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUNhbGVuZGFyKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|