@sumaris-net/ngx-components 18.6.0 → 18.6.2

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.
@@ -20,8 +20,9 @@ export class AppMarkdownModal {
20
20
  debug;
21
21
  title;
22
22
  showError = true;
23
- markdownContent;
24
- markdownUrl;
23
+ canPrint = false;
24
+ data;
25
+ src;
25
26
  static async show(modalCtrl, options) {
26
27
  const modal = await modalCtrl.create({
27
28
  component: AppMarkdownModal,
@@ -56,20 +57,22 @@ export class AppMarkdownModal {
56
57
  }
57
58
  }
58
59
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, deps: [{ token: i0.Injector }, { token: i1.ModalController }, { token: i2.PlatformService }, { token: i3.LocalSettingsService }, { token: i4.TranslateService }, { token: i5.NetworkService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
59
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", markdownContent: "markdownContent", markdownUrl: "markdownUrl" }, ngImport: i0, template: "@if (title) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", 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.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: i7.AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", canPrint: "canPrint", data: "data", src: "src" }, ngImport: i0, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"src\"\n [data]=\"data\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", 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.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i6.ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: i7.AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
60
61
  }
61
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, decorators: [{
62
63
  type: Component,
63
- args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
64
+ args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"src\"\n [data]=\"data\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
64
65
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.ModalController }, { type: i2.PlatformService }, { type: i3.LocalSettingsService }, { type: i4.TranslateService }, { type: i5.NetworkService }, { type: i0.ChangeDetectorRef }], propDecorators: { debug: [{
65
66
  type: Input
66
67
  }], title: [{
67
68
  type: Input
68
69
  }], showError: [{
69
70
  type: Input
70
- }], markdownContent: [{
71
+ }], canPrint: [{
71
72
  type: Input
72
- }], markdownUrl: [{
73
+ }], data: [{
74
+ type: Input
75
+ }], src: [{
73
76
  type: Input
74
77
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24ubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXJrZG93bi9tYXJrZG93bi5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVksS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFxQnZHLE1BQU0sT0FBTyxnQkFBZ0I7SUF3QmY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE3QkYsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLEtBQUssR0FBVyxTQUFTLENBQUM7SUFFM0IsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixlQUFlLENBQVM7SUFDeEIsV0FBVyxDQUFTO0lBRTdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQTBCLEVBQUUsT0FBZ0M7UUFDNUUsTUFBTSxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ25DLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsY0FBYyxFQUFFLE9BQU87WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUksYUFBYTtTQUM3QyxDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0QixPQUFPLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFDWSxRQUFrQixFQUNsQixRQUF5QixFQUN6QixRQUF5QixFQUN6QixRQUE4QixFQUM5QixTQUEyQixFQUMzQixPQUF1QixFQUN2QixFQUFxQjtRQU5yQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRS9CLHFCQUFxQjtRQUNyQix1Q0FBdUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFTO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWSxFQUFFLE9BQTJCO1FBQzlDLElBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsQ0FBQztJQUNILENBQUM7d0dBL0NVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLDhMQ3JCN0Isdy9CQStCQTs7NEZEVmEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLG9CQUFvQixtQkFFYix1QkFBdUIsQ0FBQyxNQUFNO3dRQU10QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdG9yLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwTWFya2Rvd25Db250ZW50IH0gZnJvbSAnLi9tYXJrZG93bi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcE1hcmtkb3duTW9kYWxPcHRpb25zIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIG1hcmtkb3duQ29udGVudD86IHN0cmluZztcbiAgbWFya2Rvd25Vcmw/OiBzdHJpbmc7XG4gIHNob3dFcnJvcj86IGJvb2xlYW47XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFya2Rvd24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24ubW9kYWwuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBNYXJrZG93bk1vZGFsIGltcGxlbWVudHMgQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMge1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBlcnJvcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpIGRlYnVnOiBib29sZWFuO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93RXJyb3IgPSB0cnVlO1xuICBASW5wdXQoKSBtYXJrZG93bkNvbnRlbnQ6IHN0cmluZztcbiAgQElucHV0KCkgbWFya2Rvd25Vcmw6IHN0cmluZztcblxuICBzdGF0aWMgYXN5bmMgc2hvdyhtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlciwgb3B0aW9uczogQXBwTWFya2Rvd25Nb2RhbE9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IG1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBNYXJrZG93bk1vZGFsLFxuICAgICAgY29tcG9uZW50UHJvcHM6IG9wdGlvbnMsXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6IG9wdGlvbnM/LmNzc0NsYXNzIHx8ICdtb2RhbC1sYXJnZScsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG5cbiAgICByZXR1cm4gbW9kYWwub25XaWxsRGlzbWlzcygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgdmlld0N0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETzogZm9yIERFViBvbmx5XG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBjbG9zZShfPzogRXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q3RybC5kaXNtaXNzKCk7XG4gIH1cblxuICBnb0JhY2soZXZlbnQ6IEV2ZW50LCBjb250ZW50OiBBcHBNYXJrZG93bkNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudD8uY2FuR29CYWNrKSB7XG4gICAgICBjb250ZW50LmdvQmFjayhldmVudCk7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAodGl0bGUpIHtcbiAgPGFwcC1tb2RhbC10b29sYmFyIGNvbG9yPVwibGlnaHRcIiBbdGl0bGVdPVwidGl0bGUgfCB0cmFuc2xhdGVcIiAoY2FuY2VsKT1cImNsb3NlKCRldmVudClcIj5cbiAgICBAaWYgKGNvbnRlbnQuY2FuR29CYWNrKSB7XG4gICAgICA8aW9uLWJ1dHRvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImdvQmFjaygkZXZlbnQsIGNvbnRlbnQpXCIgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICB9XG4gIDwvYXBwLW1vZGFsLXRvb2xiYXI+XG59XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxhcHAtbWFya2Rvd24tY29udGVudFxuICAgICNjb250ZW50XG4gICAgW3NyY109XCJtYXJrZG93blVybFwiXG4gICAgW2RhdGFdPVwibWFya2Rvd25Db250ZW50XCJcbiAgICBbc2hvd0Vycm9yXT1cInNob3dFcnJvclwiXG4gICAgW2RlYnVnXT1cImRlYnVnXCJcbiAgICBbdXBkYXRlUm91dGVMb2NhdGlvbl09XCJmYWxzZVwiXG4gID48L2FwcC1tYXJrZG93bi1jb250ZW50PlxuPC9pb24tY29udGVudD5cblxuPGlvbi1mb290ZXIgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cInNvbGlkXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIChjbGljayk9XCJjbG9zZSgpXCI+e3sgJ0NPTU1PTi5CVE5fQ0xPU0UnIHwgdHJhbnNsYXRlIH19PC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWZvb3Rlcj5cbiJdfQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24ubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXJrZG93bi9tYXJrZG93bi5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVksS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFzQnZHLE1BQU0sT0FBTyxnQkFBZ0I7SUF5QmY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE5QkYsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNmLEtBQUssR0FBVyxTQUFTLENBQUM7SUFFM0IsS0FBSyxDQUFVO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLElBQUksQ0FBUztJQUNiLEdBQUcsQ0FBUztJQUVyQixNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUEwQixFQUFFLE9BQWdDO1FBQzVFLE1BQU0sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQzNCLGNBQWMsRUFBRSxPQUFPO1lBQ3ZCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxJQUFJLGFBQWE7U0FDN0MsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFdEIsT0FBTyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQ1ksUUFBa0IsRUFDbEIsUUFBeUIsRUFDekIsUUFBeUIsRUFDekIsUUFBOEIsRUFDOUIsU0FBMkIsRUFDM0IsT0FBdUIsRUFDdkIsRUFBcUI7UUFOckIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFzQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUUvQixxQkFBcUI7UUFDckIsdUNBQXVDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsQ0FBUztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVksRUFBRSxPQUEyQjtRQUM5QyxJQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO3dHQWhEVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiw4S0N0QjdCLHN0Q0FvQ0E7OzRGRGRhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxvQkFBb0IsbUJBRWIsdUJBQXVCLENBQUMsTUFBTTt3UUFNdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcE1hcmtkb3duQ29udGVudCB9IGZyb20gJy4vbWFya2Rvd24uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBNYXJrZG93bk1vZGFsT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkYXRhPzogc3RyaW5nO1xuICBzcmM/OiBzdHJpbmc7XG4gIHNob3dFcnJvcj86IGJvb2xlYW47XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuICBjYW5QcmludD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXJrZG93bi1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJrZG93bi5tb2RhbC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcE1hcmtkb3duTW9kYWwgaW1wbGVtZW50cyBBcHBNYXJrZG93bk1vZGFsT3B0aW9ucyB7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGVycm9yOiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNob3dFcnJvciA9IHRydWU7XG4gIEBJbnB1dCgpIGNhblByaW50ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRhdGE6IHN0cmluZztcbiAgQElucHV0KCkgc3JjOiBzdHJpbmc7XG5cbiAgc3RhdGljIGFzeW5jIHNob3cobW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsIG9wdGlvbnM6IEFwcE1hcmtkb3duTW9kYWxPcHRpb25zKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCBtb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogQXBwTWFya2Rvd25Nb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiBvcHRpb25zLFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIGNzc0NsYXNzOiBvcHRpb25zPy5jc3NDbGFzcyB8fCAnbW9kYWwtbGFyZ2UnLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgcmV0dXJuIG1vZGFsLm9uV2lsbERpc21pc3MoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIHZpZXdDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBuZXR3b3JrOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIC8vIFRPRE86IGZvciBERVYgb25seVxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgY2xvc2UoXz86IEV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudmlld0N0cmwuZGlzbWlzcygpO1xuICB9XG5cbiAgZ29CYWNrKGV2ZW50OiBFdmVudCwgY29udGVudDogQXBwTWFya2Rvd25Db250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQ/LmNhbkdvQmFjaykge1xuICAgICAgY29udGVudC5nb0JhY2soZXZlbnQpO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZShldmVudCk7XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKHRpdGxlIHx8IGNhblByaW50KSB7XG4gIDxhcHAtbW9kYWwtdG9vbGJhciBjb2xvcj1cImxpZ2h0XCIgW3RpdGxlXT1cInRpdGxlIHwgdHJhbnNsYXRlXCIgKGNhbmNlbCk9XCJjbG9zZSgkZXZlbnQpXCI+XG4gICAgQGlmIChjb250ZW50LmNhbkdvQmFjaykge1xuICAgICAgPGlvbi1idXR0b24gc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJiYWNrLWJ1dHRvblwiIChjbGljayk9XCJnb0JhY2soJGV2ZW50LCBjb250ZW50KVwiIHJvdXRlckRpcmVjdGlvbj1cImJhY2tcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiYXJyb3ctYmFja1wiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICAgIEBpZiAoY2FuUHJpbnQpIHtcbiAgICAgIDxpb24tYnV0dG9uIHNsb3Q9XCJlbmRcIiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImNvbnRlbnQucHJpbnQoJGV2ZW50KVwiIHJvdXRlckRpcmVjdGlvbj1cImJhY2tcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwicHJpbnRcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIH1cbiAgPC9hcHAtbW9kYWwtdG9vbGJhcj5cbn1cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgPGFwcC1tYXJrZG93bi1jb250ZW50XG4gICAgI2NvbnRlbnRcbiAgICBbc3JjXT1cInNyY1wiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW3Nob3dFcnJvcl09XCJzaG93RXJyb3JcIlxuICAgIFtkZWJ1Z109XCJkZWJ1Z1wiXG4gICAgW3VwZGF0ZVJvdXRlTG9jYXRpb25dPVwiZmFsc2VcIlxuICA+PC9hcHAtbWFya2Rvd24tY29udGVudD5cbjwvaW9uLWNvbnRlbnQ+XG5cbjxpb24tZm9vdGVyIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgPGlvbi10b29sYmFyPlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxpb24tY29sPjwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJzb2xpZFwiIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7ICdDT01NT04uQlROX0NMT1NFJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
@@ -186,8 +186,9 @@ export class MarkdownService {
186
186
  // If NOT the h1 (document title)
187
187
  const anchor = MarkdownUtils.textToAnchor(text);
188
188
  if (isNotNilOrBlank(anchor)) {
189
+ const pageBreak = level < 2;
189
190
  console.debug(`[markdown-service] Heading ${level} '${text}' with anchor ${anchor}`);
190
- const link = `<a id="${anchor}" class="anchor" aria-hidden="true" href="#${anchor}"></a>`;
191
+ const link = `<a id="${anchor}" class="anchor ${pageBreak ? 'page-break' : ''}" aria-hidden="true" href="#${anchor}"></a>`;
191
192
  return this._defaultRenderer.heading(link + text, level, raw);
192
193
  }
193
194
  return this._defaultRenderer.heading(text, level, raw);
@@ -199,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
199
200
  type: Injectable,
200
201
  args: [{ providedIn: 'root' }]
201
202
  }], ctorParameters: () => [] });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFHdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXBDLE9B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Q0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3hELGlDQUFpQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxLQUFLLElBQUksaUJBQWlCLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDckYsTUFBTSxJQUFJLEdBQUcsVUFBVSxNQUFNLDhDQUE4QyxNQUFNLFFBQVEsQ0FBQztZQUMxRixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7d0dBek5VLGVBQWU7NEdBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hcmtlZFJlbmRlcmVyIH0gZnJvbSAnbmd4LW1hcmtkb3duJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vZmlsZS91cmwudXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25VdGlscyB9IGZyb20gJy4vbWFya2Rvd24udXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blNlcnZpY2Uge1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybVNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2F0aW9uU3RyYXRlZ3kgPSBpbmplY3QoTG9jYXRpb25TdHJhdGVneSk7XG4gIHByaXZhdGUgbmF2Q29udHJvbGxlciA9IGluamVjdChOYXZDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBtb2RhbEN0cmwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcblxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0UmVuZGVyZXIgPSBuZXcgTWFya2VkUmVuZGVyZXIoKTtcbiAgcHJpdmF0ZSBfbWFya2VkUmVuZGVyZXI6IE1hcmtlZFJlbmRlcmVyO1xuXG4gIGdldCByZW5kZXJlcigpOiBNYXJrZWRSZW5kZXJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlZFJlbmRlcmVyO1xuICB9XG5cbiAgc2V0IHJlbmRlcmVyKHZhbHVlOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIodmFsdWUpO1xuICB9XG5cbiAgb25DbGlja01hcmtkb3duVXJsID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIobmV3IE1hcmtlZFJlbmRlcmVyKCkpO1xuICB9XG5cbiAgc2V0QmFzZVVybChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gQmFzZSBVUkw6ICcgKyBiYXNlVXJsKTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICB9XG5cbiAgcmVzZXRCYXNlVXJsKCkge1xuICAgIHRoaXMuc2V0QmFzZVVybChudWxsKTtcbiAgfVxuXG4gIGdldFVybFRyZWUodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHtcbiAgICB1cmwgPSBVcmxVdGlscy5ub3JtYWxpemVVcmwodXJsKTtcbiAgICBjb25zdCB1cmxQYXRoID0gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHVybCkgfHwgVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHRoaXMucm91dGVyLnVybCk7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlZFVybC5mcmFnbWVudDtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHBhcnNlZFVybC5xdWVyeVBhcmFtcztcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbdXJsUGF0aF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQsIHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgbmF2aWdhdGUodXJsOiBzdHJpbmcsIHJlcGxhY2VVcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmdldFVybFRyZWUodXJsKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHVybFRyZWUsIHsgcmVwbGFjZVVybCB9KTtcbiAgfVxuXG4gIGxpc3RlbkNsaWNrRXZlbnRzKG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gU3RhcnQgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cy4uLicpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogRXZlbnQpID0+IHRoaXMuY2xpY2soZXZlbnQsIG5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGxpbmtzID0gbmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIEFkZGluZyBjbGljayBsaXN0ZW5lciB0bycsIGxpbmspO1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFN0b3AgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cycpKTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgcmVsYXRpdmUgVVJMIHRvIGl0cyBhYnNvbHV0ZSByZXByZXNlbnRhdGlvbiBhY2NvcmRpbmcgdG8gY3VycmVudCByb3V0ZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB1cmwgUmVsYXRpdmUgVVJMIHBhdGguXG4gICAqIEByZXR1cm4gQWJzb2x1dGUgVVJMIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgKi9cbiAgbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNFeHRlcm5hbFVybCh1cmwpKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBpZiAodGhpcy5iYXNlVXJsICYmIFVybFV0aWxzLmlzUmVsYXRpdmVVcmwodXJsKSkge1xuICAgICAgcmV0dXJuIE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgdXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHVybCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChzZXJpYWxpemVkVXJsKTtcbiAgfVxuXG4gIHNjcm9sbFRvQW5jaG9yKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmNob3JJZDogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250YWluZXJFbGVtZW50IHx8ICFhbmNob3JJZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTWlzc2luZyAnY29udGFpbmVyRWxlbWVudCcgb3IgJ2ZyYWdtZW50JyBhcmd1bWVudC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLWFuY2hvcl0gU2Nyb2xsaW5nIHRvIGFuY2hvciAjJyArIGFuY2hvcklkKTtcblxuICAgIC8vIEZpbmQgdGhlIHRhcmdldCBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBmcmFnbWVudCBJRFxuICAgIGxldCB0YXJnZXRFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHthbmNob3JJZH1gKTtcblxuICAgIC8vIElmIG5vdCBmb3VuZCwgcmV0cnkgZml4IGEgZml4ZWQgYW5jaG9yIGlkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIFRvQyBoYXMgYmVlbiBnZW5lcmF0ZWQgZm9yIHRoZSBtYXZlbi1tYXJrZG93bi1wbHVnaW5cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHRhcmdldEVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke01hcmtkb3duVXRpbHMuZml4QW5jaG9yKGFuY2hvcklkKX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xuICAgICAgLy8gU2Nyb2xsIHNtb290aGx5IHRvIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgdGFyZ2V0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJywgLy8gU21vb3RoIHNjcm9sbGluZyBiZWhhdmlvclxuICAgICAgICBibG9jazogJ3N0YXJ0JywgLy8gQWxpZ24gdGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIHRoZSBJRCBcIiR7YW5jaG9ySWR9XCIgaW5zaWRlIHRoZSBjb250YWluZXIuYCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9uIC0tICovXG5cbiAgcHJvdGVjdGVkIHNldFJlbmRlcmVyKHJlbmRlcmVyOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bi1zZXJ2aWNlXSBTZXQgcmVuZGVyZXInLCByZW5kZXJlcik7XG4gICAgcmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5saW5rKGhyZWYsIHRpdGxlLCB0ZXh0KTtcbiAgICByZW5kZXJlci5pbWFnZSA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5pbWFnZShocmVmLCB0aXRsZSwgdGV4dCk7XG4gICAgcmVuZGVyZXIuaGVhZGluZyA9ICh0ZXh0LCBsZXZlbCwgcmF3KSA9PiB0aGlzLmhlYWRpbmcodGV4dCwgbGV2ZWwsIHJhdyk7XG4gICAgdGhpcy5fbWFya2VkUmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGljayhldmVudDogRXZlbnQsIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFByb2Nlc3NpbmcgY2xpY2sgZXZlbnQuLi4nLCBldmVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBVcmxVdGlscy5nZXRGcmFnbWVudChocmVmKTtcblxuICAgIC8vIEZyYWdtZW50XG4gICAgaWYgKGhyZWY/LnN0YXJ0c1dpdGgoJyMnKSAmJiBpc05vdE5pbE9yQmxhbmsoZnJhZ21lbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb0FuY2hvcihjb250YWluZXJFbGVtZW50LCBmcmFnbWVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJMaW5rID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvdXRlckxpbmsnKTtcbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHJvdXRlckxpbmspO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMLCBpZiBiYXNlVXJsIGhhcyBiZWVuIHNldFxuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgVXJsVXRpbHMuaXNSZWxhdGl2ZVVybChocmVmKSkge1xuICAgICAgaWYgKE1hcmtkb3duVXRpbHMuaXNNYXJrZG93bkZpbGUoaHJlZikgJiYgdGhpcy5vbkNsaWNrTWFya2Rvd25Vcmwub2JzZXJ2ZWQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrTWFya2Rvd25VcmwubmV4dChocmVmKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc29sdmUgVVJMLCB0aGVuIG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgICBocmVmID0gTWFya2Rvd25VdGlscy5yZXNvbHZlUmVsYXRpdmVVcmwodGhpcy5iYXNlVXJsLCBocmVmKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGludGVybmFsIFVSTCBhcyBhbiBhcHAgcm91dGVcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSkge1xuICAgICAgY29uc3Qgcm91dGVQYXRoID0gdGhpcy5ub3JtYWxpemVVcmwoaHJlZi5zdGFydHNXaXRoKCcvJykgPyBocmVmIDogYC8ke2hyZWZ9YCk7XG4gICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHJvdXRlUGF0aCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVkID0gZmFsc2U7XG4gICAgICAvLyBPcGVuaW5nIHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZCh1cmxUcmVlKTtcbiAgICB9XG5cbiAgICAvLyBFeHRlcm5hbCBVUkw6IG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLm9wZW4oaHJlZik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGluayhocmVmOiBzdHJpbmcgfCBudWxsLCB0aXRsZTogc3RyaW5nIHwgbnVsbCwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSAmJiAhaHJlZi5zdGFydHNXaXRoKCcjJykgJiYgIXRoaXMuYmFzZVVybCkge1xuICAgICAgY29uc3QgZXh0ZXJuYWxVcmwgPSB0aGlzLm5vcm1hbGl6ZVVybChocmVmKTtcbiAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7ZXh0ZXJuYWxVcmx9XCIgcm91dGVyTGluaz1cIiR7aHJlZn1cIiB0aXRsZT1cIiR7dGl0bGUgfHwgJyd9XCI+JHt0ZXh0fTwvYT5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWYgfHwgJyd9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiPiR7dGV4dH08L2E+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbWFnZShocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmwgPSBocmVmO1xuICAgIGxldCBmYWxsYmFja1VybDogc3RyaW5nO1xuICAgIGlmIChVcmxVdGlscy5pc1JlbGF0aXZlVXJsKGhyZWYpICYmIHRoaXMuYmFzZVVybCkge1xuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gICAgICB1cmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYpO1xuXG4gICAgICAvLyBDb21wdXRlIGEgZmFsbGJhY2sgVVJMXG4gICAgICBmYWxsYmFja1VybCA9IE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgaHJlZiwgeyBhYnNvbHV0ZUJ5RGVmYXVsdDogdHJ1ZSB9KTtcbiAgICAgIGZhbGxiYWNrVXJsID0gZmFsbGJhY2tVcmwgPT09IHVybCA/IG51bGwgOiBmYWxsYmFja1VybDtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bi1zZXJ2aWNlXSBSZXBsYWNpbmcgaW1hZ2U6ICR7aHJlZn0gLT4gJHt1cmx9YCk7XG5cbiAgICAgIGlmIChmYWxsYmFja1VybCkge1xuICAgICAgICBjb25zdCBmYWxsYmFja0h0bWwgPSBgPGltZyBzcmM9XCIke2ZhbGxiYWNrVXJsfVwiIHRpdGxlPVwiJHt0aXRsZSB8fCAnJ31cIiBhbHQ9XCIke3RleHR9XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7XCIgLz5gO1xuICAgICAgICByZXR1cm4gYDxpbWcgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiIGFsdD1cIiR7dGV4dH1cIiBvbmVycm9yPVwidGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJztcIiAvPmAgKyBmYWxsYmFja0h0bWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhlYWRpbmcodGV4dDogc3RyaW5nLCBsZXZlbDogbnVtYmVyLCByYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gSWYgTk9UIHRoZSBoMSAoZG9jdW1lbnQgdGl0bGUpXG4gICAgY29uc3QgYW5jaG9yID0gTWFya2Rvd25VdGlscy50ZXh0VG9BbmNob3IodGV4dCk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhhbmNob3IpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd24tc2VydmljZV0gSGVhZGluZyAke2xldmVsfSAnJHt0ZXh0fScgd2l0aCBhbmNob3IgJHthbmNob3J9YCk7XG4gICAgICBjb25zdCBsaW5rID0gYDxhIGlkPVwiJHthbmNob3J9XCIgY2xhc3M9XCJhbmNob3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBocmVmPVwiIyR7YW5jaG9yfVwiPjwvYT5gO1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKGxpbmsgKyB0ZXh0LCBsZXZlbCwgcmF3KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKHRleHQsIGxldmVsLCByYXcpO1xuICB9XG59XG4iXX0=
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL21hcmtkb3duLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFHdkUsTUFBTSxPQUFPLGVBQWU7SUFDbEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLFFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXBDLE9B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Q0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFUyxPQUFPLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3hELGlDQUFpQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixLQUFLLEtBQUssSUFBSSxpQkFBaUIsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNyRixNQUFNLElBQUksR0FBRyxVQUFVLE1BQU0sbUJBQW1CLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLCtCQUErQixNQUFNLFFBQVEsQ0FBQztZQUMzSCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7d0dBMU5VLGVBQWU7NEdBQWYsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hcmtlZFJlbmRlcmVyIH0gZnJvbSAnbmd4LW1hcmtkb3duJztcbmltcG9ydCB7IFVybFV0aWxzIH0gZnJvbSAnLi4vZmlsZS91cmwudXRpbHMnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25VdGlscyB9IGZyb20gJy4vbWFya2Rvd24udXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blNlcnZpY2Uge1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBwbGF0Zm9ybSA9IGluamVjdChQbGF0Zm9ybVNlcnZpY2UpO1xuICBwcml2YXRlIGxvY2F0aW9uU3RyYXRlZ3kgPSBpbmplY3QoTG9jYXRpb25TdHJhdGVneSk7XG4gIHByaXZhdGUgbmF2Q29udHJvbGxlciA9IGluamVjdChOYXZDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBtb2RhbEN0cmwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcblxuICBwcml2YXRlIGJhc2VVcmw6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0UmVuZGVyZXIgPSBuZXcgTWFya2VkUmVuZGVyZXIoKTtcbiAgcHJpdmF0ZSBfbWFya2VkUmVuZGVyZXI6IE1hcmtlZFJlbmRlcmVyO1xuXG4gIGdldCByZW5kZXJlcigpOiBNYXJrZWRSZW5kZXJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlZFJlbmRlcmVyO1xuICB9XG5cbiAgc2V0IHJlbmRlcmVyKHZhbHVlOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIodmFsdWUpO1xuICB9XG5cbiAgb25DbGlja01hcmtkb3duVXJsID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0UmVuZGVyZXIobmV3IE1hcmtlZFJlbmRlcmVyKCkpO1xuICB9XG5cbiAgc2V0QmFzZVVybChiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gQmFzZSBVUkw6ICcgKyBiYXNlVXJsKTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICB9XG5cbiAgcmVzZXRCYXNlVXJsKCkge1xuICAgIHRoaXMuc2V0QmFzZVVybChudWxsKTtcbiAgfVxuXG4gIGdldFVybFRyZWUodXJsOiBzdHJpbmcpOiBVcmxUcmVlIHtcbiAgICB1cmwgPSBVcmxVdGlscy5ub3JtYWxpemVVcmwodXJsKTtcbiAgICBjb25zdCB1cmxQYXRoID0gVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHVybCkgfHwgVXJsVXRpbHMuc3RyaXBGcmFnbWVudEFuZFF1ZXJ5KHRoaXMucm91dGVyLnVybCk7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmcmFnbWVudCA9IHBhcnNlZFVybC5mcmFnbWVudDtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHBhcnNlZFVybC5xdWVyeVBhcmFtcztcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbdXJsUGF0aF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQsIHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgbmF2aWdhdGUodXJsOiBzdHJpbmcsIHJlcGxhY2VVcmwgPSBmYWxzZSkge1xuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmdldFVybFRyZWUodXJsKTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHVybFRyZWUsIHsgcmVwbGFjZVVybCB9KTtcbiAgfVxuXG4gIGxpc3RlbkNsaWNrRXZlbnRzKG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogU3Vic2NyaXB0aW9uIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWFya2Rvd24tc2VydmljZV0gU3RhcnQgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cy4uLicpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBjb25zdCBsaXN0ZW5lciA9IChldmVudDogRXZlbnQpID0+IHRoaXMuY2xpY2soZXZlbnQsIG5hdGl2ZUVsZW1lbnQpO1xuICAgIGNvbnN0IGxpbmtzID0gbmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhJyk7XG4gICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIEFkZGluZyBjbGljayBsaXN0ZW5lciB0bycsIGxpbmspO1xuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gbGluay5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFN0b3AgbGlzdGVuaW5nIGNsaWNrIGV2ZW50cycpKTtcblxuICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgcmVsYXRpdmUgVVJMIHRvIGl0cyBhYnNvbHV0ZSByZXByZXNlbnRhdGlvbiBhY2NvcmRpbmcgdG8gY3VycmVudCByb3V0ZXIgc3RhdGUuXG4gICAqIEBwYXJhbSB1cmwgUmVsYXRpdmUgVVJMIHBhdGguXG4gICAqIEByZXR1cm4gQWJzb2x1dGUgVVJMIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJvdXRlLlxuICAgKi9cbiAgbm9ybWFsaXplVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNFeHRlcm5hbFVybCh1cmwpKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBpZiAodGhpcy5iYXNlVXJsICYmIFVybFV0aWxzLmlzUmVsYXRpdmVVcmwodXJsKSkge1xuICAgICAgcmV0dXJuIE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgdXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHVybCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZFVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChzZXJpYWxpemVkVXJsKTtcbiAgfVxuXG4gIHNjcm9sbFRvQW5jaG9yKGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmNob3JJZDogc3RyaW5nKSB7XG4gICAgaWYgKCFjb250YWluZXJFbGVtZW50IHx8ICFhbmNob3JJZCkge1xuICAgICAgY29uc29sZS53YXJuKFwiTWlzc2luZyAnY29udGFpbmVyRWxlbWVudCcgb3IgJ2ZyYWdtZW50JyBhcmd1bWVudC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLWFuY2hvcl0gU2Nyb2xsaW5nIHRvIGFuY2hvciAjJyArIGFuY2hvcklkKTtcblxuICAgIC8vIEZpbmQgdGhlIHRhcmdldCBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBmcmFnbWVudCBJRFxuICAgIGxldCB0YXJnZXRFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHthbmNob3JJZH1gKTtcblxuICAgIC8vIElmIG5vdCBmb3VuZCwgcmV0cnkgZml4IGEgZml4ZWQgYW5jaG9yIGlkLiBUaGlzIGNhbiBvY2N1ciB3aGVuIFRvQyBoYXMgYmVlbiBnZW5lcmF0ZWQgZm9yIHRoZSBtYXZlbi1tYXJrZG93bi1wbHVnaW5cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgIHRhcmdldEVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke01hcmtkb3duVXRpbHMuZml4QW5jaG9yKGFuY2hvcklkKX1gKTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0RWxlbWVudCkge1xuICAgICAgLy8gU2Nyb2xsIHNtb290aGx5IHRvIHRoZSB0YXJnZXQgZWxlbWVudFxuICAgICAgdGFyZ2V0RWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJywgLy8gU21vb3RoIHNjcm9sbGluZyBiZWhhdmlvclxuICAgICAgICBibG9jazogJ3N0YXJ0JywgLy8gQWxpZ24gdGhlIHRhcmdldCBlbGVtZW50IHRvIHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gZWxlbWVudCBmb3VuZCB3aXRoIHRoZSBJRCBcIiR7YW5jaG9ySWR9XCIgaW5zaWRlIHRoZSBjb250YWluZXIuYCk7XG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIGZ1bmN0aW9uIC0tICovXG5cbiAgcHJvdGVjdGVkIHNldFJlbmRlcmVyKHJlbmRlcmVyOiBNYXJrZWRSZW5kZXJlcikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttYXJrZG93bi1zZXJ2aWNlXSBTZXQgcmVuZGVyZXInLCByZW5kZXJlcik7XG4gICAgcmVuZGVyZXIubGluayA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5saW5rKGhyZWYsIHRpdGxlLCB0ZXh0KTtcbiAgICByZW5kZXJlci5pbWFnZSA9IChocmVmLCB0aXRsZSwgdGV4dCkgPT4gdGhpcy5pbWFnZShocmVmLCB0aXRsZSwgdGV4dCk7XG4gICAgcmVuZGVyZXIuaGVhZGluZyA9ICh0ZXh0LCBsZXZlbCwgcmF3KSA9PiB0aGlzLmhlYWRpbmcodGV4dCwgbGV2ZWwsIHJhdyk7XG4gICAgdGhpcy5fbWFya2VkUmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjbGljayhldmVudDogRXZlbnQsIGNvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21hcmtkb3duLXNlcnZpY2VdIFByb2Nlc3NpbmcgY2xpY2sgZXZlbnQuLi4nLCBldmVudCk7XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaHJlZiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyk7XG4gICAgY29uc3QgZnJhZ21lbnQgPSBVcmxVdGlscy5nZXRGcmFnbWVudChocmVmKTtcblxuICAgIC8vIEZyYWdtZW50XG4gICAgaWYgKGhyZWY/LnN0YXJ0c1dpdGgoJyMnKSAmJiBpc05vdE5pbE9yQmxhbmsoZnJhZ21lbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb0FuY2hvcihjb250YWluZXJFbGVtZW50LCBmcmFnbWVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZXJMaW5rID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvdXRlckxpbmsnKTtcbiAgICBpZiAocm91dGVyTGluaykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiB0aGlzLm5hdkNvbnRyb2xsZXIubmF2aWdhdGVGb3J3YXJkKHJvdXRlckxpbmspO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMLCBpZiBiYXNlVXJsIGhhcyBiZWVuIHNldFxuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgVXJsVXRpbHMuaXNSZWxhdGl2ZVVybChocmVmKSkge1xuICAgICAgaWYgKE1hcmtkb3duVXRpbHMuaXNNYXJrZG93bkZpbGUoaHJlZikgJiYgdGhpcy5vbkNsaWNrTWFya2Rvd25Vcmwub2JzZXJ2ZWQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vbkNsaWNrTWFya2Rvd25VcmwubmV4dChocmVmKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc29sdmUgVVJMLCB0aGVuIG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgICBocmVmID0gTWFya2Rvd25VdGlscy5yZXNvbHZlUmVsYXRpdmVVcmwodGhpcy5iYXNlVXJsLCBocmVmKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIGludGVybmFsIFVSTCBhcyBhbiBhcHAgcm91dGVcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSkge1xuICAgICAgY29uc3Qgcm91dGVQYXRoID0gdGhpcy5ub3JtYWxpemVVcmwoaHJlZi5zdGFydHNXaXRoKCcvJykgPyBocmVmIDogYC8ke2hyZWZ9YCk7XG4gICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5nZXRVcmxUcmVlKHJvdXRlUGF0aCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVkID0gZmFsc2U7XG4gICAgICAvLyBPcGVuaW5nIHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlRm9yd2FyZCh1cmxUcmVlKTtcbiAgICB9XG5cbiAgICAvLyBFeHRlcm5hbCBVUkw6IG9wZW4gdXNpbmcgdGhlIHBsYXRmb3JtXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCB0aGlzLnBsYXRmb3JtLm9wZW4oaHJlZik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGluayhocmVmOiBzdHJpbmcgfCBudWxsLCB0aXRsZTogc3RyaW5nIHwgbnVsbCwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoVXJsVXRpbHMuaXNJbnRlcm5hbFVybChocmVmKSAmJiAhaHJlZi5zdGFydHNXaXRoKCcjJykgJiYgIXRoaXMuYmFzZVVybCkge1xuICAgICAgY29uc3QgZXh0ZXJuYWxVcmwgPSB0aGlzLm5vcm1hbGl6ZVVybChocmVmKTtcbiAgICAgIHJldHVybiBgPGEgaHJlZj1cIiR7ZXh0ZXJuYWxVcmx9XCIgcm91dGVyTGluaz1cIiR7aHJlZn1cIiB0aXRsZT1cIiR7dGl0bGUgfHwgJyd9XCI+JHt0ZXh0fTwvYT5gO1xuICAgIH1cbiAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWYgfHwgJyd9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiPiR7dGV4dH08L2E+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbWFnZShocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsLCB0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmwgPSBocmVmO1xuICAgIGxldCBmYWxsYmFja1VybDogc3RyaW5nO1xuICAgIGlmIChVcmxVdGlscy5pc1JlbGF0aXZlVXJsKGhyZWYpICYmIHRoaXMuYmFzZVVybCkge1xuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBwYXRoXG4gICAgICB1cmwgPSBNYXJrZG93blV0aWxzLnJlc29sdmVSZWxhdGl2ZVVybCh0aGlzLmJhc2VVcmwsIGhyZWYpO1xuXG4gICAgICAvLyBDb21wdXRlIGEgZmFsbGJhY2sgVVJMXG4gICAgICBmYWxsYmFja1VybCA9IE1hcmtkb3duVXRpbHMucmVzb2x2ZVJlbGF0aXZlVXJsKHRoaXMuYmFzZVVybCwgaHJlZiwgeyBhYnNvbHV0ZUJ5RGVmYXVsdDogdHJ1ZSB9KTtcbiAgICAgIGZhbGxiYWNrVXJsID0gZmFsbGJhY2tVcmwgPT09IHVybCA/IG51bGwgOiBmYWxsYmFja1VybDtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUuZGVidWcoYFttYXJrZG93bi1zZXJ2aWNlXSBSZXBsYWNpbmcgaW1hZ2U6ICR7aHJlZn0gLT4gJHt1cmx9YCk7XG5cbiAgICAgIGlmIChmYWxsYmFja1VybCkge1xuICAgICAgICBjb25zdCBmYWxsYmFja0h0bWwgPSBgPGltZyBzcmM9XCIke2ZhbGxiYWNrVXJsfVwiIHRpdGxlPVwiJHt0aXRsZSB8fCAnJ31cIiBhbHQ9XCIke3RleHR9XCIgb25lcnJvcj1cInRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7XCIgLz5gO1xuICAgICAgICByZXR1cm4gYDxpbWcgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke3RpdGxlIHx8ICcnfVwiIGFsdD1cIiR7dGV4dH1cIiBvbmVycm9yPVwidGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJztcIiAvPmAgKyBmYWxsYmFja0h0bWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFJlbmRlcmVyLmltYWdlKHVybCwgdGl0bGUsIHRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhlYWRpbmcodGV4dDogc3RyaW5nLCBsZXZlbDogbnVtYmVyLCByYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gSWYgTk9UIHRoZSBoMSAoZG9jdW1lbnQgdGl0bGUpXG4gICAgY29uc3QgYW5jaG9yID0gTWFya2Rvd25VdGlscy50ZXh0VG9BbmNob3IodGV4dCk7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhhbmNob3IpKSB7XG4gICAgICBjb25zdCBwYWdlQnJlYWsgPSBsZXZlbCA8IDI7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbWFya2Rvd24tc2VydmljZV0gSGVhZGluZyAke2xldmVsfSAnJHt0ZXh0fScgd2l0aCBhbmNob3IgJHthbmNob3J9YCk7XG4gICAgICBjb25zdCBsaW5rID0gYDxhIGlkPVwiJHthbmNob3J9XCIgY2xhc3M9XCJhbmNob3IgJHtwYWdlQnJlYWsgPyAncGFnZS1icmVhaycgOiAnJ31cIiBhcmlhLWhpZGRlbj1cInRydWVcIiBocmVmPVwiIyR7YW5jaG9yfVwiPjwvYT5gO1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKGxpbmsgKyB0ZXh0LCBsZXZlbCwgcmF3KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRSZW5kZXJlci5oZWFkaW5nKHRleHQsIGxldmVsLCByYXcpO1xuICB9XG59XG4iXX0=
@@ -10,8 +10,8 @@ export class MarkdownTestPage {
10
10
  cd;
11
11
  markdownModalTitle = 'Markdown modal';
12
12
  // URL from a starting markdown
13
- markdownUrl = 'http://localhost:3000/user-manual/index.md';
14
- //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/projects/pifil/man/quick_start_guide_fr.md';
13
+ //protected markdownUrl = 'http://localhost:3000/user-manual/index.md';
14
+ markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/projects/pifil/man/quick_start_guide_fr.md';
15
15
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/README.md';
16
16
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/model/index.md';
17
17
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/model/administration/index.md';
@@ -32,7 +32,8 @@ export class MarkdownTestPage {
32
32
  openHelpModal(event) {
33
33
  return AppMarkdownModal.show(this.modalCtrl, {
34
34
  title: this.markdownModalTitle,
35
- markdownUrl: this.markdownUrl,
35
+ src: this.markdownUrl,
36
+ canPrint: true,
36
37
  });
37
38
  }
38
39
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownTestPage, deps: [{ token: i1.ModalController }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
@@ -42,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
42
43
  type: Component,
43
44
  args: [{ selector: 'app-markdown-test', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n @if (content.canGoBack) {\n <ion-button class=\"back-button\" (click)=\"content.goBack($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n } @else {\n <ion-back-button></ion-back-button>\n }\n </ion-buttons>\n\n <ion-title>Markdown test page</ion-title>\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"openHelpModal($event)\">Open in modal</ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <ion-input\n #input\n fill=\"outline\"\n [ngModel]=\"markdownUrl\"\n placeholder=\"Markdown URL\"\n label=\"URL: \"\n (keyup.enter)=\"onSubmit($event, input.value)\"\n >\n <ion-button\n slot=\"end\"\n [fill]=\"markdownUrl !== input.value ? 'solid' : 'clear'\"\n (click)=\"onSubmit($event, input.value)\"\n >\n {{ 'COMMON.BTN_OK' | translate }}\n </ion-button>\n </ion-input>\n\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n enableNavigationHistory=\"true\"\n debug=\"true\"\n (markdownUrlChange)=\"updateInputUrl($event)\"\n ></app-markdown-content>\n</ion-content>\n" }]
44
45
  }], ctorParameters: () => [{ type: i1.ModalController }, { type: i0.ChangeDetectorRef }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLGdCQUFnQjtJQWFqQjtJQUNBO0lBYkEsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7SUFFaEQsK0JBQStCO0lBQ3JCLFdBQVcsR0FBRyw0Q0FBNEMsQ0FBQztJQUNyRSw2SUFBNkk7SUFDN0ksNEdBQTRHO0lBQzVHLGlIQUFpSDtJQUNqSCxnSUFBZ0k7SUFDaEksdUpBQXVKO0lBQ3ZKLHdIQUF3SDtJQUV4SCxZQUNVLFNBQTBCLEVBQzFCLEVBQXFCO1FBRHJCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLE9BQUUsR0FBRixFQUFFLENBQW1CO0lBQzVCLENBQUM7SUFFSixRQUFRLENBQUMsS0FBWSxFQUFFLE1BQXVCO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzlCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQWhDVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQix5RENUN0IsZ3lDQThDQTs7NEZEckNhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxtQkFBbUIsbUJBRVosdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBNYXJrZG93bk1vZGFsIH0gZnJvbSAnLi4vbWFya2Rvd24ubW9kYWwnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWFya2Rvd24tdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJrZG93bi50ZXN0Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWFya2Rvd25UZXN0UGFnZSB7XG4gIHByb3RlY3RlZCBtYXJrZG93bk1vZGFsVGl0bGUgPSAnTWFya2Rvd24gbW9kYWwnO1xuXG4gIC8vIFVSTCBmcm9tIGEgc3RhcnRpbmcgbWFya2Rvd25cbiAgcHJvdGVjdGVkIG1hcmtkb3duVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC91c2VyLW1hbnVhbC9pbmRleC5tZCc7XG4gIC8vcHJvdGVjdGVkIG1hcmtkb3duVXJsID0gJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vcmF3L21hc3Rlci9wcm9qZWN0cy9waWZpbC9tYW4vcXVpY2tfc3RhcnRfZ3VpZGVfZnIubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvUkVBRE1FLm1kJztcbiAgLy9wcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9yYXcvbWFzdGVyL21vZGVsL2luZGV4Lm1kJztcbiAgLy9wcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9yYXcvbWFzdGVyL21vZGVsL2FkbWluaXN0cmF0aW9uL2luZGV4Lm1kJztcbiAgLy9wcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvcHJvamVjdHMvYWN0aXZpdHktY2FsZW5kYXIvc3BlL2NvbGxlY3RlX2RlX2Rvbm5lZXMubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9J2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtYXBwLy0vcmF3L2RldmVsb3AvZG9jL3ByaXZhY3lfcG9saWN5Lm1kJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBvblN1Ym1pdChldmVudDogRXZlbnQsIG5ld1VybDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5tYXJrZG93blVybCA9ICcnICsgbmV3VXJsO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB1cGRhdGVJbnB1dFVybCh1cmw6IHN0cmluZykge1xuICAgIHRoaXMubWFya2Rvd25VcmwgPSB1cmw7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9wZW5IZWxwTW9kYWwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgcmV0dXJuIEFwcE1hcmtkb3duTW9kYWwuc2hvdyh0aGlzLm1vZGFsQ3RybCwge1xuICAgICAgdGl0bGU6IHRoaXMubWFya2Rvd25Nb2RhbFRpdGxlLFxuICAgICAgbWFya2Rvd25Vcmw6IHRoaXMubWFya2Rvd25VcmwsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgQGlmIChjb250ZW50LmNhbkdvQmFjaykge1xuICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImJhY2stYnV0dG9uXCIgKGNsaWNrKT1cImNvbnRlbnQuZ29CYWNrKCRldmVudClcIiByb3V0ZXJEaXJlY3Rpb249XCJiYWNrXCI+XG4gICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiYXJyb3ctYmFja1wiPjwvaW9uLWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8aW9uLWJhY2stYnV0dG9uPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgICAgfVxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPk1hcmtkb3duIHRlc3QgcGFnZTwvaW9uLXRpdGxlPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvcGVuSGVscE1vZGFsKCRldmVudClcIj5PcGVuIGluIG1vZGFsPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxpb24taW5wdXRcbiAgICAjaW5wdXRcbiAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgW25nTW9kZWxdPVwibWFya2Rvd25VcmxcIlxuICAgIHBsYWNlaG9sZGVyPVwiTWFya2Rvd24gVVJMXCJcbiAgICBsYWJlbD1cIlVSTDogXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwib25TdWJtaXQoJGV2ZW50LCBpbnB1dC52YWx1ZSlcIlxuICA+XG4gICAgPGlvbi1idXR0b25cbiAgICAgIHNsb3Q9XCJlbmRcIlxuICAgICAgW2ZpbGxdPVwibWFya2Rvd25VcmwgIT09IGlucHV0LnZhbHVlID8gJ3NvbGlkJyA6ICdjbGVhcidcIlxuICAgICAgKGNsaWNrKT1cIm9uU3VibWl0KCRldmVudCwgaW5wdXQudmFsdWUpXCJcbiAgICA+XG4gICAgICB7eyAnQ09NTU9OLkJUTl9PSycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2lvbi1idXR0b24+XG4gIDwvaW9uLWlucHV0PlxuXG4gIDxhcHAtbWFya2Rvd24tY29udGVudFxuICAgICNjb250ZW50XG4gICAgW3NyY109XCJtYXJrZG93blVybFwiXG4gICAgZW5hYmxlTmF2aWdhdGlvbkhpc3Rvcnk9XCJ0cnVlXCJcbiAgICBkZWJ1Zz1cInRydWVcIlxuICAgIChtYXJrZG93blVybENoYW5nZSk9XCJ1cGRhdGVJbnB1dFVybCgkZXZlbnQpXCJcbiAgPjwvYXBwLW1hcmtkb3duLWNvbnRlbnQ+XG48L2lvbi1jb250ZW50PlxuIl19
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hcmtkb3duL3Rlc3RpbmcvbWFya2Rvd24udGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7QUFRckQsTUFBTSxPQUFPLGdCQUFnQjtJQWFqQjtJQUNBO0lBYkEsa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7SUFFaEQsK0JBQStCO0lBQy9CLHVFQUF1RTtJQUM3RCxXQUFXLEdBQUcsa0hBQWtILENBQUM7SUFDM0ksNEdBQTRHO0lBQzVHLGlIQUFpSDtJQUNqSCxnSUFBZ0k7SUFDaEksdUpBQXVKO0lBQ3ZKLHdIQUF3SDtJQUV4SCxZQUNVLFNBQTBCLEVBQzFCLEVBQXFCO1FBRHJCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLE9BQUUsR0FBRixFQUFFLENBQW1CO0lBQzVCLENBQUM7SUFFSixRQUFRLENBQUMsS0FBWSxFQUFFLE1BQXVCO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBWTtRQUN4QixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQzlCLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUNyQixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBakNVLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLHlEQ1Q3QixneUNBOENBOzs0RkRyQ2EsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLG1CQUFtQixtQkFFWix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcE1hcmtkb3duTW9kYWwgfSBmcm9tICcuLi9tYXJrZG93bi5tb2RhbCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tYXJrZG93bi10ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hcmtkb3duLnRlc3QuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXJrZG93blRlc3RQYWdlIHtcbiAgcHJvdGVjdGVkIG1hcmtkb3duTW9kYWxUaXRsZSA9ICdNYXJrZG93biBtb2RhbCc7XG5cbiAgLy8gVVJMIGZyb20gYSBzdGFydGluZyBtYXJrZG93blxuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwOi8vbG9jYWxob3N0OjMwMDAvdXNlci1tYW51YWwvaW5kZXgubWQnO1xuICBwcm90ZWN0ZWQgbWFya2Rvd25VcmwgPSAnaHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1kb2MvLS9yYXcvbWFzdGVyL3Byb2plY3RzL3BpZmlsL21hbi9xdWlja19zdGFydF9ndWlkZV9mci5tZCc7XG4gIC8vcHJvdGVjdGVkIG1hcmtkb3duVXJsID0gJ2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vcmF3L21hc3Rlci9SRUFETUUubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvbW9kZWwvaW5kZXgubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9ICdodHRwczovL2dpdGxhYi5pZnJlbWVyLmZyL3NpaC1wdWJsaWMvc3VtYXJpcy9zdW1hcmlzLWRvYy8tL3Jhdy9tYXN0ZXIvbW9kZWwvYWRtaW5pc3RyYXRpb24vaW5kZXgubWQnO1xuICAvL3Byb3RlY3RlZCBtYXJrZG93blVybCA9J2h0dHBzOi8vZ2l0bGFiLmlmcmVtZXIuZnIvc2loLXB1YmxpYy9zdW1hcmlzL3N1bWFyaXMtZG9jLy0vcmF3L21hc3Rlci9wcm9qZWN0cy9hY3Rpdml0eS1jYWxlbmRhci9zcGUvY29sbGVjdGVfZGVfZG9ubmVlcy5tZCc7XG4gIC8vcHJvdGVjdGVkIG1hcmtkb3duVXJsID0naHR0cHM6Ly9naXRsYWIuaWZyZW1lci5mci9zaWgtcHVibGljL3N1bWFyaXMvc3VtYXJpcy1hcHAvLS9yYXcvZGV2ZWxvcC9kb2MvcHJpdmFjeV9wb2xpY3kubWQnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG9uU3VibWl0KGV2ZW50OiBFdmVudCwgbmV3VXJsOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLm1hcmtkb3duVXJsID0gJycgKyBuZXdVcmw7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHVwZGF0ZUlucHV0VXJsKHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5tYXJrZG93blVybCA9IHVybDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb3BlbkhlbHBNb2RhbChldmVudDogRXZlbnQpIHtcbiAgICByZXR1cm4gQXBwTWFya2Rvd25Nb2RhbC5zaG93KHRoaXMubW9kYWxDdHJsLCB7XG4gICAgICB0aXRsZTogdGhpcy5tYXJrZG93bk1vZGFsVGl0bGUsXG4gICAgICBzcmM6IHRoaXMubWFya2Rvd25VcmwsXG4gICAgICBjYW5QcmludDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICBAaWYgKGNvbnRlbnQuY2FuR29CYWNrKSB7XG4gICAgICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiYmFjay1idXR0b25cIiAoY2xpY2spPVwiY29udGVudC5nb0JhY2soJGV2ZW50KVwiIHJvdXRlckRpcmVjdGlvbj1cImJhY2tcIj5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxpb24tYmFjay1idXR0b24+PC9pb24tYmFjay1idXR0b24+XG4gICAgICB9XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGU+TWFya2Rvd24gdGVzdCBwYWdlPC9pb24tdGl0bGU+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm9wZW5IZWxwTW9kYWwoJGV2ZW50KVwiPk9wZW4gaW4gbW9kYWw8L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgPGlvbi1pbnB1dFxuICAgICNpbnB1dFxuICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICBbbmdNb2RlbF09XCJtYXJrZG93blVybFwiXG4gICAgcGxhY2Vob2xkZXI9XCJNYXJrZG93biBVUkxcIlxuICAgIGxhYmVsPVwiVVJMOiBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJvblN1Ym1pdCgkZXZlbnQsIGlucHV0LnZhbHVlKVwiXG4gID5cbiAgICA8aW9uLWJ1dHRvblxuICAgICAgc2xvdD1cImVuZFwiXG4gICAgICBbZmlsbF09XCJtYXJrZG93blVybCAhPT0gaW5wdXQudmFsdWUgPyAnc29saWQnIDogJ2NsZWFyJ1wiXG4gICAgICAoY2xpY2spPVwib25TdWJtaXQoJGV2ZW50LCBpbnB1dC52YWx1ZSlcIlxuICAgID5cbiAgICAgIHt7ICdDT01NT04uQlROX09LJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvaW9uLWJ1dHRvbj5cbiAgPC9pb24taW5wdXQ+XG5cbiAgPGFwcC1tYXJrZG93bi1jb250ZW50XG4gICAgI2NvbnRlbnRcbiAgICBbc3JjXT1cIm1hcmtkb3duVXJsXCJcbiAgICBlbmFibGVOYXZpZ2F0aW9uSGlzdG9yeT1cInRydWVcIlxuICAgIGRlYnVnPVwidHJ1ZVwiXG4gICAgKG1hcmtkb3duVXJsQ2hhbmdlKT1cInVwZGF0ZUlucHV0VXJsKCRldmVudClcIlxuICA+PC9hcHAtbWFya2Rvd24tY29udGVudD5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
@@ -25024,8 +25024,9 @@ class MarkdownService {
25024
25024
  // If NOT the h1 (document title)
25025
25025
  const anchor = MarkdownUtils.textToAnchor(text);
25026
25026
  if (isNotNilOrBlank(anchor)) {
25027
+ const pageBreak = level < 2;
25027
25028
  console.debug(`[markdown-service] Heading ${level} '${text}' with anchor ${anchor}`);
25028
- const link = `<a id="${anchor}" class="anchor" aria-hidden="true" href="#${anchor}"></a>`;
25029
+ const link = `<a id="${anchor}" class="anchor ${pageBreak ? 'page-break' : ''}" aria-hidden="true" href="#${anchor}"></a>`;
25029
25030
  return this._defaultRenderer.heading(link + text, level, raw);
25030
25031
  }
25031
25032
  return this._defaultRenderer.heading(text, level, raw);
@@ -25107,13 +25108,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
25107
25108
  class AppMarkdownContent {
25108
25109
  cd;
25109
25110
  element;
25111
+ _document;
25110
25112
  route;
25113
+ _printIframe;
25114
+ _clickSubscription;
25111
25115
  navController = inject(NavController);
25112
25116
  settings = inject(LocalSettingsService);
25113
25117
  translate = inject(TranslateService);
25114
25118
  network = inject(NetworkService);
25115
25119
  markdownService = inject(MarkdownService);
25116
- _clickSubscription;
25117
25120
  loading = true;
25118
25121
  error = undefined;
25119
25122
  baseUrl;
@@ -25146,10 +25149,11 @@ class AppMarkdownContent {
25146
25149
  enableNavigationHistory = true;
25147
25150
  updateRouteLocation = false;
25148
25151
  markdownUrlChange = new EventEmitter();
25149
- constructor(cd, element, route // Modal editor give 'null'
25152
+ constructor(cd, element, _document, route // Modal editor give 'null'
25150
25153
  ) {
25151
25154
  this.cd = cd;
25152
25155
  this.element = element;
25156
+ this._document = _document;
25153
25157
  this.route = route;
25154
25158
  // TODO: for DEV only
25155
25159
  //this.debug = !environment.production;
@@ -25174,6 +25178,88 @@ class AppMarkdownContent {
25174
25178
  get canGoBack() {
25175
25179
  return isNotEmptyArray(this._navHistory);
25176
25180
  }
25181
+ print(event) {
25182
+ console.debug('[markdown] Print');
25183
+ if (!this.element) {
25184
+ console.error('Erreur : Élément non trouvé.');
25185
+ return;
25186
+ }
25187
+ // Récupérer le contenu HTML depuis le composant
25188
+ const content = this.element.nativeElement.innerHTML;
25189
+ // Créer une iframe pour gérer l'impression
25190
+ this._printIframe = this.createPrintHiddenIframe(content);
25191
+ // Lancer l'impression après un court délai (le temps que l'iframe charge)
25192
+ this._printIframe.contentWindow.addEventListener('load', () => {
25193
+ this._printIframe.contentWindow?.window.print();
25194
+ this._printIframe.remove();
25195
+ });
25196
+ setTimeout(() => {
25197
+ //this._printIframe.contentWindow?.window.print();
25198
+ // Supprimer l'iframe après impression
25199
+ //this._document.body.removeChild(this._printIframe);
25200
+ }, 500);
25201
+ }
25202
+ /* -- protected functions -- */
25203
+ createPrintHiddenIframe(html, style) {
25204
+ // Create a iframe with '?print-pdf'
25205
+ const iframe = this._document.createElement('iframe');
25206
+ iframe.classList.add('cdk-visually-hidden');
25207
+ iframe.style.width = '100%';
25208
+ iframe.style.height = '100%';
25209
+ this._document.body.appendChild(iframe);
25210
+ // Charger le contenu HTML dans l'iframe
25211
+ const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
25212
+ if (iframeDocument) {
25213
+ iframeDocument.open();
25214
+ iframeDocument.write(`
25215
+ <html>
25216
+ <head>
25217
+ <title>${this._document.title}</title>
25218
+ <style>
25219
+ hr {
25220
+ page-break-before: always;
25221
+ border: 0 !important;
25222
+ padding: 0 !important;
25223
+ }
25224
+ body {
25225
+ font-family: 'Roboto', Helvetica, Arial, sans-serif;
25226
+ margin: 0;
25227
+ padding: 20px;
25228
+ }
25229
+ </style>
25230
+ </head>
25231
+ <body>
25232
+ ${html}
25233
+ </body>
25234
+ </html>
25235
+ `);
25236
+ iframeDocument.close();
25237
+ }
25238
+ // Inject App style
25239
+ this.injectAppStylesIntoIframe(iframe);
25240
+ return iframe;
25241
+ }
25242
+ injectAppStylesIntoIframe(iframe) {
25243
+ const iframeDocument = iframe.contentDocument || iframe.contentWindow?.document;
25244
+ if (iframeDocument) {
25245
+ // Récupérer tous les styles (liens CSS)
25246
+ const links = Array.from(this._document.querySelectorAll('link[rel="stylesheet"]'));
25247
+ links.forEach((link) => {
25248
+ const newLink = iframeDocument.createElement('link');
25249
+ newLink.rel = 'stylesheet';
25250
+ newLink.href = link.getAttribute('href');
25251
+ if (newLink.href)
25252
+ iframeDocument.head.appendChild(newLink);
25253
+ });
25254
+ // Récupérer tous les `styles` en ligne
25255
+ const inlineStyles = Array.from(this._document.querySelectorAll('style'));
25256
+ inlineStyles.forEach((style) => {
25257
+ const newStyle = iframeDocument.createElement('style');
25258
+ newStyle.innerHTML = style.innerHTML;
25259
+ iframeDocument.head.appendChild(newStyle);
25260
+ });
25261
+ }
25262
+ }
25177
25263
  setData(value, opts) {
25178
25264
  const anchor = opts?.anchor || null;
25179
25265
  if (this._data !== value || this._anchor !== anchor) {
@@ -25310,13 +25396,16 @@ class AppMarkdownContent {
25310
25396
  this.error = null;
25311
25397
  this.cd.markForCheck();
25312
25398
  }
25313
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$5.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
25314
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownContent, selector: "app-markdown-content", inputs: { data: "data", src: "src", anchor: "anchor", debug: ["debug", "debug", booleanAttribute], showError: ["showError", "showError", booleanAttribute], animated: ["animated", "animated", booleanAttribute], enableNavigationHistory: ["enableNavigationHistory", "enableNavigationHistory", booleanAttribute], updateRouteLocation: ["updateRouteLocation", "updateRouteLocation", booleanAttribute] }, outputs: { markdownUrlChange: "markdownUrlChange" }, ngImport: i0, template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4$1.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], animations: [slideDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25399
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: DOCUMENT }, { token: i1$5.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
25400
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownContent, selector: "app-markdown-content", inputs: { data: "data", src: "src", anchor: "anchor", debug: ["debug", "debug", booleanAttribute], showError: ["showError", "showError", booleanAttribute], animated: ["animated", "animated", booleanAttribute], enableNavigationHistory: ["enableNavigationHistory", "enableNavigationHistory", booleanAttribute], updateRouteLocation: ["updateRouteLocation", "updateRouteLocation", booleanAttribute] }, outputs: { markdownUrlChange: "markdownUrlChange" }, ngImport: i0, template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown hr{border-top:1px solid var(--ion-color-medium-tint, #dcdcde);margin:10px 0}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}@media print{hr{page-break-before:always;border:none;margin:0}body{font-family:Roboto,Helvetica,Arial,sans-serif;margin:0;padding:20px}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: i4$1.MarkdownComponent, selector: "markdown, [markdown]", inputs: ["data", "src", "disableSanitizer", "inline", "clipboard", "clipboardButtonComponent", "clipboardButtonTemplate", "emoji", "katex", "katexOptions", "mermaid", "mermaidOptions", "lineHighlight", "line", "lineOffset", "lineNumbers", "start", "commandLine", "filterOutput", "host", "prompt", "output", "user"], outputs: ["error", "load", "ready"] }, { kind: "component", type: DebugComponent, selector: "app-debug", inputs: ["titlePrefix", "title", "enable", "expanded"] }, { kind: "directive", type: MarkdownDirective, selector: "markdown,[markdown]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], animations: [slideDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25315
25401
  }
25316
25402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownContent, decorators: [{
25317
25403
  type: Component,
25318
- args: [{ selector: 'app-markdown-content', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideDownAnimation], template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}\n"] }]
25319
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$5.ActivatedRoute, decorators: [{
25404
+ args: [{ selector: 'app-markdown-content', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideDownAnimation], template: "<app-debug *ngIf=\"debug\">\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n loading: {{ loading }}\n <br />\n error: {{ error }}\n <br />\n <br />\n baseUrl: {{ baseUrl }}\n <br />\n markdownUrl: {{ src }}\n <br />\n markdownFragment: {{ _anchor }}\n <br />\n markdownContent: {{ data }}\n <br />\n </ion-col>\n </ion-row>\n </ion-grid>\n</app-debug>\n\n<!-- error -->\n@if (showError && error; as error) {\n <ion-item lines=\"none\" @slideDownAnimation>\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n} @else {\n @if (data) {\n <markdown [data]=\"data\" (ready)=\"onReady()\" emoji></markdown>\n } @else if (src) {\n <markdown [src]=\"src\" (error)=\"onLoadError($event)\" (ready)=\"onReady()\" emoji></markdown>\n }\n}\n\n<!-- loading spinner -->\n@if (loading) {\n <div class=\"loading-spinner\">\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n <ng-container *ngTemplateOutlet=\"loadingParagraph\"></ng-container>\n </div>\n}\n\n<ng-template #loadingParagraph>\n <p>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 75%; margin-inline-start: 5%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n <ion-skeleton-text [animated]=\"animated\" style=\"width: 80%\"></ion-skeleton-text>\n </p>\n</ng-template>\n", styles: [":host ::ng-deep markdown div.logo{display:none;visibility:hidden}:host ::ng-deep markdown hr{border-top:1px solid var(--ion-color-medium-tint, #dcdcde);margin:10px 0}:host ::ng-deep markdown blockquote{--block-margin: 16px 0;--block-padding: 4px 16px;--box-shadow: 0 2px 4px rgba(0, 0, 0, .4);display:block;position:relative;width:70%;margin:var(--block-margin);padding:var(--block-padding);font-style:italic;background:var(--ion-color-light);box-shadow:var(--box-shadow)}:host ::ng-deep markdown code{color:rgba(var(--ion-text-color-rgb),.7);background:rgba(var(--ion-text-color-rgb),.03);font-size:.9rem;letter-spacing:-.5px}.loading-spinner ion-skeleton-text{width:100%;height:1.5em}.loading-spinner p{margin-top:var(ion-padding, 16px)}@media print{hr{page-break-before:always;border:none;margin:0}body{font-family:Roboto,Helvetica,Arial,sans-serif;margin:0;padding:20px}}\n"] }]
25405
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: Document, decorators: [{
25406
+ type: Inject,
25407
+ args: [DOCUMENT]
25408
+ }] }, { type: i1$5.ActivatedRoute, decorators: [{
25320
25409
  type: Optional
25321
25410
  }] }], propDecorators: { data: [{
25322
25411
  type: Input
@@ -25356,8 +25445,9 @@ class AppMarkdownModal {
25356
25445
  debug;
25357
25446
  title;
25358
25447
  showError = true;
25359
- markdownContent;
25360
- markdownUrl;
25448
+ canPrint = false;
25449
+ data;
25450
+ src;
25361
25451
  static async show(modalCtrl, options) {
25362
25452
  const modal = await modalCtrl.create({
25363
25453
  component: AppMarkdownModal,
@@ -25392,20 +25482,22 @@ class AppMarkdownModal {
25392
25482
  }
25393
25483
  }
25394
25484
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, deps: [{ token: i0.Injector }, { token: i2$1.ModalController }, { token: PlatformService }, { token: LocalSettingsService }, { token: i1$1.TranslateService }, { token: NetworkService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
25395
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", markdownContent: "markdownContent", markdownUrl: "markdownUrl" }, ngImport: i0, template: "@if (title) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2$1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25485
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppMarkdownModal, selector: "app-markdown-modal", inputs: { debug: "debug", title: "title", showError: "showError", canPrint: "canPrint", data: "data", src: "src" }, ngImport: i0, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"src\"\n [data]=\"data\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2$1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: ModalToolbarComponent, selector: "app-modal-toolbar", inputs: ["modalName", "title", "color", "showSpinner", "canValidate", "validateIcon"], outputs: ["cancel", "validate"] }, { kind: "component", type: AppMarkdownContent, selector: "app-markdown-content", inputs: ["data", "src", "anchor", "debug", "showError", "animated", "enableNavigationHistory", "updateRouteLocation"], outputs: ["markdownUrlChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25396
25486
  }
25397
25487
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppMarkdownModal, decorators: [{
25398
25488
  type: Component,
25399
- args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"markdownUrl\"\n [data]=\"markdownContent\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
25489
+ args: [{ selector: 'app-markdown-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (title || canPrint) {\n <app-modal-toolbar color=\"light\" [title]=\"title | translate\" (cancel)=\"close($event)\">\n @if (content.canGoBack) {\n <ion-button slot=\"start\" class=\"back-button\" (click)=\"goBack($event, content)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n }\n @if (canPrint) {\n <ion-button slot=\"end\" class=\"back-button\" (click)=\"content.print($event)\" routerDirection=\"back\">\n <ion-icon slot=\"icon-only\" name=\"print\"></ion-icon>\n </ion-button>\n }\n </app-modal-toolbar>\n}\n\n<ion-content class=\"ion-padding\">\n <app-markdown-content\n #content\n [src]=\"src\"\n [data]=\"data\"\n [showError]=\"showError\"\n [debug]=\"debug\"\n [updateRouteLocation]=\"false\"\n ></app-markdown-content>\n</ion-content>\n\n<ion-footer hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar>\n <ion-row class=\"ion-no-padding\">\n <ion-col></ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"solid\" color=\"tertiary\" (click)=\"close()\">{{ 'COMMON.BTN_CLOSE' | translate }}</ion-button>\n </ion-col>\n </ion-row>\n </ion-toolbar>\n</ion-footer>\n" }]
25400
25490
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i2$1.ModalController }, { type: PlatformService }, { type: LocalSettingsService }, { type: i1$1.TranslateService }, { type: NetworkService }, { type: i0.ChangeDetectorRef }], propDecorators: { debug: [{
25401
25491
  type: Input
25402
25492
  }], title: [{
25403
25493
  type: Input
25404
25494
  }], showError: [{
25405
25495
  type: Input
25406
- }], markdownContent: [{
25496
+ }], canPrint: [{
25407
25497
  type: Input
25408
- }], markdownUrl: [{
25498
+ }], data: [{
25499
+ type: Input
25500
+ }], src: [{
25409
25501
  type: Input
25410
25502
  }] } });
25411
25503
 
@@ -30990,7 +31082,7 @@ class HomePage extends RxState {
30990
31082
  if (isMarkdownFile) {
30991
31083
  await AppMarkdownModal.show(this.modalCtrl, {
30992
31084
  title: this.translate.instant(item.title, item.titleArgs),
30993
- markdownUrl: url,
31085
+ src: url,
30994
31086
  });
30995
31087
  }
30996
31088
  else {
@@ -45245,8 +45337,8 @@ class MarkdownTestPage {
45245
45337
  cd;
45246
45338
  markdownModalTitle = 'Markdown modal';
45247
45339
  // URL from a starting markdown
45248
- markdownUrl = 'http://localhost:3000/user-manual/index.md';
45249
- //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/projects/pifil/man/quick_start_guide_fr.md';
45340
+ //protected markdownUrl = 'http://localhost:3000/user-manual/index.md';
45341
+ markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/projects/pifil/man/quick_start_guide_fr.md';
45250
45342
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/README.md';
45251
45343
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/model/index.md';
45252
45344
  //protected markdownUrl = 'https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-doc/-/raw/master/model/administration/index.md';
@@ -45267,7 +45359,8 @@ class MarkdownTestPage {
45267
45359
  openHelpModal(event) {
45268
45360
  return AppMarkdownModal.show(this.modalCtrl, {
45269
45361
  title: this.markdownModalTitle,
45270
- markdownUrl: this.markdownUrl,
45362
+ src: this.markdownUrl,
45363
+ canPrint: true,
45271
45364
  });
45272
45365
  }
45273
45366
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownTestPage, deps: [{ token: i2$1.ModalController }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });