ecabs-components 1.0.28 → 1.0.30
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/esm2022/ecabs-components.mjs +4 -4
- package/esm2022/lib/base/consts/date-mask.consts.mjs +56 -56
- package/esm2022/lib/base/directives/date-mask.directive.mjs +64 -64
- package/esm2022/lib/base/directives/date-mask.directive.module.mjs +21 -21
- package/esm2022/lib/base/directives/digits-only.directive.mjs +129 -129
- package/esm2022/lib/base/directives/digits-only.directive.module.mjs +21 -21
- package/esm2022/lib/base/directives/number-border.directive.mjs +53 -53
- package/esm2022/lib/base/directives/number-border.directive.module.mjs +21 -21
- package/esm2022/lib/base/directives/tooltip-if-truncated.directive.mjs +29 -0
- package/esm2022/lib/base/directives/tooltip-if-truncated.directive.module.mjs +22 -0
- package/esm2022/lib/base/element-base.mjs +99 -99
- package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +52 -52
- package/esm2022/lib/base/element-wrapper/element-wrapper.module.mjs +51 -51
- package/esm2022/lib/base/hint/hint.component.mjs +20 -20
- package/esm2022/lib/base/hint/hint.module.mjs +19 -19
- package/esm2022/lib/base/validation/validation.component.mjs +69 -69
- package/esm2022/lib/base/validation/validation.module.mjs +19 -19
- package/esm2022/lib/ecabs-active-status-filter/ecabs-active-status-filter.component.mjs +30 -30
- package/esm2022/lib/ecabs-active-status-filter/ecabs-active-status-filter.module.mjs +19 -19
- package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.mjs +15 -15
- package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.mjs +19 -19
- package/esm2022/lib/ecabs-buttons/ecabs-buttons.component.mjs +62 -62
- package/esm2022/lib/ecabs-buttons/ecabs-buttons.module.mjs +20 -20
- package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +100 -100
- package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.mjs +35 -35
- package/esm2022/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.mjs +16 -16
- package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.component.mjs +84 -84
- package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.module.mjs +47 -47
- package/esm2022/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.mjs +16 -16
- package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.mjs +178 -178
- package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.mjs +63 -63
- package/esm2022/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.mjs +16 -16
- package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.mjs +192 -192
- package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.mjs +64 -64
- package/esm2022/lib/ecabs-date-time-range-picker/time-range.directive.mjs +44 -44
- package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.mjs +46 -46
- package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.mjs +19 -19
- package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +43 -43
- package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.module.mjs +19 -19
- package/esm2022/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.mjs +18 -18
- package/esm2022/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.mjs +18 -18
- package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.mjs +75 -75
- package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.mjs +23 -23
- package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +77 -77
- package/esm2022/lib/ecabs-increment/ecabs-increment.module.mjs +22 -22
- package/esm2022/lib/ecabs-input/ecabs-input.component.mjs +82 -82
- package/esm2022/lib/ecabs-input/ecabs-input.module.mjs +21 -21
- package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +61 -61
- package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.module.mjs +38 -38
- package/esm2022/lib/ecabs-loading/ecabs-loading.component.mjs +23 -23
- package/esm2022/lib/ecabs-loading/ecabs-loading.module.mjs +18 -18
- package/esm2022/lib/ecabs-loading/spinner/spinner.component.mjs +15 -15
- package/esm2022/lib/ecabs-note/ecabs-note.component.mjs +29 -29
- package/esm2022/lib/ecabs-note/ecabs-note.module.mjs +18 -18
- package/esm2022/lib/ecabs-phone/ecabs-phone.component.mjs +103 -103
- package/esm2022/lib/ecabs-phone/ecabs-phone.module.mjs +21 -21
- package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +49 -49
- package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.module.mjs +21 -21
- package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.mjs +64 -64
- package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.mjs +31 -31
- package/esm2022/lib/ecabs-select/ecabs-select.component.mjs +322 -310
- package/esm2022/lib/ecabs-select/ecabs-select.module.mjs +68 -60
- package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +16 -16
- package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.mjs +23 -23
- package/esm2022/lib/ecabs-table/ecabs-table.component.mjs +42 -42
- package/esm2022/lib/ecabs-table/ecabs-table.module.mjs +32 -32
- package/esm2022/lib/ecabs-textarea/ecabs-textarea.component.mjs +61 -61
- package/esm2022/lib/ecabs-textarea/ecabs-textarea.module.mjs +19 -19
- package/esm2022/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.mjs +136 -136
- package/esm2022/lib/ecabs-timepicker/config.model.mjs +1 -1
- package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.component.mjs +311 -311
- package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.module.mjs +19 -19
- package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.service.mjs +30 -30
- package/esm2022/lib/ecabs-validation/ecabs-validation.component.mjs +18 -18
- package/esm2022/lib/ecabs-validation/ecabs-validation.module.mjs +18 -18
- package/esm2022/lib/models/bread-crumb.mjs +1 -1
- package/esm2022/lib/models/timepicker.models.mjs +1 -1
- package/esm2022/lib/models/validation.models.mjs +1 -1
- package/esm2022/lib/services/ecabs-components.service.mjs +31 -31
- package/esm2022/public-api.mjs +61 -59
- package/fesm2022/ecabs-components.mjs +3318 -3256
- package/fesm2022/ecabs-components.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/base/consts/date-mask.consts.d.ts +7 -7
- package/lib/base/directives/date-mask.directive.d.ts +16 -16
- package/lib/base/directives/date-mask.directive.module.d.ts +8 -8
- package/lib/base/directives/digits-only.directive.d.ts +26 -26
- package/lib/base/directives/digits-only.directive.module.d.ts +8 -8
- package/lib/base/directives/number-border.directive.d.ts +13 -13
- package/lib/base/directives/number-border.directive.module.d.ts +8 -8
- package/lib/base/directives/tooltip-if-truncated.directive.d.ts +12 -0
- package/lib/base/directives/tooltip-if-truncated.directive.module.d.ts +8 -0
- package/lib/base/element-base.d.ts +28 -28
- package/lib/base/element-wrapper/element-wrapper.component.d.ts +19 -19
- package/lib/base/element-wrapper/element-wrapper.module.d.ts +16 -16
- package/lib/base/hint/hint.component.d.ts +8 -8
- package/lib/base/hint/hint.module.d.ts +10 -10
- package/lib/base/validation/validation.component.d.ts +24 -24
- package/lib/base/validation/validation.module.d.ts +10 -10
- package/lib/ecabs-active-status-filter/ecabs-active-status-filter.component.d.ts +14 -14
- package/lib/ecabs-active-status-filter/ecabs-active-status-filter.module.d.ts +10 -10
- package/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.d.ts +7 -7
- package/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.d.ts +10 -10
- package/lib/ecabs-buttons/ecabs-buttons.component.d.ts +20 -20
- package/lib/ecabs-buttons/ecabs-buttons.module.d.ts +11 -11
- package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.d.ts +31 -31
- package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.d.ts +12 -12
- package/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.d.ts +6 -6
- package/lib/ecabs-date-picker/ecabs-date-picker.component.d.ts +29 -29
- package/lib/ecabs-date-picker/ecabs-date-picker.module.d.ts +15 -15
- package/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.d.ts +6 -6
- package/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.d.ts +51 -51
- package/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.d.ts +19 -19
- package/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.d.ts +6 -6
- package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.d.ts +58 -58
- package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.d.ts +20 -20
- package/lib/ecabs-date-time-range-picker/time-range.directive.d.ts +15 -15
- package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.d.ts +31 -31
- package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.d.ts +11 -11
- package/lib/ecabs-dialog-message/ecabs-dialog-message.component.d.ts +28 -28
- package/lib/ecabs-dialog-message/ecabs-dialog-message.module.d.ts +11 -11
- package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.d.ts +12 -12
- package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.d.ts +9 -9
- package/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.d.ts +28 -28
- package/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.d.ts +14 -14
- package/lib/ecabs-increment/ecabs-increment.component.d.ts +26 -26
- package/lib/ecabs-increment/ecabs-increment.module.d.ts +13 -13
- package/lib/ecabs-input/ecabs-input.component.d.ts +27 -27
- package/lib/ecabs-input/ecabs-input.module.d.ts +12 -12
- package/lib/ecabs-language-selector/ecabs-language-selector.component.d.ts +20 -20
- package/lib/ecabs-language-selector/ecabs-language-selector.module.d.ts +12 -12
- package/lib/ecabs-loading/ecabs-loading.component.d.ts +8 -8
- package/lib/ecabs-loading/ecabs-loading.module.d.ts +9 -9
- package/lib/ecabs-loading/spinner/spinner.component.d.ts +6 -6
- package/lib/ecabs-note/ecabs-note.component.d.ts +7 -7
- package/lib/ecabs-note/ecabs-note.module.d.ts +9 -9
- package/lib/ecabs-phone/ecabs-phone.component.d.ts +33 -33
- package/lib/ecabs-phone/ecabs-phone.module.d.ts +12 -12
- package/lib/ecabs-picker-header/ecabs-picker-header.component.d.ts +19 -19
- package/lib/ecabs-picker-header/ecabs-picker-header.module.d.ts +12 -12
- package/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.d.ts +24 -24
- package/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.d.ts +11 -11
- package/lib/ecabs-select/ecabs-select.component.d.ts +72 -71
- package/lib/ecabs-select/ecabs-select.module.d.ts +17 -15
- package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.d.ts +8 -8
- package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.d.ts +9 -9
- package/lib/ecabs-table/ecabs-table.component.d.ts +18 -18
- package/lib/ecabs-table/ecabs-table.module.d.ts +12 -12
- package/lib/ecabs-textarea/ecabs-textarea.component.d.ts +20 -20
- package/lib/ecabs-textarea/ecabs-textarea.module.d.ts +10 -10
- package/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.d.ts +40 -40
- package/lib/ecabs-timepicker/config.model.d.ts +5 -5
- package/lib/ecabs-timepicker/ecabs-timepicker.component.d.ts +53 -53
- package/lib/ecabs-timepicker/ecabs-timepicker.module.d.ts +10 -10
- package/lib/ecabs-timepicker/ecabs-timepicker.service.d.ts +12 -12
- package/lib/ecabs-validation/ecabs-validation.component.d.ts +10 -10
- package/lib/ecabs-validation/ecabs-validation.module.d.ts +9 -9
- package/lib/models/bread-crumb.d.ts +5 -5
- package/lib/models/timepicker.models.d.ts +6 -6
- package/lib/models/validation.models.d.ts +7 -7
- package/lib/services/ecabs-components.service.d.ts +16 -16
- package/package.json +1 -1
- package/public-api.d.ts +60 -58
|
@@ -1,312 +1,312 @@
|
|
|
1
|
-
import { Component, Input, HostBinding, HostListener } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
|
|
3
|
-
import ElementBaseComponent from '../base/element-base';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./ecabs-timepicker.service";
|
|
6
|
-
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "../base/element-wrapper/element-wrapper.component";
|
|
8
|
-
import * as i4 from "./componets/ecabs-time-list-panel/ecabs-time-list-panel.component";
|
|
9
|
-
export class EcabsTimepickerComponent extends ElementBaseComponent {
|
|
10
|
-
get data() {
|
|
11
|
-
return this._data;
|
|
12
|
-
}
|
|
13
|
-
set data(value) {
|
|
14
|
-
this._data = value;
|
|
15
|
-
if (this._data.length === 5) {
|
|
16
|
-
if (this._data === '23:59') {
|
|
17
|
-
this.onChangeFn(this._data + (this.addSecond ? ':59' : ''));
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
this.onChangeFn(this._data + (this.addSecond ? ':00' : ''));
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
else if (this._data === '') {
|
|
24
|
-
this.onChangeFn(this._data);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
constructor(elementRef, timepickerService, injector) {
|
|
28
|
-
super();
|
|
29
|
-
this.elementRef = elementRef;
|
|
30
|
-
this.timepickerService = timepickerService;
|
|
31
|
-
this.injector = injector;
|
|
32
|
-
this.showCloseIcon = true;
|
|
33
|
-
this.focusedFlag = false;
|
|
34
|
-
this.listPlacement = 'auto';
|
|
35
|
-
this.showDayStart = true;
|
|
36
|
-
this.showDayEnd = false;
|
|
37
|
-
this.addSecond = true;
|
|
38
|
-
this.position = {};
|
|
39
|
-
this._data = '';
|
|
40
|
-
this.listPosition = {};
|
|
41
|
-
//eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars, @typescript-eslint/no-empty-function
|
|
42
|
-
this.onChangeFn = (_) => { };
|
|
43
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
44
|
-
this.onTouchedFn = () => { };
|
|
45
|
-
this.placeholder = '00:00';
|
|
46
|
-
this._timePicker = this.elementRef.nativeElement;
|
|
47
|
-
setTimeout(() => {
|
|
48
|
-
this._input = this._timePicker.querySelector('input');
|
|
49
|
-
});
|
|
50
|
-
if (!this.iconClass) {
|
|
51
|
-
this.iconClass = this.timepickerService.getConfig().iconClass;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
handleMousedown($event) {
|
|
55
|
-
const target = $event.target;
|
|
56
|
-
if (target.closest('.form-time-list') ||
|
|
57
|
-
target.closest('.timeInputWrapper') === this._timePicker.querySelector('.timeInputWrapper')) {
|
|
58
|
-
this._timePicker.querySelector('.timeInputWrapper').focus();
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (this.focusedFlag) {
|
|
62
|
-
this.close();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
ngAfterViewInit() {
|
|
66
|
-
const ngControl = this.injector.get(NgControl, null);
|
|
67
|
-
if (ngControl) {
|
|
68
|
-
this.control = ngControl.control;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
clearInput() {
|
|
72
|
-
this.data = '';
|
|
73
|
-
}
|
|
74
|
-
calcListPosition() {
|
|
75
|
-
const position = this._timePicker.querySelector('.timeInputFieldWrapper').getBoundingClientRect();
|
|
76
|
-
if (this.appendTo) {
|
|
77
|
-
this.listPosition = {
|
|
78
|
-
left: position.x,
|
|
79
|
-
top: position.top + position.height,
|
|
80
|
-
width: position.width,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.listPosition = {
|
|
85
|
-
left: 0,
|
|
86
|
-
top: position.height,
|
|
87
|
-
width: position.width,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
inputKeyDown(event) {
|
|
92
|
-
this.caretPositionStart = event.target.selectionStart;
|
|
93
|
-
this.caretPositionEnd = event.target.selectionEnd;
|
|
94
|
-
const key = event.key;
|
|
95
|
-
this.setCaretPosition(this._input);
|
|
96
|
-
switch (this.checkSpecialKeys(key, this.caretPositionStart, this.caretPositionEnd)) {
|
|
97
|
-
case 'stop':
|
|
98
|
-
return false;
|
|
99
|
-
case 'tab':
|
|
100
|
-
this.close();
|
|
101
|
-
return false;
|
|
102
|
-
case 'arrow':
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
if (this.checkUnUsedKeys(key)) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
const newData = this.data.slice(0, this.caretPositionStart) + key + this.data.slice(this.caretPositionStart, this.data.length);
|
|
109
|
-
if (this.checkOutOfRangeNumber(newData)) {
|
|
110
|
-
this.data = newData;
|
|
111
|
-
this.caretPositionStart++;
|
|
112
|
-
}
|
|
113
|
-
if (this.caretPositionStart === this.data.length &&
|
|
114
|
-
(this.data.length === 2 || (this.data.length === 1 && parseInt(this.data) > 2))) {
|
|
115
|
-
this.makeHourFull();
|
|
116
|
-
this.data += ':';
|
|
117
|
-
this.caretPositionStart++;
|
|
118
|
-
}
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
checkSpecialKeys(key, selectionStart, selectionEnd) {
|
|
122
|
-
if (selectionStart !== selectionEnd && key !== 'ArrowLeft' && key !== 'ArrowRight') {
|
|
123
|
-
if (!(this.data.slice(selectionStart, selectionEnd).includes(':') && selectionEnd !== this.data.length)) {
|
|
124
|
-
this.data = this.data.slice(0, selectionStart) + this.data.slice(selectionEnd, this.data.length);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
if (selectionStart === selectionEnd && key === 'Backspace') {
|
|
128
|
-
if (this.data.length > 0) {
|
|
129
|
-
if (this.data[selectionStart - 1] !== ':' ||
|
|
130
|
-
(this.data[selectionStart - 1] === ':' && selectionStart === this.data.length)) {
|
|
131
|
-
this.data = this.data.slice(0, selectionStart - 1) + this.data.slice(selectionEnd, this.data.length);
|
|
132
|
-
this.caretPositionStart--;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return 'stop';
|
|
136
|
-
}
|
|
137
|
-
if (key === 'Tab' || key === ' ' || key === ':') {
|
|
138
|
-
if (!this.data.includes(':') && this.data.length > 0) {
|
|
139
|
-
this.makeHourFull();
|
|
140
|
-
this.data += ':';
|
|
141
|
-
this.caretPositionStart++;
|
|
142
|
-
return 'stop';
|
|
143
|
-
}
|
|
144
|
-
if (key === 'Tab') {
|
|
145
|
-
return 'tab';
|
|
146
|
-
}
|
|
147
|
-
return 'stop';
|
|
148
|
-
}
|
|
149
|
-
if (key === 'ArrowRight') {
|
|
150
|
-
if (this.caretPositionStart < this.data.length) {
|
|
151
|
-
this.caretPositionStart++;
|
|
152
|
-
}
|
|
153
|
-
return 'arrow';
|
|
154
|
-
}
|
|
155
|
-
if (key === 'ArrowLeft') {
|
|
156
|
-
if (this.caretPositionStart > 0) {
|
|
157
|
-
this.caretPositionStart--;
|
|
158
|
-
}
|
|
159
|
-
return 'arrow';
|
|
160
|
-
}
|
|
161
|
-
if (key === 'ArrowDown' && !this.focusedFlag) {
|
|
162
|
-
this.show();
|
|
163
|
-
}
|
|
164
|
-
return 'continue';
|
|
165
|
-
}
|
|
166
|
-
checkUnUsedKeys(key) {
|
|
167
|
-
const r = new RegExp('[0-9]');
|
|
168
|
-
return !r.test(key);
|
|
169
|
-
}
|
|
170
|
-
setCaretPosition(elem) {
|
|
171
|
-
setTimeout(() => {
|
|
172
|
-
if (elem !== null) {
|
|
173
|
-
if (elem.createTextRange) {
|
|
174
|
-
const range = elem.createTextRange();
|
|
175
|
-
range.move('character', this.caretPositionStart);
|
|
176
|
-
range.select();
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
if (elem.selectionStart) {
|
|
180
|
-
elem.focus();
|
|
181
|
-
elem.setSelectionRange(this.caretPositionStart, this.caretPositionStart);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
elem.focus();
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
checkOutOfRangeNumber(time) {
|
|
191
|
-
const hour = parseInt(time.split(':')[0], 10);
|
|
192
|
-
let minute = -1;
|
|
193
|
-
if (time.split(':').length > 1) {
|
|
194
|
-
minute = parseInt(time.split(':')[1], 10);
|
|
195
|
-
}
|
|
196
|
-
if (hour < 24 && time.split(':')[0].length < 3 && minute < 60) {
|
|
197
|
-
if (time.split(':').length > 1 && time.split(':')[1].length > 2) {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
return true;
|
|
201
|
-
}
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
makeHourFull() {
|
|
205
|
-
const hourPart = this.data.split(':')[0];
|
|
206
|
-
const minutePart = this.data.split(':').length > 1 ? this.data.split(':')[1] : '';
|
|
207
|
-
if (hourPart.length === 1) {
|
|
208
|
-
this.data = '0' + hourPart + (minutePart ? ':' + minutePart : minutePart);
|
|
209
|
-
this.caretPositionStart++;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
makeMinuteFull() {
|
|
213
|
-
const hourPart = this.data.split(':')[0];
|
|
214
|
-
const minutePart = this.data.split(':').length > 1 ? this.data.split(':')[1] : '';
|
|
215
|
-
if (minutePart.length === 0) {
|
|
216
|
-
this.data = hourPart + ':00';
|
|
217
|
-
this.caretPositionStart += 2;
|
|
218
|
-
}
|
|
219
|
-
if (minutePart.length === 1) {
|
|
220
|
-
this.data = hourPart + ':' + minutePart + '0';
|
|
221
|
-
this.caretPositionStart++;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
fixTimeToNearest() {
|
|
225
|
-
if (this.data.length > 0) {
|
|
226
|
-
this.makeHourFull();
|
|
227
|
-
this.makeMinuteFull();
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
registerOnChange(fn) {
|
|
231
|
-
this.onChangeFn = fn;
|
|
232
|
-
}
|
|
233
|
-
registerOnTouched(fn) {
|
|
234
|
-
this.onTouchedFn = fn;
|
|
235
|
-
}
|
|
236
|
-
setDisabledState(isDisabled) {
|
|
237
|
-
this.disabled = isDisabled;
|
|
238
|
-
}
|
|
239
|
-
writeValue(obj) {
|
|
240
|
-
if (obj) {
|
|
241
|
-
obj = obj.toString();
|
|
242
|
-
let temp = '';
|
|
243
|
-
if (obj.split(':').length >= 2) {
|
|
244
|
-
temp = obj.split(':')[0] + ':' + obj.split(':')[1];
|
|
245
|
-
}
|
|
246
|
-
this._data = temp;
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
this._data = '';
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
onChange() {
|
|
253
|
-
this.onChangeFn(this.data);
|
|
254
|
-
}
|
|
255
|
-
show() {
|
|
256
|
-
this.calcListPosition();
|
|
257
|
-
this.focusedFlag = true;
|
|
258
|
-
}
|
|
259
|
-
close(val = null) {
|
|
260
|
-
if (val) {
|
|
261
|
-
this.data = val;
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
this.fixTimeToNearest();
|
|
265
|
-
}
|
|
266
|
-
this.focusedFlag = false;
|
|
267
|
-
this.control?.markAsTouched();
|
|
268
|
-
}
|
|
269
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsTimepickerComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormTimePickerService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
270
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsTimepickerComponent, selector: "ecabs-timepicker", inputs: { showCloseIcon: "showCloseIcon", focusedFlag: "focusedFlag", listPlacement: "listPlacement", appendTo: "appendTo", min: "min", max: "max", showDayStart: "showDayStart", showDayEnd: "showDayEnd", addSecond: "addSecond" }, host: { listeners: { "document:mousedown": "handleMousedown($event)" }, properties: { "class.form-timepicker-focused": "this.focusedFlag" } }, providers: [
|
|
271
|
-
{
|
|
272
|
-
provide: NG_VALUE_ACCESSOR,
|
|
273
|
-
useExisting: EcabsTimepickerComponent,
|
|
274
|
-
multi: true,
|
|
275
|
-
},
|
|
276
|
-
], usesInheritance: true, ngImport: i0, template: "<div class=\"timeInputWrapper\" [ngClass]=\"{ disabled: disabled }\">\r\n <app-element-wrapper\r\n [data]=\"getData()\"\r\n [showCloseIcon]=\"showCloseIcon\"\r\n [focusedFlag]=\"focusedFlag\"\r\n (clear)=\"clearInput()\"\r\n >\r\n <div class=\"timeInputFieldWrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"form-field__input\"\r\n [value]=\"data\"\r\n [disabled]=\"disabled\"\r\n (focus)=\"show()\"\r\n (click)=\"show()\"\r\n (keydown)=\"inputKeyDown($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n </div>\r\n <ecabs-time-list-panel\r\n [typedValue]=\"data\"\r\n *ngIf=\"focusedFlag\"\r\n [showDayStart]=\"showDayStart\"\r\n [showDayEnd]=\"showDayEnd\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n class=\"form-time-list\"\r\n [appendTo]=\"appendTo\"\r\n [listPosition]=\"listPosition\"\r\n (closeMe)=\"close($event)\"\r\n ></ecabs-time-list-panel>\r\n </div>\r\n </app-element-wrapper>\r\n</div>\r\n", styles: [":host::ng-deep .timeInputWrapper app-element-wrapper .form-field{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.EcabsTimeListPanelComponent, selector: "ecabs-time-list-panel", inputs: ["typedValue", "listPlacement", "listPosition", "appendTo", "min", "max", "showDayStart", "showDayEnd", "position"], outputs: ["onscroll", "closeMe"] }] }); }
|
|
277
|
-
}
|
|
278
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsTimepickerComponent, decorators: [{
|
|
279
|
-
type: Component,
|
|
280
|
-
args: [{ selector: 'ecabs-timepicker', providers: [
|
|
281
|
-
{
|
|
282
|
-
provide: NG_VALUE_ACCESSOR,
|
|
283
|
-
useExisting: EcabsTimepickerComponent,
|
|
284
|
-
multi: true,
|
|
285
|
-
},
|
|
286
|
-
], template: "<div class=\"timeInputWrapper\" [ngClass]=\"{ disabled: disabled }\">\r\n <app-element-wrapper\r\n [data]=\"getData()\"\r\n [showCloseIcon]=\"showCloseIcon\"\r\n [focusedFlag]=\"focusedFlag\"\r\n (clear)=\"clearInput()\"\r\n >\r\n <div class=\"timeInputFieldWrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"form-field__input\"\r\n [value]=\"data\"\r\n [disabled]=\"disabled\"\r\n (focus)=\"show()\"\r\n (click)=\"show()\"\r\n (keydown)=\"inputKeyDown($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n </div>\r\n <ecabs-time-list-panel\r\n [typedValue]=\"data\"\r\n *ngIf=\"focusedFlag\"\r\n [showDayStart]=\"showDayStart\"\r\n [showDayEnd]=\"showDayEnd\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n class=\"form-time-list\"\r\n [appendTo]=\"appendTo\"\r\n [listPosition]=\"listPosition\"\r\n (closeMe)=\"close($event)\"\r\n ></ecabs-time-list-panel>\r\n </div>\r\n </app-element-wrapper>\r\n</div>\r\n", styles: [":host::ng-deep .timeInputWrapper app-element-wrapper .form-field{margin-bottom:0}\n"] }]
|
|
287
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormTimePickerService }, { type: i0.Injector }]; }, propDecorators: { showCloseIcon: [{
|
|
288
|
-
type: Input
|
|
289
|
-
}], focusedFlag: [{
|
|
290
|
-
type: Input
|
|
291
|
-
}, {
|
|
292
|
-
type: HostBinding,
|
|
293
|
-
args: ['class.form-timepicker-focused']
|
|
294
|
-
}], listPlacement: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], appendTo: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], min: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], max: [{
|
|
301
|
-
type: Input
|
|
302
|
-
}], showDayStart: [{
|
|
303
|
-
type: Input
|
|
304
|
-
}], showDayEnd: [{
|
|
305
|
-
type: Input
|
|
306
|
-
}], addSecond: [{
|
|
307
|
-
type: Input
|
|
308
|
-
}], handleMousedown: [{
|
|
309
|
-
type: HostListener,
|
|
310
|
-
args: ['document:mousedown', ['$event']]
|
|
311
|
-
}] } });
|
|
1
|
+
import { Component, Input, HostBinding, HostListener } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
|
|
3
|
+
import ElementBaseComponent from '../base/element-base';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./ecabs-timepicker.service";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "../base/element-wrapper/element-wrapper.component";
|
|
8
|
+
import * as i4 from "./componets/ecabs-time-list-panel/ecabs-time-list-panel.component";
|
|
9
|
+
export class EcabsTimepickerComponent extends ElementBaseComponent {
|
|
10
|
+
get data() {
|
|
11
|
+
return this._data;
|
|
12
|
+
}
|
|
13
|
+
set data(value) {
|
|
14
|
+
this._data = value;
|
|
15
|
+
if (this._data.length === 5) {
|
|
16
|
+
if (this._data === '23:59') {
|
|
17
|
+
this.onChangeFn(this._data + (this.addSecond ? ':59' : ''));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.onChangeFn(this._data + (this.addSecond ? ':00' : ''));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else if (this._data === '') {
|
|
24
|
+
this.onChangeFn(this._data);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
constructor(elementRef, timepickerService, injector) {
|
|
28
|
+
super();
|
|
29
|
+
this.elementRef = elementRef;
|
|
30
|
+
this.timepickerService = timepickerService;
|
|
31
|
+
this.injector = injector;
|
|
32
|
+
this.showCloseIcon = true;
|
|
33
|
+
this.focusedFlag = false;
|
|
34
|
+
this.listPlacement = 'auto';
|
|
35
|
+
this.showDayStart = true;
|
|
36
|
+
this.showDayEnd = false;
|
|
37
|
+
this.addSecond = true;
|
|
38
|
+
this.position = {};
|
|
39
|
+
this._data = '';
|
|
40
|
+
this.listPosition = {};
|
|
41
|
+
//eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars, @typescript-eslint/no-empty-function
|
|
42
|
+
this.onChangeFn = (_) => { };
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
44
|
+
this.onTouchedFn = () => { };
|
|
45
|
+
this.placeholder = '00:00';
|
|
46
|
+
this._timePicker = this.elementRef.nativeElement;
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
this._input = this._timePicker.querySelector('input');
|
|
49
|
+
});
|
|
50
|
+
if (!this.iconClass) {
|
|
51
|
+
this.iconClass = this.timepickerService.getConfig().iconClass;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
handleMousedown($event) {
|
|
55
|
+
const target = $event.target;
|
|
56
|
+
if (target.closest('.form-time-list') ||
|
|
57
|
+
target.closest('.timeInputWrapper') === this._timePicker.querySelector('.timeInputWrapper')) {
|
|
58
|
+
this._timePicker.querySelector('.timeInputWrapper').focus();
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (this.focusedFlag) {
|
|
62
|
+
this.close();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
ngAfterViewInit() {
|
|
66
|
+
const ngControl = this.injector.get(NgControl, null);
|
|
67
|
+
if (ngControl) {
|
|
68
|
+
this.control = ngControl.control;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
clearInput() {
|
|
72
|
+
this.data = '';
|
|
73
|
+
}
|
|
74
|
+
calcListPosition() {
|
|
75
|
+
const position = this._timePicker.querySelector('.timeInputFieldWrapper').getBoundingClientRect();
|
|
76
|
+
if (this.appendTo) {
|
|
77
|
+
this.listPosition = {
|
|
78
|
+
left: position.x,
|
|
79
|
+
top: position.top + position.height,
|
|
80
|
+
width: position.width,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.listPosition = {
|
|
85
|
+
left: 0,
|
|
86
|
+
top: position.height,
|
|
87
|
+
width: position.width,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
inputKeyDown(event) {
|
|
92
|
+
this.caretPositionStart = event.target.selectionStart;
|
|
93
|
+
this.caretPositionEnd = event.target.selectionEnd;
|
|
94
|
+
const key = event.key;
|
|
95
|
+
this.setCaretPosition(this._input);
|
|
96
|
+
switch (this.checkSpecialKeys(key, this.caretPositionStart, this.caretPositionEnd)) {
|
|
97
|
+
case 'stop':
|
|
98
|
+
return false;
|
|
99
|
+
case 'tab':
|
|
100
|
+
this.close();
|
|
101
|
+
return false;
|
|
102
|
+
case 'arrow':
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (this.checkUnUsedKeys(key)) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
const newData = this.data.slice(0, this.caretPositionStart) + key + this.data.slice(this.caretPositionStart, this.data.length);
|
|
109
|
+
if (this.checkOutOfRangeNumber(newData)) {
|
|
110
|
+
this.data = newData;
|
|
111
|
+
this.caretPositionStart++;
|
|
112
|
+
}
|
|
113
|
+
if (this.caretPositionStart === this.data.length &&
|
|
114
|
+
(this.data.length === 2 || (this.data.length === 1 && parseInt(this.data) > 2))) {
|
|
115
|
+
this.makeHourFull();
|
|
116
|
+
this.data += ':';
|
|
117
|
+
this.caretPositionStart++;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
checkSpecialKeys(key, selectionStart, selectionEnd) {
|
|
122
|
+
if (selectionStart !== selectionEnd && key !== 'ArrowLeft' && key !== 'ArrowRight') {
|
|
123
|
+
if (!(this.data.slice(selectionStart, selectionEnd).includes(':') && selectionEnd !== this.data.length)) {
|
|
124
|
+
this.data = this.data.slice(0, selectionStart) + this.data.slice(selectionEnd, this.data.length);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (selectionStart === selectionEnd && key === 'Backspace') {
|
|
128
|
+
if (this.data.length > 0) {
|
|
129
|
+
if (this.data[selectionStart - 1] !== ':' ||
|
|
130
|
+
(this.data[selectionStart - 1] === ':' && selectionStart === this.data.length)) {
|
|
131
|
+
this.data = this.data.slice(0, selectionStart - 1) + this.data.slice(selectionEnd, this.data.length);
|
|
132
|
+
this.caretPositionStart--;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return 'stop';
|
|
136
|
+
}
|
|
137
|
+
if (key === 'Tab' || key === ' ' || key === ':') {
|
|
138
|
+
if (!this.data.includes(':') && this.data.length > 0) {
|
|
139
|
+
this.makeHourFull();
|
|
140
|
+
this.data += ':';
|
|
141
|
+
this.caretPositionStart++;
|
|
142
|
+
return 'stop';
|
|
143
|
+
}
|
|
144
|
+
if (key === 'Tab') {
|
|
145
|
+
return 'tab';
|
|
146
|
+
}
|
|
147
|
+
return 'stop';
|
|
148
|
+
}
|
|
149
|
+
if (key === 'ArrowRight') {
|
|
150
|
+
if (this.caretPositionStart < this.data.length) {
|
|
151
|
+
this.caretPositionStart++;
|
|
152
|
+
}
|
|
153
|
+
return 'arrow';
|
|
154
|
+
}
|
|
155
|
+
if (key === 'ArrowLeft') {
|
|
156
|
+
if (this.caretPositionStart > 0) {
|
|
157
|
+
this.caretPositionStart--;
|
|
158
|
+
}
|
|
159
|
+
return 'arrow';
|
|
160
|
+
}
|
|
161
|
+
if (key === 'ArrowDown' && !this.focusedFlag) {
|
|
162
|
+
this.show();
|
|
163
|
+
}
|
|
164
|
+
return 'continue';
|
|
165
|
+
}
|
|
166
|
+
checkUnUsedKeys(key) {
|
|
167
|
+
const r = new RegExp('[0-9]');
|
|
168
|
+
return !r.test(key);
|
|
169
|
+
}
|
|
170
|
+
setCaretPosition(elem) {
|
|
171
|
+
setTimeout(() => {
|
|
172
|
+
if (elem !== null) {
|
|
173
|
+
if (elem.createTextRange) {
|
|
174
|
+
const range = elem.createTextRange();
|
|
175
|
+
range.move('character', this.caretPositionStart);
|
|
176
|
+
range.select();
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
if (elem.selectionStart) {
|
|
180
|
+
elem.focus();
|
|
181
|
+
elem.setSelectionRange(this.caretPositionStart, this.caretPositionStart);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
elem.focus();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
checkOutOfRangeNumber(time) {
|
|
191
|
+
const hour = parseInt(time.split(':')[0], 10);
|
|
192
|
+
let minute = -1;
|
|
193
|
+
if (time.split(':').length > 1) {
|
|
194
|
+
minute = parseInt(time.split(':')[1], 10);
|
|
195
|
+
}
|
|
196
|
+
if (hour < 24 && time.split(':')[0].length < 3 && minute < 60) {
|
|
197
|
+
if (time.split(':').length > 1 && time.split(':')[1].length > 2) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
makeHourFull() {
|
|
205
|
+
const hourPart = this.data.split(':')[0];
|
|
206
|
+
const minutePart = this.data.split(':').length > 1 ? this.data.split(':')[1] : '';
|
|
207
|
+
if (hourPart.length === 1) {
|
|
208
|
+
this.data = '0' + hourPart + (minutePart ? ':' + minutePart : minutePart);
|
|
209
|
+
this.caretPositionStart++;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
makeMinuteFull() {
|
|
213
|
+
const hourPart = this.data.split(':')[0];
|
|
214
|
+
const minutePart = this.data.split(':').length > 1 ? this.data.split(':')[1] : '';
|
|
215
|
+
if (minutePart.length === 0) {
|
|
216
|
+
this.data = hourPart + ':00';
|
|
217
|
+
this.caretPositionStart += 2;
|
|
218
|
+
}
|
|
219
|
+
if (minutePart.length === 1) {
|
|
220
|
+
this.data = hourPart + ':' + minutePart + '0';
|
|
221
|
+
this.caretPositionStart++;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
fixTimeToNearest() {
|
|
225
|
+
if (this.data.length > 0) {
|
|
226
|
+
this.makeHourFull();
|
|
227
|
+
this.makeMinuteFull();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
registerOnChange(fn) {
|
|
231
|
+
this.onChangeFn = fn;
|
|
232
|
+
}
|
|
233
|
+
registerOnTouched(fn) {
|
|
234
|
+
this.onTouchedFn = fn;
|
|
235
|
+
}
|
|
236
|
+
setDisabledState(isDisabled) {
|
|
237
|
+
this.disabled = isDisabled;
|
|
238
|
+
}
|
|
239
|
+
writeValue(obj) {
|
|
240
|
+
if (obj) {
|
|
241
|
+
obj = obj.toString();
|
|
242
|
+
let temp = '';
|
|
243
|
+
if (obj.split(':').length >= 2) {
|
|
244
|
+
temp = obj.split(':')[0] + ':' + obj.split(':')[1];
|
|
245
|
+
}
|
|
246
|
+
this._data = temp;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
this._data = '';
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
onChange() {
|
|
253
|
+
this.onChangeFn(this.data);
|
|
254
|
+
}
|
|
255
|
+
show() {
|
|
256
|
+
this.calcListPosition();
|
|
257
|
+
this.focusedFlag = true;
|
|
258
|
+
}
|
|
259
|
+
close(val = null) {
|
|
260
|
+
if (val) {
|
|
261
|
+
this.data = val;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
this.fixTimeToNearest();
|
|
265
|
+
}
|
|
266
|
+
this.focusedFlag = false;
|
|
267
|
+
this.control?.markAsTouched();
|
|
268
|
+
}
|
|
269
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsTimepickerComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormTimePickerService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: EcabsTimepickerComponent, selector: "ecabs-timepicker", inputs: { showCloseIcon: "showCloseIcon", focusedFlag: "focusedFlag", listPlacement: "listPlacement", appendTo: "appendTo", min: "min", max: "max", showDayStart: "showDayStart", showDayEnd: "showDayEnd", addSecond: "addSecond" }, host: { listeners: { "document:mousedown": "handleMousedown($event)" }, properties: { "class.form-timepicker-focused": "this.focusedFlag" } }, providers: [
|
|
271
|
+
{
|
|
272
|
+
provide: NG_VALUE_ACCESSOR,
|
|
273
|
+
useExisting: EcabsTimepickerComponent,
|
|
274
|
+
multi: true,
|
|
275
|
+
},
|
|
276
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"timeInputWrapper\" [ngClass]=\"{ disabled: disabled }\">\r\n <app-element-wrapper\r\n [data]=\"getData()\"\r\n [showCloseIcon]=\"showCloseIcon\"\r\n [focusedFlag]=\"focusedFlag\"\r\n (clear)=\"clearInput()\"\r\n >\r\n <div class=\"timeInputFieldWrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"form-field__input\"\r\n [value]=\"data\"\r\n [disabled]=\"disabled\"\r\n (focus)=\"show()\"\r\n (click)=\"show()\"\r\n (keydown)=\"inputKeyDown($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n </div>\r\n <ecabs-time-list-panel\r\n [typedValue]=\"data\"\r\n *ngIf=\"focusedFlag\"\r\n [showDayStart]=\"showDayStart\"\r\n [showDayEnd]=\"showDayEnd\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n class=\"form-time-list\"\r\n [appendTo]=\"appendTo\"\r\n [listPosition]=\"listPosition\"\r\n (closeMe)=\"close($event)\"\r\n ></ecabs-time-list-panel>\r\n </div>\r\n </app-element-wrapper>\r\n</div>\r\n", styles: [":host::ng-deep .timeInputWrapper app-element-wrapper .form-field{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.EcabsTimeListPanelComponent, selector: "ecabs-time-list-panel", inputs: ["typedValue", "listPlacement", "listPosition", "appendTo", "min", "max", "showDayStart", "showDayEnd", "position"], outputs: ["onscroll", "closeMe"] }] }); }
|
|
277
|
+
}
|
|
278
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EcabsTimepickerComponent, decorators: [{
|
|
279
|
+
type: Component,
|
|
280
|
+
args: [{ selector: 'ecabs-timepicker', providers: [
|
|
281
|
+
{
|
|
282
|
+
provide: NG_VALUE_ACCESSOR,
|
|
283
|
+
useExisting: EcabsTimepickerComponent,
|
|
284
|
+
multi: true,
|
|
285
|
+
},
|
|
286
|
+
], template: "<div class=\"timeInputWrapper\" [ngClass]=\"{ disabled: disabled }\">\r\n <app-element-wrapper\r\n [data]=\"getData()\"\r\n [showCloseIcon]=\"showCloseIcon\"\r\n [focusedFlag]=\"focusedFlag\"\r\n (clear)=\"clearInput()\"\r\n >\r\n <div class=\"timeInputFieldWrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"form-field__input\"\r\n [value]=\"data\"\r\n [disabled]=\"disabled\"\r\n (focus)=\"show()\"\r\n (click)=\"show()\"\r\n (keydown)=\"inputKeyDown($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n </div>\r\n <ecabs-time-list-panel\r\n [typedValue]=\"data\"\r\n *ngIf=\"focusedFlag\"\r\n [showDayStart]=\"showDayStart\"\r\n [showDayEnd]=\"showDayEnd\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n class=\"form-time-list\"\r\n [appendTo]=\"appendTo\"\r\n [listPosition]=\"listPosition\"\r\n (closeMe)=\"close($event)\"\r\n ></ecabs-time-list-panel>\r\n </div>\r\n </app-element-wrapper>\r\n</div>\r\n", styles: [":host::ng-deep .timeInputWrapper app-element-wrapper .form-field{margin-bottom:0}\n"] }]
|
|
287
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormTimePickerService }, { type: i0.Injector }]; }, propDecorators: { showCloseIcon: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], focusedFlag: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}, {
|
|
292
|
+
type: HostBinding,
|
|
293
|
+
args: ['class.form-timepicker-focused']
|
|
294
|
+
}], listPlacement: [{
|
|
295
|
+
type: Input
|
|
296
|
+
}], appendTo: [{
|
|
297
|
+
type: Input
|
|
298
|
+
}], min: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], max: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], showDayStart: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], showDayEnd: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], addSecond: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], handleMousedown: [{
|
|
309
|
+
type: HostListener,
|
|
310
|
+
args: ['document:mousedown', ['$event']]
|
|
311
|
+
}] } });
|
|
312
312
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtdGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtdGltZXBpY2tlci9lY2Ficy10aW1lcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy10aW1lcGlja2VyL2VjYWJzLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxTQUFTLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEcsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBZXhELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxvQkFBb0I7SUFtQmhFLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUUsS0FBVTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRztZQUM3QixJQUFLLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFHO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxDQUFFLENBQUM7YUFDakU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUUs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ZW50LCBJbnB1dCwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgSW5qZWN0b3IsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9ybVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9lY2Ficy10aW1lcGlja2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgRWxlbWVudEJhc2VDb21wb25lbnQgZnJvbSAnLi4vYmFzZS9lbGVtZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBMaXN0UGxhY2VtZW50LCBMaXN0UG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvdGltZXBpY2tlci5tb2RlbHMnO1xyXG5cclxuQENvbXBvbmVudCgge1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtdGltZXBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VjYWJzLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWyAnZWNhYnMtdGltZXBpY2tlci5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBFY2Fic1RpbWVwaWNrZXJDb21wb25lbnQsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG59IClcclxuZXhwb3J0IGNsYXNzIEVjYWJzVGltZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIEVsZW1lbnRCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIHNob3dDbG9zZUljb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZyggJ2NsYXNzLmZvcm0tdGltZXBpY2tlci1mb2N1c2VkJyApIGZvY3VzZWRGbGFnID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbGlzdFBsYWNlbWVudDogTGlzdFBsYWNlbWVudCA9ICdhdXRvJztcclxuICBASW5wdXQoKSBhcHBlbmRUbyE6IHN0cmluZztcclxuICBASW5wdXQoKSBtaW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dEYXlTdGFydCA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0RheUVuZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFkZFNlY29uZCA9IHRydWU7XHJcblxyXG4gIHBvc2l0aW9uOiBMaXN0UG9zaXRpb24gPSB7fTtcclxuICBfZGF0YSA9ICcnO1xyXG4gIF90aW1lUGlja2VyO1xyXG4gIF9pbnB1dCE6IGFueTtcclxuICBsaXN0UG9zaXRpb246IExpc3RQb3NpdGlvbiA9IHt9O1xyXG4gIGNhcmV0UG9zaXRpb25TdGFydCE6IGFueTtcclxuICBjYXJldFBvc2l0aW9uRW5kITogYW55O1xyXG5cclxuICBnZXQgZGF0YSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICBzZXQgZGF0YSggdmFsdWU6IGFueSApIHtcclxuICAgIHRoaXMuX2RhdGEgPSB2YWx1ZTtcclxuICAgIGlmICggdGhpcy5fZGF0YS5sZW5ndGggPT09IDUgKSB7XHJcbiAgICAgIGlmICggdGhpcy5fZGF0YSA9PT0gJzIzOjU5JyApIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4oIHRoaXMuX2RhdGEgKyAoIHRoaXMuYWRkU2Vjb25kID8gJzo1OScgOiAnJyApICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKCB0aGlzLl9kYXRhICsgKCB0aGlzLmFkZFNlY29uZCA/ICc6MDAnIDogJycgKSApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCB0aGlzLl9kYXRhID09PSAnJyApIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZUZuKCB0aGlzLl9kYXRhICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgdGltZXBpY2tlclNlcnZpY2U6IEZvcm1UaW1lUGlja2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9ICcwMDowMCc7XHJcbiAgICB0aGlzLl90aW1lUGlja2VyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5fdGltZVBpY2tlci5xdWVyeVNlbGVjdG9yKCAnaW5wdXQnICk7XHJcbiAgICB9ICk7XHJcbiAgICBpZiAoICF0aGlzLmljb25DbGFzcyApIHtcclxuICAgICAgdGhpcy5pY29uQ2xhc3MgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldENvbmZpZygpLmljb25DbGFzcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoICdkb2N1bWVudDptb3VzZWRvd24nLCBbICckZXZlbnQnIF0gKVxyXG4gIGhhbmRsZU1vdXNlZG93biggJGV2ZW50OiBNb3VzZUV2ZW50ICk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChcclxuICAgICAgdGFyZ2V0LmNsb3Nlc3QoICcuZm9ybS10aW1lLWxpc3QnICkgfHxcclxuICAgICAgdGFyZ2V0LmNsb3Nlc3QoICcudGltZUlucHV0V3JhcHBlcicgKSA9PT0gdGhpcy5fdGltZVBpY2tlci5xdWVyeVNlbGVjdG9yKCAnLnRpbWVJbnB1dFdyYXBwZXInIClcclxuICAgICkge1xyXG4gICAgICB0aGlzLl90aW1lUGlja2VyLnF1ZXJ5U2VsZWN0b3IoICcudGltZUlucHV0V3JhcHBlcicgKS5mb2N1cygpO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCB0aGlzLmZvY3VzZWRGbGFnICkge1xyXG4gICAgICB0aGlzLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCBOZ0NvbnRyb2wsIG51bGwgKSBhcyBOZ0NvbnRyb2w7XHJcbiAgICBpZiAoIG5nQ29udHJvbCApIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJJbnB1dCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgY2FsY0xpc3RQb3NpdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fdGltZVBpY2tlci5xdWVyeVNlbGVjdG9yKCAnLnRpbWVJbnB1dEZpZWxkV3JhcHBlcicgKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmICggdGhpcy5hcHBlbmRUbyApIHtcclxuICAgICAgdGhpcy5saXN0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgbGVmdDogcG9zaXRpb24ueCxcclxuICAgICAgICB0b3A6IHBvc2l0aW9uLnRvcCArIHBvc2l0aW9uLmhlaWdodCxcclxuICAgICAgICB3aWR0aDogcG9zaXRpb24ud2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxpc3RQb3NpdGlvbiA9IHtcclxuICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgIHRvcDogcG9zaXRpb24uaGVpZ2h0LFxyXG4gICAgICAgIHdpZHRoOiBwb3NpdGlvbi53aWR0aCxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlucHV0S2V5RG93biggZXZlbnQ6IGFueSApOiBib29sZWFuIHtcclxuICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgdGhpcy5jYXJldFBvc2l0aW9uRW5kID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZDtcclxuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcclxuICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbiggdGhpcy5faW5wdXQgKTtcclxuICAgIHN3aXRjaCAoIHRoaXMuY2hlY2tTcGVjaWFsS2V5cygga2V5LCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCwgdGhpcy5jYXJldFBvc2l0aW9uRW5kICkgKSB7XHJcbiAgICAgIGNhc2UgJ3N0b3AnOlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGNhc2UgJ3RhYic6XHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBjYXNlICdhcnJvdyc6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICggdGhpcy5jaGVja1VuVXNlZEtleXMoIGtleSApICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3RGF0YSA9XHJcbiAgICAgIHRoaXMuZGF0YS5zbGljZSggMCwgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQgKSArIGtleSArIHRoaXMuZGF0YS5zbGljZSggdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQsIHRoaXMuZGF0YS5sZW5ndGggKTtcclxuXHJcbiAgICBpZiAoIHRoaXMuY2hlY2tPdXRPZlJhbmdlTnVtYmVyKCBuZXdEYXRhICkgKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IG5ld0RhdGE7XHJcbiAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCA9PT0gdGhpcy5kYXRhLmxlbmd0aCAmJlxyXG4gICAgICAoIHRoaXMuZGF0YS5sZW5ndGggPT09IDIgfHwgKCB0aGlzLmRhdGEubGVuZ3RoID09PSAxICYmIHBhcnNlSW50KCB0aGlzLmRhdGEgKSA+IDIgKSApXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5tYWtlSG91ckZ1bGwoKTtcclxuICAgICAgdGhpcy5kYXRhICs9ICc6JztcclxuICAgICAgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQrKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjaGVja1NwZWNpYWxLZXlzKCBrZXk6IGFueSwgc2VsZWN0aW9uU3RhcnQ6IGFueSwgc2VsZWN0aW9uRW5kOiBhbnkgKTogJ3N0b3AnIHwgJ2NvbnRpbnVlJyB8ICd0YWInIHwgJ2Fycm93JyB7XHJcbiAgICBpZiAoIHNlbGVjdGlvblN0YXJ0ICE9PSBzZWxlY3Rpb25FbmQgJiYga2V5ICE9PSAnQXJyb3dMZWZ0JyAmJiBrZXkgIT09ICdBcnJvd1JpZ2h0JyApIHtcclxuICAgICAgaWYgKCAhKCB0aGlzLmRhdGEuc2xpY2UoIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgKS5pbmNsdWRlcyggJzonICkgJiYgc2VsZWN0aW9uRW5kICE9PSB0aGlzLmRhdGEubGVuZ3RoICkgKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKCAwLCBzZWxlY3Rpb25TdGFydCApICsgdGhpcy5kYXRhLnNsaWNlKCBzZWxlY3Rpb25FbmQsIHRoaXMuZGF0YS5sZW5ndGggKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCBzZWxlY3Rpb25TdGFydCA9PT0gc2VsZWN0aW9uRW5kICYmIGtleSA9PT0gJ0JhY2tzcGFjZScgKSB7XHJcbiAgICAgIGlmICggdGhpcy5kYXRhLmxlbmd0aCA+IDAgKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5kYXRhWyBzZWxlY3Rpb25TdGFydCAtIDEgXSAhPT0gJzonIHx8XHJcbiAgICAgICAgICAoIHRoaXMuZGF0YVsgc2VsZWN0aW9uU3RhcnQgLSAxIF0gPT09ICc6JyAmJiBzZWxlY3Rpb25TdGFydCA9PT0gdGhpcy5kYXRhLmxlbmd0aCApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoIDAsIHNlbGVjdGlvblN0YXJ0IC0gMSApICsgdGhpcy5kYXRhLnNsaWNlKCBzZWxlY3Rpb25FbmQsIHRoaXMuZGF0YS5sZW5ndGggKTtcclxuICAgICAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0LS07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gJ3N0b3AnO1xyXG4gICAgfVxyXG4gICAgaWYgKCBrZXkgPT09ICdUYWInIHx8IGtleSA9PT0gJyAnIHx8IGtleSA9PT0gJzonICkge1xyXG4gICAgICBpZiAoICF0aGlzLmRhdGEuaW5jbHVkZXMoICc6JyApICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwICkge1xyXG4gICAgICAgIHRoaXMubWFrZUhvdXJGdWxsKCk7XHJcbiAgICAgICAgdGhpcy5kYXRhICs9ICc6JztcclxuICAgICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCsrO1xyXG5cclxuICAgICAgICByZXR1cm4gJ3N0b3AnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgga2V5ID09PSAnVGFiJyApIHtcclxuICAgICAgICByZXR1cm4gJ3RhYic7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAnc3RvcCc7XHJcbiAgICB9XHJcbiAgICBpZiAoIGtleSA9PT0gJ0Fycm93UmlnaHQnICkge1xyXG4gICAgICBpZiAoIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0IDwgdGhpcy5kYXRhLmxlbmd0aCApIHtcclxuICAgICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCsrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gJ2Fycm93JztcclxuICAgIH1cclxuICAgIGlmICgga2V5ID09PSAnQXJyb3dMZWZ0JyApIHtcclxuICAgICAgaWYgKCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCA+IDAgKSB7XHJcbiAgICAgICAgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQtLTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICdhcnJvdyc7XHJcbiAgICB9XHJcbiAgICBpZiAoIGtleSA9PT0gJ0Fycm93RG93bicgJiYgIXRoaXMuZm9jdXNlZEZsYWcgKSB7XHJcbiAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnY29udGludWUnO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tVblVzZWRLZXlzKCBrZXk6IHN0cmluZyApOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHIgPSBuZXcgUmVnRXhwKCAnWzAtOV0nICk7XHJcblxyXG4gICAgcmV0dXJuICFyLnRlc3QoIGtleSApO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2FyZXRQb3NpdGlvbiggZWxlbTogYW55ICk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCggKCkgPT4ge1xyXG4gICAgICBpZiAoIGVsZW0gIT09IG51bGwgKSB7XHJcbiAgICAgICAgaWYgKCBlbGVtLmNyZWF0ZVRleHRSYW5nZSApIHtcclxuICAgICAgICAgIGNvbnN0IHJhbmdlID0gZWxlbS5jcmVhdGVUZXh0UmFuZ2UoKTtcclxuICAgICAgICAgIHJhbmdlLm1vdmUoICdjaGFyYWN0ZXInLCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCApO1xyXG4gICAgICAgICAgcmFuZ2Uuc2VsZWN0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICggZWxlbS5zZWxlY3Rpb25TdGFydCApIHtcclxuICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICBlbGVtLnNldFNlbGVjdGlvblJhbmdlKCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCwgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gKTtcclxuICB9XHJcblxyXG4gIGNoZWNrT3V0T2ZSYW5nZU51bWJlciggdGltZTogYW55ICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaG91ciA9IHBhcnNlSW50KCB0aW1lLnNwbGl0KCAnOicgKVsgMCBdLCAxMCApO1xyXG4gICAgbGV0IG1pbnV0ZSA9IC0xO1xyXG4gICAgaWYgKCB0aW1lLnNwbGl0KCAnOicgKS5sZW5ndGggPiAxICkge1xyXG4gICAgICBtaW51dGUgPSBwYXJzZUludCggdGltZS5zcGxpdCggJzonIClbIDEgXSwgMTAgKTtcclxuICAgIH1cclxuICAgIGlmICggaG91ciA8IDI0ICYmIHRpbWUuc3BsaXQoICc6JyApWyAwIF0ubGVuZ3RoIDwgMyAmJiBtaW51dGUgPCA2MCApIHtcclxuICAgICAgaWYgKCB0aW1lLnNwbGl0KCAnOicgKS5sZW5ndGggPiAxICYmIHRpbWUuc3BsaXQoICc6JyApWyAxIF0ubGVuZ3RoID4gMiApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1ha2VIb3VyRnVsbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGhvdXJQYXJ0ID0gdGhpcy5kYXRhLnNwbGl0KCAnOicgKVsgMCBdO1xyXG4gICAgY29uc3QgbWludXRlUGFydCA9IHRoaXMuZGF0YS5zcGxpdCggJzonICkubGVuZ3RoID4gMSA/IHRoaXMuZGF0YS5zcGxpdCggJzonIClbIDEgXSA6ICcnO1xyXG4gICAgaWYgKCBob3VyUGFydC5sZW5ndGggPT09IDEgKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9ICcwJyArIGhvdXJQYXJ0ICsgKCBtaW51dGVQYXJ0ID8gJzonICsgbWludXRlUGFydCA6IG1pbnV0ZVBhcnQgKTtcclxuICAgICAgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQrKztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VNaW51dGVGdWxsKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaG91clBhcnQgPSB0aGlzLmRhdGEuc3BsaXQoICc6JyApWyAwIF07XHJcbiAgICBjb25zdCBtaW51dGVQYXJ0ID0gdGhpcy5kYXRhLnNwbGl0KCAnOicgKS5sZW5ndGggPiAxID8gdGhpcy5kYXRhLnNwbGl0KCAnOicgKVsgMSBdIDogJyc7XHJcbiAgICBpZiAoIG1pbnV0ZVBhcnQubGVuZ3RoID09PSAwICkge1xyXG4gICAgICB0aGlzLmRhdGEgPSBob3VyUGFydCArICc6MDAnO1xyXG4gICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCArPSAyO1xyXG4gICAgfVxyXG4gICAgaWYgKCBtaW51dGVQYXJ0Lmxlbmd0aCA9PT0gMSApIHtcclxuICAgICAgdGhpcy5kYXRhID0gaG91clBhcnQgKyAnOicgKyBtaW51dGVQYXJ0ICsgJzAnO1xyXG4gICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZml4VGltZVRvTmVhcmVzdCgpOiB2b2lkIHtcclxuICAgIGlmICggdGhpcy5kYXRhLmxlbmd0aCA+IDAgKSB7XHJcbiAgICAgIHRoaXMubWFrZUhvdXJGdWxsKCk7XHJcbiAgICAgIHRoaXMubWFrZU1pbnV0ZUZ1bGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIHB1YmxpYyBvbkNoYW5nZUZuID0gKCBfOiBhbnkgKTogdm9pZCA9PiB7IH07XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIHB1YmxpYyBvblRvdWNoZWRGbiA9ICgpOiB2b2lkID0+IHsgfTtcclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoIGZuOiBhbnkgKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlRm4gPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZCggZm46IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkRm4gPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKCBpc0Rpc2FibGVkOiBib29sZWFuICk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSggb2JqOiBhbnkgKTogdm9pZCB7XHJcbiAgICBpZiAoIG9iaiApIHtcclxuICAgICAgb2JqID0gb2JqLnRvU3RyaW5nKCk7XHJcbiAgICAgIGxldCB0ZW1wID0gJyc7XHJcbiAgICAgIGlmICggb2JqLnNwbGl0KCAnOicgKS5sZW5ndGggPj0gMiApIHtcclxuICAgICAgICB0ZW1wID0gb2JqLnNwbGl0KCAnOicgKVsgMCBdICsgJzonICsgb2JqLnNwbGl0KCAnOicgKVsgMSBdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2RhdGEgPSB0ZW1wO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZGF0YSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZUZuKCB0aGlzLmRhdGEgKTtcclxuICB9XHJcblxyXG4gIHNob3coKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbGNMaXN0UG9zaXRpb24oKTtcclxuICAgIHRoaXMuZm9jdXNlZEZsYWcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoIHZhbCA9IG51bGwgKTogdm9pZCB7XHJcbiAgICBpZiAoIHZhbCApIHtcclxuICAgICAgdGhpcy5kYXRhID0gdmFsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maXhUaW1lVG9OZWFyZXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvY3VzZWRGbGFnID0gZmFsc2U7XHJcbiAgICB0aGlzLmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInRpbWVJbnB1dFdyYXBwZXJcIiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBkaXNhYmxlZCB9XCI+XHJcbiAgPGFwcC1lbGVtZW50LXdyYXBwZXJcclxuICAgIFtkYXRhXT1cImdldERhdGEoKVwiXHJcbiAgICBbc2hvd0Nsb3NlSWNvbl09XCJzaG93Q2xvc2VJY29uXCJcclxuICAgIFtmb2N1c2VkRmxhZ109XCJmb2N1c2VkRmxhZ1wiXHJcbiAgICAoY2xlYXIpPVwiY2xlYXJJbnB1dCgpXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGltZUlucHV0RmllbGRXcmFwcGVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0XCJcclxuICAgICAgICBbdmFsdWVdPVwiZGF0YVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAoZm9jdXMpPVwic2hvdygpXCJcclxuICAgICAgICAoY2xpY2spPVwic2hvdygpXCJcclxuICAgICAgICAoa2V5ZG93bik9XCJpbnB1dEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgLz5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX2lucHV0LS1zdWZmaXhcIiAqbmdJZj1cInR5cGUgIT09ICdudW1iZXInXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWljb25cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZWNhYnMtdGltZS1saXN0LXBhbmVsXHJcbiAgICAgICAgW3R5cGVkVmFsdWVdPVwiZGF0YVwiXHJcbiAgICAgICAgKm5nSWY9XCJmb2N1c2VkRmxhZ1wiXHJcbiAgICAgICAgW3Nob3dEYXlTdGFydF09XCJzaG93RGF5U3RhcnRcIlxyXG4gICAgICAgIFtzaG93RGF5RW5kXT1cInNob3dEYXlFbmRcIlxyXG4gICAgICAgIFttaW5dPVwibWluXCJcclxuICAgICAgICBbbWF4XT1cIm1heFwiXHJcbiAgICAgICAgY2xhc3M9XCJmb3JtLXRpbWUtbGlzdFwiXHJcbiAgICAgICAgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCJcclxuICAgICAgICBbbGlzdFBvc2l0aW9uXT1cImxpc3RQb3NpdGlvblwiXHJcbiAgICAgICAgKGNsb3NlTWUpPVwiY2xvc2UoJGV2ZW50KVwiXHJcbiAgICAgID48L2VjYWJzLXRpbWUtbGlzdC1wYW5lbD5cclxuICAgIDwvZGl2PlxyXG4gIDwvYXBwLWVsZW1lbnQtd3JhcHBlcj5cclxuPC9kaXY+XHJcbiJdfQ==
|