novo-elements 8.3.0 → 8.4.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/addons/ace-editor/AceEditor.d.ts +4 -2
- package/addons/code-editor/CodeEditor.d.ts +31 -0
- package/addons/code-editor/CodeEditor.module.d.ts +9 -0
- package/addons/code-editor/CodeEditor.scss +5 -0
- package/addons/code-editor/index.d.ts +2 -0
- package/addons/code-editor/novo-elements-addons-code-editor.d.ts +5 -0
- package/addons/code-editor/package.json +10 -0
- package/addons/index.d.ts +1 -0
- package/elements/aside/aside.component.scss +1 -1
- package/elements/calendar/Calendar.module.d.ts +2 -3
- package/elements/checkbox/CheckList.scss +1 -1
- package/elements/checkbox/Checkbox.scss +1 -1
- package/elements/common/overlay/Overlay.d.ts +1 -0
- package/elements/date-picker/DatePicker.module.d.ts +2 -2
- package/elements/date-picker/DatePickerInput.d.ts +8 -5
- package/elements/date-picker/MultiDateInput.d.ts +0 -1
- package/elements/date-time-picker/DateTimePicker.module.d.ts +2 -3
- package/elements/drag-drop/drag-drop-box.d.ts +45 -0
- package/elements/drag-drop/drag-drop.module.d.ts +7 -0
- package/elements/drag-drop/index.d.ts +2 -0
- package/elements/drag-drop/novo-elements-elements-drag-drop.d.ts +5 -0
- package/elements/drag-drop/package.json +10 -0
- package/elements/dropdown/Dropdown.d.ts +7 -1
- package/elements/field/formats/date-time-format.d.ts +2 -2
- package/elements/form/Control.d.ts +9 -6
- package/elements/form/ControlTemplates.d.ts +1 -1
- package/elements/form/Form.module.d.ts +6 -6
- package/elements/form/controls/code-editor/CodeEditorControl.d.ts +5 -0
- package/elements/form/controls/code-editor/index.d.ts +1 -0
- package/elements/form/controls/index.d.ts +2 -1
- package/elements/form/extras/FormExtras.module.d.ts +4 -4
- package/elements/form/extras/file/FileInput.d.ts +15 -16
- package/elements/form/extras/file/FileInput.scss +58 -30
- package/elements/index.d.ts +1 -0
- package/elements/query-builder/condition-builder/condition-builder.component.scss +1 -1
- package/elements/query-builder/condition-definitions/address-condition.definition.d.ts +1 -1
- package/elements/select-search/select-search.component.scss +1 -1
- package/elements/table/Table.module.d.ts +5 -6
- package/elements/time-picker/TimePicker.d.ts +2 -3
- package/elements/time-picker/TimePicker.module.d.ts +3 -4
- package/elements/time-picker/TimePickerInput.d.ts +0 -1
- package/esm2020/addons/ace-editor/AceEditor.mjs +8 -4
- package/esm2020/addons/ckeditor/CKEditor.mjs +8 -1
- package/esm2020/addons/code-editor/CodeEditor.mjs +129 -0
- package/esm2020/addons/code-editor/CodeEditor.module.mjs +19 -0
- package/esm2020/addons/code-editor/index.mjs +3 -0
- package/esm2020/addons/code-editor/novo-elements-addons-code-editor.mjs +5 -0
- package/esm2020/addons/index.mjs +2 -1
- package/esm2020/elements/breadcrumbs/breadcrumb-item/BreadcrumbItem.mjs +1 -1
- package/esm2020/elements/calendar/Calendar.module.mjs +5 -7
- package/esm2020/elements/calendar/calendar.component.mjs +3 -3
- package/esm2020/elements/calendar/month-select/month-select.component.mjs +3 -3
- package/esm2020/elements/calendar/month-view/month-view.component.mjs +3 -3
- package/esm2020/elements/calendar/year-select/year-select.component.mjs +3 -3
- package/esm2020/elements/common/overlay/Overlay.mjs +11 -5
- package/esm2020/elements/data-table/cell-headers/data-table-header-cell.component.mjs +1 -1
- package/esm2020/elements/data-table/data-table-clear-button.component.mjs +1 -1
- package/esm2020/elements/data-table/data-table.component.mjs +2 -2
- package/esm2020/elements/date-picker/DatePicker.module.mjs +6 -6
- package/esm2020/elements/date-picker/DatePickerInput.mjs +50 -29
- package/esm2020/elements/date-picker/DateRangeInput.mjs +10 -16
- package/esm2020/elements/date-picker/MultiDateInput.mjs +1 -17
- package/esm2020/elements/date-time-picker/DateTimePicker.module.mjs +4 -5
- package/esm2020/elements/drag-drop/drag-drop-box.mjs +224 -0
- package/esm2020/elements/drag-drop/drag-drop.module.mjs +16 -0
- package/esm2020/elements/drag-drop/index.mjs +3 -0
- package/esm2020/elements/drag-drop/novo-elements-elements-drag-drop.mjs +5 -0
- package/esm2020/elements/dropdown/Dropdown.mjs +29 -4
- package/esm2020/elements/field/formats/date-format.mjs +5 -5
- package/esm2020/elements/field/formats/date-range-format.mjs +5 -5
- package/esm2020/elements/field/formats/date-time-format.mjs +12 -12
- package/esm2020/elements/field/formats/time-format.mjs +6 -6
- package/esm2020/elements/form/Control.mjs +20 -8
- package/esm2020/elements/form/ControlTemplates.mjs +54 -27
- package/esm2020/elements/form/Form.module.mjs +12 -13
- package/esm2020/elements/form/NovoFormControl.mjs +1 -2
- package/esm2020/elements/form/controls/code-editor/CodeEditorControl.mjs +9 -0
- package/esm2020/elements/form/controls/code-editor/index.mjs +2 -0
- package/esm2020/elements/form/controls/index.mjs +3 -2
- package/esm2020/elements/form/controls/timezone/TimezoneControl.mjs +2 -2
- package/esm2020/elements/form/extras/FormExtras.module.mjs +8 -9
- package/esm2020/elements/form/extras/file/FileInput.mjs +38 -261
- package/esm2020/elements/index.mjs +2 -1
- package/esm2020/elements/query-builder/condition-definitions/address-condition.definition.mjs +2 -2
- package/esm2020/elements/query-builder/condition-group/condition-group.component.mjs +1 -1
- package/esm2020/elements/simple-table/cell-header.mjs +2 -2
- package/esm2020/elements/simple-table/cell.mjs +1 -1
- package/esm2020/elements/tabbed-group-picker/TabbedGroupPicker.mjs +1 -1
- package/esm2020/elements/table/Table.mjs +1 -1
- package/esm2020/elements/table/Table.module.mjs +1 -6
- package/esm2020/elements/table/extras/dropdown-cell/DropdownCell.mjs +1 -1
- package/esm2020/elements/time-picker/TimePicker.mjs +5 -6
- package/esm2020/elements/time-picker/TimePicker.module.mjs +4 -5
- package/esm2020/elements/time-picker/TimePickerInput.mjs +3 -65
- package/esm2020/index.mjs +1 -1
- package/esm2020/novo-elements.module.mjs +9 -3
- package/esm2020/novo-elements.providers.mjs +2 -2
- package/esm2020/services/date-format/DateFormat.mjs +153 -47
- package/esm2020/services/global/global.service.mjs +7 -1
- package/esm2020/utils/date/Date.mjs +1 -1
- package/esm2020/utils/date/index.mjs +3 -2
- package/esm2020/utils/date/timezone-support.mjs +87 -0
- package/fesm2015/novo-elements-addons-ace-editor.mjs +7 -3
- package/fesm2015/novo-elements-addons-ace-editor.mjs.map +1 -1
- package/fesm2015/novo-elements-addons-ckeditor.mjs +7 -0
- package/fesm2015/novo-elements-addons-ckeditor.mjs.map +1 -1
- package/fesm2015/novo-elements-addons-code-editor.mjs +150 -0
- package/fesm2015/novo-elements-addons-code-editor.mjs.map +1 -0
- package/fesm2015/novo-elements-addons.mjs +155 -5
- package/fesm2015/novo-elements-addons.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-breadcrumbs.mjs +1 -1
- package/fesm2015/novo-elements-elements-breadcrumbs.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-calendar.mjs +12 -13
- package/fesm2015/novo-elements-elements-calendar.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-common.mjs +10 -2
- package/fesm2015/novo-elements-elements-common.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-data-table.mjs +3 -3
- package/fesm2015/novo-elements-elements-data-table.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-date-picker.mjs +64 -62
- package/fesm2015/novo-elements-elements-date-picker.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-date-time-picker.mjs +3 -4
- package/fesm2015/novo-elements-elements-date-time-picker.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-drag-drop.mjs +245 -0
- package/fesm2015/novo-elements-elements-drag-drop.mjs.map +1 -0
- package/fesm2015/novo-elements-elements-dropdown.mjs +28 -3
- package/fesm2015/novo-elements-elements-dropdown.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-field.mjs +19 -19
- package/fesm2015/novo-elements-elements-field.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-form.mjs +124 -300
- package/fesm2015/novo-elements-elements-form.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-query-builder.mjs +1 -1
- package/fesm2015/novo-elements-elements-query-builder.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-simple-table.mjs +2 -2
- package/fesm2015/novo-elements-elements-simple-table.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-tabbed-group-picker.mjs +1 -1
- package/fesm2015/novo-elements-elements-tabbed-group-picker.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-table.mjs +2 -6
- package/fesm2015/novo-elements-elements-table.mjs.map +1 -1
- package/fesm2015/novo-elements-elements-time-picker.mjs +7 -71
- package/fesm2015/novo-elements-elements-time-picker.mjs.map +1 -1
- package/fesm2015/novo-elements-elements.mjs +1 -0
- package/fesm2015/novo-elements-elements.mjs.map +1 -1
- package/fesm2015/novo-elements-services.mjs +158 -46
- package/fesm2015/novo-elements-services.mjs.map +1 -1
- package/fesm2015/novo-elements-utils.mjs +88 -1
- package/fesm2015/novo-elements-utils.mjs.map +1 -1
- package/fesm2015/novo-elements.mjs +8 -2
- package/fesm2015/novo-elements.mjs.map +1 -1
- package/fesm2020/novo-elements-addons-ace-editor.mjs +7 -3
- package/fesm2020/novo-elements-addons-ace-editor.mjs.map +1 -1
- package/fesm2020/novo-elements-addons-ckeditor.mjs +7 -0
- package/fesm2020/novo-elements-addons-ckeditor.mjs.map +1 -1
- package/fesm2020/novo-elements-addons-code-editor.mjs +150 -0
- package/fesm2020/novo-elements-addons-code-editor.mjs.map +1 -0
- package/fesm2020/novo-elements-addons.mjs +155 -5
- package/fesm2020/novo-elements-addons.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-breadcrumbs.mjs +1 -1
- package/fesm2020/novo-elements-elements-breadcrumbs.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-calendar.mjs +12 -13
- package/fesm2020/novo-elements-elements-calendar.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-common.mjs +8 -2
- package/fesm2020/novo-elements-elements-common.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-data-table.mjs +3 -3
- package/fesm2020/novo-elements-elements-data-table.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-date-picker.mjs +62 -62
- package/fesm2020/novo-elements-elements-date-picker.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-date-time-picker.mjs +3 -4
- package/fesm2020/novo-elements-elements-date-time-picker.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-drag-drop.mjs +244 -0
- package/fesm2020/novo-elements-elements-drag-drop.mjs.map +1 -0
- package/fesm2020/novo-elements-elements-dropdown.mjs +28 -3
- package/fesm2020/novo-elements-elements-dropdown.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-field.mjs +19 -19
- package/fesm2020/novo-elements-elements-field.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-form.mjs +125 -302
- package/fesm2020/novo-elements-elements-form.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-query-builder.mjs +1 -1
- package/fesm2020/novo-elements-elements-query-builder.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-simple-table.mjs +2 -2
- package/fesm2020/novo-elements-elements-simple-table.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-tabbed-group-picker.mjs +1 -1
- package/fesm2020/novo-elements-elements-tabbed-group-picker.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-table.mjs +2 -6
- package/fesm2020/novo-elements-elements-table.mjs.map +1 -1
- package/fesm2020/novo-elements-elements-time-picker.mjs +7 -71
- package/fesm2020/novo-elements-elements-time-picker.mjs.map +1 -1
- package/fesm2020/novo-elements-elements.mjs +1 -0
- package/fesm2020/novo-elements-elements.mjs.map +1 -1
- package/fesm2020/novo-elements-services.mjs +158 -46
- package/fesm2020/novo-elements-services.mjs.map +1 -1
- package/fesm2020/novo-elements-utils.mjs +88 -1
- package/fesm2020/novo-elements-utils.mjs.map +1 -1
- package/fesm2020/novo-elements.mjs +8 -2
- package/fesm2020/novo-elements.mjs.map +1 -1
- package/novo-elements.module.d.ts +1 -1
- package/novo-elements.scss +1 -1
- package/package.json +23 -4
- package/services/date-format/DateFormat.d.ts +62 -3
- package/services/global/global.service.d.ts +3 -0
- package/styles/content/root.scss +1 -1
- package/styles/themes/light-test.scss +1 -1
- package/styles/themes/light.scss +1 -1
- package/styles/variables.scss +1 -1
- package/utils/date/index.d.ts +2 -1
- package/utils/date/timezone-support.d.ts +5 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injector, Injectable, EventEmitter, LOCALE_ID, Optional, Inject } from '@angular/core';
|
|
3
|
-
import { Helpers } from 'novo-elements/utils';
|
|
3
|
+
import { Helpers, DateUtil, convertTokens } from 'novo-elements/utils';
|
|
4
|
+
import { parse, format } from 'date-fns';
|
|
5
|
+
import { MaskedRange, MaskedEnum } from 'imask';
|
|
4
6
|
|
|
5
7
|
// NG2
|
|
6
8
|
class ComponentUtils {
|
|
@@ -744,35 +746,79 @@ class DateFormatService {
|
|
|
744
746
|
this.labels = labels;
|
|
745
747
|
}
|
|
746
748
|
getTimeMask(militaryTime) {
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
const
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
749
|
+
const amFormat = this.labels.timeFormatAM.toUpperCase();
|
|
750
|
+
const pmFormat = this.labels.timeFormatPM.toUpperCase();
|
|
751
|
+
const mask = {
|
|
752
|
+
mask: Date,
|
|
753
|
+
pattern: militaryTime ? 'HH:mm' : 'hh:mm aa',
|
|
754
|
+
overwrite: true,
|
|
755
|
+
autofix: true,
|
|
756
|
+
lazy: false,
|
|
757
|
+
min: new Date(1970, 0, 1),
|
|
758
|
+
max: new Date(2030, 0, 1),
|
|
759
|
+
prepare(str) {
|
|
760
|
+
return str.toUpperCase();
|
|
761
|
+
},
|
|
762
|
+
format(date) {
|
|
763
|
+
return DateUtil.format(date, militaryTime ? 'HH:mm' : 'hh:mm A');
|
|
764
|
+
},
|
|
765
|
+
parse: (str) => {
|
|
766
|
+
const time = militaryTime ? str : this.convertTime12to24(str);
|
|
767
|
+
return DateUtil.parse(`${DateUtil.format(Date.now(), 'YYYY-MM-DD')}T${time}`);
|
|
768
|
+
},
|
|
769
|
+
blocks: {
|
|
770
|
+
HH: {
|
|
771
|
+
mask: MaskedRange,
|
|
772
|
+
placeholderChar: 'H',
|
|
773
|
+
maxLength: 2,
|
|
774
|
+
from: 0,
|
|
775
|
+
to: 23,
|
|
776
|
+
},
|
|
777
|
+
hh: {
|
|
778
|
+
mask: MaskedRange,
|
|
779
|
+
placeholderChar: 'h',
|
|
780
|
+
maxLength: 2,
|
|
781
|
+
from: 1,
|
|
782
|
+
to: 12,
|
|
783
|
+
},
|
|
784
|
+
mm: {
|
|
785
|
+
mask: MaskedRange,
|
|
786
|
+
placeholderChar: 'm',
|
|
787
|
+
maxLength: 2,
|
|
788
|
+
from: 0,
|
|
789
|
+
to: 59,
|
|
790
|
+
},
|
|
791
|
+
aa: {
|
|
792
|
+
mask: MaskedEnum,
|
|
793
|
+
placeholderChar: 'x',
|
|
794
|
+
enum: ['AM', 'PM', 'am', 'pm', amFormat, pmFormat],
|
|
795
|
+
},
|
|
796
|
+
},
|
|
797
|
+
};
|
|
769
798
|
return mask;
|
|
770
799
|
}
|
|
771
|
-
getDateMask() {
|
|
772
|
-
|
|
800
|
+
getDateMask(format) {
|
|
801
|
+
const mask = {
|
|
802
|
+
mask: Date,
|
|
803
|
+
pattern: 'm/`d/`Y',
|
|
804
|
+
overwrite: true,
|
|
805
|
+
autofix: 'pad',
|
|
806
|
+
min: new Date(1970, 0, 1),
|
|
807
|
+
max: new Date(2030, 0, 1),
|
|
808
|
+
prepare(str) {
|
|
809
|
+
return str.toUpperCase();
|
|
810
|
+
},
|
|
811
|
+
format(date) {
|
|
812
|
+
return DateUtil.format(date, format || 'MM/DD/YYYY');
|
|
813
|
+
},
|
|
814
|
+
parse: (str) => {
|
|
815
|
+
return DateUtil.parse(str);
|
|
816
|
+
},
|
|
817
|
+
};
|
|
818
|
+
return mask;
|
|
773
819
|
}
|
|
774
820
|
getDateTimeMask(militaryTime = false) {
|
|
775
|
-
return [
|
|
821
|
+
return [this.getDateMask(), /\,?/, /\s/, this.getTimeMask(militaryTime)];
|
|
776
822
|
}
|
|
777
823
|
getTimePlaceHolder(militaryTime) {
|
|
778
824
|
if (militaryTime) {
|
|
@@ -780,6 +826,60 @@ class DateFormatService {
|
|
|
780
826
|
}
|
|
781
827
|
return this.labels.timeFormatPlaceholderAM;
|
|
782
828
|
}
|
|
829
|
+
parseCustomDateString(dateString, customFormat) {
|
|
830
|
+
let isInvalidDate = true;
|
|
831
|
+
let date = null;
|
|
832
|
+
if (!customFormat) {
|
|
833
|
+
customFormat = this.labels.dateFormatString();
|
|
834
|
+
}
|
|
835
|
+
customFormat = convertTokens(customFormat);
|
|
836
|
+
const [cleanDateString, cleanFormat] = this.removeNonstandardFormatCharacters(dateString, customFormat);
|
|
837
|
+
try {
|
|
838
|
+
date = parse(cleanDateString, cleanFormat, new Date(), {
|
|
839
|
+
useAdditionalWeekYearTokens: false
|
|
840
|
+
});
|
|
841
|
+
if (isNaN(date.getTime())) {
|
|
842
|
+
date = null;
|
|
843
|
+
}
|
|
844
|
+
else if (cleanDateString !== dateString) {
|
|
845
|
+
// Verify that this parse matches the original dateString through this format. If not, then something may have mismatched -
|
|
846
|
+
// in which case we consider the date to be invalid.
|
|
847
|
+
// For instance, if we parsed "Fri Oct 18, 2023" as " Oct 18 2023" (removing the duplicative day-of-week) then it
|
|
848
|
+
// would re-format as "Wed Oct 18 2023" and is an invalid date.
|
|
849
|
+
const reformattedDate = format(date, customFormat);
|
|
850
|
+
if (reformattedDate !== dateString) {
|
|
851
|
+
date = null;
|
|
852
|
+
}
|
|
853
|
+
else {
|
|
854
|
+
isInvalidDate = false;
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
else {
|
|
858
|
+
isInvalidDate = false;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
catch (err) {
|
|
862
|
+
// ignore error - keep isInvalidDate true and date null
|
|
863
|
+
}
|
|
864
|
+
return [date, dateString, isInvalidDate];
|
|
865
|
+
}
|
|
866
|
+
/**
|
|
867
|
+
* Certain date format characters are considered nonstandard. We can still use them, but remove them for date parsing to avoid errors
|
|
868
|
+
* @param dateString
|
|
869
|
+
* @param format
|
|
870
|
+
* @returns date string and format in array, both having had their
|
|
871
|
+
*/
|
|
872
|
+
removeNonstandardFormatCharacters(dateString, format) {
|
|
873
|
+
const bannedChars = /[iIRoPp]+/;
|
|
874
|
+
// remove quotes
|
|
875
|
+
format = format.replace(/['"]/g, '');
|
|
876
|
+
let match = null;
|
|
877
|
+
while ((match = bannedChars.exec(format)) != null) {
|
|
878
|
+
format = format.substring(0, match.index) + format.substring(match.index + match[0].length);
|
|
879
|
+
dateString = dateString.substring(0, match.index) + dateString.substring(match.index + match[0].length);
|
|
880
|
+
}
|
|
881
|
+
return [dateString, format];
|
|
882
|
+
}
|
|
783
883
|
parseDateString(dateString) {
|
|
784
884
|
let dateFormat = this.labels.dateFormatString();
|
|
785
885
|
const dateFormatRegex = /(\w+)[\/|\.|\-](\w+)[\/|\.|\-](\w+)/gi;
|
|
@@ -789,7 +889,7 @@ class DateFormatService {
|
|
|
789
889
|
let year;
|
|
790
890
|
let month;
|
|
791
891
|
let day;
|
|
792
|
-
let date =
|
|
892
|
+
let date = null;
|
|
793
893
|
let isInvalidDate = true;
|
|
794
894
|
if (Helpers.isEmpty(dateFormat)) {
|
|
795
895
|
// Default to MM/dd/yyyy
|
|
@@ -822,10 +922,8 @@ class DateFormatService {
|
|
|
822
922
|
const oneToken = /^(\d{1,4})$/.exec(dateString);
|
|
823
923
|
const delimiter = /\w+(\/|\.|\-)\w+[\/|\.|\-]\w+/gi.exec(dateFormat);
|
|
824
924
|
const dateStringWithDelimiter = dateString[dateString.length - 1].match(/\/|\.|\-/);
|
|
825
|
-
if (twoTokens && twoTokens.length === 3 && this.isValidDatePart(twoTokens[2], dateFormatTokens[2]) && !dateStringWithDelimiter)
|
|
826
|
-
|
|
827
|
-
}
|
|
828
|
-
else if (oneToken && oneToken.length === 2 && this.isValidDatePart(oneToken[1], dateFormatTokens[1]) && !dateStringWithDelimiter) {
|
|
925
|
+
if ((twoTokens && twoTokens.length === 3 && this.isValidDatePart(twoTokens[2], dateFormatTokens[2]) && !dateStringWithDelimiter) ||
|
|
926
|
+
(oneToken && oneToken.length === 2 && this.isValidDatePart(oneToken[1], dateFormatTokens[1]) && !dateStringWithDelimiter)) {
|
|
829
927
|
dateString = `${dateString}${delimiter[1]}`;
|
|
830
928
|
}
|
|
831
929
|
}
|
|
@@ -836,7 +934,7 @@ class DateFormatService {
|
|
|
836
934
|
let timeStringParts;
|
|
837
935
|
let amFormat = this.labels.timeFormatAM;
|
|
838
936
|
let pmFormat = this.labels.timeFormatPM;
|
|
839
|
-
if (!(timeString
|
|
937
|
+
if (!(timeString === null || timeString === void 0 ? void 0 : timeString.includes(':'))) {
|
|
840
938
|
return [value, timeString];
|
|
841
939
|
}
|
|
842
940
|
if (!militaryTime && amFormat && pmFormat) {
|
|
@@ -852,14 +950,14 @@ class DateFormatService {
|
|
|
852
950
|
splits = timeString.split(pmFormat);
|
|
853
951
|
pm = true;
|
|
854
952
|
}
|
|
855
|
-
if (splits
|
|
953
|
+
if (splits === null || splits === void 0 ? void 0 : splits.length) {
|
|
856
954
|
for (const item of splits) {
|
|
857
|
-
if (item
|
|
955
|
+
if (item === null || item === void 0 ? void 0 : item.trim().includes(':')) {
|
|
858
956
|
timeStringParts = item.trim().split(':');
|
|
859
957
|
}
|
|
860
958
|
}
|
|
861
959
|
}
|
|
862
|
-
if (timeStringParts
|
|
960
|
+
if ((timeStringParts === null || timeStringParts === void 0 ? void 0 : timeStringParts.length) && timeStringParts.length === 2) {
|
|
863
961
|
let hours = parseInt(timeStringParts[0], 10);
|
|
864
962
|
if (hours === 12 && pm) {
|
|
865
963
|
hours = 12;
|
|
@@ -877,7 +975,7 @@ class DateFormatService {
|
|
|
877
975
|
}
|
|
878
976
|
else {
|
|
879
977
|
timeStringParts = /(\d{1,2}):(\d{2})/.exec(timeString);
|
|
880
|
-
if (timeStringParts
|
|
978
|
+
if ((timeStringParts === null || timeStringParts === void 0 ? void 0 : timeStringParts.length) && timeStringParts.length === 3) {
|
|
881
979
|
value.setHours(parseInt(timeStringParts[1], 10));
|
|
882
980
|
value.setMinutes(parseInt(timeStringParts[2], 10));
|
|
883
981
|
value.setSeconds(0);
|
|
@@ -886,6 +984,9 @@ class DateFormatService {
|
|
|
886
984
|
return [value, timeString];
|
|
887
985
|
}
|
|
888
986
|
parseString(dateTimeString, militaryTime, type) {
|
|
987
|
+
if (!(dateTimeString === null || dateTimeString === void 0 ? void 0 : dateTimeString.length)) {
|
|
988
|
+
return null;
|
|
989
|
+
}
|
|
889
990
|
switch (type) {
|
|
890
991
|
case 'datetime':
|
|
891
992
|
const str = dateTimeString.replace(/-/g, '/');
|
|
@@ -904,18 +1005,23 @@ class DateFormatService {
|
|
|
904
1005
|
return;
|
|
905
1006
|
}
|
|
906
1007
|
}
|
|
907
|
-
|
|
908
|
-
const
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
return true;
|
|
1008
|
+
convertTime12to24(time12h) {
|
|
1009
|
+
const pmFormat = this.labels.timeFormatPM.toUpperCase();
|
|
1010
|
+
const [time, modifier] = time12h.split(' ');
|
|
1011
|
+
let [hours, minutes] = time.split(':');
|
|
1012
|
+
if (hours === '12') {
|
|
1013
|
+
hours = '00';
|
|
914
1014
|
}
|
|
915
|
-
|
|
916
|
-
|
|
1015
|
+
if (['PM', pmFormat].includes(modifier)) {
|
|
1016
|
+
hours = `${parseInt(hours, 10) + 12}`.padStart(2, '0');
|
|
917
1017
|
}
|
|
918
|
-
return
|
|
1018
|
+
return `${hours}:${minutes}`;
|
|
1019
|
+
}
|
|
1020
|
+
isValidDatePart(value, format) {
|
|
1021
|
+
const datePart = parseInt(value, 10);
|
|
1022
|
+
return ((format.includes('m') && (datePart >= 2 || value.length === 2)) ||
|
|
1023
|
+
(format.includes('d') && (datePart >= 4 || value.length === 2)) ||
|
|
1024
|
+
(format.includes('y') && datePart >= 1000));
|
|
919
1025
|
}
|
|
920
1026
|
}
|
|
921
1027
|
DateFormatService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DateFormatService, deps: [{ token: NovoLabelService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -930,6 +1036,9 @@ class BrowserGlobalRef extends GlobalRef {
|
|
|
930
1036
|
get nativeGlobal() {
|
|
931
1037
|
return window;
|
|
932
1038
|
}
|
|
1039
|
+
get nativeWindow() {
|
|
1040
|
+
return window;
|
|
1041
|
+
}
|
|
933
1042
|
}
|
|
934
1043
|
BrowserGlobalRef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BrowserGlobalRef, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
935
1044
|
BrowserGlobalRef.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BrowserGlobalRef });
|
|
@@ -941,6 +1050,9 @@ class NodeGlobalRef extends GlobalRef {
|
|
|
941
1050
|
throw new Error(`global doesn't compile for some reason`);
|
|
942
1051
|
// return global as Global;
|
|
943
1052
|
}
|
|
1053
|
+
get nativeWindow() {
|
|
1054
|
+
throw new Error('Node does not have a window object');
|
|
1055
|
+
}
|
|
944
1056
|
}
|
|
945
1057
|
|
|
946
1058
|
// App
|