ionic-logging-viewer 15.0.0 → 17.0.0

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.
@@ -1,141 +0,0 @@
1
- import { Component, Input } from "@angular/core";
2
- import { ModalController, Platform, AlertController } from "@ionic/angular";
3
- import { LoggingService } from "ionic-logging-service";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@ionic/angular";
6
- import * as i2 from "ionic-logging-service";
7
- import * as i3 from "@angular/common";
8
- import * as i4 from "../logging-viewer/logging-viewer.component";
9
- import * as i5 from "../logging-viewer-search/logging-viewer-search.component";
10
- import * as i6 from "../logging-viewer-levels/logging-viewer-levels.component";
11
- /**
12
- * Ionic modal containing [LoggingViewerComponent](LoggingViewerComponent.html),
13
- * [LoggingViewerLevelsComponent](LoggingViewerLevelsComponent.html) and
14
- * [LoggingViewerSearchComponent](LoggingViewerSearchComponent.html).
15
- */
16
- export class LoggingViewerModalComponent {
17
- /**
18
- * Creates a new instance of the component.
19
- */
20
- constructor(platform, alertController, modalController, loggingService) {
21
- this.alertController = alertController;
22
- this.modalController = modalController;
23
- this.loggingService = loggingService;
24
- this.logger = loggingService.getLogger("Ionic.Logging.Viewer.Modal.Component");
25
- const methodName = "ctor";
26
- this.logger.entry(methodName);
27
- this.isAndroid = platform.is("android");
28
- this.logger.exit(methodName);
29
- }
30
- /**
31
- * Initializes the LoggingViewerModalComponent.
32
- * It configures the supported translations.
33
- */
34
- ngOnInit() {
35
- // prepare translations
36
- this.translations = {};
37
- this.translations[LoggingViewerModalComponent.languageEn] = {
38
- cancel: "Cancel",
39
- confirmDelete: "Delete all log messages?",
40
- ok: "Ok",
41
- searchPlaceholder: "Search",
42
- title: "Logging",
43
- };
44
- this.translations[LoggingViewerModalComponent.languageDe] = {
45
- cancel: "Abbrechen",
46
- confirmDelete: "Alle Logs löschen?",
47
- ok: "Ok",
48
- searchPlaceholder: "Suchen",
49
- title: "Logging",
50
- };
51
- }
52
- /**
53
- * Eventhandler called by Ionic when the modal is opened.
54
- */
55
- ionViewDidEnter() {
56
- const methodName = "ionViewDidEnter";
57
- this.logger.entry(methodName);
58
- this.logger.exit(methodName);
59
- }
60
- /**
61
- * Eventhandler called when the cancel button is clicked.
62
- */
63
- async onClose() {
64
- const methodName = "onClose";
65
- this.logger.entry(methodName);
66
- await this.modalController.dismiss();
67
- this.logger.exit(methodName);
68
- }
69
- /**
70
- * Eventhandler called when the clear button is clicked.
71
- */
72
- async onClearLogs() {
73
- const methodName = "onClearLogs";
74
- this.logger.entry(methodName);
75
- const alert = await this.alertController.create({
76
- header: this.getTranslation().confirmDelete,
77
- buttons: [
78
- {
79
- text: this.getTranslation().cancel,
80
- role: "cancel",
81
- cssClass: "secondary"
82
- },
83
- {
84
- text: this.getTranslation().ok,
85
- handler: () => {
86
- this.clearLogs();
87
- }
88
- },
89
- ]
90
- });
91
- await alert.present();
92
- this.logger.exit(methodName);
93
- }
94
- /**
95
- * Clear logs.
96
- */
97
- clearLogs() {
98
- if (this.localStorageKeys) {
99
- for (const localStorageKey of this.localStorageKeys.split(",")) {
100
- this.loggingService.removeLogMessagesFromLocalStorage(localStorageKey);
101
- }
102
- }
103
- else {
104
- this.loggingService.removeLogMessages();
105
- }
106
- }
107
- /**
108
- * Helper method returning the current translation:
109
- * - the property translation if defined
110
- * - the translation according property language if valid
111
- * - English translation, otherwise
112
- */
113
- getTranslation() {
114
- if (typeof this.translation !== "undefined") {
115
- return this.translation;
116
- }
117
- else if (typeof this.language !== "undefined" && typeof this.translations[this.language] === "object") {
118
- return this.translations[this.language];
119
- }
120
- else {
121
- return this.translations[LoggingViewerModalComponent.languageEn];
122
- }
123
- }
124
- }
125
- LoggingViewerModalComponent.languageEn = "en";
126
- LoggingViewerModalComponent.languageDe = "de";
127
- LoggingViewerModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: LoggingViewerModalComponent, deps: [{ token: i1.Platform }, { token: i1.AlertController }, { token: i1.ModalController }, { token: i2.LoggingService }], target: i0.ɵɵFactoryTarget.Component });
128
- LoggingViewerModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: LoggingViewerModalComponent, selector: "ionic-logging-viewer-modal", inputs: { language: "language", translation: "translation", localStorageKeys: "localStorageKeys", allowClearLogs: "allowClearLogs" }, ngImport: i0, template: "<ion-header>\n\t<ion-toolbar color=primary>\n\t\t<ion-title>{{ getTranslation().title }}</ion-title>\n\t\t<ion-buttons slot=\"start\">\n\t\t\t<ion-button *ngIf=\"!isAndroid\" (click)=\"onClose()\">\n\t\t\t\t{{ getTranslation().cancel }}\n\t\t\t</ion-button>\n\t\t\t<ion-button *ngIf=\"isAndroid\" icon-only (click)=\"onClose()\">\n\t\t\t\t<ion-icon name=\"md-close\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-search [placeholder]=\"getTranslation().searchPlaceholder\"></ionic-logging-viewer-search>\n\t\t<ion-buttons slot=\"end\" *ngIf=\"allowClearLogs !== false\" class=\"clearLogs\">\n\t\t\t<ion-button (click)=\"onClearLogs()\">\n\t\t\t\t<ion-icon name=\"trash-outline\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-levels></ionic-logging-viewer-levels>\n\t</ion-toolbar>\n</ion-header>\n<ion-content>\n\t<ionic-logging-viewer [localStorageKeys]=\"localStorageKeys\"></ionic-logging-viewer>\n</ion-content>", styles: ["ionic-logging-viewer-levels{width:100%;padding-left:12px;padding-right:12px}.clearLogs{padding-top:3px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.LoggingViewerComponent, selector: "ionic-logging-viewer", inputs: ["localStorageKeys"] }, { kind: "component", type: i5.LoggingViewerSearchComponent, selector: "ionic-logging-viewer-search", inputs: ["placeholder"] }, { kind: "component", type: i6.LoggingViewerLevelsComponent, selector: "ionic-logging-viewer-levels" }] });
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: LoggingViewerModalComponent, decorators: [{
130
- type: Component,
131
- args: [{ selector: "ionic-logging-viewer-modal", template: "<ion-header>\n\t<ion-toolbar color=primary>\n\t\t<ion-title>{{ getTranslation().title }}</ion-title>\n\t\t<ion-buttons slot=\"start\">\n\t\t\t<ion-button *ngIf=\"!isAndroid\" (click)=\"onClose()\">\n\t\t\t\t{{ getTranslation().cancel }}\n\t\t\t</ion-button>\n\t\t\t<ion-button *ngIf=\"isAndroid\" icon-only (click)=\"onClose()\">\n\t\t\t\t<ion-icon name=\"md-close\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-search [placeholder]=\"getTranslation().searchPlaceholder\"></ionic-logging-viewer-search>\n\t\t<ion-buttons slot=\"end\" *ngIf=\"allowClearLogs !== false\" class=\"clearLogs\">\n\t\t\t<ion-button (click)=\"onClearLogs()\">\n\t\t\t\t<ion-icon name=\"trash-outline\"></ion-icon>\n\t\t\t</ion-button>\n\t\t</ion-buttons>\n\t</ion-toolbar>\n\t<ion-toolbar>\n\t\t<ionic-logging-viewer-levels></ionic-logging-viewer-levels>\n\t</ion-toolbar>\n</ion-header>\n<ion-content>\n\t<ionic-logging-viewer [localStorageKeys]=\"localStorageKeys\"></ionic-logging-viewer>\n</ion-content>", styles: ["ionic-logging-viewer-levels{width:100%;padding-left:12px;padding-right:12px}.clearLogs{padding-top:3px}\n"] }]
132
- }], ctorParameters: function () { return [{ type: i1.Platform }, { type: i1.AlertController }, { type: i1.ModalController }, { type: i2.LoggingService }]; }, propDecorators: { language: [{
133
- type: Input
134
- }], translation: [{
135
- type: Input
136
- }], localStorageKeys: [{
137
- type: Input
138
- }], allowClearLogs: [{
139
- type: Input
140
- }] } });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy12aWV3ZXItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uaWMtbG9nZ2luZy12aWV3ZXIvc3JjL2xpYi9sb2dnaW5nLXZpZXdlci1tb2RhbC9sb2dnaW5nLXZpZXdlci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb25pYy1sb2dnaW5nLXZpZXdlci9zcmMvbGliL2xvZ2dpbmctdmlld2VyLW1vZGFsL2xvZ2dpbmctdmlld2VyLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7QUFJL0Q7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTywyQkFBMkI7SUF3Q3ZDOztPQUVHO0lBQ0gsWUFDQyxRQUFrQixFQUNWLGVBQWdDLEVBQ2hDLGVBQWdDLEVBQ2hDLGNBQThCO1FBRjlCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBRXRDLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU5QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLE1B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QUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDeEcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN4QzthQUFNO1lBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0YsQ0FBQzs7QUE1SmMsc0NBQVUsR0FBRyxJQUFLLENBQUE7QUFDbEIsc0NBQVUsR0FBRyxJQUFLLENBQUE7d0hBSHJCLDJCQUEyQjs0R0FBM0IsMkJBQTJCLHdNQ2xCeEMsK2hDQTBCYzsyRkRSRCwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0MsNEJBQTRCO3dMQWMvQixRQUFRO3NCQURkLEtBQUs7Z0JBUUMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBT0MsY0FBYztzQkFEcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciwgUGxhdGZvcm0sIEFsZXJ0Q29udHJvbGxlciB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiO1xuXG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmdTZXJ2aWNlIH0gZnJvbSBcImlvbmljLWxvZ2dpbmctc2VydmljZVwiO1xuXG5pbXBvcnQgeyBMb2dnaW5nVmlld2VyVHJhbnNsYXRpb24gfSBmcm9tIFwiLi4vbG9nZ2luZy12aWV3ZXItdHJhbnNsYXRpb24ubW9kZWxcIjtcblxuLyoqXG4gKiBJb25pYyBtb2RhbCBjb250YWluaW5nIFtMb2dnaW5nVmlld2VyQ29tcG9uZW50XShMb2dnaW5nVmlld2VyQ29tcG9uZW50Lmh0bWwpLFxuICogW0xvZ2dpbmdWaWV3ZXJMZXZlbHNDb21wb25lbnRdKExvZ2dpbmdWaWV3ZXJMZXZlbHNDb21wb25lbnQuaHRtbCkgYW5kXG4gKiBbTG9nZ2luZ1ZpZXdlclNlYXJjaENvbXBvbmVudF0oTG9nZ2luZ1ZpZXdlclNlYXJjaENvbXBvbmVudC5odG1sKS5cbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImlvbmljLWxvZ2dpbmctdmlld2VyLW1vZGFsXCIsXG5cdHRlbXBsYXRlVXJsOiBcIi4vbG9nZ2luZy12aWV3ZXItbW9kYWwuY29tcG9uZW50Lmh0bWxcIixcblx0c3R5bGVVcmxzOiBbXCIuL2xvZ2dpbmctdmlld2VyLW1vZGFsLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIExvZ2dpbmdWaWV3ZXJNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblx0cHJpdmF0ZSBzdGF0aWMgbGFuZ3VhZ2VFbiA9IFwiZW5cIjtcblx0cHJpdmF0ZSBzdGF0aWMgbGFuZ3VhZ2VEZSA9IFwiZGVcIjtcblxuXHQvKipcblx0ICogTGFuZ3VhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1vZGFsLlxuXHQgKiBDdXJyZW50bHkgc3VwcG9ydGVkOiBlbiwgZGVcblx0ICovXG5cdEBJbnB1dCgpXG5cdHB1YmxpYyBsYW5ndWFnZTogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBUcmFuc2xhdGlvbiB0byBiZSB1c2VkIGZvciB0aGUgbW9kYWwuXG5cdCAqIElmIHNwZWNpZmllZCwgdGhlIGxhbmd1YWdlIGlzIGlnbm9yZWQuXG5cdCAqL1xuXHRASW5wdXQoKVxuXHRwdWJsaWMgdHJhbnNsYXRpb246IExvZ2dpbmdWaWV3ZXJUcmFuc2xhdGlvbjtcblxuXHQvKipcblx0ICogQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbG9jYWxTdG9yYWdlS2V5cy4gSWYgc2V0LCB0aGUgbG9ncyBnZXQgbG9hZGVkIGZyb20gbG9jYWxTdG9yYWdlIGluc3RlYWQgb2YgbWVtb3J5LlxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGxvY2FsU3RvcmFnZUtleXM6IHN0cmluZztcblxuXHQvKipcblx0ICogRmxhZyBzaG93aW5nIGEgZGVsZXRlIGJ1dHRvbiwgd2hpY2ggcmVtb3ZlcyBhbGwgZXhpc3RpbmcgbG9nIG1lc3NhZ2VzLlxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGFsbG93Q2xlYXJMb2dzOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBGbGFnIGNvbnRyb2xsaW5nIHdoaWNoIGNsb3NlIGJ1dHRvbiB3aWxsIGJlIHNob3duLlxuXHQgKi9cblx0cHVibGljIGlzQW5kcm9pZDogYm9vbGVhbjtcblxuXHRwcml2YXRlIGxvZ2dlcjogTG9nZ2VyO1xuXG5cdHByaXZhdGUgdHJhbnNsYXRpb25zOiB7IFtsYW5ndWFnZTogc3RyaW5nXTogTG9nZ2luZ1ZpZXdlclRyYW5zbGF0aW9uIH07XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudC5cblx0ICovXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHBsYXRmb3JtOiBQbGF0Zm9ybSxcblx0XHRwcml2YXRlIGFsZXJ0Q29udHJvbGxlcjogQWxlcnRDb250cm9sbGVyLFxuXHRcdHByaXZhdGUgbW9kYWxDb250cm9sbGVyOiBNb2RhbENvbnRyb2xsZXIsXG5cdFx0cHJpdmF0ZSBsb2dnaW5nU2VydmljZTogTG9nZ2luZ1NlcnZpY2UpIHtcblxuXHRcdHRoaXMubG9nZ2VyID0gbG9nZ2luZ1NlcnZpY2UuZ2V0TG9nZ2VyKFwiSW9uaWMuTG9nZ2luZy5WaWV3ZXIuTW9kYWwuQ29tcG9uZW50XCIpO1xuXHRcdGNvbnN0IG1ldGhvZE5hbWUgPSBcImN0b3JcIjtcblx0XHR0aGlzLmxvZ2dlci5lbnRyeShtZXRob2ROYW1lKTtcblxuXHRcdHRoaXMuaXNBbmRyb2lkID0gcGxhdGZvcm0uaXMoXCJhbmRyb2lkXCIpO1xuXG5cdFx0dGhpcy5sb2dnZXIuZXhpdChtZXRob2ROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgTG9nZ2luZ1ZpZXdlck1vZGFsQ29tcG9uZW50LlxuXHQgKiBJdCBjb25maWd1cmVzIHRoZSBzdXBwb3J0ZWQgdHJhbnNsYXRpb25zLlxuXHQgKi9cblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdC8vIHByZXBhcmUgdHJhbnNsYXRpb25zXG5cdFx0dGhpcy50cmFuc2xhdGlvbnMgPSB7fTtcblx0XHR0aGlzLnRyYW5zbGF0aW9uc1tMb2dnaW5nVmlld2VyTW9kYWxDb21wb25lbnQubGFuZ3VhZ2VFbl0gPSB7XG5cdFx0XHRjYW5jZWw6IFwiQ2FuY2VsXCIsXG5cdFx0XHRjb25maXJtRGVsZXRlOiBcIkRlbGV0ZSBhbGwgbG9nIG1lc3NhZ2VzP1wiLFxuXHRcdFx0b2s6IFwiT2tcIixcblx0XHRcdHNlYXJjaFBsYWNlaG9sZGVyOiBcIlNlYXJjaFwiLFxuXHRcdFx0dGl0bGU6IFwiTG9nZ2luZ1wiLFxuXHRcdH07XG5cdFx0dGhpcy50cmFuc2xhdGlvbnNbTG9nZ2luZ1ZpZXdlck1vZGFsQ29tcG9uZW50Lmxhbmd1YWdlRGVdID0ge1xuXHRcdFx0Y2FuY2VsOiBcIkFiYnJlY2hlblwiLFxuXHRcdFx0Y29uZmlybURlbGV0ZTogXCJBbGxlIExvZ3MgbMO2c2NoZW4/XCIsXG5cdFx0XHRvazogXCJPa1wiLFxuXHRcdFx0c2VhcmNoUGxhY2Vob2xkZXI6IFwiU3VjaGVuXCIsXG5cdFx0XHR0aXRsZTogXCJMb2dnaW5nXCIsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudGhhbmRsZXIgY2FsbGVkIGJ5IElvbmljIHdoZW4gdGhlIG1vZGFsIGlzIG9wZW5lZC5cblx0ICovXG5cdHB1YmxpYyBpb25WaWV3RGlkRW50ZXIoKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0aG9kTmFtZSA9IFwiaW9uVmlld0RpZEVudGVyXCI7XG5cdFx0dGhpcy5sb2dnZXIuZW50cnkobWV0aG9kTmFtZSk7XG5cblx0XHR0aGlzLmxvZ2dlci5leGl0KG1ldGhvZE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50aGFuZGxlciBjYWxsZWQgd2hlbiB0aGUgY2FuY2VsIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIG9uQ2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbWV0aG9kTmFtZSA9IFwib25DbG9zZVwiO1xuXHRcdHRoaXMubG9nZ2VyLmVudHJ5KG1ldGhvZE5hbWUpO1xuXG5cdFx0YXdhaXQgdGhpcy5tb2RhbENvbnRyb2xsZXIuZGlzbWlzcygpO1xuXG5cdFx0dGhpcy5sb2dnZXIuZXhpdChtZXRob2ROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIGNsZWFyIGJ1dHRvbiBpcyBjbGlja2VkLlxuXHQgKi9cblx0cHVibGljIGFzeW5jIG9uQ2xlYXJMb2dzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1ldGhvZE5hbWUgPSBcIm9uQ2xlYXJMb2dzXCI7XG5cdFx0dGhpcy5sb2dnZXIuZW50cnkobWV0aG9kTmFtZSk7XG5cblx0XHRjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG5cdFx0XHRoZWFkZXI6IHRoaXMuZ2V0VHJhbnNsYXRpb24oKS5jb25maXJtRGVsZXRlLFxuXHRcdFx0YnV0dG9uczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGV4dDogdGhpcy5nZXRUcmFuc2xhdGlvbigpLmNhbmNlbCxcblx0XHRcdFx0XHRyb2xlOiBcImNhbmNlbFwiLFxuXHRcdFx0XHRcdGNzc0NsYXNzOiBcInNlY29uZGFyeVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0ZXh0OiB0aGlzLmdldFRyYW5zbGF0aW9uKCkub2ssXG5cdFx0XHRcdFx0aGFuZGxlcjogKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5jbGVhckxvZ3MoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRdXG5cdFx0fSk7XG5cdFx0YXdhaXQgYWxlcnQucHJlc2VudCgpO1xuXG5cdFx0dGhpcy5sb2dnZXIuZXhpdChtZXRob2ROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbGVhciBsb2dzLlxuXHQgKi9cblx0cHVibGljIGNsZWFyTG9ncygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5sb2NhbFN0b3JhZ2VLZXlzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGxvY2FsU3RvcmFnZUtleSBvZiB0aGlzLmxvY2FsU3RvcmFnZUtleXMuc3BsaXQoXCIsXCIpKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2luZ1NlcnZpY2UucmVtb3ZlTG9nTWVzc2FnZXNGcm9tTG9jYWxTdG9yYWdlKGxvY2FsU3RvcmFnZUtleSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubG9nZ2luZ1NlcnZpY2UucmVtb3ZlTG9nTWVzc2FnZXMoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIG1ldGhvZCByZXR1cm5pbmcgdGhlIGN1cnJlbnQgdHJhbnNsYXRpb246XG5cdCAqIC0gdGhlIHByb3BlcnR5IHRyYW5zbGF0aW9uIGlmIGRlZmluZWRcblx0ICogLSB0aGUgdHJhbnNsYXRpb24gYWNjb3JkaW5nIHByb3BlcnR5IGxhbmd1YWdlIGlmIHZhbGlkXG5cdCAqIC0gRW5nbGlzaCB0cmFuc2xhdGlvbiwgb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgZ2V0VHJhbnNsYXRpb24oKTogTG9nZ2luZ1ZpZXdlclRyYW5zbGF0aW9uIHtcblx0XHRpZiAodHlwZW9mIHRoaXMudHJhbnNsYXRpb24gIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHJldHVybiB0aGlzLnRyYW5zbGF0aW9uO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHRoaXMubGFuZ3VhZ2UgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRoaXMudHJhbnNsYXRpb25zW3RoaXMubGFuZ3VhZ2VdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGlvbnNbdGhpcy5sYW5ndWFnZV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnRyYW5zbGF0aW9uc1tMb2dnaW5nVmlld2VyTW9kYWxDb21wb25lbnQubGFuZ3VhZ2VFbl07XG5cdFx0fVxuXHR9XG59XG4iLCI8aW9uLWhlYWRlcj5cblx0PGlvbi10b29sYmFyIGNvbG9yPXByaW1hcnk+XG5cdFx0PGlvbi10aXRsZT57eyBnZXRUcmFuc2xhdGlvbigpLnRpdGxlIH19PC9pb24tdGl0bGU+XG5cdFx0PGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuXHRcdFx0PGlvbi1idXR0b24gKm5nSWY9XCIhaXNBbmRyb2lkXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuXHRcdFx0XHR7eyBnZXRUcmFuc2xhdGlvbigpLmNhbmNlbCB9fVxuXHRcdFx0PC9pb24tYnV0dG9uPlxuXHRcdFx0PGlvbi1idXR0b24gKm5nSWY9XCJpc0FuZHJvaWRcIiBpY29uLW9ubHkgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxuXHRcdFx0XHQ8aW9uLWljb24gbmFtZT1cIm1kLWNsb3NlXCI+PC9pb24taWNvbj5cblx0XHRcdDwvaW9uLWJ1dHRvbj5cblx0XHQ8L2lvbi1idXR0b25zPlxuXHQ8L2lvbi10b29sYmFyPlxuXHQ8aW9uLXRvb2xiYXI+XG5cdFx0PGlvbmljLWxvZ2dpbmctdmlld2VyLXNlYXJjaCBbcGxhY2Vob2xkZXJdPVwiZ2V0VHJhbnNsYXRpb24oKS5zZWFyY2hQbGFjZWhvbGRlclwiPjwvaW9uaWMtbG9nZ2luZy12aWV3ZXItc2VhcmNoPlxuXHRcdDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCIgKm5nSWY9XCJhbGxvd0NsZWFyTG9ncyAhPT0gZmFsc2VcIiBjbGFzcz1cImNsZWFyTG9nc1wiPlxuXHRcdFx0PGlvbi1idXR0b24gKGNsaWNrKT1cIm9uQ2xlYXJMb2dzKClcIj5cblx0XHRcdFx0PGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCI+PC9pb24taWNvbj5cblx0XHRcdDwvaW9uLWJ1dHRvbj5cblx0XHQ8L2lvbi1idXR0b25zPlxuXHQ8L2lvbi10b29sYmFyPlxuXHQ8aW9uLXRvb2xiYXI+XG5cdFx0PGlvbmljLWxvZ2dpbmctdmlld2VyLWxldmVscz48L2lvbmljLWxvZ2dpbmctdmlld2VyLWxldmVscz5cblx0PC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cbjxpb24tY29udGVudD5cblx0PGlvbmljLWxvZ2dpbmctdmlld2VyIFtsb2NhbFN0b3JhZ2VLZXlzXT1cImxvY2FsU3RvcmFnZUtleXNcIj48L2lvbmljLWxvZ2dpbmctdmlld2VyPlxuPC9pb24tY29udGVudD4iXX0=