@sumaris-net/ngx-components 2.0.0 → 2.0.3
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/esm2020/public_api.mjs +2 -2
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +3 -3
- package/esm2020/src/app/core/form/entity/entity-editor.class.mjs +3 -3
- package/esm2020/src/app/core/settings/settings.page.mjs +2 -2
- package/esm2020/src/app/shared/material/swipe/testing/swipe.test.mjs +6 -6
- package/esm2020/src/app/shared/pipes/date-format.pipe.mjs +35 -11
- package/esm2020/src/app/shared/pipes/property.pipes.mjs +3 -6
- package/esm2020/src/app/shared/shared.module.mjs +3 -3
- package/esm2020/src/app/social/job/job.model.mjs +1 -23
- package/esm2020/src/app/social/job/progression/job-progression.icon.mjs +11 -8
- package/esm2020/src/app/social/job/progression/job-progression.list.mjs +1 -1
- package/esm2020/src/app/social/job/progression/job-progression.model.mjs +23 -0
- package/esm2020/src/app/social/job/progression/job-progression.service.mjs +71 -0
- package/esm2020/src/app/social/job/testing/job-progression.testing.mjs +4 -5
- package/esm2020/src/app/social/job/testing/job-progression.testing.service.mjs +2 -2
- package/esm2020/src/app/social/user-event/notification/user-event-notification.list.mjs +2 -2
- package/fesm2015/sumaris-net.ngx-components.mjs +63 -40
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +63 -38
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/plugins/clovelced-plugin-audiomanagement/README.md +66 -0
- package/plugins/cordova-plugin-camera/README.md +703 -0
- package/plugins/cordova-plugin-device/README.md +309 -0
- package/plugins/cordova-plugin-file/README.md +848 -0
- package/plugins/cordova-plugin-file-transfer/README.md +598 -0
- package/plugins/cordova-plugin-file-transfer/doc/de/README.md +311 -0
- package/plugins/cordova-plugin-file-transfer/doc/es/README.md +311 -0
- package/plugins/cordova-plugin-file-transfer/doc/fr/README.md +270 -0
- package/plugins/cordova-plugin-file-transfer/doc/it/README.md +311 -0
- package/plugins/cordova-plugin-file-transfer/doc/ja/README.md +311 -0
- package/plugins/cordova-plugin-file-transfer/doc/ko/README.md +311 -0
- package/plugins/cordova-plugin-file-transfer/doc/pl/README.md +311 -0
- package/plugins/cordova-plugin-file-transfer/doc/zh/README.md +311 -0
- package/plugins/cordova-plugin-ionic-keyboard/README.md +220 -0
- package/plugins/cordova-plugin-ionic-webview/README.md +181 -0
- package/plugins/cordova-plugin-media-capture/README.md +626 -0
- package/plugins/cordova-plugin-splashscreen/README.md +387 -0
- package/plugins/cordova-plugin-statusbar/README.md +341 -0
- package/plugins/cordova-plugin-telerik-imagepicker/README.md +155 -0
- package/plugins/cordova-plugin-whitelist/README.md +185 -0
- package/plugins/cordova-sqlite-storage/README.md +1848 -0
- package/plugins/integrator-cordova-plugin-downloader/README.md +49 -0
- package/public_api.d.ts +1 -1
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +2 -2
- package/src/app/core/form/entity/entity-editor.class.d.ts +2 -2
- package/src/app/shared/material/swipe/testing/swipe.test.d.ts +3 -3
- package/src/app/shared/pipes/date-format.pipe.d.ts +22 -11
- package/src/app/shared/pipes/property.pipes.d.ts +4 -6
- package/src/app/social/job/job.model.d.ts +0 -11
- package/src/app/social/job/progression/job-progression.icon.d.ts +2 -2
- package/src/app/social/job/progression/job-progression.list.d.ts +1 -1
- package/src/app/social/job/progression/job-progression.model.d.ts +11 -0
- package/src/app/social/job/{job.service.d.ts → progression/job-progression.service.d.ts} +5 -5
- package/src/app/social/job/testing/job-progression.testing.d.ts +4 -4
- package/src/app/social/job/testing/job-progression.testing.service.d.ts +2 -2
- package/src/assets/i18n/en-US.json +20 -5
- package/src/assets/i18n/en.json +18 -4
- package/src/assets/i18n/fr.json +13 -5
- package/esm2020/src/app/social/job/job.service.mjs +0 -71
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
Android Downloader Cordova plugin
|
|
2
|
+
========
|
|
3
|
+
|
|
4
|
+
This plugin is designed to support downloading files using Android DownloadManager.
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Installation
|
|
8
|
+
--------
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
cordova plugin add integrator-cordova-plugin-downloader
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Usage
|
|
15
|
+
--------
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
|
|
19
|
+
var request = {
|
|
20
|
+
uri: '',
|
|
21
|
+
title: '',
|
|
22
|
+
description: '',
|
|
23
|
+
mimeType: '',
|
|
24
|
+
visibleInDownloadsUi: true,
|
|
25
|
+
notificationVisibility: 0,
|
|
26
|
+
|
|
27
|
+
// Either of the next three properties
|
|
28
|
+
destinationInExternalFilesDir: {
|
|
29
|
+
dirType: '',
|
|
30
|
+
subPath: ''
|
|
31
|
+
},
|
|
32
|
+
destinationInExternalPublicDir: {
|
|
33
|
+
dirType: '',
|
|
34
|
+
subPath: ''
|
|
35
|
+
},
|
|
36
|
+
destinationUri: '',
|
|
37
|
+
headers: [{header: 'Authorization', value: 'Bearer iaksjfd89aklfdlkasdjf'}]
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
this.downloader.download(request)
|
|
41
|
+
.then((location) => console.log('File download location:' + location))
|
|
42
|
+
.catch((error) => console.error(error));
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Credits and License ##
|
|
46
|
+
|
|
47
|
+
Based on Emil Bay's cordova-plugin-android-downloadmanager(<https://github.com/emilbayes/cordova-plugin-android-downloadmanager>)
|
|
48
|
+
|
|
49
|
+
|
package/public_api.d.ts
CHANGED
|
@@ -205,7 +205,7 @@ export * from './src/app/social/user-event/user-event.service';
|
|
|
205
205
|
export * from './src/app/social/user-event/notification/user-event-notification.icon';
|
|
206
206
|
export * from './src/app/social/job/job.module';
|
|
207
207
|
export * from './src/app/social/job/job.model';
|
|
208
|
-
export * from './src/app/social/job/job.service';
|
|
208
|
+
export * from './src/app/social/job/progression/job-progression.service';
|
|
209
209
|
export * from './src/app/social/job/progression/job-progression.icon';
|
|
210
210
|
export * from './src/app/social/job/progression/job-progression.list';
|
|
211
211
|
export * from './src/app/social/message/message.module';
|
|
@@ -6,7 +6,7 @@ import { Entity } from '../../services/model/entity.model';
|
|
|
6
6
|
import { UsageMode } from '../../services/model/settings.model';
|
|
7
7
|
import { FormGroup } from '@angular/forms';
|
|
8
8
|
import { AppTabEditor, AppTabEditorOptions } from './editor.class';
|
|
9
|
-
import {
|
|
9
|
+
import { DateFormatService } from '../../../shared/pipes/date-format.pipe';
|
|
10
10
|
import { Environment } from '../../../../environments/environment.class';
|
|
11
11
|
import { WaitForOptions } from '../../../shared/observables';
|
|
12
12
|
import { FormErrorTranslator } from '../../../shared/validator/form-error-adapter.class';
|
|
@@ -30,7 +30,7 @@ export declare abstract class AppEntityEditorModal<T extends Entity<T, ID>, ID =
|
|
|
30
30
|
private _usageMode;
|
|
31
31
|
protected _logPrefix: any;
|
|
32
32
|
protected _isNew: boolean;
|
|
33
|
-
protected readonly dateFormat:
|
|
33
|
+
protected readonly dateFormat: DateFormatService;
|
|
34
34
|
protected readonly cd: ChangeDetectorRef;
|
|
35
35
|
protected readonly settings: LocalSettingsService;
|
|
36
36
|
protected readonly modalCtrl: ModalController;
|
|
@@ -6,7 +6,7 @@ import { UsageMode } from '../../services/model/settings.model';
|
|
|
6
6
|
import { FormGroup } from '@angular/forms';
|
|
7
7
|
import { AppTabEditor, AppTabEditorOptions, IAppTabEditor } from './editor.class';
|
|
8
8
|
import { EntityServiceLoadOptions, IEntityService } from '../../../shared/services/entity-service.class';
|
|
9
|
-
import {
|
|
9
|
+
import { DateFormatService } from '../../../shared/pipes/date-format.pipe';
|
|
10
10
|
import { Environment } from '../../../../environments/environment.class';
|
|
11
11
|
import { HistoryPageReference } from '../../services/model/history.model';
|
|
12
12
|
import { WaitForOptions } from '../../../shared/observables';
|
|
@@ -54,7 +54,7 @@ export declare abstract class AppEntityEditor<T extends Entity<T, ID>, S extends
|
|
|
54
54
|
private readonly _autoUpdateRoute;
|
|
55
55
|
private _autoOpenNextTab;
|
|
56
56
|
private _listenChangesSubscription;
|
|
57
|
-
protected readonly dateFormat:
|
|
57
|
+
protected readonly dateFormat: DateFormatService;
|
|
58
58
|
protected readonly cd: ChangeDetectorRef;
|
|
59
59
|
protected readonly settings: LocalSettingsService;
|
|
60
60
|
protected readonly environment: Environment;
|
|
@@ -2,16 +2,16 @@ import { OnInit } from '@angular/core';
|
|
|
2
2
|
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { Moment } from 'moment';
|
|
5
|
-
import {
|
|
5
|
+
import { DateFormatService } from '../../../pipes/date-format.pipe';
|
|
6
6
|
import { DisplayFn } from '../../../form/field.model';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class SwipeTestPage implements OnInit {
|
|
9
9
|
protected formBuilder: UntypedFormBuilder;
|
|
10
|
-
protected
|
|
10
|
+
protected dateFormat: DateFormatService;
|
|
11
11
|
form: UntypedFormGroup;
|
|
12
12
|
$dates: BehaviorSubject<Moment[]>;
|
|
13
13
|
private _today;
|
|
14
|
-
constructor(formBuilder: UntypedFormBuilder,
|
|
14
|
+
constructor(formBuilder: UntypedFormBuilder, dateFormat: DateFormatService);
|
|
15
15
|
ngOnInit(): void;
|
|
16
16
|
loadData(): Promise<void>;
|
|
17
17
|
doSubmit(event?: Event): void;
|
|
@@ -1,23 +1,34 @@
|
|
|
1
|
-
import { PipeTransform } from '@angular/core';
|
|
1
|
+
import { OnDestroy, PipeTransform } from '@angular/core';
|
|
2
2
|
import { Moment } from 'moment';
|
|
3
3
|
import { TranslateService } from '@ngx-translate/core';
|
|
4
4
|
import { MomentDateAdapter } from '@angular/material-moment-adapter';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
export declare class
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
constructor(dateAdapter: MomentDateAdapter, translate: TranslateService);
|
|
6
|
+
export declare abstract class AbstractDateFormat {
|
|
7
|
+
protected dateAdapter: MomentDateAdapter;
|
|
8
|
+
protected translate: TranslateService;
|
|
9
|
+
private datePattern;
|
|
10
|
+
private dateTimePattern;
|
|
11
|
+
private dateTimeSecondsPattern;
|
|
12
|
+
protected constructor(dateAdapter: MomentDateAdapter, translate: TranslateService);
|
|
13
13
|
transform(value: string | Moment | Date, args?: {
|
|
14
14
|
pattern?: string;
|
|
15
15
|
time?: boolean;
|
|
16
16
|
seconds?: boolean;
|
|
17
17
|
}): string;
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
protected _updateTranslations(translations: any): void;
|
|
19
|
+
protected _getTranslationValue(translations: any, key: string, defaultValue: string): string;
|
|
20
|
+
}
|
|
21
|
+
export declare class DateFormatPipe extends AbstractDateFormat implements PipeTransform {
|
|
22
|
+
constructor(dateAdapter: MomentDateAdapter, translate: TranslateService);
|
|
20
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<DateFormatPipe, never>;
|
|
21
24
|
static ɵpipe: i0.ɵɵPipeDeclaration<DateFormatPipe, "dateFormat", false>;
|
|
22
|
-
|
|
25
|
+
}
|
|
26
|
+
export declare class DateFormatService extends AbstractDateFormat implements OnDestroy {
|
|
27
|
+
private _subscription;
|
|
28
|
+
constructor(dateAdapter: MomentDateAdapter, translate: TranslateService);
|
|
29
|
+
ngOnDestroy(): void;
|
|
30
|
+
format(date: Moment, pattern: any): string;
|
|
31
|
+
parse(value: string, parseFormat: any): Moment;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DateFormatService, never>;
|
|
33
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DateFormatService>;
|
|
23
34
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import { DateFormatService } from './date-format.pipe';
|
|
3
3
|
import { FormFieldDefinition } from '../form/field.model';
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
@@ -11,14 +11,12 @@ export declare class PropertyGetPipe implements PipeTransform {
|
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<PropertyGetPipe, never>;
|
|
12
12
|
static ɵpipe: i0.ɵɵPipeDeclaration<PropertyGetPipe, "propertyGet", false>;
|
|
13
13
|
}
|
|
14
|
-
export declare class PropertyFormatPipe implements PipeTransform
|
|
14
|
+
export declare class PropertyFormatPipe implements PipeTransform {
|
|
15
15
|
private dateFormat;
|
|
16
16
|
private translate;
|
|
17
|
-
private _subscription;
|
|
18
17
|
private _i18nYes;
|
|
19
18
|
private _i18nNo;
|
|
20
|
-
constructor(dateFormat:
|
|
21
|
-
ngOnDestroy(): void;
|
|
19
|
+
constructor(dateFormat: DateFormatService, translate: TranslateService);
|
|
22
20
|
transform(obj: any, keyOrDefinition: string | FormFieldDefinition): string | Promise<string>;
|
|
23
21
|
get i18nYes(): string;
|
|
24
22
|
get i18nNo(): string;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Moment } from 'moment';
|
|
2
|
-
import { Entity } from '../../core/services/model/entity.model';
|
|
3
2
|
export declare type JobStatus = 'PENDING' | 'RUNNING' | 'SUCCESS' | 'ERROR' | 'FAILED' | 'WARNING' | 'CANCELLED';
|
|
4
3
|
export interface IJob {
|
|
5
4
|
id: number;
|
|
@@ -21,13 +20,3 @@ export declare class Job implements IJob {
|
|
|
21
20
|
configuration: string;
|
|
22
21
|
report: string;
|
|
23
22
|
}
|
|
24
|
-
export declare class JobProgression extends Entity<JobProgression> {
|
|
25
|
-
static fromObject: (source: any, opts?: any) => JobProgression;
|
|
26
|
-
id: number;
|
|
27
|
-
name: string;
|
|
28
|
-
message: string;
|
|
29
|
-
current: number;
|
|
30
|
-
total: number;
|
|
31
|
-
constructor(id?: number);
|
|
32
|
-
fromObject(source: any): void;
|
|
33
|
-
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ChangeDetectorRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { ThemePalette } from '@angular/material/core';
|
|
3
3
|
import { ProgressSpinnerMode } from '@angular/material/progress-spinner';
|
|
4
|
-
import { IJobProgressionService } from '
|
|
5
|
-
import { JobProgression } from '
|
|
4
|
+
import { IJobProgressionService } from './job-progression.service';
|
|
5
|
+
import { JobProgression } from './job-progression.model';
|
|
6
6
|
import { PopoverController } from '@ionic/angular';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export interface JobProgressionOptions {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Entity } from '../../../core/services/model/entity.model';
|
|
2
|
+
export declare class JobProgression extends Entity<JobProgression> {
|
|
3
|
+
static fromObject: (source: any, opts?: any) => JobProgression;
|
|
4
|
+
id: number;
|
|
5
|
+
name: string;
|
|
6
|
+
message: string;
|
|
7
|
+
current: number;
|
|
8
|
+
total: number;
|
|
9
|
+
constructor(id?: number);
|
|
10
|
+
fromObject(source: any): void;
|
|
11
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
|
-
import { JobProgression } from './job.model';
|
|
3
|
-
import { BaseGraphqlService } from '
|
|
4
|
-
import { GraphqlService } from '
|
|
5
|
-
import { Environment } from '
|
|
2
|
+
import { JobProgression } from './job-progression.model';
|
|
3
|
+
import { BaseGraphqlService } from '../../../core/services/base-graphql-service.class';
|
|
4
|
+
import { GraphqlService } from '../../../core/graphql/graphql.service';
|
|
5
|
+
import { Environment } from '../../../../environments/environment.class';
|
|
6
6
|
import { Observable } from 'rxjs';
|
|
7
7
|
import { FetchPolicy, WatchQueryFetchPolicy } from '@apollo/client/core';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
|
-
export declare const APP_JOB_PROGRESSION_SERVICE: InjectionToken<
|
|
9
|
+
export declare const APP_JOB_PROGRESSION_SERVICE: InjectionToken<IJobProgressionService>;
|
|
10
10
|
export interface IJobProgressionService {
|
|
11
11
|
watchAll(): Observable<JobProgression[]>;
|
|
12
12
|
addJob(id: number, job?: JobProgression): any;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { JobProgressionIcon, JobProgressionOptions } from '../progression/job-progression.icon';
|
|
2
|
-
import { JobProgression } from '../job.model';
|
|
3
|
-
import {
|
|
2
|
+
import { JobProgression } from '../progression/job-progression.model';
|
|
3
|
+
import { IJobProgressionService } from '../progression/job-progression.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class JobProgressionTestingPage {
|
|
6
|
-
protected jobProgressionService:
|
|
6
|
+
protected jobProgressionService: IJobProgressionService;
|
|
7
7
|
jobProgressionIcon: JobProgressionIcon;
|
|
8
8
|
jobId: number;
|
|
9
9
|
job: JobProgression;
|
|
10
10
|
options: JobProgressionOptions;
|
|
11
|
-
constructor(jobProgressionService:
|
|
11
|
+
constructor(jobProgressionService: IJobProgressionService);
|
|
12
12
|
incrementJob(value: number): void;
|
|
13
13
|
addJob(): void;
|
|
14
14
|
private createJob;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { IJobProgressionService } from '../job.service';
|
|
1
|
+
import { IJobProgressionService } from '../progression/job-progression.service';
|
|
2
2
|
import { FetchPolicy } from '@apollo/client/core';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
|
-
import { JobProgression } from '../job.model';
|
|
4
|
+
import { JobProgression } from '../progression/job-progression.model';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
export declare class JobProgressionTestService implements IJobProgressionService {
|
|
7
7
|
private jobsSubject;
|
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
"LABEL": "Organization code",
|
|
338
338
|
"NAME": "Organization name"
|
|
339
339
|
},
|
|
340
|
-
"STATUS": "
|
|
340
|
+
"STATUS": "State",
|
|
341
341
|
"PUBKEY": "Public key",
|
|
342
342
|
"PROFILE": "Profile",
|
|
343
343
|
"PROFILE_ENUM": {
|
|
@@ -348,6 +348,7 @@
|
|
|
348
348
|
},
|
|
349
349
|
"LIST": {
|
|
350
350
|
"TITLE": "Users",
|
|
351
|
+
"BTN_SEND_MESSAGE": "Send a message",
|
|
351
352
|
"FILTER": {
|
|
352
353
|
"SEARCH": "Search"
|
|
353
354
|
}
|
|
@@ -362,6 +363,7 @@
|
|
|
362
363
|
"OFFLINE": "Unreachable node",
|
|
363
364
|
"SELECT_MODAL": {
|
|
364
365
|
"TITLE": "Network nodes",
|
|
366
|
+
"BTN_SET_MANUALLY": "Define manually",
|
|
365
367
|
"HELP": "Please choose a network node to connect to:",
|
|
366
368
|
"NOT_COMPATIBLE_HELP": "Required version: v{{version}} or +"
|
|
367
369
|
}
|
|
@@ -376,7 +378,7 @@
|
|
|
376
378
|
"IMPORTATION_SUCCEED": "Import successfully completed!<br/><b>Offline mode</b> is now available.",
|
|
377
379
|
"OFFLINE": "No network connection.",
|
|
378
380
|
"OFFLINE_OR_UNAUTHORIZED": "No network connection, or unauthorized access.",
|
|
379
|
-
"ONLINE": "
|
|
381
|
+
"ONLINE": "Successfully connected to the network!",
|
|
380
382
|
"OFFLINE_HELP": "The application works in <b>offline mode</b>.",
|
|
381
383
|
"RETRY_TO_CONNECT": "<i>Retrying <b>to connect to the network...</b></i>",
|
|
382
384
|
"UPDATE_OFFLINE_MODE": "<b>Offline mode</b> update available.",
|
|
@@ -386,11 +388,20 @@
|
|
|
386
388
|
"NOT_COMPATIBLE_PEER": "The application works in <b>offline mode</b>, because the node <b>use a too old version</b>.<br/><small>If the problem persists, please <b>contact your administrator</b>, or select a node v{{version}} or superior.</small>"
|
|
387
389
|
}
|
|
388
390
|
},
|
|
391
|
+
"MAP": {
|
|
392
|
+
"ZOOM_IN": "Zoom in",
|
|
393
|
+
"ZOOM_OUT": "Zoom out",
|
|
394
|
+
"ENTER_FULLSCREEN": "Fullscreen mode",
|
|
395
|
+
"EXIT_FULLSCREEN": "Exit fullscreen mode",
|
|
396
|
+
"SHOW_GRATICULE": "Show graticule",
|
|
397
|
+
"HIDE_GRATICULE": "Hide graticule"
|
|
398
|
+
},
|
|
389
399
|
"SOCIAL": {
|
|
390
400
|
"USER_EVENT": {
|
|
391
401
|
"NOTIFICATION": {
|
|
392
402
|
"TITLE": "Notifications",
|
|
393
|
-
"EMPTY": "No notification"
|
|
403
|
+
"EMPTY": "No notification",
|
|
404
|
+
"READ_ALL": "Mark all as read"
|
|
394
405
|
},
|
|
395
406
|
"EVENT_TYPE": "Type",
|
|
396
407
|
"CREATION_DATE": "Date/Time",
|
|
@@ -445,6 +456,10 @@
|
|
|
445
456
|
"ERROR": "Error while uploading file"
|
|
446
457
|
}
|
|
447
458
|
},
|
|
459
|
+
"IMAGE": {
|
|
460
|
+
"BTN_CAMERA_SOURCE": "Take a picture",
|
|
461
|
+
"BTN_GALLERY_SOURCE": "Open gallery"
|
|
462
|
+
},
|
|
448
463
|
"ERROR": {
|
|
449
464
|
"ALERT_HEADER": "Error",
|
|
450
465
|
"FIELD_REQUIRED": "Value required",
|
|
@@ -454,9 +469,9 @@
|
|
|
454
469
|
"FIELD_MAX_LENGTH": "Too long value{{ maxLength && (' (max ' + maxLength + 'characters)') }}.",
|
|
455
470
|
"FIELD_MAX_LENGTH_COMPACT": "Too long value",
|
|
456
471
|
"FIELD_MIN": "Minimal value: {{min}}",
|
|
457
|
-
"FIELD_MIN_COMPACT": "Min
|
|
472
|
+
"FIELD_MIN_COMPACT": "Min {{min}}",
|
|
458
473
|
"FIELD_MAX": "Maximum value: {{max}}",
|
|
459
|
-
"FIELD_MAX_COMPACT": "Max
|
|
474
|
+
"FIELD_MAX_COMPACT": "Max {{max}}",
|
|
460
475
|
"FIELD_MAXIMUM_DECIMALS": "Too many decimals ({{maxDecimals}} max)",
|
|
461
476
|
"FIELD_MAXIMUM_DECIMALS_COMPACT": "Nb decimals > {{maxDecimals}}",
|
|
462
477
|
"FIELD_INVALID": "Invalid value",
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
"LABEL": "Organization code",
|
|
338
338
|
"NAME": "Organization name"
|
|
339
339
|
},
|
|
340
|
-
"STATUS": "
|
|
340
|
+
"STATUS": "State",
|
|
341
341
|
"PUBKEY": "Public key",
|
|
342
342
|
"PROFILE": "Profile",
|
|
343
343
|
"PROFILE_ENUM": {
|
|
@@ -348,6 +348,7 @@
|
|
|
348
348
|
},
|
|
349
349
|
"LIST": {
|
|
350
350
|
"TITLE": "Users",
|
|
351
|
+
"BTN_SEND_MESSAGE": "Send a message",
|
|
351
352
|
"FILTER": {
|
|
352
353
|
"SEARCH": "Search"
|
|
353
354
|
}
|
|
@@ -362,6 +363,7 @@
|
|
|
362
363
|
"OFFLINE": "Unreachable node",
|
|
363
364
|
"SELECT_MODAL": {
|
|
364
365
|
"TITLE": "Network nodes",
|
|
366
|
+
"BTN_SET_MANUALLY": "Define manually",
|
|
365
367
|
"HELP": "Please choose a network node to connect to:",
|
|
366
368
|
"NOT_COMPATIBLE_HELP": "Required version: v{{version}} or +"
|
|
367
369
|
}
|
|
@@ -376,7 +378,7 @@
|
|
|
376
378
|
"IMPORTATION_SUCCEED": "Import successfully completed!<br/><b>Offline mode</b> is now available.",
|
|
377
379
|
"OFFLINE": "No network connection.",
|
|
378
380
|
"OFFLINE_OR_UNAUTHORIZED": "No network connection, or unauthorized access.",
|
|
379
|
-
"ONLINE": "
|
|
381
|
+
"ONLINE": "Successfully connected to the network!",
|
|
380
382
|
"OFFLINE_HELP": "The application works in <b>offline mode</b>.",
|
|
381
383
|
"RETRY_TO_CONNECT": "<i>Retrying <b>to connect to the network...</b></i>",
|
|
382
384
|
"UPDATE_OFFLINE_MODE": "<b>Offline mode</b> update available.",
|
|
@@ -386,6 +388,14 @@
|
|
|
386
388
|
"NOT_COMPATIBLE_PEER": "The application works in <b>offline mode</b>, because the node <b>use a too old version</b>.<br/><small>If the problem persists, please <b>contact your administrator</b>, or select a node v{{version}} or superior.</small>"
|
|
387
389
|
}
|
|
388
390
|
},
|
|
391
|
+
"MAP": {
|
|
392
|
+
"ZOOM_IN": "Zoom in",
|
|
393
|
+
"ZOOM_OUT": "Zoom out",
|
|
394
|
+
"ENTER_FULLSCREEN": "Fullscreen mode",
|
|
395
|
+
"EXIT_FULLSCREEN": "Exit fullscreen mode",
|
|
396
|
+
"SHOW_GRATICULE": "Show graticule",
|
|
397
|
+
"HIDE_GRATICULE": "Hide graticule"
|
|
398
|
+
},
|
|
389
399
|
"SOCIAL": {
|
|
390
400
|
"USER_EVENT": {
|
|
391
401
|
"NOTIFICATION": {
|
|
@@ -446,6 +456,10 @@
|
|
|
446
456
|
"ERROR": "Error while uploading file"
|
|
447
457
|
}
|
|
448
458
|
},
|
|
459
|
+
"IMAGE": {
|
|
460
|
+
"BTN_CAMERA_SOURCE": "Take a picture",
|
|
461
|
+
"BTN_GALLERY_SOURCE": "Open gallery"
|
|
462
|
+
},
|
|
449
463
|
"ERROR": {
|
|
450
464
|
"ALERT_HEADER": "Error",
|
|
451
465
|
"FIELD_REQUIRED": "Value required",
|
|
@@ -455,9 +469,9 @@
|
|
|
455
469
|
"FIELD_MAX_LENGTH": "Too long value{{ maxLength && (' (max ' + maxLength + 'characters)') }}.",
|
|
456
470
|
"FIELD_MAX_LENGTH_COMPACT": "Too long value",
|
|
457
471
|
"FIELD_MIN": "Minimal value: {{min}}",
|
|
458
|
-
"FIELD_MIN_COMPACT": "Min
|
|
472
|
+
"FIELD_MIN_COMPACT": "Min {{min}}",
|
|
459
473
|
"FIELD_MAX": "Maximum value: {{max}}",
|
|
460
|
-
"FIELD_MAX_COMPACT": "Max
|
|
474
|
+
"FIELD_MAX_COMPACT": "Max {{max}}",
|
|
461
475
|
"FIELD_MAXIMUM_DECIMALS": "Too many decimals ({{maxDecimals}} max)",
|
|
462
476
|
"FIELD_MAXIMUM_DECIMALS_COMPACT": "Nb decimals > {{maxDecimals}}",
|
|
463
477
|
"FIELD_INVALID": "Invalid value",
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -103,11 +103,14 @@
|
|
|
103
103
|
"YES": "Oui",
|
|
104
104
|
"NO": "Non",
|
|
105
105
|
|
|
106
|
+
"DEBUG": "Debug",
|
|
106
107
|
"UPDATED_ON": "Mise à jour le",
|
|
107
108
|
"RECORDER": "Saisisseur",
|
|
108
109
|
"RESULT_COUNT": "{{count}} résultats",
|
|
109
110
|
"NO_RESULT": "Aucun résultat",
|
|
110
111
|
"LOADING_DOTS": "Chargement...",
|
|
112
|
+
"PLEASE_WAIT": "Veuillez patienter...",
|
|
113
|
+
"NO_DATA": "Aucune donnée",
|
|
111
114
|
"MISSING": "Manquant",
|
|
112
115
|
|
|
113
116
|
"DISPLAYED_COLUMNS": "Paramétrage des colonnes",
|
|
@@ -128,10 +131,10 @@
|
|
|
128
131
|
},
|
|
129
132
|
"CONFIGURATION": {
|
|
130
133
|
"OPTIONS": {
|
|
131
|
-
"ANDROID_INSTALL_URL": "Android >
|
|
134
|
+
"ANDROID_INSTALL_URL": "Android > URL d'installation App",
|
|
132
135
|
"LOGO": "Menu > Logo (largeur max 110px)",
|
|
133
136
|
"FAVICON": "favicon",
|
|
134
|
-
"GRAVATAR_URL": "Utilisateur > URL Gravatar (avec '{md5}'",
|
|
137
|
+
"GRAVATAR_URL": "Utilisateur > URL Gravatar (avec '{md5}')",
|
|
135
138
|
"ENABLE_GRAVATAR": "Utilisateur > Utiliser Gravatar ?",
|
|
136
139
|
"DEFAULT_LOCALE": "Langue par défaut",
|
|
137
140
|
"DEFAULT_LATLONG_FORMAT": "Format lat/lon par défaut",
|
|
@@ -305,6 +308,8 @@
|
|
|
305
308
|
"OFFLINE_MODE": "Forcer le mode hors-ligne ?",
|
|
306
309
|
"DATA_ENTRY_DIVIDER": "Paramètres de saisie",
|
|
307
310
|
"USAGE_MODE": "Mode de saisie",
|
|
311
|
+
"USAGE_MODE_FIELD": "Mode saisie <b>terrain</b>",
|
|
312
|
+
"USAGE_MODE_DESK": "Mode saisie <b>bureau</b>",
|
|
308
313
|
"USAGE_MODES": {
|
|
309
314
|
"FIELD": "Saisie terrain",
|
|
310
315
|
"DESK": "Saisie bureau"
|
|
@@ -467,9 +472,9 @@
|
|
|
467
472
|
"FIELD_MIN_LENGTH_COMPACT": "Valeur trop courte",
|
|
468
473
|
"FIELD_MAX_LENGTH": "Valeur trop longue {{maxLength && (' (' + maxLength + ' caract. max)') }}",
|
|
469
474
|
"FIELD_MAX_LENGTH_COMPACT": "Valeur trop longue",
|
|
470
|
-
"FIELD_MIN": "
|
|
475
|
+
"FIELD_MIN": "Valeur minimale : {{min}}",
|
|
471
476
|
"FIELD_MIN_COMPACT": "Min {{min}}",
|
|
472
|
-
"FIELD_MAX": "Valeur maximale
|
|
477
|
+
"FIELD_MAX": "Valeur maximale : {{max}}",
|
|
473
478
|
"FIELD_MAX_COMPACT": "Max {{max}}",
|
|
474
479
|
"FIELD_MAXIMUM_DECIMALS": "Trop de décimales (max: {{maxDecimals}})",
|
|
475
480
|
"FIELD_MAXIMUM_DECIMALS_COMPACT": "Nb décimale > {{maxDecimals}}",
|
|
@@ -533,6 +538,7 @@
|
|
|
533
538
|
"LOAD_ENTITIES_ERROR": "Erreur lors de chargement de la liste",
|
|
534
539
|
"SAVE_ENTITY_ERROR": "Erreur lors de la sauvegarde",
|
|
535
540
|
"SAVE_ENTITIES_ERROR": "Erreur lors de la sauvegarde de la liste",
|
|
541
|
+
"DELETE_ENTITY_ERROR": "Erreur lors de la suppression. <small><br/>Si le problème persiste, veuillez contacter votre administrateur.</small>",
|
|
536
542
|
"SUBSCRIBE_ENTITY_ERROR": "Erreur lors de l'abonnement aux modifications distantes",
|
|
537
543
|
"CONTROL_ENTITY_ERROR": "Erreur lors du contrôle de la validité des données",
|
|
538
544
|
"TERMINATE_ENTITY_ERROR": "Terminaision de la saisie impossible. <small><br/>Si le problème persiste, veuillez contacter votre administrateur.</small>",
|
|
@@ -543,7 +549,9 @@
|
|
|
543
549
|
"LOAD_ERROR": "Erreur de chargement",
|
|
544
550
|
"SAVE_ERROR": "Erreur de sauvegarde",
|
|
545
551
|
"SUBSCRIBE_ERROR": "Echec de l'abonnement distant aux modifications",
|
|
546
|
-
"
|
|
552
|
+
"FIELD_NOT_EXISTS": "Cette valeur n'existe pas",
|
|
553
|
+
"FIREFOX_NO_STORAGE": "L'application ne peut pas fonctionner sur Firefox en mode 'navigation privée' ou si la conservation de l'historique est désactivée",
|
|
554
|
+
"FEATURE_NOT_IMPLEMENTED": "Fonctionnalité non implémentée ! <small><br/>Veuillez contacter votre administrateur.</small>"
|
|
547
555
|
},
|
|
548
556
|
"CONFIRM": {
|
|
549
557
|
"ALERT_HEADER": "Confirmation",
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
|
|
2
|
-
import { JobProgression } from './job.model';
|
|
3
|
-
import { BaseGraphqlService } from '../../core/services/base-graphql-service.class';
|
|
4
|
-
import { ENVIRONMENT } from '../../../environments/environment.class';
|
|
5
|
-
import { of } from 'rxjs';
|
|
6
|
-
import { gql } from '@apollo/client/core';
|
|
7
|
-
import { isNil, toNumber } from '../../shared/functions';
|
|
8
|
-
import { map } from 'rxjs/operators';
|
|
9
|
-
import { SocialErrorCodes } from '../social.errors';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../../core/graphql/graphql.service";
|
|
12
|
-
import * as i2 from "../../../environments/environment.class";
|
|
13
|
-
export const APP_JOB_PROGRESSION_SERVICE = new InjectionToken('JobProgressionService');
|
|
14
|
-
const QUERIES = {
|
|
15
|
-
listenChanges: gql `subscription UpdateJobProgression($id: Int!, $interval: Int){
|
|
16
|
-
data: updateJobProgression(id: $id, interval: $interval) {
|
|
17
|
-
id
|
|
18
|
-
name
|
|
19
|
-
message
|
|
20
|
-
current
|
|
21
|
-
total
|
|
22
|
-
}
|
|
23
|
-
}`
|
|
24
|
-
};
|
|
25
|
-
export class JobProgressionService extends BaseGraphqlService {
|
|
26
|
-
constructor(graphql, environment) {
|
|
27
|
-
super(graphql, environment);
|
|
28
|
-
this.graphql = graphql;
|
|
29
|
-
this.environment = environment;
|
|
30
|
-
this._logPrefix = '[job-progression-service] ';
|
|
31
|
-
// For DEV only
|
|
32
|
-
this._debug = environment && !environment.production;
|
|
33
|
-
}
|
|
34
|
-
watchAll(options) {
|
|
35
|
-
return of([]); // TODO
|
|
36
|
-
}
|
|
37
|
-
addJob(id, job) {
|
|
38
|
-
throw new Error('no implemented');
|
|
39
|
-
}
|
|
40
|
-
removeJob(id) {
|
|
41
|
-
throw new Error('no implemented');
|
|
42
|
-
}
|
|
43
|
-
listenChanges(id, options) {
|
|
44
|
-
if (isNil(id))
|
|
45
|
-
throw new Error(`${this._logPrefix}Missing argument 'id'`);
|
|
46
|
-
if (this._debug)
|
|
47
|
-
console.debug(`${this._logPrefix}[WS] Listening changes for job progression {${id}}...`);
|
|
48
|
-
return this.graphql.subscribe({
|
|
49
|
-
query: QUERIES.listenChanges,
|
|
50
|
-
fetchPolicy: options?.fetchPolicy,
|
|
51
|
-
variables: { id, interval: toNumber(options?.interval, 10) },
|
|
52
|
-
error: { code: SocialErrorCodes.SUBSCRIBE_JOB_PROGRESSION_ERROR, message: 'SOCIAL.ERROR.SUBSCRIBE_JOB_PROGRESSION_ERROR' }
|
|
53
|
-
}).pipe(map(({ data }) => {
|
|
54
|
-
const progression = data && JobProgression.fromObject(data);
|
|
55
|
-
if (progression && this._debug)
|
|
56
|
-
console.debug(`${this._logPrefix}Job progression ${id} updated on server`, progression);
|
|
57
|
-
return progression;
|
|
58
|
-
}));
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
JobProgressionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService, deps: [{ token: i1.GraphqlService }, { token: ENVIRONMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
62
|
-
JobProgressionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService });
|
|
63
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: JobProgressionService, decorators: [{
|
|
64
|
-
type: Injectable
|
|
65
|
-
}], ctorParameters: function () { return [{ type: i1.GraphqlService }, { type: i2.Environment, decorators: [{
|
|
66
|
-
type: Optional
|
|
67
|
-
}, {
|
|
68
|
-
type: Inject,
|
|
69
|
-
args: [ENVIRONMENT]
|
|
70
|
-
}] }]; } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NvY2lhbC9qb2Ivam9iLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXBGLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBYyxHQUFHLEVBQXdCLE1BQU0scUJBQXFCLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFHcEQsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQXdCLHVCQUF1QixDQUFDLENBQUM7QUFFOUcsTUFBTSxPQUFPLEdBQUc7SUFDZCxhQUFhLEVBQUUsR0FBRyxDQUFBOzs7Ozs7OztJQVFoQjtDQUNILENBQUE7QUFVRCxNQUFNLE9BQU8scUJBQ1gsU0FBUSxrQkFBa0M7SUFHMUMsWUFDWSxPQUF1QixFQUNVLFdBQXdCO1FBRW5FLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFIbEIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUduRSxJQUFJLENBQUMsVUFBVSxHQUFHLDRCQUE0QixDQUFDO1FBQy9DLGVBQWU7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVEsQ0FBQyxPQUVSO1FBQ0MsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPO0lBQ3hCLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVSxFQUFFLEdBQW9CO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBVSxFQUFFLE9BR3pCO1FBRUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHVCQUF1QixDQUFDLENBQUM7UUFDMUUsSUFBSSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSwrQ0FBK0MsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFnQjtZQUMzQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDNUIsV0FBVyxFQUFFLE9BQU8sRUFBRSxXQUFXO1lBQ2pDLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUM7WUFDM0QsS0FBSyxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLCtCQUErQixFQUFFLE9BQU8sRUFBRSw4Q0FBOEMsRUFBQztTQUN6SCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRTtZQUNiLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVELElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN4SCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBRUosQ0FBQzs7a0hBakRVLHFCQUFxQixnREFNVixXQUFXO3NIQU50QixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBT04sUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpvYlByb2dyZXNzaW9uIH0gZnJvbSAnLi9qb2IubW9kZWwnO1xuaW1wb3J0IHsgQmFzZUdyYXBocWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWdyYXBocWwtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBHcmFwaHFsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZ3JhcGhxbC9ncmFwaHFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtGZXRjaFBvbGljeSwgZ3FsLCBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3l9IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnO1xuaW1wb3J0IHsgaXNOaWwsIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTb2NpYWxFcnJvckNvZGVzIH0gZnJvbSAnLi4vc29jaWFsLmVycm9ycyc7XG5pbXBvcnQge0Jhc2VFbnRpdHlHcmFwaHFsUXVlcmllc30gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9iYXNlLWVudGl0eS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IEFQUF9KT0JfUFJPR1JFU1NJT05fU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxKb2JQcm9ncmVzc2lvblNlcnZpY2U+KCdKb2JQcm9ncmVzc2lvblNlcnZpY2UnKTtcblxuY29uc3QgUVVFUklFUyA9IHtcbiAgbGlzdGVuQ2hhbmdlczogZ3FsYHN1YnNjcmlwdGlvbiBVcGRhdGVKb2JQcm9ncmVzc2lvbigkaWQ6IEludCEsICRpbnRlcnZhbDogSW50KXtcbiAgICBkYXRhOiB1cGRhdGVKb2JQcm9ncmVzc2lvbihpZDogJGlkLCBpbnRlcnZhbDogJGludGVydmFsKSB7XG4gICAgICBpZFxuICAgICAgbmFtZVxuICAgICAgbWVzc2FnZVxuICAgICAgY3VycmVudFxuICAgICAgdG90YWxcbiAgICB9XG4gIH1gXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUpvYlByb2dyZXNzaW9uU2VydmljZSB7XG4gIHdhdGNoQWxsKCk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb25bXT47XG4gIGFkZEpvYihpZDogbnVtYmVyLCBqb2I/OiBKb2JQcm9ncmVzc2lvbik7XG4gIHJlbW92ZUpvYihpZDogbnVtYmVyKTtcbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzogeyBpbnRlcnZhbD86IG51bWJlcjsgZmV0Y2hQb2xpY3k/OiBGZXRjaFBvbGljeSB9KTogT2JzZXJ2YWJsZTxKb2JQcm9ncmVzc2lvbj47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBKb2JQcm9ncmVzc2lvblNlcnZpY2VcbiAgZXh0ZW5kcyBCYXNlR3JhcGhxbFNlcnZpY2U8Sm9iUHJvZ3Jlc3Npb24+XG4gIGltcGxlbWVudHMgSUpvYlByb2dyZXNzaW9uU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGdyYXBocWw6IEdyYXBocWxTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRcbiAgKSB7XG4gICAgc3VwZXIoZ3JhcGhxbCwgZW52aXJvbm1lbnQpO1xuICAgIHRoaXMuX2xvZ1ByZWZpeCA9ICdbam9iLXByb2dyZXNzaW9uLXNlcnZpY2VdICc7XG4gICAgLy8gRm9yIERFViBvbmx5XG4gICAgdGhpcy5fZGVidWcgPSBlbnZpcm9ubWVudCAmJiAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgfVxuXG4gIHdhdGNoQWxsKG9wdGlvbnM/OiB7XG4gICAgZmV0Y2hQb2xpY3k/OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3lcbiAgfSk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb25bXT4ge1xuICAgIHJldHVybiBvZihbXSk7IC8vIFRPRE9cbiAgfVxuXG4gIGFkZEpvYihpZDogbnVtYmVyLCBqb2I/OiBKb2JQcm9ncmVzc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignbm8gaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIHJlbW92ZUpvYihpZDogbnVtYmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdubyBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgbGlzdGVuQ2hhbmdlcyhpZDogbnVtYmVyLCBvcHRpb25zPzoge1xuICAgIGludGVydmFsPzogbnVtYmVyO1xuICAgIGZldGNoUG9saWN5PzogRmV0Y2hQb2xpY3lcbiAgfSk6IE9ic2VydmFibGU8Sm9iUHJvZ3Jlc3Npb24+IHtcblxuICAgIGlmIChpc05pbChpZCkpIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLl9sb2dQcmVmaXh9TWlzc2luZyBhcmd1bWVudCAnaWQnYCk7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1bV1NdIExpc3RlbmluZyBjaGFuZ2VzIGZvciBqb2IgcHJvZ3Jlc3Npb24geyR7aWR9fS4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ3JhcGhxbC5zdWJzY3JpYmU8eyBkYXRhOiBhbnkgfT4oe1xuICAgICAgcXVlcnk6IFFVRVJJRVMubGlzdGVuQ2hhbmdlcyxcbiAgICAgIGZldGNoUG9saWN5OiBvcHRpb25zPy5mZXRjaFBvbGljeSxcbiAgICAgIHZhcmlhYmxlczogeyBpZCwgaW50ZXJ2YWw6IHRvTnVtYmVyKG9wdGlvbnM/LmludGVydmFsLCAxMCl9LFxuICAgICAgZXJyb3I6IHtjb2RlOiBTb2NpYWxFcnJvckNvZGVzLlNVQlNDUklCRV9KT0JfUFJPR1JFU1NJT05fRVJST1IsIG1lc3NhZ2U6ICdTT0NJQUwuRVJST1IuU1VCU0NSSUJFX0pPQl9QUk9HUkVTU0lPTl9FUlJPUid9XG4gICAgfSkucGlwZShcbiAgICAgIG1hcCgoe2RhdGF9KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzaW9uID0gZGF0YSAmJiBKb2JQcm9ncmVzc2lvbi5mcm9tT2JqZWN0KGRhdGEpO1xuICAgICAgICBpZiAocHJvZ3Jlc3Npb24gJiYgdGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUpvYiBwcm9ncmVzc2lvbiAke2lkfSB1cGRhdGVkIG9uIHNlcnZlcmAsIHByb2dyZXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzaW9uO1xuICAgICAgfSlcbiAgICApO1xuXG4gIH1cbn1cbiJdfQ==
|