@anglr/datetime 2.0.1 → 3.0.0-beta.20220322070853
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/changelog.md +86 -0
- package/date-fns/src/misc/tokens.d.ts.map +1 -1
- package/date-fns/src/services/dateFnsDateApi.service.d.ts.map +1 -1
- package/es2015/date-fns/src/misc/tokens.js +12 -1
- package/es2015/date-fns/src/misc/tokens.js.map +1 -1
- package/es2015/date-fns/src/services/dateFnsDateApi.service.js +99 -5
- package/es2015/date-fns/src/services/dateFnsDateApi.service.js.map +1 -1
- package/es2015/moment/src/misc/tokens.js +12 -1
- package/es2015/moment/src/misc/tokens.js.map +1 -1
- package/es2015/moment/src/services/momentDateApi.service.js +90 -0
- package/es2015/moment/src/services/momentDateApi.service.js.map +1 -1
- package/es2015/src/misc/datetime.interface.js.map +1 -1
- package/es2015/src/misc/tokens.js +12 -1
- package/es2015/src/misc/tokens.js.map +1 -1
- package/es2015/src/modules/datePipes.module.js +2 -7
- package/es2015/src/modules/datePipes.module.js.map +1 -1
- package/es2015/src/picker/components/clockTimePicker/clockTimePicker.component.js +14 -0
- package/es2015/src/picker/components/clockTimePicker/clockTimePicker.component.js.map +1 -0
- package/es2015/src/picker/components/clockTimePicker/clockTimePicker.interface.js +2 -0
- package/es2015/src/picker/components/clockTimePicker/clockTimePicker.interface.js.map +1 -0
- package/es2015/src/picker/components/dayPicker/dayPicker.component.js +49 -13
- package/es2015/src/picker/components/dayPicker/dayPicker.component.js.map +1 -1
- package/es2015/src/picker/components/monthPicker/monthPicker.component.js +5 -4
- package/es2015/src/picker/components/monthPicker/monthPicker.component.js.map +1 -1
- package/es2015/src/picker/components/picker/picker.component.js +3 -2
- package/es2015/src/picker/components/picker/picker.component.js.map +1 -1
- package/es2015/src/picker/components/pickerBase.component.js +15 -120
- package/es2015/src/picker/components/pickerBase.component.js.map +1 -1
- package/es2015/src/picker/components/pickerImplBase.component.js +145 -0
- package/es2015/src/picker/components/pickerImplBase.component.js.map +1 -0
- package/es2015/src/picker/components/rollerTimePicker/rollerTimePicker.component.js +144 -0
- package/es2015/src/picker/components/rollerTimePicker/rollerTimePicker.component.js.map +1 -0
- package/es2015/src/picker/components/rollerTimePicker/rollerTimePicker.data.js +341 -0
- package/es2015/src/picker/components/rollerTimePicker/rollerTimePicker.data.js.map +1 -0
- package/es2015/src/picker/components/rollerTimePicker/rollerTimePicker.interface.js +2 -0
- package/es2015/src/picker/components/rollerTimePicker/rollerTimePicker.interface.js.map +1 -0
- package/es2015/src/picker/components/yearPicker/yearPicker.component.js +5 -4
- package/es2015/src/picker/components/yearPicker/yearPicker.component.js.map +1 -1
- package/es2015/src/picker/directives/index.js +4 -0
- package/es2015/src/picker/directives/index.js.map +1 -0
- package/es2015/src/picker/directives/loopScroll/loopScroll.directive.js +200 -0
- package/es2015/src/picker/directives/loopScroll/loopScroll.directive.js.map +1 -0
- package/es2015/src/picker/directives/loopScroll/loopScroll.interface.js +3 -0
- package/es2015/src/picker/directives/loopScroll/loopScroll.interface.js.map +1 -0
- package/es2015/src/picker/directives/loopScrollData/loopScrollData.directive.js +23 -0
- package/es2015/src/picker/directives/loopScrollData/loopScrollData.directive.js.map +1 -0
- package/es2015/src/picker/misc/datetimePicker.interface.js.map +1 -1
- package/es2015/src/picker/modules/picker.module.js +21 -4
- package/es2015/src/picker/modules/picker.module.js.map +1 -1
- package/es2015/src/selector/components/inputDateTime/inputDateTime.component.js +16 -2
- package/es2015/src/selector/components/inputDateTime/inputDateTime.component.js.map +1 -1
- package/es2015/src/selector/components/selector/selector.component.js +25 -12
- package/es2015/src/selector/components/selector/selector.component.js.map +1 -1
- package/es2015/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js +6 -2
- package/es2015/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js.map +1 -1
- package/es2015/src/selector/directives/dateTimePickerRenderer/dateTimePickerRenderer.directive.js +134 -0
- package/es2015/src/selector/directives/dateTimePickerRenderer/dateTimePickerRenderer.directive.js.map +1 -0
- package/es2015/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js.map +1 -1
- package/es2015/src/selector/misc/datetimeSelector.interface.js.map +1 -1
- package/es2015/src/selector/misc/tokens.js.map +1 -1
- package/es2015/src/selector/modules/selector.module.js +9 -4
- package/es2015/src/selector/modules/selector.module.js.map +1 -1
- package/es2015/src/services/dateApi.interface.js.map +1 -1
- package/es2015/src/services/datePositionParser.service.js +14 -0
- package/es2015/src/services/datePositionParser.service.js.map +1 -1
- package/es2015/src/services/dateTimeRelativeParser.service.js +15 -1
- package/es2015/src/services/dateTimeRelativeParser.service.js.map +1 -1
- package/es2015/src/services/dateValueProvider.service.js +10 -5
- package/es2015/src/services/dateValueProvider.service.js.map +1 -1
- package/es2015/src/services/formatProvider.interface.js.map +1 -1
- package/es2020/date-fns/src/misc/tokens.js +12 -1
- package/es2020/date-fns/src/misc/tokens.js.map +1 -1
- package/es2020/date-fns/src/services/dateFnsDateApi.service.js +99 -5
- package/es2020/date-fns/src/services/dateFnsDateApi.service.js.map +1 -1
- package/es2020/moment/src/misc/tokens.js +12 -1
- package/es2020/moment/src/misc/tokens.js.map +1 -1
- package/es2020/moment/src/services/momentDateApi.service.js +90 -0
- package/es2020/moment/src/services/momentDateApi.service.js.map +1 -1
- package/es2020/src/misc/datetime.interface.js.map +1 -1
- package/es2020/src/misc/tokens.js +12 -1
- package/es2020/src/misc/tokens.js.map +1 -1
- package/es2020/src/modules/datePipes.module.js +2 -7
- package/es2020/src/modules/datePipes.module.js.map +1 -1
- package/es2020/src/picker/components/clockTimePicker/clockTimePicker.component.js +14 -0
- package/es2020/src/picker/components/clockTimePicker/clockTimePicker.component.js.map +1 -0
- package/es2020/src/picker/components/clockTimePicker/clockTimePicker.interface.js +2 -0
- package/es2020/src/picker/components/clockTimePicker/clockTimePicker.interface.js.map +1 -0
- package/es2020/src/picker/components/dayPicker/dayPicker.component.js +49 -13
- package/es2020/src/picker/components/dayPicker/dayPicker.component.js.map +1 -1
- package/es2020/src/picker/components/monthPicker/monthPicker.component.js +5 -4
- package/es2020/src/picker/components/monthPicker/monthPicker.component.js.map +1 -1
- package/es2020/src/picker/components/picker/picker.component.js +3 -2
- package/es2020/src/picker/components/picker/picker.component.js.map +1 -1
- package/es2020/src/picker/components/pickerBase.component.js +15 -120
- package/es2020/src/picker/components/pickerBase.component.js.map +1 -1
- package/es2020/src/picker/components/pickerImplBase.component.js +145 -0
- package/es2020/src/picker/components/pickerImplBase.component.js.map +1 -0
- package/es2020/src/picker/components/rollerTimePicker/rollerTimePicker.component.js +138 -0
- package/es2020/src/picker/components/rollerTimePicker/rollerTimePicker.component.js.map +1 -0
- package/es2020/src/picker/components/rollerTimePicker/rollerTimePicker.data.js +341 -0
- package/es2020/src/picker/components/rollerTimePicker/rollerTimePicker.data.js.map +1 -0
- package/es2020/src/picker/components/rollerTimePicker/rollerTimePicker.interface.js +2 -0
- package/es2020/src/picker/components/rollerTimePicker/rollerTimePicker.interface.js.map +1 -0
- package/es2020/src/picker/components/yearPicker/yearPicker.component.js +5 -4
- package/es2020/src/picker/components/yearPicker/yearPicker.component.js.map +1 -1
- package/es2020/src/picker/directives/index.js +4 -0
- package/es2020/src/picker/directives/index.js.map +1 -0
- package/es2020/src/picker/directives/loopScroll/loopScroll.directive.js +191 -0
- package/es2020/src/picker/directives/loopScroll/loopScroll.directive.js.map +1 -0
- package/es2020/src/picker/directives/loopScroll/loopScroll.interface.js +3 -0
- package/es2020/src/picker/directives/loopScroll/loopScroll.interface.js.map +1 -0
- package/es2020/src/picker/directives/loopScrollData/loopScrollData.directive.js +23 -0
- package/es2020/src/picker/directives/loopScrollData/loopScrollData.directive.js.map +1 -0
- package/es2020/src/picker/misc/datetimePicker.interface.js.map +1 -1
- package/es2020/src/picker/modules/picker.module.js +21 -4
- package/es2020/src/picker/modules/picker.module.js.map +1 -1
- package/es2020/src/selector/components/inputDateTime/inputDateTime.component.js +16 -2
- package/es2020/src/selector/components/inputDateTime/inputDateTime.component.js.map +1 -1
- package/es2020/src/selector/components/selector/selector.component.js +22 -11
- package/es2020/src/selector/components/selector/selector.component.js.map +1 -1
- package/es2020/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js +6 -2
- package/es2020/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.js.map +1 -1
- package/es2020/src/selector/directives/dateTimePickerRenderer/dateTimePickerRenderer.directive.js +133 -0
- package/es2020/src/selector/directives/dateTimePickerRenderer/dateTimePickerRenderer.directive.js.map +1 -0
- package/es2020/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.js.map +1 -1
- package/es2020/src/selector/misc/datetimeSelector.interface.js.map +1 -1
- package/es2020/src/selector/misc/tokens.js.map +1 -1
- package/es2020/src/selector/modules/selector.module.js +9 -4
- package/es2020/src/selector/modules/selector.module.js.map +1 -1
- package/es2020/src/services/dateApi.interface.js.map +1 -1
- package/es2020/src/services/datePositionParser.service.js +14 -0
- package/es2020/src/services/datePositionParser.service.js.map +1 -1
- package/es2020/src/services/dateTimeRelativeParser.service.js +15 -1
- package/es2020/src/services/dateTimeRelativeParser.service.js.map +1 -1
- package/es2020/src/services/dateValueProvider.service.js +10 -5
- package/es2020/src/services/dateValueProvider.service.js.map +1 -1
- package/es2020/src/services/formatProvider.interface.js.map +1 -1
- package/moment/src/misc/tokens.d.ts.map +1 -1
- package/moment/src/services/momentDateApi.service.d.ts.map +1 -1
- package/package.json +14 -16
- package/src/dark.scss +31 -28
- package/src/misc/datetime.interface.d.ts +1 -1
- package/src/misc/datetime.interface.d.ts.map +1 -1
- package/src/misc/tokens.d.ts.map +1 -1
- package/src/modules/datePipes.module.d.ts +3 -4
- package/src/modules/datePipes.module.d.ts.map +1 -1
- package/src/picker/components/clockTimePicker/clockTimePicker.component.css +0 -0
- package/src/picker/components/clockTimePicker/clockTimePicker.component.d.ts +9 -0
- package/src/picker/components/clockTimePicker/clockTimePicker.component.d.ts.map +1 -0
- package/src/picker/components/clockTimePicker/clockTimePicker.component.html +0 -0
- package/src/picker/components/clockTimePicker/clockTimePicker.interface.d.ts +6 -0
- package/src/picker/components/clockTimePicker/clockTimePicker.interface.d.ts.map +1 -0
- package/src/picker/components/dayPicker/dayPicker.component.d.ts +6 -0
- package/src/picker/components/dayPicker/dayPicker.component.d.ts.map +1 -1
- package/src/picker/components/dayPicker/dayPicker.component.html +11 -7
- package/src/picker/components/monthPicker/monthPicker.component.d.ts.map +1 -1
- package/src/picker/components/monthPicker/monthPicker.component.html +6 -6
- package/src/picker/components/picker/picker.component.css +4 -0
- package/src/picker/components/picker/picker.component.d.ts +3 -3
- package/src/picker/components/picker/picker.component.d.ts.map +1 -1
- package/src/picker/components/pickerBase.component.d.ts +7 -97
- package/src/picker/components/pickerBase.component.d.ts.map +1 -1
- package/src/picker/components/pickerImplBase.component.d.ts +128 -0
- package/src/picker/components/pickerImplBase.component.d.ts.map +1 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.component.css +40 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.component.d.ts +71 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.component.d.ts.map +1 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.component.html +41 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.data.d.ts +4 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.data.d.ts.map +1 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.interface.d.ts +6 -0
- package/src/picker/components/rollerTimePicker/rollerTimePicker.interface.d.ts.map +1 -0
- package/src/picker/components/yearPicker/yearPicker.component.d.ts.map +1 -1
- package/src/picker/components/yearPicker/yearPicker.component.html +6 -6
- package/src/picker/directives/index.d.ts +4 -0
- package/src/picker/directives/index.d.ts.map +1 -0
- package/src/picker/directives/loopScroll/loopScroll.directive.d.ts +73 -0
- package/src/picker/directives/loopScroll/loopScroll.directive.d.ts.map +1 -0
- package/src/picker/directives/loopScroll/loopScroll.interface.d.ts +14 -0
- package/src/picker/directives/loopScroll/loopScroll.interface.d.ts.map +1 -0
- package/src/picker/directives/loopScrollData/loopScrollData.directive.d.ts +16 -0
- package/src/picker/directives/loopScrollData/loopScrollData.directive.d.ts.map +1 -0
- package/src/picker/misc/datetimePicker.interface.d.ts +14 -10
- package/src/picker/misc/datetimePicker.interface.d.ts.map +1 -1
- package/src/picker/modules/picker.module.d.ts +10 -7
- package/src/picker/modules/picker.module.d.ts.map +1 -1
- package/src/selector/components/inputDateTime/inputDateTime.component.d.ts +2 -2
- package/src/selector/components/inputDateTime/inputDateTime.component.d.ts.map +1 -1
- package/src/selector/components/inputDateTime/inputDateTime.component.html +1 -1
- package/src/selector/components/selector/selector.component.d.ts +7 -6
- package/src/selector/components/selector/selector.component.d.ts.map +1 -1
- package/src/selector/components/selector/selector.component.html +6 -5
- package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.d.ts +1 -1
- package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.d.ts.map +1 -1
- package/src/selector/components/simpleInputDateTime/simpleInputDateTime.component.html +1 -1
- package/src/selector/directives/dateTimePickerRenderer/dateTimePickerRenderer.directive.d.ts +80 -0
- package/src/selector/directives/dateTimePickerRenderer/dateTimePickerRenderer.directive.d.ts.map +1 -0
- package/src/selector/directives/selectorControlValueAccessor/selectorControlValueAccessor.directive.d.ts.map +1 -1
- package/src/selector/misc/datetimeSelector.interface.d.ts +16 -3
- package/src/selector/misc/datetimeSelector.interface.d.ts.map +1 -1
- package/src/selector/misc/tokens.d.ts +1 -1
- package/src/selector/misc/tokens.d.ts.map +1 -1
- package/src/selector/modules/selector.module.d.ts +5 -4
- package/src/selector/modules/selector.module.d.ts.map +1 -1
- package/src/services/dateApi.interface.d.ts +72 -0
- package/src/services/dateApi.interface.d.ts.map +1 -1
- package/src/services/datePositionParser.service.d.ts +3 -3
- package/src/services/datePositionParser.service.d.ts.map +1 -1
- package/src/services/dateTimeRelativeParser.service.d.ts +8 -0
- package/src/services/dateTimeRelativeParser.service.d.ts.map +1 -1
- package/src/services/dateValueProvider.service.d.ts.map +1 -1
- package/src/services/formatProvider.interface.d.ts +48 -4
- package/src/services/formatProvider.interface.d.ts.map +1 -1
- package/version.bak +1 -1
- package/es2015/karma.conf.js +0 -57
- package/es2015/karma.conf.js.map +0 -1
- package/es2015/src/pipes/asRequiredType.js +0 -22
- package/es2015/src/pipes/asRequiredType.js.map +0 -1
- package/es2020/karma.conf.js +0 -57
- package/es2020/karma.conf.js.map +0 -1
- package/es2020/src/pipes/asRequiredType.js +0 -22
- package/es2020/src/pipes/asRequiredType.js.map +0 -1
- package/karma.conf.d.ts +0 -2
- package/karma.conf.d.ts.map +0 -1
- package/src/pipes/asRequiredType.d.ts +0 -21
- package/src/pipes/asRequiredType.d.ts.map +0 -1
- package/tsconfig.karma.json +0 -19
|
@@ -8,6 +8,7 @@ import { DateTimeSelectorControlValueAccessor } from '../directives/selectorCont
|
|
|
8
8
|
import { DatetimeValidatorDirective } from '../directives/datetimeValidator/datetimeValidator.directive';
|
|
9
9
|
import { DatetimeMinValidatorDirective } from '../directives/datetimeMinValidator/datetimeMinValidator.directive';
|
|
10
10
|
import { DatetimeMaxValidatorDirective } from '../directives/datetimeMaxValidator/datetimeMaxValidator.directive';
|
|
11
|
+
import { DateTimePickerRendererDirective } from '../directives/dateTimePickerRenderer/dateTimePickerRenderer.directive';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
/**
|
|
13
14
|
* Angular module for date time selector components
|
|
@@ -20,13 +21,15 @@ DateTimeSelectorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0",
|
|
|
20
21
|
DateTimeSelectorControlValueAccessor,
|
|
21
22
|
DatetimeValidatorDirective,
|
|
22
23
|
DatetimeMinValidatorDirective,
|
|
23
|
-
DatetimeMaxValidatorDirective
|
|
24
|
+
DatetimeMaxValidatorDirective,
|
|
25
|
+
DateTimePickerRendererDirective], imports: [AngularCommonModule,
|
|
24
26
|
CommonDynamicModule,
|
|
25
27
|
DateTimePickerModule], exports: [DateTimeSelectorComponent,
|
|
26
28
|
DateTimeSelectorControlValueAccessor,
|
|
27
29
|
DatetimeValidatorDirective,
|
|
28
30
|
DatetimeMinValidatorDirective,
|
|
29
|
-
DatetimeMaxValidatorDirective
|
|
31
|
+
DatetimeMaxValidatorDirective,
|
|
32
|
+
DateTimePickerRendererDirective] });
|
|
30
33
|
DateTimeSelectorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.3", ngImport: i0, type: DateTimeSelectorModule, imports: [[
|
|
31
34
|
AngularCommonModule,
|
|
32
35
|
CommonDynamicModule,
|
|
@@ -46,14 +49,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.3", ngImpor
|
|
|
46
49
|
DateTimeSelectorControlValueAccessor,
|
|
47
50
|
DatetimeValidatorDirective,
|
|
48
51
|
DatetimeMinValidatorDirective,
|
|
49
|
-
DatetimeMaxValidatorDirective
|
|
52
|
+
DatetimeMaxValidatorDirective,
|
|
53
|
+
DateTimePickerRendererDirective,
|
|
50
54
|
],
|
|
51
55
|
exports: [
|
|
52
56
|
DateTimeSelectorComponent,
|
|
53
57
|
DateTimeSelectorControlValueAccessor,
|
|
54
58
|
DatetimeValidatorDirective,
|
|
55
59
|
DatetimeMinValidatorDirective,
|
|
56
|
-
DatetimeMaxValidatorDirective
|
|
60
|
+
DatetimeMaxValidatorDirective,
|
|
61
|
+
DateTimePickerRendererDirective,
|
|
57
62
|
]
|
|
58
63
|
}]
|
|
59
64
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selector.module.js","sourceRoot":"","sources":["../../../../src/selector/modules/selector.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,IAAI,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAElD,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,yBAAyB,EAAC,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAC,8BAA8B,EAAC,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAC,oCAAoC,EAAC,MAAM,mFAAmF,CAAC;AACvI,OAAO,EAAC,0BAA0B,EAAC,MAAM,6DAA6D,CAAC;AACvG,OAAO,EAAC,6BAA6B,EAAC,MAAM,mEAAmE,CAAC;AAChH,OAAO,EAAC,6BAA6B,EAAC,MAAM,mEAAmE,CAAC;;
|
|
1
|
+
{"version":3,"file":"selector.module.js","sourceRoot":"","sources":["../../../../src/selector/modules/selector.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAC;AACvC,OAAO,EAAC,YAAY,IAAI,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAElD,OAAO,EAAC,oBAAoB,EAAC,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAC,yBAAyB,EAAC,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAC,8BAA8B,EAAC,MAAM,qDAAqD,CAAC;AACnG,OAAO,EAAC,oCAAoC,EAAC,MAAM,mFAAmF,CAAC;AACvI,OAAO,EAAC,0BAA0B,EAAC,MAAM,6DAA6D,CAAC;AACvG,OAAO,EAAC,6BAA6B,EAAC,MAAM,mEAAmE,CAAC;AAChH,OAAO,EAAC,6BAA6B,EAAC,MAAM,mEAAmE,CAAC;AAChH,OAAO,EAAC,+BAA+B,EAAC,MAAM,uEAAuE,CAAC;;AAEtH;;GAEG;AA6BH,MAAM,OAAO,sBAAsB;;mHAAtB,sBAAsB;oHAAtB,sBAAsB,iBAlB3B,yBAAyB;QACzB,8BAA8B;QAC9B,oCAAoC;QACpC,0BAA0B;QAC1B,6BAA6B;QAC7B,6BAA6B;QAC7B,+BAA+B,aAZ/B,mBAAmB;QACnB,mBAAmB;QACnB,oBAAoB,aAcpB,yBAAyB;QACzB,oCAAoC;QACpC,0BAA0B;QAC1B,6BAA6B;QAC7B,6BAA6B;QAC7B,+BAA+B;oHAG1B,sBAAsB,YAzB/B;YACI,mBAAmB;YACnB,mBAAmB;YACnB,oBAAoB;SACvB;2FAqBQ,sBAAsB;kBA5BlC,QAAQ;mBACT;oBACI,OAAO,EACP;wBACI,mBAAmB;wBACnB,mBAAmB;wBACnB,oBAAoB;qBACvB;oBACD,YAAY,EACZ;wBACI,yBAAyB;wBACzB,8BAA8B;wBAC9B,oCAAoC;wBACpC,0BAA0B;wBAC1B,6BAA6B;wBAC7B,6BAA6B;wBAC7B,+BAA+B;qBAClC;oBACD,OAAO,EACP;wBACI,yBAAyB;wBACzB,oCAAoC;wBACpC,0BAA0B;wBAC1B,6BAA6B;wBAC7B,6BAA6B;wBAC7B,+BAA+B;qBAClC;iBACJ","sourcesContent":["import {NgModule} from '@angular/core';\nimport {CommonModule as AngularCommonModule} from '@angular/common';\nimport {CommonDynamicModule} from '@anglr/common';\n\nimport {DateTimePickerModule} from '../../picker/modules/picker.module';\nimport {DateTimeSelectorComponent} from '../components/selector/selector.component';\nimport {InputDateTimeSelectorComponent} from '../components/inputDateTime/inputDateTime.component';\nimport {DateTimeSelectorControlValueAccessor} from '../directives/selectorControlValueAccessor/selectorControlValueAccessor.directive';\nimport {DatetimeValidatorDirective} from '../directives/datetimeValidator/datetimeValidator.directive';\nimport {DatetimeMinValidatorDirective} from '../directives/datetimeMinValidator/datetimeMinValidator.directive';\nimport {DatetimeMaxValidatorDirective} from '../directives/datetimeMaxValidator/datetimeMaxValidator.directive';\nimport {DateTimePickerRendererDirective} from '../directives/dateTimePickerRenderer/dateTimePickerRenderer.directive';\n\n/**\n * Angular module for date time selector components\n */\n@NgModule(\n{\n imports:\n [\n AngularCommonModule,\n CommonDynamicModule,\n DateTimePickerModule,\n ],\n declarations:\n [\n DateTimeSelectorComponent,\n InputDateTimeSelectorComponent,\n DateTimeSelectorControlValueAccessor,\n DatetimeValidatorDirective,\n DatetimeMinValidatorDirective,\n DatetimeMaxValidatorDirective,\n DateTimePickerRendererDirective,\n ],\n exports:\n [\n DateTimeSelectorComponent,\n DateTimeSelectorControlValueAccessor,\n DatetimeValidatorDirective,\n DatetimeMinValidatorDirective,\n DatetimeMaxValidatorDirective,\n DateTimePickerRendererDirective,\n ]\n})\nexport class DateTimeSelectorModule\n{\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateApi.interface.js","sourceRoot":"","sources":["../../../src/services/dateApi.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Date can be represented as formatted string, timestamp or javascript Date object\n */\nexport type DateValue = Date|string|number;\n\n/**\n * Instance of object wrapping TDate, allowing manipulation with it\n */\nexport interface DateApiObject<TDate = any>\n{\n /**\n * Original value that is not changed unless 'updateOriginal' is called\n */\n readonly originalValue: TDate;\n\n /**\n * Instance of date\n */\n readonly value: TDate;\n\n /**\n * Gets indication whether provided instance of date is valid\n */\n isValid(): boolean;\n\n /**\n * Gets indication whether provided instance of date is weekend day\n */\n isWeekend(): boolean;\n\n /**\n * Formats date value\n * @param format - Format token used for creating formatted string\n */\n format(format: string): string;\n\n /**\n * Updates value to start date and time of current decade\n * @returns Itself for fluent API\n */\n startOfDecade(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current decade\n * @returns Itself for fluent API\n */\n endOfDecade(): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current year\n * @returns Itself for fluent API\n */\n startOfYear(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current year\n * @returns Itself for fluent API\n */\n endOfYear(): DateApiObject<TDate>;\n\n /**\n * Add years, if count not specified adds 1 year\n * @param count - Number of years count\n * @returns Itself for fluent API\n */\n addYears(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract years, if count not specified subtract 1 year\n * @param count - Number of years count\n * @returns Itself for fluent API\n */\n subtractYears(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current month\n * @returns Itself for fluent API\n */\n startOfMonth(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current month\n * @returns Itself for fluent API\n */\n endOfMonth(): DateApiObject<TDate>;\n\n /**\n * Add months, if count not specified adds 1 month\n * @param count - Number of months count\n * @returns Itself for fluent API\n */\n addMonths(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract months, if count not specified subtract 1 month\n * @param count - Number of months count\n * @returns Itself for fluent API\n */\n subtractMonths(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current week\n * @returns Itself for fluent API\n */\n startOfWeek(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current week\n * @returns Itself for fluent API\n */\n endOfWeek(): DateApiObject<TDate>;\n\n /**\n * Add weeks, if count not specified adds 1 week\n * @param count - Number of weeks count\n * @returns Itself for fluent API\n */\n addWeeks(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract weeks, if count not specified subtract 1 week\n * @param count - Number of weeks count\n * @returns Itself for fluent API\n */\n subtractWeeks(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current day\n * @returns Itself for fluent API\n */\n startOfDay(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current day\n * @returns Itself for fluent API\n */\n endOfDay(): DateApiObject<TDate>;\n\n /**\n * Add days, if count not specified adds 1 day\n * @param count - Number of days count\n * @returns Itself for fluent API\n */\n addDays(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract days, if count not specified subtract 1 day\n * @param count - Number of days count\n * @returns Itself for fluent API\n */\n subtractDays(count?: number): DateApiObject<TDate>;\n\n /**\n * Gets number of days in month\n */\n daysInMonth(): number;\n\n /**\n * Gets year\n */\n year(): number;\n /**\n * Sets year\n * @param year - Year to be set\n */\n year(year: number): DateApiObject<TDate>;\n /**\n * Gets or sets year\n * @param year - If specified, sets year\n */\n year(year?: number): DateApiObject<TDate>|number;\n \n /**\n * Gets month\n */\n month(): number;\n /**\n * Sets month\n * @param month - Month to be set\n */\n month(month: number): DateApiObject<TDate>;\n /**\n * Gets or sets month\n * @param month - If specified, sets month\n */\n month(month?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets day of month one based\n */\n dayOfMonth(): number;\n /**\n * Sets day of month one based\n * @param day - Day of month to be set\n */\n dayOfMonth(day: number): DateApiObject<TDate>;\n /**\n * Gets or sets day of month one based\n * @param day - If specified, sets day of month\n */\n dayOfMonth(day?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets day of week zero based, first is monday\n */\n dayOfWeek(): number;\n /**\n * Sets day of week zero based, first is monday\n * @param day - Day of week to be set\n */\n dayOfWeek(day: number): DateApiObject<TDate>;\n /**\n * Gets or sets day of week zero based, first is monday\n * @param day - If specified, sets day of week\n */\n dayOfWeek(day?: number): number|DateApiObject<TDate>;\n\n /**\n * Gets indication whether current value is before 'date'\n * @param date - Date which is this date compared to\n */\n isBefore(date: TDate): boolean;\n\n /**\n * Gets indication whether current value is after 'date'\n * @param date - Date which is this date compared to\n */\n isAfter(date: TDate): boolean;\n\n /**\n * Gets number of days between this and provided date\n * @param date - Date which is used for computation of diff against\n */\n diffDays(date: TDate): number;\n\n /**\n * Compares whether this date is same week as provided date\n * @param date - Date which is used for comparison of same week\n */\n isSameWeek(date: TDate): boolean;\n\n /**\n * Compares whether this date is same decade as provided date\n * @param date - Date which is used for comparison of same decade\n */\n isSameDecade(date: TDate): boolean;\n\n /**\n * Compares whether this date is same year as provided date\n * @param date - Date which is used for comparison of same year\n */\n isSameYear(date: TDate): boolean;\n\n /**\n * Compares whether this date is same month as provided date\n * @param date - Date which is used for comparison of same month\n */\n isSameMonth(date: TDate): boolean;\n\n /**\n * Compares whether this date is same day as provided date\n * @param date - Date which is used for comparison of same day\n */\n isSameDay(date: TDate): boolean;\n\n /**\n * Creates clone of this instance, value and originalValue have same value and are cloned from value\n */\n clone(): DateApiObject<TDate>;\n\n /**\n * Creates clone of this instance, value and originalValue have same value and are cloned from originalValue\n */\n cloneOriginal(): DateApiObject<TDate>;\n\n /**\n * Updates originalValue, if value is not provided originalValue is set to value\n * @param value - Value to be set as original, or null (value will be used as value)\n * @returns Itself for fluent API\n */\n updateOriginal(value?: TDate): DateApiObject<TDate>;\n\n /**\n * Changes value to same value as originalValue\n * @returns Itself for fluent API\n */\n resetOriginal(): DateApiObject<TDate>;\n}\n\n/**\n * Date api abstraction, used for obtaining DateApi wrapper object\n */\nexport interface DateApi<TDate = any>\n{\n /**\n * Gets wrapping object used for manipulation\n * @param value - Value to be converted (parsed) and used for manipulation\n * @param format - Format string used for parsing string value\n */\n getValue(value: DateValue|TDate, format?: string): DateApiObject<TDate>;\n\n /**\n * Gets wrapping object used for manipulation instantiated to current date and time\n */\n now(): DateApiObject<TDate>;\n\n /**\n * Gets format string using pseudo format\n * @param pseudoFormat - Pseudo format token, used for obtaining 'date' or 'time' format string\n */\n getFormat(pseudoFormat: string): string;\n\n /**\n * Gets information \n */\n weekStartsOnMonday(): boolean;\n\n /**\n * Gets array of weekday names in short format, order of days is dependent on locale\n */\n weekdaysShort(): string[];\n}"]}
|
|
1
|
+
{"version":3,"file":"dateApi.interface.js","sourceRoot":"","sources":["../../../src/services/dateApi.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Date can be represented as formatted string, timestamp or javascript Date object\n */\nexport type DateValue = Date|string|number;\n\n/**\n * Instance of object wrapping TDate, allowing manipulation with it\n */\nexport interface DateApiObject<TDate = any>\n{\n /**\n * Original value that is not changed unless 'updateOriginal' is called\n */\n readonly originalValue: TDate;\n\n /**\n * Instance of date\n */\n readonly value: TDate;\n\n /**\n * Gets indication whether provided instance of date is valid\n */\n isValid(): boolean;\n\n /**\n * Gets indication whether provided instance of date is weekend day\n */\n isWeekend(): boolean;\n\n /**\n * Formats date value\n * @param format - Format token used for creating formatted string\n */\n format(format: string): string;\n\n /**\n * Updates value to start date and time of current decade\n * @returns Itself for fluent API\n */\n startOfDecade(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current decade\n * @returns Itself for fluent API\n */\n endOfDecade(): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current year\n * @returns Itself for fluent API\n */\n startOfYear(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current year\n * @returns Itself for fluent API\n */\n endOfYear(): DateApiObject<TDate>;\n\n /**\n * Add years, if count not specified adds 1 year\n * @param count - Number of years count\n * @returns Itself for fluent API\n */\n addYears(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract years, if count not specified subtract 1 year\n * @param count - Number of years count\n * @returns Itself for fluent API\n */\n subtractYears(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current month\n * @returns Itself for fluent API\n */\n startOfMonth(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current month\n * @returns Itself for fluent API\n */\n endOfMonth(): DateApiObject<TDate>;\n\n /**\n * Add months, if count not specified adds 1 month\n * @param count - Number of months count\n * @returns Itself for fluent API\n */\n addMonths(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract months, if count not specified subtract 1 month\n * @param count - Number of months count\n * @returns Itself for fluent API\n */\n subtractMonths(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current week\n * @returns Itself for fluent API\n */\n startOfWeek(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current week\n * @returns Itself for fluent API\n */\n endOfWeek(): DateApiObject<TDate>;\n\n /**\n * Add weeks, if count not specified adds 1 week\n * @param count - Number of weeks count\n * @returns Itself for fluent API\n */\n addWeeks(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract weeks, if count not specified subtract 1 week\n * @param count - Number of weeks count\n * @returns Itself for fluent API\n */\n subtractWeeks(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current day\n * @returns Itself for fluent API\n */\n startOfDay(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current day\n * @returns Itself for fluent API\n */\n endOfDay(): DateApiObject<TDate>;\n\n /**\n * Add days, if count not specified adds 1 day\n * @param count - Number of days count\n * @returns Itself for fluent API\n */\n addDays(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract days, if count not specified subtract 1 day\n * @param count - Number of days count\n * @returns Itself for fluent API\n */\n subtractDays(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current hour\n * @returns Itself for fluent API\n */\n startOfHour(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current hour\n * @returns Itself for fluent API\n */\n endOfHour(): DateApiObject<TDate>;\n\n /**\n * Add hours, if count not specified adds 1 hour\n * @param count - Number of hours count\n * @returns Itself for fluent API\n */\n addHours(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract hours, if count not specified subtract 1 hour\n * @param count - Number of hours count\n * @returns Itself for fluent API\n */\n subtractHours(count?: number): DateApiObject<TDate>;\n\n /**\n * Updates value to start date and time of current minute\n * @returns Itself for fluent API\n */\n startOfMinute(): DateApiObject<TDate>;\n\n /**\n * Updates value to end date and time of current minute\n * @returns Itself for fluent API\n */\n endOfMinute(): DateApiObject<TDate>;\n\n /**\n * Add minutes, if count not specified adds 1 minute\n * @param count - Number of minutes count\n * @returns Itself for fluent API\n */\n addMinutes(count?: number): DateApiObject<TDate>;\n\n /**\n * Subtract minutes, if count not specified subtract 1 minute\n * @param count - Number of minutes count\n * @returns Itself for fluent API\n */\n subtractMinutes(count?: number): DateApiObject<TDate>;\n\n /**\n * Gets number of days in month\n */\n daysInMonth(): number;\n\n /**\n * Gets year\n */\n year(): number;\n /**\n * Sets year\n * @param year - Year to be set\n */\n year(year: number): DateApiObject<TDate>;\n /**\n * Gets or sets year\n * @param year - If specified, sets year\n */\n year(year?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets month\n */\n month(): number;\n /**\n * Sets month\n * @param month - Month to be set\n */\n month(month: number): DateApiObject<TDate>;\n /**\n * Gets or sets month\n * @param month - If specified, sets month\n */\n month(month?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets day of month one based\n */\n dayOfMonth(): number;\n /**\n * Sets day of month one based\n * @param day - Day of month to be set\n */\n dayOfMonth(day: number): DateApiObject<TDate>;\n /**\n * Gets or sets day of month one based\n * @param day - If specified, sets day of month\n */\n dayOfMonth(day?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets day of week zero based, first is monday\n */\n dayOfWeek(): number;\n /**\n * Sets day of week zero based, first is monday\n * @param day - Day of week to be set\n */\n dayOfWeek(day: number): DateApiObject<TDate>;\n /**\n * Gets or sets day of week zero based, first is monday\n * @param day - If specified, sets day of week\n */\n dayOfWeek(day?: number): number|DateApiObject<TDate>;\n\n /**\n * Gets hours zero based\n */\n hour(): number;\n /**\n * Sets hours zero\n * @param hour - hour to be set\n */\n hour(hour: number): DateApiObject<TDate>;\n /**\n * Gets or sets hours zero\n * @param hour - If specified, sets hour\n */\n hour(hour?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets minutes zero based\n */\n minute(): number;\n /**\n * Sets minutes zero based\n * @param minute - minutes to be set\n */\n minute(minute: number): DateApiObject<TDate>;\n /**\n * Gets or sets minutes zero based\n * @param minute - If specified, sets minutes\n */\n minute(minute?: number): DateApiObject<TDate>|number;\n\n /**\n * Gets indication whether current value is before 'date'\n * @param date - Date which is this date compared to\n */\n isBefore(date: TDate): boolean;\n\n /**\n * Gets indication whether current value is after 'date'\n * @param date - Date which is this date compared to\n */\n isAfter(date: TDate): boolean;\n\n /**\n * Gets number of days between this and provided date\n * @param date - Date which is used for computation of diff against\n */\n diffDays(date: TDate): number;\n\n /**\n * Compares whether this date is same week as provided date\n * @param date - Date which is used for comparison of same week\n */\n isSameWeek(date: TDate): boolean;\n\n /**\n * Compares whether this date is same decade as provided date\n * @param date - Date which is used for comparison of same decade\n */\n isSameDecade(date: TDate): boolean;\n\n /**\n * Compares whether this date is same year as provided date\n * @param date - Date which is used for comparison of same year\n */\n isSameYear(date: TDate): boolean;\n\n /**\n * Compares whether this date is same month as provided date\n * @param date - Date which is used for comparison of same month\n */\n isSameMonth(date: TDate): boolean;\n\n /**\n * Compares whether this date is same day as provided date\n * @param date - Date which is used for comparison of same day\n */\n isSameDay(date: TDate): boolean;\n\n /**\n * Creates clone of this instance, value and originalValue have same value and are cloned from value\n */\n clone(): DateApiObject<TDate>;\n\n /**\n * Creates clone of this instance, value and originalValue have same value and are cloned from originalValue\n */\n cloneOriginal(): DateApiObject<TDate>;\n\n /**\n * Updates originalValue, if value is not provided originalValue is set to value\n * @param value - Value to be set as original, or null (value will be used as value)\n * @returns Itself for fluent API\n */\n updateOriginal(value?: TDate): DateApiObject<TDate>;\n\n /**\n * Changes value to same value as originalValue\n * @returns Itself for fluent API\n */\n resetOriginal(): DateApiObject<TDate>;\n}\n\n/**\n * Date api abstraction, used for obtaining DateApi wrapper object\n */\nexport interface DateApi<TDate = any>\n{\n /**\n * Gets wrapping object used for manipulation\n * @param value - Value to be converted (parsed) and used for manipulation\n * @param format - Format string used for parsing string value\n */\n getValue(value: DateValue|TDate, format?: string): DateApiObject<TDate>;\n\n /**\n * Gets wrapping object used for manipulation instantiated to current date and time\n */\n now(): DateApiObject<TDate>;\n\n /**\n * Gets format string using pseudo format\n * @param pseudoFormat - Pseudo format token, used for obtaining 'date' or 'time' format string\n */\n getFormat(pseudoFormat: string): string;\n\n /**\n * Gets information\n */\n weekStartsOnMonday(): boolean;\n\n /**\n * Gets array of weekday names in short format, order of days is dependent on locale\n */\n weekdaysShort(): string[];\n}"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
+
import { isBlank } from '@jscrpt/common';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
/**
|
|
4
5
|
* Service used for parsing date
|
|
@@ -48,6 +49,9 @@ export class DefaultDatePositionParser {
|
|
|
48
49
|
* @param cursorPosition - Current cursor position
|
|
49
50
|
*/
|
|
50
51
|
next(date, cursorPosition) {
|
|
52
|
+
if (isBlank(date)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
51
55
|
//non strict format
|
|
52
56
|
if (this._hasSeparator) {
|
|
53
57
|
let useNext = false;
|
|
@@ -85,6 +89,9 @@ export class DefaultDatePositionParser {
|
|
|
85
89
|
* @param cursorPosition - Current cursor position
|
|
86
90
|
*/
|
|
87
91
|
previous(date, cursorPosition) {
|
|
92
|
+
if (isBlank(date)) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
88
95
|
//non strict format
|
|
89
96
|
if (this._hasSeparator) {
|
|
90
97
|
let useNext = false;
|
|
@@ -122,6 +129,13 @@ export class DefaultDatePositionParser {
|
|
|
122
129
|
* @param cursorPosition - Current cursor position
|
|
123
130
|
*/
|
|
124
131
|
parse(date, cursorPosition) {
|
|
132
|
+
if (isBlank(date)) {
|
|
133
|
+
return {
|
|
134
|
+
part: '',
|
|
135
|
+
positionFrom: 0,
|
|
136
|
+
positionTo: 0
|
|
137
|
+
};
|
|
138
|
+
}
|
|
125
139
|
//non strict format
|
|
126
140
|
if (this._hasSeparator) {
|
|
127
141
|
//fix cursor position if is clicked on separator
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datePositionParser.service.js","sourceRoot":"","sources":["../../../src/services/datePositionParser.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable} from '@angular/core';\n\nimport {DatePositionParser, DatePositionParserResult} from './datePositionParser.interface';\n\n/**\n * Service used for parsing date\n */\n@Injectable({providedIn: 'root'})\nexport class DatePositionParserService\n{\n //######################### public methods #########################\n\n /**\n * Creates parser instance for specified format\n * @param format - Format to be used for parsing date string\n */\n public createParser(format: string): DatePositionParser\n {\n return new DefaultDatePositionParser(format);\n }\n}\n\n/**\n * Default implementation of DatePositionParser\n */\nexport class DefaultDatePositionParser implements DatePositionParser\n{\n //######################### protected fields #########################\n\n /**\n * Indication whether format contains separators\n */\n protected _hasSeparator: boolean = false;\n\n /**\n * Array of date parts of parsed date format\n */\n protected _datePartsIndexes: string[] = [];\n\n /**\n * Object storing indexes for strict date parts of parsed date format\n */\n protected _strictDatePartsIndexes: {[index: number]: {part: string, length: number}} = {};\n\n //######################### constructor #########################\n constructor(protected _format: string)\n {\n this._initialize();\n }\n\n //######################### public methods - implementation of DatePositionParser #########################\n\n /**\n * Parse date as string and returns information about position and selected part of date, while moving it to next part, if it was last part returns null\n * @param date - String date to be parsed\n * @param cursorPosition - Current cursor position\n */\n public next(date: string, cursorPosition: number): null|DatePositionParserResult\n {\n //non strict format\n if(this._hasSeparator)\n {\n let useNext = false;\n\n while(true)\n {\n if(cursorPosition == date.length)\n {\n return null;\n }\n\n if(useNext && !isNaN(+date[cursorPosition]))\n {\n return this.parse(date, cursorPosition);\n }\n\n if(isNaN(+date[cursorPosition]))\n {\n useNext = true;\n }\n\n cursorPosition++;\n }\n }\n //strict format\n else\n {\n const indexes = Object.keys(this._strictDatePartsIndexes).map(itm => +itm);\n\n for(const index of indexes)\n {\n if(cursorPosition < index)\n {\n return {\n part: this._strictDatePartsIndexes[index].part,\n positionFrom: index,\n positionTo: index + this._strictDatePartsIndexes[index].length\n };\n }\n }\n }\n\n return null;\n }\n\n /**\n * Parse date as string and returns information about position and selected part of date, while moving it to previous part, if it was first part returns null\n * @param date - String date to be parsed\n * @param cursorPosition - Current cursor position\n */\n public previous(date: string, cursorPosition: number): null|DatePositionParserResult\n {\n //non strict format\n if(this._hasSeparator)\n {\n let useNext = false;\n\n while(true)\n {\n if(cursorPosition < 0)\n {\n return null;\n }\n\n if(useNext && !isNaN(+date[cursorPosition]))\n {\n return this.parse(date, cursorPosition);\n }\n\n if(isNaN(+date[cursorPosition]))\n {\n useNext = true;\n }\n\n cursorPosition--;\n }\n }\n //strict format\n else\n {\n const indexes = Object.keys(this._strictDatePartsIndexes).reverse().map(itm => +itm);\n\n for(const index of indexes)\n {\n if(cursorPosition > index)\n {\n return {\n part: this._strictDatePartsIndexes[index].part,\n positionFrom: index,\n positionTo: index + this._strictDatePartsIndexes[index].length\n };\n }\n }\n }\n\n return null;\n }\n\n /**\n * Parse date as string and returns information about positions and selected part of date\n * @param date - String date to be parsed\n * @param cursorPosition - Current cursor position\n */\n public parse(date: string, cursorPosition: number): DatePositionParserResult\n {\n //non strict format\n if(this._hasSeparator)\n {\n //fix cursor position if is clicked on separator\n if(cursorPosition != date.length &&\n /[^0-9ɵ]/.test(date[cursorPosition]) &&\n /[^0-9ɵ]/.test(date[cursorPosition - 1]))\n {\n let breakCycle = false;\n cursorPosition++;\n\n while(/[^0-9ɵ]/.test(date[cursorPosition]))\n {\n if(cursorPosition >= date.length)\n {\n if(breakCycle)\n {\n return {\n part: '',\n positionFrom: 0,\n positionTo: 0\n };\n }\n\n breakCycle = true;\n cursorPosition = 0;\n }\n\n cursorPosition++;\n }\n }\n\n const updateDate = [date.substr(0, cursorPosition), 'ɵ', date.substr(cursorPosition)].join('');\n const indexed = updateDate.replace(/[^0-9ɵ]/g, ' ').split(' ');\n let partIndex = 0;\n let startPosition = 0;\n let selectionLength = 0;\n\n for(const itm of indexed)\n {\n //this segment contains cursor\n if(itm.indexOf('ɵ') >= 0)\n {\n selectionLength = itm.length - 1;\n\n break;\n }\n\n startPosition++;\n\n //separator\n if(!itm.length)\n {\n continue;\n }\n\n partIndex++;\n startPosition += itm.length;\n }\n\n return {\n part: this._datePartsIndexes[partIndex],\n positionFrom: startPosition,\n positionTo: startPosition + selectionLength\n };\n }\n //strict format\n else\n {\n const indexes = Object.keys(this._strictDatePartsIndexes).reverse().map(itm => +itm);\n\n for(const index of indexes)\n {\n if(cursorPosition >= index)\n {\n return {\n part: this._strictDatePartsIndexes[index].part,\n positionFrom: index,\n positionTo: index + this._strictDatePartsIndexes[index].length\n };\n }\n }\n }\n\n return {\n part: '',\n positionFrom: 0,\n positionTo: 0\n };\n }\n\n /**\n * Initialize parser, process format\n */\n protected _initialize()\n {\n this._hasSeparator = /[^yqmwdhs]/i.test(this._format);\n\n //non strict format\n if(this._hasSeparator)\n {\n this._datePartsIndexes = this._format.replace(/[^yqmwdhs]+/gi, ' ')\n .split(' ')\n .filter(itm => !!itm)\n .map(itm => itm[0]);\n }\n //strict format\n else\n {\n let lastPart: string|null = null;\n let lastIndex: number = 0;\n\n for(let x = 0; x < this._format.length; x++)\n {\n //next part\n if(this._format[x] != lastPart)\n {\n if(x > 0)\n {\n this._strictDatePartsIndexes[lastIndex].length = x - lastIndex;\n }\n\n lastIndex = x;\n lastPart = this._format[x];\n\n this._strictDatePartsIndexes[x] =\n {\n length: 0,\n part: this._format[x]\n };\n }\n }\n\n this._strictDatePartsIndexes[lastIndex].length = this._format.length - lastIndex;\n }\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"datePositionParser.service.js","sourceRoot":"","sources":["../../../src/services/datePositionParser.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable} from '@angular/core';\nimport {isBlank} from '@jscrpt/common';\n\nimport {DatePositionParser, DatePositionParserResult} from './datePositionParser.interface';\n\n/**\n * Service used for parsing date\n */\n@Injectable({providedIn: 'root'})\nexport class DatePositionParserService\n{\n //######################### public methods #########################\n\n /**\n * Creates parser instance for specified format\n * @param format - Format to be used for parsing date string\n */\n public createParser(format: string): DatePositionParser\n {\n return new DefaultDatePositionParser(format);\n }\n}\n\n/**\n * Default implementation of DatePositionParser\n */\nexport class DefaultDatePositionParser implements DatePositionParser\n{\n //######################### protected fields #########################\n\n /**\n * Indication whether format contains separators\n */\n protected _hasSeparator: boolean = false;\n\n /**\n * Array of date parts of parsed date format\n */\n protected _datePartsIndexes: string[] = [];\n\n /**\n * Object storing indexes for strict date parts of parsed date format\n */\n protected _strictDatePartsIndexes: {[index: number]: {part: string, length: number}} = {};\n\n //######################### constructor #########################\n constructor(protected _format: string)\n {\n this._initialize();\n }\n\n //######################### public methods - implementation of DatePositionParser #########################\n\n /**\n * Parse date as string and returns information about position and selected part of date, while moving it to next part, if it was last part returns null\n * @param date - String date to be parsed\n * @param cursorPosition - Current cursor position\n */\n public next(date: string|null|undefined, cursorPosition: number): null|DatePositionParserResult\n {\n if(isBlank(date))\n {\n return null;\n }\n\n //non strict format\n if(this._hasSeparator)\n {\n let useNext = false;\n\n while(true)\n {\n if(cursorPosition == date.length)\n {\n return null;\n }\n\n if(useNext && !isNaN(+date[cursorPosition]))\n {\n return this.parse(date, cursorPosition);\n }\n\n if(isNaN(+date[cursorPosition]))\n {\n useNext = true;\n }\n\n cursorPosition++;\n }\n }\n //strict format\n else\n {\n const indexes = Object.keys(this._strictDatePartsIndexes).map(itm => +itm);\n\n for(const index of indexes)\n {\n if(cursorPosition < index)\n {\n return {\n part: this._strictDatePartsIndexes[index].part,\n positionFrom: index,\n positionTo: index + this._strictDatePartsIndexes[index].length\n };\n }\n }\n }\n\n return null;\n }\n\n /**\n * Parse date as string and returns information about position and selected part of date, while moving it to previous part, if it was first part returns null\n * @param date - String date to be parsed\n * @param cursorPosition - Current cursor position\n */\n public previous(date: string|null|undefined, cursorPosition: number): null|DatePositionParserResult\n {\n if(isBlank(date))\n {\n return null;\n }\n\n //non strict format\n if(this._hasSeparator)\n {\n let useNext = false;\n\n while(true)\n {\n if(cursorPosition < 0)\n {\n return null;\n }\n\n if(useNext && !isNaN(+date[cursorPosition]))\n {\n return this.parse(date, cursorPosition);\n }\n\n if(isNaN(+date[cursorPosition]))\n {\n useNext = true;\n }\n\n cursorPosition--;\n }\n }\n //strict format\n else\n {\n const indexes = Object.keys(this._strictDatePartsIndexes).reverse().map(itm => +itm);\n\n for(const index of indexes)\n {\n if(cursorPosition > index)\n {\n return {\n part: this._strictDatePartsIndexes[index].part,\n positionFrom: index,\n positionTo: index + this._strictDatePartsIndexes[index].length\n };\n }\n }\n }\n\n return null;\n }\n\n /**\n * Parse date as string and returns information about positions and selected part of date\n * @param date - String date to be parsed\n * @param cursorPosition - Current cursor position\n */\n public parse(date: string|null|undefined, cursorPosition: number): DatePositionParserResult\n {\n if(isBlank(date))\n {\n return {\n part: '',\n positionFrom: 0,\n positionTo: 0\n };\n }\n\n //non strict format\n if(this._hasSeparator)\n {\n //fix cursor position if is clicked on separator\n if(cursorPosition != date.length &&\n /[^0-9ɵ]/.test(date[cursorPosition]) &&\n /[^0-9ɵ]/.test(date[cursorPosition - 1]))\n {\n let breakCycle = false;\n cursorPosition++;\n\n while(/[^0-9ɵ]/.test(date[cursorPosition]))\n {\n if(cursorPosition >= date.length)\n {\n if(breakCycle)\n {\n return {\n part: '',\n positionFrom: 0,\n positionTo: 0\n };\n }\n\n breakCycle = true;\n cursorPosition = 0;\n }\n\n cursorPosition++;\n }\n }\n\n const updateDate = [date.substr(0, cursorPosition), 'ɵ', date.substr(cursorPosition)].join('');\n const indexed = updateDate.replace(/[^0-9ɵ]/g, ' ').split(' ');\n let partIndex = 0;\n let startPosition = 0;\n let selectionLength = 0;\n\n for(const itm of indexed)\n {\n //this segment contains cursor\n if(itm.indexOf('ɵ') >= 0)\n {\n selectionLength = itm.length - 1;\n\n break;\n }\n\n startPosition++;\n\n //separator\n if(!itm.length)\n {\n continue;\n }\n\n partIndex++;\n startPosition += itm.length;\n }\n\n return {\n part: this._datePartsIndexes[partIndex],\n positionFrom: startPosition,\n positionTo: startPosition + selectionLength\n };\n }\n //strict format\n else\n {\n const indexes = Object.keys(this._strictDatePartsIndexes).reverse().map(itm => +itm);\n\n for(const index of indexes)\n {\n if(cursorPosition >= index)\n {\n return {\n part: this._strictDatePartsIndexes[index].part,\n positionFrom: index,\n positionTo: index + this._strictDatePartsIndexes[index].length\n };\n }\n }\n }\n\n return {\n part: '',\n positionFrom: 0,\n positionTo: 0\n };\n }\n\n /**\n * Initialize parser, process format\n */\n protected _initialize(): void\n {\n this._hasSeparator = /[^yqmwdhs]/i.test(this._format);\n\n //non strict format\n if(this._hasSeparator)\n {\n this._datePartsIndexes = this._format.replace(/[^yqmwdhs]+/gi, ' ')\n .split(' ')\n .filter(itm => !!itm)\n .map(itm => itm[0]);\n }\n //strict format\n else\n {\n let lastPart: string|null = null;\n let lastIndex: number = 0;\n\n for(let x = 0; x < this._format.length; x++)\n {\n //next part\n if(this._format[x] != lastPart)\n {\n if(x > 0)\n {\n this._strictDatePartsIndexes[lastIndex].length = x - lastIndex;\n }\n\n lastIndex = x;\n lastPart = this._format[x];\n\n this._strictDatePartsIndexes[x] =\n {\n length: 0,\n part: this._format[x]\n };\n }\n }\n\n this._strictDatePartsIndexes[lastIndex].length = this._format.length - lastIndex;\n }\n }\n}"]}
|
|
@@ -14,10 +14,18 @@ export class DateTimeRelativeParser {
|
|
|
14
14
|
/**
|
|
15
15
|
* Tries to parse relative value and returns parsed TDate, otherwise returns input value
|
|
16
16
|
* @param value - Value to be parsed
|
|
17
|
+
*
|
|
18
|
+
* @summary
|
|
19
|
+
* i - for minutes
|
|
20
|
+
* h - for hours
|
|
21
|
+
* d - for days
|
|
22
|
+
* w - for weeks
|
|
23
|
+
* m - for months
|
|
24
|
+
* y - for years
|
|
17
25
|
*/
|
|
18
26
|
parse(value) {
|
|
19
27
|
var _a;
|
|
20
|
-
const regex = /([+-])\s*(\d+)\s*([
|
|
28
|
+
const regex = /([+-])\s*(\d+)\s*([ihdwmy])/;
|
|
21
29
|
//relative date provided
|
|
22
30
|
if (isString(value) && regex.test(value)) {
|
|
23
31
|
const matches = regex.exec(value);
|
|
@@ -27,8 +35,14 @@ export class DateTimeRelativeParser {
|
|
|
27
35
|
this._dateApi = (_a = this._dateApi) !== null && _a !== void 0 ? _a : this._injector.get(DATE_API);
|
|
28
36
|
const now = this._dateApi.now();
|
|
29
37
|
switch (period) {
|
|
38
|
+
case 'i':
|
|
39
|
+
{
|
|
40
|
+
operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
30
43
|
case 'h':
|
|
31
44
|
{
|
|
45
|
+
operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();
|
|
32
46
|
break;
|
|
33
47
|
}
|
|
34
48
|
case 'd':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateTimeRelativeParser.service.js","sourceRoot":"","sources":["../../../src/services/dateTimeRelativeParser.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AACnD,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;;AAGxC;;GAEG;AAEH,MAAM,OAAO,sBAAsB;IAS/B,iEAAiE;IACjE,YAAsB,SAAmB;QAAnB,cAAS,GAAT,SAAS,CAAU;IAEzC,CAAC;IAED,oEAAoE;IAEpE
|
|
1
|
+
{"version":3,"file":"dateTimeRelativeParser.service.js","sourceRoot":"","sources":["../../../src/services/dateTimeRelativeParser.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {Injectable, Injector} from '@angular/core';\nimport {isString} from '@jscrpt/common';\n\nimport {DATE_API} from '../misc/tokens';\nimport {DateApi, DateValue} from './dateApi.interface';\n\n/**\n * Service used for parsing relative date time strings\n */\n@Injectable({providedIn: 'root'})\nexport class DateTimeRelativeParser<TDate = any>\n{\n //######################### protected fields #########################\n \n /**\n * Date api for handling\n */\n protected _dateApi?: DateApi<TDate>;\n\n //######################### constructor #########################\n constructor(protected _injector: Injector)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Tries to parse relative value and returns parsed TDate, otherwise returns input value\n * @param value - Value to be parsed\n * \n * @summary\n * i - for minutes\n * h - for hours\n * d - for days\n * w - for weeks\n * m - for months\n * y - for years\n */\n public parse(value: TDate|DateValue): TDate|DateValue\n {\n const regex = /([+-])\\s*(\\d+)\\s*([ihdwmy])/;\n\n //relative date provided\n if(isString(value) && regex.test(value))\n {\n const matches = regex.exec(value);\n const operation = matches![1];\n const amount = matches![2];\n const period = matches![3];\n this._dateApi = this._dateApi ?? this._injector.get(DATE_API);\n const now = this._dateApi.now();\n\n switch(period)\n {\n case 'i':\n {\n operation == '+' ? now.addMinutes(+amount).endOfMinute() : now.subtractMinutes(+amount).startOfMinute();\n\n break;\n }\n case 'h':\n {\n operation == '+' ? now.addHours(+amount).endOfHour() : now.subtractHours(+amount).startOfHour();\n\n break;\n }\n case 'd':\n {\n operation == '+' ? now.addDays(+amount).endOfDay() : now.subtractDays(+amount).startOfDay();\n\n break;\n }\n case 'w':\n {\n operation == '+' ? now.addWeeks(+amount).endOfDay() : now.subtractWeeks(+amount).startOfDay();\n\n break;\n }\n case 'm':\n {\n operation == '+' ? now.addMonths(+amount).endOfDay() : now.subtractMonths(+amount).startOfDay();\n\n break;\n }\n case 'y':\n {\n operation == '+' ? now.addYears(+amount).endOfDay() : now.subtractYears(+amount).startOfDay();\n\n break;\n }\n }\n\n value = now.value;\n }\n\n return value;\n }\n}"]}
|
|
@@ -19,11 +19,16 @@ export class DateValueProvider {
|
|
|
19
19
|
const val = this._dateApi.getValue(value, format);
|
|
20
20
|
const fullFormat = this._dateApi.getFormat(format);
|
|
21
21
|
let start = value;
|
|
22
|
-
let end;
|
|
23
|
-
//
|
|
24
|
-
if (fullFormat.indexOf('
|
|
25
|
-
start = val.
|
|
26
|
-
end = val.
|
|
22
|
+
let end = value;
|
|
23
|
+
//minute
|
|
24
|
+
if (fullFormat.indexOf('m') >= 0) {
|
|
25
|
+
start = val.startOfMinute().value;
|
|
26
|
+
end = val.endOfMinute().value;
|
|
27
|
+
}
|
|
28
|
+
//hour
|
|
29
|
+
else if (fullFormat.indexOf('H') >= 0) {
|
|
30
|
+
start = val.startOfHour().value;
|
|
31
|
+
end = val.endOfHour().value;
|
|
27
32
|
}
|
|
28
33
|
//week
|
|
29
34
|
else if (fullFormat.indexOf('w') >= 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateValueProvider.service.js","sourceRoot":"","sources":["../../../src/services/dateValueProvider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;;AAGxC;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAE1B,iEAAiE;IACjE,YAAwC,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAEhE,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,QAAQ,CAAC,KAAY,EAAE,MAAc;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,GAAU,KAAK,CAAC;QACzB,IAAI,GAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"dateValueProvider.service.js","sourceRoot":"","sources":["../../../src/services/dateValueProvider.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;;AAGxC;;GAEG;AAEH,MAAM,OAAO,iBAAiB;IAE1B,iEAAiE;IACjE,YAAwC,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;IAEhE,CAAC;IAED,oEAAoE;IAEpE;;;;OAIG;IACI,QAAQ,CAAC,KAAY,EAAE,MAAc;QAExC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,GAAU,KAAK,CAAC;QACzB,IAAI,GAAG,GAAU,KAAK,CAAC;QAEvB,QAAQ;QACR,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAC/B;YACI,KAAK,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;SACjC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QACD,OAAO;aACF,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpC;YACI,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC;YACjC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SAChC;QACD,MAAM;aACD,IAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EACpE;YACI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;YAChC,GAAG,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;SAC/B;QAED,OAAO;YACH,IAAI,EAAE,KAAK;YACX,EAAE,EAAE,GAAG;SACV,CAAC;IACN,CAAC;;8GAxDQ,iBAAiB,kBAGN,QAAQ;kHAHnB,iBAAiB,cADL,MAAM;2FAClB,iBAAiB;kBAD7B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;0BAIf,MAAM;2BAAC,QAAQ","sourcesContent":["import {Inject, Injectable} from '@angular/core';\n\nimport {DateTimeValue} from '../misc/datetime.interface';\nimport {DATE_API} from '../misc/tokens';\nimport {DateApi} from './dateApi.interface';\n\n/**\n * Class used for obtaining DateTimeValue for various formats\n */\n@Injectable({providedIn: 'root'})\nexport class DateValueProvider<TDate = any>\n{\n //######################### constructor #########################\n constructor(@Inject(DATE_API) protected _dateApi: DateApi<TDate>)\n {\n }\n\n //######################### public methods #########################\n\n /**\n * Gets DateTimeValue from single value based on format\n * @param value - Current value to be converted to ranged value\n * @param format - Format that is requested to be displayed, it tells what range should be created\n */\n public getValue(value: TDate, format: string): DateTimeValue<TDate>\n {\n const val = this._dateApi.getValue(value, format);\n const fullFormat = this._dateApi.getFormat(format);\n let start: TDate = value;\n let end: TDate = value;\n\n //minute\n if(fullFormat.indexOf('m') >= 0)\n {\n start = val.startOfMinute().value;\n end = val.endOfMinute().value;\n }\n //hour\n else if(fullFormat.indexOf('H') >= 0)\n {\n start = val.startOfHour().value;\n end = val.endOfHour().value;\n }\n //week\n else if(fullFormat.indexOf('w') >= 0)\n {\n start = val.startOfWeek().value;\n end = val.endOfWeek().value;\n }\n //month\n else if(fullFormat.indexOf('M') >= 0)\n {\n start = val.startOfMonth().value;\n end = val.endOfMonth().value;\n }\n //year\n else if(fullFormat.indexOf('Y') >= 0 || fullFormat.indexOf('y') >= 0)\n {\n start = val.startOfYear().value;\n end = val.endOfYear().value;\n }\n\n return {\n from: start,\n to: end\n };\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatProvider.interface.js","sourceRoot":"","sources":["../../../src/services/formatProvider.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Format provider used for obtaining
|
|
1
|
+
{"version":3,"file":"formatProvider.interface.js","sourceRoot":"","sources":["../../../src/services/formatProvider.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Format provider used for obtaining common used format 'tokens'\n */\nexport interface FormatProvider\n{\n /**\n * Format token for displaying date\n */\n readonly date: string;\n\n /**\n * Format token for displaying date and time\n */\n readonly dateTime: string;\n\n /**\n * Format token for displaying time\n */\n readonly time: string;\n\n /**\n * Format token for displaying full year\n */\n readonly year: string;\n\n /**\n * Format token for displaying month double digit number\n */\n readonly month: string;\n\n /**\n * Format token for displaying week double digit number\n */\n readonly week: string;\n\n /**\n * Format token for displaying day double digit number\n */\n readonly day: string;\n\n /**\n * Format token for displaying hour (24h format) double digit number\n */\n readonly hour: string;\n\n /**\n * Format token for displaying minute double digit number\n */\n readonly minute: string;\n\n /**\n * Format token for displaying second double digit number\n */\n readonly second: string;\n\n /**\n * Format token for displaying standalone day full name \n */\n readonly dayName: string;\n\n /**\n * Format token for displaying standalone day short name\n */\n readonly dayNameShort: string;\n\n /**\n * Format token for displaying standalone month full name\n */\n readonly monthName: string;\n\n /**\n * Format token for displaying standalone month short name\n */\n readonly monthNameShort: string;\n}"]}
|
|
@@ -13,7 +13,18 @@ export const DATEFNS_FORMAT_PROVIDER = {
|
|
|
13
13
|
return {
|
|
14
14
|
date: 'P',
|
|
15
15
|
dateTime: 'Pp',
|
|
16
|
-
time: 'p'
|
|
16
|
+
time: 'p',
|
|
17
|
+
year: 'yyyy',
|
|
18
|
+
month: 'MM',
|
|
19
|
+
week: 'ww',
|
|
20
|
+
day: 'dd',
|
|
21
|
+
hour: 'HH',
|
|
22
|
+
minute: 'mm',
|
|
23
|
+
second: 'ss',
|
|
24
|
+
dayName: 'cccc',
|
|
25
|
+
dayNameShort: 'cccccc',
|
|
26
|
+
monthName: 'LLLL',
|
|
27
|
+
monthNameShort: 'LLL'
|
|
17
28
|
};
|
|
18
29
|
}
|
|
19
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../date-fns/src/misc/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAiB,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAIhE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAkC,IAAI,cAAc,CAAgB,iBAAiB,CAAC,CAAC;AAEnH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GACpC;IACI,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,GAAG,EAAE;QAEb,OAAuB;YACnB,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../date-fns/src/misc/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAiB,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAIhE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAkC,IAAI,cAAc,CAAgB,iBAAiB,CAAC,CAAC;AAEnH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GACpC;IACI,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,GAAG,EAAE;QAEb,OAAuB;YACnB,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,IAAI;YACT,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,QAAQ;YACtB,SAAS,EAAE,MAAM;YACjB,cAAc,EAAE,KAAK;SACxB,CAAC;IACN,CAAC;CACJ,CAAC","sourcesContent":["import {FactoryProvider, InjectionToken} from '@angular/core';\nimport {FormatProvider, FORMAT_PROVIDER} from '@anglr/datetime';\n\nimport {DateFnsLocale} from '../services/dateFnsLocale.service';\n\n/**\n * Injection token used for obtaining Date fns locale service\n */\nexport const DATE_FNS_LOCALE: InjectionToken<DateFnsLocale> = new InjectionToken<DateFnsLocale>('DATE_FNS_LOCALE');\n\n/**\n * Injection token used for obtaining date-fns FormatProvider implementation\n */\nexport const DATEFNS_FORMAT_PROVIDER: FactoryProvider =\n{\n provide: FORMAT_PROVIDER,\n useFactory: () =>\n {\n return <FormatProvider>{\n date: 'P',\n dateTime: 'Pp',\n time: 'p',\n year: 'yyyy',\n month: 'MM',\n week: 'ww',\n day: 'dd',\n hour: 'HH',\n minute: 'mm',\n second: 'ss',\n dayName: 'cccc',\n dayNameShort: 'cccccc',\n monthName: 'LLLL',\n monthNameShort: 'LLL'\n };\n }\n};"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Inject, Injectable } from '@angular/core';
|
|
2
2
|
import { DateTimeRelativeParser } from '@anglr/datetime';
|
|
3
3
|
import { isBlank, isPresent, isString } from '@jscrpt/common';
|
|
4
|
-
import { toDate, getDate, setDate, isAfter, isBefore, differenceInCalendarDays, format, startOfMonth, endOfMonth, startOfWeek, endOfWeek, startOfDay, endOfDay, addMonths, addWeeks, addDays, subMonths, subWeeks, subDays, getDaysInMonth, isSameDay, isSameWeek, isSameMonth, isValid, parse, parseISO, addYears, subYears, startOfYear, endOfYear, isWeekend, setYear, getYear, isSameYear, startOfDecade, endOfDecade, setMonth, getMonth, setISODay, getISODay } from 'date-fns';
|
|
4
|
+
import { toDate, getDate, setDate, isAfter, isBefore, differenceInCalendarDays, format, startOfMonth, endOfMonth, startOfWeek, endOfWeek, startOfDay, endOfDay, addMonths, addWeeks, addDays, subMonths, subWeeks, subDays, getDaysInMonth, isSameDay, isSameWeek, isSameMonth, isValid, parse, parseISO, addYears, subYears, startOfYear, endOfYear, isWeekend, setYear, getYear, isSameYear, startOfDecade, endOfDecade, setMonth, getMonth, setISODay, getISODay, subHours, addHours, endOfHour, startOfHour, startOfMinute, endOfMinute, addMinutes, subMinutes, getHours, setHours, getMinutes, setMinutes } from 'date-fns';
|
|
5
5
|
import { DATE_FNS_LOCALE } from '../misc/tokens';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@anglr/datetime";
|
|
@@ -78,9 +78,9 @@ class DateFnsDateApiObject {
|
|
|
78
78
|
return this;
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
* Updates value to start date and time of current year
|
|
82
|
+
* @returns Itself for fluent API
|
|
83
|
+
*/
|
|
84
84
|
startOfYear() {
|
|
85
85
|
this._value = startOfYear(this._value);
|
|
86
86
|
return this;
|
|
@@ -213,6 +213,74 @@ class DateFnsDateApiObject {
|
|
|
213
213
|
this._value = subDays(this._value, count ?? 1);
|
|
214
214
|
return this;
|
|
215
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Updates value to start date and time of current hour
|
|
218
|
+
* @returns Itself for fluent API
|
|
219
|
+
*/
|
|
220
|
+
startOfHour() {
|
|
221
|
+
this._value = startOfHour(this._value);
|
|
222
|
+
return this;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Updates value to end date and time of current hour
|
|
226
|
+
* @returns Itself for fluent API
|
|
227
|
+
*/
|
|
228
|
+
endOfHour() {
|
|
229
|
+
this._value = endOfHour(this._value);
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Add hours, if count not specified adds 1 hour
|
|
234
|
+
* @param count - Number of hours count
|
|
235
|
+
* @returns Itself for fluent API
|
|
236
|
+
*/
|
|
237
|
+
addHours(count) {
|
|
238
|
+
this._value = addHours(this._value, count ?? 1);
|
|
239
|
+
return this;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Subtract hours, if count not specified subtract 1 hour
|
|
243
|
+
* @param count - Number of hours count
|
|
244
|
+
* @returns Itself for fluent API
|
|
245
|
+
*/
|
|
246
|
+
subtractHours(count) {
|
|
247
|
+
this._value = subHours(this._value, count ?? 1);
|
|
248
|
+
return this;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Updates value to start date and time of current minute
|
|
252
|
+
* @returns Itself for fluent API
|
|
253
|
+
*/
|
|
254
|
+
startOfMinute() {
|
|
255
|
+
this._value = startOfMinute(this._value);
|
|
256
|
+
return this;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Updates value to end date and time of current minute
|
|
260
|
+
* @returns Itself for fluent API
|
|
261
|
+
*/
|
|
262
|
+
endOfMinute() {
|
|
263
|
+
this._value = endOfMinute(this._value);
|
|
264
|
+
return this;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Add minutes, if count not specified adds 1 minute
|
|
268
|
+
* @param count - Number of minutes count
|
|
269
|
+
* @returns Itself for fluent API
|
|
270
|
+
*/
|
|
271
|
+
addMinutes(count) {
|
|
272
|
+
this._value = addMinutes(this._value, count ?? 1);
|
|
273
|
+
return this;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Subtract minutes, if count not specified subtract 1 minute
|
|
277
|
+
* @param count - Number of minutes count
|
|
278
|
+
* @returns Itself for fluent API
|
|
279
|
+
*/
|
|
280
|
+
subtractMinutes(count) {
|
|
281
|
+
this._value = subMinutes(this._value, count ?? 1);
|
|
282
|
+
return this;
|
|
283
|
+
}
|
|
216
284
|
/**
|
|
217
285
|
* Gets number of days in month
|
|
218
286
|
*/
|
|
@@ -263,6 +331,28 @@ class DateFnsDateApiObject {
|
|
|
263
331
|
}
|
|
264
332
|
return getISODay(this._value) - 1;
|
|
265
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* Gets or sets hours zero based
|
|
336
|
+
* @param hour - If specified, sets hour
|
|
337
|
+
*/
|
|
338
|
+
hour(hour) {
|
|
339
|
+
if (isPresent(hour)) {
|
|
340
|
+
this._value = setHours(this._value, hour);
|
|
341
|
+
return this;
|
|
342
|
+
}
|
|
343
|
+
return getHours(this._value);
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Gets or sets minutes zero based
|
|
347
|
+
* @param minute - If specified, sets minutes
|
|
348
|
+
*/
|
|
349
|
+
minute(minute) {
|
|
350
|
+
if (isPresent(minute)) {
|
|
351
|
+
this._value = setMinutes(this._value, minute);
|
|
352
|
+
return this;
|
|
353
|
+
}
|
|
354
|
+
return getMinutes(this._value);
|
|
355
|
+
}
|
|
266
356
|
/**
|
|
267
357
|
* Gets indication whether current value is before 'date'
|
|
268
358
|
* @param date - Date which is this date compared to
|
|
@@ -387,6 +477,9 @@ export class DateFnsDateApi {
|
|
|
387
477
|
*/
|
|
388
478
|
getFormat(pseudoFormat) {
|
|
389
479
|
if (/^p+$/i.test(pseudoFormat)) {
|
|
480
|
+
if (!this._localeSvc.locale.formatLong) {
|
|
481
|
+
throw new Error('Missing long formats for locale in DateApi');
|
|
482
|
+
}
|
|
390
483
|
const widths = {
|
|
391
484
|
1: 'short',
|
|
392
485
|
2: 'medium',
|
|
@@ -395,7 +488,8 @@ export class DateFnsDateApi {
|
|
|
395
488
|
};
|
|
396
489
|
//date time format
|
|
397
490
|
if (pseudoFormat.indexOf('Pp') >= 0 && pseudoFormat.length <= 8) {
|
|
398
|
-
|
|
491
|
+
const partLength = pseudoFormat.length / 2;
|
|
492
|
+
return `${this._localeSvc.locale.formatLong.date({ width: widths[partLength] })} ${this._localeSvc.locale.formatLong.time({ width: widths[partLength] })}`;
|
|
399
493
|
}
|
|
400
494
|
//date format
|
|
401
495
|
else if (pseudoFormat.indexOf('P') >= 0 && pseudoFormat.length <= 4) {
|