barsa-develop-components 2.2.2 → 2.2.4
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/esm2022/barsa-develop-components.mjs +5 -0
- 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 +25 -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/esm2022/lib/barsa-develop-components.module.mjs +292 -0
- package/esm2022/lib/barsa-document-list-item/barsa-document-list-item.component.mjs +104 -0
- package/esm2022/lib/barsa-documents/barsa-documents.component.mjs +159 -0
- package/esm2022/lib/barsa-geographic-location/barsa-geographic-location.component.mjs +173 -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 +36 -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/esm2022/lib/checkbox-button/checkbox-button.component.mjs +23 -0
- package/esm2022/lib/column-chip/column-chip.component.mjs +44 -0
- package/esm2022/lib/column-form-viewer/column-form-viewer.component.mjs +88 -0
- package/esm2022/lib/column-progressbar/column-progressbar.component.mjs +87 -0
- package/esm2022/lib/enum-info-micro-proccess-flow/enum-info-micro-proccess-flow.component.mjs +18 -0
- 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 +36 -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/esm2022/lib/g4b-details/g4b-details.component.mjs +28 -0
- package/esm2022/lib/g4b-estelam/g4b-estelam.component.mjs +30 -0
- package/esm2022/lib/geographic-location/geographic-location.component.mjs +88 -0
- package/esm2022/lib/login-form/login-form.component.mjs +55 -0
- package/esm2022/lib/login-social-conncetions/login-social-conncetions.component.mjs +30 -0
- 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/esm2022/lib/models/form-report-view-setting.mjs +2 -0
- package/esm2022/lib/models/index.mjs +8 -0
- package/esm2022/lib/models/micro-process-flow-view-setting.mjs +2 -0
- package/esm2022/lib/models/person.mjs +2 -0
- package/esm2022/lib/models/service-desk-view-of-services-setting.mjs +2 -0
- package/esm2022/lib/models/tab-process-view-setting.mjs +2 -0
- package/esm2022/lib/pipes/datasource-to-flow-item.mjs +23 -0
- package/esm2022/lib/pipes/index.mjs +3 -0
- package/esm2022/lib/pipes/mo-list-to-flow-item.pipe.mjs +23 -0
- 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/esm2022/lib/report-line-chart-view/report-line-chart-view.component.mjs +12 -0
- 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/esm2022/lib/service-desk-card-content-mojavezhay-akhz-shode/service-desk-card-content-mojavezhay-akhz-shode.component.mjs +28 -0
- 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 +238 -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 +104 -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 +41 -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/esm2022/public-api.mjs +64 -0
- package/package.json +3 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ViewChild } from '@angular/core';
|
|
2
|
+
import { BarsaApi } from 'barsa-novin-ray-core';
|
|
3
|
+
import { UiMoInfoSubFormUiComponent } from 'barsa-sap-ui';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "barsa-novin-ray-core";
|
|
7
|
+
import * as i3 from "@fundamental-ngx/core/dialog";
|
|
8
|
+
import * as i4 from "@fundamental-ngx/core/title";
|
|
9
|
+
import * as i5 from "../barsa-geographic-location/barsa-geographic-location.component";
|
|
10
|
+
export class GeographicLocationComponent extends UiMoInfoSubFormUiComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.fullscreen = false;
|
|
14
|
+
}
|
|
15
|
+
get latitudeUi() {
|
|
16
|
+
return this.customFormPanelUi._dictFieldUi.Latitude;
|
|
17
|
+
}
|
|
18
|
+
get longitudeUi() {
|
|
19
|
+
return this.customFormPanelUi._dictFieldUi.Longitude;
|
|
20
|
+
}
|
|
21
|
+
openDialog(dialog) {
|
|
22
|
+
this._dialogService.open(dialog, {
|
|
23
|
+
responsivePadding: true,
|
|
24
|
+
fullScreen: true,
|
|
25
|
+
mobile: true,
|
|
26
|
+
ariaLabelledBy: 'map',
|
|
27
|
+
ariaDescribedBy: 'choose location',
|
|
28
|
+
focusTrapped: true
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
super.ngOnInit();
|
|
33
|
+
this._setDefaultLatAndLong(this.latitudeUi?.value, this.longitudeUi?.value);
|
|
34
|
+
}
|
|
35
|
+
onFullscreen() {
|
|
36
|
+
this.fullscreen = true;
|
|
37
|
+
this.openDialog(this.dialogTemplate);
|
|
38
|
+
}
|
|
39
|
+
onExistFullscreen() {
|
|
40
|
+
this.fullscreen = false;
|
|
41
|
+
this._cdr.detectChanges();
|
|
42
|
+
}
|
|
43
|
+
onOpenChange(isOpen) {
|
|
44
|
+
this.fullscreen = isOpen;
|
|
45
|
+
}
|
|
46
|
+
onErrorNavigatorLocation(err) {
|
|
47
|
+
const err2 = `خطا در دریافت موقعیت مکانی جاری. (${err.message})`;
|
|
48
|
+
BarsaApi.Bw.Toast.Error(err2);
|
|
49
|
+
}
|
|
50
|
+
onMove(e) {
|
|
51
|
+
this._movePos = { latitude: e.latlng.lat, longitude: e.latlng.lng };
|
|
52
|
+
}
|
|
53
|
+
onMoveEnd(e) {
|
|
54
|
+
this._handleMarkerChange(this._movePos);
|
|
55
|
+
}
|
|
56
|
+
onMarkerChange(e) {
|
|
57
|
+
this._handleMarkerChange(e);
|
|
58
|
+
}
|
|
59
|
+
_handleMarkerChange(e) {
|
|
60
|
+
const { latitude, longitude } = e;
|
|
61
|
+
this.latitudeUi.value = latitude;
|
|
62
|
+
this.longitudeUi.value = longitude;
|
|
63
|
+
this._valueChanged();
|
|
64
|
+
}
|
|
65
|
+
_setDefaultLatAndLong(lat, lng) {
|
|
66
|
+
if (lat && lng) {
|
|
67
|
+
this.latValue = lat;
|
|
68
|
+
this.lngValue = lng;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
_titleChanged() {
|
|
72
|
+
this._setDefaultLatAndLong(this.latitudeUi?.value, this.longitudeUi?.value);
|
|
73
|
+
}
|
|
74
|
+
_valueChanged() {
|
|
75
|
+
this.latitudeUi.fireEvent('change', this.latitudeUi, this.latitudeUi.value);
|
|
76
|
+
this.longitudeUi.fireEvent('change', this.longitudeUi, this.longitudeUi.value);
|
|
77
|
+
}
|
|
78
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeographicLocationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
79
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: GeographicLocationComponent, selector: "bdc-geographic-location", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["confirmationDialog"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (customFormPanelUi) {\r\n<bnrc-form style=\"display: none\" *untilInView=\"el\" [customFormPanelUi]=\"customFormPanelUi\"></bnrc-form>\r\n} @if (!fullscreen) {\r\n<ng-container *ngTemplateOutlet=\"map; context: { inDialog: false }\"></ng-container>\r\n}\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #confirmationDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Map' | bbbTranslate }}</h1>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <ng-container *ngTemplateOutlet=\"map; context: { inDialog: true, dialog: dialog }\"></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n\r\n<ng-template #map let-inDialog=\"inDialog\" let-dialog=\"dialog\">\r\n <bdc-barsa-geographic-location\r\n [style.height]=\"inDialog ? 'height: 100% !important' : null\"\r\n [defaultLocation]=\"[35.7568, 51.412]\"\r\n [latitude]=\"latValue\"\r\n [longitude]=\"lngValue\"\r\n [showExitFullscreenButton]=\"true\"\r\n [showLocationButton]=\"customFieldInfo.ShowLocationButton\"\r\n [setAutomaticLocation]=\"customFieldInfo.GetCurrentLocation\"\r\n [disableOrReadonly]=\"(disableOrReadonly$ | async) === true\"\r\n [draggable]=\"customFieldInfo.Draggable === true\"\r\n (markerChange)=\"onMarkerChange($event)\"\r\n (move)=\"onMove($event)\"\r\n (errorEvent)=\"onErrorNavigatorLocation($event)\"\r\n (moveEnd)=\"onMoveEnd($event)\"\r\n (exitFullscreen)=\"onExistFullscreen(); dialog && dialog.close('Continue')\"\r\n ></bdc-barsa-geographic-location>\r\n</ng-template>\r\n", styles: [":host{display:block;position:relative}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "directive", type: i2.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "component", type: i3.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i3.DialogBodyComponent, selector: "fd-dialog-body", inputs: ["disablePaddings"] }, { kind: "component", type: i3.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i4.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i5.BarsaGeographicLocationComponent, selector: "bdc-barsa-geographic-location", inputs: ["disableOrReadonly", "setAutomaticLocation", "showLocationButton", "showFullscreenButton", "showExitFullscreenButton", "draggable", "defaultLocation", "latitude", "longitude"], outputs: ["move", "moveEnd", "fullscreen", "exitFullscreen", "errorEvent", "markerChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
80
|
+
}
|
|
81
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeographicLocationComponent, decorators: [{
|
|
82
|
+
type: Component,
|
|
83
|
+
args: [{ selector: 'bdc-geographic-location', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (customFormPanelUi) {\r\n<bnrc-form style=\"display: none\" *untilInView=\"el\" [customFormPanelUi]=\"customFormPanelUi\"></bnrc-form>\r\n} @if (!fullscreen) {\r\n<ng-container *ngTemplateOutlet=\"map; context: { inDialog: false }\"></ng-container>\r\n}\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #confirmationDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Map' | bbbTranslate }}</h1>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <ng-container *ngTemplateOutlet=\"map; context: { inDialog: true, dialog: dialog }\"></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n\r\n<ng-template #map let-inDialog=\"inDialog\" let-dialog=\"dialog\">\r\n <bdc-barsa-geographic-location\r\n [style.height]=\"inDialog ? 'height: 100% !important' : null\"\r\n [defaultLocation]=\"[35.7568, 51.412]\"\r\n [latitude]=\"latValue\"\r\n [longitude]=\"lngValue\"\r\n [showExitFullscreenButton]=\"true\"\r\n [showLocationButton]=\"customFieldInfo.ShowLocationButton\"\r\n [setAutomaticLocation]=\"customFieldInfo.GetCurrentLocation\"\r\n [disableOrReadonly]=\"(disableOrReadonly$ | async) === true\"\r\n [draggable]=\"customFieldInfo.Draggable === true\"\r\n (markerChange)=\"onMarkerChange($event)\"\r\n (move)=\"onMove($event)\"\r\n (errorEvent)=\"onErrorNavigatorLocation($event)\"\r\n (moveEnd)=\"onMoveEnd($event)\"\r\n (exitFullscreen)=\"onExistFullscreen(); dialog && dialog.close('Continue')\"\r\n ></bdc-barsa-geographic-location>\r\n</ng-template>\r\n", styles: [":host{display:block;position:relative}\n"] }]
|
|
84
|
+
}], propDecorators: { dialogTemplate: [{
|
|
85
|
+
type: ViewChild,
|
|
86
|
+
args: ['confirmationDialog']
|
|
87
|
+
}] } });
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvZ3JhcGhpYy1sb2NhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9nZW9ncmFwaGljLWxvY2F0aW9uL2dlb2dyYXBoaWMtbG9jYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvZ2VvZ3JhcGhpYy1sb2NhdGlvbi9nZW9ncmFwaGljLWxvY2F0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQXVCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBUzFELE1BQU0sT0FBTywyQkFBNEIsU0FBUSwwQkFBMEI7SUFQM0U7O1FBU0ksZUFBVSxHQUFHLEtBQUssQ0FBQztLQXNFdEI7SUFoRUcsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQXdCO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM3QixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE1BQU0sRUFBRSxJQUFJO1lBQ1osY0FBYyxFQUFFLEtBQUs7WUFDckIsZUFBZSxFQUFFLGlCQUFpQjtZQUNsQyxZ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Z2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFyc2FBcGkgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IFVpTW9JbmZvU3ViRm9ybVVpQ29tcG9uZW50IH0gZnJvbSAnYmFyc2Etc2FwLXVpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiZGMtZ2VvZ3JhcGhpYy1sb2NhdGlvbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2VvZ3JhcGhpYy1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9nZW9ncmFwaGljLWxvY2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHZW9ncmFwaGljTG9jYXRpb25Db21wb25lbnQgZXh0ZW5kcyBVaU1vSW5mb1N1YkZvcm1VaUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdjb25maXJtYXRpb25EaWFsb2cnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIGZ1bGxzY3JlZW4gPSBmYWxzZTtcclxuXHJcbiAgICBsYXRWYWx1ZTtcclxuICAgIGxuZ1ZhbHVlO1xyXG4gICAgY3VzdG9tRm9ybVBhbmVsVWk6IGFueTtcclxuICAgIHByaXZhdGUgX21vdmVQb3M6IHsgbGF0aXR1ZGU6IGFueTsgbG9uZ2l0dWRlOiBhbnkgfTtcclxuICAgIGdldCBsYXRpdHVkZVVpKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRm9ybVBhbmVsVWkuX2RpY3RGaWVsZFVpLkxhdGl0dWRlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGxvbmdpdHVkZVVpKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRm9ybVBhbmVsVWkuX2RpY3RGaWVsZFVpLkxvbmdpdHVkZTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRGlhbG9nKGRpYWxvZzogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2csIHtcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIGZ1bGxTY3JlZW46IHRydWUsXHJcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtYXAnLFxyXG4gICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnk6ICdjaG9vc2UgbG9jYXRpb24nLFxyXG4gICAgICAgICAgICBmb2N1c1RyYXBwZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdExhdEFuZExvbmcodGhpcy5sYXRpdHVkZVVpPy52YWx1ZSwgdGhpcy5sb25naXR1ZGVVaT8udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25GdWxsc2NyZWVuKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZnVsbHNjcmVlbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuZGlhbG9nVGVtcGxhdGUpO1xyXG4gICAgfVxyXG4gICAgb25FeGlzdEZ1bGxzY3JlZW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mdWxsc2NyZWVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIG9uT3BlbkNoYW5nZShpc09wZW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZ1bGxzY3JlZW4gPSBpc09wZW47XHJcbiAgICB9XHJcbiAgICBvbkVycm9yTmF2aWdhdG9yTG9jYXRpb24oZXJyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZXJyMiA9IGDYrti32Kcg2K/YsSDYr9ix24zYp9mB2Kog2YXZiNmC2LnbjNiqINmF2qnYp9mG24wg2KzYp9ix24wuICgke2Vyci5tZXNzYWdlfSlgO1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlRvYXN0LkVycm9yKGVycjIpO1xyXG4gICAgfVxyXG4gICAgb25Nb3ZlKGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9tb3ZlUG9zID0geyBsYXRpdHVkZTogZS5sYXRsbmcubGF0LCBsb25naXR1ZGU6IGUubGF0bG5nLmxuZyB9O1xyXG4gICAgfVxyXG4gICAgb25Nb3ZlRW5kKGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVNYXJrZXJDaGFuZ2UodGhpcy5fbW92ZVBvcyk7XHJcbiAgICB9XHJcbiAgICBvbk1hcmtlckNoYW5nZShlOiB7IGxhdGl0dWRlOyBsb25naXR1ZGUgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hhbmRsZU1hcmtlckNoYW5nZShlKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaGFuZGxlTWFya2VyQ2hhbmdlKGU6IHsgbGF0aXR1ZGU7IGxvbmdpdHVkZSB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBsYXRpdHVkZSwgbG9uZ2l0dWRlIH0gPSBlO1xyXG4gICAgICAgIHRoaXMubGF0aXR1ZGVVaS52YWx1ZSA9IGxhdGl0dWRlO1xyXG4gICAgICAgIHRoaXMubG9uZ2l0dWRlVWkudmFsdWUgPSBsb25naXR1ZGU7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3NldERlZmF1bHRMYXRBbmRMb25nKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmIChsYXQgJiYgbG5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF0VmFsdWUgPSBsYXQ7XHJcbiAgICAgICAgICAgIHRoaXMubG5nVmFsdWUgPSBsbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF90aXRsZUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdExhdEFuZExvbmcodGhpcy5sYXRpdHVkZVVpPy52YWx1ZSwgdGhpcy5sb25naXR1ZGVVaT8udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF92YWx1ZUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sYXRpdHVkZVVpLmZpcmVFdmVudCgnY2hhbmdlJywgdGhpcy5sYXRpdHVkZVVpLCB0aGlzLmxhdGl0dWRlVWkudmFsdWUpO1xyXG4gICAgICAgIHRoaXMubG9uZ2l0dWRlVWkuZmlyZUV2ZW50KCdjaGFuZ2UnLCB0aGlzLmxvbmdpdHVkZVVpLCB0aGlzLmxvbmdpdHVkZVVpLnZhbHVlKTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYgKGN1c3RvbUZvcm1QYW5lbFVpKSB7XHJcbjxibnJjLWZvcm0gc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgKnVudGlsSW5WaWV3PVwiZWxcIiBbY3VzdG9tRm9ybVBhbmVsVWldPVwiY3VzdG9tRm9ybVBhbmVsVWlcIj48L2JucmMtZm9ybT5cclxufSBAaWYgKCFmdWxsc2NyZWVuKSB7XHJcbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXA7IGNvbnRleHQ6IHsgaW5EaWFsb2c6IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cclxufVxyXG5cclxuPG5nLXRlbXBsYXRlIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNjb25maXJtYXRpb25EaWFsb2c+XHJcbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIj5cclxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cclxuICAgICAgICAgICAgPGgxIGlkPVwiZmQtZGlhbG9nLWhlYWRlci0xMFwiIGZkLXRpdGxlPnt7ICdNYXAnIHwgYmJiVHJhbnNsYXRlIH19PC9oMT5cclxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XHJcbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWFwOyBjb250ZXh0OiB7IGluRGlhbG9nOiB0cnVlLCBkaWFsb2c6IGRpYWxvZyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cclxuICAgIDwvZmQtZGlhbG9nPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNtYXAgbGV0LWluRGlhbG9nPVwiaW5EaWFsb2dcIiBsZXQtZGlhbG9nPVwiZGlhbG9nXCI+XHJcbiAgICA8YmRjLWJhcnNhLWdlb2dyYXBoaWMtbG9jYXRpb25cclxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImluRGlhbG9nID8gJ2hlaWdodDogMTAwJSAhaW1wb3J0YW50JyA6IG51bGxcIlxyXG4gICAgICAgIFtkZWZhdWx0TG9jYXRpb25dPVwiWzM1Ljc1NjgsIDUxLjQxMl1cIlxyXG4gICAgICAgIFtsYXRpdHVkZV09XCJsYXRWYWx1ZVwiXHJcbiAgICAgICAgW2xvbmdpdHVkZV09XCJsbmdWYWx1ZVwiXHJcbiAgICAgICAgW3Nob3dFeGl0RnVsbHNjcmVlbkJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICBbc2hvd0xvY2F0aW9uQnV0dG9uXT1cImN1c3RvbUZpZWxkSW5mby5TaG93TG9jYXRpb25CdXR0b25cIlxyXG4gICAgICAgIFtzZXRBdXRvbWF0aWNMb2NhdGlvbl09XCJjdXN0b21GaWVsZEluZm8uR2V0Q3VycmVudExvY2F0aW9uXCJcclxuICAgICAgICBbZGlzYWJsZU9yUmVhZG9ubHldPVwiKGRpc2FibGVPclJlYWRvbmx5JCB8IGFzeW5jKSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgW2RyYWdnYWJsZV09XCJjdXN0b21GaWVsZEluZm8uRHJhZ2dhYmxlID09PSB0cnVlXCJcclxuICAgICAgICAobWFya2VyQ2hhbmdlKT1cIm9uTWFya2VyQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChtb3ZlKT1cIm9uTW92ZSgkZXZlbnQpXCJcclxuICAgICAgICAoZXJyb3JFdmVudCk9XCJvbkVycm9yTmF2aWdhdG9yTG9jYXRpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgKG1vdmVFbmQpPVwib25Nb3ZlRW5kKCRldmVudClcIlxyXG4gICAgICAgIChleGl0RnVsbHNjcmVlbik9XCJvbkV4aXN0RnVsbHNjcmVlbigpOyBkaWFsb2cgJiYgZGlhbG9nLmNsb3NlKCdDb250aW51ZScpXCJcclxuICAgID48L2JkYy1iYXJzYS1nZW9ncmFwaGljLWxvY2F0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding, HostListener } from '@angular/core';
|
|
2
|
+
import { map, takeUntil } from 'rxjs/operators';
|
|
3
|
+
import { BarsaApi, FormBaseComponent, FormPanelService, getDeviceIsMobile } from 'barsa-novin-ray-core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "barsa-sap-ui";
|
|
6
|
+
import * as i2 from "@fundamental-ngx/core/dynamic-side-content";
|
|
7
|
+
import * as i3 from "@fundamental-ngx/core/layout-grid";
|
|
8
|
+
import * as i4 from "@angular/common";
|
|
9
|
+
import * as i5 from "barsa-novin-ray-core";
|
|
10
|
+
export class LoginFormComponent extends FormBaseComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this._desktopmode = !getDeviceIsMobile();
|
|
14
|
+
this.onKeyEnter = (_) => {
|
|
15
|
+
const layoutItem = this._controlUiPipe.transform(' ورود', this.layout94);
|
|
16
|
+
if (layoutItem) {
|
|
17
|
+
layoutItem.FieldUi.fireEvent('click', layoutItem.FieldUi);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
this._activatedRoute.queryParams.pipe(takeUntil(this._onDestroy$)).subscribe((params) => {
|
|
23
|
+
BarsaApi.Bw.SetCultureByDisplayName(params.culture);
|
|
24
|
+
});
|
|
25
|
+
const root = document.documentElement;
|
|
26
|
+
root.style.setProperty('--absolute-page-top', '0px');
|
|
27
|
+
super.ngOnInit();
|
|
28
|
+
this.layout94$.subscribe((layout94) => {
|
|
29
|
+
this.layout94 = layout94;
|
|
30
|
+
});
|
|
31
|
+
this.size$ = this._portalService.deviceSize$.pipe(map((deviceSize) => {
|
|
32
|
+
switch (deviceSize) {
|
|
33
|
+
case 's':
|
|
34
|
+
return 'sm';
|
|
35
|
+
case 'm':
|
|
36
|
+
return 'md';
|
|
37
|
+
default:
|
|
38
|
+
return 'xl';
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
43
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LoginFormComponent, selector: "bdc-login-form", host: { listeners: { "keydown.enter": "onKeyEnter($event)" }, properties: { "class.desktopmode": "this._desktopmode" } }, providers: [FormPanelService], usesInheritance: true, ngImport: i0, template: "@if (mo$ | async; as mo) { @if (mo.IsLogging) {\r\n<bsu-mask></bsu-mask>\r\n} @if ((size$ | async) === 'sm') {\r\n<fd-layout-grid [class.mobile]=\"isMobile\">\r\n <div [fdLayoutGridCol]=\"1\"></div>\r\n <div [fdLayoutGridCol]=\"10\">\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94$ | async\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n [class.desktopMode]=\"!(isMobile === true)\"\r\n ></bsu-ly-layout-container-of-root>\r\n </div>\r\n <div [fdLayoutGridCol]=\"1\"></div>\r\n</fd-layout-grid>\r\n} @else {\r\n<fd-dynamic-side-content [size]=\"(size$ | async)!!\">\r\n <fd-dynamic-side-content-side>\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94$ | async\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n </fd-dynamic-side-content-side>\r\n <fd-dynamic-side-content-main>\r\n <!-- <ng-container *ngIf=\"'\u0639\u06A9\u0633 \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647' | controlUi: layout94 as layoutConfig\">\r\n <bsu-layout-control\r\n [caption]=\"'\u0639\u06A9\u0633 \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647'\"\r\n [config]=\"layoutConfig\"\r\n [showLabel]=\"false\"\r\n [inlineEdit]=\"true\"\r\n ></bsu-layout-control>\r\n </ng-container> -->\r\n @if ('\u0639\u06A9\u0633 \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647' | controlUi: layout94; as layoutConfig) {\r\n <div\r\n id=\"bgLogin\"\r\n [style.backgroundImage]=\"\r\n 'url(' +\r\n (mo.Background?.FileId | picFieldSrc: 'PictureFileInfo':null:layoutConfig.FieldUi.Setting.FieldDefId) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n </fd-dynamic-side-content-main>\r\n</fd-dynamic-side-content>\r\n} }\r\n", styles: ["@charset \"UTF-8\";:host{display:block;background-color:#fff}:host ::ng-deep bsu-ly-simple-label{text-align:center}:host ::ng-deep bsu-ly-simple-label:nth-of-type(1){margin-top:15px}:host ::ng-deep bsu-ui-picture-file{text-align:center}:host ::ng-deep .wrap-content>.container-field{max-width:100%!important}fd-dynamic-side-content{min-height:100vh}fd-dynamic-side-content-side{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}bsu-ly-layout-container-of-root{padding:0 1rem;box-sizing:border-box;display:flex;align-items:center;height:100%}#bgLogin{width:100%;height:100%;background-position:center;background-size:cover;background-repeat:no-repeat}@media (max-width: 599px){:host ::ng-deep bsu-layout-control{min-width:auto!important}:host ::ng-deep bsu-ly-layout-container-of-root{padding:0}}@media (max-height: 670px){:host.desktopmode bsu-ly-layout-container-of-root{padding:0}:host.desktopmode bsu-ly-layout-container-of-root ::ng-deep bsu-ly-empty-space{display:none}:host.desktopmode bsu-ly-layout-container-of-root ::ng-deep bsu-layout-control[caption=\\644\\648\\6af\\648]{display:none}}fd-layout-grid.mobile{overflow:auto;height:100vh}\n"], dependencies: [{ kind: "component", type: i1.LyLayoutContainerOfRootComponent, selector: "bsu-ly-layout-container-of-root" }, { kind: "component", type: i1.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i2.DynamicSideContentComponent, selector: "fd-dynamic-side-content", inputs: ["position", "size", "id"] }, { kind: "component", type: i2.DynamicSideContentSideComponent, selector: "fd-dynamic-side-content-side", inputs: ["id"] }, { kind: "component", type: i2.DynamicSideContentMainComponent, selector: "fd-dynamic-side-content-main", inputs: ["id"] }, { kind: "component", type: i3.LayoutGridComponent, selector: "fd-layout-grid, [fdLayoutGrid]", inputs: ["class", "noGap", "noHorizontalGap", "noVerticalGap"] }, { kind: "directive", type: i3.LayoutGridColDirective, selector: "[fd-layout-grid-col], [fdLayoutGridCol]", inputs: ["fdLayoutGridCol", "colGrow", "colMd", "colLg", "colXl", "colOffset", "colOffsetMd", "colOffsetLg", "colOffsetXl", "class"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i5.ControlUiPipe, name: "controlUi" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginFormComponent, decorators: [{
|
|
46
|
+
type: Component,
|
|
47
|
+
args: [{ selector: 'bdc-login-form', changeDetection: ChangeDetectionStrategy.OnPush, providers: [FormPanelService], standalone: false, template: "@if (mo$ | async; as mo) { @if (mo.IsLogging) {\r\n<bsu-mask></bsu-mask>\r\n} @if ((size$ | async) === 'sm') {\r\n<fd-layout-grid [class.mobile]=\"isMobile\">\r\n <div [fdLayoutGridCol]=\"1\"></div>\r\n <div [fdLayoutGridCol]=\"10\">\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94$ | async\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n [class.desktopMode]=\"!(isMobile === true)\"\r\n ></bsu-ly-layout-container-of-root>\r\n </div>\r\n <div [fdLayoutGridCol]=\"1\"></div>\r\n</fd-layout-grid>\r\n} @else {\r\n<fd-dynamic-side-content [size]=\"(size$ | async)!!\">\r\n <fd-dynamic-side-content-side>\r\n <bsu-ly-layout-container-of-root\r\n [config]=\"layout94$ | async\"\r\n [isPanel]=\"false\"\r\n [isRoot]=\"true\"\r\n ></bsu-ly-layout-container-of-root>\r\n </fd-dynamic-side-content-side>\r\n <fd-dynamic-side-content-main>\r\n <!-- <ng-container *ngIf=\"'\u0639\u06A9\u0633 \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647' | controlUi: layout94 as layoutConfig\">\r\n <bsu-layout-control\r\n [caption]=\"'\u0639\u06A9\u0633 \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647'\"\r\n [config]=\"layoutConfig\"\r\n [showLabel]=\"false\"\r\n [inlineEdit]=\"true\"\r\n ></bsu-layout-control>\r\n </ng-container> -->\r\n @if ('\u0639\u06A9\u0633 \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647' | controlUi: layout94; as layoutConfig) {\r\n <div\r\n id=\"bgLogin\"\r\n [style.backgroundImage]=\"\r\n 'url(' +\r\n (mo.Background?.FileId | picFieldSrc: 'PictureFileInfo':null:layoutConfig.FieldUi.Setting.FieldDefId) +\r\n ')'\r\n \"\r\n ></div>\r\n }\r\n </fd-dynamic-side-content-main>\r\n</fd-dynamic-side-content>\r\n} }\r\n", styles: ["@charset \"UTF-8\";:host{display:block;background-color:#fff}:host ::ng-deep bsu-ly-simple-label{text-align:center}:host ::ng-deep bsu-ly-simple-label:nth-of-type(1){margin-top:15px}:host ::ng-deep bsu-ui-picture-file{text-align:center}:host ::ng-deep .wrap-content>.container-field{max-width:100%!important}fd-dynamic-side-content{min-height:100vh}fd-dynamic-side-content-side{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}bsu-ly-layout-container-of-root{padding:0 1rem;box-sizing:border-box;display:flex;align-items:center;height:100%}#bgLogin{width:100%;height:100%;background-position:center;background-size:cover;background-repeat:no-repeat}@media (max-width: 599px){:host ::ng-deep bsu-layout-control{min-width:auto!important}:host ::ng-deep bsu-ly-layout-container-of-root{padding:0}}@media (max-height: 670px){:host.desktopmode bsu-ly-layout-container-of-root{padding:0}:host.desktopmode bsu-ly-layout-container-of-root ::ng-deep bsu-ly-empty-space{display:none}:host.desktopmode bsu-ly-layout-container-of-root ::ng-deep bsu-layout-control[caption=\\644\\648\\6af\\648]{display:none}}fd-layout-grid.mobile{overflow:auto;height:100vh}\n"] }]
|
|
48
|
+
}], propDecorators: { _desktopmode: [{
|
|
49
|
+
type: HostBinding,
|
|
50
|
+
args: ['class.desktopmode']
|
|
51
|
+
}], onKeyEnter: [{
|
|
52
|
+
type: HostListener,
|
|
53
|
+
args: ['keydown.enter', ['$event']]
|
|
54
|
+
}] } });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9sb2dpbi1mb3JtL2xvZ2luLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvbG9naW4tZm9ybS9sb2dpbi1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQVV4RyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBUnpEOztRQVNzQyxpQkFBWSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV0RSxlQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQVEsRUFBRTtZQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pFLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0tBMEJMO0lBdkJHLFFBQVE7UUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BGLFFBQVEsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyRCxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUNmLFFBQVEsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssR0FBRztvQkFDSixPQUFPLElBQUksQ0FBQztnQkFDaEIsS0FBSyxHQUFHO29CQUNKLE9BQU8sSUFBSSxDQUFDO2dCQUNoQjtvQkFDSSxPQUFPLElBQUksQ0FBQztZQUNwQixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7K0dBakNRLGtCQUFrQjttR0FBbEIsa0JBQWtCLG1LQUhoQixDQUFDLGdCQUFnQixDQUFDLGlEQ1ZqQyx5NERBOENBOzs0RkRqQ2Esa0JBQWtCO2tCQVI5QixTQUFTOytCQUNJLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsZ0JBQWdCLENBQUMsY0FDakIsS0FBSzs4QkFHaUIsWUFBWTtzQkFBN0MsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBRWhDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFyc2FBcGksIEZvcm1CYXNlQ29tcG9uZW50LCBGb3JtUGFuZWxTZXJ2aWNlLCBnZXREZXZpY2VJc01vYmlsZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiZGMtbG9naW4tZm9ybScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbG9naW4tZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9sb2dpbi1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHByb3ZpZGVyczogW0Zvcm1QYW5lbFNlcnZpY2VdLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2luRm9ybUNvbXBvbmVudCBleHRlbmRzIEZvcm1CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGVza3RvcG1vZGUnKSBfZGVza3RvcG1vZGUgPSAhZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKVxyXG4gICAgb25LZXlFbnRlciA9IChfKTogdm9pZCA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0SXRlbSA9IHRoaXMuX2NvbnRyb2xVaVBpcGUudHJhbnNmb3JtKCcg2YjYsdmI2K8nLCB0aGlzLmxheW91dDk0KTtcclxuICAgICAgICBpZiAobGF5b3V0SXRlbSkge1xyXG4gICAgICAgICAgICBsYXlvdXRJdGVtLkZpZWxkVWkuZmlyZUV2ZW50KCdjbGljaycsIGxheW91dEl0ZW0uRmllbGRVaSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHNpemUkOiBPYnNlcnZhYmxlPCd4bCcgfCAnbWQnIHwgJ3NtJz47XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgIEJhcnNhQXBpLkJ3LlNldEN1bHR1cmVCeURpc3BsYXlOYW1lKHBhcmFtcy5jdWx0dXJlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIHJvb3Quc3R5bGUuc2V0UHJvcGVydHkoJy0tYWJzb2x1dGUtcGFnZS10b3AnLCAnMHB4Jyk7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmxheW91dDk0JC5zdWJzY3JpYmUoKGxheW91dDk0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0OTQgPSBsYXlvdXQ5NDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNpemUkID0gdGhpcy5fcG9ydGFsU2VydmljZS5kZXZpY2VTaXplJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKGRldmljZVNpemUpID0+IHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZGV2aWNlU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NtJztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlICdtJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd4bCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYgKG1vJCB8IGFzeW5jOyBhcyBtbykgeyBAaWYgKG1vLklzTG9nZ2luZykge1xyXG48YnN1LW1hc2s+PC9ic3UtbWFzaz5cclxufSBAaWYgKChzaXplJCB8IGFzeW5jKSA9PT0gJ3NtJykge1xyXG48ZmQtbGF5b3V0LWdyaWQgW2NsYXNzLm1vYmlsZV09XCJpc01vYmlsZVwiPlxyXG4gICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjFcIj48L2Rpdj5cclxuICAgIDxkaXYgW2ZkTGF5b3V0R3JpZENvbF09XCIxMFwiPlxyXG4gICAgICAgIDxic3UtbHktbGF5b3V0LWNvbnRhaW5lci1vZi1yb290XHJcbiAgICAgICAgICAgIFtjb25maWddPVwibGF5b3V0OTQkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICBbaXNQYW5lbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtpc1Jvb3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5kZXNrdG9wTW9kZV09XCIhKGlzTW9iaWxlID09PSB0cnVlKVwiXHJcbiAgICAgICAgPjwvYnN1LWx5LWxheW91dC1jb250YWluZXItb2Ytcm9vdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBbZmRMYXlvdXRHcmlkQ29sXT1cIjFcIj48L2Rpdj5cclxuPC9mZC1sYXlvdXQtZ3JpZD5cclxufSBAZWxzZSB7XHJcbjxmZC1keW5hbWljLXNpZGUtY29udGVudCBbc2l6ZV09XCIoc2l6ZSQgfCBhc3luYykhIVwiPlxyXG4gICAgPGZkLWR5bmFtaWMtc2lkZS1jb250ZW50LXNpZGU+XHJcbiAgICAgICAgPGJzdS1seS1sYXlvdXQtY29udGFpbmVyLW9mLXJvb3RcclxuICAgICAgICAgICAgW2NvbmZpZ109XCJsYXlvdXQ5NCQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgIFtpc1BhbmVsXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW2lzUm9vdF09XCJ0cnVlXCJcclxuICAgICAgICA+PC9ic3UtbHktbGF5b3V0LWNvbnRhaW5lci1vZi1yb290PlxyXG4gICAgPC9mZC1keW5hbWljLXNpZGUtY29udGVudC1zaWRlPlxyXG4gICAgPGZkLWR5bmFtaWMtc2lkZS1jb250ZW50LW1haW4+XHJcbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiJ9i52qnYsyDZvtizINiy2YXbjNmG2YcnIHwgY29udHJvbFVpOiBsYXlvdXQ5NCBhcyBsYXlvdXRDb25maWdcIj5cclxuICAgICAgICA8YnN1LWxheW91dC1jb250cm9sXHJcbiAgICAgICAgICBbY2FwdGlvbl09XCIn2LnaqdizINm+2LMg2LLZhduM2YbZhydcIlxyXG4gICAgICAgICAgW2NvbmZpZ109XCJsYXlvdXRDb25maWdcIlxyXG4gICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbaW5saW5lRWRpdF09XCJ0cnVlXCJcclxuICAgICAgICA+PC9ic3UtbGF5b3V0LWNvbnRyb2w+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cclxuICAgICAgICBAaWYgKCfYudqp2LMg2b7YsyDYstmF24zZhtmHJyB8IGNvbnRyb2xVaTogbGF5b3V0OTQ7IGFzIGxheW91dENvbmZpZykge1xyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgaWQ9XCJiZ0xvZ2luXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCJcclxuICAgICAgICAgICAgICAgICd1cmwoJyArXHJcbiAgICAgICAgICAgICAgICAobW8uQmFja2dyb3VuZD8uRmlsZUlkIHwgcGljRmllbGRTcmM6ICdQaWN0dXJlRmlsZUluZm8nOm51bGw6bGF5b3V0Q29uZmlnLkZpZWxkVWkuU2V0dGluZy5GaWVsZERlZklkKSArXHJcbiAgICAgICAgICAgICAgICAnKSdcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgPC9mZC1keW5hbWljLXNpZGUtY29udGVudC1tYWluPlxyXG48L2ZkLWR5bmFtaWMtc2lkZS1jb250ZW50PlxyXG59IH1cclxuIl19
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, HostBinding } from '@angular/core';
|
|
2
|
+
import { ReportBaseComponent, BarsaApi } from 'barsa-novin-ray-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "barsa-novin-ray-core";
|
|
5
|
+
import * as i2 from "@fundamental-ngx/core/button";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
7
|
+
export class LoginSocialConncetionsComponent extends ReportBaseComponent {
|
|
8
|
+
constructor(_ulvMainService, _portalService, reportValuePipe) {
|
|
9
|
+
super(_portalService, _ulvMainService);
|
|
10
|
+
this._ulvMainService = _ulvMainService;
|
|
11
|
+
this._portalService = _portalService;
|
|
12
|
+
this.reportValuePipe = reportValuePipe;
|
|
13
|
+
this.rtl = BarsaApi.LoginFormData.IsRtl;
|
|
14
|
+
}
|
|
15
|
+
onClick(mo) {
|
|
16
|
+
const provider = this.reportValuePipe.transform('Name', mo, this.allColumns, true);
|
|
17
|
+
const returnUrl = encodeURIComponent(window.location.href);
|
|
18
|
+
BarsaApi.Bw.NavigateTo(`/api/openId/signin?provider=${provider}&returnUrl=${returnUrl}`);
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginSocialConncetionsComponent, deps: [{ token: i1.UlvMainService }, { token: i1.PortalService }, { token: i1.MoReportValuePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LoginSocialConncetionsComponent, selector: "bdc-login-social-conncetions", host: { properties: { "attr.rtl": "this.rtl" } }, usesInheritance: true, ngImport: i0, template: "@for (mo of moDataList$ | async; track mo) {\r\n<button\r\n fd-button\r\n [label]=\"'Display Text' | rval: mo:allColumns\"\r\n [fdType]=\"'FdType' | rval: mo:allColumns:true\"\r\n (click)=\"onClick(mo)\"\r\n>\r\n <img\r\n style=\"max-width: 28px\"\r\n [src]=\"('Logo' | rval: mo:allColumns)?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null\"\r\n />\r\n</button>\r\n}\r\n", styles: [":host{display:flex;flex-wrap:wrap;width:100%;justify-content:stretch;margin-top:1rem;column-gap:5px;row-gap:5px}button{flex-grow:1;flex-direction:row-reverse}button img{padding:5px}fd-toolbar{width:100%}\n"], dependencies: [{ kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.MoReportValuePipe, name: "rval" }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LoginSocialConncetionsComponent, decorators: [{
|
|
24
|
+
type: Component,
|
|
25
|
+
args: [{ selector: 'bdc-login-social-conncetions', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@for (mo of moDataList$ | async; track mo) {\r\n<button\r\n fd-button\r\n [label]=\"'Display Text' | rval: mo:allColumns\"\r\n [fdType]=\"'FdType' | rval: mo:allColumns:true\"\r\n (click)=\"onClick(mo)\"\r\n>\r\n <img\r\n style=\"max-width: 28px\"\r\n [src]=\"('Logo' | rval: mo:allColumns)?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null\"\r\n />\r\n</button>\r\n}\r\n", styles: [":host{display:flex;flex-wrap:wrap;width:100%;justify-content:stretch;margin-top:1rem;column-gap:5px;row-gap:5px}button{flex-grow:1;flex-direction:row-reverse}button img{padding:5px}fd-toolbar{width:100%}\n"] }]
|
|
26
|
+
}], ctorParameters: () => [{ type: i1.UlvMainService }, { type: i1.PortalService }, { type: i1.MoReportValuePipe }], propDecorators: { rtl: [{
|
|
27
|
+
type: HostBinding,
|
|
28
|
+
args: ['attr.rtl']
|
|
29
|
+
}] } });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tc29jaWFsLWNvbm5jZXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWRldmVsb3AtY29tcG9uZW50cy9zcmMvbGliL2xvZ2luLXNvY2lhbC1jb25uY2V0aW9ucy9sb2dpbi1zb2NpYWwtY29ubmNldGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvbG9naW4tc29jaWFsLWNvbm5jZXRpb25zL2xvZ2luLXNvY2lhbC1jb25uY2V0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRixPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLFFBQVEsRUFLWCxNQUFNLHNCQUFzQixDQUFDOzs7OztBQVE5QixNQUFNLE9BQU8sK0JBQWdDLFNBQVEsbUJBQW1CO0lBRXBFLFlBQ2MsZUFBK0IsRUFDL0IsY0FBNkIsRUFDL0IsZUFBa0M7UUFFMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUo3QixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDL0Isb0JBQWUsR0FBZixlQUFlLENBQW1CO1FBSnJCLFFBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQU81RCxDQUFDO0lBQ0QsT0FBTyxDQUFDLEVBQXVCO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVuRixNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNELFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLCtCQUErQixRQUFRLGNBQWMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM3RixDQUFDOytHQWRRLCtCQUErQjttR0FBL0IsK0JBQStCLDZJQ2pCNUMsd1pBYUE7OzRGRElhLCtCQUErQjtrQkFQM0MsU0FBUzsrQkFDSSw4QkFBOEIsbUJBR3ZCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSzsrSUFHUSxHQUFHO3NCQUEzQixXQUFXO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIFJlcG9ydEJhc2VDb21wb25lbnQsXHJcbiAgICBCYXJzYUFwaSxcclxuICAgIFVsdk1haW5TZXJ2aWNlLFxyXG4gICAgTW9SZXBvcnRWYWx1ZVBpcGUsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUG9ydGFsU2VydmljZVxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1sb2dpbi1zb2NpYWwtY29ubmNldGlvbnMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLXNvY2lhbC1jb25uY2V0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9sb2dpbi1zb2NpYWwtY29ubmNldGlvbnMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2luU29jaWFsQ29ubmNldGlvbnNDb21wb25lbnQgZXh0ZW5kcyBSZXBvcnRCYXNlQ29tcG9uZW50IHtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5ydGwnKSBydGwgPSBCYXJzYUFwaS5Mb2dpbkZvcm1EYXRhLklzUnRsO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIF91bHZNYWluU2VydmljZTogVWx2TWFpblNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9wb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVwb3J0VmFsdWVQaXBlOiBNb1JlcG9ydFZhbHVlUGlwZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX3BvcnRhbFNlcnZpY2UsIF91bHZNYWluU2VydmljZSk7XHJcbiAgICB9XHJcbiAgICBvbkNsaWNrKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnJlcG9ydFZhbHVlUGlwZS50cmFuc2Zvcm0oJ05hbWUnLCBtbywgdGhpcy5hbGxDb2x1bW5zLCB0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmV0dXJuVXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICBCYXJzYUFwaS5Cdy5OYXZpZ2F0ZVRvKGAvYXBpL29wZW5JZC9zaWduaW4/cHJvdmlkZXI9JHtwcm92aWRlcn0mcmV0dXJuVXJsPSR7cmV0dXJuVXJsfWApO1xyXG4gICAgfVxyXG59XHJcbiIsIkBmb3IgKG1vIG9mIG1vRGF0YUxpc3QkIHwgYXN5bmM7IHRyYWNrIG1vKSB7XHJcbjxidXR0b25cclxuICAgIGZkLWJ1dHRvblxyXG4gICAgW2xhYmVsXT1cIidEaXNwbGF5IFRleHQnIHwgcnZhbDogbW86YWxsQ29sdW1uc1wiXHJcbiAgICBbZmRUeXBlXT1cIidGZFR5cGUnIHwgcnZhbDogbW86YWxsQ29sdW1uczp0cnVlXCJcclxuICAgIChjbGljayk9XCJvbkNsaWNrKG1vKVwiXHJcbj5cclxuICAgIDxpbWdcclxuICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMjhweFwiXHJcbiAgICAgICAgW3NyY109XCIoJ0xvZ28nIHwgcnZhbDogbW86YWxsQ29sdW1ucyk/LkZpbGVJZCB8IHBpY0ZpZWxkU3JjOiAnR2V0UGljdHVyZUZyb21GaWxlSW5mbyc6bnVsbFwiXHJcbiAgICAvPlxyXG48L2J1dHRvbj5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { FormPropsBaseComponent } from 'barsa-novin-ray-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "barsa-sap-ui";
|
|
5
|
+
import * as i2 from "@fundamental-ngx/core/card";
|
|
6
|
+
export class MasterDetailCardFormComponent extends FormPropsBaseComponent {
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
super.ngOnInit();
|
|
9
|
+
}
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MasterDetailCardFormComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MasterDetailCardFormComponent, selector: "bdc-master-detail-card-form", usesInheritance: true, ngImport: i0, template: "<fd-card class=\"master-tab\">\r\n <bsu-ly-tab-page [config]=\"modernTabs[0]\"></bsu-ly-tab-page>\r\n</fd-card>\r\n<fd-card class=\"details-tab\">\r\n <bsu-ly-tab-page [config]=\"modernTabs[1]\"></bsu-ly-tab-page>\r\n</fd-card>\r\n", styles: [":host{display:flex;width:100%;height:100%;column-gap:.525rem}fd-card.master-tab,fd-card.details-tab{height:100%}.master-tab{max-width:400px}.details-tab{width:100%}\n"], dependencies: [{ kind: "component", type: i1.LyTabPageComponent, selector: "bsu-ly-tab-page", inputs: ["renderItems", "tablist"] }, { kind: "component", type: i2.CardComponent, selector: "fd-card", inputs: ["badge", "badgeIcon", "badgeColor", "badgeColorSecondary", "badgeStatus", "badgeAriaLabel", "secondBadge", "secondBadgeIcon", "secondBadgeColor", "secondBadgeColorSecondary", "secondBadgeStatus", "secondBadgeAriaLabel", "isLoading", "cardType", "id", "ariaRoledescription", "ariaDescription", "ariaLabel", "role", "interactive", "selected", "ariaPosinset", "ariaSetsize"], outputs: ["ariaPosinsetChange", "ariaSetsizeChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MasterDetailCardFormComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'bdc-master-detail-card-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-card class=\"master-tab\">\r\n <bsu-ly-tab-page [config]=\"modernTabs[0]\"></bsu-ly-tab-page>\r\n</fd-card>\r\n<fd-card class=\"details-tab\">\r\n <bsu-ly-tab-page [config]=\"modernTabs[1]\"></bsu-ly-tab-page>\r\n</fd-card>\r\n", styles: [":host{display:flex;width:100%;height:100%;column-gap:.525rem}fd-card.master-tab,fd-card.details-tab{height:100%}.master-tab{max-width:400px}.details-tab{width:100%}\n"] }]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzdGVyLWRldGFpbC1jYXJkLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvbWFzdGVyLWRldGFpbC1jYXJkLWZvcm0vbWFzdGVyLWRldGFpbC1jYXJkLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvbWFzdGVyLWRldGFpbC1jYXJkLWZvcm0vbWFzdGVyLWRldGFpbC1jYXJkLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQVM5RCxNQUFNLE9BQU8sNkJBQThCLFNBQVEsc0JBQXNCO0lBQ3JFLFFBQVE7UUFDSixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckIsQ0FBQzsrR0FIUSw2QkFBNkI7bUdBQTdCLDZCQUE2QiwwRkNWMUMsK09BTUE7OzRGRElhLDZCQUE2QjtrQkFQekMsU0FBUzsrQkFDSSw2QkFBNkIsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtUHJvcHNCYXNlQ29tcG9uZW50IH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JkYy1tYXN0ZXItZGV0YWlsLWNhcmQtZm9ybScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWFzdGVyLWRldGFpbC1jYXJkLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWFzdGVyLWRldGFpbC1jYXJkLWZvcm0uY29tcG9uZW50LmNzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFzdGVyRGV0YWlsQ2FyZEZvcm1Db21wb25lbnQgZXh0ZW5kcyBGb3JtUHJvcHNCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWNhcmQgY2xhc3M9XCJtYXN0ZXItdGFiXCI+XHJcbiAgICA8YnN1LWx5LXRhYi1wYWdlIFtjb25maWddPVwibW9kZXJuVGFic1swXVwiPjwvYnN1LWx5LXRhYi1wYWdlPlxyXG48L2ZkLWNhcmQ+XHJcbjxmZC1jYXJkIGNsYXNzPVwiZGV0YWlscy10YWJcIj5cclxuICAgIDxic3UtbHktdGFiLXBhZ2UgW2NvbmZpZ109XCJtb2Rlcm5UYWJzWzFdXCI+PC9ic3UtbHktdGFiLXBhZ2U+XHJcbjwvZmQtY2FyZD5cclxuIl19
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, TemplateRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { AudioRecordingService, BarsaApi, UploadService, VideoRecordingService } from 'barsa-novin-ray-core';
|
|
3
|
+
import { UiPdfViewerComponent } from 'barsa-sap-ui';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "@fundamental-ngx/core/button";
|
|
7
|
+
import * as i3 from "@fundamental-ngx/core/card";
|
|
8
|
+
import * as i4 from "@fundamental-ngx/core/nested-list";
|
|
9
|
+
import * as i5 from "@fundamental-ngx/core/progress-indicator";
|
|
10
|
+
import * as i6 from "barsa-novin-ray-core";
|
|
11
|
+
export class MediaFileUploaderComponent extends UiPdfViewerComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.isPlaying = false;
|
|
15
|
+
this.displayControls = true;
|
|
16
|
+
this.isRecording = false;
|
|
17
|
+
this.audioConf = { audio: true };
|
|
18
|
+
this.videoConf = { video: { facingMode: 'user', width: 320 }, audio: true };
|
|
19
|
+
this.recordType = 'audio';
|
|
20
|
+
}
|
|
21
|
+
get video() {
|
|
22
|
+
return this.videoElement?.nativeElement;
|
|
23
|
+
}
|
|
24
|
+
get fileInput() {
|
|
25
|
+
return this.photoElement?.nativeElement;
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
super.ngOnInit();
|
|
29
|
+
this._videoRecoder.recordingFailed().subscribe(() => {
|
|
30
|
+
this.isRecording = false;
|
|
31
|
+
this._cdr.detectChanges();
|
|
32
|
+
});
|
|
33
|
+
this._videoRecoder.getRecordedTime().subscribe((time) => {
|
|
34
|
+
this.recordedTime = time;
|
|
35
|
+
this._cdr.detectChanges();
|
|
36
|
+
});
|
|
37
|
+
this._videoRecoder.getStream().subscribe((stream) => {
|
|
38
|
+
this.videoStream = stream;
|
|
39
|
+
this._cdr.detectChanges();
|
|
40
|
+
});
|
|
41
|
+
this._videoRecoder.getRecordedBlob().subscribe((data) => {
|
|
42
|
+
this.fileBlob = data.blob;
|
|
43
|
+
this.fileName = data.title;
|
|
44
|
+
this.valueUrl = this._domSanitizer.bypassSecurityTrustUrl(data.url);
|
|
45
|
+
this._cdr.detectChanges();
|
|
46
|
+
});
|
|
47
|
+
this._audioRecorder.recordingFailed().subscribe(() => {
|
|
48
|
+
this.isRecording = false;
|
|
49
|
+
this._cdr.detectChanges();
|
|
50
|
+
});
|
|
51
|
+
this._audioRecorder.getRecordedTime().subscribe((time) => {
|
|
52
|
+
this.recordedTime = time;
|
|
53
|
+
this._cdr.detectChanges();
|
|
54
|
+
});
|
|
55
|
+
this._audioRecorder.getRecordedBlob().subscribe((data) => {
|
|
56
|
+
this.fileBlob = data.blob;
|
|
57
|
+
this.fileName = data.title;
|
|
58
|
+
this.valueUrl = this._domSanitizer.bypassSecurityTrustUrl(URL.createObjectURL(data.blob));
|
|
59
|
+
this._cdr.detectChanges();
|
|
60
|
+
});
|
|
61
|
+
let glyph = '';
|
|
62
|
+
switch (this.recordType) {
|
|
63
|
+
case 'audio':
|
|
64
|
+
glyph = 'attachment-audio';
|
|
65
|
+
break;
|
|
66
|
+
case 'video':
|
|
67
|
+
glyph = 'attachment-video';
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
glyph = 'attachment-photo';
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
this.glyph = glyph;
|
|
74
|
+
this.fileName = this.value?.FileName;
|
|
75
|
+
this.recordType = this.parameters?.MediaType$Caption || 'audio';
|
|
76
|
+
}
|
|
77
|
+
onDelete() {
|
|
78
|
+
super.onDelete();
|
|
79
|
+
this.onClearRecord();
|
|
80
|
+
}
|
|
81
|
+
onClearRecord() {
|
|
82
|
+
this.abortVideoRecording();
|
|
83
|
+
this.abortAudioRecording();
|
|
84
|
+
this.fileBlob = null;
|
|
85
|
+
this.valueUrl = null;
|
|
86
|
+
this._cdr.detectChanges();
|
|
87
|
+
}
|
|
88
|
+
onToggleRecord() {
|
|
89
|
+
if (this.recordType === 'audio') {
|
|
90
|
+
if (this.isRecording) {
|
|
91
|
+
this.stopAudioRecording();
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.startAudioRecording();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (this.recordType === 'video') {
|
|
98
|
+
this.video.hidden = false;
|
|
99
|
+
if (this.isRecording) {
|
|
100
|
+
this.stopVideoRecording();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.startVideoRecording();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (this.recordType === 'photo') {
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
onTakePhoto() {
|
|
110
|
+
if (this.fileInput?.files?.length) {
|
|
111
|
+
const file = this.fileInput.files.item(0);
|
|
112
|
+
if (file) {
|
|
113
|
+
this.fileName = file.name;
|
|
114
|
+
this._uploadFile([file]).subscribe();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
onUpload() {
|
|
119
|
+
const videoFile = new File([this.fileBlob], this.fileName);
|
|
120
|
+
this._uploadFile([videoFile]).subscribe();
|
|
121
|
+
}
|
|
122
|
+
startVideoRecording() {
|
|
123
|
+
if (!this.isRecording) {
|
|
124
|
+
this.video.controls = false;
|
|
125
|
+
this.isRecording = true;
|
|
126
|
+
this._videoRecoder
|
|
127
|
+
.startRecording(this.videoConf)
|
|
128
|
+
.then((stream) => {
|
|
129
|
+
// this.video.src = window.URL.createObjectURL(stream);
|
|
130
|
+
this.video.srcObject = stream;
|
|
131
|
+
this.video.play();
|
|
132
|
+
})
|
|
133
|
+
.catch(function (err) {
|
|
134
|
+
console.log(err.name + ': ' + err.message);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
abortVideoRecording() {
|
|
139
|
+
if (this.isRecording && this.recordType === 'video') {
|
|
140
|
+
this.isRecording = false;
|
|
141
|
+
this._videoRecoder.abortRecording();
|
|
142
|
+
}
|
|
143
|
+
if (this.video) {
|
|
144
|
+
const video = this.video;
|
|
145
|
+
video.controls = false;
|
|
146
|
+
video.hidden = true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
stopVideoRecording() {
|
|
150
|
+
if (this.isRecording && this.recordType === 'video') {
|
|
151
|
+
this._videoRecoder.stopRecording();
|
|
152
|
+
const video = this.video;
|
|
153
|
+
video.srcObject = this.valueUrl;
|
|
154
|
+
video.controls = true;
|
|
155
|
+
this.isRecording = false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
clearVideoRecordedData() {
|
|
159
|
+
this.valueUrl = null;
|
|
160
|
+
const video = this.video;
|
|
161
|
+
video.srcObject = null;
|
|
162
|
+
video.controls = false;
|
|
163
|
+
this._cdr.detectChanges();
|
|
164
|
+
}
|
|
165
|
+
downloadVideoRecordedData() {
|
|
166
|
+
this._downloadFile(this.fileBlob, 'video/mp4', this.fileName);
|
|
167
|
+
}
|
|
168
|
+
startAudioRecording() {
|
|
169
|
+
if (!this.isRecording) {
|
|
170
|
+
this.isRecording = true;
|
|
171
|
+
this._audioRecorder.startRecording();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
abortAudioRecording() {
|
|
175
|
+
if (this.isRecording && this.recordType === 'audio') {
|
|
176
|
+
this.isRecording = false;
|
|
177
|
+
this._audioRecorder.abortRecording();
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
stopAudioRecording() {
|
|
181
|
+
if (this.isRecording && this.recordType === 'audio') {
|
|
182
|
+
this._audioRecorder.stopRecording();
|
|
183
|
+
this.isRecording = false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
clearAudioRecordedData() {
|
|
187
|
+
this.valueUrl = null;
|
|
188
|
+
}
|
|
189
|
+
downloadAudioRecordedData() {
|
|
190
|
+
this._downloadFile(this.fileBlob, 'audio/mp3', this.fileName);
|
|
191
|
+
}
|
|
192
|
+
ngOnDestroy() {
|
|
193
|
+
this.abortAudioRecording();
|
|
194
|
+
}
|
|
195
|
+
_downloadFile(data, type, filename) {
|
|
196
|
+
const blob = new Blob([data], { type });
|
|
197
|
+
const url = window.URL.createObjectURL(blob);
|
|
198
|
+
// this.video.srcObject = stream;
|
|
199
|
+
// const url = data;
|
|
200
|
+
const anchor = document.createElement('a');
|
|
201
|
+
anchor.download = filename;
|
|
202
|
+
anchor.href = url;
|
|
203
|
+
document.body.appendChild(anchor);
|
|
204
|
+
anchor.click();
|
|
205
|
+
document.body.removeChild(anchor);
|
|
206
|
+
}
|
|
207
|
+
_downloadFileIdCompleted(response) {
|
|
208
|
+
super._downloadFileIdCompleted(response);
|
|
209
|
+
if (this.valueUrl) {
|
|
210
|
+
if (this.recordType === 'video') {
|
|
211
|
+
this.video.controls = true;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
_refresh(_) {
|
|
216
|
+
if (BarsaApi.Ext.isEmpty(this.value)) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const fileId = this.value.Id;
|
|
220
|
+
this.DownloadFileId(fileId, true, '', null, false);
|
|
221
|
+
}
|
|
222
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaFileUploaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
223
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MediaFileUploaderComponent, selector: "bdc-media-file-uploader", providers: [AudioRecordingService, VideoRecordingService, UploadService], viewQueries: [{ propertyName: "videoElement", first: true, predicate: ["videoElement"], descendants: true }, { propertyName: "photoElement", first: true, predicate: ["photoElement"], descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["container"], descendants: true, read: TemplateRef }], usesInheritance: true, ngImport: i0, template: "<fd-card class=\"upload\" [ngClass]=\"recordType\">\r\n <fd-card-content class=\"file-content\">\r\n <div [class.no-recording]=\"!isRecording && valueUrl\" [ngClass]=\"recordType\" class=\"media-wrapper\">\r\n <div class=\"icon\">\r\n @if (!value && !valueUrl && !isRecording) {\r\n <i style=\"left: 45%; position: absolute\" fd-nested-list-icon [glyph]=\"glyph\"></i>\r\n }\r\n </div>\r\n @if (recordType === 'video') {\r\n <video #videoElement [class.video-novalue]=\"!valueUrl\">\r\n @if (!isRecording && valueUrl) {\r\n <source [src]=\"valueUrl\" />\r\n } @if (!value && !valueUrl && !isRecording) {\r\n <i style=\"left: 45%; position: absolute\" fd-nested-list-icon [glyph]=\"glyph\"></i>\r\n }\r\n </video>\r\n } @if (!isRecording && valueUrl && recordType === 'audio') {\r\n <audio controls>\r\n <source [src]=\"valueUrl\" type=\"audio/mp3\" />\r\n </audio>\r\n } @if (recordType === 'photo') {\r\n <input\r\n #photoElement\r\n type=\"file\"\r\n accept=\"image/*\"\r\n id=\"file-input\"\r\n capture=\"environment\"\r\n (change)=\"onTakePhoto()\"\r\n />\r\n }\r\n </div>\r\n @if (isRecording || valueUrl) {\r\n <div class=\"media-info\">\r\n <div>\r\n {{ !isRecording ? '' : ('Recording' | bbbTranslate) }} <strong>{{ recordedTime }}</strong>\r\n </div>\r\n <div>{{ fileName }}</div>\r\n </div>\r\n } @if (uploadingState$ | async; as uploadingState) { @if (uploadingState.state === 'Uploading') {\r\n <div class=\"progress\">\r\n <div>\r\n <fd-progress-indicator\r\n state=\"informative\"\r\n [valueNow]=\"uploadingState?.progress\"\r\n ></fd-progress-indicator>\r\n </div>\r\n </div>\r\n } }\r\n <div class=\"btn-wrapper\">\r\n @if (!value && !valueUrl) {\r\n <button\r\n class=\"btn-record\"\r\n fd-button\r\n [glyph]=\"isRecording ? 'stop' : 'record'\"\r\n [fdType]=\"isRecording ? 'attention' : 'ghost'\"\r\n (click)=\"onToggleRecord()\"\r\n ></button>\r\n } @if (!value && valueUrl) {\r\n <div class=\"btn-toolbar\">\r\n <button fd-button [glyph]=\"'delete'\" fdType=\"negative\" (click)=\"onClearRecord()\"></button>\r\n <button fd-button [label]=\"'Upload' | bbbTranslate\" [glyph]=\"'upload'\" (click)=\"onUpload()\"></button>\r\n </div>\r\n } @if (value) {\r\n <div class=\"btn-toolbar\">\r\n @if (value) {\r\n <button fd-button [glyph]=\"'delete'\" fdType=\"negative\" (click)=\"onDelete()\"></button>\r\n } @if (value) {\r\n <button fd-button [glyph]=\"'download'\" fdType=\"standard\" (click)=\"onDownload()\"></button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </fd-card-content>\r\n</fd-card>\r\n", styles: [":host .upload{display:flex;justify-content:center;align-items:center;flex-direction:column;max-width:380px;position:relative}:host .upload .file-content{width:100%}:host .upload i:before{color:#0a6ed1!important;font-size:2rem}fd-card.audio{min-height:120px;max-height:120px}fd-card.video{min-height:340px;max-height:340px}.icon{display:flex;align-items:center;justify-content:center;position:absolute;top:45%;left:45%}.video-novalue{border:1px dashed var(--sapObjectHeader_BorderColor);min-height:240px}audio,video{width:100%}.progress{position:absolute;width:100%;height:100%;background-color:#e4e4e4c7;z-index:4;display:flex;justify-content:center;align-items:center;top:0;left:0}.progress div{flex:.5}.file-content{width:100%;height:100%;display:flex;flex-direction:column;padding:1rem}.media-wrapper{flex-grow:1}.btn-wrapper{align-self:center}.btn-record{flex-shrink:1}.btn-toolbar{flex-grow:1;display:flex;column-gap:1rem}.media-info{flex-shrink:1;display:flex;width:100%;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3.CardComponent, selector: "fd-card", inputs: ["badge", "badgeIcon", "badgeColor", "badgeColorSecondary", "badgeStatus", "badgeAriaLabel", "secondBadge", "secondBadgeIcon", "secondBadgeColor", "secondBadgeColorSecondary", "secondBadgeStatus", "secondBadgeAriaLabel", "isLoading", "cardType", "id", "ariaRoledescription", "ariaDescription", "ariaLabel", "role", "interactive", "selected", "ariaPosinset", "ariaSetsize"], outputs: ["ariaPosinsetChange", "ariaSetsizeChange"] }, { kind: "component", type: i3.CardContentComponent, selector: "fd-card-content" }, { kind: "component", type: i4.NestedListIconComponent, selector: "[fdNestedDirectivesIcon], [fd-nested-list-icon]", inputs: ["role"] }, { kind: "component", type: i5.ProgressIndicatorComponent, selector: "fd-progress-indicator", inputs: ["valueText", "unit", "valueMin", "valueMax", "valueNow", "state", "animate"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
224
|
+
}
|
|
225
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaFileUploaderComponent, decorators: [{
|
|
226
|
+
type: Component,
|
|
227
|
+
args: [{ selector: 'bdc-media-file-uploader', changeDetection: ChangeDetectionStrategy.OnPush, providers: [AudioRecordingService, VideoRecordingService, UploadService], standalone: false, template: "<fd-card class=\"upload\" [ngClass]=\"recordType\">\r\n <fd-card-content class=\"file-content\">\r\n <div [class.no-recording]=\"!isRecording && valueUrl\" [ngClass]=\"recordType\" class=\"media-wrapper\">\r\n <div class=\"icon\">\r\n @if (!value && !valueUrl && !isRecording) {\r\n <i style=\"left: 45%; position: absolute\" fd-nested-list-icon [glyph]=\"glyph\"></i>\r\n }\r\n </div>\r\n @if (recordType === 'video') {\r\n <video #videoElement [class.video-novalue]=\"!valueUrl\">\r\n @if (!isRecording && valueUrl) {\r\n <source [src]=\"valueUrl\" />\r\n } @if (!value && !valueUrl && !isRecording) {\r\n <i style=\"left: 45%; position: absolute\" fd-nested-list-icon [glyph]=\"glyph\"></i>\r\n }\r\n </video>\r\n } @if (!isRecording && valueUrl && recordType === 'audio') {\r\n <audio controls>\r\n <source [src]=\"valueUrl\" type=\"audio/mp3\" />\r\n </audio>\r\n } @if (recordType === 'photo') {\r\n <input\r\n #photoElement\r\n type=\"file\"\r\n accept=\"image/*\"\r\n id=\"file-input\"\r\n capture=\"environment\"\r\n (change)=\"onTakePhoto()\"\r\n />\r\n }\r\n </div>\r\n @if (isRecording || valueUrl) {\r\n <div class=\"media-info\">\r\n <div>\r\n {{ !isRecording ? '' : ('Recording' | bbbTranslate) }} <strong>{{ recordedTime }}</strong>\r\n </div>\r\n <div>{{ fileName }}</div>\r\n </div>\r\n } @if (uploadingState$ | async; as uploadingState) { @if (uploadingState.state === 'Uploading') {\r\n <div class=\"progress\">\r\n <div>\r\n <fd-progress-indicator\r\n state=\"informative\"\r\n [valueNow]=\"uploadingState?.progress\"\r\n ></fd-progress-indicator>\r\n </div>\r\n </div>\r\n } }\r\n <div class=\"btn-wrapper\">\r\n @if (!value && !valueUrl) {\r\n <button\r\n class=\"btn-record\"\r\n fd-button\r\n [glyph]=\"isRecording ? 'stop' : 'record'\"\r\n [fdType]=\"isRecording ? 'attention' : 'ghost'\"\r\n (click)=\"onToggleRecord()\"\r\n ></button>\r\n } @if (!value && valueUrl) {\r\n <div class=\"btn-toolbar\">\r\n <button fd-button [glyph]=\"'delete'\" fdType=\"negative\" (click)=\"onClearRecord()\"></button>\r\n <button fd-button [label]=\"'Upload' | bbbTranslate\" [glyph]=\"'upload'\" (click)=\"onUpload()\"></button>\r\n </div>\r\n } @if (value) {\r\n <div class=\"btn-toolbar\">\r\n @if (value) {\r\n <button fd-button [glyph]=\"'delete'\" fdType=\"negative\" (click)=\"onDelete()\"></button>\r\n } @if (value) {\r\n <button fd-button [glyph]=\"'download'\" fdType=\"standard\" (click)=\"onDownload()\"></button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </fd-card-content>\r\n</fd-card>\r\n", styles: [":host .upload{display:flex;justify-content:center;align-items:center;flex-direction:column;max-width:380px;position:relative}:host .upload .file-content{width:100%}:host .upload i:before{color:#0a6ed1!important;font-size:2rem}fd-card.audio{min-height:120px;max-height:120px}fd-card.video{min-height:340px;max-height:340px}.icon{display:flex;align-items:center;justify-content:center;position:absolute;top:45%;left:45%}.video-novalue{border:1px dashed var(--sapObjectHeader_BorderColor);min-height:240px}audio,video{width:100%}.progress{position:absolute;width:100%;height:100%;background-color:#e4e4e4c7;z-index:4;display:flex;justify-content:center;align-items:center;top:0;left:0}.progress div{flex:.5}.file-content{width:100%;height:100%;display:flex;flex-direction:column;padding:1rem}.media-wrapper{flex-grow:1}.btn-wrapper{align-self:center}.btn-record{flex-shrink:1}.btn-toolbar{flex-grow:1;display:flex;column-gap:1rem}.media-info{flex-shrink:1;display:flex;width:100%;justify-content:space-between}\n"] }]
|
|
228
|
+
}], propDecorators: { videoElement: [{
|
|
229
|
+
type: ViewChild,
|
|
230
|
+
args: ['videoElement']
|
|
231
|
+
}], photoElement: [{
|
|
232
|
+
type: ViewChild,
|
|
233
|
+
args: ['photoElement']
|
|
234
|
+
}], dialogContainer: [{
|
|
235
|
+
type: ViewChild,
|
|
236
|
+
args: ['container', { read: TemplateRef }]
|
|
237
|
+
}] } });
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtZmlsZS11cGxvYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1kZXZlbG9wLWNvbXBvbmVudHMvc3JjL2xpYi9tZWRpYS1maWxlLXVwbG9hZGVyL21lZGlhLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtZGV2ZWxvcC1jb21wb25lbnRzL3NyYy9saWIvbWVkaWEtZmlsZS11cGxvYWRlci9tZWRpYS1maWxlLXVwbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7QUFVcEQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLG9CQUFvQjtJQVJwRTs7UUFjSSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBTXBCLGNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1QixjQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFdkUsZUFBVSxHQUFHLE9BQU8sQ0FBQztLQXlOeEI7SUF2TkcsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztJQUM1QyxD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LE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDOytHQXpPUSwwQkFBMEI7bUdBQTFCLDBCQUEwQixrREFIeEIsQ0FBQyxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsaVRBTXhDLFdBQVcsb0RDZi9DLHN6R0EwRUE7OzRGRDlEYSwwQkFBMEI7a0JBUnRDLFNBQVM7K0JBQ0kseUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxDQUFDLGNBQzVELEtBQUs7OEJBR1UsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNFLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFFekIsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXVkaW9SZWNvcmRpbmdTZXJ2aWNlLCBCYXJzYUFwaSwgVXBsb2FkU2VydmljZSwgVmlkZW9SZWNvcmRpbmdTZXJ2aWNlIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBVaVBkZlZpZXdlckNvbXBvbmVudCB9IGZyb20gJ2JhcnNhLXNhcC11aSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmRjLW1lZGlhLWZpbGUtdXBsb2FkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lZGlhLWZpbGUtdXBsb2FkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbWVkaWEtZmlsZS11cGxvYWRlci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtBdWRpb1JlY29yZGluZ1NlcnZpY2UsIFZpZGVvUmVjb3JkaW5nU2VydmljZSwgVXBsb2FkU2VydmljZV0sXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVkaWFGaWxlVXBsb2FkZXJDb21wb25lbnQgZXh0ZW5kcyBVaVBkZlZpZXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCd2aWRlb0VsZW1lbnQnKSB2aWRlb0VsZW1lbnQ6IGFueTtcclxuICAgIEBWaWV3Q2hpbGQoJ3Bob3RvRWxlbWVudCcpIHBob3RvRWxlbWVudDogYW55O1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gICAgZGlhbG9nQ29udGFpbmVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIGlzUGxheWluZyA9IGZhbHNlO1xyXG4gICAgZGlzcGxheUNvbnRyb2xzID0gdHJ1ZTtcclxuICAgIGlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICByZWNvcmRlZFRpbWU7XHJcbiAgICBmaWxlQmxvYjtcclxuICAgIGZpbGVOYW1lO1xyXG4gICAgYXVkaW9TdHJlYW07XHJcbiAgICB2aWRlb1N0cmVhbTogTWVkaWFTdHJlYW07XHJcbiAgICBhdWRpb0NvbmYgPSB7IGF1ZGlvOiB0cnVlIH07XHJcbiAgICB2aWRlb0NvbmYgPSB7IHZpZGVvOiB7IGZhY2luZ01vZGU6ICd1c2VyJywgd2lkdGg6IDMyMCB9LCBhdWRpbzogdHJ1ZSB9O1xyXG4gICAgZ2x5cGg6IHN0cmluZztcclxuICAgIHJlY29yZFR5cGUgPSAnYXVkaW8nO1xyXG5cclxuICAgIGdldCB2aWRlbygpOiBIVE1MTWVkaWFFbGVtZW50IHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWRlb0VsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgICBnZXQgZmlsZUlucHV0KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBob3RvRWxlbWVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgIH1cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5fdmlkZW9SZWNvZGVyLnJlY29yZGluZ0ZhaWxlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fdmlkZW9SZWNvZGVyLmdldFJlY29yZGVkVGltZSgpLnN1YnNjcmliZSgodGltZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZGVkVGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3ZpZGVvUmVjb2Rlci5nZXRTdHJlYW0oKS5zdWJzY3JpYmUoKHN0cmVhbSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvU3RyZWFtID0gc3RyZWFtO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl92aWRlb1JlY29kZXIuZ2V0UmVjb3JkZWRCbG9iKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZUJsb2IgPSBkYXRhLmJsb2I7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZU5hbWUgPSBkYXRhLnRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlVXJsID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZGF0YS51cmwpO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9hdWRpb1JlY29yZGVyLnJlY29yZGluZ0ZhaWxlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYXVkaW9SZWNvcmRlci5nZXRSZWNvcmRlZFRpbWUoKS5zdWJzY3JpYmUoKHRpbWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmRlZFRpbWUgPSB0aW1lO1xyXG4gICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9hdWRpb1JlY29yZGVyLmdldFJlY29yZGVkQmxvYigpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVCbG9iID0gZGF0YS5ibG9iO1xyXG4gICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gZGF0YS50aXRsZTtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZVVybCA9IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFVSTC5jcmVhdGVPYmplY3RVUkwoZGF0YS5ibG9iKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IGdseXBoID0gJyc7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLnJlY29yZFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnYXVkaW8nOlxyXG4gICAgICAgICAgICAgICAgZ2x5cGggPSAnYXR0YWNobWVudC1hdWRpbyc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndmlkZW8nOlxyXG4gICAgICAgICAgICAgICAgZ2x5cGggPSAnYXR0YWNobWVudC12aWRlbyc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGdseXBoID0gJ2F0dGFjaG1lbnQtcGhvdG8nO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2x5cGggPSBnbHlwaDtcclxuICAgICAgICB0aGlzLmZpbGVOYW1lID0gdGhpcy52YWx1ZT8uRmlsZU5hbWU7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRUeXBlID0gdGhpcy5wYXJhbWV0ZXJzPy5NZWRpYVR5cGUkQ2FwdGlvbiB8fCAnYXVkaW8nO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVsZXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm9uRGVsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkNsZWFyUmVjb3JkKCk7XHJcbiAgICB9XHJcbiAgICBvbkNsZWFyUmVjb3JkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWJvcnRWaWRlb1JlY29yZGluZygpO1xyXG4gICAgICAgIHRoaXMuYWJvcnRBdWRpb1JlY29yZGluZygpO1xyXG4gICAgICAgIHRoaXMuZmlsZUJsb2IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudmFsdWVVcmwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBvblRvZ2dsZVJlY29yZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5yZWNvcmRUeXBlID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBdWRpb1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1ZGlvUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVjb3JkVHlwZSA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgICAgICB0aGlzLnZpZGVvLmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wVmlkZW9SZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWaWRlb1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlY29yZFR5cGUgPT09ICdwaG90bycpIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvblRha2VQaG90bygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5maWxlSW5wdXQ/LmZpbGVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZUlucHV0LmZpbGVzLml0ZW0oMCk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkRmlsZShbZmlsZV0pLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25VcGxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmlkZW9GaWxlOiBGaWxlID0gbmV3IEZpbGUoW3RoaXMuZmlsZUJsb2JdLCB0aGlzLmZpbGVOYW1lKTtcclxuICAgICAgICB0aGlzLl91cGxvYWRGaWxlKFt2aWRlb0ZpbGVdKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIHN0YXJ0VmlkZW9SZWNvcmRpbmcoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW8uY29udHJvbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZpZGVvUmVjb2RlclxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0UmVjb3JkaW5nKHRoaXMudmlkZW9Db25mKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKHN0cmVhbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMudmlkZW8uc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoc3RyZWFtKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLnNyY09iamVjdCA9IHN0cmVhbTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyci5uYW1lICsgJzogJyArIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhYm9ydFZpZGVvUmVjb3JkaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nICYmIHRoaXMucmVjb3JkVHlwZSA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZpZGVvUmVjb2Rlci5hYm9ydFJlY29yZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52aWRlbykge1xyXG4gICAgICAgICAgICBjb25zdCB2aWRlbyA9IHRoaXMudmlkZW87XHJcbiAgICAgICAgICAgIHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHZpZGVvLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BWaWRlb1JlY29yZGluZygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlY29yZGluZyAmJiB0aGlzLnJlY29yZFR5cGUgPT09ICd2aWRlbycpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmlkZW9SZWNvZGVyLnN0b3BSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgY29uc3QgdmlkZW86IGFueSA9IHRoaXMudmlkZW87XHJcbiAgICAgICAgICAgIHZpZGVvLnNyY09iamVjdCA9IHRoaXMudmFsdWVVcmw7XHJcbiAgICAgICAgICAgIHZpZGVvLmNvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhclZpZGVvUmVjb3JkZWREYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWVVcmwgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHZpZGVvID0gdGhpcy52aWRlbztcclxuICAgICAgICB2aWRlby5zcmNPYmplY3QgPSBudWxsO1xyXG4gICAgICAgIHZpZGVvLmNvbnRyb2xzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZFZpZGVvUmVjb3JkZWREYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkRmlsZSh0aGlzLmZpbGVCbG9iLCAndmlkZW8vbXA0JywgdGhpcy5maWxlTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRBdWRpb1JlY29yZGluZygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2F1ZGlvUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJvcnRBdWRpb1JlY29yZGluZygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlY29yZGluZyAmJiB0aGlzLnJlY29yZFR5cGUgPT09ICdhdWRpbycpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9hdWRpb1JlY29yZGVyLmFib3J0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BBdWRpb1JlY29yZGluZygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5pc1JlY29yZGluZyAmJiB0aGlzLnJlY29yZFR5cGUgPT09ICdhdWRpbycpIHtcclxuICAgICAgICAgICAgdGhpcy5fYXVkaW9SZWNvcmRlci5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBdWRpb1JlY29yZGVkRGF0YSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlVXJsID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEF1ZGlvUmVjb3JkZWREYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkRmlsZSh0aGlzLmZpbGVCbG9iLCAnYXVkaW8vbXAzJywgdGhpcy5maWxlTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hYm9ydEF1ZGlvUmVjb3JkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2Rvd25sb2FkRmlsZShkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgZmlsZW5hbWU6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtkYXRhXSwgeyB0eXBlIH0pO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgIC8vIHRoaXMudmlkZW8uc3JjT2JqZWN0ID0gc3RyZWFtO1xyXG4gICAgICAgIC8vIGNvbnN0IHVybCA9IGRhdGE7XHJcbiAgICAgICAgY29uc3QgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgIGFuY2hvci5kb3dubG9hZCA9IGZpbGVuYW1lO1xyXG4gICAgICAgIGFuY2hvci5ocmVmID0gdXJsO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYW5jaG9yKTtcclxuICAgICAgICBhbmNob3IuY2xpY2soKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGFuY2hvcik7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2Rvd25sb2FkRmlsZUlkQ29tcGxldGVkKHJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIuX2Rvd25sb2FkRmlsZUlkQ29tcGxldGVkKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZVVybCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRUeXBlID09PSAndmlkZW8nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLmNvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfcmVmcmVzaChfPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGlmIChCYXJzYUFwaS5FeHQuaXNFbXB0eSh0aGlzLnZhbHVlKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbGVJZCA9IHRoaXMudmFsdWUuSWQ7XHJcbiAgICAgICAgdGhpcy5Eb3dubG9hZEZpbGVJZChmaWxlSWQsIHRydWUsICcnLCBudWxsLCBmYWxzZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWNhcmQgY2xhc3M9XCJ1cGxvYWRcIiBbbmdDbGFzc109XCJyZWNvcmRUeXBlXCI+XHJcbiAgICA8ZmQtY2FyZC1jb250ZW50IGNsYXNzPVwiZmlsZS1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3Mubm8tcmVjb3JkaW5nXT1cIiFpc1JlY29yZGluZyAmJiB2YWx1ZVVybFwiIFtuZ0NsYXNzXT1cInJlY29yZFR5cGVcIiBjbGFzcz1cIm1lZGlhLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoIXZhbHVlICYmICF2YWx1ZVVybCAmJiAhaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgICAgIDxpIHN0eWxlPVwibGVmdDogNDUlOyBwb3NpdGlvbjogYWJzb2x1dGVcIiBmZC1uZXN0ZWQtbGlzdC1pY29uIFtnbHlwaF09XCJnbHlwaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBpZiAocmVjb3JkVHlwZSA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgICAgICA8dmlkZW8gI3ZpZGVvRWxlbWVudCBbY2xhc3MudmlkZW8tbm92YWx1ZV09XCIhdmFsdWVVcmxcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoIWlzUmVjb3JkaW5nICYmIHZhbHVlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICA8c291cmNlIFtzcmNdPVwidmFsdWVVcmxcIiAvPlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKCF2YWx1ZSAmJiAhdmFsdWVVcmwgJiYgIWlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICA8aSBzdHlsZT1cImxlZnQ6IDQ1JTsgcG9zaXRpb246IGFic29sdXRlXCIgZmQtbmVzdGVkLWxpc3QtaWNvbiBbZ2x5cGhdPVwiZ2x5cGhcIj48L2k+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdmlkZW8+XHJcbiAgICAgICAgICAgIH0gQGlmICghaXNSZWNvcmRpbmcgJiYgdmFsdWVVcmwgJiYgcmVjb3JkVHlwZSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgICA8YXVkaW8gY29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICA8c291cmNlIFtzcmNdPVwidmFsdWVVcmxcIiB0eXBlPVwiYXVkaW8vbXAzXCIgLz5cclxuICAgICAgICAgICAgPC9hdWRpbz5cclxuICAgICAgICAgICAgfSBAaWYgKHJlY29yZFR5cGUgPT09ICdwaG90bycpIHtcclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAjcGhvdG9FbGVtZW50XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcclxuICAgICAgICAgICAgICAgIGlkPVwiZmlsZS1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBjYXB0dXJlPVwiZW52aXJvbm1lbnRcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRha2VQaG90bygpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBpZiAoaXNSZWNvcmRpbmcgfHwgdmFsdWVVcmwpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtaW5mb1wiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAge3sgIWlzUmVjb3JkaW5nID8gJycgOiAoJ1JlY29yZGluZycgfCBiYmJUcmFuc2xhdGUpIH19IDxzdHJvbmc+e3sgcmVjb3JkZWRUaW1lIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2Pnt7IGZpbGVOYW1lIH19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfSBAaWYgKHVwbG9hZGluZ1N0YXRlJCB8IGFzeW5jOyBhcyB1cGxvYWRpbmdTdGF0ZSkgeyBAaWYgKHVwbG9hZGluZ1N0YXRlLnN0YXRlID09PSAnVXBsb2FkaW5nJykge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGZkLXByb2dyZXNzLWluZGljYXRvclxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlPVwiaW5mb3JtYXRpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZU5vd109XCJ1cGxvYWRpbmdTdGF0ZT8ucHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgPjwvZmQtcHJvZ3Jlc3MtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IH1cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgQGlmICghdmFsdWUgJiYgIXZhbHVlVXJsKSB7XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXJlY29yZFwiXHJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cclxuICAgICAgICAgICAgICAgIFtnbHlwaF09XCJpc1JlY29yZGluZyA/ICdzdG9wJyA6ICdyZWNvcmQnXCJcclxuICAgICAgICAgICAgICAgIFtmZFR5cGVdPVwiaXNSZWNvcmRpbmcgPyAnYXR0ZW50aW9uJyA6ICdnaG9zdCdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlUmVjb3JkKClcIlxyXG4gICAgICAgICAgICA+PC9idXR0b24+XHJcbiAgICAgICAgICAgIH0gQGlmICghdmFsdWUgJiYgdmFsdWVVcmwpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBbZ2x5cGhdPVwiJ2RlbGV0ZSdcIiBmZFR5cGU9XCJuZWdhdGl2ZVwiIChjbGljayk9XCJvbkNsZWFyUmVjb3JkKClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtsYWJlbF09XCInVXBsb2FkJyB8IGJiYlRyYW5zbGF0ZVwiIFtnbHlwaF09XCIndXBsb2FkJ1wiIChjbGljayk9XCJvblVwbG9hZCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9IEBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGZkLWJ1dHRvbiBbZ2x5cGhdPVwiJ2RlbGV0ZSdcIiBmZFR5cGU9XCJuZWdhdGl2ZVwiIChjbGljayk9XCJvbkRlbGV0ZSgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIFtnbHlwaF09XCInZG93bmxvYWQnXCIgZmRUeXBlPVwic3RhbmRhcmRcIiAoY2xpY2spPVwib25Eb3dubG9hZCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2ZkLWNhcmQtY29udGVudD5cclxuPC9mZC1jYXJkPlxyXG4iXX0=
|