speechrecorderng 3.8.0 → 3.9.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/README.md +0 -1
- package/esm2022/lib/audio/audio_display.mjs +3 -3
- package/esm2022/lib/audio/audio_player.mjs +3 -3
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +6 -6
- package/esm2022/lib/audio/ui/audio_display_control.mjs +3 -3
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +5 -5
- package/esm2022/lib/audio/ui/audiosignal.mjs +3 -3
- package/esm2022/lib/audio/ui/container.mjs +3 -3
- package/esm2022/lib/audio/ui/livelevel.mjs +5 -5
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
- package/esm2022/lib/audio/ui/sonagram.mjs +3 -3
- package/esm2022/lib/db/inddb.mjs +3 -3
- package/esm2022/lib/environment/environment.defaults.mjs +9 -0
- package/esm2022/lib/speechrecorder/project/project.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +5 -2
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/script/script.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +8 -8
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +21 -21
- package/esm2022/lib/speechrecorder/session/progress.mjs +22 -11
- package/esm2022/lib/speechrecorder/session/prompting.mjs +26 -26
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +5 -5
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +5 -5
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/session.service.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +3 -3
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +5 -5
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +3 -3
- package/esm2022/lib/speechrecorder/spruploader.mjs +3 -3
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +5 -5
- package/esm2022/lib/speechrecorderng.component.mjs +3 -3
- package/esm2022/lib/speechrecorderng.module.mjs +8 -7
- package/esm2022/lib/spr.config.mjs +5 -4
- package/esm2022/lib/spr.module.version.mjs +2 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +3 -3
- package/esm2022/lib/ui/intersection-observer.directive.mjs +32 -0
- package/esm2022/lib/ui/message_dialog.mjs +3 -3
- package/esm2022/lib/ui/recordingitem_display.mjs +11 -11
- package/esm2022/lib/ui/responsive_component.mjs +3 -3
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +3 -3
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/speechrecorderng.mjs +257 -203
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/environment/environment.defaults.d.ts +8 -0
- package/lib/speechrecorder/session/progress.d.ts +4 -1
- package/lib/speechrecorderng.module.d.ts +2 -1
- package/lib/spr.config.d.ts +1 -0
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/intersection-observer.directive.d.ts +13 -0
- package/package.json +13 -13
- package/public-api.d.ts +1 -0
|
@@ -900,8 +900,8 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
900
900
|
this.changeDetectorRef.detectChanges();
|
|
901
901
|
}
|
|
902
902
|
}
|
|
903
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
904
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
903
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AudioRecorder, deps: [{ token: i1.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.MatDialog }, { token: i3.SessionService }, { token: i4.RecordingService }, { token: i5.SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
904
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: AudioRecorder, selector: "app-audiorecorder", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "recorderCombiPane", first: true, predicate: RecorderCombiPane, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
905
905
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
906
906
|
<app-warningbar [show]="isDefaultAudioTestSession()"
|
|
907
907
|
warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
@@ -959,9 +959,9 @@ export class AudioRecorder extends BasicRecorder {
|
|
|
959
959
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
960
960
|
</div>
|
|
961
961
|
</div>
|
|
962
|
-
`, isInline: true, styles: [":host{flex:2;background
|
|
962
|
+
`, isInline: true, styles: [":host{flex:2;background:#d3d3d3;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:#a9a9a9}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;flex:1 0 30%;align-items:center;text-align:center;align-content:center}\n", ".startstopscreenxs{width:100%;flex:1 0 100%;align-items:center;text-align:center;align-content:center}\n", ".bigbutton{vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap;letter-spacing:normal;min-width:70px;min-height:50px;border-radius:20px}\n", ".bigbuttonicon{min-width:50px;min-height:50px;font-size:50px}\n", ".bigbuttontext{font-weight:bolder;font-size:14px;vertical-align:middle}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: i10.StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: i11.RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { kind: "component", type: i10.UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: i10.WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { kind: "component", type: i10.ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { kind: "component", type: i12.WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }, { kind: "component", type: i13.RecorderCombiPane, selector: "app-recordercombipane", inputs: ["selectDisabled", "selectedRecordingFile", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["selectedRecordingFileChanged"] }] }); }
|
|
963
963
|
}
|
|
964
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
964
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AudioRecorder, decorators: [{
|
|
965
965
|
type: Component,
|
|
966
966
|
args: [{ selector: 'app-audiorecorder', providers: [SessionService], template: `
|
|
967
967
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
@@ -1021,7 +1021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
1021
1021
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
1022
1022
|
</div>
|
|
1023
1023
|
</div>
|
|
1024
|
-
`, styles: [":host{flex:2;background
|
|
1024
|
+
`, styles: [":host{flex:2;background:#d3d3d3;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:#a9a9a9}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;flex:1 0 30%;align-items:center;text-align:center;align-content:center}\n", ".startstopscreenxs{width:100%;flex:1 0 100%;align-items:center;text-align:center;align-content:center}\n", ".bigbutton{vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap;letter-spacing:normal;min-width:70px;min-height:50px;border-radius:20px}\n", ".bigbuttonicon{min-width:50px;min-height:50px;font-size:50px}\n", ".bigbuttontext{font-weight:bolder;font-size:14px;vertical-align:middle}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
|
|
1025
1025
|
}], ctorParameters: () => [{ type: i1.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.MatDialog }, { type: i3.SessionService }, { type: i4.RecordingService }, { type: i5.SpeechRecorderUploader }, { type: i14.SpeechRecorderConfig, decorators: [{
|
|
1026
1026
|
type: Inject,
|
|
1027
1027
|
args: [SPEECHRECORDER_CONFIG]
|
|
@@ -1162,12 +1162,12 @@ export class AudioRecorderComponent extends RecorderComponent {
|
|
|
1162
1162
|
ready() {
|
|
1163
1163
|
return this.dataSaved && !this.ar.isActive();
|
|
1164
1164
|
}
|
|
1165
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
1166
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
1165
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i15.ActivatedRoute }, { token: i15.Router }, { token: i0.ChangeDetectorRef }, { token: i3.SessionService }, { token: i16.ProjectService }, { token: i5.SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1166
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
1167
1167
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
1168
1168
|
`, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], dependencies: [{ kind: "component", type: AudioRecorder, selector: "app-audiorecorder", inputs: ["projectName", "dataSaved"] }] }); }
|
|
1169
1169
|
}
|
|
1170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
1170
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: AudioRecorderComponent, decorators: [{
|
|
1171
1171
|
type: Component,
|
|
1172
1172
|
args: [{ selector: 'app-audiorecorder-comp', providers: [SessionService], template: `
|
|
1173
1173
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
@@ -15,15 +15,15 @@ export class StatusDisplay {
|
|
|
15
15
|
this.statusMsg = 'Initialize...';
|
|
16
16
|
this.statusWaiting = false;
|
|
17
17
|
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
18
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
19
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
|
|
20
20
|
<p matTooltip="Status">
|
|
21
21
|
<mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
|
|
22
22
|
{{statusMsg}}
|
|
23
23
|
</p>
|
|
24
24
|
`, isInline: true, styles: [":host{display:inline;text-align:left;font-size:smaller}\n", "p{padding:4px;white-space:nowrap;display:inline-block}\n", "mat-progress-spinner{color:#000;display:inline-block}\n", "span{color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
25
25
|
}
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: StatusDisplay, decorators: [{
|
|
27
27
|
type: Component,
|
|
28
28
|
args: [{ selector: 'app-sprstatusdisplay', template: `
|
|
29
29
|
<p matTooltip="Status">
|
|
@@ -94,13 +94,13 @@ export class UploadStatus {
|
|
|
94
94
|
get status() {
|
|
95
95
|
return this._status;
|
|
96
96
|
}
|
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
97
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
98
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
|
|
99
99
|
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
100
100
|
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
101
101
|
`, isInline: true, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], dependencies: [{ kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
102
102
|
}
|
|
103
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: UploadStatus, decorators: [{
|
|
104
104
|
type: Component,
|
|
105
105
|
args: [{ selector: 'app-uploadstatus', template: `
|
|
106
106
|
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
@@ -117,12 +117,12 @@ export class ProgressDisplay {
|
|
|
117
117
|
constructor() {
|
|
118
118
|
this.progressMsg = '[itemcode]';
|
|
119
119
|
}
|
|
120
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
121
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
120
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
121
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
|
|
122
122
|
<p>{{progressMsg}}</p>
|
|
123
123
|
`, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] }); }
|
|
124
124
|
}
|
|
125
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ProgressDisplay, decorators: [{
|
|
126
126
|
type: Component,
|
|
127
127
|
args: [{ selector: 'app-sprprogressdisplay', template: `
|
|
128
128
|
<p>{{progressMsg}}</p>
|
|
@@ -219,8 +219,8 @@ export class TransportPanel extends ResponsiveComponent {
|
|
|
219
219
|
this.actions.stopNonrecordingAction.perform();
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
223
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
222
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: TransportPanel, deps: [{ token: i5.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
223
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
|
|
224
224
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
225
225
|
mat-raised-button class="transport-button-icon">
|
|
226
226
|
<span><mat-icon>chevron_left</mat-icon></span>
|
|
@@ -242,7 +242,7 @@ export class TransportPanel extends ResponsiveComponent {
|
|
|
242
242
|
|
|
243
243
|
`, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n", ".transport-button-icon{font-size:24px;vertical-align:middle;overflow:hidden;text-overflow:clip;white-space:nowrap}\n", ".transport-button-text{font-size:14px;letter-spacing:normal;vertical-align:baseline}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
|
|
244
244
|
}
|
|
245
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
245
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: TransportPanel, decorators: [{
|
|
246
246
|
type: Component,
|
|
247
247
|
args: [{ selector: 'app-sprtransport', template: `
|
|
248
248
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
@@ -281,12 +281,12 @@ export class WakeLockIndicator {
|
|
|
281
281
|
set screenLocked(screenLock) {
|
|
282
282
|
this._screenLocked = screenLock;
|
|
283
283
|
}
|
|
284
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
285
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
284
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
285
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
|
|
286
286
|
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
287
287
|
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
288
288
|
}
|
|
289
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: WakeLockIndicator, decorators: [{
|
|
290
290
|
type: Component,
|
|
291
291
|
args: [{ selector: 'app-wakelockindicator', template: `
|
|
292
292
|
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
@@ -308,12 +308,12 @@ export class ReadyStateIndicator {
|
|
|
308
308
|
get ready() {
|
|
309
309
|
return this._ready;
|
|
310
310
|
}
|
|
311
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
312
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
311
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
312
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
|
|
313
313
|
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
314
314
|
`, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
315
315
|
}
|
|
316
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
316
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ReadyStateIndicator, decorators: [{
|
|
317
317
|
type: Component,
|
|
318
318
|
args: [{ selector: 'app-readystateindicator', template: `
|
|
319
319
|
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
@@ -336,8 +336,8 @@ export class ControlPanel extends ResponsiveComponent {
|
|
|
336
336
|
get ready() {
|
|
337
337
|
return this._ready;
|
|
338
338
|
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
340
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
339
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ControlPanel, deps: [{ token: i5.BreakpointObserver }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
340
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
341
341
|
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
342
342
|
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
343
343
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
@@ -359,7 +359,7 @@ export class ControlPanel extends ResponsiveComponent {
|
|
|
359
359
|
</div>
|
|
360
360
|
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }] }); }
|
|
361
361
|
}
|
|
362
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ControlPanel, decorators: [{
|
|
363
363
|
type: Component,
|
|
364
364
|
args: [{ selector: 'app-sprcontrolpanel', template: `
|
|
365
365
|
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
@@ -2,15 +2,26 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@angular/common";
|
|
4
4
|
import * as i2 from "@angular/material/icon";
|
|
5
|
-
import * as i3 from "../../
|
|
5
|
+
import * as i3 from "../../ui/intersection-observer.directive";
|
|
6
6
|
export class Progress {
|
|
7
|
-
constructor() {
|
|
7
|
+
constructor(elRef) {
|
|
8
|
+
this.elRef = elRef;
|
|
8
9
|
this.items = undefined;
|
|
9
10
|
this.selectedItemIdx = 0;
|
|
10
11
|
this.enableDownload = false;
|
|
11
12
|
this.onRowSelect = new EventEmitter();
|
|
12
13
|
this.onShowDoneAction = new EventEmitter();
|
|
13
14
|
this.onDownloadDoneAction = new EventEmitter();
|
|
15
|
+
this.isObs = new IntersectionObserver(ise => {
|
|
16
|
+
//console.debug("Intersection changed: ");
|
|
17
|
+
ise.forEach((isee) => {
|
|
18
|
+
//console.debug("Intersection: "+isee.isIntersecting+' '+isee.intersectionRatio);
|
|
19
|
+
if (isee.intersectionRatio < 1) {
|
|
20
|
+
isee.target.scrollIntoView(false);
|
|
21
|
+
this.isObs.unobserve(isee.target);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}, { root: this.elRef.nativeElement });
|
|
14
25
|
}
|
|
15
26
|
set rowSelect(rowIdx) {
|
|
16
27
|
this.onRowSelect.emit(rowIdx);
|
|
@@ -40,8 +51,8 @@ export class Progress {
|
|
|
40
51
|
}
|
|
41
52
|
return cached;
|
|
42
53
|
}
|
|
43
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
44
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
54
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: Progress, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
55
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
|
|
45
56
|
|
|
46
57
|
<table class="mat-typography">
|
|
47
58
|
<thead>
|
|
@@ -56,7 +67,7 @@ export class Progress {
|
|
|
56
67
|
|
|
57
68
|
<tr *ngFor="let item of items; let itIdx=index;"
|
|
58
69
|
(click)="rowSelect=itIdx" [class.selRow]="itIdx===selectedItemIdx"
|
|
59
|
-
[
|
|
70
|
+
[updateObservation]="{observer:isObs,observe:(itIdx===selectedItemIdx)}">
|
|
60
71
|
<td>{{itIdx}}</td>
|
|
61
72
|
<td class="promptDescriptor">{{item.promptAsString}}</td>
|
|
62
73
|
<td>
|
|
@@ -69,9 +80,9 @@ export class Progress {
|
|
|
69
80
|
|
|
70
81
|
</tbody>
|
|
71
82
|
</table>
|
|
72
|
-
`, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background
|
|
83
|
+
`, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:#fff;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:#add8e6}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.IntersectionObserverDirective, selector: "[updateObservation]", inputs: ["updateObservation"] }] }); }
|
|
73
84
|
}
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: Progress, decorators: [{
|
|
75
86
|
type: Component,
|
|
76
87
|
args: [{ selector: 'app-sprprogress', template: `
|
|
77
88
|
|
|
@@ -88,7 +99,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
88
99
|
|
|
89
100
|
<tr *ngFor="let item of items; let itIdx=index;"
|
|
90
101
|
(click)="rowSelect=itIdx" [class.selRow]="itIdx===selectedItemIdx"
|
|
91
|
-
[
|
|
102
|
+
[updateObservation]="{observer:isObs,observe:(itIdx===selectedItemIdx)}">
|
|
92
103
|
<td>{{itIdx}}</td>
|
|
93
104
|
<td class="promptDescriptor">{{item.promptAsString}}</td>
|
|
94
105
|
<td>
|
|
@@ -101,8 +112,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
101
112
|
|
|
102
113
|
</tbody>
|
|
103
114
|
</table>
|
|
104
|
-
`, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background
|
|
105
|
-
}], propDecorators: { items: [{
|
|
115
|
+
`, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:#fff;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:#add8e6}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"] }]
|
|
116
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { items: [{
|
|
106
117
|
type: Input
|
|
107
118
|
}], selectedItemIdx: [{
|
|
108
119
|
type: Input
|
|
@@ -121,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
121
132
|
}], clickDownloadDone: [{
|
|
122
133
|
type: Output
|
|
123
134
|
}] } });
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9wcm9ncmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFBOzs7OztBQWdGaEYsTUFBTSxPQUFPLFFBQVE7SUFFbkIsWUFBb0IsS0FBZ0I7UUFBaEIsVUFBSyxHQUFMLEtBQUssQ0FBVztRQVkzQixVQUFLLEdBQXdCLFNBQVMsQ0FBQztRQUN2QyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUNwQixtQkFBYyxHQUFVLEtBQUssQ0FBQztRQUM3QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFNekMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQVM5Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBN0IxRCxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFBLEVBQUU7WUFDdkMsMENBQTBDO1lBQzFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRTtnQkFDbEIsaUZBQWlGO2dCQUNqRixJQUFHLElBQUksQ0FBQyxpQkFBaUIsR0FBQyxDQUFDLEVBQUM7b0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ25DO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUMsRUFBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO0lBQ3BDLENBQUM7SUFLRCxJQUNJLFNBQVMsQ0FBQyxNQUFhO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFHRCxJQUNJLFNBQVMsQ0FBQyxNQUFhO1FBQ3pCLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzdELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBR0QsSUFDSSxpQkFBaUIsQ0FBQyxNQUFhO1FBQ2pDLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBUztRQUM1QixJQUFJLE1BQU0sR0FBQyxJQUFJLENBQUM7UUFDaEIsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBQztZQUNuQixJQUFJLE9BQU8sR0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM3QixJQUFHLE9BQU8sR0FBQyxDQUFDLEVBQUM7Z0JBQ1gsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLElBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUU7b0JBQzNCLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OEdBckRVLFFBQVE7a0dBQVIsUUFBUSw4V0F4RVQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7OzJGQTRDVSxRQUFRO2tCQTNFcEIsU0FBUzsrQkFFRSxpQkFBaUIsWUFDakI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0QlQ7K0VBMERRLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFFSCxTQUFTO3NCQURaLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVILFNBQVM7c0JBRFosTUFBTTtnQkFRRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUgsaUJBQWlCO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuL2l0ZW0nO1xyXG5pbXBvcnQge0ludGVyc2VjdGlvbk9ic2VydmVyRGlyZWN0aXZlfSBmcm9tIFwiLi4vLi4vdWkvaW50ZXJzZWN0aW9uLW9ic2VydmVyLmRpcmVjdGl2ZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1zcHJwcm9ncmVzcycsXHJcbiAgdGVtcGxhdGU6IGBcclxuXHJcbiAgICA8dGFibGUgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGg+IzwvdGg+PCEtLTx0aD5Db2RlPC90aD4tLT5cclxuICAgICAgICA8dGg+UHJvbXB0PC90aD5cclxuICAgICAgICA8dGg+U3RhdHVzPC90aD5cclxuICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbXNcIj5cclxuXHJcbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaXRJZHg9aW5kZXg7XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInJvd1NlbGVjdD1pdElkeFwiIFtjbGFzcy5zZWxSb3ddPVwiaXRJZHg9PT1zZWxlY3RlZEl0ZW1JZHhcIlxyXG4gICAgICAgICAgICBbdXBkYXRlT2JzZXJ2YXRpb25dPVwie29ic2VydmVyOmlzT2JzLG9ic2VydmU6KGl0SWR4PT09c2VsZWN0ZWRJdGVtSWR4KX1cIj5cclxuICAgICAgICAgIDx0ZD57e2l0SWR4fX08L3RkPlxyXG4gICAgICAgICAgPHRkIGNsYXNzPVwicHJvbXB0RGVzY3JpcHRvclwiPnt7aXRlbS5wcm9tcHRBc1N0cmluZ319PC90ZD5cclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPG1hdC1pY29uICAqbmdJZj1cIml0ZW0uaXRlbURvbmUoKVwiPmRvbmU8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8IS0tPG1hdC1pY29uICpuZ0lmPVwibGF0ZXN0UmVjb3JkaW5nQXZhaWwoaXRlbSk9PT1mYWxzZVwiIHN0eWxlPVwiZm9udC1zaXplOjAuNmVtO3dpZHRoOjAuNmVtO2hlaWdodDowLjZlbVwiPmNsb3VkX2Rvd25sb2FkPC9tYXQtaWNvbj4tLT5cclxuXHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgOmhvc3Qge1xyXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xyXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xyXG4gICAgcGFkZGluZzogMTBwdDtcclxuICAgIC8qZmxleDogMC4xIDAgMzAwcHg7XHJcbiAgICAgIG1pbi13aWR0aDogMzAwcHg7ICovXHJcbiAgICBmbGV4OiAwLjEgMCBjb250ZW50O1xyXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XHJcbiAgICAvKiBXb3JrYXJvdW5kIGZvciBGaXJlZm94XHJcbiAgICBJZiB0aGUgcHJvZ3Jlc3MgdGFibGUgZ2V0cyBsb25nIChzY3JpcHQgd2l0aCBtYW55IGl0ZW1zKSBGRiBpbmNyZWFzZXMgdGhlIGhlaWdodCBvZiB0aGUgb3ZlcmZsb3cgcHJvZ3Jlc3NDb250YWluZXIgYW5kXHJcbiAgICB0aGUgd2hvbGUgYXBwIGRvZXMgbm90IGZpdCBpbnRvIHRoZSBwYWdlIGFueW1vcmUuIFRoZSBhcHAgb3ZlcmZsb3dzIGFuZCBzaG93cyBhIHZlcnRpY2FsIHNjcm9sbGJhciBmb3IgdGhlIHdob2xlIGFwcC5cclxuICAgIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODYzNjgzMi9maXJlZm94LW92ZXJmbG93LXktbm90LXdvcmtpbmctd2l0aC1uZXN0ZWQtZmxleGJveFxyXG4gICAgKi9cclxuICAgIC8qIG1pbi1oZWlnaHQ6MHB4OyAqL1xyXG4gICAgbWluLWhlaWdodDogMXB4O1xyXG4gIH1gLFxyXG4gICAgICBgdGFibGUge1xyXG4gICAgICAgICAgICAgbWluLWhlaWdodDogMXB4O1xyXG4gICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuICAgICAgICAgICAgICAgICAvKiBUYWJsZXMgZG8gbm90IGhhdmUgYSBuYXR1cmFsIG1pbiBzaXplICovXHJcbiAgICAgICAgICAgICAgICAgLyptaW4td2lkdGg6IDMwMHB4OyAqL1xyXG4gICAgICAgXHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgICAgdGFibGUsIHRoLCB0ZCB7XHJcbiAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyZXk7XHJcbiAgICAgICAgICAgICBwYWRkaW5nOiAwLjVlbTtcclxuICAgICAgIFxyXG4gICAgICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgICAgIGAsIGBcclxuICAgICAgLnNlbFJvdyB7XHJcbiAgICAgICAgYmFja2dyb3VuZDogbGlnaHRibHVlO1xyXG4gICAgICB9XHJcbiAgICBgLGAucHJvbXB0RGVzY3JpcHRvcntcclxuXHJcbiAgICAgIG1heC13aWR0aDogMjAwcHg7XHJcbiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgfWBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3Mge1xyXG4gIGlzT2JzOkludGVyc2VjdGlvbk9ic2VydmVyO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6RWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5pc09icz1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaXNlPT57XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkludGVyc2VjdGlvbiBjaGFuZ2VkOiBcIik7XHJcbiAgICAgIGlzZS5mb3JFYWNoKChpc2VlKT0+e1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkludGVyc2VjdGlvbjogXCIraXNlZS5pc0ludGVyc2VjdGluZysnICcraXNlZS5pbnRlcnNlY3Rpb25SYXRpbyk7XHJcbiAgICAgICAgaWYoaXNlZS5pbnRlcnNlY3Rpb25SYXRpbzwxKXtcclxuICAgICAgICAgIGlzZWUudGFyZ2V0LnNjcm9sbEludG9WaWV3KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuaXNPYnMudW5vYnNlcnZlKGlzZWUudGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSx7cm9vdDp0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnR9KVxyXG4gIH1cclxuICBASW5wdXQoKSBpdGVtczogQXJyYXk8SXRlbT58dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1JZHggPSAwO1xyXG4gIEBJbnB1dCgpIGVuYWJsZURvd25sb2FkOiBib29sZWFuPWZhbHNlO1xyXG4gIEBPdXRwdXQoKSBvblJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHNldCByb3dTZWxlY3Qocm93SWR4Om51bWJlcil7XHJcbiAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQocm93SWR4KTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvblNob3dEb25lQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgc2V0IGNsaWNrRG9uZShyb3dJZHg6bnVtYmVyKXtcclxuICAgIGlmKHRoaXMuaXRlbXMgJiZ0aGlzLml0ZW1zW3Jvd0lkeF0gJiYgdGhpcy5pdGVtc1tyb3dJZHhdLnJlY3MpIHtcclxuICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHJvd0lkeCk7XHJcbiAgICAgIHRoaXMub25TaG93RG9uZUFjdGlvbi5lbWl0KHJvd0lkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25Eb3dubG9hZERvbmVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KClcclxuICBzZXQgY2xpY2tEb3dubG9hZERvbmUocm93SWR4Om51bWJlcil7XHJcbiAgICBpZih0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXNbcm93SWR4XSAmJiB0aGlzLml0ZW1zW3Jvd0lkeF0ucmVjcykge1xyXG4gICAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQocm93SWR4KTtcclxuICAgICAgdGhpcy5vbkRvd25sb2FkRG9uZUFjdGlvbi5lbWl0KHJvd0lkeCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsYXRlc3RSZWNvcmRpbmdBdmFpbChpdGVtOkl0ZW0pOmJvb2xlYW58bnVsbHtcclxuICAgIGxldCBjYWNoZWQ9bnVsbDtcclxuICAgIGlmKGl0ZW0gJiYgaXRlbS5yZWNzKXtcclxuICAgICAgbGV0IHJlY3NMZW49aXRlbS5yZWNzLmxlbmd0aDtcclxuICAgICAgaWYocmVjc0xlbj4wKXtcclxuICAgICAgICBsZXQgcmY9aXRlbS5yZWNzW3JlY3NMZW4tMV07XHJcbiAgICAgICAgaWYocmYgJiYgcmYuc2VydmVyUGVyc2lzdGVkKSB7XHJcbiAgICAgICAgICBjYWNoZWQgPSAocmYuYXVkaW9EYXRhSG9sZGVyICE9IG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNhY2hlZDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|