barsa-develop-components 1.0.455 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/barsa-develop-components.mjs +4 -4
- package/esm2022/lib/accept-reject/accept-reject.component.mjs +68 -0
- package/esm2022/lib/avatar/avatar.component.mjs +29 -0
- package/esm2022/lib/barcode-format-pipe.mjs +24 -0
- package/esm2022/lib/barcode-reader/barcode-reader.component.mjs +62 -0
- package/esm2022/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +82 -0
- package/esm2022/lib/barcode-reader-video/barcode-reader-video.component.mjs +66 -0
- package/esm2022/lib/barcode.service.mjs +330 -0
- package/{esm2020 → esm2022}/lib/barsa-develop-components.module.mjs +284 -284
- package/esm2022/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +104 -0
- package/esm2022/lib/barsa-documents/barsa-documents.component.mjs +173 -0
- package/esm2022/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +163 -0
- package/esm2022/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +50 -0
- package/esm2022/lib/card-content-line-chart/card-content-line-chart.component.mjs +37 -0
- package/esm2022/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +19 -0
- package/esm2022/lib/card-header-kpi/card-header-kpi.component.mjs +40 -0
- package/esm2022/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +45 -0
- package/{esm2020 → esm2022}/lib/checkbox-button/checkbox-button.component.mjs +23 -23
- package/esm2022/lib/column-form-viewer/column-form-viewer.component.mjs +88 -0
- package/{esm2020 → esm2022}/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.mjs +18 -18
- package/esm2022/lib/footer/footer.component.mjs +43 -0
- package/esm2022/lib/form-card/form-card.component.mjs +17 -0
- package/esm2022/lib/form-chart-content/form-chart-content.component.mjs +37 -0
- package/esm2022/lib/form-content-quick-view/form-content-quick-view.component.mjs +102 -0
- package/esm2022/lib/form-report-view/form-report-view.component.mjs +25 -0
- package/esm2022/lib/form-report-view-item/form-report-view-item.component.mjs +45 -0
- package/{esm2020 → esm2022}/lib/g4b-details/g4b-details.component.mjs +28 -28
- package/esm2022/lib/g4b-estelam/g4b-estelam.component.mjs +30 -0
- package/esm2022/lib/geographic-location/geographic-location.component.mjs +85 -0
- package/esm2022/lib/login-form/login-form.component.mjs +55 -0
- package/{esm2020 → esm2022}/lib/login-social-conncetions/login-social-conncetions.component.mjs +30 -30
- package/esm2022/lib/master-detail-card-form/master-detail-card-form.component.mjs +17 -0
- package/esm2022/lib/media-file-uploader/media-file-uploader.component.mjs +238 -0
- package/esm2022/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +52 -0
- package/esm2022/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +24 -0
- package/esm2022/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +23 -0
- package/esm2022/lib/models/document-item.mjs +2 -0
- package/esm2022/lib/models/documents-setting.mjs +2 -0
- package/{esm2020 → esm2022}/lib/models/form-report-view-setting.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/index.mjs +8 -8
- package/{esm2020 → esm2022}/lib/models/micro-process-flow-view-setting.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/person.mjs +1 -1
- package/{esm2020 → esm2022}/lib/models/service-desk-view-of-services-setting.mjs +2 -2
- package/{esm2020 → esm2022}/lib/models/tab-process-view-setting.mjs +2 -2
- package/{esm2020 → esm2022}/lib/pipes/datasource-to-flow-item.mjs +22 -22
- package/{esm2020 → esm2022}/lib/pipes/index.mjs +2 -2
- package/{esm2020 → esm2022}/lib/pipes/mo-list-to-flow-item.pipe.mjs +22 -22
- package/esm2022/lib/query-string-form-observable/query-string-form-observable.component.mjs +37 -0
- package/esm2022/lib/query-string-observable/query-string-observable.component.mjs +22 -0
- package/esm2022/lib/report-button-view/report-button-view.component.mjs +37 -0
- package/{esm2020 → esm2022}/lib/report-line-chart-view/report-line-chart-view.component.mjs +13 -13
- package/esm2022/lib/report-tab-view/report-tab-view.component.mjs +27 -0
- package/esm2022/lib/resend-verification-code/resend-verification-code.component.mjs +62 -0
- package/{esm2020 → esm2022}/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.mjs +28 -28
- package/esm2022/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +110 -0
- package/esm2022/lib/service-desk-header/service-desk-header.component.mjs +240 -0
- package/esm2022/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +142 -0
- package/esm2022/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +37 -0
- package/esm2022/lib/setting-form/setting-form.component.mjs +64 -0
- package/esm2022/lib/subform-in-row-report/subform-in-row-report.component.mjs +73 -0
- package/esm2022/lib/tab-process-view/tab-process-view.component.mjs +48 -0
- package/esm2022/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +16 -0
- package/esm2022/lib/timer-count-down/timer-count-down.component.mjs +98 -0
- package/esm2022/lib/token-report-view/token-report-view.component.mjs +27 -0
- package/esm2022/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +25 -0
- package/esm2022/lib/ui-num-rate/ui-num-rate.component.mjs +29 -0
- package/esm2022/lib/ui-person/ui-person.component.mjs +160 -0
- package/esm2022/lib/ui-person/ui-person.pipe.mjs +40 -0
- package/esm2022/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +17 -0
- package/esm2022/lib/ui-text-field-search/ui-text-field-search.component.mjs +42 -0
- package/esm2022/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +69 -0
- package/{esm2020 → esm2022}/public-api.mjs +62 -62
- package/fesm2022/barsa-develop-components.mjs +3626 -0
- package/fesm2022/barsa-develop-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/accept-reject/accept-reject.component.d.ts +28 -28
- package/lib/avatar/avatar.component.d.ts +12 -12
- package/lib/barcode-format-pipe.d.ts +7 -7
- package/lib/barcode-reader/barcode-reader.component.d.ts +19 -19
- package/lib/barcode-reader-dialog/barcode-reader-dialog.component.d.ts +32 -32
- package/lib/barcode-reader-video/barcode-reader-video.component.d.ts +22 -22
- package/lib/barcode.service.d.ts +98 -98
- package/lib/barsa-develop-components.module.d.ts +117 -117
- package/lib/barsa-document-list-item/barsa-document-list-item.component.d.ts +39 -39
- package/lib/barsa-documents/barsa-documents.component.d.ts +47 -47
- package/lib/barsa-geographic-location/barsa-geographic-location.component.d.ts +45 -46
- package/lib/card-content-image-and-title/card-content-image-and-title.component.d.ts +18 -18
- package/lib/card-content-line-chart/card-content-line-chart.component.d.ts +9 -9
- package/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.d.ts +6 -6
- package/lib/card-header-kpi/card-header-kpi.component.d.ts +14 -14
- package/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.d.ts +23 -23
- package/lib/checkbox-button/checkbox-button.component.d.ts +13 -13
- package/lib/column-form-viewer/column-form-viewer.component.d.ts +30 -30
- package/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.d.ts +8 -8
- package/lib/footer/footer.component.d.ts +15 -15
- package/lib/form-card/form-card.component.d.ts +8 -8
- package/lib/form-chart-content/form-chart-content.component.d.ts +9 -9
- package/lib/form-content-quick-view/form-content-quick-view.component.d.ts +18 -18
- package/lib/form-report-view/form-report-view.component.d.ts +13 -13
- package/lib/form-report-view-item/form-report-view-item.component.d.ts +15 -15
- package/lib/g4b-details/g4b-details.component.d.ts +9 -9
- package/lib/g4b-estelam/g4b-estelam.component.d.ts +11 -11
- package/lib/geographic-location/geographic-location.component.d.ts +33 -34
- package/lib/login-form/login-form.component.d.ts +12 -12
- package/lib/login-social-conncetions/login-social-conncetions.component.d.ts +12 -12
- package/lib/master-detail-card-form/master-detail-card-form.component.d.ts +8 -8
- package/lib/media-file-uploader/media-file-uploader.component.d.ts +52 -52
- package/lib/micro-proccess-flow/micro-proccess-flow.component.d.ts +28 -28
- package/lib/micro-process-flow-view/micro-process-flow-view.component.d.ts +14 -14
- package/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.d.ts +9 -9
- package/lib/models/document-item.d.ts +19 -19
- package/lib/models/documents-setting.d.ts +11 -11
- package/lib/models/form-report-view-setting.d.ts +7 -7
- package/lib/models/index.d.ts +7 -7
- package/lib/models/micro-process-flow-view-setting.d.ts +8 -8
- package/lib/models/person.d.ts +10 -10
- package/lib/models/service-desk-view-of-services-setting.d.ts +6 -6
- package/lib/models/tab-process-view-setting.d.ts +7 -7
- package/lib/pipes/datasource-to-flow-item.d.ts +10 -10
- package/lib/pipes/index.d.ts +2 -2
- package/lib/pipes/mo-list-to-flow-item.pipe.d.ts +10 -10
- package/lib/query-string-form-observable/query-string-form-observable.component.d.ts +13 -13
- package/lib/query-string-observable/query-string-observable.component.d.ts +9 -9
- package/lib/report-button-view/report-button-view.component.d.ts +12 -12
- package/lib/report-line-chart-view/report-line-chart-view.component.d.ts +7 -7
- package/lib/report-tab-view/report-tab-view.component.d.ts +15 -15
- package/lib/resend-verification-code/resend-verification-code.component.d.ts +19 -18
- package/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.d.ts +15 -15
- package/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.d.ts +26 -26
- package/lib/service-desk-header/service-desk-header.component.d.ts +63 -63
- package/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.d.ts +39 -39
- package/lib/service-desk-view-of-services/service-desk-view-of-services.component.d.ts +16 -16
- package/lib/setting-form/setting-form.component.d.ts +20 -20
- package/lib/subform-in-row-report/subform-in-row-report.component.d.ts +22 -21
- package/lib/tab-process-view/tab-process-view.component.d.ts +20 -20
- package/lib/table-view-vertical-columns/table-view-vertical-columns.component.d.ts +6 -6
- package/lib/timer-count-down/timer-count-down.component.d.ts +15 -15
- package/lib/token-report-view/token-report-view.component.d.ts +15 -15
- package/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.d.ts +9 -9
- package/lib/ui-num-rate/ui-num-rate.component.d.ts +9 -9
- package/lib/ui-person/ui-person.component.d.ts +31 -31
- package/lib/ui-person/ui-person.pipe.d.ts +7 -7
- package/lib/ui-pictures-carousel/ui-pictures-carousel.component.d.ts +6 -6
- package/lib/ui-text-field-search/ui-text-field-search.component.d.ts +17 -17
- package/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.d.ts +25 -25
- package/package.json +7 -13
- package/public-api.d.ts +58 -58
- package/esm2020/lib/accept-reject/accept-reject.component.mjs +0 -69
- package/esm2020/lib/avatar/avatar.component.mjs +0 -29
- package/esm2020/lib/barcode-format-pipe.mjs +0 -24
- package/esm2020/lib/barcode-reader/barcode-reader.component.mjs +0 -62
- package/esm2020/lib/barcode-reader-dialog/barcode-reader-dialog.component.mjs +0 -82
- package/esm2020/lib/barcode-reader-video/barcode-reader-video.component.mjs +0 -66
- package/esm2020/lib/barcode.service.mjs +0 -330
- package/esm2020/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +0 -104
- package/esm2020/lib/barsa-documents/barsa-documents.component.mjs +0 -173
- package/esm2020/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +0 -174
- package/esm2020/lib/card-content-image-and-title/card-content-image-and-title.component.mjs +0 -51
- package/esm2020/lib/card-content-line-chart/card-content-line-chart.component.mjs +0 -38
- package/esm2020/lib/card-header-big-image-title-and-subtitle/card-header-big-image-title-and-subtitle.component.mjs +0 -20
- package/esm2020/lib/card-header-kpi/card-header-kpi.component.mjs +0 -41
- package/esm2020/lib/card-header-logo-title-subtitle/card-header-logo-title-subtitle.component.mjs +0 -46
- package/esm2020/lib/column-form-viewer/column-form-viewer.component.mjs +0 -88
- package/esm2020/lib/footer/footer.component.mjs +0 -44
- package/esm2020/lib/form-card/form-card.component.mjs +0 -18
- package/esm2020/lib/form-chart-content/form-chart-content.component.mjs +0 -38
- package/esm2020/lib/form-content-quick-view/form-content-quick-view.component.mjs +0 -102
- package/esm2020/lib/form-report-view/form-report-view.component.mjs +0 -26
- package/esm2020/lib/form-report-view-item/form-report-view-item.component.mjs +0 -45
- package/esm2020/lib/g4b-estelam/g4b-estelam.component.mjs +0 -30
- package/esm2020/lib/geographic-location/geographic-location.component.mjs +0 -88
- package/esm2020/lib/login-form/login-form.component.mjs +0 -55
- package/esm2020/lib/master-detail-card-form/master-detail-card-form.component.mjs +0 -17
- package/esm2020/lib/media-file-uploader/media-file-uploader.component.mjs +0 -238
- package/esm2020/lib/micro-proccess-flow/micro-proccess-flow.component.mjs +0 -53
- package/esm2020/lib/micro-process-flow-view/micro-process-flow-view.component.mjs +0 -24
- package/esm2020/lib/mo-info-micro-proccess-flow/mo-info-micro-proccess-flow.component.mjs +0 -23
- package/esm2020/lib/models/document-item.mjs +0 -2
- package/esm2020/lib/models/documents-setting.mjs +0 -2
- package/esm2020/lib/query-string-form-observable/query-string-form-observable.component.mjs +0 -37
- package/esm2020/lib/query-string-observable/query-string-observable.component.mjs +0 -22
- package/esm2020/lib/report-button-view/report-button-view.component.mjs +0 -38
- package/esm2020/lib/report-tab-view/report-tab-view.component.mjs +0 -28
- package/esm2020/lib/resend-verification-code/resend-verification-code.component.mjs +0 -59
- package/esm2020/lib/service-desk-form-layout-content-mojavez/service-desk-form-layout-content-mojavez.component.mjs +0 -110
- package/esm2020/lib/service-desk-header/service-desk-header.component.mjs +0 -236
- package/esm2020/lib/service-desk-servcie-detail/service-desk-servcie-detail.component.mjs +0 -142
- package/esm2020/lib/service-desk-view-of-services/service-desk-view-of-services.component.mjs +0 -37
- package/esm2020/lib/setting-form/setting-form.component.mjs +0 -64
- package/esm2020/lib/subform-in-row-report/subform-in-row-report.component.mjs +0 -65
- package/esm2020/lib/tab-process-view/tab-process-view.component.mjs +0 -49
- package/esm2020/lib/table-view-vertical-columns/table-view-vertical-columns.component.mjs +0 -16
- package/esm2020/lib/timer-count-down/timer-count-down.component.mjs +0 -98
- package/esm2020/lib/token-report-view/token-report-view.component.mjs +0 -27
- package/esm2020/lib/ui-enum-segmented-button/ui-enum-segmented-button.component.mjs +0 -25
- package/esm2020/lib/ui-num-rate/ui-num-rate.component.mjs +0 -29
- package/esm2020/lib/ui-person/ui-person.component.mjs +0 -160
- package/esm2020/lib/ui-person/ui-person.pipe.mjs +0 -40
- package/esm2020/lib/ui-pictures-carousel/ui-pictures-carousel.component.mjs +0 -17
- package/esm2020/lib/ui-text-field-search/ui-text-field-search.component.mjs +0 -42
- package/esm2020/lib/ulv-context-menu-item-show-file-content/ulv-context-menu-item-show-file-content.component.mjs +0 -70
- package/fesm2015/barsa-develop-components.mjs +0 -3660
- package/fesm2015/barsa-develop-components.mjs.map +0 -1
- package/fesm2020/barsa-develop-components.mjs +0 -3625
- package/fesm2020/barsa-develop-components.mjs.map +0 -1
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
-
import { of } from 'rxjs';
|
|
3
|
-
import { BaseComponent } from 'barsa-novin-ray-core';
|
|
4
|
-
import { concatMap, delay, exhaustMap, finalize, takeUntil, tap } from 'rxjs/operators';
|
|
5
|
-
import { BarcodeFormat } from '@zxing/library';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@fundamental-ngx/core";
|
|
8
|
-
import * as i2 from "../barcode.service";
|
|
9
|
-
import * as i3 from "@angular/common";
|
|
10
|
-
import * as i4 from "@fundamental-ngx/core/bar";
|
|
11
|
-
import * as i5 from "@fundamental-ngx/core/dialog";
|
|
12
|
-
import * as i6 from "@fundamental-ngx/core/title";
|
|
13
|
-
import * as i7 from "@fundamental-ngx/core/utils";
|
|
14
|
-
import * as i8 from "@fundamental-ngx/core/select";
|
|
15
|
-
import * as i9 from "../barcode-reader-video/barcode-reader-video.component";
|
|
16
|
-
import * as i10 from "barsa-novin-ray-core";
|
|
17
|
-
export class BarcodeReaderDialogComponent extends BaseComponent {
|
|
18
|
-
constructor(_dialogRef, _userMediaService) {
|
|
19
|
-
super();
|
|
20
|
-
this._dialogRef = _dialogRef;
|
|
21
|
-
this._userMediaService = _userMediaService;
|
|
22
|
-
this.value = '';
|
|
23
|
-
this.format = [BarcodeFormat.QR_CODE];
|
|
24
|
-
this.loading = true;
|
|
25
|
-
this._dialogRef.loading(true);
|
|
26
|
-
this.barcodeFormats = this._dialogRef.data?.barcodeFormats ?? [];
|
|
27
|
-
this.selectedFormat = this.barcodeFormats.length > 0 ? this.barcodeFormats[0] : BarcodeFormat.QR_CODE;
|
|
28
|
-
}
|
|
29
|
-
ngAfterViewInit() {
|
|
30
|
-
super.ngAfterViewInit();
|
|
31
|
-
this._initialize();
|
|
32
|
-
}
|
|
33
|
-
onDismiss() {
|
|
34
|
-
this._dialogRef.dismiss();
|
|
35
|
-
}
|
|
36
|
-
onOk() {
|
|
37
|
-
this._close();
|
|
38
|
-
}
|
|
39
|
-
onCameraChange(value) {
|
|
40
|
-
this.selectedCamera = value;
|
|
41
|
-
}
|
|
42
|
-
onFormatChange(format) {
|
|
43
|
-
this.selectedFormat = format;
|
|
44
|
-
}
|
|
45
|
-
onScanSuccess(result) {
|
|
46
|
-
this.value = result;
|
|
47
|
-
this._close();
|
|
48
|
-
}
|
|
49
|
-
onValueChanged(e) {
|
|
50
|
-
this.value = e.target.value;
|
|
51
|
-
}
|
|
52
|
-
_close() {
|
|
53
|
-
this._dialogRef.close(this.value);
|
|
54
|
-
}
|
|
55
|
-
_initialize() {
|
|
56
|
-
of(true)
|
|
57
|
-
.pipe(takeUntil(this._onDestroy$), exhaustMap(() => this._userMediaService.askForPermission()), concatMap((permission) => {
|
|
58
|
-
if (permission) {
|
|
59
|
-
return this._userMediaService.updateVideoInputDevices();
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
return of(true);
|
|
63
|
-
}
|
|
64
|
-
}), finalize(() => {
|
|
65
|
-
this.loading = false;
|
|
66
|
-
this._dialogRef.loading(false);
|
|
67
|
-
}))
|
|
68
|
-
.subscribe();
|
|
69
|
-
this.hasDevice$ = this._userMediaService.hasDevices$;
|
|
70
|
-
this.permission$ = this._userMediaService.permission$;
|
|
71
|
-
this.cameras$ = this._userMediaService.cameras$.pipe(delay(0), tap((cameras) => {
|
|
72
|
-
this.selectedCamera = cameras.find((c) => c.label.indexOf('back') > -1) ?? cameras[0];
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
BarcodeReaderDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarcodeReaderDialogComponent, deps: [{ token: i1.DialogRef }, { token: i2.UserMediaBaseService }], target: i0.ɵɵFactoryTarget.Component });
|
|
77
|
-
BarcodeReaderDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: BarcodeReaderDialogComponent, selector: "bdc-barcode-reader-dialog", usesInheritance: true, ngImport: i0, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ 'BarcodeReader' | bbbTranslate }} {{ selectedCamera?.label }}</h1>\r\n <button fd-dialog-close-button (click)=\"onDismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <ng-container *ngIf=\"!loading\">\r\n <ng-container *ngIf=\"permission$ | async; else noPermission\">\r\n <ng-container *ngIf=\"hasDevice$ | async; else noDevice\">\r\n <bdc-barcode-reader-video\r\n *ngIf=\"selectedCamera\"\r\n [format]=\"format\"\r\n [selectedCamera]=\"selectedCamera\"\r\n [allFormats]=\"barcodeFormats\"\r\n (scanSuccess)=\"onScanSuccess($event)\"\r\n ></bdc-barcode-reader-video>\r\n </ng-container> </ng-container\r\n ></ng-container>\r\n <ng-template #noDevice>\r\n <p>BrowserNotSupport</p>\r\n </ng-template>\r\n <ng-template #noPermission>\r\n <p>NoPermission</p>\r\n </ng-template>\r\n </fd-dialog-body>\r\n <fd-dialog-footer>\r\n <ng-template fdTemplate=\"footer\">\r\n <ng-container *ngIf=\"cameras$ | async as cameraList\">\r\n <div fd-bar-left>\r\n <fd-select\r\n *ngIf=\"cameraList.length > 1\"\r\n [placeholder]=\"'Camera' | bbbTranslate\"\r\n (valueChange)=\"onCameraChange($event)\"\r\n [value]=\"selectedCamera\"\r\n >\r\n <fd-option *ngFor=\"let camera of cameraList\" [value]=\"camera\">{{ camera.label }}</fd-option>\r\n </fd-select>\r\n </div>\r\n <div fd-bar-right></div>\r\n </ng-container>\r\n </ng-template>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i5.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i5.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i5.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i5.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i5.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "component", type: i6.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i7.TemplateDirective, selector: "[fdTemplate]", inputs: ["fdTemplate"] }, { kind: "component", type: i8.SelectComponent, selector: "fd-select", inputs: ["controlId", "state", "mobile", "stateMessage", "disabled", "required", "readonly", "placeholder", "value", "extendedBodyTemplate", "maxHeight", "glyph", "closeOnOutsideClick", "fillControlMode", "controlTemplate", "appendTo", "unselectMissingOption", "typeaheadDebounceInterval", "ariaLabelledBy", "ariaLabel", "mobileConfig", "inline"], outputs: ["isOpenChange", "valueChange"] }, { kind: "component", type: i8.OptionComponent, selector: "[fd-option], fd-option", inputs: ["id", "value", "disabled"], outputs: ["selectionChange"] }, { kind: "component", type: i9.BarcodeReaderVideoComponent, selector: "bdc-barcode-reader-video", inputs: ["allFormats", "previewFitMode", "selectedCamera"], outputs: ["scanSuccess"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
78
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarcodeReaderDialogComponent, decorators: [{
|
|
79
|
-
type: Component,
|
|
80
|
-
args: [{ selector: 'bdc-barcode-reader-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ 'BarcodeReader' | bbbTranslate }} {{ selectedCamera?.label }}</h1>\r\n <button fd-dialog-close-button (click)=\"onDismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <ng-container *ngIf=\"!loading\">\r\n <ng-container *ngIf=\"permission$ | async; else noPermission\">\r\n <ng-container *ngIf=\"hasDevice$ | async; else noDevice\">\r\n <bdc-barcode-reader-video\r\n *ngIf=\"selectedCamera\"\r\n [format]=\"format\"\r\n [selectedCamera]=\"selectedCamera\"\r\n [allFormats]=\"barcodeFormats\"\r\n (scanSuccess)=\"onScanSuccess($event)\"\r\n ></bdc-barcode-reader-video>\r\n </ng-container> </ng-container\r\n ></ng-container>\r\n <ng-template #noDevice>\r\n <p>BrowserNotSupport</p>\r\n </ng-template>\r\n <ng-template #noPermission>\r\n <p>NoPermission</p>\r\n </ng-template>\r\n </fd-dialog-body>\r\n <fd-dialog-footer>\r\n <ng-template fdTemplate=\"footer\">\r\n <ng-container *ngIf=\"cameras$ | async as cameraList\">\r\n <div fd-bar-left>\r\n <fd-select\r\n *ngIf=\"cameraList.length > 1\"\r\n [placeholder]=\"'Camera' | bbbTranslate\"\r\n (valueChange)=\"onCameraChange($event)\"\r\n [value]=\"selectedCamera\"\r\n >\r\n <fd-option *ngFor=\"let camera of cameraList\" [value]=\"camera\">{{ camera.label }}</fd-option>\r\n </fd-select>\r\n </div>\r\n <div fd-bar-right></div>\r\n </ng-container>\r\n </ng-template>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n" }]
|
|
81
|
-
}], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.UserMediaBaseService }]; } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyY29kZS1yZWFkZXItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy9zcmMvbGliL2JhcmNvZGUtcmVhZGVyLWRpYWxvZy9iYXJjb2RlLXJlYWRlci1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyY29kZS1yZWFkZXItZGlhbG9nL2JhcmNvZGUtcmVhZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsYUFBYTtJQVUzRCxZQUFvQixVQUFxQixFQUFVLGlCQUF1QztRQUN0RixLQUFLLEVBQUUsQ0FBQztRQURRLGVBQVUsR0FBVixVQUFVLENBQVc7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBVDFGLFVBQUssR0FBRyxFQUFFLENBQUM7UUFFWCxXQUFNLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFTN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxP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Q0E7MkZEN0JhLDRCQUE0QjtrQkFOeEMsU0FBUzsrQkFDSSwyQkFBMkIsbUJBR3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBVc2VyTWVkaWFCYXNlU2VydmljZSB9IGZyb20gJy4uL2JhcmNvZGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGVsYXksIGV4aGF1c3RNYXAsIGZpbmFsaXplLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFyY29kZUZvcm1hdCB9IGZyb20gJ0B6eGluZy9saWJyYXJ5JztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1iYXJjb2RlLXJlYWRlci1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhcmNvZGUtcmVhZGVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJjb2RlLXJlYWRlci1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXJjb2RlUmVhZGVyRGlhbG9nQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICAgdmFsdWUgPSAnJztcclxuICAgIGNhbWVyYXMkOiBPYnNlcnZhYmxlPE1lZGlhRGV2aWNlSW5mb1tdPjtcclxuICAgIGZvcm1hdCA9IFtCYXJjb2RlRm9ybWF0LlFSX0NPREVdO1xyXG4gICAgaGFzRGV2aWNlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHBlcm1pc3Npb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgbG9hZGluZzogYm9vbGVhbjtcclxuICAgIHNlbGVjdGVkQ2FtZXJhOiBNZWRpYURldmljZUluZm87XHJcbiAgICBiYXJjb2RlRm9ybWF0czogQXJyYXk8QmFyY29kZUZvcm1hdD47XHJcbiAgICBzZWxlY3RlZEZvcm1hdDogQmFyY29kZUZvcm1hdDtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RpYWxvZ1JlZjogRGlhbG9nUmVmLCBwcml2YXRlIF91c2VyTWVkaWFTZXJ2aWNlOiBVc2VyTWVkaWFCYXNlU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYubG9hZGluZyh0cnVlKTtcclxuICAgICAgICB0aGlzLmJhcmNvZGVGb3JtYXRzID0gdGhpcy5fZGlhbG9nUmVmLmRhdGE/LmJhcmNvZGVGb3JtYXRzID8/IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtYXQgPSB0aGlzLmJhcmNvZGVGb3JtYXRzLmxlbmd0aCA+IDAgPyB0aGlzLmJhcmNvZGVGb3JtYXRzWzBdIDogQmFyY29kZUZvcm1hdC5RUl9DT0RFO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuICAgICAgICB0aGlzLl9pbml0aWFsaXplKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EaXNtaXNzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgICBvbk9rKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Nsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYW1lcmFDaGFuZ2UodmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQ2FtZXJhID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBvbkZvcm1hdENoYW5nZShmb3JtYXQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0ID0gZm9ybWF0O1xyXG4gICAgfVxyXG4gICAgb25TY2FuU3VjY2VzcyhyZXN1bHQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuX2Nsb3NlKCk7XHJcbiAgICB9XHJcbiAgICBvblZhbHVlQ2hhbmdlZChlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfY2xvc2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZSgpOiB2b2lkIHtcclxuICAgICAgICBvZih0cnVlKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIGV4aGF1c3RNYXAoKCkgPT4gdGhpcy5fdXNlck1lZGlhU2VydmljZS5hc2tGb3JQZXJtaXNzaW9uKCkpLFxyXG4gICAgICAgICAgICAgICAgY29uY2F0TWFwKChwZXJtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNZWRpYVNlcnZpY2UudXBkYXRlVmlkZW9JbnB1dERldmljZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmxvYWRpbmcoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5oYXNEZXZpY2UkID0gdGhpcy5fdXNlck1lZGlhU2VydmljZS5oYXNEZXZpY2VzJDtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb24kID0gdGhpcy5fdXNlck1lZGlhU2VydmljZS5wZXJtaXNzaW9uJDtcclxuICAgICAgICB0aGlzLmNhbWVyYXMkID0gdGhpcy5fdXNlck1lZGlhU2VydmljZS5jYW1lcmFzJC5waXBlKFxyXG4gICAgICAgICAgICBkZWxheSgwKSxcclxuICAgICAgICAgICAgdGFwKChjYW1lcmFzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2FtZXJhID0gY2FtZXJhcy5maW5kKChjKSA9PiBjLmxhYmVsLmluZGV4T2YoJ2JhY2snKSA+IC0xKSA/PyBjYW1lcmFzWzBdO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWRpYWxvZz5cclxuICAgIDxmZC1kaWFsb2ctaGVhZGVyPlxyXG4gICAgICAgIDxoMSBmZC10aXRsZT57eyAnQmFyY29kZVJlYWRlcicgfCBiYmJUcmFuc2xhdGUgfX0ge3sgc2VsZWN0ZWRDYW1lcmE/LmxhYmVsIH19PC9oMT5cclxuICAgICAgICA8YnV0dG9uIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gKGNsaWNrKT1cIm9uRGlzbWlzcygpXCI+PC9idXR0b24+XHJcbiAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICA8ZmQtZGlhbG9nLWJvZHk+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXJtaXNzaW9uJCB8IGFzeW5jOyBlbHNlIG5vUGVybWlzc2lvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0RldmljZSQgfCBhc3luYzsgZWxzZSBub0RldmljZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiZGMtYmFyY29kZS1yZWFkZXItdmlkZW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZENhbWVyYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkQ2FtZXJhXT1cInNlbGVjdGVkQ2FtZXJhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbEZvcm1hdHNdPVwiYmFyY29kZUZvcm1hdHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2NhblN1Y2Nlc3MpPVwib25TY2FuU3VjY2VzcygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9iZGMtYmFyY29kZS1yZWFkZXItdmlkZW8+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gPC9uZy1jb250YWluZXJcclxuICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub0RldmljZT5cclxuICAgICAgICAgICAgPHA+QnJvd3Nlck5vdFN1cHBvcnQ8L3A+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI25vUGVybWlzc2lvbj5cclxuICAgICAgICAgICAgPHA+Tm9QZXJtaXNzaW9uPC9wPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2ZkLWRpYWxvZy1ib2R5PlxyXG4gICAgPGZkLWRpYWxvZy1mb290ZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGZkVGVtcGxhdGU9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbWVyYXMkIHwgYXN5bmMgYXMgY2FtZXJhTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FtZXJhTGlzdC5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidDYW1lcmEnIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2FtZXJhQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRDYW1lcmFcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW9wdGlvbiAqbmdGb3I9XCJsZXQgY2FtZXJhIG9mIGNhbWVyYUxpc3RcIiBbdmFsdWVdPVwiY2FtZXJhXCI+e3sgY2FtZXJhLmxhYmVsIH19PC9mZC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mZC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PjwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxyXG48L2ZkLWRpYWxvZz5cclxuIl19
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { BaseComponent } from 'barsa-novin-ray-core';
|
|
4
|
-
import { debounceTime, filter, takeUntil, tap } from 'rxjs/operators';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../barcode.service";
|
|
7
|
-
import * as i2 from "barsa-novin-ray-core";
|
|
8
|
-
export class BarcodeReaderVideoComponent extends BaseComponent {
|
|
9
|
-
constructor(_webBarcodeService) {
|
|
10
|
-
super();
|
|
11
|
-
this._webBarcodeService = _webBarcodeService;
|
|
12
|
-
this.previewFitMode = 'fill';
|
|
13
|
-
this.scanSuccess = new EventEmitter();
|
|
14
|
-
this._cameraSource = new BehaviorSubject(null);
|
|
15
|
-
}
|
|
16
|
-
set selectedCamera(val) {
|
|
17
|
-
this._cameraSource.next(val);
|
|
18
|
-
}
|
|
19
|
-
ngOnInit() {
|
|
20
|
-
super.ngOnInit();
|
|
21
|
-
this._setFormat(this.allFormats);
|
|
22
|
-
this._cameraSource
|
|
23
|
-
.asObservable()
|
|
24
|
-
.pipe(takeUntil(this._onDestroy$), debounceTime(500), filter((camera) => camera != null), tap((camera) => {
|
|
25
|
-
this._stopScan();
|
|
26
|
-
this._startScan(camera);
|
|
27
|
-
}))
|
|
28
|
-
.subscribe();
|
|
29
|
-
this._webBarcodeService.scanSuccess$.subscribe((result) => {
|
|
30
|
-
this.scanSuccess.emit(result);
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
ngOnDestroy() {
|
|
34
|
-
super.ngOnDestroy();
|
|
35
|
-
this._webBarcodeService.scanStop();
|
|
36
|
-
}
|
|
37
|
-
_setFormat(formats) {
|
|
38
|
-
this._webBarcodeService.setFormat(formats);
|
|
39
|
-
}
|
|
40
|
-
_stopScan() {
|
|
41
|
-
this._webBarcodeService.scanStop();
|
|
42
|
-
}
|
|
43
|
-
_startScan(camera) {
|
|
44
|
-
if (this.videoElement) {
|
|
45
|
-
this._webBarcodeService.startScan(camera, this.videoElement.nativeElement);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
BarcodeReaderVideoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarcodeReaderVideoComponent, deps: [{ token: i1.WebBarcodeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
-
BarcodeReaderVideoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: BarcodeReaderVideoComponent, selector: "bdc-barcode-reader-video", inputs: { allFormats: "allFormats", previewFitMode: "previewFitMode", selectedCamera: "selectedCamera" }, outputs: { scanSuccess: "scanSuccess" }, viewQueries: [{ propertyName: "videoElement", first: true, predicate: ["videoElement"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<video #videoElement [style.object-fit]=\"previewFitMode\">\r\n <p>{{ 'BrowserNotSupport' | bbbTranslate }}</p>\r\n</video>\r\n", styles: [":host,video{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarcodeReaderVideoComponent, decorators: [{
|
|
52
|
-
type: Component,
|
|
53
|
-
args: [{ selector: 'bdc-barcode-reader-video', changeDetection: ChangeDetectionStrategy.OnPush, template: "<video #videoElement [style.object-fit]=\"previewFitMode\">\r\n <p>{{ 'BrowserNotSupport' | bbbTranslate }}</p>\r\n</video>\r\n", styles: [":host,video{display:block;width:100%;height:100%}\n"] }]
|
|
54
|
-
}], ctorParameters: function () { return [{ type: i1.WebBarcodeService }]; }, propDecorators: { allFormats: [{
|
|
55
|
-
type: Input
|
|
56
|
-
}], previewFitMode: [{
|
|
57
|
-
type: Input
|
|
58
|
-
}], scanSuccess: [{
|
|
59
|
-
type: Output
|
|
60
|
-
}], videoElement: [{
|
|
61
|
-
type: ViewChild,
|
|
62
|
-
args: ['videoElement', { static: true }]
|
|
63
|
-
}], selectedCamera: [{
|
|
64
|
-
type: Input
|
|
65
|
-
}] } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyY29kZS1yZWFkZXItdmlkZW8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyY29kZS1yZWFkZXItdmlkZW8vYmFyY29kZS1yZWFkZXItdmlkZW8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyY29kZS1yZWFkZXItdmlkZW8vYmFyY29kZS1yZWFkZXItdmlkZW8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVF0RSxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsYUFBYTtJQWMxRCxZQUFvQixrQkFBcUM7UUFDckQsS0FBSyxFQUFFLENBQUM7UUFEUSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBWHpELG1CQUFjLEdBQXlELE1BQU0sQ0FBQztRQUVwRSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFPM0Msa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBeUIsSUFBSSxDQUFDLENBQUM7SUFJMUUsQ0FBQztJQVBELElBQWEsY0FBYyxDQUFDLEdBQW9CO1FBQzVDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFPRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxhQUFhO2FBQ2IsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzNCLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEVBRWxDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBd0I7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ08sU0FBUztRQUNiLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBQ08sVUFBVSxDQUFDLE1BQU07UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDOUU7SUFDTCxDQUFDOzt3SEF2RFEsMkJBQTJCOzRHQUEzQiwyQkFBMkIsc1dDeEJ4QyxvSUFHQTsyRkRxQmEsMkJBQTJCO2tCQU52QyxTQUFTOytCQUNJLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTTt3R0FHdEMsVUFBVTtzQkFBbEIsS0FBSztnQkFFTixjQUFjO3NCQURiLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHUCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFOUIsY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFyY29kZUZvcm1hdCB9IGZyb20gJ0B6eGluZy9saWJyYXJ5JztcclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IFdlYkJhcmNvZGVTZXJ2aWNlIH0gZnJvbSAnLi4vYmFyY29kZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1iYXJjb2RlLXJlYWRlci12aWRlbycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyY29kZS1yZWFkZXItdmlkZW8uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFyY29kZS1yZWFkZXItdmlkZW8uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXJjb2RlUmVhZGVyVmlkZW9Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgYWxsRm9ybWF0czogQmFyY29kZUZvcm1hdFtdO1xyXG4gICAgQElucHV0KClcclxuICAgIHByZXZpZXdGaXRNb2RlOiAnZmlsbCcgfCAnY29udGFpbicgfCAnY292ZXInIHwgJ3NjYWxlLWRvd24nIHwgJ25vbmUnID0gJ2ZpbGwnO1xyXG5cclxuICAgIEBPdXRwdXQoKSBzY2FuU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3ZpZGVvRWxlbWVudCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICB2aWRlb0VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFZpZGVvRWxlbWVudD47XHJcbiAgICBASW5wdXQoKSBzZXQgc2VsZWN0ZWRDYW1lcmEodmFsOiBNZWRpYURldmljZUluZm8pIHtcclxuICAgICAgICB0aGlzLl9jYW1lcmFTb3VyY2UubmV4dCh2YWwpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZWRpYURldmljZUluZm8gfCBudWxsPihudWxsKTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF93ZWJCYXJjb2RlU2VydmljZTogV2ViQmFyY29kZVNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5fc2V0Rm9ybWF0KHRoaXMuYWxsRm9ybWF0cyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NhbWVyYVNvdXJjZVxyXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcigoY2FtZXJhKSA9PiBjYW1lcmEgIT0gbnVsbCksXHJcblxyXG4gICAgICAgICAgICAgICAgdGFwKChjYW1lcmEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9wU2NhbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0U2NhbihjYW1lcmEpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3dlYkJhcmNvZGVTZXJ2aWNlLnNjYW5TdWNjZXNzJC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNjYW5TdWNjZXNzLmVtaXQocmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5fd2ViQmFyY29kZVNlcnZpY2Uuc2NhblN0b3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zZXRGb3JtYXQoZm9ybWF0czogQmFyY29kZUZvcm1hdFtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fd2ViQmFyY29kZVNlcnZpY2Uuc2V0Rm9ybWF0KGZvcm1hdHMpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc3RvcFNjYW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fd2ViQmFyY29kZVNlcnZpY2Uuc2NhblN0b3AoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3N0YXJ0U2NhbihjYW1lcmEpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2ViQmFyY29kZVNlcnZpY2Uuc3RhcnRTY2FuKGNhbWVyYSwgdGhpcy52aWRlb0VsZW1lbnQubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjx2aWRlbyAjdmlkZW9FbGVtZW50IFtzdHlsZS5vYmplY3QtZml0XT1cInByZXZpZXdGaXRNb2RlXCI+XHJcbiAgICA8cD57eyAnQnJvd3Nlck5vdFN1cHBvcnQnIHwgYmJiVHJhbnNsYXRlIH19PC9wPlxyXG48L3ZpZGVvPlxyXG4iXX0=
|
|
@@ -1,330 +0,0 @@
|
|
|
1
|
-
import { DecodeHintType, BarcodeFormat } from '@zxing/library';
|
|
2
|
-
import { ChecksumException, FormatException, NotFoundException } from '@zxing/library';
|
|
3
|
-
import { BrowserCodeReader, BrowserMultiFormatReader } from '@zxing/browser';
|
|
4
|
-
import { BehaviorSubject, Subject } from 'rxjs';
|
|
5
|
-
import { filter, map, shareReplay } from 'rxjs/operators';
|
|
6
|
-
import { Injectable } from '@angular/core';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "barsa-novin-ray-core";
|
|
9
|
-
/**
|
|
10
|
-
* Based on zxing-typescript BrowserCodeReader
|
|
11
|
-
*/
|
|
12
|
-
export class BrowserMultiFormatContinuousReader extends BrowserMultiFormatReader {
|
|
13
|
-
/**
|
|
14
|
-
* Returns the code reader scanner controls.
|
|
15
|
-
*/
|
|
16
|
-
getScannerControls() {
|
|
17
|
-
if (!this.scannerControls) {
|
|
18
|
-
throw new Error('No scanning is running at the time.');
|
|
19
|
-
}
|
|
20
|
-
return this.scannerControls;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Starts the decoding from the current or a new video element.
|
|
24
|
-
*
|
|
25
|
-
* @param deviceId The device's to be used Id
|
|
26
|
-
* @param previewEl A new video element
|
|
27
|
-
*/
|
|
28
|
-
async scanFromDeviceObservable(deviceId, previewEl) {
|
|
29
|
-
const scan$ = new BehaviorSubject({});
|
|
30
|
-
let ctrls;
|
|
31
|
-
try {
|
|
32
|
-
ctrls = await this.decodeFromVideoDevice(deviceId, previewEl, (result, error) => {
|
|
33
|
-
if (!error) {
|
|
34
|
-
scan$.next({ result });
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
console.error(error);
|
|
38
|
-
const errorName = error.name;
|
|
39
|
-
// stream cannot stop on fails.
|
|
40
|
-
if (
|
|
41
|
-
// scan Failure - found nothing, no error
|
|
42
|
-
errorName === NotFoundException.name ||
|
|
43
|
-
// scan Error - found the QR but got error on decoding
|
|
44
|
-
errorName === ChecksumException.name ||
|
|
45
|
-
errorName === FormatException.name ||
|
|
46
|
-
error.message.includes('No MultiFormat Readers were able to detect the code.')) {
|
|
47
|
-
scan$.next({ error });
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
// probably fatal error
|
|
51
|
-
scan$.error(error);
|
|
52
|
-
this.scannerControls?.stop();
|
|
53
|
-
this.scannerControls = undefined;
|
|
54
|
-
return;
|
|
55
|
-
});
|
|
56
|
-
this.scannerControls = {
|
|
57
|
-
...ctrls,
|
|
58
|
-
stop() {
|
|
59
|
-
ctrls.stop();
|
|
60
|
-
scan$.complete();
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
scan$.error(e);
|
|
66
|
-
this.scannerControls?.stop();
|
|
67
|
-
this.scannerControls = undefined;
|
|
68
|
-
}
|
|
69
|
-
return scan$.asObservable();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export class UserMediaBaseService {
|
|
73
|
-
/**
|
|
74
|
-
*
|
|
75
|
-
*/
|
|
76
|
-
constructor(_logService) {
|
|
77
|
-
this._logService = _logService;
|
|
78
|
-
this.hasNavigator = false;
|
|
79
|
-
this.isMediaDevicesSupported = false;
|
|
80
|
-
this._camerasSource = new BehaviorSubject([]);
|
|
81
|
-
this.cameras$ = this._camerasSource
|
|
82
|
-
.asObservable()
|
|
83
|
-
.pipe(shareReplay(1))
|
|
84
|
-
.pipe(filter((items) => items && items.length > 0));
|
|
85
|
-
this._permissionResponse = new Subject();
|
|
86
|
-
this.permissionResponse$ = this._permissionResponse.asObservable();
|
|
87
|
-
this._hasDevicesSource = new BehaviorSubject(false);
|
|
88
|
-
this.hasDevices$ = this._hasDevicesSource.asObservable().pipe(shareReplay(1));
|
|
89
|
-
this._permissionSource = new BehaviorSubject(false);
|
|
90
|
-
this.permission$ = this._permissionSource.asObservable().pipe();
|
|
91
|
-
this._camerasNotFoundSource = new Subject();
|
|
92
|
-
this.camerasNotFound$ = this._camerasNotFoundSource.asObservable().pipe(shareReplay(1));
|
|
93
|
-
this.hasNavigator = typeof navigator !== 'undefined';
|
|
94
|
-
this.isMediaDevicesSupported = this.hasNavigator && !!navigator.mediaDevices;
|
|
95
|
-
}
|
|
96
|
-
async updateVideoInputDevices() {
|
|
97
|
-
// permissions aren't needed to get devices, but to access them and their info
|
|
98
|
-
const devices = (await BrowserCodeReader.listVideoInputDevices()) || [];
|
|
99
|
-
const hasDevices = devices && devices.length > 0;
|
|
100
|
-
// stores discovered devices and updates information
|
|
101
|
-
this._hasDevicesSource.next(hasDevices);
|
|
102
|
-
this._camerasSource.next([...devices]);
|
|
103
|
-
if (!hasDevices) {
|
|
104
|
-
const err = {
|
|
105
|
-
code: DOMException.NOT_FOUND_ERR,
|
|
106
|
-
message: 'Device not found.'
|
|
107
|
-
};
|
|
108
|
-
this._camerasNotFoundSource.next(err);
|
|
109
|
-
}
|
|
110
|
-
return devices;
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Gets and registers all cammeras.
|
|
114
|
-
*/
|
|
115
|
-
async askForPermission() {
|
|
116
|
-
if (!this.hasNavigator) {
|
|
117
|
-
this._logService.error('user media', `Can't ask permission, navigator is not present.`);
|
|
118
|
-
this._setPermission(false);
|
|
119
|
-
}
|
|
120
|
-
if (!this.isMediaDevicesSupported) {
|
|
121
|
-
this._logService.error('user media', `Can't get user media, this is not supported.`);
|
|
122
|
-
this._setPermission(false);
|
|
123
|
-
}
|
|
124
|
-
let stream;
|
|
125
|
-
let permission = false;
|
|
126
|
-
try {
|
|
127
|
-
// Will try to ask for permission
|
|
128
|
-
stream = await this._getAnyVideoDevice();
|
|
129
|
-
permission = !!stream;
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
this._handlePermissionException(err);
|
|
133
|
-
}
|
|
134
|
-
finally {
|
|
135
|
-
this.terminateStream(stream);
|
|
136
|
-
}
|
|
137
|
-
this._setPermission(permission);
|
|
138
|
-
return permission;
|
|
139
|
-
}
|
|
140
|
-
terminateStream(stream) {
|
|
141
|
-
if (stream) {
|
|
142
|
-
stream.getTracks().forEach((t) => t.stop());
|
|
143
|
-
}
|
|
144
|
-
stream = undefined;
|
|
145
|
-
}
|
|
146
|
-
_setPermission(permission) {
|
|
147
|
-
this._permissionSource.next(permission);
|
|
148
|
-
}
|
|
149
|
-
_getAnyVideoDevice() {
|
|
150
|
-
return navigator.mediaDevices.getUserMedia({ video: true });
|
|
151
|
-
}
|
|
152
|
-
_handlePermissionException(err) {
|
|
153
|
-
console.error('user media', 'Error when asking for permission.', err);
|
|
154
|
-
let permission = false;
|
|
155
|
-
switch (err.name) {
|
|
156
|
-
// usually caused by not secure origins
|
|
157
|
-
case 'NotSupportedError':
|
|
158
|
-
this._logService.warn('user media', err.message);
|
|
159
|
-
// could not claim
|
|
160
|
-
permission = false;
|
|
161
|
-
// can't check devices
|
|
162
|
-
this._hasDevicesSource.next(false);
|
|
163
|
-
break;
|
|
164
|
-
// user denied permission
|
|
165
|
-
case 'NotAllowedError':
|
|
166
|
-
this._logService.warn('user media', err.message);
|
|
167
|
-
// claimed and denied permission
|
|
168
|
-
permission = false;
|
|
169
|
-
// this means that input devices exists
|
|
170
|
-
this._hasDevicesSource.next(true);
|
|
171
|
-
break;
|
|
172
|
-
// the device has no attached input devices
|
|
173
|
-
case 'NotFoundError':
|
|
174
|
-
this._logService.warn('user media', err.message);
|
|
175
|
-
// no permissions claimed
|
|
176
|
-
permission = false;
|
|
177
|
-
// because there was no devices
|
|
178
|
-
this._hasDevicesSource.next(false);
|
|
179
|
-
// tells the listener about the error
|
|
180
|
-
this._camerasNotFoundSource.next(err);
|
|
181
|
-
break;
|
|
182
|
-
case 'NotReadableError':
|
|
183
|
-
this._logService.warn('user media', `Couldn't read the device(s)'s stream, it's probably in use by another app.`);
|
|
184
|
-
// no permissions claimed
|
|
185
|
-
permission = false;
|
|
186
|
-
// there are devices, which I couldn't use
|
|
187
|
-
this._hasDevicesSource.next(false);
|
|
188
|
-
// tells the listener about the error
|
|
189
|
-
this._camerasNotFoundSource.next(err);
|
|
190
|
-
break;
|
|
191
|
-
default:
|
|
192
|
-
this._logService.warn('user media', 'I was not able to define if I have permissions for camera or not.', err);
|
|
193
|
-
// unknown
|
|
194
|
-
permission = false;
|
|
195
|
-
// this.hasDevices.next(undefined;
|
|
196
|
-
break;
|
|
197
|
-
}
|
|
198
|
-
this._setPermission(permission);
|
|
199
|
-
// tells the listener about the error
|
|
200
|
-
this._permissionResponse.next(err);
|
|
201
|
-
return permission;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
UserMediaBaseService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UserMediaBaseService, deps: [{ token: i1.LogService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
205
|
-
UserMediaBaseService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UserMediaBaseService });
|
|
206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: UserMediaBaseService, decorators: [{
|
|
207
|
-
type: Injectable
|
|
208
|
-
}], ctorParameters: function () { return [{ type: i1.LogService }]; } });
|
|
209
|
-
export class WebBarcodeService {
|
|
210
|
-
constructor(userMediaService) {
|
|
211
|
-
this.userMediaService = userMediaService;
|
|
212
|
-
this._device = undefined;
|
|
213
|
-
this._codeReader = undefined;
|
|
214
|
-
this._hints = new Map();
|
|
215
|
-
this._scanErrorSource = new Subject();
|
|
216
|
-
this._scanFailureSource = new Subject();
|
|
217
|
-
this._scanCompleteSource = new Subject();
|
|
218
|
-
this._scanSuccessSource = new Subject();
|
|
219
|
-
this._options = {
|
|
220
|
-
delayBetweenScanAttempts: 50,
|
|
221
|
-
delayBetweenScanSuccess: 500
|
|
222
|
-
};
|
|
223
|
-
this.scanError$ = this._scanErrorSource.asObservable();
|
|
224
|
-
this.scanFailure$ = this._scanFailureSource.asObservable();
|
|
225
|
-
this.scanComplete$ = this._scanCompleteSource.asObservable();
|
|
226
|
-
this.scanSuccess$ = this._scanSuccessSource.asObservable().pipe(map((c) => c.getText()));
|
|
227
|
-
}
|
|
228
|
-
startScan(device, videoEl, options = this._options) {
|
|
229
|
-
// instantly stops the scan before changing devices
|
|
230
|
-
this.scanStop();
|
|
231
|
-
// correctly sets the new (or none) device
|
|
232
|
-
this._device = device || undefined;
|
|
233
|
-
this._videoEl = videoEl;
|
|
234
|
-
this._options = options;
|
|
235
|
-
if (!this._device) {
|
|
236
|
-
// cleans the video because user removed the device
|
|
237
|
-
BrowserCodeReader.cleanVideoSource(videoEl);
|
|
238
|
-
}
|
|
239
|
-
if (this._scanSubscription) {
|
|
240
|
-
throw new Error('There is already a scan proccess running.');
|
|
241
|
-
}
|
|
242
|
-
if (!this._device) {
|
|
243
|
-
throw new Error('No device defined, cannot start scan, please define a device.');
|
|
244
|
-
}
|
|
245
|
-
// if enabled, starts scanning
|
|
246
|
-
if (device) {
|
|
247
|
-
this.scanFromDevice(device.deviceId);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
setFormat(input) {
|
|
251
|
-
if (typeof input === 'string') {
|
|
252
|
-
throw new Error('Invalid formats, make sure the [formats] input is a binding.');
|
|
253
|
-
}
|
|
254
|
-
// formats may be set from html template as BarcodeFormat or string array
|
|
255
|
-
const formats = input.map((f) => this.getBarcodeFormatOrFail(f));
|
|
256
|
-
const hints = this._hints;
|
|
257
|
-
// updates the hints
|
|
258
|
-
hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);
|
|
259
|
-
// handles updating the codeReader
|
|
260
|
-
this._hints = hints;
|
|
261
|
-
}
|
|
262
|
-
scanStop() {
|
|
263
|
-
if (this._scanSubscription) {
|
|
264
|
-
this._codeReader?.getScannerControls().stop();
|
|
265
|
-
this._scanSubscription?.unsubscribe();
|
|
266
|
-
this._scanSubscription = undefined;
|
|
267
|
-
}
|
|
268
|
-
// this.torchCompatible.next(false);
|
|
269
|
-
}
|
|
270
|
-
destroy() {
|
|
271
|
-
// @note apenas necessario por enquanto causa da Torch
|
|
272
|
-
this.scanStop();
|
|
273
|
-
this._codeReader = undefined;
|
|
274
|
-
this._device = undefined;
|
|
275
|
-
}
|
|
276
|
-
getBarcodeFormatOrFail(format) {
|
|
277
|
-
return typeof format === 'string' ? BarcodeFormat[format.trim().toUpperCase()] : format;
|
|
278
|
-
}
|
|
279
|
-
async scanFromDevice(deviceId) {
|
|
280
|
-
const videoElement = this._videoEl;
|
|
281
|
-
const codeReader = this.getCodeReader();
|
|
282
|
-
const scanStream = await codeReader.scanFromDeviceObservable(deviceId, videoElement);
|
|
283
|
-
if (!scanStream) {
|
|
284
|
-
throw new Error('Undefined decoding stream, aborting.');
|
|
285
|
-
}
|
|
286
|
-
const next = (x) => this._onDecodeResult(x.result, x.error);
|
|
287
|
-
const error = (err) => this._onDecodeError(err);
|
|
288
|
-
const complete = () => { };
|
|
289
|
-
this._scanSubscription = scanStream.subscribe(next, error, complete);
|
|
290
|
-
if (this._scanSubscription.closed) {
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
// const controls = codeReader.getScannerControls();
|
|
294
|
-
// const hasTorchControl = typeof controls.switchTorch !== 'undefined';
|
|
295
|
-
// this.torchCompatible.next(hasTorchControl);
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Handles decode errors.
|
|
299
|
-
*/
|
|
300
|
-
_onDecodeError(err) {
|
|
301
|
-
this._scanErrorSource.next(err);
|
|
302
|
-
// this.reset();
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Handles decode results.
|
|
306
|
-
*/
|
|
307
|
-
_onDecodeResult(result, error) {
|
|
308
|
-
if (result) {
|
|
309
|
-
this._scanSuccessSource.next(result);
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
this._scanFailureSource.next(error);
|
|
313
|
-
}
|
|
314
|
-
if (result) {
|
|
315
|
-
this._scanCompleteSource.next(result);
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
getCodeReader() {
|
|
319
|
-
if (!this._codeReader) {
|
|
320
|
-
this._codeReader = new BrowserMultiFormatContinuousReader(this._hints, this._options);
|
|
321
|
-
}
|
|
322
|
-
return this._codeReader;
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
WebBarcodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: WebBarcodeService, deps: [{ token: UserMediaBaseService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
326
|
-
WebBarcodeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: WebBarcodeService });
|
|
327
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: WebBarcodeService, decorators: [{
|
|
328
|
-
type: Injectable
|
|
329
|
-
}], ctorParameters: function () { return [{ type: UserMediaBaseService }]; } });
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyY29kZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvYmFyY29kZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTzNDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtDQUFtQyxTQUFRLHdCQUF3QjtJQU81RTs7T0FFRztJQUNJLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLHdCQUF3QixDQUNqQyxRQUFpQixFQUNqQixTQUE0QjtRQUU1QixNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxLQUFLLENBQUM7UUFFVixJQUFJO1lBQ0EsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVB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MEIsRUFBRSxLQUE0QjtRQUM1RSxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7YUFBTTtZQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBYyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBQ08sYUFBYTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksa0NBQWtDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekY7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQzs7OEdBOUlRLGlCQUFpQjtrSEFBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXN1bHQsIEV4Y2VwdGlvbiwgRGVjb2RlSGludFR5cGUsIEJhcmNvZGVGb3JtYXQgfSBmcm9tICdAenhpbmcvbGlicmFyeSc7XHJcbmltcG9ydCB7IENoZWNrc3VtRXhjZXB0aW9uLCBGb3JtYXRFeGNlcHRpb24sIE5vdEZvdW5kRXhjZXB0aW9uIH0gZnJvbSAnQHp4aW5nL2xpYnJhcnknO1xyXG5pbXBvcnQgeyBCcm93c2VyQ29kZVJlYWRlciwgQnJvd3Nlck11bHRpRm9ybWF0UmVhZGVyLCBJU2Nhbm5lckNvbnRyb2xzIH0gZnJvbSAnQHp4aW5nL2Jyb3dzZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTG9nU2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VsdEFuZEVycm9yIHtcclxuICAgIHJlc3VsdD86IFJlc3VsdDtcclxuICAgIGVycm9yPzogRXhjZXB0aW9uO1xyXG59XHJcblxyXG4vKipcclxuICogQmFzZWQgb24genhpbmctdHlwZXNjcmlwdCBCcm93c2VyQ29kZVJlYWRlclxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEJyb3dzZXJNdWx0aUZvcm1hdENvbnRpbnVvdXNSZWFkZXIgZXh0ZW5kcyBCcm93c2VyTXVsdGlGb3JtYXRSZWFkZXIge1xyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxvd3MgdG8gY2FsbCBzY2FubmVyIGNvbnRyb2xzIEFQSSB3aGlsZSBzY2FubmluZy5cclxuICAgICAqIFdpbGwgYmUgdW5kZWZpbmVkIGlmIG5vIHNjYW5uaW5nIGlzIHJ1bm5pZy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNjYW5uZXJDb250cm9sczogSVNjYW5uZXJDb250cm9scyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGNvZGUgcmVhZGVyIHNjYW5uZXIgY29udHJvbHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTY2FubmVyQ29udHJvbHMoKTogSVNjYW5uZXJDb250cm9scyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNjYW5uZXJDb250cm9scykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNjYW5uaW5nIGlzIHJ1bm5pbmcgYXQgdGhlIHRpbWUuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnNjYW5uZXJDb250cm9scztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0YXJ0cyB0aGUgZGVjb2RpbmcgZnJvbSB0aGUgY3VycmVudCBvciBhIG5ldyB2aWRlbyBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlJ3MgdG8gYmUgdXNlZCBJZFxyXG4gICAgICogQHBhcmFtIHByZXZpZXdFbCBBIG5ldyB2aWRlbyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBzY2FuRnJvbURldmljZU9ic2VydmFibGUoXHJcbiAgICAgICAgZGV2aWNlSWQ/OiBzdHJpbmcsXHJcbiAgICAgICAgcHJldmlld0VsPzogSFRNTFZpZGVvRWxlbWVudFxyXG4gICAgKTogUHJvbWlzZTxPYnNlcnZhYmxlPFJlc3VsdEFuZEVycm9yPj4ge1xyXG4gICAgICAgIGNvbnN0IHNjYW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXN1bHRBbmRFcnJvcj4oe30pO1xyXG4gICAgICAgIGxldCBjdHJscztcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY3RybHMgPSBhd2FpdCB0aGlzLmRlY29kZUZyb21WaWRlb0RldmljZShkZXZpY2VJZCwgcHJldmlld0VsLCAocmVzdWx0LCBlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW4kLm5leHQoeyByZXN1bHQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvck5hbWUgPSBlcnJvci5uYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN0cmVhbSBjYW5ub3Qgc3RvcCBvbiBmYWlscy5cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAvLyBzY2FuIEZhaWx1cmUgLSBmb3VuZCBub3RoaW5nLCBubyBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9PT0gTm90Rm91bmRFeGNlcHRpb24ubmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNjYW4gRXJyb3IgLSBmb3VuZCB0aGUgUVIgYnV0IGdvdCBlcnJvciBvbiBkZWNvZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9PT0gQ2hlY2tzdW1FeGNlcHRpb24ubmFtZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9PT0gRm9ybWF0RXhjZXB0aW9uLm5hbWUgfHxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdObyBNdWx0aUZvcm1hdCBSZWFkZXJzIHdlcmUgYWJsZSB0byBkZXRlY3QgdGhlIGNvZGUuJylcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNjYW4kLm5leHQoeyBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvYmFibHkgZmF0YWwgZXJyb3JcclxuICAgICAgICAgICAgICAgIHNjYW4kLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5lckNvbnRyb2xzPy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scyA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scyA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmN0cmxzLFxyXG4gICAgICAgICAgICAgICAgc3RvcCgpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHJscy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbiQuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHNjYW4kLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scz8uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNjYW5uZXJDb250cm9scyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzY2FuJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxufVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWVkaWFCYXNlU2VydmljZSB7XHJcbiAgICBoYXNOYXZpZ2F0b3IgPSBmYWxzZTtcclxuICAgIGlzTWVkaWFEZXZpY2VzU3VwcG9ydGVkID0gZmFsc2U7XHJcblxyXG4gICAgX2NhbWVyYXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lZGlhRGV2aWNlSW5mb1tdPihbXSk7XHJcbiAgICBjYW1lcmFzJCA9IHRoaXMuX2NhbWVyYXNTb3VyY2VcclxuICAgICAgICAuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICAucGlwZShzaGFyZVJlcGxheSgxKSlcclxuICAgICAgICAucGlwZShmaWx0ZXIoKGl0ZW1zKSA9PiBpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSk7XHJcblxyXG4gICAgX3Blcm1pc3Npb25SZXNwb25zZSA9IG5ldyBTdWJqZWN0PERPTUV4Y2VwdGlvbj4oKTtcclxuICAgIHBlcm1pc3Npb25SZXNwb25zZSQgPSB0aGlzLl9wZXJtaXNzaW9uUmVzcG9uc2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgX2hhc0RldmljZXNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIGhhc0RldmljZXMkID0gdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHJcbiAgICBfcGVybWlzc2lvblNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcGVybWlzc2lvbiQgPSB0aGlzLl9wZXJtaXNzaW9uU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoKTtcclxuXHJcbiAgICBfY2FtZXJhc05vdEZvdW5kU291cmNlID0gbmV3IFN1YmplY3Q8RE9NRXhjZXB0aW9uPigpO1xyXG4gICAgY2FtZXJhc05vdEZvdW5kJCA9IHRoaXMuX2NhbWVyYXNOb3RGb3VuZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2xvZ1NlcnZpY2U6IExvZ1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmhhc05hdmlnYXRvciA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIHRoaXMuaXNNZWRpYURldmljZXNTdXBwb3J0ZWQgPSB0aGlzLmhhc05hdmlnYXRvciAmJiAhIW5hdmlnYXRvci5tZWRpYURldmljZXM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlVmlkZW9JbnB1dERldmljZXMoKTogUHJvbWlzZTxNZWRpYURldmljZUluZm9bXT4ge1xyXG4gICAgICAgIC8vIHBlcm1pc3Npb25zIGFyZW4ndCBuZWVkZWQgdG8gZ2V0IGRldmljZXMsIGJ1dCB0byBhY2Nlc3MgdGhlbSBhbmQgdGhlaXIgaW5mb1xyXG4gICAgICAgIGNvbnN0IGRldmljZXMgPSAoYXdhaXQgQnJvd3NlckNvZGVSZWFkZXIubGlzdFZpZGVvSW5wdXREZXZpY2VzKCkpIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGhhc0RldmljZXMgPSBkZXZpY2VzICYmIGRldmljZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICAgICAgLy8gc3RvcmVzIGRpc2NvdmVyZWQgZGV2aWNlcyBhbmQgdXBkYXRlcyBpbmZvcm1hdGlvblxyXG4gICAgICAgIHRoaXMuX2hhc0RldmljZXNTb3VyY2UubmV4dChoYXNEZXZpY2VzKTtcclxuICAgICAgICB0aGlzLl9jYW1lcmFzU291cmNlLm5leHQoWy4uLmRldmljZXNdKTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXNEZXZpY2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IERPTUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSLFxyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0RldmljZSBub3QgZm91bmQuJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFzTm90Rm91bmRTb3VyY2UubmV4dChlcnIgYXMgRE9NRXhjZXB0aW9uKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBkZXZpY2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbmQgcmVnaXN0ZXJzIGFsbCBjYW1tZXJhcy5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYXNrRm9yUGVybWlzc2lvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzTmF2aWdhdG9yKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoJ3VzZXIgbWVkaWEnLCBgQ2FuJ3QgYXNrIHBlcm1pc3Npb24sIG5hdmlnYXRvciBpcyBub3QgcHJlc2VudC5gKTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0UGVybWlzc2lvbihmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNNZWRpYURldmljZXNTdXBwb3J0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS5lcnJvcigndXNlciBtZWRpYScsIGBDYW4ndCBnZXQgdXNlciBtZWRpYSwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLmApO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRQZXJtaXNzaW9uKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzdHJlYW06IE1lZGlhU3RyZWFtIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIFdpbGwgdHJ5IHRvIGFzayBmb3IgcGVybWlzc2lvblxyXG4gICAgICAgICAgICBzdHJlYW0gPSBhd2FpdCB0aGlzLl9nZXRBbnlWaWRlb0RldmljZSgpO1xyXG4gICAgICAgICAgICBwZXJtaXNzaW9uID0gISFzdHJlYW07XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVBlcm1pc3Npb25FeGNlcHRpb24oZXJyIGFzIERPTUV4Y2VwdGlvbik7XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy50ZXJtaW5hdGVTdHJlYW0oc3RyZWFtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBlcm1pc3Npb24ocGVybWlzc2lvbik7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgdGVybWluYXRlU3RyZWFtKHN0cmVhbTogTWVkaWFTdHJlYW0gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKCh0KSA9PiB0LnN0b3AoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdHJlYW0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldFBlcm1pc3Npb24ocGVybWlzc2lvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25Tb3VyY2UubmV4dChwZXJtaXNzaW9uKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfZ2V0QW55VmlkZW9EZXZpY2UoKTogUHJvbWlzZTxNZWRpYVN0cmVhbT4ge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IHZpZGVvOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9oYW5kbGVQZXJtaXNzaW9uRXhjZXB0aW9uKGVycjogRE9NRXhjZXB0aW9uKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcigndXNlciBtZWRpYScsICdFcnJvciB3aGVuIGFza2luZyBmb3IgcGVybWlzc2lvbi4nLCBlcnIpO1xyXG4gICAgICAgIGxldCBwZXJtaXNzaW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZXJyLm5hbWUpIHtcclxuICAgICAgICAgICAgLy8gdXN1YWxseSBjYXVzZWQgYnkgbm90IHNlY3VyZSBvcmlnaW5zXHJcbiAgICAgICAgICAgIGNhc2UgJ05vdFN1cHBvcnRlZEVycm9yJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2Uud2FybigndXNlciBtZWRpYScsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvdWxkIG5vdCBjbGFpbVxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gY2FuJ3QgY2hlY2sgZGV2aWNlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgLy8gdXNlciBkZW5pZWQgcGVybWlzc2lvblxyXG4gICAgICAgICAgICBjYXNlICdOb3RBbGxvd2VkRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKCd1c2VyIG1lZGlhJywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gY2xhaW1lZCBhbmQgZGVuaWVkIHBlcm1pc3Npb25cclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMgbWVhbnMgdGhhdCBpbnB1dCBkZXZpY2VzIGV4aXN0c1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAvLyB0aGUgZGV2aWNlIGhhcyBubyBhdHRhY2hlZCBpbnB1dCBkZXZpY2VzXHJcbiAgICAgICAgICAgIGNhc2UgJ05vdEZvdW5kRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKCd1c2VyIG1lZGlhJywgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gcGVybWlzc2lvbnMgY2xhaW1lZFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSB3YXMgbm8gZGV2aWNlc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faGFzRGV2aWNlc1NvdXJjZS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIC8vIHRlbGxzIHRoZSBsaXN0ZW5lciBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NhbWVyYXNOb3RGb3VuZFNvdXJjZS5uZXh0KGVycik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ05vdFJlYWRhYmxlRXJyb3InOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nU2VydmljZS53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyIG1lZGlhJyxcclxuICAgICAgICAgICAgICAgICAgICBgQ291bGRuJ3QgcmVhZCB0aGUgZGV2aWNlKHMpJ3Mgc3RyZWFtLCBpdCdzIHByb2JhYmx5IGluIHVzZSBieSBhbm90aGVyIGFwcC5gXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gcGVybWlzc2lvbnMgY2xhaW1lZFxyXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhlcmUgYXJlIGRldmljZXMsIHdoaWNoIEkgY291bGRuJ3QgdXNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNEZXZpY2VzU291cmNlLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGVsbHMgdGhlIGxpc3RlbmVyIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FtZXJhc05vdEZvdW5kU291cmNlLm5leHQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2Uud2FybihcclxuICAgICAgICAgICAgICAgICAgICAndXNlciBtZWRpYScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ0kgd2FzIG5vdCBhYmxlIHRvIGRlZmluZSBpZiBJIGhhdmUgcGVybWlzc2lvbnMgZm9yIGNhbWVyYSBvciBub3QuJyxcclxuICAgICAgICAgICAgICAgICAgICBlcnJcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyB1bmtub3duXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmhhc0RldmljZXMubmV4dCh1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldFBlcm1pc3Npb24ocGVybWlzc2lvbik7XHJcblxyXG4gICAgICAgIC8vIHRlbGxzIHRoZSBsaXN0ZW5lciBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uUmVzcG9uc2UubmV4dChlcnIpO1xyXG5cclxuICAgICAgICByZXR1cm4gcGVybWlzc2lvbjtcclxuICAgIH1cclxufVxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBXZWJCYXJjb2RlU2VydmljZSB7XHJcbiAgICBzY2FuRXJyb3IkOiBPYnNlcnZhYmxlPEVycm9yPjtcclxuICAgIHNjYW5GYWlsdXJlJDogT2JzZXJ2YWJsZTxFcnJvcj47XHJcbiAgICBzY2FuQ29tcGxldGUkOiBPYnNlcnZhYmxlPFJlc3VsdD47XHJcbiAgICBzY2FuU3VjY2VzcyQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuXHJcbiAgICBwcml2YXRlIF9kZXZpY2U6IE1lZGlhRGV2aWNlSW5mbyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgX3ZpZGVvRWw6IEhUTUxWaWRlb0VsZW1lbnQ7XHJcbiAgICBwcml2YXRlIF9jb2RlUmVhZGVyOiBCcm93c2VyTXVsdGlGb3JtYXRDb250aW51b3VzUmVhZGVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgcHJpdmF0ZSBfaGludHM6IE1hcDxEZWNvZGVIaW50VHlwZSwgYW55PiA9IG5ldyBNYXA8RGVjb2RlSGludFR5cGUsIGFueT4oKTtcclxuICAgIHByaXZhdGUgX3NjYW5FcnJvclNvdXJjZSA9IG5ldyBTdWJqZWN0PEVycm9yPigpO1xyXG4gICAgcHJpdmF0ZSBfc2NhbkZhaWx1cmVTb3VyY2UgPSBuZXcgU3ViamVjdDxFcnJvcj4oKTtcclxuICAgIHByaXZhdGUgX3NjYW5TdWJzY3JpcHRpb246IGFueTtcclxuICAgIHByaXZhdGUgX3NjYW5Db21wbGV0ZVNvdXJjZSA9IG5ldyBTdWJqZWN0PFJlc3VsdD4oKTtcclxuICAgIHByaXZhdGUgX3NjYW5TdWNjZXNzU291cmNlID0gbmV3IFN1YmplY3Q8UmVzdWx0PigpO1xyXG4gICAgcHJpdmF0ZSBfb3B0aW9uczoge1xyXG4gICAgICAgIGRlbGF5QmV0d2VlblNjYW5BdHRlbXB0czogbnVtYmVyO1xyXG4gICAgICAgIGRlbGF5QmV0d2VlblNjYW5TdWNjZXNzOiBudW1iZXI7XHJcbiAgICB9ID0ge1xyXG4gICAgICAgIGRlbGF5QmV0d2VlblNjYW5BdHRlbXB0czogNTAsXHJcbiAgICAgICAgZGVsYXlCZXR3ZWVuU2NhblN1Y2Nlc3M6IDUwMFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdXNlck1lZGlhU2VydmljZTogVXNlck1lZGlhQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLnNjYW5FcnJvciQgPSB0aGlzLl9zY2FuRXJyb3JTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zY2FuRmFpbHVyZSQgPSB0aGlzLl9zY2FuRmFpbHVyZVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLnNjYW5Db21wbGV0ZSQgPSB0aGlzLl9zY2FuQ29tcGxldGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zY2FuU3VjY2VzcyQgPSB0aGlzLl9zY2FuU3VjY2Vzc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKG1hcCgoYykgPT4gYy5nZXRUZXh0KCkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhcnRTY2FuKGRldmljZTogTWVkaWFEZXZpY2VJbmZvLCB2aWRlb0VsOiBIVE1MVmlkZW9FbGVtZW50LCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIC8vIGluc3RhbnRseSBzdG9wcyB0aGUgc2NhbiBiZWZvcmUgY2hhbmdpbmcgZGV2aWNlc1xyXG4gICAgICAgIHRoaXMuc2NhblN0b3AoKTtcclxuXHJcbiAgICAgICAgLy8gY29ycmVjdGx5IHNldHMgdGhlIG5ldyAob3Igbm9uZSkgZGV2aWNlXHJcbiAgICAgICAgdGhpcy5fZGV2aWNlID0gZGV2aWNlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl92aWRlb0VsID0gdmlkZW9FbDtcclxuICAgICAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICBpZiAoIXRoaXMuX2RldmljZSkge1xyXG4gICAgICAgICAgICAvLyBjbGVhbnMgdGhlIHZpZGVvIGJlY2F1c2UgdXNlciByZW1vdmVkIHRoZSBkZXZpY2VcclxuICAgICAgICAgICAgQnJvd3NlckNvZGVSZWFkZXIuY2xlYW5WaWRlb1NvdXJjZSh2aWRlb0VsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3NjYW5TdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbHJlYWR5IGEgc2NhbiBwcm9jY2VzcyBydW5uaW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBkZXZpY2UgZGVmaW5lZCwgY2Fubm90IHN0YXJ0IHNjYW4sIHBsZWFzZSBkZWZpbmUgYSBkZXZpY2UuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBpZiBlbmFibGVkLCBzdGFydHMgc2Nhbm5pbmdcclxuICAgICAgICBpZiAoZGV2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NhbkZyb21EZXZpY2UoZGV2aWNlLmRldmljZUlkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgc2V0Rm9ybWF0KGlucHV0OiBCYXJjb2RlRm9ybWF0W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZm9ybWF0cywgbWFrZSBzdXJlIHRoZSBbZm9ybWF0c10gaW5wdXQgaXMgYSBiaW5kaW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZm9ybWF0cyBtYXkgYmUgc2V0IGZyb20gaHRtbCB0ZW1wbGF0ZSBhcyBCYXJjb2RlRm9ybWF0IG9yIHN0cmluZyBhcnJheVxyXG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBpbnB1dC5tYXAoKGYpID0+IHRoaXMuZ2V0QmFyY29kZUZvcm1hdE9yRmFpbChmKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhpbnRzID0gdGhpcy5faGludHM7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZXMgdGhlIGhpbnRzXHJcbiAgICAgICAgaGludHMuc2V0KERlY29kZUhpbnRUeXBlLlBPU1NJQkxFX0ZPUk1BVFMsIGZvcm1hdHMpO1xyXG5cclxuICAgICAgICAvLyBoYW5kbGVzIHVwZGF0aW5nIHRoZSBjb2RlUmVhZGVyXHJcbiAgICAgICAgdGhpcy5faGludHMgPSBoaW50cztcclxuICAgIH1cclxuICAgIHB1YmxpYyBzY2FuU3RvcCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5fc2NhblN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlUmVhZGVyPy5nZXRTY2FubmVyQ29udHJvbHMoKS5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYW5TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYW5TdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMudG9yY2hDb21wYXRpYmxlLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIEBub3RlIGFwZW5hcyBuZWNlc3NhcmlvIHBvciBlbnF1YW50byBjYXVzYSBkYSBUb3JjaFxyXG4gICAgICAgIHRoaXMuc2NhblN0b3AoKTtcclxuICAgICAgICB0aGlzLl9jb2RlUmVhZGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2RldmljZSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEJhcmNvZGVGb3JtYXRPckZhaWwoZm9ybWF0OiBzdHJpbmcgfCBCYXJjb2RlRm9ybWF0KTogQmFyY29kZUZvcm1hdCB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnID8gQmFyY29kZUZvcm1hdFtmb3JtYXQudHJpbSgpLnRvVXBwZXJDYXNlKCldIDogZm9ybWF0O1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBhc3luYyBzY2FuRnJvbURldmljZShkZXZpY2VJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fdmlkZW9FbDtcclxuXHJcbiAgICAgICAgY29uc3QgY29kZVJlYWRlciA9IHRoaXMuZ2V0Q29kZVJlYWRlcigpO1xyXG5cclxuICAgICAgICBjb25zdCBzY2FuU3RyZWFtID0gYXdhaXQgY29kZVJlYWRlci5zY2FuRnJvbURldmljZU9ic2VydmFibGUoZGV2aWNlSWQsIHZpZGVvRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGlmICghc2NhblN0cmVhbSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZGVmaW5lZCBkZWNvZGluZyBzdHJlYW0sIGFib3J0aW5nLicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dCA9ICh4OiBSZXN1bHRBbmRFcnJvcik6IHZvaWQgPT4gdGhpcy5fb25EZWNvZGVSZXN1bHQoeC5yZXN1bHQsIHguZXJyb3IpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gKGVycjogYW55KTogdm9pZCA9PiB0aGlzLl9vbkRlY29kZUVycm9yKGVycik7XHJcbiAgICAgICAgY29uc3QgY29tcGxldGUgPSAoKTogdm9pZCA9PiB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2NhblN1YnNjcmlwdGlvbiA9IHNjYW5TdHJlYW0uc3Vic2NyaWJlKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zY2FuU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb25zdCBjb250cm9scyA9IGNvZGVSZWFkZXIuZ2V0U2Nhbm5lckNvbnRyb2xzKCk7XHJcbiAgICAgICAgLy8gY29uc3QgaGFzVG9yY2hDb250cm9sID0gdHlwZW9mIGNvbnRyb2xzLnN3aXRjaFRvcmNoICE9PSAndW5kZWZpbmVkJztcclxuXHJcbiAgICAgICAgLy8gdGhpcy50b3JjaENvbXBhdGlibGUubmV4dChoYXNUb3JjaENvbnRyb2wpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGRlY29kZSBlcnJvcnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX29uRGVjb2RlRXJyb3IoZXJyOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zY2FuRXJyb3JTb3VyY2UubmV4dChlcnIpO1xyXG4gICAgICAgIC8vIHRoaXMucmVzZXQoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBkZWNvZGUgcmVzdWx0cy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb25EZWNvZGVSZXN1bHQocmVzdWx0OiBSZXN1bHQgfCB1bmRlZmluZWQsIGVycm9yOiBFeGNlcHRpb24gfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NjYW5TdWNjZXNzU291cmNlLm5leHQocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FuRmFpbHVyZVNvdXJjZS5uZXh0KGVycm9yIGFzIEVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zY2FuQ29tcGxldGVTb3VyY2UubmV4dChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgZ2V0Q29kZVJlYWRlcigpOiBCcm93c2VyTXVsdGlGb3JtYXRDb250aW51b3VzUmVhZGVyIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2NvZGVSZWFkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29kZVJlYWRlciA9IG5ldyBCcm93c2VyTXVsdGlGb3JtYXRDb250aW51b3VzUmVhZGVyKHRoaXMuX2hpbnRzLCB0aGlzLl9vcHRpb25zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlUmVhZGVyO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|