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 {
|
|
@@ -742,35 +744,79 @@ class DateFormatService {
|
|
|
742
744
|
this.labels = labels;
|
|
743
745
|
}
|
|
744
746
|
getTimeMask(militaryTime) {
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
const
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
747
|
+
const amFormat = this.labels.timeFormatAM.toUpperCase();
|
|
748
|
+
const pmFormat = this.labels.timeFormatPM.toUpperCase();
|
|
749
|
+
const mask = {
|
|
750
|
+
mask: Date,
|
|
751
|
+
pattern: militaryTime ? 'HH:mm' : 'hh:mm aa',
|
|
752
|
+
overwrite: true,
|
|
753
|
+
autofix: true,
|
|
754
|
+
lazy: false,
|
|
755
|
+
min: new Date(1970, 0, 1),
|
|
756
|
+
max: new Date(2030, 0, 1),
|
|
757
|
+
prepare(str) {
|
|
758
|
+
return str.toUpperCase();
|
|
759
|
+
},
|
|
760
|
+
format(date) {
|
|
761
|
+
return DateUtil.format(date, militaryTime ? 'HH:mm' : 'hh:mm A');
|
|
762
|
+
},
|
|
763
|
+
parse: (str) => {
|
|
764
|
+
const time = militaryTime ? str : this.convertTime12to24(str);
|
|
765
|
+
return DateUtil.parse(`${DateUtil.format(Date.now(), 'YYYY-MM-DD')}T${time}`);
|
|
766
|
+
},
|
|
767
|
+
blocks: {
|
|
768
|
+
HH: {
|
|
769
|
+
mask: MaskedRange,
|
|
770
|
+
placeholderChar: 'H',
|
|
771
|
+
maxLength: 2,
|
|
772
|
+
from: 0,
|
|
773
|
+
to: 23,
|
|
774
|
+
},
|
|
775
|
+
hh: {
|
|
776
|
+
mask: MaskedRange,
|
|
777
|
+
placeholderChar: 'h',
|
|
778
|
+
maxLength: 2,
|
|
779
|
+
from: 1,
|
|
780
|
+
to: 12,
|
|
781
|
+
},
|
|
782
|
+
mm: {
|
|
783
|
+
mask: MaskedRange,
|
|
784
|
+
placeholderChar: 'm',
|
|
785
|
+
maxLength: 2,
|
|
786
|
+
from: 0,
|
|
787
|
+
to: 59,
|
|
788
|
+
},
|
|
789
|
+
aa: {
|
|
790
|
+
mask: MaskedEnum,
|
|
791
|
+
placeholderChar: 'x',
|
|
792
|
+
enum: ['AM', 'PM', 'am', 'pm', amFormat, pmFormat],
|
|
793
|
+
},
|
|
794
|
+
},
|
|
795
|
+
};
|
|
767
796
|
return mask;
|
|
768
797
|
}
|
|
769
|
-
getDateMask() {
|
|
770
|
-
|
|
798
|
+
getDateMask(format) {
|
|
799
|
+
const mask = {
|
|
800
|
+
mask: Date,
|
|
801
|
+
pattern: 'm/`d/`Y',
|
|
802
|
+
overwrite: true,
|
|
803
|
+
autofix: 'pad',
|
|
804
|
+
min: new Date(1970, 0, 1),
|
|
805
|
+
max: new Date(2030, 0, 1),
|
|
806
|
+
prepare(str) {
|
|
807
|
+
return str.toUpperCase();
|
|
808
|
+
},
|
|
809
|
+
format(date) {
|
|
810
|
+
return DateUtil.format(date, format || 'MM/DD/YYYY');
|
|
811
|
+
},
|
|
812
|
+
parse: (str) => {
|
|
813
|
+
return DateUtil.parse(str);
|
|
814
|
+
},
|
|
815
|
+
};
|
|
816
|
+
return mask;
|
|
771
817
|
}
|
|
772
818
|
getDateTimeMask(militaryTime = false) {
|
|
773
|
-
return [
|
|
819
|
+
return [this.getDateMask(), /\,?/, /\s/, this.getTimeMask(militaryTime)];
|
|
774
820
|
}
|
|
775
821
|
getTimePlaceHolder(militaryTime) {
|
|
776
822
|
if (militaryTime) {
|
|
@@ -778,6 +824,60 @@ class DateFormatService {
|
|
|
778
824
|
}
|
|
779
825
|
return this.labels.timeFormatPlaceholderAM;
|
|
780
826
|
}
|
|
827
|
+
parseCustomDateString(dateString, customFormat) {
|
|
828
|
+
let isInvalidDate = true;
|
|
829
|
+
let date = null;
|
|
830
|
+
if (!customFormat) {
|
|
831
|
+
customFormat = this.labels.dateFormatString();
|
|
832
|
+
}
|
|
833
|
+
customFormat = convertTokens(customFormat);
|
|
834
|
+
const [cleanDateString, cleanFormat] = this.removeNonstandardFormatCharacters(dateString, customFormat);
|
|
835
|
+
try {
|
|
836
|
+
date = parse(cleanDateString, cleanFormat, new Date(), {
|
|
837
|
+
useAdditionalWeekYearTokens: false
|
|
838
|
+
});
|
|
839
|
+
if (isNaN(date.getTime())) {
|
|
840
|
+
date = null;
|
|
841
|
+
}
|
|
842
|
+
else if (cleanDateString !== dateString) {
|
|
843
|
+
// Verify that this parse matches the original dateString through this format. If not, then something may have mismatched -
|
|
844
|
+
// in which case we consider the date to be invalid.
|
|
845
|
+
// For instance, if we parsed "Fri Oct 18, 2023" as " Oct 18 2023" (removing the duplicative day-of-week) then it
|
|
846
|
+
// would re-format as "Wed Oct 18 2023" and is an invalid date.
|
|
847
|
+
const reformattedDate = format(date, customFormat);
|
|
848
|
+
if (reformattedDate !== dateString) {
|
|
849
|
+
date = null;
|
|
850
|
+
}
|
|
851
|
+
else {
|
|
852
|
+
isInvalidDate = false;
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
else {
|
|
856
|
+
isInvalidDate = false;
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
catch (err) {
|
|
860
|
+
// ignore error - keep isInvalidDate true and date null
|
|
861
|
+
}
|
|
862
|
+
return [date, dateString, isInvalidDate];
|
|
863
|
+
}
|
|
864
|
+
/**
|
|
865
|
+
* Certain date format characters are considered nonstandard. We can still use them, but remove them for date parsing to avoid errors
|
|
866
|
+
* @param dateString
|
|
867
|
+
* @param format
|
|
868
|
+
* @returns date string and format in array, both having had their
|
|
869
|
+
*/
|
|
870
|
+
removeNonstandardFormatCharacters(dateString, format) {
|
|
871
|
+
const bannedChars = /[iIRoPp]+/;
|
|
872
|
+
// remove quotes
|
|
873
|
+
format = format.replace(/['"]/g, '');
|
|
874
|
+
let match = null;
|
|
875
|
+
while ((match = bannedChars.exec(format)) != null) {
|
|
876
|
+
format = format.substring(0, match.index) + format.substring(match.index + match[0].length);
|
|
877
|
+
dateString = dateString.substring(0, match.index) + dateString.substring(match.index + match[0].length);
|
|
878
|
+
}
|
|
879
|
+
return [dateString, format];
|
|
880
|
+
}
|
|
781
881
|
parseDateString(dateString) {
|
|
782
882
|
let dateFormat = this.labels.dateFormatString();
|
|
783
883
|
const dateFormatRegex = /(\w+)[\/|\.|\-](\w+)[\/|\.|\-](\w+)/gi;
|
|
@@ -787,7 +887,7 @@ class DateFormatService {
|
|
|
787
887
|
let year;
|
|
788
888
|
let month;
|
|
789
889
|
let day;
|
|
790
|
-
let date =
|
|
890
|
+
let date = null;
|
|
791
891
|
let isInvalidDate = true;
|
|
792
892
|
if (Helpers.isEmpty(dateFormat)) {
|
|
793
893
|
// Default to MM/dd/yyyy
|
|
@@ -820,10 +920,8 @@ class DateFormatService {
|
|
|
820
920
|
const oneToken = /^(\d{1,4})$/.exec(dateString);
|
|
821
921
|
const delimiter = /\w+(\/|\.|\-)\w+[\/|\.|\-]\w+/gi.exec(dateFormat);
|
|
822
922
|
const dateStringWithDelimiter = dateString[dateString.length - 1].match(/\/|\.|\-/);
|
|
823
|
-
if (twoTokens && twoTokens.length === 3 && this.isValidDatePart(twoTokens[2], dateFormatTokens[2]) && !dateStringWithDelimiter)
|
|
824
|
-
|
|
825
|
-
}
|
|
826
|
-
else if (oneToken && oneToken.length === 2 && this.isValidDatePart(oneToken[1], dateFormatTokens[1]) && !dateStringWithDelimiter) {
|
|
923
|
+
if ((twoTokens && twoTokens.length === 3 && this.isValidDatePart(twoTokens[2], dateFormatTokens[2]) && !dateStringWithDelimiter) ||
|
|
924
|
+
(oneToken && oneToken.length === 2 && this.isValidDatePart(oneToken[1], dateFormatTokens[1]) && !dateStringWithDelimiter)) {
|
|
827
925
|
dateString = `${dateString}${delimiter[1]}`;
|
|
828
926
|
}
|
|
829
927
|
}
|
|
@@ -834,7 +932,7 @@ class DateFormatService {
|
|
|
834
932
|
let timeStringParts;
|
|
835
933
|
let amFormat = this.labels.timeFormatAM;
|
|
836
934
|
let pmFormat = this.labels.timeFormatPM;
|
|
837
|
-
if (!(timeString
|
|
935
|
+
if (!(timeString?.includes(':'))) {
|
|
838
936
|
return [value, timeString];
|
|
839
937
|
}
|
|
840
938
|
if (!militaryTime && amFormat && pmFormat) {
|
|
@@ -850,14 +948,14 @@ class DateFormatService {
|
|
|
850
948
|
splits = timeString.split(pmFormat);
|
|
851
949
|
pm = true;
|
|
852
950
|
}
|
|
853
|
-
if (splits
|
|
951
|
+
if (splits?.length) {
|
|
854
952
|
for (const item of splits) {
|
|
855
|
-
if (item
|
|
953
|
+
if (item?.trim().includes(':')) {
|
|
856
954
|
timeStringParts = item.trim().split(':');
|
|
857
955
|
}
|
|
858
956
|
}
|
|
859
957
|
}
|
|
860
|
-
if (timeStringParts
|
|
958
|
+
if (timeStringParts?.length && timeStringParts.length === 2) {
|
|
861
959
|
let hours = parseInt(timeStringParts[0], 10);
|
|
862
960
|
if (hours === 12 && pm) {
|
|
863
961
|
hours = 12;
|
|
@@ -875,7 +973,7 @@ class DateFormatService {
|
|
|
875
973
|
}
|
|
876
974
|
else {
|
|
877
975
|
timeStringParts = /(\d{1,2}):(\d{2})/.exec(timeString);
|
|
878
|
-
if (timeStringParts
|
|
976
|
+
if (timeStringParts?.length && timeStringParts.length === 3) {
|
|
879
977
|
value.setHours(parseInt(timeStringParts[1], 10));
|
|
880
978
|
value.setMinutes(parseInt(timeStringParts[2], 10));
|
|
881
979
|
value.setSeconds(0);
|
|
@@ -884,6 +982,9 @@ class DateFormatService {
|
|
|
884
982
|
return [value, timeString];
|
|
885
983
|
}
|
|
886
984
|
parseString(dateTimeString, militaryTime, type) {
|
|
985
|
+
if (!(dateTimeString?.length)) {
|
|
986
|
+
return null;
|
|
987
|
+
}
|
|
887
988
|
switch (type) {
|
|
888
989
|
case 'datetime':
|
|
889
990
|
const str = dateTimeString.replace(/-/g, '/');
|
|
@@ -902,18 +1003,23 @@ class DateFormatService {
|
|
|
902
1003
|
return;
|
|
903
1004
|
}
|
|
904
1005
|
}
|
|
905
|
-
|
|
906
|
-
const
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
return true;
|
|
1006
|
+
convertTime12to24(time12h) {
|
|
1007
|
+
const pmFormat = this.labels.timeFormatPM.toUpperCase();
|
|
1008
|
+
const [time, modifier] = time12h.split(' ');
|
|
1009
|
+
let [hours, minutes] = time.split(':');
|
|
1010
|
+
if (hours === '12') {
|
|
1011
|
+
hours = '00';
|
|
912
1012
|
}
|
|
913
|
-
|
|
914
|
-
|
|
1013
|
+
if (['PM', pmFormat].includes(modifier)) {
|
|
1014
|
+
hours = `${parseInt(hours, 10) + 12}`.padStart(2, '0');
|
|
915
1015
|
}
|
|
916
|
-
return
|
|
1016
|
+
return `${hours}:${minutes}`;
|
|
1017
|
+
}
|
|
1018
|
+
isValidDatePart(value, format) {
|
|
1019
|
+
const datePart = parseInt(value, 10);
|
|
1020
|
+
return ((format.includes('m') && (datePart >= 2 || value.length === 2)) ||
|
|
1021
|
+
(format.includes('d') && (datePart >= 4 || value.length === 2)) ||
|
|
1022
|
+
(format.includes('y') && datePart >= 1000));
|
|
917
1023
|
}
|
|
918
1024
|
}
|
|
919
1025
|
DateFormatService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DateFormatService, deps: [{ token: NovoLabelService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -928,6 +1034,9 @@ class BrowserGlobalRef extends GlobalRef {
|
|
|
928
1034
|
get nativeGlobal() {
|
|
929
1035
|
return window;
|
|
930
1036
|
}
|
|
1037
|
+
get nativeWindow() {
|
|
1038
|
+
return window;
|
|
1039
|
+
}
|
|
931
1040
|
}
|
|
932
1041
|
BrowserGlobalRef.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BrowserGlobalRef, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
933
1042
|
BrowserGlobalRef.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BrowserGlobalRef });
|
|
@@ -939,6 +1048,9 @@ class NodeGlobalRef extends GlobalRef {
|
|
|
939
1048
|
throw new Error(`global doesn't compile for some reason`);
|
|
940
1049
|
// return global as Global;
|
|
941
1050
|
}
|
|
1051
|
+
get nativeWindow() {
|
|
1052
|
+
throw new Error('Node does not have a window object');
|
|
1053
|
+
}
|
|
942
1054
|
}
|
|
943
1055
|
|
|
944
1056
|
// App
|