@acorex/core 4.0.22 → 4.1.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/README.md +2 -23
- package/acorex-core.d.ts +1 -0
- package/{esm2015/acorex-core.js → esm2020/acorex-core.mjs} +1 -1
- package/esm2020/lib/classes/base-page.class.mjs +28 -0
- package/esm2020/lib/classes/color.class.mjs +49 -0
- package/esm2020/lib/classes/datetime.class.mjs +314 -0
- package/esm2020/lib/classes/menu.class.mjs +27 -0
- package/esm2020/lib/classes/navigator.class.mjs +2 -0
- package/esm2020/lib/classes/popup.class.mjs +2 -0
- package/esm2020/lib/classes/promise.class.mjs +19 -0
- package/esm2020/lib/classes/sectionlist.class.mjs +2 -0
- package/esm2020/lib/classes/select.class.mjs +3 -0
- package/esm2020/lib/core.module.mjs +27 -0
- package/esm2020/lib/error/error.class.mjs +2 -0
- package/esm2020/lib/error/error.module.mjs +19 -0
- package/esm2020/lib/error/error.service.mjs +21 -0
- package/esm2020/lib/events/keyboard.mjs +2 -0
- package/esm2020/lib/http/http-error.class.mjs +2 -0
- package/esm2020/lib/http/http-events.interceptor.mjs +3 -0
- package/esm2020/lib/http/http-request.class.mjs +2 -0
- package/esm2020/lib/http/http-result.class.mjs +21 -0
- package/esm2020/lib/http/http.module.mjs +37 -0
- package/esm2020/lib/http/http.service.mjs +145 -0
- package/esm2020/lib/locale/en.json +253 -0
- package/esm2020/lib/locale/fa.json +242 -0
- package/esm2020/lib/pipe/datetime.pipe.mjs +25 -0
- package/esm2020/lib/pipe/htmlToText.pipe.mjs +25 -0
- package/esm2020/lib/services/config.mjs +29 -0
- package/esm2020/lib/services/event.service.mjs +36 -0
- package/esm2020/lib/services/navigator.service.mjs +10 -0
- package/esm2020/lib/services/storage.service.mjs +16 -0
- package/esm2020/lib/translator/translator.mjs +26 -0
- package/esm2020/lib/translator/translator.module.mjs +25 -0
- package/esm2020/lib/translator/translator.pipe.mjs +24 -0
- package/esm2020/lib/translator/translator.service.mjs +21 -0
- package/esm2020/lib/utils/array/array-util.mjs +133 -0
- package/esm2020/lib/utils/html/html-util.mjs +192 -0
- package/esm2020/lib/utils/html/html.module.mjs +19 -0
- package/esm2020/lib/utils/math/math-util.mjs +6 -0
- package/esm2020/lib/utils/object/object-util.mjs +83 -0
- package/esm2020/lib/utils/render/on-demand-preload-strategy.service.mjs +21 -0
- package/esm2020/lib/utils/render/render.service.mjs +103 -0
- package/esm2020/lib/utils/render/rendering.module.mjs +35 -0
- package/esm2020/lib/utils/scroll/scroll.directive.mjs +54 -0
- package/esm2020/lib/utils/scroll/scroll.module.mjs +19 -0
- package/esm2020/lib/utils/separator/separator.module.mjs +19 -0
- package/esm2020/lib/utils/separator/separator.pipe.mjs +33 -0
- package/esm2020/public-api.mjs +43 -0
- package/fesm2015/acorex-core.mjs +2123 -0
- package/fesm2015/acorex-core.mjs.map +1 -0
- package/fesm2020/acorex-core.mjs +2119 -0
- package/fesm2020/acorex-core.mjs.map +1 -0
- package/lib/classes/base-page.class.d.ts +13 -0
- package/lib/classes/color.class.d.ts +17 -0
- package/lib/classes/datetime.class.d.ts +63 -0
- package/lib/classes/menu.class.d.ts +34 -0
- package/lib/classes/navigator.class.d.ts +5 -0
- package/lib/classes/popup.class.d.ts +12 -0
- package/lib/classes/promise.class.d.ts +7 -0
- package/lib/classes/sectionlist.class.d.ts +8 -0
- package/lib/classes/select.class.d.ts +7 -0
- package/lib/core.module.d.ts +9 -0
- package/lib/error/error.class.d.ts +4 -0
- package/lib/error/error.module.d.ts +7 -0
- package/lib/error/error.service.d.ts +13 -0
- package/lib/events/keyboard.d.ts +2 -0
- package/lib/http/http-error.class.d.ts +7 -0
- package/lib/http/http-events.interceptor.d.ts +10 -0
- package/lib/http/http-request.class.d.ts +14 -0
- package/lib/http/http-result.class.d.ts +11 -0
- package/lib/http/http.module.d.ts +10 -0
- package/lib/http/http.service.d.ts +23 -0
- package/lib/pipe/datetime.pipe.d.ts +8 -0
- package/lib/pipe/htmlToText.pipe.d.ts +7 -0
- package/lib/{config/configs.d.ts → services/config.d.ts} +1 -1
- package/lib/services/event.service.d.ts +9 -0
- package/lib/services/navigator.service.d.ts +8 -0
- package/lib/services/storage.service.d.ts +7 -0
- package/lib/{translation → translator}/translator.d.ts +0 -0
- package/lib/translator/translator.module.d.ts +8 -0
- package/lib/translator/translator.pipe.d.ts +8 -0
- package/lib/translator/translator.service.d.ts +8 -0
- package/lib/utils/array/array-util.d.ts +6 -0
- package/lib/utils/html/html-util.d.ts +62 -0
- package/lib/utils/html/html.module.d.ts +8 -0
- package/lib/utils/math/math-util.d.ts +3 -0
- package/lib/utils/object/object-util.d.ts +7 -0
- package/lib/utils/render/on-demand-preload-strategy.service.d.ts +10 -0
- package/lib/utils/render/render.service.d.ts +18 -0
- package/lib/utils/render/rendering.module.d.ts +8 -0
- package/lib/utils/scroll/scroll.directive.d.ts +18 -0
- package/lib/utils/scroll/scroll.module.d.ts +8 -0
- package/lib/utils/separator/separator.module.d.ts +8 -0
- package/lib/utils/separator/separator.pipe.d.ts +8 -0
- package/package.json +24 -12
- package/public-api.d.ts +42 -4
- package/acorex-core.metadata.json +0 -1
- package/bundles/acorex-core.umd.js +0 -678
- package/bundles/acorex-core.umd.js.map +0 -1
- package/bundles/acorex-core.umd.min.js +0 -2
- package/bundles/acorex-core.umd.min.js.map +0 -1
- package/esm2015/lib/config/configs.js +0 -29
- package/esm2015/lib/dateTime/datetime.class.js +0 -226
- package/esm2015/lib/dateTime/datetime.module.js +0 -13
- package/esm2015/lib/dateTime/datetime.pipe.js +0 -22
- package/esm2015/lib/dateTime/georgian.calendar.js +0 -145
- package/esm2015/lib/dateTime/index.js +0 -5
- package/esm2015/lib/translation/index.js +0 -4
- package/esm2015/lib/translation/translation.module.js +0 -13
- package/esm2015/lib/translation/translator.js +0 -26
- package/esm2015/lib/translation/translator.pipe.js +0 -11
- package/esm2015/lib/utils/object-util.js +0 -83
- package/esm2015/public-api.js +0 -5
- package/fesm2015/acorex-core.js +0 -563
- package/fesm2015/acorex-core.js.map +0 -1
- package/lib/dateTime/datetime.class.d.ts +0 -83
- package/lib/dateTime/datetime.module.d.ts +0 -2
- package/lib/dateTime/datetime.pipe.d.ts +0 -5
- package/lib/dateTime/georgian.calendar.d.ts +0 -17
- package/lib/dateTime/index.d.ts +0 -4
- package/lib/translation/index.d.ts +0 -3
- package/lib/translation/translation.module.d.ts +0 -2
- package/lib/translation/translator.pipe.d.ts +0 -4
- package/lib/utils/object-util.d.ts +0 -7
package/fesm2015/acorex-core.js
DELETED
|
@@ -1,563 +0,0 @@
|
|
|
1
|
-
import { Subject } from 'rxjs';
|
|
2
|
-
import { Pipe, NgModule } from '@angular/core';
|
|
3
|
-
import merge from 'lodash-es/merge';
|
|
4
|
-
|
|
5
|
-
// @dynamic
|
|
6
|
-
class AXObjectUtil {
|
|
7
|
-
static deepJSONClone(obj) {
|
|
8
|
-
return obj ? JSON.parse(JSON.stringify(obj)) : null;
|
|
9
|
-
}
|
|
10
|
-
static deepCopy(obj) {
|
|
11
|
-
let copy;
|
|
12
|
-
// Handle the 3 simple types, and null or undefined
|
|
13
|
-
if (null == obj || 'object' !== typeof obj) {
|
|
14
|
-
return obj;
|
|
15
|
-
}
|
|
16
|
-
// Handle Date
|
|
17
|
-
if (obj instanceof Date) {
|
|
18
|
-
copy = new Date();
|
|
19
|
-
copy.setTime(obj.getTime());
|
|
20
|
-
return copy;
|
|
21
|
-
}
|
|
22
|
-
// Handle Array
|
|
23
|
-
if (obj instanceof Array) {
|
|
24
|
-
copy = [];
|
|
25
|
-
for (let i = 0, len = obj.length; i < len; i++) {
|
|
26
|
-
copy[i] = AXObjectUtil.deepCopy(obj[i]);
|
|
27
|
-
}
|
|
28
|
-
return copy;
|
|
29
|
-
}
|
|
30
|
-
// Handle Object
|
|
31
|
-
if (obj instanceof Object) {
|
|
32
|
-
copy = {};
|
|
33
|
-
for (const attr in obj) {
|
|
34
|
-
if (obj.hasOwnProperty(attr)) {
|
|
35
|
-
copy[attr] = AXObjectUtil.deepCopy(obj[attr]);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return copy;
|
|
39
|
-
}
|
|
40
|
-
throw new Error('Unable to copy obj! Its type isn\'t supported.');
|
|
41
|
-
}
|
|
42
|
-
static fetchProp(obj, prop) {
|
|
43
|
-
if (typeof obj === 'undefined') {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
const index = prop.indexOf('.');
|
|
47
|
-
if (index > -1) {
|
|
48
|
-
return AXObjectUtil.fetchProp(obj[prop.substring(0, index)], prop.substr(index + 1));
|
|
49
|
-
}
|
|
50
|
-
return obj[prop];
|
|
51
|
-
}
|
|
52
|
-
static getPropByPath(obj, path, defaultVal) {
|
|
53
|
-
path = path
|
|
54
|
-
.replace(/\[/g, '.')
|
|
55
|
-
.replace(/]/g, '')
|
|
56
|
-
.split('.');
|
|
57
|
-
path.forEach((level) => {
|
|
58
|
-
if (obj) {
|
|
59
|
-
obj = obj[level];
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
if (obj === undefined) {
|
|
63
|
-
return defaultVal;
|
|
64
|
-
}
|
|
65
|
-
return obj;
|
|
66
|
-
}
|
|
67
|
-
static setPropByPath(obj, path, value) {
|
|
68
|
-
if (Object(obj) !== obj) {
|
|
69
|
-
return obj;
|
|
70
|
-
} // When obj is not an object
|
|
71
|
-
// If not yet an array, get the keys from the string-path
|
|
72
|
-
if (!Array.isArray(path)) {
|
|
73
|
-
path = path.toString().match(/[^.[\]]+/g) || [];
|
|
74
|
-
}
|
|
75
|
-
path.slice(0, -1).reduce((a, c, i) => // Iterate all of them except the last one
|
|
76
|
-
Object(a[c]) === a[c] // Does the key exist and is its value an object?
|
|
77
|
-
// Yes: then follow that path
|
|
78
|
-
? a[c]
|
|
79
|
-
// No: create the key. Is the next key a potential array-index?
|
|
80
|
-
: a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1]
|
|
81
|
-
? [] // Yes: assign a new array object
|
|
82
|
-
: {}, // No: assign a new plain object
|
|
83
|
-
obj)[path[path.length - 1]] = value; // Finally assign the value to the last key
|
|
84
|
-
return obj; // Return the top-level object to allow chaining
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// @dynamic
|
|
89
|
-
class AXConfig {
|
|
90
|
-
static get onChange() {
|
|
91
|
-
return AXConfig.dataChangeSubject.asObservable();
|
|
92
|
-
}
|
|
93
|
-
static set(arg1, arg2) {
|
|
94
|
-
if (arg1 && typeof arg1 == 'string') {
|
|
95
|
-
AXObjectUtil.setPropByPath(AXConfig.dataModel, arg1, arg2);
|
|
96
|
-
AXConfig.dataChangeSubject.next(AXConfig.dataModel);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
if (arg1 && typeof arg1 == 'object') {
|
|
100
|
-
Object.assign(AXConfig.dataModel, arg1);
|
|
101
|
-
AXConfig.dataChangeSubject.next(AXConfig.dataModel);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (!arg1 && !arg2) {
|
|
105
|
-
return AXConfig.dataChangeSubject.asObservable();
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
static get(path, defaultValue) {
|
|
109
|
-
return AXObjectUtil.getPropByPath(AXConfig.dataModel, path) || defaultValue;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
AXConfig.dataModel = {};
|
|
113
|
-
AXConfig.dataChangeSubject = new Subject();
|
|
114
|
-
|
|
115
|
-
const AX_CALENDARS = [
|
|
116
|
-
{
|
|
117
|
-
name: 'gregorian',
|
|
118
|
-
type: 'GeorgianCalendar'
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
name: 'jalali',
|
|
122
|
-
type: 'JalaliCalendar'
|
|
123
|
-
}
|
|
124
|
-
];
|
|
125
|
-
// @dynamic
|
|
126
|
-
class AXDateTime {
|
|
127
|
-
constructor(value = new Date(), calendar = AXConfig.get('dateTime.type') || 'gregorian') {
|
|
128
|
-
this._calendar =
|
|
129
|
-
typeof calendar == 'string'
|
|
130
|
-
? eval(`new ${AX_CALENDARS.find((c) => c.name == calendar).type}()`)
|
|
131
|
-
: calendar;
|
|
132
|
-
if (value instanceof Date) {
|
|
133
|
-
this._date = value;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
this._date = new Date(value);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
static convert(value, calendar = AXConfig.get('dateTime.type') || 'gregorian') {
|
|
140
|
-
let date;
|
|
141
|
-
if (typeof value === 'string' || value instanceof String) {
|
|
142
|
-
date = new AXDateTime(value, calendar);
|
|
143
|
-
}
|
|
144
|
-
else if (value instanceof Date) {
|
|
145
|
-
date = new AXDateTime(value, calendar);
|
|
146
|
-
}
|
|
147
|
-
else if (value instanceof AXDateTime) {
|
|
148
|
-
date = new AXDateTime(value.date, calendar);
|
|
149
|
-
}
|
|
150
|
-
return date;
|
|
151
|
-
}
|
|
152
|
-
get date() {
|
|
153
|
-
return this._date;
|
|
154
|
-
}
|
|
155
|
-
get calendar() {
|
|
156
|
-
return this._calendar;
|
|
157
|
-
}
|
|
158
|
-
clone() {
|
|
159
|
-
return new AXDateTime(this.date, this.calendar.name());
|
|
160
|
-
}
|
|
161
|
-
get dayInMonth() {
|
|
162
|
-
return this._calendar.dayInMonth(this.date);
|
|
163
|
-
}
|
|
164
|
-
get dayOfYear() {
|
|
165
|
-
return this._calendar.dayOfYear(this.date);
|
|
166
|
-
}
|
|
167
|
-
get dayInWeek() {
|
|
168
|
-
return this._calendar.dayInWeek(this.date);
|
|
169
|
-
}
|
|
170
|
-
get hour() {
|
|
171
|
-
return this._date.getHours();
|
|
172
|
-
}
|
|
173
|
-
get minute() {
|
|
174
|
-
return this._date.getMinutes();
|
|
175
|
-
}
|
|
176
|
-
get second() {
|
|
177
|
-
return this._date.getSeconds();
|
|
178
|
-
}
|
|
179
|
-
get year() {
|
|
180
|
-
return this._calendar.year(this.date);
|
|
181
|
-
}
|
|
182
|
-
get monthOfYear() {
|
|
183
|
-
return this._calendar.monthOfYear(this.date);
|
|
184
|
-
}
|
|
185
|
-
get month() {
|
|
186
|
-
return new AXCalendarMonth(this);
|
|
187
|
-
}
|
|
188
|
-
add(unit, amount) {
|
|
189
|
-
return this._calendar.add(this.date, unit, amount);
|
|
190
|
-
}
|
|
191
|
-
set(unit = 'day', value) {
|
|
192
|
-
return this._calendar.set(this.date, unit, value);
|
|
193
|
-
}
|
|
194
|
-
duration(end, unit = 'day') {
|
|
195
|
-
const range = new AXDateTimeRange(this, AXDateTime.convert(end, this.calendar.name()));
|
|
196
|
-
return range.duration();
|
|
197
|
-
}
|
|
198
|
-
startOf(unit = 'day') {
|
|
199
|
-
return this._calendar.startOf(this.date, unit);
|
|
200
|
-
}
|
|
201
|
-
endOf(unit = 'day') {
|
|
202
|
-
return this._calendar.endOf(this.date, unit);
|
|
203
|
-
}
|
|
204
|
-
format(format = AXConfig.get('dateTime.shortDateFormat') ||
|
|
205
|
-
'DDD, dd MMM yyyy') {
|
|
206
|
-
format = format.replace('ss', this.pad(this.date.getSeconds(), 2));
|
|
207
|
-
format = format.replace('s', this.date.getSeconds().toString());
|
|
208
|
-
format = format.replace('dd', this.pad(this.calendar.dayInMonth(this.date), 2));
|
|
209
|
-
format = format.replace('d', this.calendar.dayInMonth(this.date).toString());
|
|
210
|
-
format = format.replace('mm', this.pad(this.date.getMinutes(), 2));
|
|
211
|
-
format = format.replace('m', this.date.getMinutes().toString());
|
|
212
|
-
format = format.replace('MMMM', this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1]);
|
|
213
|
-
format = format.replace('MMM', this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1]);
|
|
214
|
-
format = format.replace('MM', this.pad(this.calendar.monthOfYear(this.date), 2));
|
|
215
|
-
format = format.replace(/M(?![ao])/, this.calendar.monthOfYear(this.date).toString());
|
|
216
|
-
format = format.replace('DDDD', this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1]);
|
|
217
|
-
format = format.replace('DDD', this.calendar.dayShortNames[this.calendar.dayInWeek(this.date) - 1]);
|
|
218
|
-
format = format.replace(/D(?!e)/, this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1].substring(0, 3));
|
|
219
|
-
format = format.replace('yyyy', this.calendar.year(this.date).toString());
|
|
220
|
-
format = format.replace('YYYY', this.calendar.year(this.date).toString());
|
|
221
|
-
format = format.replace('yy', this.calendar.year(this.date).toString().substring(2));
|
|
222
|
-
format = format.replace('YY', this.calendar.year(this.date).toString().substring(2));
|
|
223
|
-
format = format.replace('HH', this.pad(this.date.getHours(), 2));
|
|
224
|
-
format = format.replace('H', this.date.getHours().toString());
|
|
225
|
-
return format;
|
|
226
|
-
}
|
|
227
|
-
pad(n, width, z = '0') {
|
|
228
|
-
n = n + '';
|
|
229
|
-
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
|
|
230
|
-
}
|
|
231
|
-
toString() {
|
|
232
|
-
return this.format();
|
|
233
|
-
}
|
|
234
|
-
equal(value, unit = 'day') {
|
|
235
|
-
return this.compaire(value, unit) == 0;
|
|
236
|
-
}
|
|
237
|
-
compaire(value, unit = 'day') {
|
|
238
|
-
// TODO:
|
|
239
|
-
const val = AXDateTime.convert(value);
|
|
240
|
-
if (this.date == val.date) {
|
|
241
|
-
return 0;
|
|
242
|
-
}
|
|
243
|
-
else if (this.date > val.date) {
|
|
244
|
-
return 1;
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
return -1;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
convert(calendar) {
|
|
251
|
-
return AXDateTime.convert(this, calendar);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
class AXCalendarMonth {
|
|
255
|
-
constructor(date) {
|
|
256
|
-
this.index = date.date.getMonth();
|
|
257
|
-
this.name = date.format('MMMM');
|
|
258
|
-
this.range = new AXDateTimeRange(new AXDateTime(date.startOf('month').date, date.calendar), new AXDateTime(date.endOf('month').date, date.calendar));
|
|
259
|
-
}
|
|
260
|
-
get range() {
|
|
261
|
-
return this._range;
|
|
262
|
-
}
|
|
263
|
-
set range(v) {
|
|
264
|
-
this._range = v;
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
class AXDateTimeRange {
|
|
268
|
-
constructor(startTime, endTime) {
|
|
269
|
-
this.startTime = startTime;
|
|
270
|
-
this.endTime = endTime;
|
|
271
|
-
}
|
|
272
|
-
duration() {
|
|
273
|
-
const result = {
|
|
274
|
-
miliseconds: 0,
|
|
275
|
-
seconds: 0,
|
|
276
|
-
minutes: 0,
|
|
277
|
-
hours: 0,
|
|
278
|
-
days: 0,
|
|
279
|
-
months: 0,
|
|
280
|
-
years: 0,
|
|
281
|
-
total: {
|
|
282
|
-
miliseconds: 0,
|
|
283
|
-
seconds: 0,
|
|
284
|
-
minutes: 0,
|
|
285
|
-
hours: 0,
|
|
286
|
-
days: 0,
|
|
287
|
-
weeks: 0,
|
|
288
|
-
months: 0,
|
|
289
|
-
years: 0,
|
|
290
|
-
},
|
|
291
|
-
};
|
|
292
|
-
const one_second = 1000;
|
|
293
|
-
const one_min = one_second * 60;
|
|
294
|
-
const one_hour = one_min * 60;
|
|
295
|
-
const one_day = one_hour * 24;
|
|
296
|
-
const one_week = one_day * 7;
|
|
297
|
-
const one_year = 365.25 * one_day;
|
|
298
|
-
const one_month = one_year / 12;
|
|
299
|
-
const startTime = this.startTime.date.getTime();
|
|
300
|
-
const endTime = this.endTime.date.getTime();
|
|
301
|
-
const diff = Math.abs(endTime - startTime);
|
|
302
|
-
//
|
|
303
|
-
result.total.miliseconds = diff;
|
|
304
|
-
result.total.seconds = Number((diff / one_second).toFixed(2));
|
|
305
|
-
result.total.minutes = Number((diff / one_min).toFixed(2));
|
|
306
|
-
result.total.hours = Number((diff / one_hour).toFixed(2));
|
|
307
|
-
result.total.days = Number((diff / one_day).toFixed(2));
|
|
308
|
-
result.total.weeks = Number((diff / one_week).toFixed(2));
|
|
309
|
-
//
|
|
310
|
-
// let months = (this.endTime.year - this.startTime.year) * 12;
|
|
311
|
-
// months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;
|
|
312
|
-
// if (this.endTime.dayOfYear < this.startTime.dayOfYear) {
|
|
313
|
-
// months--;
|
|
314
|
-
// }
|
|
315
|
-
// result.total.months = Math.abs(months);
|
|
316
|
-
// TODO: review
|
|
317
|
-
result.total.months = Number((diff / one_month).toFixed(2));
|
|
318
|
-
result.total.years = Number((diff / one_year).toFixed(2));
|
|
319
|
-
//
|
|
320
|
-
result.miliseconds = result.total.miliseconds % 1000;
|
|
321
|
-
result.seconds = Number((result.total.seconds % 60).toFixed(0));
|
|
322
|
-
result.minutes = Number((result.total.minutes % 60).toFixed(0));
|
|
323
|
-
result.hours = Number((result.total.hours % 24).toFixed(0));
|
|
324
|
-
// TODO: review
|
|
325
|
-
result.days = Number((result.total.days % 30.4).toFixed(0));
|
|
326
|
-
result.months = Number((result.total.months % 12).toFixed(0));
|
|
327
|
-
result.years = Number(result.total.years.toFixed(0));
|
|
328
|
-
return result;
|
|
329
|
-
}
|
|
330
|
-
enumurate(unit = 'day') {
|
|
331
|
-
// TODO: ??
|
|
332
|
-
return [];
|
|
333
|
-
}
|
|
334
|
-
includes(value, unit = 'day') {
|
|
335
|
-
// TODO: ??
|
|
336
|
-
return true;
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
class AXDateTimePipe {
|
|
341
|
-
constructor() { }
|
|
342
|
-
transform(value, format, calendar) {
|
|
343
|
-
if (value == null) {
|
|
344
|
-
return '';
|
|
345
|
-
}
|
|
346
|
-
const date = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);
|
|
347
|
-
if (!format) {
|
|
348
|
-
return date.toString();
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
return date.format(format);
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
AXDateTimePipe.decorators = [
|
|
356
|
-
{ type: Pipe, args: [{ name: 'axDate' },] }
|
|
357
|
-
];
|
|
358
|
-
AXDateTimePipe.ctorParameters = () => [];
|
|
359
|
-
|
|
360
|
-
class AXDateTimeModule {
|
|
361
|
-
}
|
|
362
|
-
AXDateTimeModule.decorators = [
|
|
363
|
-
{ type: NgModule, args: [{
|
|
364
|
-
imports: [],
|
|
365
|
-
exports: [AXDateTimePipe],
|
|
366
|
-
declarations: [AXDateTimePipe],
|
|
367
|
-
providers: [],
|
|
368
|
-
},] }
|
|
369
|
-
];
|
|
370
|
-
|
|
371
|
-
class GeorgianCalendar {
|
|
372
|
-
constructor() {
|
|
373
|
-
this.monthNames = [
|
|
374
|
-
"January", "February", "March",
|
|
375
|
-
"April", "May", "June", "July",
|
|
376
|
-
"August", "September", "October",
|
|
377
|
-
"November", "December"
|
|
378
|
-
];
|
|
379
|
-
this.monthShortNames = [
|
|
380
|
-
"Jan", "Feb", "Mar",
|
|
381
|
-
"Apr", "May", "Jun", "Jul",
|
|
382
|
-
"Aug", "Sep", "Oct",
|
|
383
|
-
"Nov", "Dec"
|
|
384
|
-
];
|
|
385
|
-
this.dayNames = [
|
|
386
|
-
"Sunday", "Monday", "Tuesday", "Wednesday",
|
|
387
|
-
"Thursday", "Friday", "Saturday"
|
|
388
|
-
];
|
|
389
|
-
this.dayShortNames = [
|
|
390
|
-
"Sun", "Mon", "Tue", "Wed",
|
|
391
|
-
"Thu", "Fri", "Sat"
|
|
392
|
-
];
|
|
393
|
-
}
|
|
394
|
-
name() {
|
|
395
|
-
return 'gregorian';
|
|
396
|
-
}
|
|
397
|
-
dayInMonth(date) {
|
|
398
|
-
return date.getDate();
|
|
399
|
-
}
|
|
400
|
-
dayOfYear(date) {
|
|
401
|
-
const start = +new Date(date.getFullYear(), 0, 0);
|
|
402
|
-
const diff = +date - start;
|
|
403
|
-
const oneDay = 1000 * 60 * 60 * 24;
|
|
404
|
-
return Math.floor(diff / oneDay);
|
|
405
|
-
}
|
|
406
|
-
dayInWeek(date) {
|
|
407
|
-
return date.getDay() + 1;
|
|
408
|
-
}
|
|
409
|
-
year(date) {
|
|
410
|
-
return date.getFullYear();
|
|
411
|
-
}
|
|
412
|
-
monthOfYear(date) {
|
|
413
|
-
return date.getMonth() + 1;
|
|
414
|
-
}
|
|
415
|
-
add(date, unit, amount) {
|
|
416
|
-
let value = date.valueOf();
|
|
417
|
-
switch (unit) {
|
|
418
|
-
case 'second':
|
|
419
|
-
value += 1000 * amount;
|
|
420
|
-
break;
|
|
421
|
-
case 'minute':
|
|
422
|
-
value += 60000 * amount;
|
|
423
|
-
break;
|
|
424
|
-
case 'hour':
|
|
425
|
-
value += 3600000 * amount;
|
|
426
|
-
break;
|
|
427
|
-
case 'month':
|
|
428
|
-
const v = new Date(value);
|
|
429
|
-
var mo = date.getMonth();
|
|
430
|
-
var yr = date.getFullYear();
|
|
431
|
-
mo = (mo + amount) % 12;
|
|
432
|
-
if (0 > mo) {
|
|
433
|
-
yr += (date.getMonth() + amount - mo - 12) / 12;
|
|
434
|
-
mo += 12;
|
|
435
|
-
}
|
|
436
|
-
else
|
|
437
|
-
yr += ((date.getMonth() + amount - mo) / 12);
|
|
438
|
-
v.setMonth(mo);
|
|
439
|
-
v.setFullYear(yr);
|
|
440
|
-
value = v.valueOf();
|
|
441
|
-
break;
|
|
442
|
-
case 'week':
|
|
443
|
-
value += 7 * 86400000 * amount;
|
|
444
|
-
break;
|
|
445
|
-
case 'year':
|
|
446
|
-
const yv = new Date(value);
|
|
447
|
-
yv.setFullYear(yv.getFullYear() + amount);
|
|
448
|
-
value = v.valueOf();
|
|
449
|
-
break;
|
|
450
|
-
case 'day':
|
|
451
|
-
default:
|
|
452
|
-
value += 86400000 * amount;
|
|
453
|
-
}
|
|
454
|
-
return new AXDateTime(new Date(value), this.name());
|
|
455
|
-
}
|
|
456
|
-
set(date, unit, value) {
|
|
457
|
-
throw new Error("Method not implemented.");
|
|
458
|
-
}
|
|
459
|
-
startOf(date, unit) {
|
|
460
|
-
const clone = new Date(date.valueOf());
|
|
461
|
-
switch (unit) {
|
|
462
|
-
case 'second':
|
|
463
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);
|
|
464
|
-
return new AXDateTime(clone, this.name());
|
|
465
|
-
case 'minute':
|
|
466
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);
|
|
467
|
-
return new AXDateTime(clone, this.name());
|
|
468
|
-
case 'hour':
|
|
469
|
-
clone.setHours(clone.getHours(), 0, 0, 0);
|
|
470
|
-
return new AXDateTime(clone, this.name());
|
|
471
|
-
default:
|
|
472
|
-
case 'day':
|
|
473
|
-
clone.setHours(0, 0, 0, 0);
|
|
474
|
-
return new AXDateTime(clone, this.name());
|
|
475
|
-
case "week":
|
|
476
|
-
const diff = clone.getDate() - clone.getDay() + (clone.getDay() === 0 ? -6 : 1);
|
|
477
|
-
clone.setDate(diff);
|
|
478
|
-
return new AXDateTime(clone, this.name()).startOf('day');
|
|
479
|
-
case "month":
|
|
480
|
-
clone.setDate(1);
|
|
481
|
-
return new AXDateTime(clone, this.name()).startOf('day');
|
|
482
|
-
case "year":
|
|
483
|
-
clone.setMonth(0);
|
|
484
|
-
clone.setDate(1);
|
|
485
|
-
return new AXDateTime(clone, this.name()).startOf('day');
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
endOf(date, unit) {
|
|
489
|
-
const clone = new Date(date.valueOf());
|
|
490
|
-
switch (unit) {
|
|
491
|
-
case 'second':
|
|
492
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);
|
|
493
|
-
return new AXDateTime(clone, this.name());
|
|
494
|
-
case 'minute':
|
|
495
|
-
clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);
|
|
496
|
-
return new AXDateTime(clone, this.name());
|
|
497
|
-
case 'hour':
|
|
498
|
-
clone.setHours(clone.getHours(), 59, 59, 999);
|
|
499
|
-
return new AXDateTime(clone, this.name());
|
|
500
|
-
default:
|
|
501
|
-
case 'day':
|
|
502
|
-
clone.setHours(23, 59, 59, 999);
|
|
503
|
-
return new AXDateTime(clone, this.name());
|
|
504
|
-
case 'week':
|
|
505
|
-
return this.startOf(date, 'week').add('day', 6).endOf('day');
|
|
506
|
-
case 'month':
|
|
507
|
-
return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');
|
|
508
|
-
case "year":
|
|
509
|
-
clone.setMonth(11);
|
|
510
|
-
return new AXDateTime(clone, this.name()).endOf('month');
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
// @dynamic
|
|
516
|
-
class AXTranslator {
|
|
517
|
-
static get onChange() {
|
|
518
|
-
return AXTranslator.dataChangeSubject.asObservable();
|
|
519
|
-
}
|
|
520
|
-
static load(lang, value) {
|
|
521
|
-
if (typeof value === 'object') {
|
|
522
|
-
if (!AXTranslator[`__data__${lang}`]) {
|
|
523
|
-
AXTranslator[`__data__${lang}`] = {};
|
|
524
|
-
}
|
|
525
|
-
AXTranslator[`__data__${lang}`] = merge(AXTranslator[`__data__${lang}`], value);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
static use(lang) {
|
|
529
|
-
AXTranslator.lang = lang;
|
|
530
|
-
}
|
|
531
|
-
static get(key, lang) {
|
|
532
|
-
return AXObjectUtil.getPropByPath(AXTranslator[`__data__${lang || AXTranslator.lang}`], key) || key;
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
AXTranslator.lang = 'en';
|
|
536
|
-
AXTranslator.dataChangeSubject = new Subject();
|
|
537
|
-
|
|
538
|
-
class AXTranslatorPipe {
|
|
539
|
-
transform(value, lang) {
|
|
540
|
-
return AXTranslator.get(value, lang);
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
AXTranslatorPipe.decorators = [
|
|
544
|
-
{ type: Pipe, args: [{ name: 'trans', pure: true },] }
|
|
545
|
-
];
|
|
546
|
-
|
|
547
|
-
class AXTranslationModule {
|
|
548
|
-
}
|
|
549
|
-
AXTranslationModule.decorators = [
|
|
550
|
-
{ type: NgModule, args: [{
|
|
551
|
-
imports: [],
|
|
552
|
-
exports: [AXTranslatorPipe],
|
|
553
|
-
declarations: [AXTranslatorPipe],
|
|
554
|
-
providers: [],
|
|
555
|
-
},] }
|
|
556
|
-
];
|
|
557
|
-
|
|
558
|
-
/**
|
|
559
|
-
* Generated bundle index. Do not edit.
|
|
560
|
-
*/
|
|
561
|
-
|
|
562
|
-
export { AXCalendarMonth, AXConfig, AXDateTime, AXDateTimeModule, AXDateTimePipe, AXDateTimeRange, AXObjectUtil, AXTranslationModule, AXTranslator, AXTranslatorPipe, AX_CALENDARS, GeorgianCalendar };
|
|
563
|
-
//# sourceMappingURL=acorex-core.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-core.js","sources":["../../projects/acorex/core/src/lib/utils/object-util.ts","../../projects/acorex/core/src/lib/config/configs.ts","../../projects/acorex/core/src/lib/dateTime/datetime.class.ts","../../projects/acorex/core/src/lib/dateTime/datetime.pipe.ts","../../projects/acorex/core/src/lib/dateTime/datetime.module.ts","../../projects/acorex/core/src/lib/dateTime/georgian.calendar.ts","../../projects/acorex/core/src/lib/translation/translator.ts","../../projects/acorex/core/src/lib/translation/translator.pipe.ts","../../projects/acorex/core/src/lib/translation/translation.module.ts","../../../../projects/acorex/core/src/acorex-core.ts"],"sourcesContent":["// @dynamic\r\nexport class AXObjectUtil {\r\n static deepJSONClone(obj: any): any {\r\n return obj ? JSON.parse(JSON.stringify(obj)) : null;\r\n }\r\n\r\n static deepCopy(obj) {\r\n let copy;\r\n // Handle the 3 simple types, and null or undefined\r\n if (null == obj || 'object' !== typeof obj) { return obj; }\r\n // Handle Date\r\n if (obj instanceof Date) {\r\n copy = new Date();\r\n copy.setTime(obj.getTime());\r\n return copy;\r\n }\r\n // Handle Array\r\n if (obj instanceof Array) {\r\n copy = [];\r\n for (let i = 0, len = obj.length; i < len; i++) {\r\n copy[i] = AXObjectUtil.deepCopy(obj[i]);\r\n }\r\n return copy;\r\n }\r\n // Handle Object\r\n if (obj instanceof Object) {\r\n copy = {};\r\n for (const attr in obj) {\r\n if (obj.hasOwnProperty(attr)) { copy[attr] = AXObjectUtil.deepCopy(obj[attr]); }\r\n }\r\n return copy;\r\n }\r\n throw new Error('Unable to copy obj! Its type isn\\'t supported.');\r\n }\r\n\r\n static fetchProp(obj, prop: string) {\r\n if (typeof obj === 'undefined') {\r\n return false;\r\n }\r\n const index = prop.indexOf('.');\r\n\r\n if (index > -1) {\r\n return AXObjectUtil.fetchProp(obj[prop.substring(0, index)], prop.substr(index + 1));\r\n }\r\n\r\n return obj[prop];\r\n }\r\n\r\n static getPropByPath(obj, path, defaultVal?) {\r\n path = path\r\n .replace(/\\[/g, '.')\r\n .replace(/]/g, '')\r\n .split('.');\r\n\r\n path.forEach((level) => {\r\n if (obj) {\r\n obj = obj[level];\r\n }\r\n });\r\n\r\n if (obj === undefined) {\r\n return defaultVal;\r\n }\r\n return obj;\r\n }\r\n\r\n static setPropByPath(obj, path, value) {\r\n if (Object(obj) !== obj) { return obj; } // When obj is not an object\r\n // If not yet an array, get the keys from the string-path\r\n if (!Array.isArray(path)) { path = path.toString().match(/[^.[\\]]+/g) || []; }\r\n path.slice(0, -1).reduce((a, c, i) => // Iterate all of them except the last one\r\n Object(a[c]) === a[c] // Does the key exist and is its value an object?\r\n // Yes: then follow that path\r\n ? a[c]\r\n // No: create the key. Is the next key a potential array-index?\r\n : a[c] = Math.abs(path[i + 1]) >> 0 === +path[i + 1]\r\n ? [] // Yes: assign a new array object\r\n : {}, // No: assign a new plain object\r\n obj)[path[path.length - 1]] = value; // Finally assign the value to the last key\r\n return obj; // Return the top-level object to allow chaining\r\n }\r\n}","import { Subject, Observable } from 'rxjs';\r\nimport { AXObjectUtil } from '../utils/object-util';\r\n\r\n// @dynamic\r\nexport class AXConfig {\r\n private static dataModel: any = {};\r\n private static dataChangeSubject = new Subject<any>();\r\n\r\n\r\n static get onChange(): Observable<any> {\r\n return AXConfig.dataChangeSubject.asObservable();\r\n }\r\n\r\n static set(config: any): any;\r\n static set(path: string, value?: any): void;\r\n static set(arg1?: any, arg2?: any) {\r\n\r\n if (arg1 && typeof arg1 == 'string') {\r\n AXObjectUtil.setPropByPath(AXConfig.dataModel, arg1, arg2);\r\n AXConfig.dataChangeSubject.next(AXConfig.dataModel);\r\n return;\r\n }\r\n if (arg1 && typeof arg1 == 'object') {\r\n Object.assign(AXConfig.dataModel, arg1);\r\n AXConfig.dataChangeSubject.next(AXConfig.dataModel);\r\n return;\r\n }\r\n if (!arg1 && !arg2) {\r\n return AXConfig.dataChangeSubject.asObservable();\r\n }\r\n }\r\n\r\n static get(path: string, defaultValue?: any): any {\r\n return AXObjectUtil.getPropByPath(AXConfig.dataModel, path) || defaultValue;\r\n }\r\n}","import { AXConfig } from '../config/configs';\r\n\r\n\r\nexport const AX_CALENDARS: any[] = [\r\n {\r\n name: 'gregorian',\r\n type: 'GeorgianCalendar'\r\n },\r\n {\r\n name: 'jalali',\r\n type: 'JalaliCalendar'\r\n }\r\n];\r\nexport type TimeUnit =\r\n | 'second'\r\n | 'minute'\r\n | 'hour'\r\n | 'day'\r\n | 'month'\r\n | 'year'\r\n | 'week';\r\n\r\nexport interface AXCalendar {\r\n monthNames: string[];\r\n\r\n monthShortNames: string[];\r\n\r\n dayNames: string[];\r\n\r\n dayShortNames: string[];\r\n\r\n name(): string;\r\n\r\n dayInMonth(date: Date): number;\r\n\r\n dayOfYear(date: Date): number;\r\n\r\n dayInWeek(date: Date): number;\r\n\r\n year(date: Date): number;\r\n\r\n monthOfYear(date: Date): number;\r\n\r\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime;\r\n\r\n set(date: Date, unit: TimeUnit, value: number): AXDateTime;\r\n\r\n startOf(date: Date, unit: TimeUnit): AXDateTime;\r\n\r\n endOf(date: Date, unit: TimeUnit): AXDateTime;\r\n}\r\n\r\n// @dynamic\r\nexport class AXDateTime {\r\n static convert(\r\n value: any,\r\n calendar: string = AXConfig.get('dateTime.type') || 'gregorian'\r\n ): AXDateTime {\r\n let date: AXDateTime;\r\n if (typeof value === 'string' || value instanceof String) {\r\n date = new AXDateTime(value as string, calendar);\r\n } else if (value instanceof Date) {\r\n date = new AXDateTime(value as Date, calendar);\r\n } else if (value instanceof AXDateTime) {\r\n date = new AXDateTime(value.date, calendar);\r\n }\r\n return date;\r\n }\r\n\r\n private _date: Date;\r\n get date(): Date {\r\n return this._date;\r\n }\r\n\r\n private _calendar: AXCalendar;\r\n get calendar(): AXCalendar {\r\n return this._calendar;\r\n }\r\n\r\n constructor(\r\n value: Date | string = new Date(),\r\n calendar: string | AXCalendar = AXConfig.get('dateTime.type') || 'gregorian'\r\n ) {\r\n this._calendar =\r\n typeof calendar == 'string'\r\n ? eval(`new ${AX_CALENDARS.find((c) => c.name == calendar).type}()`)\r\n : calendar;\r\n if (value instanceof Date) {\r\n this._date = value as Date;\r\n } else {\r\n this._date = new Date(value);\r\n }\r\n }\r\n\r\n clone(): AXDateTime {\r\n return new AXDateTime(this.date, this.calendar.name());\r\n }\r\n\r\n get dayInMonth(): number {\r\n return this._calendar.dayInMonth(this.date);\r\n }\r\n\r\n get dayOfYear(): number {\r\n return this._calendar.dayOfYear(this.date);\r\n }\r\n\r\n get dayInWeek(): number {\r\n return this._calendar.dayInWeek(this.date);\r\n }\r\n\r\n get hour(): number {\r\n return this._date.getHours();\r\n }\r\n\r\n get minute(): number {\r\n return this._date.getMinutes();\r\n }\r\n\r\n get second(): number {\r\n return this._date.getSeconds();\r\n }\r\n\r\n get year(): number {\r\n return this._calendar.year(this.date);\r\n }\r\n\r\n get monthOfYear(): number {\r\n return this._calendar.monthOfYear(this.date);\r\n }\r\n\r\n get month(): AXCalendarMonth {\r\n return new AXCalendarMonth(this);\r\n }\r\n\r\n add(unit: TimeUnit, amount: number): AXDateTime {\r\n return this._calendar.add(this.date, unit, amount);\r\n }\r\n\r\n set(unit: TimeUnit = 'day', value: number): AXDateTime {\r\n return this._calendar.set(this.date, unit, value);\r\n }\r\n\r\n duration(\r\n end: AXDateTime | Date | string,\r\n unit: TimeUnit = 'day'\r\n ): AXTimeSpan {\r\n const range = new AXDateTimeRange(\r\n this,\r\n AXDateTime.convert(end, this.calendar.name())\r\n );\r\n return range.duration();\r\n }\r\n\r\n startOf(unit: TimeUnit = 'day'): AXDateTime {\r\n return this._calendar.startOf(this.date, unit);\r\n }\r\n\r\n endOf(unit: TimeUnit = 'day'): AXDateTime {\r\n return this._calendar.endOf(this.date, unit);\r\n }\r\n\r\n format(\r\n format: string = AXConfig.get('dateTime.shortDateFormat') ||\r\n 'DDD, dd MMM yyyy'\r\n ): string {\r\n format = format.replace('ss', this.pad(this.date.getSeconds(), 2));\r\n format = format.replace('s', this.date.getSeconds().toString());\r\n format = format.replace(\r\n 'dd',\r\n this.pad(this.calendar.dayInMonth(this.date), 2)\r\n );\r\n format = format.replace(\r\n 'd',\r\n this.calendar.dayInMonth(this.date).toString()\r\n );\r\n format = format.replace('mm', this.pad(this.date.getMinutes(), 2));\r\n format = format.replace('m', this.date.getMinutes().toString());\r\n format = format.replace(\r\n 'MMMM',\r\n this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1]\r\n );\r\n format = format.replace(\r\n 'MMM',\r\n this.calendar.monthShortNames[this.calendar.monthOfYear(this.date) - 1]\r\n );\r\n format = format.replace(\r\n 'MM',\r\n this.pad(this.calendar.monthOfYear(this.date), 2)\r\n );\r\n format = format.replace(\r\n /M(?![ao])/,\r\n this.calendar.monthOfYear(this.date).toString()\r\n );\r\n format = format.replace(\r\n 'DDDD',\r\n this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1]\r\n );\r\n format = format.replace(\r\n 'DDD',\r\n this.calendar.dayShortNames[this.calendar.dayInWeek(this.date) - 1]\r\n );\r\n format = format.replace(\r\n /D(?!e)/,\r\n this.calendar.dayNames[this.calendar.dayInWeek(this.date) - 1].substring(\r\n 0,\r\n 3\r\n )\r\n );\r\n format = format.replace('yyyy', this.calendar.year(this.date).toString());\r\n format = format.replace('YYYY', this.calendar.year(this.date).toString());\r\n format = format.replace(\r\n 'yy',\r\n this.calendar.year(this.date).toString().substring(2)\r\n );\r\n format = format.replace(\r\n 'YY',\r\n this.calendar.year(this.date).toString().substring(2)\r\n );\r\n format = format.replace('HH', this.pad(this.date.getHours(), 2));\r\n format = format.replace('H', this.date.getHours().toString());\r\n return format;\r\n }\r\n\r\n private pad(n, width, z = '0') {\r\n n = n + '';\r\n return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\r\n }\r\n\r\n toString(): string {\r\n return this.format();\r\n }\r\n\r\n equal(value: any, unit: TimeUnit = 'day') {\r\n return this.compaire(value, unit) == 0;\r\n }\r\n\r\n compaire(value: any, unit: TimeUnit = 'day') {\r\n // TODO:\r\n const val = AXDateTime.convert(value);\r\n if (this.date == val.date) {\r\n return 0;\r\n } else if (this.date > val.date) {\r\n return 1;\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n convert(calendar: string) {\r\n return AXDateTime.convert(this, calendar);\r\n }\r\n}\r\n\r\nexport class AXCalendarMonth {\r\n private _range: AXDateTimeRange;\r\n public get range(): AXDateTimeRange {\r\n return this._range;\r\n }\r\n public set range(v: AXDateTimeRange) {\r\n this._range = v;\r\n }\r\n\r\n constructor(date: AXDateTime) {\r\n this.index = date.date.getMonth();\r\n this.name = date.format('MMMM');\r\n this.range = new AXDateTimeRange(\r\n new AXDateTime(date.startOf('month').date, date.calendar),\r\n new AXDateTime(date.endOf('month').date, date.calendar)\r\n );\r\n }\r\n\r\n private readonly index: number;\r\n private readonly name: string;\r\n}\r\n\r\nexport interface AXTimeSpanTotal {\r\n miliseconds: number;\r\n seconds: number;\r\n minutes: number;\r\n hours: number;\r\n days: number;\r\n weeks: number;\r\n months: number;\r\n years: number;\r\n}\r\n\r\nexport interface AXTimeSpan {\r\n miliseconds: number;\r\n seconds: number;\r\n minutes: number;\r\n hours: number;\r\n days: number;\r\n months: number;\r\n years: number;\r\n total: AXTimeSpanTotal;\r\n}\r\n\r\nexport class AXDateTimeRange {\r\n constructor(public startTime: AXDateTime, public endTime: AXDateTime) {}\r\n\r\n duration(): AXTimeSpan {\r\n const result: AXTimeSpan = {\r\n miliseconds: 0,\r\n seconds: 0,\r\n minutes: 0,\r\n hours: 0,\r\n days: 0,\r\n months: 0,\r\n years: 0,\r\n total: {\r\n miliseconds: 0,\r\n seconds: 0,\r\n minutes: 0,\r\n hours: 0,\r\n days: 0,\r\n weeks: 0,\r\n months: 0,\r\n years: 0,\r\n },\r\n };\r\n\r\n const one_second = 1000;\r\n const one_min = one_second * 60;\r\n const one_hour = one_min * 60;\r\n const one_day = one_hour * 24;\r\n const one_week = one_day * 7;\r\n const one_year = 365.25 * one_day;\r\n const one_month = one_year / 12;\r\n const startTime = this.startTime.date.getTime();\r\n const endTime = this.endTime.date.getTime();\r\n const diff = Math.abs(endTime - startTime);\r\n //\r\n result.total.miliseconds = diff;\r\n result.total.seconds = Number((diff / one_second).toFixed(2));\r\n result.total.minutes = Number((diff / one_min).toFixed(2));\r\n result.total.hours = Number((diff / one_hour).toFixed(2));\r\n result.total.days = Number((diff / one_day).toFixed(2));\r\n result.total.weeks = Number((diff / one_week).toFixed(2));\r\n //\r\n // let months = (this.endTime.year - this.startTime.year) * 12;\r\n // months += this.endTime.monthOfYear - this.startTime.monthOfYear + 1;\r\n // if (this.endTime.dayOfYear < this.startTime.dayOfYear) {\r\n // months--;\r\n // }\r\n // result.total.months = Math.abs(months);\r\n // TODO: review\r\n result.total.months = Number((diff / one_month).toFixed(2));\r\n result.total.years = Number((diff / one_year).toFixed(2));\r\n //\r\n result.miliseconds = result.total.miliseconds % 1000;\r\n result.seconds = Number((result.total.seconds % 60).toFixed(0));\r\n result.minutes = Number((result.total.minutes % 60).toFixed(0));\r\n result.hours = Number((result.total.hours % 24).toFixed(0));\r\n // TODO: review\r\n result.days = Number((result.total.days % 30.4).toFixed(0));\r\n result.months = Number((result.total.months % 12).toFixed(0));\r\n result.years = Number(result.total.years.toFixed(0));\r\n return result;\r\n }\r\n\r\n enumurate(unit: TimeUnit = 'day'): AXDateTime[] {\r\n // TODO: ??\r\n return [];\r\n }\r\n\r\n includes(value: AXDateTime, unit: TimeUnit = 'day'): boolean {\r\n // TODO: ??\r\n return true;\r\n }\r\n\r\n // getViewCompaire(view) {\r\n // switch (view) {\r\n // case 'day':\r\n // return 'YMD';\r\n // case 'month':\r\n // return 'YM';\r\n // case 'year':\r\n // return 'Y';\r\n // }\r\n // }\r\n}\r\n","import { PipeTransform, Pipe } from '@angular/core';\r\nimport { AXDateTime } from './datetime.class';\r\n\r\n@Pipe({ name: 'axDate' })\r\nexport class AXDateTimePipe implements PipeTransform {\r\n constructor() { }\r\n\r\n transform(value: any, format?: string, calendar?: string): string {\r\n if (value == null) {\r\n return '';\r\n }\r\n const date: AXDateTime = value instanceof AXDateTime ? value.clone() : AXDateTime.convert(value, calendar);\r\n if (!format) {\r\n return date.toString();\r\n }\r\n else {\r\n return date.format(format);\r\n }\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { AXDateTimePipe } from './datetime.pipe';\r\n\r\n\r\n@NgModule({\r\n imports: [],\r\n exports: [AXDateTimePipe],\r\n declarations: [AXDateTimePipe],\r\n providers: [],\r\n})\r\nexport class AXDateTimeModule { }\r\n","import { AXCalendar, AXDateTime, TimeUnit } from \"./datetime.class\";\r\n\r\nexport class GeorgianCalendar implements AXCalendar {\r\n\r\n monthNames = [\r\n \"January\", \"February\", \"March\",\r\n \"April\", \"May\", \"June\", \"July\",\r\n \"August\", \"September\", \"October\",\r\n \"November\", \"December\"\r\n ];\r\n\r\n monthShortNames = [\r\n \"Jan\", \"Feb\", \"Mar\",\r\n \"Apr\", \"May\", \"Jun\", \"Jul\",\r\n \"Aug\", \"Sep\", \"Oct\",\r\n \"Nov\", \"Dec\"\r\n ];\r\n\r\n dayNames = [\r\n \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\r\n \"Thursday\", \"Friday\", \"Saturday\"\r\n ];\r\n\r\n dayShortNames = [\r\n \"Sun\", \"Mon\", \"Tue\", \"Wed\",\r\n \"Thu\", \"Fri\", \"Sat\"\r\n ];\r\n\r\n name(): string {\r\n return 'gregorian'\r\n }\r\n\r\n dayInMonth(date: Date): number {\r\n return date.getDate();\r\n }\r\n\r\n dayOfYear(date: Date): number {\r\n const start = +new Date(date.getFullYear(), 0, 0);\r\n const diff = +date - start;\r\n const oneDay = 1000 * 60 * 60 * 24;\r\n return Math.floor(diff / oneDay);\r\n }\r\n\r\n dayInWeek(date: Date): number {\r\n return date.getDay() + 1;\r\n }\r\n\r\n year(date: Date): number {\r\n return date.getFullYear();\r\n }\r\n\r\n monthOfYear(date: Date): number {\r\n return date.getMonth() + 1;\r\n }\r\n\r\n add(date: Date, unit: TimeUnit, amount: number): AXDateTime {\r\n let value = date.valueOf();\r\n switch (unit) {\r\n case 'second':\r\n value += 1000 * amount;\r\n break\r\n case 'minute':\r\n value += 60000 * amount;\r\n break\r\n case 'hour':\r\n value += 3600000 * amount;\r\n break\r\n case 'month':\r\n const v = new Date(value);\r\n var mo = date.getMonth();\r\n var yr = date.getFullYear();\r\n mo = (mo + amount) % 12;\r\n if (0 > mo) {\r\n yr += (date.getMonth() + amount - mo - 12) / 12;\r\n mo += 12;\r\n }\r\n else\r\n yr += ((date.getMonth() + amount - mo) / 12);\r\n v.setMonth(mo);\r\n v.setFullYear(yr);\r\n value = v.valueOf();\r\n break\r\n case 'week':\r\n value += 7 * 86400000 * amount;\r\n break\r\n case 'year':\r\n const yv = new Date(value);\r\n yv.setFullYear(yv.getFullYear() + amount);\r\n value = v.valueOf();\r\n break\r\n case 'day':\r\n default:\r\n value += 86400000 * amount;\r\n }\r\n return new AXDateTime(new Date(value), this.name());\r\n }\r\n\r\n set(date: Date, unit: TimeUnit, value: number): AXDateTime {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n\r\n startOf(date: Date, unit: TimeUnit): AXDateTime {\r\n const clone = new Date(date.valueOf());\r\n switch (unit) {\r\n case 'second':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 0);\r\n return new AXDateTime(clone, this.name());\r\n case 'minute':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), 0, 0);\r\n return new AXDateTime(clone, this.name());\r\n case 'hour':\r\n clone.setHours(clone.getHours(), 0, 0, 0);\r\n return new AXDateTime(clone, this.name());\r\n default:\r\n case 'day':\r\n clone.setHours(0, 0, 0, 0);\r\n return new AXDateTime(clone, this.name());\r\n case \"week\":\r\n const diff = clone.getDate() - clone.getDay() + (clone.getDay() === 0 ? -6 : 1);\r\n clone.setDate(diff)\r\n return new AXDateTime(clone, this.name()).startOf('day');\r\n case \"month\":\r\n clone.setDate(1)\r\n return new AXDateTime(clone, this.name()).startOf('day');\r\n case \"year\":\r\n clone.setMonth(0);\r\n clone.setDate(1);\r\n return new AXDateTime(clone, this.name()).startOf('day');\r\n }\r\n }\r\n\r\n endOf(date: Date, unit: TimeUnit): AXDateTime {\r\n const clone = new Date(date.valueOf());\r\n switch (unit) {\r\n case 'second':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), clone.getSeconds(), 999);\r\n return new AXDateTime(clone, this.name());\r\n case 'minute':\r\n clone.setHours(clone.getHours(), clone.getMinutes(), 59, 999);\r\n return new AXDateTime(clone, this.name());\r\n case 'hour':\r\n clone.setHours(clone.getHours(), 59, 59, 999);\r\n return new AXDateTime(clone, this.name());\r\n default:\r\n case 'day':\r\n clone.setHours(23, 59, 59, 999);\r\n return new AXDateTime(clone, this.name());\r\n case 'week':\r\n return this.startOf(date, 'week').add('day', 6).endOf('day');\r\n case 'month':\r\n return new AXDateTime(new Date(date.getFullYear(), date.getMonth() + 1, 0), this.name()).endOf('day');\r\n case \"year\":\r\n clone.setMonth(11);\r\n return new AXDateTime(clone, this.name()).endOf('month');\r\n }\r\n }\r\n}","import { Subject, Observable } from 'rxjs';\r\nimport merge from 'lodash-es/merge';\r\nimport { AXObjectUtil } from '../utils/object-util';\r\n\r\n// @dynamic\r\nexport class AXTranslator {\r\n private static lang: string = 'en';\r\n private static dataChangeSubject = new Subject<any>();\r\n\r\n\r\n static get onChange(): Observable<any> {\r\n return AXTranslator.dataChangeSubject.asObservable();\r\n }\r\n\r\n public static load(lang: string, value: any) {\r\n if (typeof value === 'object') {\r\n if (!AXTranslator[`__data__${lang}`]) {\r\n AXTranslator[`__data__${lang}`] = {};\r\n }\r\n AXTranslator[`__data__${lang}`] = merge(AXTranslator[`__data__${lang}`], value);\r\n }\r\n }\r\n\r\n public static use(lang: string) {\r\n AXTranslator.lang = lang;\r\n }\r\n\r\n public static get(key: string, lang?: string): string {\r\n return AXObjectUtil.getPropByPath(AXTranslator[`__data__${lang || AXTranslator.lang}`], key) || key;\r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { AXTranslator } from './translator';\r\n\r\n@Pipe({ name: 'trans', pure: true })\r\nexport class AXTranslatorPipe implements PipeTransform {\r\n transform(value: string, lang?: string): string {\r\n return AXTranslator.get(value, lang);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { AXTranslatorPipe } from './translator.pipe';\r\n\r\n@NgModule({\r\n imports: [],\r\n exports: [AXTranslatorPipe],\r\n declarations: [AXTranslatorPipe],\r\n providers: [],\r\n})\r\nexport class AXTranslationModule {\r\n \r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|