@osovitny/anatoly 3.17.160 → 3.19.2
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 +569 -532
- 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/identity/signin-button.component.d.ts +0 -1
- package/lib/ui/components/identity/signout-button.component.d.ts +0 -1
- package/lib/ui/components/identity/signup-button.component.d.ts +0 -1
- package/lib/ui/directives/index.d.ts +1 -1
- package/lib/ui/directives/replacer/replacer.base.directive.d.ts +2 -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,186 +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
|
-
13 Nov 2017
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { Injectable } from '@angular/core';
|
|
18
|
-
import { BehaviorSubject } from 'rxjs';
|
|
19
|
-
//App
|
|
20
|
-
import { ApiUrl } from '../consts/core-settings';
|
|
21
|
-
import { ApiServiceBase } from '../../data/base/api.service';
|
|
22
|
-
import { Stopwatch } from '../performance/stopwatch';
|
|
23
|
-
import { AppContextStorageKeys } from '../consts/storageKeys';
|
|
24
|
-
import * as i0 from "@angular/core";
|
|
25
|
-
import * as i1 from "@angular/common/http";
|
|
26
|
-
import * as i2 from "./web-storage.service";
|
|
27
|
-
export class AppContextService extends ApiServiceBase {
|
|
28
|
-
constructor(http, localStorage, sessionStorage) {
|
|
29
|
-
super(http);
|
|
30
|
-
this.http = http;
|
|
31
|
-
this.localStorage = localStorage;
|
|
32
|
-
this.sessionStorage = sessionStorage;
|
|
33
|
-
this.storageKeyName = 'appContext';
|
|
34
|
-
this.subscription = null;
|
|
35
|
-
//Private Streams
|
|
36
|
-
this._updated = new BehaviorSubject(null);
|
|
37
|
-
this._userUpdated = new BehaviorSubject(null);
|
|
38
|
-
//Public Streams
|
|
39
|
-
this.updated$ = this._updated.asObservable();
|
|
40
|
-
this.userUpdated$ = this._userUpdated.asObservable();
|
|
41
|
-
this.baseUrl = `${ApiUrl}/appContext`;
|
|
42
|
-
}
|
|
43
|
-
fireUpdated(data) {
|
|
44
|
-
if (!data) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
this._updated.next(data);
|
|
48
|
-
}
|
|
49
|
-
fireUserUpdated() {
|
|
50
|
-
this._userUpdated.next(null);
|
|
51
|
-
}
|
|
52
|
-
//Session
|
|
53
|
-
getCurrent4Session() {
|
|
54
|
-
return this.sessionStorage.getObject(this.storageKeyName);
|
|
55
|
-
}
|
|
56
|
-
setCurrent2Session(value) {
|
|
57
|
-
this.sessionStorage.setObject(this.storageKeyName, value);
|
|
58
|
-
}
|
|
59
|
-
dataReceived(data) {
|
|
60
|
-
this.current = data;
|
|
61
|
-
this.subscription.unsubscribe();
|
|
62
|
-
this.subscription = null;
|
|
63
|
-
}
|
|
64
|
-
getCurrentContext() {
|
|
65
|
-
if (this.subscription != null) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
//Logging
|
|
69
|
-
let stopwatch = new Stopwatch("AppContextService: Requesting a new AppContext");
|
|
70
|
-
stopwatch.start();
|
|
71
|
-
this.subscription = this.get('getCurrentContext', null).subscribe({
|
|
72
|
-
next: (data) => {
|
|
73
|
-
//Logging
|
|
74
|
-
stopwatch.stop();
|
|
75
|
-
stopwatch.printElapsedAsMilliseconds();
|
|
76
|
-
this.dataReceived(data);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
updateCurrentIfExpired() {
|
|
81
|
-
let context = this.getCurrent4Session();
|
|
82
|
-
if (!context) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
let shouldBeUpdated = false;
|
|
86
|
-
let lr = context.lastRequested;
|
|
87
|
-
if (lr) {
|
|
88
|
-
let now = new Date();
|
|
89
|
-
let lastRequested = new Date(context.lastRequested);
|
|
90
|
-
let in60Mins = new Date(lastRequested.getFullYear(), lastRequested.getMonth(), lastRequested.getDate(), lastRequested.getHours(), lastRequested.getMinutes() + 60, 0, 0);
|
|
91
|
-
if (in60Mins.getTime() < now.getTime()) {
|
|
92
|
-
shouldBeUpdated = true;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
shouldBeUpdated = true;
|
|
97
|
-
}
|
|
98
|
-
if (shouldBeUpdated) {
|
|
99
|
-
this.updateCurrent();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
//Public
|
|
103
|
-
init(context = null) {
|
|
104
|
-
if (context) {
|
|
105
|
-
this.current = context;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
loadRequiredJsonFiles() {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
loadRequiredItems() {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
updateCurrent() {
|
|
115
|
-
this.getCurrentContext();
|
|
116
|
-
}
|
|
117
|
-
//Storage
|
|
118
|
-
clearLocalStorage() {
|
|
119
|
-
this.localStorage.clear();
|
|
120
|
-
}
|
|
121
|
-
clearSessionStorage() {
|
|
122
|
-
this.sessionStorage.clear();
|
|
123
|
-
}
|
|
124
|
-
clearWebStorage() {
|
|
125
|
-
this.clearLocalStorage();
|
|
126
|
-
this.clearSessionStorage();
|
|
127
|
-
}
|
|
128
|
-
//current
|
|
129
|
-
get current() {
|
|
130
|
-
this.updateCurrentIfExpired();
|
|
131
|
-
return this.getCurrent4Session();
|
|
132
|
-
}
|
|
133
|
-
set current(value) {
|
|
134
|
-
this.setCurrent2Session(value);
|
|
135
|
-
this.fireUpdated(value);
|
|
136
|
-
}
|
|
137
|
-
//user
|
|
138
|
-
get user() {
|
|
139
|
-
let current = this.current;
|
|
140
|
-
return current?.user;
|
|
141
|
-
}
|
|
142
|
-
/* Storage Caching ----------------------------------------------------------BEGIN */
|
|
143
|
-
//version => localStorage
|
|
144
|
-
get version() {
|
|
145
|
-
return this.localStorage.getObject(AppContextStorageKeys.version);
|
|
146
|
-
}
|
|
147
|
-
set version(value) {
|
|
148
|
-
this.localStorage.setObject(AppContextStorageKeys.version, value);
|
|
149
|
-
}
|
|
150
|
-
//currency => localStorage
|
|
151
|
-
get currency() {
|
|
152
|
-
return this.localStorage.getObject(AppContextStorageKeys.currency);
|
|
153
|
-
}
|
|
154
|
-
set currency(value) {
|
|
155
|
-
this.localStorage.setObject(AppContextStorageKeys.currency, value);
|
|
156
|
-
}
|
|
157
|
-
clearCurrency() {
|
|
158
|
-
this.localStorage.remove(AppContextStorageKeys.currency);
|
|
159
|
-
}
|
|
160
|
-
//countries => localStorage
|
|
161
|
-
get countries() {
|
|
162
|
-
return this.localStorage.getObject(AppContextStorageKeys.countries);
|
|
163
|
-
}
|
|
164
|
-
set countries(value) {
|
|
165
|
-
this.localStorage.setObject(AppContextStorageKeys.countries, value);
|
|
166
|
-
}
|
|
167
|
-
clearCountries() {
|
|
168
|
-
this.localStorage.remove(AppContextStorageKeys.countries);
|
|
169
|
-
}
|
|
170
|
-
//languages => localStorage
|
|
171
|
-
get languages() {
|
|
172
|
-
return this.localStorage.getObject(AppContextStorageKeys.languages);
|
|
173
|
-
}
|
|
174
|
-
set languages(value) {
|
|
175
|
-
this.localStorage.setObject(AppContextStorageKeys.languages, value);
|
|
176
|
-
}
|
|
177
|
-
clearLanguages() {
|
|
178
|
-
this.localStorage.remove(AppContextStorageKeys.languages);
|
|
179
|
-
}
|
|
180
|
-
static { this.ɵfac = function AppContextService_Factory(t) { return new (t || AppContextService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.LocalStorageService), i0.ɵɵinject(i2.SessionStorageService)); }; }
|
|
181
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AppContextService, factory: AppContextService.ɵfac }); }
|
|
182
|
-
}
|
|
183
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppContextService, [{
|
|
184
|
-
type: Injectable
|
|
185
|
-
}], () => [{ type: i1.HttpClient }, { type: i2.LocalStorageService }, { type: i2.SessionStorageService }], null); })();
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvc2VydmljZXMvYXBwY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFFakUsS0FBSztBQUNMLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBRzlELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxjQUFjO0lBWW5ELFlBQXNCLElBQWdCLEVBQVksWUFBaUMsRUFBWSxjQUFxQztRQUNsSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFEUSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVksaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQVksbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBWDVILG1CQUFjLEdBQUcsWUFBWSxDQUFDO1FBQzlCLGlCQUFZLEdBQWlCLElBQUksQ0FBQztRQUUxQyxpQkFBaUI7UUFDVCxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDMUMsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsQ0FBQztRQUV0RCxnQkFBZ0I7UUFDUCxhQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxpQkFBWSxHQUFH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TyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBQ0QsSUFBVyxPQUFPLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBVTtRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNNLGFBQWE7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBVTtRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBVTtRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNNLGNBQWM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQztrRkF0TFUsaUJBQWlCO3VFQUFqQixpQkFBaUIsV0FBakIsaUJBQWlCOztpRkFBakIsaUJBQWlCO2NBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltLm9zb3ZpdG55QG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5Lm9zb3ZpdG55QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTMgTm92IDIwMTdcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQXBpVXJsIH0gZnJvbSAnLi4vY29uc3RzL2NvcmUtc2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlQmFzZSB9IGZyb20gJy4uLy4uL2RhdGEvYmFzZS9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4vd2ViLXN0b3JhZ2Uuc2VydmljZSdcclxuaW1wb3J0IHsgU3RvcHdhdGNoIH0gZnJvbSAnLi4vcGVyZm9ybWFuY2Uvc3RvcHdhdGNoJztcclxuaW1wb3J0IHsgQXBwQ29udGV4dFN0b3JhZ2VLZXlzIH0gZnJvbSAnLi4vY29uc3RzL3N0b3JhZ2VLZXlzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFwcENvbnRleHRTZXJ2aWNlIGV4dGVuZHMgQXBpU2VydmljZUJhc2Uge1xyXG4gIHByaXZhdGUgc3RvcmFnZUtleU5hbWUgPSAnYXBwQ29udGV4dCc7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG51bGw7XHJcblxyXG4gIC8vUHJpdmF0ZSBTdHJlYW1zXHJcbiAgcHJpdmF0ZSBfdXBkYXRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBwcml2YXRlIF91c2VyVXBkYXRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuXHJcbiAgLy9QdWJsaWMgU3RyZWFtc1xyXG4gIHJlYWRvbmx5IHVwZGF0ZWQkID0gdGhpcy5fdXBkYXRlZC5hc09ic2VydmFibGUoKTtcclxuICByZWFkb25seSB1c2VyVXBkYXRlZCQgPSB0aGlzLl91c2VyVXBkYXRlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsIHByb3RlY3RlZCBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihodHRwKTtcclxuICAgIHRoaXMuYmFzZVVybCA9IGAke0FwaVVybH0vYXBwQ29udGV4dGA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpcmVVcGRhdGVkKGRhdGEpIHtcclxuICAgIGlmICghZGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdXBkYXRlZC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGZpcmVVc2VyVXBkYXRlZCgpIHtcclxuICAgIHRoaXMuX3VzZXJVcGRhdGVkLm5leHQobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvL1Nlc3Npb25cclxuICBwcml2YXRlIGdldEN1cnJlbnQ0U2Vzc2lvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnNlc3Npb25TdG9yYWdlLmdldE9iamVjdCh0aGlzLnN0b3JhZ2VLZXlOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q3VycmVudDJTZXNzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0T2JqZWN0KHRoaXMuc3RvcmFnZUtleU5hbWUsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YVJlY2VpdmVkKGRhdGEpIHtcclxuICAgIHRoaXMuY3VycmVudCA9IGRhdGE7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdXJyZW50Q29udGV4dCgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbiAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvL0xvZ2dpbmdcclxuICAgIGxldCBzdG9wd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKFwiQXBwQ29udGV4dFNlcnZpY2U6IFJlcXVlc3RpbmcgYSBuZXcgQXBwQ29udGV4dFwiKTtcclxuICAgIHN0b3B3YXRjaC5zdGFydCgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5nZXQoJ2dldEN1cnJlbnRDb250ZXh0JywgbnVsbCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAvL0xvZ2dpbmdcclxuICAgICAgICBzdG9wd2F0Y2guc3RvcCgpO1xyXG4gICAgICAgIHN0b3B3YXRjaC5wcmludEVsYXBzZWRBc01pbGxpc2Vjb25kcygpO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFSZWNlaXZlZChkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRJZkV4cGlyZWQoKSB7XHJcbiAgICBsZXQgY29udGV4dCA9IHRoaXMuZ2V0Q3VycmVudDRTZXNzaW9uKCk7XHJcblxyXG4gICAgaWYgKCFjb250ZXh0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2hvdWxkQmVVcGRhdGVkID0gZmFsc2U7XHJcbiAgICBsZXQgbHIgPSBjb250ZXh0Lmxhc3RSZXF1ZXN0ZWQ7XHJcblxyXG4gICAgaWYgKGxyKSB7XHJcbiAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBsZXQgbGFzdFJlcXVlc3RlZCA9IG5ldyBEYXRlKGNvbnRleHQubGFzdFJlcXVlc3RlZCk7XHJcbiAgICAgIGxldCBpbjYwTWlucyA9IG5ldyBEYXRlKGxhc3RSZXF1ZXN0ZWQuZ2V0RnVsbFllYXIoKSwgbGFzdFJlcXVlc3RlZC5nZXRNb250aCgpLCBsYXN0UmVxdWVzdGVkLmdldERhdGUoKSxcclxuICAgICAgICBsYXN0UmVxdWVzdGVkLmdldEhvdXJzKCksIGxhc3RSZXF1ZXN0ZWQuZ2V0TWludXRlcygpICsgNjAsIDAsIDApO1xyXG5cclxuICAgICAgaWYgKGluNjBNaW5zLmdldFRpbWUoKSA8IG5vdy5nZXRUaW1lKCkpIHtcclxuICAgICAgICBzaG91bGRCZVVwZGF0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2hvdWxkQmVVcGRhdGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2hvdWxkQmVVcGRhdGVkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9QdWJsaWNcclxuICBpbml0KGNvbnRleHQgPSBudWxsKSB7XHJcbiAgICBpZiAoY29udGV4dCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnQgPSBjb250ZXh0O1xyXG4gICAgfVxyXG5cdH1cclxuXHJcbiAgbG9hZFJlcXVpcmVkSnNvbkZpbGVzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxvYWRSZXF1aXJlZEl0ZW1zKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUN1cnJlbnQoKSB7XHJcbiAgICB0aGlzLmdldEN1cnJlbnRDb250ZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvL1N0b3JhZ2VcclxuICBjbGVhckxvY2FsU3RvcmFnZSgpIHtcclxuXHRcdHRoaXMubG9jYWxTdG9yYWdlLmNsZWFyKCk7XHJcblx0fVxyXG5cclxuXHRjbGVhclNlc3Npb25TdG9yYWdlKCkge1xyXG5cdFx0dGhpcy5zZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xyXG5cdH1cclxuXHJcbiAgY2xlYXJXZWJTdG9yYWdlKCkge1xyXG5cdFx0dGhpcy5jbGVhckxvY2FsU3RvcmFnZSgpO1xyXG5cdFx0dGhpcy5jbGVhclNlc3Npb25TdG9yYWdlKCk7XHJcblx0fVxyXG5cclxuICAvL2N1cnJlbnRcclxuICBwdWJsaWMgZ2V0IGN1cnJlbnQoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRJZkV4cGlyZWQoKTtcclxuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnQ0U2Vzc2lvbigpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGN1cnJlbnQodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zZXRDdXJyZW50MlNlc3Npb24odmFsdWUpO1xyXG4gICAgdGhpcy5maXJlVXBkYXRlZCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvL3VzZXJcclxuXHRwdWJsaWMgZ2V0IHVzZXIoKSB7XHJcblx0XHRsZXQgY3VycmVudCA9IHRoaXMuY3VycmVudDtcclxuXHRcdHJldHVybiBjdXJyZW50Py51c2VyO1xyXG5cdH1cclxuXHJcbiAgLyogU3RvcmFnZSBDYWNoaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1CRUdJTiAqL1xyXG4gIC8vdmVyc2lvbiA9PiBsb2NhbFN0b3JhZ2VcclxuICBwdWJsaWMgZ2V0IHZlcnNpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0T2JqZWN0KEFwcENvbnRleHRTdG9yYWdlS2V5cy52ZXJzaW9uKTtcclxuICB9XHJcbiAgcHVibGljIHNldCB2ZXJzaW9uKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldE9iamVjdChBcHBDb250ZXh0U3RvcmFnZUtleXMudmVyc2lvbiwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy9jdXJyZW5jeSA9PiBsb2NhbFN0b3JhZ2VcclxuICBwdWJsaWMgZ2V0IGN1cnJlbmN5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldE9iamVjdChBcHBDb250ZXh0U3RvcmFnZUtleXMuY3VycmVuY3kpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGN1cnJlbmN5KHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldE9iamVjdChBcHBDb250ZXh0U3RvcmFnZUtleXMuY3VycmVuY3ksIHZhbHVlKTtcclxuICB9XHJcbiAgcHVibGljIGNsZWFyQ3VycmVuY3koKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmUoQXBwQ29udGV4dFN0b3JhZ2VLZXlzLmN1cnJlbmN5KTtcclxuICB9XHJcblxyXG4gIC8vY291bnRyaWVzID0+IGxvY2FsU3RvcmFnZVxyXG4gIHB1YmxpYyBnZXQgY291bnRyaWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldE9iamVjdChBcHBDb250ZXh0U3RvcmFnZUtleXMuY291bnRyaWVzKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBjb3VudHJpZXModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0T2JqZWN0KEFwcENvbnRleHRTdG9yYWdlS2V5cy5jb3VudHJpZXMsIHZhbHVlKTtcclxuICB9XHJcbiAgcHVibGljIGNsZWFyQ291bnRyaWVzKCkge1xyXG4gICAgdGhpcy5sb2NhbFN0b3JhZ2UucmVtb3ZlKEFwcENvbnRleHRTdG9yYWdlS2V5cy5jb3VudHJpZXMpO1xyXG4gIH1cclxuXHJcbiAgLy9sYW5ndWFnZXMgPT4gbG9jYWxTdG9yYWdlXHJcbiAgcHVibGljIGdldCBsYW5ndWFnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0T2JqZWN0KEFwcENvbnRleHRTdG9yYWdlS2V5cy5sYW5ndWFnZXMpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGxhbmd1YWdlcyh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRPYmplY3QoQXBwQ29udGV4dFN0b3JhZ2VLZXlzLmxhbmd1YWdlcywgdmFsdWUpO1xyXG4gIH1cclxuICBwdWJsaWMgY2xlYXJMYW5ndWFnZXMoKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmUoQXBwQ29udGV4dFN0b3JhZ2VLZXlzLmxhbmd1YWdlcyk7XHJcbiAgfVxyXG4gIC8qIFN0b3JhZ2UgQ2FjaGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRU5EICovXHJcbn1cclxuIl19
|
|
@@ -1,69 +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
|
-
29 Nov 2020
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { Injectable, Inject } from '@angular/core';
|
|
18
|
-
import { DOCUMENT } from '@angular/common';
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
import * as i1 from "@angular/platform-browser";
|
|
21
|
-
export class DigitalMarketingService {
|
|
22
|
-
constructor(title, meta, dom) {
|
|
23
|
-
this.title = title;
|
|
24
|
-
this.meta = meta;
|
|
25
|
-
this.dom = dom;
|
|
26
|
-
}
|
|
27
|
-
updateTitle(title) {
|
|
28
|
-
this.title.setTitle(title);
|
|
29
|
-
}
|
|
30
|
-
updateDescription(desc) {
|
|
31
|
-
this.meta.updateTag({ name: 'description', content: desc });
|
|
32
|
-
}
|
|
33
|
-
updateKeywords(keywords) {
|
|
34
|
-
this.meta.updateTag({ name: 'keywords', content: keywords });
|
|
35
|
-
}
|
|
36
|
-
updateMetaTags(meta) {
|
|
37
|
-
meta.forEach(m => this.meta.updateTag(m));
|
|
38
|
-
}
|
|
39
|
-
setCanonicalUrl(url) {
|
|
40
|
-
const canUrl = url === undefined ? this.dom.URL : url;
|
|
41
|
-
const link = this.dom.createElement('link');
|
|
42
|
-
link.setAttribute('rel', 'canonical');
|
|
43
|
-
this.dom.head.appendChild(link);
|
|
44
|
-
link.setAttribute('href', canUrl);
|
|
45
|
-
}
|
|
46
|
-
updateCanonicalUrl(url) {
|
|
47
|
-
const canUrl = url === undefined ? this.dom.URL : url;
|
|
48
|
-
const head = this.dom.getElementsByTagName('head')[0];
|
|
49
|
-
let link = this.dom.querySelector(`link[rel='canonical']`) || null;
|
|
50
|
-
if (link == null) {
|
|
51
|
-
link = this.dom.createElement('link');
|
|
52
|
-
head.appendChild(link);
|
|
53
|
-
}
|
|
54
|
-
link.setAttribute('rel', 'canonical');
|
|
55
|
-
link.setAttribute('href', canUrl);
|
|
56
|
-
}
|
|
57
|
-
static { this.ɵfac = function DigitalMarketingService_Factory(t) { return new (t || DigitalMarketingService)(i0.ɵɵinject(i1.Title), i0.ɵɵinject(i1.Meta), i0.ɵɵinject(DOCUMENT)); }; }
|
|
58
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DigitalMarketingService, factory: DigitalMarketingService.ɵfac, providedIn: 'root' }); }
|
|
59
|
-
}
|
|
60
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DigitalMarketingService, [{
|
|
61
|
-
type: Injectable,
|
|
62
|
-
args: [{
|
|
63
|
-
providedIn: 'root'
|
|
64
|
-
}]
|
|
65
|
-
}], () => [{ type: i1.Title }, { type: i1.Meta }, { type: undefined, decorators: [{
|
|
66
|
-
type: Inject,
|
|
67
|
-
args: [DOCUMENT]
|
|
68
|
-
}] }], null); })();
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9jb3JlL3NlcnZpY2VzL2RtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixNQUFNO0FBQ04sT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyxZQUNVLEtBQVksRUFDWixJQUFVLEVBQ1EsR0FBUTtRQUYxQixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osU0FBSSxHQUFKLElBQUksQ0FBTTtRQUNRLFFBQUcsR0FBSCxHQUFHLENBQUs7SUFFcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFhO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsY0FBYyxDQUFDLFFBQWM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxjQUFjLENBQUMsSUFBc0I7UUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFZO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEQsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBWTtRQUM3QixNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLEdBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLElBQUksSUFBSSxDQUFDO1FBRXBGLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQW9CLENBQUM7WUFDekQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQzt3RkE1Q1UsdUJBQXVCLDJEQUl4QixRQUFRO3VFQUpQLHVCQUF1QixXQUF2Qix1QkFBdUIsbUJBRnRCLE1BQU07O2lGQUVQLHVCQUF1QjtjQUhuQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O3NCQUtJLE1BQU07dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW0ub3Nvdml0bnlAb3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHkub3Nvdml0bnlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAyOSBOb3YgMjAyMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUaXRsZSwgTWV0YSwgTWV0YURlZmluaXRpb24gfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERpZ2l0YWxNYXJrZXRpbmdTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdGl0bGU6IFRpdGxlLFxyXG4gICAgcHJpdmF0ZSBtZXRhOiBNZXRhLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb206IGFueSxcclxuICApIHtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRpdGxlKHRpdGxlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRpdGxlLnNldFRpdGxlKHRpdGxlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURlc2NyaXB0aW9uKGRlc2M/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBuYW1lOiAnZGVzY3JpcHRpb24nLCBjb250ZW50OiBkZXNjIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlS2V5d29yZHMoa2V5d29yZHM/OiBhbnkpIHtcclxuICAgIHRoaXMubWV0YS51cGRhdGVUYWcoeyBuYW1lOiAna2V5d29yZHMnLCBjb250ZW50OiBrZXl3b3JkcyB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU1ldGFUYWdzKG1ldGE6IE1ldGFEZWZpbml0aW9uW10pIHtcclxuICAgIG1ldGEuZm9yRWFjaChtID0+IHRoaXMubWV0YS51cGRhdGVUYWcobSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2Fub25pY2FsVXJsKHVybD86IHN0cmluZykge1xyXG4gICAgY29uc3QgY2FuVXJsID0gdXJsID09PSB1bmRlZmluZWQgPyB0aGlzLmRvbS5VUkwgOiB1cmw7XHJcbiAgICBjb25zdCBsaW5rOiBIVE1MTGlua0VsZW1lbnQgPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgncmVsJywgJ2Nhbm9uaWNhbCcpO1xyXG4gICAgdGhpcy5kb20uaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgY2FuVXJsKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNhbm9uaWNhbFVybCh1cmw/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNhblVybCA9IHVybCA9PT0gdW5kZWZpbmVkID8gdGhpcy5kb20uVVJMIDogdXJsO1xyXG4gICAgY29uc3QgaGVhZCA9IHRoaXMuZG9tLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XHJcbiAgICBsZXQgbGluazogSFRNTExpbmtFbGVtZW50ID0gdGhpcy5kb20ucXVlcnlTZWxlY3RvcihgbGlua1tyZWw9J2Nhbm9uaWNhbCddYCkgfHwgbnVsbDtcclxuXHJcbiAgICBpZiAobGluayA9PSBudWxsKSB7XHJcbiAgICAgIGxpbmsgPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KCdsaW5rJykgYXMgSFRNTExpbmtFbGVtZW50O1xyXG4gICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgfVxyXG5cclxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnY2Fub25pY2FsJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIGNhblVybCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,75 +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
|
-
29 Nov 2020
|
|
12
|
-
|
|
13
|
-
Details:
|
|
14
|
-
https://medium.com/@danielfilipkowskiblogs/adding-google-analytics-to-angular-v15-1766c4bdaed5
|
|
15
|
-
|
|
16
|
-
API:
|
|
17
|
-
https://developers.google.com/tag-platform/gtagjs/reference
|
|
18
|
-
https://developers.google.com/analytics/devguides/collection/ga4/events?client_type=gtag
|
|
19
|
-
|
|
20
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
21
|
-
</file>
|
|
22
|
-
*/
|
|
23
|
-
//Node
|
|
24
|
-
import { Injectable } from '@angular/core';
|
|
25
|
-
import { NavigationEnd } from '@angular/router';
|
|
26
|
-
import * as i0 from "@angular/core";
|
|
27
|
-
import * as i1 from "@angular/router";
|
|
28
|
-
export class GoogleAnalyticsService {
|
|
29
|
-
constructor(router) {
|
|
30
|
-
this.router = router;
|
|
31
|
-
}
|
|
32
|
-
subscribe() {
|
|
33
|
-
this.subscription = this.router.events.subscribe({
|
|
34
|
-
next: (event) => {
|
|
35
|
-
if (event instanceof NavigationEnd) {
|
|
36
|
-
if (this.ga) {
|
|
37
|
-
this.ga('set', 'page', event.urlAfterRedirects);
|
|
38
|
-
this.ga('send', 'pageview');
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
unsubscribe() {
|
|
45
|
-
if (this.subscription) {
|
|
46
|
-
this.subscription.unsubscribe();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
event(name, params = null) {
|
|
50
|
-
if (!this.ga) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
try {
|
|
54
|
-
if (params) {
|
|
55
|
-
this.ga('event', name, params);
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.ga('event', name);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
console.error('Google Analytics event error', err);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
get ga() {
|
|
66
|
-
let ga = window.gtag;
|
|
67
|
-
return ga;
|
|
68
|
-
}
|
|
69
|
-
static { this.ɵfac = function GoogleAnalyticsService_Factory(t) { return new (t || GoogleAnalyticsService)(i0.ɵɵinject(i1.Router)); }; }
|
|
70
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: GoogleAnalyticsService, factory: GoogleAnalyticsService.ɵfac }); }
|
|
71
|
-
}
|
|
72
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GoogleAnalyticsService, [{
|
|
73
|
-
type: Injectable
|
|
74
|
-
}], () => [{ type: i1.Router }], null); })();
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWFuYWx5dGljcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvc2VydmljZXMvZ29vZ2xlLWFuYWx5dGljcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxQkU7QUFFRixNQUFNO0FBQ04sT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQVUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUd4RCxNQUFNLE9BQU8sc0JBQXNCO0lBR2pDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ2xDLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDL0MsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFLENBQUM7b0JBQ25DLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUNaLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFDaEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzlCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDYixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLENBQUM7aUJBQ0ksQ0FBQztnQkFDSixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLEdBQVMsTUFBTyxDQUFDLElBQUksQ0FBQztRQUM1QixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7dUZBOUNVLHNCQUFzQjt1RUFBdEIsc0JBQXNCLFdBQXRCLHNCQUFzQjs7aUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbS5vc292aXRueUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seS5vc292aXRueUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDI5IE5vdiAyMDIwXHJcblxyXG4gIERldGFpbHM6XHJcbiAgICBodHRwczovL21lZGl1bS5jb20vQGRhbmllbGZpbGlwa293c2tpYmxvZ3MvYWRkaW5nLWdvb2dsZS1hbmFseXRpY3MtdG8tYW5ndWxhci12MTUtMTc2NmM0YmRhZWQ1XHJcblxyXG4gICAgQVBJOlxyXG4gICAgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vdGFnLXBsYXRmb3JtL2d0YWdqcy9yZWZlcmVuY2VcclxuICAgIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL2FuYWx5dGljcy9kZXZndWlkZXMvY29sbGVjdGlvbi9nYTQvZXZlbnRzP2NsaWVudF90eXBlPWd0YWdcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEdvb2dsZUFuYWx5dGljc1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2EoJ3NldCcsICdwYWdlJywgZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMpO1xyXG4gICAgICAgICAgICB0aGlzLmdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBldmVudChuYW1lOiBzdHJpbmcsIHBhcmFtcyA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5nYSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuZ2EoJ2V2ZW50JywgbmFtZSwgcGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmdhKCdldmVudCcsIG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0dvb2dsZSBBbmFseXRpY3MgZXZlbnQgZXJyb3InLCBlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgZ2EoKSB7XHJcbiAgICBsZXQgZ2EgPSAoPGFueT53aW5kb3cpLmd0YWc7XHJcbiAgICByZXR1cm4gZ2E7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -1,77 +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
|
-
26 Jun 2020
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { Injectable } from '@angular/core';
|
|
18
|
-
//RxJs
|
|
19
|
-
import { fromEvent, merge, Subject, timer } from 'rxjs';
|
|
20
|
-
import * as i0 from "@angular/core";
|
|
21
|
-
export class IdleService {
|
|
22
|
-
constructor() {
|
|
23
|
-
this.expired$ = new Subject();
|
|
24
|
-
}
|
|
25
|
-
//Private
|
|
26
|
-
resetTimeCounters(timeOutSeconds) {
|
|
27
|
-
this.timeOutSeconds = timeOutSeconds;
|
|
28
|
-
this.timeOutMilliSeconds = timeOutSeconds * 1000;
|
|
29
|
-
this.startDate = new Date();
|
|
30
|
-
}
|
|
31
|
-
startTimer() {
|
|
32
|
-
this.timer$ = timer(this.timeOutMilliSeconds, 1 * 1000).subscribe({
|
|
33
|
-
next: (data) => {
|
|
34
|
-
let nowDate = new Date();
|
|
35
|
-
let exiredDate = new Date(this.startDate.getTime() + this.timeOutMilliSeconds);
|
|
36
|
-
if (nowDate.getTime() >= exiredDate.getTime()) {
|
|
37
|
-
//console.log("nowDate: " + nowDate);
|
|
38
|
-
//console.log("exiredDate: " + exiredDate);
|
|
39
|
-
this.expired$.next(true);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
resetTimer() {
|
|
45
|
-
this.startDate = new Date();
|
|
46
|
-
}
|
|
47
|
-
//Public
|
|
48
|
-
startWatching(timeOutSeconds) {
|
|
49
|
-
this.idle$ = merge(fromEvent(document, 'mousemove'), fromEvent(document, 'click'), fromEvent(document, 'mousedown'), fromEvent(document, 'keypress'), fromEvent(document, 'DOMMouseScroll'), fromEvent(document, 'mousewheel'), fromEvent(document, 'touchmove'), fromEvent(document, 'MSPointerMove'), fromEvent(window, 'mousemove'), fromEvent(window, 'resize'));
|
|
50
|
-
this.resetTimeCounters(timeOutSeconds);
|
|
51
|
-
this.idleSubscription = this.idle$.subscribe({
|
|
52
|
-
next: (data) => {
|
|
53
|
-
this.resetTimer();
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
this.startTimer();
|
|
57
|
-
return this.expired$;
|
|
58
|
-
}
|
|
59
|
-
stopWatching() {
|
|
60
|
-
this.timer$.unsubscribe();
|
|
61
|
-
this.idleSubscription.unsubscribe();
|
|
62
|
-
}
|
|
63
|
-
restartIdleTimer(timeOutSeconds) {
|
|
64
|
-
this.timer$.unsubscribe();
|
|
65
|
-
this.resetTimeCounters(timeOutSeconds);
|
|
66
|
-
this.startTimer();
|
|
67
|
-
}
|
|
68
|
-
static { this.ɵfac = function IdleService_Factory(t) { return new (t || IdleService)(); }; }
|
|
69
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: IdleService, factory: IdleService.ɵfac, providedIn: 'root' }); }
|
|
70
|
-
}
|
|
71
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IdleService, [{
|
|
72
|
-
type: Injectable,
|
|
73
|
-
args: [{
|
|
74
|
-
providedIn: 'root'
|
|
75
|
-
}]
|
|
76
|
-
}], null, null); })();
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvc2VydmljZXMvaWRsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsTUFBTTtBQUNOLE9BQU8sRUFBYyxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBS3BFLE1BQU0sT0FBTyxXQUFXO0lBSHhCO1FBYVMsYUFBUSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO0tBbUU1RDtJQWpFQyxTQUFTO0lBQ0QsaUJBQWlCLENBQUMsY0FBYztRQUN0QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQztRQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDaEUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFFL0UsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQzlDLHFDQUFxQztvQkFDckMsMkNBQTJDO29CQUUzQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVE7SUFDRCxhQUFhLENBQUMsY0FBYztRQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FDaEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFDNUIsU0FBUyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFDaEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFDL0IsU0FBUyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUNyQyxTQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUNqQyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUNoQyxTQUFTLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyxFQUNwQyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUM5QixTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUM1QixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLGNBQWM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7NEVBNUVVLFdBQVc7dUVBQVgsV0FBVyxXQUFYLFdBQVcsbUJBRlYsTUFBTTs7aUZBRVAsV0FBVztjQUh2QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltLm9zb3ZpdG55QG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5Lm9zb3ZpdG55QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMjYgSnVuIDIwMjBcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL05vZGVcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy9SeEpzXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZGxlU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpZGxlJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIHByaXZhdGUgdGltZXIkO1xyXG4gIHByaXZhdGUgaWRsZVN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLy9EYXRlcy9UaW1lb3V0c1xyXG4gIHByaXZhdGUgc3RhcnREYXRlO1xyXG4gIHByaXZhdGUgdGltZU91dFNlY29uZHM6IG51bWJlcjtcclxuICBwcml2YXRlIHRpbWVPdXRNaWxsaVNlY29uZHM6IG51bWJlcjtcclxuXHJcbiAgcHVibGljIGV4cGlyZWQkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgLy9Qcml2YXRlXHJcbiAgcHJpdmF0ZSByZXNldFRpbWVDb3VudGVycyh0aW1lT3V0U2Vjb25kcykge1xyXG4gICAgdGhpcy50aW1lT3V0U2Vjb25kcyA9IHRpbWVPdXRTZWNvbmRzO1xyXG4gICAgdGhpcy50aW1lT3V0TWlsbGlTZWNvbmRzID0gdGltZU91dFNlY29uZHMgKiAxMDAwO1xyXG4gICAgdGhpcy5zdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGFydFRpbWVyKCkge1xyXG4gICAgdGhpcy50aW1lciQgPSB0aW1lcih0aGlzLnRpbWVPdXRNaWxsaVNlY29uZHMsIDEgKiAxMDAwKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGxldCBub3dEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBsZXQgZXhpcmVkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc3RhcnREYXRlLmdldFRpbWUoKSArIHRoaXMudGltZU91dE1pbGxpU2Vjb25kcyk7XHJcblxyXG4gICAgICAgIGlmIChub3dEYXRlLmdldFRpbWUoKSA+PSBleGlyZWREYXRlLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIm5vd0RhdGU6IFwiICsgbm93RGF0ZSk7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiZXhpcmVkRGF0ZTogXCIgKyBleGlyZWREYXRlKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmV4cGlyZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRUaW1lcigpIHtcclxuICAgIHRoaXMuc3RhcnREYXRlID0gbmV3IERhdGUoKTtcclxuICB9XHJcblxyXG4gIC8vUHVibGljXHJcbiAgcHVibGljIHN0YXJ0V2F0Y2hpbmcodGltZU91dFNlY29uZHMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5pZGxlJCA9IG1lcmdlKFxyXG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKSxcclxuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnY2xpY2snKSxcclxuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnbW91c2Vkb3duJyksXHJcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2tleXByZXNzJyksXHJcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ0RPTU1vdXNlU2Nyb2xsJyksXHJcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNld2hlZWwnKSxcclxuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2htb3ZlJyksXHJcbiAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ01TUG9pbnRlck1vdmUnKSxcclxuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ21vdXNlbW92ZScpLFxyXG4gICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJyksXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVzZXRUaW1lQ291bnRlcnModGltZU91dFNlY29uZHMpO1xyXG5cclxuICAgIHRoaXMuaWRsZVN1YnNjcmlwdGlvbiA9IHRoaXMuaWRsZSQuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2V0VGltZXIoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFydFRpbWVyKCk7XHJcbiAgICByZXR1cm4gdGhpcy5leHBpcmVkJDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdG9wV2F0Y2hpbmcoKSB7XHJcbiAgICB0aGlzLnRpbWVyJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5pZGxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzdGFydElkbGVUaW1lcih0aW1lT3V0U2Vjb25kcykge1xyXG4gICAgdGhpcy50aW1lciQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLnJlc2V0VGltZUNvdW50ZXJzKHRpbWVPdXRTZWNvbmRzKTtcclxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,67 +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
|
-
26 Jun 2020
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { Injectable } from "@angular/core";
|
|
18
|
-
import { BehaviorSubject } from "rxjs";
|
|
19
|
-
import * as i0 from "@angular/core";
|
|
20
|
-
export class LoadingService extends BehaviorSubject {
|
|
21
|
-
constructor() {
|
|
22
|
-
super(false);
|
|
23
|
-
this.counter = 0;
|
|
24
|
-
//Public
|
|
25
|
-
this.isFreezed = false;
|
|
26
|
-
}
|
|
27
|
-
show() {
|
|
28
|
-
this.counter++;
|
|
29
|
-
let that = this;
|
|
30
|
-
setTimeout(() => {
|
|
31
|
-
if (that.counter > 0) {
|
|
32
|
-
that.next(true);
|
|
33
|
-
}
|
|
34
|
-
}, 500);
|
|
35
|
-
}
|
|
36
|
-
hide() {
|
|
37
|
-
if (this.counter <= 0) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
this.counter--;
|
|
41
|
-
if (this.counter == 0) {
|
|
42
|
-
this.next(false);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
freeze(timeout = 1000) {
|
|
46
|
-
this.isFreezed = true;
|
|
47
|
-
let that = this;
|
|
48
|
-
setTimeout(() => {
|
|
49
|
-
this.isFreezed = false;
|
|
50
|
-
}, timeout);
|
|
51
|
-
}
|
|
52
|
-
reset() {
|
|
53
|
-
if (this.counter > 0) {
|
|
54
|
-
this.next(false);
|
|
55
|
-
}
|
|
56
|
-
this.counter = 0;
|
|
57
|
-
}
|
|
58
|
-
static { this.ɵfac = function LoadingService_Factory(t) { return new (t || LoadingService)(); }; }
|
|
59
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: LoadingService, factory: LoadingService.ɵfac, providedIn: 'root' }); }
|
|
60
|
-
}
|
|
61
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LoadingService, [{
|
|
62
|
-
type: Injectable,
|
|
63
|
-
args: [{
|
|
64
|
-
providedIn: 'root'
|
|
65
|
-
}]
|
|
66
|
-
}], () => [], null); })();
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL2NvcmUvc2VydmljZXMvbG9hZGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsTUFBTTtBQUNOLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLGNBQWUsU0FBUSxlQUF3QjtJQU0xRDtRQUNFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQU5QLFlBQU8sR0FBRyxDQUFDLENBQUM7UUFFcEIsUUFBUTtRQUNELGNBQVMsR0FBRyxLQUFLLENBQUM7SUFJekIsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFZixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFZixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFrQixJQUFJO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQzsrRUFoRFUsY0FBYzt1RUFBZCxjQUFjLFdBQWQsY0FBYyxtQkFGYixNQUFNOztpRkFFUCxjQUFjO2NBSDFCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW0ub3Nvdml0bnlAb3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHkub3Nvdml0bnlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAyNiBKdW4gMjAyMFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIExvYWRpbmdTZXJ2aWNlIGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHtcclxuICBwcml2YXRlIGNvdW50ZXIgPSAwO1xyXG5cclxuICAvL1B1YmxpY1xyXG4gIHB1YmxpYyBpc0ZyZWV6ZWQgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgdGhpcy5jb3VudGVyKys7XHJcblxyXG4gICAgbGV0IHRoYXQgPSB0aGlzO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGF0LmNvdW50ZXIgPiAwKSB7XHJcbiAgICAgICAgdGhhdC5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIGlmICh0aGlzLmNvdW50ZXIgPD0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb3VudGVyLS07XHJcblxyXG4gICAgaWYgKHRoaXMuY291bnRlciA9PSAwKSB7XHJcbiAgICAgIHRoaXMubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmcmVlemUodGltZW91dDogbnVtYmVyID0gMTAwMCkge1xyXG4gICAgdGhpcy5pc0ZyZWV6ZWQgPSB0cnVlO1xyXG5cclxuICAgIGxldCB0aGF0ID0gdGhpcztcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzRnJlZXplZCA9IGZhbHNlO1xyXG4gICAgfSwgdGltZW91dCk7XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIGlmICh0aGlzLmNvdW50ZXIgPiAwKSB7XHJcbiAgICAgIHRoaXMubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb3VudGVyID0gMDtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,77 +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
|
-
14 Jun 2024
|
|
12
|
-
|
|
13
|
-
Copyright (c) 2016-2025 Osovitny Inc. All rights reserved.
|
|
14
|
-
</file>
|
|
15
|
-
*/
|
|
16
|
-
//Node
|
|
17
|
-
import { Injectable } from '@angular/core';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
export class ScriptService {
|
|
20
|
-
constructor(zone) {
|
|
21
|
-
this.zone = zone;
|
|
22
|
-
}
|
|
23
|
-
getElemId(globalVar) {
|
|
24
|
-
return `anatoly-script-${globalVar}`;
|
|
25
|
-
}
|
|
26
|
-
registerScript(url, globalVar, onReady) {
|
|
27
|
-
const existingGlobalVar = window[globalVar];
|
|
28
|
-
if (existingGlobalVar) {
|
|
29
|
-
// global variable is present = script was already loaded
|
|
30
|
-
this.zone.run(() => {
|
|
31
|
-
onReady(existingGlobalVar);
|
|
32
|
-
});
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
// prepare script elem
|
|
36
|
-
const scriptElem = document.createElement('script');
|
|
37
|
-
scriptElem.id = this.getElemId(globalVar);
|
|
38
|
-
scriptElem.innerHTML = '';
|
|
39
|
-
scriptElem.onload = () => {
|
|
40
|
-
this.zone.run(() => {
|
|
41
|
-
onReady(window[globalVar]);
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
scriptElem.src = url;
|
|
45
|
-
scriptElem.async = true;
|
|
46
|
-
scriptElem.defer = true;
|
|
47
|
-
// add script to header
|
|
48
|
-
document.getElementsByTagName('head')[0].appendChild(scriptElem);
|
|
49
|
-
}
|
|
50
|
-
cleanup(globalVar) {
|
|
51
|
-
// remove script from DOM
|
|
52
|
-
const scriptElem = document.getElementById(this.getElemId(globalVar));
|
|
53
|
-
if (scriptElem) {
|
|
54
|
-
scriptElem.remove();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
getQueryString(queryParams) {
|
|
58
|
-
let queryString = '';
|
|
59
|
-
for (let i = 0; i < queryParams.length; i++) {
|
|
60
|
-
const queryParam = queryParams[i];
|
|
61
|
-
if (i === 0) {
|
|
62
|
-
queryString += '?';
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
queryString += '&';
|
|
66
|
-
}
|
|
67
|
-
queryString += `${queryParam.name}=${queryParam.value}`;
|
|
68
|
-
}
|
|
69
|
-
return queryString;
|
|
70
|
-
}
|
|
71
|
-
static { this.ɵfac = function ScriptService_Factory(t) { return new (t || ScriptService)(i0.ɵɵinject(i0.NgZone)); }; }
|
|
72
|
-
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ScriptService, factory: ScriptService.ɵfac }); }
|
|
73
|
-
}
|
|
74
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ScriptService, [{
|
|
75
|
-
type: Injectable
|
|
76
|
-
}], () => [{ type: i0.NgZone }], null); })();
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9zY3JpcHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDOztBQU1uRCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUFzQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtJQUNsQyxDQUFDO0lBRU8sU0FBUyxDQUFDLFNBQWlCO1FBQ2pDLE9BQU8sa0JBQWtCLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBVyxFQUFFLFNBQWlCLEVBQUUsT0FBaUM7UUFDOUUsTUFBTSxpQkFBaUIsR0FBSSxNQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLHlEQUF5RDtZQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxVQUFVLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDMUIsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNqQixPQUFPLENBQUUsTUFBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNyQixVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUN4QixVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUV4Qix1QkFBdUI7UUFDdkIsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQWlCO1FBQ3ZCLHlCQUF5QjtRQUN6QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV0RSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFdBQTBCO1FBQ3ZDLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDVixXQUFXLElBQUksR0FBRyxDQUFDO1lBQ3ZCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixXQUFXLElBQUksR0FBRyxDQUFDO1lBQ3ZCLENBQUM7WUFFRCxXQUFXLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM1RCxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzs4RUE1RFUsYUFBYTt1RUFBYixhQUFhLFdBQWIsYUFBYTs7aUZBQWIsYUFBYTtjQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbS5vc292aXRueUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seS5vc292aXRueUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDE0IEp1biAyMDI0XHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDI1IE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgSVF1ZXJ5UGFyYW0gfSBmcm9tICcuLi9tb2RlbHMvcXMnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2NyaXB0U2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHpvbmU6IE5nWm9uZSkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbGVtSWQoZ2xvYmFsVmFyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBhbmF0b2x5LXNjcmlwdC0ke2dsb2JhbFZhcn1gO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJTY3JpcHQodXJsOiBzdHJpbmcsIGdsb2JhbFZhcjogc3RyaW5nLCBvblJlYWR5OiAoZ2xvYmFsVmFyOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nR2xvYmFsVmFyID0gKHdpbmRvdyBhcyBhbnkpW2dsb2JhbFZhcl07XHJcblxyXG4gICAgaWYgKGV4aXN0aW5nR2xvYmFsVmFyKSB7XHJcbiAgICAgIC8vIGdsb2JhbCB2YXJpYWJsZSBpcyBwcmVzZW50ID0gc2NyaXB0IHdhcyBhbHJlYWR5IGxvYWRlZFxyXG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgICBvblJlYWR5KGV4aXN0aW5nR2xvYmFsVmFyKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcmVwYXJlIHNjcmlwdCBlbGVtXHJcbiAgICBjb25zdCBzY3JpcHRFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICBzY3JpcHRFbGVtLmlkID0gdGhpcy5nZXRFbGVtSWQoZ2xvYmFsVmFyKTtcclxuICAgIHNjcmlwdEVsZW0uaW5uZXJIVE1MID0gJyc7XHJcbiAgICBzY3JpcHRFbGVtLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgb25SZWFkeSgod2luZG93IGFzIGFueSlbZ2xvYmFsVmFyXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHNjcmlwdEVsZW0uc3JjID0gdXJsO1xyXG4gICAgc2NyaXB0RWxlbS5hc3luYyA9IHRydWU7XHJcbiAgICBzY3JpcHRFbGVtLmRlZmVyID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBhZGQgc2NyaXB0IHRvIGhlYWRlclxyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHRFbGVtKTtcclxuICB9XHJcblxyXG4gIGNsZWFudXAoZ2xvYmFsVmFyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIHJlbW92ZSBzY3JpcHQgZnJvbSBET01cclxuICAgIGNvbnN0IHNjcmlwdEVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldEVsZW1JZChnbG9iYWxWYXIpKTtcclxuXHJcbiAgICBpZiAoc2NyaXB0RWxlbSkge1xyXG4gICAgICAgIHNjcmlwdEVsZW0ucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRRdWVyeVN0cmluZyhxdWVyeVBhcmFtczogSVF1ZXJ5UGFyYW1bXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5UGFyYW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW1zW2ldO1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICc/JztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSAnJic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtxdWVyeVBhcmFtLm5hbWV9PSR7cXVlcnlQYXJhbS52YWx1ZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBxdWVyeVN0cmluZztcclxuICB9XHJcbn1cclxuIl19
|