@osovitny/anatoly 3.17.159 → 3.19.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/fesm2022/osovitny-anatoly.mjs +554 -523
- package/fesm2022/osovitny-anatoly.mjs.map +1 -1
- package/lib/billing/utils.d.ts +2 -1
- package/lib/core/converts/convert.d.ts +1 -1
- package/lib/core/guid.d.ts +1 -1
- package/lib/core/is.d.ts +5 -5
- package/lib/ui/components/base/components/component.d.ts +1 -1
- package/lib/ui/components/base/components/edit.component.d.ts +1 -1
- package/lib/ui/components/base/components/enum-edit.component.d.ts +1 -1
- package/lib/ui/components/data-grid/control-panel.component.d.ts +6 -5
- package/lib/ui/components/dropdownlists/country/country.dropdownlist.d.ts +1 -3
- package/lib/ui/components/index.d.ts +1 -1
- package/lib/ui/directives/index.d.ts +1 -1
- package/lib/ui/directives/replacer/replacer.base.directive.d.ts +1 -1
- package/lib/ui/forms/index.d.ts +1 -1
- package/lib/ui/pipes/index.d.ts +1 -1
- package/package.json +58 -60
- package/esm2022/lib/anatoly.module.mjs +0 -62
- package/esm2022/lib/billing/billing.module.mjs +0 -81
- package/esm2022/lib/billing/components/buttons/buyaccess-button.component.mjs +0 -104
- package/esm2022/lib/billing/components/buttons/subscribe-plan-button.component.mjs +0 -113
- package/esm2022/lib/billing/components/exports.mjs +0 -28
- package/esm2022/lib/billing/components/index.mjs +0 -31
- package/esm2022/lib/billing/components/order-summary/order-summary.component.mjs +0 -154
- package/esm2022/lib/billing/components/payment-methods/payment-methods.component.mjs +0 -106
- package/esm2022/lib/billing/components/payment-options/payment-options.component.mjs +0 -97
- package/esm2022/lib/billing/components/pm/braintree/braintree.component.mjs +0 -155
- package/esm2022/lib/billing/components/pm/paypal/paypal-button.component.mjs +0 -159
- package/esm2022/lib/billing/components/pm/paypal/paypal-subscribe-button.component.mjs +0 -149
- package/esm2022/lib/billing/components/pm/paypal/paypal.component.mjs +0 -317
- package/esm2022/lib/billing/components/pm/stripe/stripe.component.mjs +0 -109
- package/esm2022/lib/billing/exports.mjs +0 -19
- package/esm2022/lib/billing/models/paypal-models.mjs +0 -16
- package/esm2022/lib/billing/services/payments.service.mjs +0 -170
- package/esm2022/lib/billing/services/paypal-script.service.mjs +0 -90
- package/esm2022/lib/billing/utils.mjs +0 -28
- package/esm2022/lib/core/browser.mjs +0 -24
- package/esm2022/lib/core/consts/app-settings.mjs +0 -55
- package/esm2022/lib/core/consts/core-settings.mjs +0 -29
- package/esm2022/lib/core/consts/formats.mjs +0 -27
- package/esm2022/lib/core/consts/ga.mjs +0 -26
- package/esm2022/lib/core/consts/storageKeys.mjs +0 -23
- package/esm2022/lib/core/converts/convert.mjs +0 -103
- package/esm2022/lib/core/converts/dateConvert.mjs +0 -60
- package/esm2022/lib/core/converts/tz/tzParseTimezone.mjs +0 -122
- package/esm2022/lib/core/converts/tz/tzTokenizeDate.mjs +0 -101
- package/esm2022/lib/core/converts/xmlFormatter.mjs +0 -34
- package/esm2022/lib/core/core.module.mjs +0 -112
- package/esm2022/lib/core/dom.mjs +0 -153
- package/esm2022/lib/core/enums/billing.mjs +0 -56
- package/esm2022/lib/core/enums/enums.mjs +0 -35
- package/esm2022/lib/core/enums/index.mjs +0 -17
- package/esm2022/lib/core/exports.mjs +0 -67
- package/esm2022/lib/core/go/apps-go.service.mjs +0 -88
- package/esm2022/lib/core/go/go.service.mjs +0 -86
- package/esm2022/lib/core/guards/once-import.guard.mjs +0 -21
- package/esm2022/lib/core/guards/starter.guard.mjs +0 -46
- package/esm2022/lib/core/guid.mjs +0 -22
- package/esm2022/lib/core/interceptors/httpInterceptor.mjs +0 -161
- package/esm2022/lib/core/is.mjs +0 -98
- package/esm2022/lib/core/localization/localization.module.mjs +0 -45
- package/esm2022/lib/core/localization/localization.service.mjs +0 -164
- package/esm2022/lib/core/localization/localize.pipe.mjs +0 -83
- package/esm2022/lib/core/localization/settings.module.mjs +0 -103
- package/esm2022/lib/core/localization/utils.mjs +0 -41
- package/esm2022/lib/core/logging/globalErrorHandler.mjs +0 -41
- package/esm2022/lib/core/logging/logging.service.mjs +0 -40
- package/esm2022/lib/core/models/qs.mjs +0 -17
- package/esm2022/lib/core/notifications/alerts.mjs +0 -116
- package/esm2022/lib/core/notifications/interfaces/notification.mjs +0 -17
- package/esm2022/lib/core/notifications/services/notification-service.mjs +0 -83
- package/esm2022/lib/core/performance/stopwatch.mjs +0 -50
- package/esm2022/lib/core/services/appcontext.service.mjs +0 -186
- package/esm2022/lib/core/services/dm.service.mjs +0 -69
- package/esm2022/lib/core/services/google-analytics.service.mjs +0 -75
- package/esm2022/lib/core/services/idle.service.mjs +0 -77
- package/esm2022/lib/core/services/loading.service.mjs +0 -67
- package/esm2022/lib/core/services/script.service.mjs +0 -77
- package/esm2022/lib/core/services/starter.service.mjs +0 -85
- package/esm2022/lib/core/services/web-storage.service.mjs +0 -66
- package/esm2022/lib/core/subs.mjs +0 -31
- package/esm2022/lib/core/utils/qsutils.mjs +0 -84
- package/esm2022/lib/core/utils/utils.mjs +0 -112
- package/esm2022/lib/data/base/api.service.mjs +0 -94
- package/esm2022/lib/data/base/grid/grid-edit.service.mjs +0 -80
- package/esm2022/lib/data/base/grid/grid-read.service.mjs +0 -60
- package/esm2022/lib/data/data.module.mjs +0 -66
- package/esm2022/lib/data/exports.mjs +0 -29
- package/esm2022/lib/data/services/billing/currencies-api.service.mjs +0 -41
- package/esm2022/lib/data/services/billing/currencies-storage.service.mjs +0 -92
- package/esm2022/lib/data/services/billing/discountcodes-api.service.mjs +0 -37
- package/esm2022/lib/data/services/billing/payments-api.service.mjs +0 -64
- package/esm2022/lib/data/services/billing/subscriptions-api.service.mjs +0 -61
- package/esm2022/lib/data/services/billing/transactions-api.service.mjs +0 -43
- package/esm2022/lib/data/services/core-api.service.mjs +0 -44
- package/esm2022/lib/data/services/emails-api.service.mjs +0 -47
- package/esm2022/lib/external/fa.module.mjs +0 -45
- package/esm2022/lib/external/kendo.module.mjs +0 -179
- package/esm2022/lib/iam/b2c/b2c.mjs +0 -40
- package/esm2022/lib/iam/b2c/consts.mjs +0 -25
- package/esm2022/lib/iam/b2c/index.mjs +0 -21
- package/esm2022/lib/iam/configs.mjs +0 -109
- package/esm2022/lib/iam/consts.mjs +0 -22
- package/esm2022/lib/iam/exports.mjs +0 -22
- package/esm2022/lib/iam/guards/admin.guard.mjs +0 -46
- package/esm2022/lib/iam/guards/authentication.guard.mjs +0 -30
- package/esm2022/lib/iam/guards/index.mjs +0 -20
- package/esm2022/lib/iam/iam-pages.module.mjs +0 -57
- package/esm2022/lib/iam/iam-pages.routes.mjs +0 -45
- package/esm2022/lib/iam/iam.module.mjs +0 -84
- package/esm2022/lib/iam/pages/signin.page.mjs +0 -40
- package/esm2022/lib/iam/pages/signout.page.mjs +0 -40
- package/esm2022/lib/iam/pages/signup.page.mjs +0 -40
- package/esm2022/lib/iam/redirect.mjs +0 -29
- package/esm2022/lib/iam/services/auth.service.mjs +0 -436
- package/esm2022/lib/iam/storage.mjs +0 -42
- package/esm2022/lib/iam/utils.mjs +0 -49
- package/esm2022/lib/ui/components/base/components/component.mjs +0 -76
- package/esm2022/lib/ui/components/base/components/edit.component.mjs +0 -146
- package/esm2022/lib/ui/components/base/components/enum-edit.component.mjs +0 -92
- package/esm2022/lib/ui/components/base/dialog.mjs +0 -71
- package/esm2022/lib/ui/components/base/list.mjs +0 -100
- package/esm2022/lib/ui/components/base/pages/edit.page.mjs +0 -32
- package/esm2022/lib/ui/components/base/pages/page.mjs +0 -32
- package/esm2022/lib/ui/components/base/pages/paged.page.mjs +0 -68
- package/esm2022/lib/ui/components/card/card-body.component.mjs +0 -37
- package/esm2022/lib/ui/components/card/card-footer.component.mjs +0 -37
- package/esm2022/lib/ui/components/card/card-header.component.mjs +0 -51
- package/esm2022/lib/ui/components/card/card.component.mjs +0 -41
- package/esm2022/lib/ui/components/check-icon/check-icon.component.mjs +0 -43
- package/esm2022/lib/ui/components/copy-2-clipboard/copy-2-clipboard.component.mjs +0 -57
- package/esm2022/lib/ui/components/data-grid/control-panel.component.mjs +0 -201
- package/esm2022/lib/ui/components/datapager/datapager.component.mjs +0 -95
- package/esm2022/lib/ui/components/dropdownlists/country/country.dropdownlist.mjs +0 -96
- package/esm2022/lib/ui/components/dropdownlists/moderationstatus/moderationstatus.dropdownlist.mjs +0 -88
- package/esm2022/lib/ui/components/dropdownlists/publishstatus/publishstatus.dropdownlist.mjs +0 -88
- package/esm2022/lib/ui/components/dropdownlists/timezone/timezone.dropdownlist.mjs +0 -112
- package/esm2022/lib/ui/components/exports.mjs +0 -53
- package/esm2022/lib/ui/components/feature-will-be-ready/feature-will-be-ready.component.mjs +0 -55
- package/esm2022/lib/ui/components/html-editor/base-editor.component.mjs +0 -94
- package/esm2022/lib/ui/components/html-editor/defaultoptions.mjs +0 -87
- package/esm2022/lib/ui/components/html-editor/html-editor.component.mjs +0 -114
- package/esm2022/lib/ui/components/identity/signin-button.component.mjs +0 -105
- package/esm2022/lib/ui/components/identity/signout-button.component.mjs +0 -105
- package/esm2022/lib/ui/components/identity/signup-button.component.mjs +0 -105
- package/esm2022/lib/ui/components/index.mjs +0 -57
- package/esm2022/lib/ui/components/no-mobile-support/no-mobile-support.component.mjs +0 -45
- package/esm2022/lib/ui/components/nodata/nodata.component.mjs +0 -76
- package/esm2022/lib/ui/components/spinners/loading/loading.component.mjs +0 -53
- package/esm2022/lib/ui/components/spinners/pagespinner/pagespinner.component.mjs +0 -85
- package/esm2022/lib/ui/components/spinners/pagespinner/spinkits.mjs +0 -12
- package/esm2022/lib/ui/components/urlslug/urlslug.component.mjs +0 -130
- package/esm2022/lib/ui/components/you-agree-to-our-terms/you-agree-to-our-terms.component.mjs +0 -63
- package/esm2022/lib/ui/dialogs/contact-us/contact-us.dialog.mjs +0 -78
- package/esm2022/lib/ui/dialogs/exports.mjs +0 -16
- package/esm2022/lib/ui/dialogs/index.mjs +0 -19
- package/esm2022/lib/ui/directives/exports.mjs +0 -19
- package/esm2022/lib/ui/directives/hover.directive.mjs +0 -50
- package/esm2022/lib/ui/directives/index.mjs +0 -22
- package/esm2022/lib/ui/directives/native-element.directive.mjs +0 -37
- package/esm2022/lib/ui/directives/replacer/a-replacer.directive.mjs +0 -48
- package/esm2022/lib/ui/directives/replacer/image-replacer.directive.mjs +0 -44
- package/esm2022/lib/ui/directives/replacer/replacer.base.directive.mjs +0 -44
- package/esm2022/lib/ui/exports.mjs +0 -22
- package/esm2022/lib/ui/forms/components/address/address.component.mjs +0 -240
- package/esm2022/lib/ui/forms/components/company/company.component.mjs +0 -138
- package/esm2022/lib/ui/forms/contact-us/contact-us.mjs +0 -213
- package/esm2022/lib/ui/forms/exports.mjs +0 -20
- package/esm2022/lib/ui/forms/index.mjs +0 -21
- package/esm2022/lib/ui/pipes/exports.mjs +0 -19
- package/esm2022/lib/ui/pipes/filesize.pipe.mjs +0 -42
- package/esm2022/lib/ui/pipes/index.mjs +0 -22
- package/esm2022/lib/ui/pipes/replace-text.pipe.mjs +0 -37
- package/esm2022/lib/ui/pipes/safeHtml.pipe.mjs +0 -34
- package/esm2022/lib/ui/ui.module.mjs +0 -122
- package/esm2022/lib/ui/validation/exports.mjs +0 -19
- package/esm2022/lib/ui/validation/form-validation-summary.component.mjs +0 -90
- package/esm2022/lib/ui/validation/index.mjs +0 -21
- package/esm2022/lib/ui/validation/item-validation-summary.component.mjs +0 -53
- package/esm2022/lib/ui/validation/validation-summary.component.mjs +0 -124
- package/esm2022/osovitny-anatoly.mjs +0 -5
- package/esm2022/public-api.mjs +0 -22
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<file>
|
|
3
|
-
Project:
|
|
4
|
-
@osovitny/anatoly
|
|
5
|
-
|
|
6
|
-
Authors:
|
|
7
|
-
Vadim Osovitny vadim.osovitny@osovitny.com
|
|
8
|
-
Anatoly Osovitny anatoly.osovitny@osovitny.com
|
|
9
|
-
|
|
10
|
-
Created:
|
|
11
|
-
25 March 2020
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { HttpResponse } from '@angular/common/http';
|
|
18
|
-
import { Injectable } from '@angular/core';
|
|
19
|
-
// RxJS
|
|
20
|
-
import { mergeMap, tap } from 'rxjs/operators';
|
|
21
|
-
//App
|
|
22
|
-
import { AppCoreSettings } from '../consts/core-settings';
|
|
23
|
-
import { getCurrentApp } from '../consts/app-settings';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "../../iam/exports";
|
|
26
|
-
import * as i2 from "../services/loading.service";
|
|
27
|
-
import * as i3 from "../logging/logging.service";
|
|
28
|
-
export class AnatolyHttpInterceptor {
|
|
29
|
-
constructor(authService, loadingService, logger) {
|
|
30
|
-
this.authService = authService;
|
|
31
|
-
this.loadingService = loadingService;
|
|
32
|
-
this.logger = logger;
|
|
33
|
-
this.longRunningExceptions = [
|
|
34
|
-
'chunkupload',
|
|
35
|
-
];
|
|
36
|
-
this.authorizationTokenExceptions = [
|
|
37
|
-
'assets',
|
|
38
|
-
'dist'
|
|
39
|
-
];
|
|
40
|
-
this.autoCDNSASTokenUrls = [
|
|
41
|
-
'chunks',
|
|
42
|
-
'l10n'
|
|
43
|
-
];
|
|
44
|
-
this.externalSiteUrls = [
|
|
45
|
-
'azurewebsites.net'
|
|
46
|
-
];
|
|
47
|
-
}
|
|
48
|
-
handleHttpRequest(request, next, loadingRequired) {
|
|
49
|
-
return next.handle(request).pipe(tap({
|
|
50
|
-
next: (event) => {
|
|
51
|
-
if (event instanceof HttpResponse) {
|
|
52
|
-
this.onRequestEnd(loadingRequired);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
error: (err) => {
|
|
56
|
-
this.onRequestEnd(loadingRequired);
|
|
57
|
-
this.logger.error(err);
|
|
58
|
-
}
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
setQS(url, value) {
|
|
62
|
-
if (url.indexOf('?') > -1) {
|
|
63
|
-
return url + '&' + value;
|
|
64
|
-
}
|
|
65
|
-
return url + '?' + value;
|
|
66
|
-
}
|
|
67
|
-
intercept(req, next) {
|
|
68
|
-
let isCDNEnabled = AppCoreSettings.IsCDNEnabled;
|
|
69
|
-
let cdnSasToken = AppCoreSettings.CDNSASToken;
|
|
70
|
-
let isLoadingFreezed = this.loadingService.isFreezed;
|
|
71
|
-
let loadingRequired = !isLoadingFreezed;
|
|
72
|
-
let url = req.url.toLowerCase();
|
|
73
|
-
let originalUrl = req.url;
|
|
74
|
-
let isExternalSite = false;
|
|
75
|
-
let authorizationTokenRequired = true;
|
|
76
|
-
//1. longRunning tasks
|
|
77
|
-
if (!isLoadingFreezed) {
|
|
78
|
-
for (const i of this.longRunningExceptions) {
|
|
79
|
-
if (url.indexOf(this.longRunningExceptions[i]) >= 0) {
|
|
80
|
-
loadingRequired = false;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
//2. Check is site External?
|
|
86
|
-
for (const i of this.externalSiteUrls) {
|
|
87
|
-
if (url.indexOf(this.externalSiteUrls[i]) >= 0) {
|
|
88
|
-
isExternalSite = true;
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
//3. Is Authorization Token Required
|
|
93
|
-
if (isExternalSite) {
|
|
94
|
-
authorizationTokenRequired = false;
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
for (var i = 0; i < this.authorizationTokenExceptions.length; i++) {
|
|
98
|
-
if (url.indexOf(this.authorizationTokenExceptions[i]) >= 0) {
|
|
99
|
-
authorizationTokenRequired = false;
|
|
100
|
-
break;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
//4. appContext
|
|
105
|
-
if (url.indexOf('/appcontext/') > -1) {
|
|
106
|
-
authorizationTokenRequired = this.authService.isUserAuthenticated();
|
|
107
|
-
}
|
|
108
|
-
// Change Url if need it -------------------------------------------->
|
|
109
|
-
let newUrl = originalUrl;
|
|
110
|
-
//5. Check should we add CDN SAS tokens
|
|
111
|
-
if (isCDNEnabled) {
|
|
112
|
-
for (const i of this.autoCDNSASTokenUrls) {
|
|
113
|
-
if (url.indexOf(this.autoCDNSASTokenUrls[i]) >= 0) {
|
|
114
|
-
newUrl = newUrl + cdnSasToken;
|
|
115
|
-
break;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
//6. no caching for API calls
|
|
120
|
-
if (url.indexOf('/api/') > -1 || url.indexOf('api.') > -1) {
|
|
121
|
-
const t = new Date().getTime().toString();
|
|
122
|
-
newUrl = this.setQS(newUrl, 't=' + t);
|
|
123
|
-
}
|
|
124
|
-
//7. set ca
|
|
125
|
-
let app = getCurrentApp();
|
|
126
|
-
newUrl = this.setQS(newUrl, 'ca=' + app.type);
|
|
127
|
-
//8. set new url
|
|
128
|
-
req = req.clone({ url: newUrl });
|
|
129
|
-
req = req.clone({ headers: req.headers.set('Accept', 'application/json') });
|
|
130
|
-
req = req.clone({ headers: req.headers.set('Accept', 'application/text') });
|
|
131
|
-
this.onRequestStart(loadingRequired);
|
|
132
|
-
if (authorizationTokenRequired) {
|
|
133
|
-
return this.authService.getAccessToken().pipe(mergeMap((token) => {
|
|
134
|
-
if (token) {
|
|
135
|
-
req = req.clone({ headers: req.headers.set('Authorization', 'Bearer ' + token) });
|
|
136
|
-
}
|
|
137
|
-
return this.handleHttpRequest(req, next, loadingRequired);
|
|
138
|
-
}));
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
return this.handleHttpRequest(req, next, loadingRequired);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
//Events
|
|
145
|
-
onRequestStart(loadingRequired) {
|
|
146
|
-
if (loadingRequired) {
|
|
147
|
-
this.loadingService.show();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
onRequestEnd(loadingRequired) {
|
|
151
|
-
if (loadingRequired) {
|
|
152
|
-
this.loadingService.hide();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
static { this.ɵfac = function AnatolyHttpInterceptor_Factory(t) { return new (t || AnatolyHttpInterceptor)(i0.ɵɵinject(i1.AuthService), i0.ɵɵinject(i2.LoadingService), i0.ɵɵinject(i3.LoggingService)); }; }
|
|
156
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AnatolyHttpInterceptor, factory: AnatolyHttpInterceptor.ɵfac }); }
|
|
157
|
-
}
|
|
158
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnatolyHttpInterceptor, [{
|
|
159
|
-
type: Injectable
|
|
160
|
-
}], () => [{ type: i1.AuthService }, { type: i2.LoadingService }, { type: i3.LoggingService }], null); })();
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cEludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvaW50ZXJjZXB0b3JzL2h0dHBJbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQXVELFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hHLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTztBQUNQLE9BQU8sRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0MsS0FBSztBQUNMLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBR3ZELE1BQU0sT0FBTyxzQkFBc0I7SUFtQmpDLFlBQ1ksV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsTUFBc0I7UUFGdEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBckJ4QiwwQkFBcUIsR0FBRztZQUNoQyxhQUFhO1NBQ2QsQ0FBQztRQUVRLGlDQUE0QixHQUFHO1lBQ3ZDLFFBQVE7WUFDUixNQUFNO1NBQ1AsQ0FBQztRQUVRLHdCQUFtQixHQUFHO1lBQzlCLFFBQVE7WUFDUixNQUFNO1NBQ1AsQ0FBQztRQUVRLHFCQUFnQixHQUFHO1lBQzNCLG1CQUFtQjtTQUNwQixDQUFDO0lBTUYsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQXlCLEVBQUUsSUFBaUIsRUFBRSxlQUF3QjtRQUM5RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZ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QUNILENBQUM7dUZBckpVLHNCQUFzQjt1RUFBdEIsc0JBQXNCLFdBQXRCLHNCQUFzQjs7aUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbS5vc292aXRueUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seS5vc292aXRueUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDI1IE1hcmNoIDIwMjBcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHtIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIFJ4SlNcclxuaW1wb3J0IHttZXJnZU1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBBcHBDb3JlU2V0dGluZ3MgfSBmcm9tICcuLi9jb25zdHMvY29yZS1zZXR0aW5ncyc7XHJcbmltcG9ydCB7IExvYWRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9hZGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi9sb2dnaW5nL2xvZ2dpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaWFtL2V4cG9ydHMnO1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50QXBwIH0gZnJvbSAnLi4vY29uc3RzL2FwcC1zZXR0aW5ncyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBbmF0b2x5SHR0cEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBwcm90ZWN0ZWQgbG9uZ1J1bm5pbmdFeGNlcHRpb25zID0gW1xyXG4gICAgJ2NodW5rdXBsb2FkJyxcclxuICBdO1xyXG5cclxuICBwcm90ZWN0ZWQgYXV0aG9yaXphdGlvblRva2VuRXhjZXB0aW9ucyA9IFtcclxuICAgICdhc3NldHMnLFxyXG4gICAgJ2Rpc3QnXHJcbiAgXTtcclxuXHJcbiAgcHJvdGVjdGVkIGF1dG9DRE5TQVNUb2tlblVybHMgPSBbXHJcbiAgICAnY2h1bmtzJyxcclxuICAgICdsMTBuJ1xyXG4gIF07XHJcblxyXG4gIHByb3RlY3RlZCBleHRlcm5hbFNpdGVVcmxzID0gW1xyXG4gICAgJ2F6dXJld2Vic2l0ZXMubmV0J1xyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dnaW5nU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVIdHRwUmVxdWVzdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlciwgbG9hZGluZ1JlcXVpcmVkOiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj57XHJcbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZSh0YXAoe1xyXG4gICAgICBuZXh0OiAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUmVxdWVzdEVuZChsb2FkaW5nUmVxdWlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMub25SZXF1ZXN0RW5kKGxvYWRpbmdSZXF1aXJlZCk7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRRUyh1cmw6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA+IC0xKSB7XHJcbiAgICAgIHJldHVybiB1cmwgKyAnJicgKyB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXJsICsgJz8nICsgdmFsdWU7XHJcbiAgfVxyXG5cclxuICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGxldCBpc0NETkVuYWJsZWQgPSBBcHBDb3JlU2V0dGluZ3MuSXNDRE5FbmFibGVkO1xyXG4gICAgbGV0IGNkblNhc1Rva2VuID0gQXBwQ29yZVNldHRpbmdzLkNETlNBU1Rva2VuO1xyXG4gICAgbGV0IGlzTG9hZGluZ0ZyZWV6ZWQgPSB0aGlzLmxvYWRpbmdTZXJ2aWNlLmlzRnJlZXplZDtcclxuICAgIGxldCBsb2FkaW5nUmVxdWlyZWQgPSAhaXNMb2FkaW5nRnJlZXplZDtcclxuICAgIGxldCB1cmwgPSByZXEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBsZXQgb3JpZ2luYWxVcmwgPSByZXEudXJsO1xyXG4gICAgbGV0IGlzRXh0ZXJuYWxTaXRlID0gZmFsc2U7XHJcbiAgICBsZXQgYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vMS4gbG9uZ1J1bm5pbmcgdGFza3NcclxuICAgIGlmICghaXNMb2FkaW5nRnJlZXplZCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5sb25nUnVubmluZ0V4Y2VwdGlvbnMpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5sb25nUnVubmluZ0V4Y2VwdGlvbnNbaV0pID49IDApIHtcclxuICAgICAgICAgIGxvYWRpbmdSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8yLiBDaGVjayBpcyBzaXRlIEV4dGVybmFsP1xyXG4gICAgZm9yIChjb25zdCBpIG9mIHRoaXMuZXh0ZXJuYWxTaXRlVXJscykge1xyXG4gICAgICBpZiAodXJsLmluZGV4T2YodGhpcy5leHRlcm5hbFNpdGVVcmxzW2ldKSA+PSAwKSB7XHJcbiAgICAgICAgaXNFeHRlcm5hbFNpdGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8zLiBJcyBBdXRob3JpemF0aW9uIFRva2VuIFJlcXVpcmVkXHJcbiAgICBpZiAoaXNFeHRlcm5hbFNpdGUpIHtcclxuICAgICAgYXV0aG9yaXphdGlvblRva2VuUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXV0aG9yaXphdGlvblRva2VuRXhjZXB0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZih0aGlzLmF1dGhvcml6YXRpb25Ub2tlbkV4Y2VwdGlvbnNbaV0pID49IDApIHtcclxuICAgICAgICAgIGF1dGhvcml6YXRpb25Ub2tlblJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLzQuIGFwcENvbnRleHRcclxuICAgIGlmICh1cmwuaW5kZXhPZignL2FwcGNvbnRleHQvJykgPiAtMSkge1xyXG4gICAgICBhdXRob3JpemF0aW9uVG9rZW5SZXF1aXJlZCA9IHRoaXMuYXV0aFNlcnZpY2UuaXNVc2VyQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoYW5nZSBVcmwgaWYgbmVlZCBpdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgIGxldCBuZXdVcmwgPSBvcmlnaW5hbFVybDtcclxuXHJcbiAgICAvLzUuIENoZWNrIHNob3VsZCB3ZSBhZGQgQ0ROIFNBUyB0b2tlbnNcclxuICAgIGlmIChpc0NETkVuYWJsZWQpIHtcclxuICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuYXV0b0NETlNBU1Rva2VuVXJscykge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZih0aGlzLmF1dG9DRE5TQVNUb2tlblVybHNbaV0pID49IDApIHtcclxuICAgICAgICAgIG5ld1VybCA9IG5ld1VybCArIGNkblNhc1Rva2VuO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy82LiBubyBjYWNoaW5nIGZvciBBUEkgY2FsbHNcclxuICAgIGlmICh1cmwuaW5kZXhPZignL2FwaS8nKSA+IC0xIHx8IHVybC5pbmRleE9mKCdhcGkuJykgPiAtMSkgeyAgICAgIFxyXG4gICAgICBjb25zdCB0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoKTtcclxuICAgICAgbmV3VXJsID0gdGhpcy5zZXRRUyhuZXdVcmwsICd0PScgKyB0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLzcuIHNldCBjYVxyXG4gICAgbGV0IGFwcCA9IGdldEN1cnJlbnRBcHAoKTtcclxuICAgIG5ld1VybCA9IHRoaXMuc2V0UVMobmV3VXJsLCAnY2E9JyArIGFwcC50eXBlKTtcclxuXHJcbiAgICAvLzguIHNldCBuZXcgdXJsXHJcbiAgICByZXEgPSByZXEuY2xvbmUoeyB1cmw6IG5ld1VybCB9KTtcclxuXHJcbiAgICByZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJykgfSk7XHJcbiAgICByZXEgPSByZXEuY2xvbmUoeyBoZWFkZXJzOiByZXEuaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi90ZXh0JykgfSk7XHJcblxyXG4gICAgdGhpcy5vblJlcXVlc3RTdGFydChsb2FkaW5nUmVxdWlyZWQpO1xyXG5cclxuICAgIGlmIChhdXRob3JpemF0aW9uVG9rZW5SZXF1aXJlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpLnBpcGUobWVyZ2VNYXAoKHRva2VuOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICAgIHJlcSA9IHJlcS5jbG9uZSh7IGhlYWRlcnM6IHJlcS5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIHRva2VuKSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUh0dHBSZXF1ZXN0KHJlcSwgbmV4dCwgbG9hZGluZ1JlcXVpcmVkKTtcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUh0dHBSZXF1ZXN0KHJlcSwgbmV4dCwgbG9hZGluZ1JlcXVpcmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRXZlbnRzXHJcbiAgb25SZXF1ZXN0U3RhcnQobG9hZGluZ1JlcXVpcmVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAobG9hZGluZ1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2Uuc2hvdygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZXF1ZXN0RW5kKGxvYWRpbmdSZXF1aXJlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGxvYWRpbmdSZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTZXJ2aWNlLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
package/esm2022/lib/core/is.mjs
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<file>
|
|
3
|
-
Project:
|
|
4
|
-
@osovitny/anatoly
|
|
5
|
-
|
|
6
|
-
Authors:
|
|
7
|
-
Vadim Osovitny vadim.osovitny@osovitny.com
|
|
8
|
-
|
|
9
|
-
Created:
|
|
10
|
-
09 Feb 2024
|
|
11
|
-
|
|
12
|
-
Sources:
|
|
13
|
-
https://playcode.io/javascript
|
|
14
|
-
https://github.com/date-fns/date-fns/blob/main/src/isDate/index.ts
|
|
15
|
-
https://github.com/date-fns/date-fns/blob/main/src/isValid/index.ts
|
|
16
|
-
|
|
17
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
18
|
-
</file>
|
|
19
|
-
*/
|
|
20
|
-
export class is {
|
|
21
|
-
/**
|
|
22
|
-
* @name isDate
|
|
23
|
-
* @summary Is the given value a date?
|
|
24
|
-
*/
|
|
25
|
-
static date(value) {
|
|
26
|
-
return (value instanceof Date ||
|
|
27
|
-
(typeof value === "object" && Object.prototype.toString.call(value) === "[object Date]"));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* @name isDateValid
|
|
31
|
-
* @summary Is the given date valid?
|
|
32
|
-
*/
|
|
33
|
-
static dateValid(date) {
|
|
34
|
-
if (!is.date(date) && typeof date !== "number") {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
let d = new Date(date);
|
|
38
|
-
return !isNaN(Number(d));
|
|
39
|
-
}
|
|
40
|
-
static dateInvalid(date) {
|
|
41
|
-
return !is.dateValid(date);
|
|
42
|
-
}
|
|
43
|
-
static objectNullOrEmpty(obj) {
|
|
44
|
-
return !obj || Object.keys(obj).length == 0;
|
|
45
|
-
}
|
|
46
|
-
static string(value) {
|
|
47
|
-
return (typeof value === 'string' || value instanceof String);
|
|
48
|
-
}
|
|
49
|
-
static emptyString(value) {
|
|
50
|
-
return (is.string(value) && (value.length == 0));
|
|
51
|
-
}
|
|
52
|
-
static notEmptyString(value) {
|
|
53
|
-
return (is.string(value) && (value.length > 0));
|
|
54
|
-
}
|
|
55
|
-
static number(value) {
|
|
56
|
-
return (typeof value === 'number');
|
|
57
|
-
}
|
|
58
|
-
static boolean(value) {
|
|
59
|
-
return (typeof value === 'boolean');
|
|
60
|
-
}
|
|
61
|
-
static array(value) {
|
|
62
|
-
return (value instanceof Array);
|
|
63
|
-
}
|
|
64
|
-
static emptyArray(value) {
|
|
65
|
-
return (is.array(value) && (value.length == 0));
|
|
66
|
-
}
|
|
67
|
-
static notEmptyArray(value) {
|
|
68
|
-
return (is.array(value) && (value.length > 0));
|
|
69
|
-
}
|
|
70
|
-
static undefined(value) {
|
|
71
|
-
return (typeof value === 'undefined');
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/*
|
|
75
|
-
is = {
|
|
76
|
-
DONE string: function (obj) { return (typeof obj === 'string'); },
|
|
77
|
-
DONE emptyString: function (obj) { return (is.string(obj) && (obj.length == 0)); },
|
|
78
|
-
DONE nonEmptyString: function (obj) { return (is.string(obj) && (obj.length > 0)); },
|
|
79
|
-
DONE number: function (obj) { return (typeof obj === 'number'); },
|
|
80
|
-
DONE bool: function (obj) { return (typeof obj === 'boolean'); },
|
|
81
|
-
DONE array: function (obj) { return (obj instanceof Array); },
|
|
82
|
-
DONE emptyArray: function (obj) { return (is.array(obj) && (obj.length == 0)); },
|
|
83
|
-
DONE notEmptyArray: function (obj) { return (is.array(obj) && (obj.length > 0)); },
|
|
84
|
-
DONE undefined: function (obj) { return (typeof obj === 'undefined'); },
|
|
85
|
-
|
|
86
|
-
'null': function (obj) { return (obj === null); },
|
|
87
|
-
notNull: function (obj) { return (obj !== null); },
|
|
88
|
-
invalid: function (obj) { return (is['null'](obj) || is.undefined(obj)); },
|
|
89
|
-
valid: function (obj) { return (!is['null'](obj) && !is.undefined(obj)); },
|
|
90
|
-
|
|
91
|
-
document: function (obj) { return (obj === document); },
|
|
92
|
-
window: function (obj) { return (obj === window); },
|
|
93
|
-
element: function (obj) { return (obj instanceof HTMLElement); },
|
|
94
|
-
event: function (obj) { return (obj instanceof Event); },
|
|
95
|
-
link: function (obj) { return (is.element(obj) && (obj.tagName == 'A')); }
|
|
96
|
-
};
|
|
97
|
-
*/
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvY29yZS9pcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0JFO0FBRUYsTUFBTSxPQUFPLEVBQUU7SUFDYjs7O01BR0U7SUFDSyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxDQUNMLEtBQUssWUFBWSxJQUFJO1lBQ3JCLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxlQUFlLENBQUMsQ0FDekYsQ0FBQztJQUNKLENBQUM7SUFFRDs7O01BR0U7SUFDSyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUk7UUFDMUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0MsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1FBQzVCLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRztRQUNqQyxPQUFPLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQ3hCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUs7UUFDN0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSztRQUNoQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQ3hCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1FBQ3pCLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSztRQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLO1FBQy9CLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUs7UUFDM0IsT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVCRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW0ub3Nvdml0bnlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAwOSBGZWIgMjAyNFxyXG5cclxuICBTb3VyY2VzOlxyXG4gICAgaHR0cHM6Ly9wbGF5Y29kZS5pby9qYXZhc2NyaXB0XHJcbiAgICBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYWluL3NyYy9pc0RhdGUvaW5kZXgudHNcclxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21haW4vc3JjL2lzVmFsaWQvaW5kZXgudHNcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG5leHBvcnQgY2xhc3MgaXMge1xyXG4gIC8qKlxyXG4gICAqIEBuYW1lIGlzRGF0ZVxyXG4gICAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XHJcbiAgKi9cclxuICBwdWJsaWMgc3RhdGljIGRhdGUodmFsdWUpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fFxyXG4gICAgICAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBEYXRlXVwiKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBuYW1lIGlzRGF0ZVZhbGlkXHJcbiAgICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XHJcbiAgKi9cclxuICBwdWJsaWMgc3RhdGljIGRhdGVWYWxpZChkYXRlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWlzLmRhdGUoZGF0ZSkgJiYgdHlwZW9mIGRhdGUgIT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICByZXR1cm4gIWlzTmFOKE51bWJlcihkKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGRhdGVJbnZhbGlkKGRhdGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXMuZGF0ZVZhbGlkKGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBvYmplY3ROdWxsT3JFbXB0eShvYmopIHtcclxuICAgIHJldHVybiAhb2JqIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09IDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHN0cmluZyh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZW1wdHlTdHJpbmcodmFsdWUpIHtcclxuICAgIHJldHVybiAoaXMuc3RyaW5nKHZhbHVlKSAmJiAodmFsdWUubGVuZ3RoID09IDApKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgbm90RW1wdHlTdHJpbmcodmFsdWUpIHtcclxuICAgIHJldHVybiAoaXMuc3RyaW5nKHZhbHVlKSAmJiAodmFsdWUubGVuZ3RoID4gMCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBudW1iZXIodmFsdWUpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGJvb2xlYW4odmFsdWUpIHtcclxuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhcnJheSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZW1wdHlBcnJheSh2YWx1ZSkge1xyXG4gICAgcmV0dXJuIChpcy5hcnJheSh2YWx1ZSkgJiYgKHZhbHVlLmxlbmd0aCA9PSAwKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIG5vdEVtcHR5QXJyYXkodmFsdWUpIHtcclxuICAgIHJldHVybiAoaXMuYXJyYXkodmFsdWUpICYmICh2YWx1ZS5sZW5ndGggPiAwKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHVuZGVmaW5lZCh2YWx1ZSkge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKTtcclxuICB9XHJcbn1cclxuXHJcbi8qXHJcbmlzID0ge1xyXG4gIERPTkUgc3RyaW5nOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpOyB9LFxyXG4gIERPTkUgZW1wdHlTdHJpbmc6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChpcy5zdHJpbmcob2JqKSAmJiAob2JqLmxlbmd0aCA9PSAwKSk7IH0sXHJcbiAgRE9ORSBub25FbXB0eVN0cmluZzogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKGlzLnN0cmluZyhvYmopICYmIChvYmoubGVuZ3RoID4gMCkpOyB9LFxyXG4gIERPTkUgbnVtYmVyOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpOyB9LFxyXG4gIERPTkUgYm9vbDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKHR5cGVvZiBvYmogPT09ICdib29sZWFuJyk7IH0sXHJcbiAgRE9ORSBhcnJheTogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKG9iaiBpbnN0YW5jZW9mIEFycmF5KTsgfSxcclxuICBET05FIGVtcHR5QXJyYXk6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChpcy5hcnJheShvYmopICYmIChvYmoubGVuZ3RoID09IDApKTsgfSxcclxuICBET05FIG5vdEVtcHR5QXJyYXk6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChpcy5hcnJheShvYmopICYmIChvYmoubGVuZ3RoID4gMCkpOyB9LFxyXG4gIERPTkUgdW5kZWZpbmVkOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpOyB9LFxyXG5cclxuICAnbnVsbCc6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChvYmogPT09IG51bGwpOyB9LFxyXG4gIG5vdE51bGw6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChvYmogIT09IG51bGwpOyB9LFxyXG4gIGludmFsaWQ6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChpc1snbnVsbCddKG9iaikgfHwgaXMudW5kZWZpbmVkKG9iaikpOyB9LFxyXG4gIHZhbGlkOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAoIWlzWydudWxsJ10ob2JqKSAmJiAhaXMudW5kZWZpbmVkKG9iaikpOyB9LFxyXG5cclxuICBkb2N1bWVudDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKG9iaiA9PT0gZG9jdW1lbnQpOyB9LFxyXG4gIHdpbmRvdzogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKG9iaiA9PT0gd2luZG93KTsgfSxcclxuICBlbGVtZW50OiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAob2JqIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpOyB9LFxyXG4gIGV2ZW50OiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiAob2JqIGluc3RhbmNlb2YgRXZlbnQpOyB9LFxyXG4gIGxpbms6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChpcy5lbGVtZW50KG9iaikgJiYgKG9iai50YWdOYW1lID09ICdBJykpOyB9XHJcbn07XHJcbiovXHJcbiJdfQ==
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<file>
|
|
3
|
-
Project:
|
|
4
|
-
@osovitny/anatoly
|
|
5
|
-
|
|
6
|
-
Authors:
|
|
7
|
-
Vadim Osovitny vadim.osovitny@osovitny.com
|
|
8
|
-
Anatoly Osovitny anatoly.osovitny@osovitny.com
|
|
9
|
-
|
|
10
|
-
Created:
|
|
11
|
-
12 May 2020
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { NgModule } from '@angular/core';
|
|
18
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
19
|
-
//Pipes
|
|
20
|
-
import { LocalizePipe } from './localize.pipe';
|
|
21
|
-
import * as i0 from "@angular/core";
|
|
22
|
-
export class LocalizationModule {
|
|
23
|
-
static { this.ɵfac = function LocalizationModule_Factory(t) { return new (t || LocalizationModule)(); }; }
|
|
24
|
-
static { this.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: LocalizationModule }); }
|
|
25
|
-
static { this.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [TranslateModule, TranslateModule] }); }
|
|
26
|
-
}
|
|
27
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalizationModule, [{
|
|
28
|
-
type: NgModule,
|
|
29
|
-
args: [{
|
|
30
|
-
imports: [
|
|
31
|
-
TranslateModule
|
|
32
|
-
],
|
|
33
|
-
exports: [
|
|
34
|
-
TranslateModule,
|
|
35
|
-
LocalizePipe
|
|
36
|
-
],
|
|
37
|
-
declarations: [
|
|
38
|
-
LocalizePipe
|
|
39
|
-
],
|
|
40
|
-
providers: []
|
|
41
|
-
}]
|
|
42
|
-
}], null, null); })();
|
|
43
|
-
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(LocalizationModule, { declarations: [LocalizePipe], imports: [TranslateModule], exports: [TranslateModule,
|
|
44
|
-
LocalizePipe] }); })();
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9jb3JlL2xvY2FsaXphdGlvbi9sb2NhbGl6YXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU87QUFDUCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZ0IvQyxNQUFNLE9BQU8sa0JBQWtCO21GQUFsQixrQkFBa0I7bUVBQWxCLGtCQUFrQjt1RUFaM0IsZUFBZSxFQUdmLGVBQWU7O2lGQVNOLGtCQUFrQjtjQWQ5QixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLGVBQWU7aUJBQ2hCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxlQUFlO29CQUNmLFlBQVk7aUJBQ2I7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLFlBQVk7aUJBQ2I7Z0JBQ0QsU0FBUyxFQUFFLEVBQ1Y7YUFDRjs7d0ZBQ1ksa0JBQWtCLG1CQUwzQixZQUFZLGFBUFosZUFBZSxhQUdmLGVBQWU7UUFDZixZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbS5vc292aXRueUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seS5vc292aXRueUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgICAxMiBNYXkgMjAyMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbi8vUGlwZXNcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi9sb2NhbGl6ZS5waXBlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBUcmFuc2xhdGVNb2R1bGUsXHJcbiAgICBMb2NhbGl6ZVBpcGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgTG9jYWxpemVQaXBlXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25Nb2R1bGUge1xyXG59XHJcbiJdfQ==
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<file>
|
|
3
|
-
Project:
|
|
4
|
-
@osovitny/anatoly
|
|
5
|
-
|
|
6
|
-
Authors:
|
|
7
|
-
Vadim Osovitny vadim.osovitny@osovitny.com
|
|
8
|
-
Anatoly Osovitny anatoly.osovitny@osovitny.com
|
|
9
|
-
|
|
10
|
-
Created:
|
|
11
|
-
05 May 2020
|
|
12
|
-
|
|
13
|
-
Source:
|
|
14
|
-
https://date-fns.org/v3.3.1/docs/formatDistance
|
|
15
|
-
https://date-fns.org/v3.3.1/docs/formatDistanceToNow
|
|
16
|
-
|
|
17
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
18
|
-
</file>
|
|
19
|
-
*/
|
|
20
|
-
//Node
|
|
21
|
-
import { Injectable, Output, EventEmitter } from '@angular/core';
|
|
22
|
-
//date-fns
|
|
23
|
-
import { format, formatDistanceToNow, formatDistance } from 'date-fns';
|
|
24
|
-
// VadimOS: DON'T change next imports!
|
|
25
|
-
// Reason: https://github.com/date-fns/date-fns/issues/666
|
|
26
|
-
import enUS from 'date-fns/locale/en-US';
|
|
27
|
-
//App
|
|
28
|
-
import { Subs } from '../subs';
|
|
29
|
-
import { dateFormats, dateTimeFormats, timeFormats } from '../consts/formats';
|
|
30
|
-
import { DateConvert } from '../converts/dateConvert';
|
|
31
|
-
import { is } from '../is';
|
|
32
|
-
import * as i0 from "@angular/core";
|
|
33
|
-
import * as i1 from "@ngx-translate/core";
|
|
34
|
-
export class LocalizationService {
|
|
35
|
-
constructor(translate) {
|
|
36
|
-
this.translate = translate;
|
|
37
|
-
this.subs = new Subs();
|
|
38
|
-
//i10n
|
|
39
|
-
this.supportedLanguages = ['en', 'ru', 'es'];
|
|
40
|
-
this.defaultLanguage = 'en';
|
|
41
|
-
//Outputs
|
|
42
|
-
this.langchange = new EventEmitter();
|
|
43
|
-
this.setSupportedLanguages(this.supportedLanguages);
|
|
44
|
-
this.setDefaultLanguage(this.defaultLanguage);
|
|
45
|
-
}
|
|
46
|
-
ngOnDestroy() {
|
|
47
|
-
this.subs.unsubscribe();
|
|
48
|
-
}
|
|
49
|
-
format(str, args) {
|
|
50
|
-
return str.replace(/{(\d+)}/g, function (match, number) {
|
|
51
|
-
return typeof args[number] != 'undefined'
|
|
52
|
-
? args[number]
|
|
53
|
-
: match;
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
;
|
|
57
|
-
configureSettings(translate) {
|
|
58
|
-
//i10n
|
|
59
|
-
const browserLang = translate.getBrowserLang();
|
|
60
|
-
const lang = browserLang.match(/en|ru|es/) ? browserLang : this.defaultLanguage;
|
|
61
|
-
//dates
|
|
62
|
-
this.dateFnsLocale = { locale: enUS };
|
|
63
|
-
this.subs.sink = this.translate.onLangChange.subscribe((event) => {
|
|
64
|
-
console.log('Language Changed');
|
|
65
|
-
this.langchange.emit(event.lang);
|
|
66
|
-
});
|
|
67
|
-
return lang;
|
|
68
|
-
}
|
|
69
|
-
//Languages
|
|
70
|
-
setSupportedLanguages(languages) {
|
|
71
|
-
this.translate.addLangs(languages);
|
|
72
|
-
}
|
|
73
|
-
setDefaultLanguage(lang) {
|
|
74
|
-
this.translate.setDefaultLang(lang);
|
|
75
|
-
}
|
|
76
|
-
setLanguage(language) {
|
|
77
|
-
this.translate.use(language);
|
|
78
|
-
}
|
|
79
|
-
getBrowserLanguage() {
|
|
80
|
-
return this.translate.getBrowserLang();
|
|
81
|
-
}
|
|
82
|
-
//Dates
|
|
83
|
-
getDatefnsLocale() {
|
|
84
|
-
let dfnLocale;
|
|
85
|
-
switch (this.getBrowserLanguage()) {
|
|
86
|
-
case 'en':
|
|
87
|
-
dfnLocale = { locale: enUS };
|
|
88
|
-
break;
|
|
89
|
-
default:
|
|
90
|
-
dfnLocale = { locale: enUS };
|
|
91
|
-
}
|
|
92
|
-
return dfnLocale;
|
|
93
|
-
}
|
|
94
|
-
//getLocalized
|
|
95
|
-
getLocalizedValue(key, params) {
|
|
96
|
-
const value = this.translate.instant(key);
|
|
97
|
-
if (!params || params.length === 0) {
|
|
98
|
-
return value;
|
|
99
|
-
}
|
|
100
|
-
return this.format(value, params);
|
|
101
|
-
}
|
|
102
|
-
getLocalizedDateTime(value, formatStr = dateTimeFormats.medium) {
|
|
103
|
-
let date = DateConvert.toDate(value);
|
|
104
|
-
if (is.dateInvalid(date)) {
|
|
105
|
-
return "Invalid Date";
|
|
106
|
-
}
|
|
107
|
-
return format(date, formatStr, this.dateFnsLocale);
|
|
108
|
-
}
|
|
109
|
-
getLocalizedDate(value, formatStr = dateFormats.medium) {
|
|
110
|
-
let date = DateConvert.toDate(value);
|
|
111
|
-
if (is.dateInvalid(date)) {
|
|
112
|
-
return "Invalid Date";
|
|
113
|
-
}
|
|
114
|
-
return format(date, formatStr, this.dateFnsLocale);
|
|
115
|
-
}
|
|
116
|
-
getLocalizedTime(value, formatStr = timeFormats.short) {
|
|
117
|
-
let date = DateConvert.toDate(value);
|
|
118
|
-
if (is.dateInvalid(date)) {
|
|
119
|
-
return "Invalid Date";
|
|
120
|
-
}
|
|
121
|
-
return format(date, formatStr, this.dateFnsLocale);
|
|
122
|
-
}
|
|
123
|
-
//UTC ---------------------------------------------------------------------BEGIN
|
|
124
|
-
getUTCToLocalizedDateTime(value, formatStr = dateTimeFormats.medium) {
|
|
125
|
-
let d = DateConvert.utcToLocal(value);
|
|
126
|
-
return this.getLocalizedDateTime(d, formatStr);
|
|
127
|
-
}
|
|
128
|
-
getUTCToLocalizedDate(value, formatStr = dateFormats.medium) {
|
|
129
|
-
let d = DateConvert.utcToLocal(value);
|
|
130
|
-
return this.getLocalizedDate(d, formatStr);
|
|
131
|
-
}
|
|
132
|
-
getUTCToLocalizedTime(value, formatStr = timeFormats.short) {
|
|
133
|
-
let d = DateConvert.utcToLocal(value);
|
|
134
|
-
return this.getLocalizedTime(d, formatStr);
|
|
135
|
-
}
|
|
136
|
-
//UTC ---------------------------------------------------------------------END
|
|
137
|
-
//Distance ----------------------------------------------------------------BEGIN
|
|
138
|
-
getLocalizedDistance(endedDateStr, startedDateStr) {
|
|
139
|
-
let endedDate = DateConvert.toDate(endedDateStr);
|
|
140
|
-
let startedDate = DateConvert.toDate(startedDateStr);
|
|
141
|
-
if (is.dateInvalid(endedDate) || is.dateInvalid(startedDate)) {
|
|
142
|
-
return "Invalid Date";
|
|
143
|
-
}
|
|
144
|
-
return formatDistance(endedDate, startedDate, this.dateFnsLocale);
|
|
145
|
-
}
|
|
146
|
-
getUTCToLocalizedDistance(value) {
|
|
147
|
-
let d = DateConvert.utcToLocal(value);
|
|
148
|
-
if (is.dateInvalid(d)) {
|
|
149
|
-
return "Invalid Date";
|
|
150
|
-
}
|
|
151
|
-
return formatDistanceToNow(d, this.dateFnsLocale);
|
|
152
|
-
}
|
|
153
|
-
static { this.ɵfac = function LocalizationService_Factory(t) { return new (t || LocalizationService)(i0.ɵɵinject(i1.TranslateService)); }; }
|
|
154
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: LocalizationService, factory: LocalizationService.ɵfac, providedIn: 'root' }); }
|
|
155
|
-
}
|
|
156
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalizationService, [{
|
|
157
|
-
type: Injectable,
|
|
158
|
-
args: [{
|
|
159
|
-
providedIn: 'root'
|
|
160
|
-
}]
|
|
161
|
-
}], () => [{ type: i1.TranslateService }], { langchange: [{
|
|
162
|
-
type: Output
|
|
163
|
-
}] }); })();
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvY29yZS9sb2NhbGl6YXRpb24vbG9jYWxpemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtCRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHNUUsVUFBVTtBQUNWLE9BQU8sRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRXZFLHNDQUFzQztBQUN0QywwREFBMEQ7QUFDMUQsT0FBTyxJQUFJLE1BQU0sdUJBQXVCLENBQUM7QUFFekMsS0FBSztBQUNMLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxPQUFPLENBQUM7OztBQUszQixNQUFNLE9BQU8sbUJBQW1CO0lBVzlCLFlBQW9CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBVnZDLFNBQUksR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBR2hDLE1BQU07UUFDRSx1QkFBa0IsR0FBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0Msb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFL0IsU0FBUztRQUNDLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUczRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGtC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QyxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7b0ZBeEpVLG1CQUFtQjt1RUFBbkIsbUJBQW1CLFdBQW5CLG1CQUFtQixtQkFGbEIsTUFBTTs7aUZBRVAsbUJBQW1CO2NBSC9CLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjtpREFVVyxVQUFVO2tCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbS5vc292aXRueUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seS5vc292aXRueUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDA1IE1heSAyMDIwXHJcblxyXG4gIFNvdXJjZTpcclxuICAgIGh0dHBzOi8vZGF0ZS1mbnMub3JnL3YzLjMuMS9kb2NzL2Zvcm1hdERpc3RhbmNlXHJcbiAgICBodHRwczovL2RhdGUtZm5zLm9yZy92My4zLjEvZG9jcy9mb3JtYXREaXN0YW5jZVRvTm93XHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IEluamVjdGFibGUsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSwgTGFuZ0NoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG4vL2RhdGUtZm5zXHJcbmltcG9ydCB7IGZvcm1hdCwgZm9ybWF0RGlzdGFuY2VUb05vdywgZm9ybWF0RGlzdGFuY2UgfSBmcm9tICdkYXRlLWZucyc7XHJcblxyXG4vLyBWYWRpbU9TOiBET04nVCBjaGFuZ2UgbmV4dCBpbXBvcnRzIVxyXG4vLyBSZWFzb246IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9pc3N1ZXMvNjY2XHJcbmltcG9ydCBlblVTIGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbi1VUyc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBTdWJzIH0gZnJvbSAnLi4vc3Vicyc7XHJcbmltcG9ydCB7IGRhdGVGb3JtYXRzLCBkYXRlVGltZUZvcm1hdHMsIHRpbWVGb3JtYXRzIH0gZnJvbSAnLi4vY29uc3RzL2Zvcm1hdHMnO1xyXG5pbXBvcnQgeyBEYXRlQ29udmVydCB9IGZyb20gJy4uL2NvbnZlcnRzL2RhdGVDb252ZXJ0JztcclxuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi9pcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6YXRpb25TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN1YnM6IFN1YnMgPSBuZXcgU3VicygpO1xyXG4gIHByaXZhdGUgZGF0ZUZuc0xvY2FsZTogYW55O1xyXG5cclxuICAvL2kxMG5cclxuICBwcml2YXRlIHN1cHBvcnRlZExhbmd1YWdlczogYW55ID0gWydlbicsICdydScsICdlcyddO1xyXG4gIHByaXZhdGUgZGVmYXVsdExhbmd1YWdlID0gJ2VuJztcclxuXHJcbiAgLy9PdXRwdXRzXHJcbiAgQE91dHB1dCgpIGxhbmdjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5zZXRTdXBwb3J0ZWRMYW5ndWFnZXModGhpcy5zdXBwb3J0ZWRMYW5ndWFnZXMpO1xyXG4gICAgdGhpcy5zZXREZWZhdWx0TGFuZ3VhZ2UodGhpcy5kZWZhdWx0TGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0KHN0cjogc3RyaW5nLCBhcmdzKSB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL3soXFxkKyl9L2csIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyKSB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9ICd1bmRlZmluZWQnXHJcbiAgICAgICAgPyBhcmdzW251bWJlcl1cclxuICAgICAgICA6IG1hdGNoXHJcbiAgICAgICAgO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY29uZmlndXJlU2V0dGluZ3ModHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKTogc3RyaW5nIHtcclxuICAgIC8vaTEwblxyXG4gICAgY29uc3QgYnJvd3NlckxhbmcgPSB0cmFuc2xhdGUuZ2V0QnJvd3NlckxhbmcoKTtcclxuICAgIGNvbnN0IGxhbmcgPSBicm93c2VyTGFuZy5tYXRjaCgvZW58cnV8ZXMvKSA/IGJyb3dzZXJMYW5nIDogdGhpcy5kZWZhdWx0TGFuZ3VhZ2U7XHJcblxyXG4gICAgLy9kYXRlc1xyXG4gICAgdGhpcy5kYXRlRm5zTG9jYWxlID0geyBsb2NhbGU6IGVuVVMgfTtcclxuXHJcbiAgICB0aGlzLnN1YnMuc2luayA9IHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coJ0xhbmd1YWdlIENoYW5nZWQnKTtcclxuICAgICAgdGhpcy5sYW5nY2hhbmdlLmVtaXQoZXZlbnQubGFuZyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbGFuZztcclxuICB9XHJcblxyXG4gIC8vTGFuZ3VhZ2VzXHJcbiAgc2V0U3VwcG9ydGVkTGFuZ3VhZ2VzKGxhbmd1YWdlczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlLmFkZExhbmdzKGxhbmd1YWdlcyk7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0TGFuZ3VhZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZyhsYW5nKTtcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICBnZXRCcm93c2VyTGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXRCcm93c2VyTGFuZygpO1xyXG4gIH1cclxuXHJcbiAgLy9EYXRlc1xyXG4gIGdldERhdGVmbnNMb2NhbGUoKTogYW55IHtcclxuICAgIGxldCBkZm5Mb2NhbGU6IGFueTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuZ2V0QnJvd3Nlckxhbmd1YWdlKCkpIHtcclxuICAgICAgY2FzZSAnZW4nOlxyXG4gICAgICAgIGRmbkxvY2FsZSA9IHsgbG9jYWxlOiBlblVTIH07XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGRmbkxvY2FsZSA9IHsgbG9jYWxlOiBlblVTIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRmbkxvY2FsZTtcclxuICB9XHJcblxyXG4gIC8vZ2V0TG9jYWxpemVkXHJcbiAgZ2V0TG9jYWxpemVkVmFsdWUoa2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueVtdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChrZXkpO1xyXG5cclxuICAgIGlmICghcGFyYW1zIHx8IHBhcmFtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmZvcm1hdCh2YWx1ZSwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIGdldExvY2FsaXplZERhdGVUaW1lKHZhbHVlLCBmb3JtYXRTdHI6IHN0cmluZyA9IGRhdGVUaW1lRm9ybWF0cy5tZWRpdW0pOiBzdHJpbmcge1xyXG4gICAgbGV0IGRhdGUgPSBEYXRlQ29udmVydC50b0RhdGUodmFsdWUpO1xyXG4gICAgaWYgKGlzLmRhdGVJbnZhbGlkKGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCB0aGlzLmRhdGVGbnNMb2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYWxpemVkRGF0ZSh2YWx1ZSwgZm9ybWF0U3RyOiBzdHJpbmcgPSBkYXRlRm9ybWF0cy5tZWRpdW0pOiBzdHJpbmcge1xyXG4gICAgbGV0IGRhdGUgPSBEYXRlQ29udmVydC50b0RhdGUodmFsdWUpO1xyXG4gICAgaWYgKGlzLmRhdGVJbnZhbGlkKGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCB0aGlzLmRhdGVGbnNMb2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYWxpemVkVGltZSh2YWx1ZSwgZm9ybWF0U3RyOiBzdHJpbmcgPSB0aW1lRm9ybWF0cy5zaG9ydCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGF0ZSA9IERhdGVDb252ZXJ0LnRvRGF0ZSh2YWx1ZSk7XHJcbiAgICBpZiAoaXMuZGF0ZUludmFsaWQoZGF0ZSkpIHtcclxuICAgICAgcmV0dXJuIFwiSW52YWxpZCBEYXRlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdChkYXRlLCBmb3JtYXRTdHIsIHRoaXMuZGF0ZUZuc0xvY2FsZSk7XHJcbiAgfVxyXG5cclxuICAvL1VUQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1CRUdJTlxyXG4gIGdldFVUQ1RvTG9jYWxpemVkRGF0ZVRpbWUodmFsdWUsIGZvcm1hdFN0cjogc3RyaW5nID0gZGF0ZVRpbWVGb3JtYXRzLm1lZGl1bSkge1xyXG4gICAgbGV0IGQgPSBEYXRlQ29udmVydC51dGNUb0xvY2FsKHZhbHVlKTtcclxuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXplZERhdGVUaW1lKGQsIGZvcm1hdFN0cik7XHJcbiAgfVxyXG5cclxuICBnZXRVVENUb0xvY2FsaXplZERhdGUodmFsdWUsIGZvcm1hdFN0cjogc3RyaW5nID0gZGF0ZUZvcm1hdHMubWVkaXVtKSB7XHJcbiAgICBsZXQgZCA9IERhdGVDb252ZXJ0LnV0Y1RvTG9jYWwodmFsdWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkRGF0ZShkLCBmb3JtYXRTdHIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VVRDVG9Mb2NhbGl6ZWRUaW1lKHZhbHVlLCBmb3JtYXRTdHI6IHN0cmluZyA9IHRpbWVGb3JtYXRzLnNob3J0KSB7XHJcbiAgICBsZXQgZCA9IERhdGVDb252ZXJ0LnV0Y1RvTG9jYWwodmFsdWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkVGltZShkLCBmb3JtYXRTdHIpO1xyXG4gIH1cclxuICAvL1VUQyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FTkRcclxuXHJcbiAgLy9EaXN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQkVHSU5cclxuICBnZXRMb2NhbGl6ZWREaXN0YW5jZShlbmRlZERhdGVTdHI6IHN0cmluZywgc3RhcnRlZERhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZW5kZWREYXRlID0gRGF0ZUNvbnZlcnQudG9EYXRlKGVuZGVkRGF0ZVN0cik7XHJcbiAgICBsZXQgc3RhcnRlZERhdGUgPSBEYXRlQ29udmVydC50b0RhdGUoc3RhcnRlZERhdGVTdHIpO1xyXG5cclxuICAgIGlmIChpcy5kYXRlSW52YWxpZChlbmRlZERhdGUpIHx8IGlzLmRhdGVJbnZhbGlkKHN0YXJ0ZWREYXRlKSkge1xyXG4gICAgICByZXR1cm4gXCJJbnZhbGlkIERhdGVcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0RGlzdGFuY2UoZW5kZWREYXRlLCBzdGFydGVkRGF0ZSwgdGhpcy5kYXRlRm5zTG9jYWxlKTtcclxuICB9XHJcblxyXG4gIGdldFVUQ1RvTG9jYWxpemVkRGlzdGFuY2UodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBsZXQgZCA9IERhdGVDb252ZXJ0LnV0Y1RvTG9jYWwodmFsdWUpO1xyXG4gICAgaWYgKGlzLmRhdGVJbnZhbGlkKGQpKSB7XHJcbiAgICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXREaXN0YW5jZVRvTm93KGQsIHRoaXMuZGF0ZUZuc0xvY2FsZSk7XHJcbiAgfVxyXG4gIC8vRGlzdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUVORFxyXG59XHJcblxyXG4iXX0=
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
<file>
|
|
3
|
-
Project:
|
|
4
|
-
@osovitny/anatoly
|
|
5
|
-
|
|
6
|
-
Authors:
|
|
7
|
-
Vadim Osovitny vadim.osovitny@osovitny.com
|
|
8
|
-
Anatoly Osovitny anatoly.osovitny@osovitny.com
|
|
9
|
-
|
|
10
|
-
Created:
|
|
11
|
-
10 May 2020
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { Pipe } from '@angular/core';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "./localization.service";
|
|
20
|
-
export class LocalizePipe {
|
|
21
|
-
constructor(localizeService) {
|
|
22
|
-
this.localizeService = localizeService;
|
|
23
|
-
}
|
|
24
|
-
transform(inputData, type = null, param2 = null) {
|
|
25
|
-
if (!inputData) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (!type) {
|
|
29
|
-
type = 'tr';
|
|
30
|
-
}
|
|
31
|
-
//Translate
|
|
32
|
-
if (type === 'tr') {
|
|
33
|
-
return this.localizeService.getLocalizedValue(inputData);
|
|
34
|
-
}
|
|
35
|
-
//DateTime
|
|
36
|
-
if (type === 'dt') {
|
|
37
|
-
return this.localizeService.getLocalizedDateTime(inputData);
|
|
38
|
-
}
|
|
39
|
-
//Date
|
|
40
|
-
if (type === 'd') {
|
|
41
|
-
return this.localizeService.getLocalizedDate(inputData);
|
|
42
|
-
}
|
|
43
|
-
//Time
|
|
44
|
-
if (type === 't') {
|
|
45
|
-
return this.localizeService.getLocalizedTime(inputData);
|
|
46
|
-
}
|
|
47
|
-
//UTC ---------------------------------------------------------------------BEGIN
|
|
48
|
-
//DateTime
|
|
49
|
-
if (type === 'utc2dt') {
|
|
50
|
-
return this.localizeService.getUTCToLocalizedDateTime(inputData);
|
|
51
|
-
}
|
|
52
|
-
//Date
|
|
53
|
-
if (type === 'utc2d') {
|
|
54
|
-
return this.localizeService.getUTCToLocalizedDate(inputData);
|
|
55
|
-
}
|
|
56
|
-
//Time
|
|
57
|
-
if (type === 'utc2t') {
|
|
58
|
-
return this.localizeService.getUTCToLocalizedTime(inputData);
|
|
59
|
-
}
|
|
60
|
-
//UTC ---------------------------------------------------------------------END
|
|
61
|
-
//Distance ----------------------------------------------------------------BEGIN
|
|
62
|
-
//DistanceInWords
|
|
63
|
-
if (type === 'dis') {
|
|
64
|
-
return this.localizeService.getLocalizedDistance(inputData, param2);
|
|
65
|
-
}
|
|
66
|
-
//DistanceToNowInWords
|
|
67
|
-
if (type === 'utc2dis') {
|
|
68
|
-
return this.localizeService.getUTCToLocalizedDistance(inputData);
|
|
69
|
-
}
|
|
70
|
-
//Distance ----------------------------------------------------------------END
|
|
71
|
-
return inputData;
|
|
72
|
-
}
|
|
73
|
-
static { this.ɵfac = function LocalizePipe_Factory(t) { return new (t || LocalizePipe)(i0.ɵɵdirectiveInject(i1.LocalizationService, 16)); }; }
|
|
74
|
-
static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "localize", type: LocalizePipe, pure: false }); }
|
|
75
|
-
}
|
|
76
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LocalizePipe, [{
|
|
77
|
-
type: Pipe,
|
|
78
|
-
args: [{
|
|
79
|
-
name: 'localize',
|
|
80
|
-
pure: false
|
|
81
|
-
}]
|
|
82
|
-
}], () => [{ type: i1.LocalizationService }], null); })();
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9jb3JlL2xvY2FsaXphdGlvbi9sb2NhbGl6ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOzs7QUFTcEQsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsZUFBb0M7UUFBcEMsb0JBQWUsR0FBZixlQUFlLENBQXFCO0lBQ3hELENBQUM7SUFFRCxTQUFTLENBQUMsU0FBaUIsRUFBRSxPQUFlLElBQUksRUFBRSxTQUFpQixJQUFJO1FBQ3JFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxXQUFXO1FBQ1gsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCxVQUFVO1FBQ1YsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxNQUFNO1FBQ04sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxNQUFNO1FBQ04sSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxnRkFBZ0Y7UUFDaEYsVUFBVTtRQUNWLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTTtRQUNOLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTTtRQUNOLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsOEVBQThFO1FBRTlFLGdGQUFnRjtRQUNoRixpQkFBaUI7UUFDakIsSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsOEVBQThFO1FBRTlFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7NkVBL0RVLFlBQVk7a0ZBQVosWUFBWTs7aUZBQVosWUFBWTtjQUp4QixJQUFJO2VBQUM7Z0JBQ0osSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxLQUFLO2FBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltLm9zb3ZpdG55QG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5Lm9zb3ZpdG55QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgIDEwIE1heSAyMDIwXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vQXBwXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICcuL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnbG9jYWxpemUnLFxyXG4gIHB1cmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2FsaXplU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKGlucHV0RGF0YTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSBudWxsLCBwYXJhbTI6IHN0cmluZyA9IG51bGwpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFpbnB1dERhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdHlwZSkge1xyXG4gICAgICB0eXBlID0gJ3RyJztcclxuICAgIH1cclxuXHJcbiAgICAvL1RyYW5zbGF0ZVxyXG4gICAgaWYgKHR5cGUgPT09ICd0cicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVTZXJ2aWNlLmdldExvY2FsaXplZFZhbHVlKGlucHV0RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9EYXRlVGltZVxyXG4gICAgaWYgKHR5cGUgPT09ICdkdCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVTZXJ2aWNlLmdldExvY2FsaXplZERhdGVUaW1lKGlucHV0RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9EYXRlXHJcbiAgICBpZiAodHlwZSA9PT0gJ2QnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplU2VydmljZS5nZXRMb2NhbGl6ZWREYXRlKGlucHV0RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9UaW1lXHJcbiAgICBpZiAodHlwZSA9PT0gJ3QnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplU2VydmljZS5nZXRMb2NhbGl6ZWRUaW1lKGlucHV0RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9VVEMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQkVHSU5cclxuICAgIC8vRGF0ZVRpbWVcclxuICAgIGlmICh0eXBlID09PSAndXRjMmR0Jykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZVNlcnZpY2UuZ2V0VVRDVG9Mb2NhbGl6ZWREYXRlVGltZShpbnB1dERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vRGF0ZVxyXG4gICAgaWYgKHR5cGUgPT09ICd1dGMyZCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVTZXJ2aWNlLmdldFVUQ1RvTG9jYWxpemVkRGF0ZShpbnB1dERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vVGltZVxyXG4gICAgaWYgKHR5cGUgPT09ICd1dGMydCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVTZXJ2aWNlLmdldFVUQ1RvTG9jYWxpemVkVGltZShpbnB1dERhdGEpO1xyXG4gICAgfVxyXG4gICAgLy9VVEMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRU5EXHJcblxyXG4gICAgLy9EaXN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQkVHSU5cclxuICAgIC8vRGlzdGFuY2VJbldvcmRzXHJcbiAgICBpZiAodHlwZSA9PT0gJ2RpcycpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVTZXJ2aWNlLmdldExvY2FsaXplZERpc3RhbmNlKGlucHV0RGF0YSwgcGFyYW0yKTtcclxuICAgIH1cclxuXHJcbiAgICAvL0Rpc3RhbmNlVG9Ob3dJbldvcmRzXHJcbiAgICBpZiAodHlwZSA9PT0gJ3V0YzJkaXMnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplU2VydmljZS5nZXRVVENUb0xvY2FsaXplZERpc3RhbmNlKGlucHV0RGF0YSk7XHJcbiAgICB9XHJcbiAgICAvL0Rpc3RhbmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FTkRcclxuXHJcbiAgICByZXR1cm4gaW5wdXREYXRhO1xyXG4gIH1cclxufVxyXG4iXX0=
|