croco-html 4.0.1 → 5.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/croco-html.mjs +146 -145
- package/fesm2022/croco-html.mjs.map +1 -1
- package/index.d.ts +954 -3
- package/package.json +7 -9
- package/src/assets/sprites/symbol/croco-html-svg-sprite.svg +1 -1
- package/esm2022/croco-html.mjs +0 -5
- package/esm2022/lib/components/add-files-btn/add-files-btn.component.mjs +0 -55
- package/esm2022/lib/components/editor/button-editor/button-editor.component.mjs +0 -43
- package/esm2022/lib/components/editor/custom-widget-editor/custom-widget-editor.component.mjs +0 -41
- package/esm2022/lib/components/editor/download-file-button-editor/download-file-button-editor.component.mjs +0 -42
- package/esm2022/lib/components/editor/external-video-editor/embedded-video/code-video.component.mjs +0 -29
- package/esm2022/lib/components/editor/external-video-editor/external-video-editor.component.mjs +0 -84
- package/esm2022/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.mjs +0 -20
- package/esm2022/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.mjs +0 -20
- package/esm2022/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.mjs +0 -47
- package/esm2022/lib/components/editor/html-raw-editor/html-raw-editor.component.mjs +0 -33
- package/esm2022/lib/components/editor/image-editor/image-editor.component.mjs +0 -108
- package/esm2022/lib/components/editor/index.mjs +0 -9
- package/esm2022/lib/components/editor/main-editor/main-editor.component.mjs +0 -120
- package/esm2022/lib/components/editor/main-editor-block/main-editor-block.component.mjs +0 -49
- package/esm2022/lib/components/editor/text-editor/text-editor.component.mjs +0 -30
- package/esm2022/lib/components/editor/visual-editor/DefaultAligments.mjs +0 -12
- package/esm2022/lib/components/editor/visual-editor/DefaultTags.mjs +0 -28
- package/esm2022/lib/components/editor/visual-editor/visual-editor.component.mjs +0 -268
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +0 -24
- package/esm2022/lib/components/file-id-select/file-id-select.component.mjs +0 -87
- package/esm2022/lib/components/html-view/html-view.component.mjs +0 -18
- package/esm2022/lib/components/index.mjs +0 -7
- package/esm2022/lib/components/upload-files-btn/upload-files-btn.component.mjs +0 -66
- package/esm2022/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.mjs +0 -57
- package/esm2022/lib/components/xml-tags/html-raw-view/html-raw-view.component.mjs +0 -24
- package/esm2022/lib/components/xml-tags/index.mjs +0 -12
- package/esm2022/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.mjs +0 -42
- package/esm2022/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.mjs +0 -50
- package/esm2022/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.mjs +0 -48
- package/esm2022/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.mjs +0 -41
- package/esm2022/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.mjs +0 -16
- package/esm2022/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.mjs +0 -17
- package/esm2022/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.mjs +0 -16
- package/esm2022/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.mjs +0 -19
- package/esm2022/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.mjs +0 -19
- package/esm2022/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.mjs +0 -16
- package/esm2022/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.mjs +0 -41
- package/esm2022/lib/consts/index.mjs +0 -2
- package/esm2022/lib/croco-html.module.mjs +0 -106
- package/esm2022/lib/extensions/AngularMaterialTableMethods.mjs +0 -64
- package/esm2022/lib/extensions/BodyTagsExtensions.mjs +0 -192
- package/esm2022/lib/extensions/BootstrapTableMethods.mjs +0 -67
- package/esm2022/lib/extensions/ButtonMethods.mjs +0 -19
- package/esm2022/lib/extensions/CustomWidgetMethods.mjs +0 -33
- package/esm2022/lib/extensions/DownloadButtonMethods.mjs +0 -17
- package/esm2022/lib/extensions/HtmlExtractionMethods.mjs +0 -65
- package/esm2022/lib/extensions/HtmlRawTagDataConsts.mjs +0 -14
- package/esm2022/lib/extensions/ImageMethods.mjs +0 -101
- package/esm2022/lib/extensions/InterfaceBlock.mjs +0 -2
- package/esm2022/lib/extensions/TableBuilder.mjs +0 -35
- package/esm2022/lib/extensions/TableMethods.mjs +0 -108
- package/esm2022/lib/extensions/Tags.mjs +0 -22
- package/esm2022/lib/extensions/TextMethods.mjs +0 -39
- package/esm2022/lib/extensions/TextSimpleMethods.mjs +0 -81
- package/esm2022/lib/extensions/VideoMethods.mjs +0 -40
- package/esm2022/lib/extensions/XmlExtensions.mjs +0 -26
- package/esm2022/lib/extensions/index.mjs +0 -12
- package/esm2022/lib/index.mjs +0 -122
- package/esm2022/lib/models/image-models.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -3
- package/esm2022/lib/models/models.mjs +0 -2
- package/esm2022/lib/options/index.mjs +0 -2
- package/esm2022/lib/pipes/RichTextToHtmlPipe.mjs +0 -27
- package/esm2022/lib/pipes/TagToSpanPipe.mjs +0 -17
- package/esm2022/lib/pipes/ToHtmlBodyTagsPipe.mjs +0 -25
- package/esm2022/lib/pipes/ToPreviewHtmlPipe.mjs +0 -25
- package/esm2022/lib/pipes/index.mjs +0 -6
- package/esm2022/lib/pipes/sprite-icon-path.pipe.mjs +0 -17
- package/esm2022/lib/pipes/to-preview.pipe.mjs +0 -25
- package/esm2022/lib/services/CrocoHtmlFileOptionsService.mjs +0 -32
- package/esm2022/lib/services/HtmlViewController.mjs +0 -23
- package/esm2022/lib/services/PrivateFileUploadService.mjs +0 -34
- package/esm2022/lib/services/PrivateFilesQueryService.mjs +0 -24
- package/esm2022/lib/services/PublicFileUploadService.mjs +0 -34
- package/esm2022/lib/services/PublicFilesQueryService.mjs +0 -34
- package/esm2022/lib/services/blob-create.service.mjs +0 -20
- package/esm2022/lib/services/index.mjs +0 -3
- package/esm2022/lib/services/screen-width.service.mjs +0 -24
- package/esm2022/public-api.mjs +0 -12
- package/esm2022/sprites-ids.type.mjs +0 -2
- package/lib/components/add-files-btn/add-files-btn.component.d.ts +0 -20
- package/lib/components/editor/button-editor/button-editor.component.d.ts +0 -13
- package/lib/components/editor/custom-widget-editor/custom-widget-editor.component.d.ts +0 -13
- package/lib/components/editor/download-file-button-editor/download-file-button-editor.component.d.ts +0 -13
- package/lib/components/editor/external-video-editor/embedded-video/code-video.component.d.ts +0 -14
- package/lib/components/editor/external-video-editor/external-video-editor.component.d.ts +0 -17
- package/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.d.ts +0 -10
- package/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.d.ts +0 -10
- package/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.d.ts +0 -17
- package/lib/components/editor/html-raw-editor/html-raw-editor.component.d.ts +0 -15
- package/lib/components/editor/image-editor/image-editor.component.d.ts +0 -34
- package/lib/components/editor/index.d.ts +0 -8
- package/lib/components/editor/main-editor/main-editor.component.d.ts +0 -34
- package/lib/components/editor/main-editor-block/main-editor-block.component.d.ts +0 -14
- package/lib/components/editor/text-editor/text-editor.component.d.ts +0 -12
- package/lib/components/editor/visual-editor/DefaultAligments.d.ts +0 -9
- package/lib/components/editor/visual-editor/DefaultTags.d.ts +0 -6
- package/lib/components/editor/visual-editor/visual-editor.component.d.ts +0 -72
- package/lib/components/error-banner/error-banner.component.d.ts +0 -6
- package/lib/components/file-id-select/file-id-select.component.d.ts +0 -38
- package/lib/components/html-view/html-view.component.d.ts +0 -6
- package/lib/components/index.d.ts +0 -6
- package/lib/components/upload-files-btn/upload-files-btn.component.d.ts +0 -26
- package/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.d.ts +0 -22
- package/lib/components/xml-tags/html-raw-view/html-raw-view.component.d.ts +0 -12
- package/lib/components/xml-tags/index.d.ts +0 -11
- package/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.d.ts +0 -14
- package/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.d.ts +0 -19
- package/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.d.ts +0 -14
- package/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.d.ts +0 -11
- package/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.d.ts +0 -10
- package/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.d.ts +0 -10
- package/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.d.ts +0 -7
- package/lib/components/xml-tags/xml-tag-rich-text-view/xml-tag-rich-text-view.component.d.ts +0 -10
- package/lib/components/xml-tags/xml-tag-table-view/xml-tag-table-view.component.d.ts +0 -7
- package/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.d.ts +0 -10
- package/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.d.ts +0 -8
- package/lib/consts/index.d.ts +0 -1
- package/lib/croco-html.module.d.ts +0 -70
- package/lib/extensions/AngularMaterialTableMethods.d.ts +0 -7
- package/lib/extensions/BodyTagsExtensions.d.ts +0 -11
- package/lib/extensions/BootstrapTableMethods.d.ts +0 -9
- package/lib/extensions/ButtonMethods.d.ts +0 -18
- package/lib/extensions/CustomWidgetMethods.d.ts +0 -20
- package/lib/extensions/DownloadButtonMethods.d.ts +0 -16
- package/lib/extensions/HtmlExtractionMethods.d.ts +0 -59
- package/lib/extensions/HtmlRawTagDataConsts.d.ts +0 -13
- package/lib/extensions/ImageMethods.d.ts +0 -24
- package/lib/extensions/InterfaceBlock.d.ts +0 -7
- package/lib/extensions/TableBuilder.d.ts +0 -5
- package/lib/extensions/TableMethods.d.ts +0 -60
- package/lib/extensions/Tags.d.ts +0 -16
- package/lib/extensions/TextMethods.d.ts +0 -29
- package/lib/extensions/TextSimpleMethods.d.ts +0 -26
- package/lib/extensions/VideoMethods.d.ts +0 -29
- package/lib/extensions/XmlExtensions.d.ts +0 -5
- package/lib/extensions/index.d.ts +0 -11
- package/lib/index.d.ts +0 -25
- package/lib/models/image-models.d.ts +0 -19
- package/lib/models/index.d.ts +0 -2
- package/lib/models/models.d.ts +0 -15
- package/lib/options/index.d.ts +0 -46
- package/lib/pipes/RichTextToHtmlPipe.d.ts +0 -8
- package/lib/pipes/TagToSpanPipe.d.ts +0 -7
- package/lib/pipes/ToHtmlBodyTagsPipe.d.ts +0 -11
- package/lib/pipes/ToPreviewHtmlPipe.d.ts +0 -11
- package/lib/pipes/index.d.ts +0 -5
- package/lib/pipes/sprite-icon-path.pipe.d.ts +0 -8
- package/lib/pipes/to-preview.pipe.d.ts +0 -11
- package/lib/services/CrocoHtmlFileOptionsService.d.ts +0 -10
- package/lib/services/HtmlViewController.d.ts +0 -11
- package/lib/services/PrivateFileUploadService.d.ts +0 -26
- package/lib/services/PrivateFilesQueryService.d.ts +0 -21
- package/lib/services/PublicFileUploadService.d.ts +0 -26
- package/lib/services/PublicFilesQueryService.d.ts +0 -49
- package/lib/services/blob-create.service.d.ts +0 -10
- package/lib/services/index.d.ts +0 -2
- package/lib/services/screen-width.service.d.ts +0 -10
- package/public-api.d.ts +0 -8
- package/sprites-ids.type.d.ts +0 -1
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import { ReactiveFormsModule } from "@angular/forms";
|
|
3
|
-
import { MatFormField, MatInput, MatLabel } from "@angular/material/input";
|
|
4
|
-
import { MatCheckbox } from "@angular/material/checkbox";
|
|
5
|
-
import { MatDialogActions, MatDialogContent, MatDialogTitle } from "@angular/material/dialog";
|
|
6
|
-
import { MatButton } from "@angular/material/button";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/forms";
|
|
9
|
-
import * as i2 from "@angular/material/dialog";
|
|
10
|
-
import * as i3 from "../../../services/CrocoHtmlFileOptionsService";
|
|
11
|
-
export class HtmlEditorSettingsModalComponent {
|
|
12
|
-
constructor(fb, dialogRef, _htmlSettingsService) {
|
|
13
|
-
this.fb = fb;
|
|
14
|
-
this.dialogRef = dialogRef;
|
|
15
|
-
this._htmlSettingsService = _htmlSettingsService;
|
|
16
|
-
this.form = this.fb.group({
|
|
17
|
-
usePrivateFiles: false,
|
|
18
|
-
applicationId: ''
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
ngOnInit() {
|
|
22
|
-
this.form.patchValue(this._htmlSettingsService.get());
|
|
23
|
-
}
|
|
24
|
-
cancel() {
|
|
25
|
-
this.dialogRef.close();
|
|
26
|
-
}
|
|
27
|
-
setSettings() {
|
|
28
|
-
this.dialogRef.close(this.form.getRawValue());
|
|
29
|
-
}
|
|
30
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HtmlEditorSettingsModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MatDialogRef }, { token: i3.CrocoHtmlFileOptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HtmlEditorSettingsModalComponent, isStandalone: true, selector: "croco-html-html-editor-settings-modal", ngImport: i0, template: "<div mat-dialog-title>\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430</div>\n<div mat-dialog-content class=\"editor-settings\" [formGroup]=\"form\">\n <mat-form-field style=\"margin-top: 20px\">\n <mat-label>\n \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F\n </mat-label>\n <input matInput formControlName=\"applicationId\">\n </mat-form-field>\n\n <div>\n <mat-label>\n \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B\n </mat-label>\n <mat-checkbox\n formControlName=\"usePrivateFiles\">\n </mat-checkbox>\n </div>\n\n</div>\n<div mat-dialog-actions style=\"display: flex; justify-content: flex-end\">\n <button mat-raised-button color=\"warn\" (click)=\"cancel()\" >\u041E\u0442\u043C\u0435\u043D\u0430</button>\n <button mat-raised-button color=\"primary\" (click)=\"setSettings()\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C</button>\n</div>\n", styles: [".editor-settings{padding:20px;display:flex;gap:10px;flex-direction:column;width:360px}\n"], dependencies: [{ kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
|
|
32
|
-
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HtmlEditorSettingsModalComponent, decorators: [{
|
|
34
|
-
type: Component,
|
|
35
|
-
args: [{ selector: 'croco-html-html-editor-settings-modal', standalone: true, imports: [
|
|
36
|
-
MatInput,
|
|
37
|
-
MatCheckbox,
|
|
38
|
-
ReactiveFormsModule,
|
|
39
|
-
MatFormField,
|
|
40
|
-
MatLabel,
|
|
41
|
-
MatDialogTitle,
|
|
42
|
-
MatDialogContent,
|
|
43
|
-
MatDialogActions,
|
|
44
|
-
MatButton
|
|
45
|
-
], template: "<div mat-dialog-title>\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430</div>\n<div mat-dialog-content class=\"editor-settings\" [formGroup]=\"form\">\n <mat-form-field style=\"margin-top: 20px\">\n <mat-label>\n \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F\n </mat-label>\n <input matInput formControlName=\"applicationId\">\n </mat-form-field>\n\n <div>\n <mat-label>\n \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B\n </mat-label>\n <mat-checkbox\n formControlName=\"usePrivateFiles\">\n </mat-checkbox>\n </div>\n\n</div>\n<div mat-dialog-actions style=\"display: flex; justify-content: flex-end\">\n <button mat-raised-button color=\"warn\" (click)=\"cancel()\" >\u041E\u0442\u043C\u0435\u043D\u0430</button>\n <button mat-raised-button color=\"primary\" (click)=\"setSettings()\">\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C</button>\n</div>\n", styles: [".editor-settings{padding:20px;display:flex;gap:10px;flex-direction:column;width:360px}\n"] }]
|
|
46
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.MatDialogRef }, { type: i3.CrocoHtmlFileOptionsService }] });
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1lZGl0b3Itc2V0dGluZ3MtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL2h0bWwtZWRpdG9yLXNldHRpbmdzLW1vZGFsL2h0bWwtZWRpdG9yLXNldHRpbmdzLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9odG1sLWVkaXRvci1zZXR0aW5ncy1tb2RhbC9odG1sLWVkaXRvci1zZXR0aW5ncy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBMEIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFnQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7O0FBb0JyRCxNQUFNLE9BQU8sZ0NBQWdDO0lBRzNDLFlBQ21CLEVBQWUsRUFDaEIsU0FBeUQsRUFDeEQsb0JBQWlEO1FBRmpELE9BQUUsR0FBRixFQUFFLENBQWE7UUFDaEIsY0FBUyxHQUFULFNBQVMsQ0FBZ0Q7UUFDeEQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUE2QjtRQUVsRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7K0dBeEJVLGdDQUFnQzttR0FBaEMsZ0NBQWdDLGlHQ3pCN0Msa3BDQXVCQSxrSkRYSSxRQUFRLGlVQUNSLFdBQVcsdVZBQ1gsbUJBQW1CLG8yQkFDbkIsWUFBWSw0TEFDWixRQUFRLHNEQUNSLGNBQWMsK0hBQ2QsZ0JBQWdCLHlHQUNoQixnQkFBZ0IsNEhBQ2hCLFNBQVM7OzRGQUtBLGdDQUFnQztrQkFqQjVDLFNBQVM7K0JBQ0UsdUNBQXVDLGNBQ3JDLElBQUksV0FDUDt3QkFDUCxRQUFRO3dCQUNSLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsU0FBUztxQkFDViIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdElucHV0LCBNYXRMYWJlbCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3ggfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3hcIjtcbmltcG9ydCB7IE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1JlZiwgTWF0RGlhbG9nVGl0bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uXCI7XG5pbXBvcnQgeyBDcm9jb0h0bWxGaWxlT3B0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvQ3JvY29IdG1sRmlsZU9wdGlvbnNTZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nyb2NvLWh0bWwtaHRtbC1lZGl0b3Itc2V0dGluZ3MtbW9kYWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0SW5wdXQsXG4gICAgTWF0Q2hlY2tib3gsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0RGlhbG9nVGl0bGUsXG4gICAgTWF0RGlhbG9nQ29udGVudCxcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxuICAgIE1hdEJ1dHRvblxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vaHRtbC1lZGl0b3Itc2V0dGluZ3MtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vaHRtbC1lZGl0b3Itc2V0dGluZ3MtbW9kYWwuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIEh0bWxFZGl0b3JTZXR0aW5nc01vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8SHRtbEVkaXRvclNldHRpbmdzTW9kYWxDb21wb25lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2h0bWxTZXR0aW5nc1NlcnZpY2U6IENyb2NvSHRtbEZpbGVPcHRpb25zU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHVzZVByaXZhdGVGaWxlczogZmFsc2UsXG4gICAgICBhcHBsaWNhdGlvbklkOiAnJ1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5faHRtbFNldHRpbmdzU2VydmljZS5nZXQoKSlcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgc2V0U2V0dGluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICB9XG59XG4iLCI8ZGl2IG1hdC1kaWFsb2ctdGl0bGU+0J3QsNGB0YLRgNC+0LnQutC4INGA0LXQtNCw0LrRgtC+0YDQsDwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJlZGl0b3Itc2V0dGluZ3NcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwibWFyZ2luLXRvcDogMjBweFwiPlxuICAgIDxtYXQtbGFiZWw+XG4gICAgICDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9GA0LjQu9C+0LbQtdC90LjRj1xuICAgIDwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJhcHBsaWNhdGlvbklkXCI+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPGRpdj5cbiAgICA8bWF0LWxhYmVsPlxuICAgICAg0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0YDQuNCy0LDRgtC90YvQtSDRhNCw0LnQu9GLXG4gICAgPC9tYXQtbGFiZWw+XG4gICAgPG1hdC1jaGVja2JveFxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidXNlUHJpdmF0ZUZpbGVzXCI+XG4gICAgPC9tYXQtY2hlY2tib3g+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFwiPlxuICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIChjbGljayk9XCJjYW5jZWwoKVwiID7QntGC0LzQtdC90LA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic2V0U2V0dGluZ3MoKVwiPtCh0L7RhdGA0LDQvdC40YLRjDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { FormsModule } from '@angular/forms';
|
|
3
|
-
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
4
|
-
import { MatInput } from '@angular/material/input';
|
|
5
|
-
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/platform-browser";
|
|
8
|
-
import * as i2 from "@angular/forms";
|
|
9
|
-
export class HtmlRawEditorComponent {
|
|
10
|
-
constructor(_sanitizer) {
|
|
11
|
-
this._sanitizer = _sanitizer;
|
|
12
|
-
this.onTagUpdated = new EventEmitter();
|
|
13
|
-
}
|
|
14
|
-
ngOnChanges(changes) {
|
|
15
|
-
if (changes['tag'] && changes['tag'].currentValue !== changes['tag'].previousValue) {
|
|
16
|
-
this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.tag.innerHtml);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
onSafeHtmlChange() {
|
|
20
|
-
this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.tag.innerHtml);
|
|
21
|
-
}
|
|
22
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HtmlRawEditorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HtmlRawEditorComponent, isStandalone: true, selector: "croco-html-html-raw-editor", inputs: { tag: "tag" }, outputs: { onTagUpdated: "onTagUpdated" }, usesOnChanges: true, ngImport: i0, template: "@if (tag.presentOrEdit) {\n <div [innerHTML]=\"safeHtml\">\n </div>\n}\n@if (!tag.presentOrEdit) {\n <div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0430 \u0442\u0435\u0433\u0430\n </mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0430 \u0442\u0435\u0433\u0430\"\n [(ngModel)]=\"tag.innerHtml\"\n (ngModelChange)=\"onSafeHtmlChange()\"\n ></textarea>\n </mat-form-field>\n </div>\n </div>\n}\n\n", styles: [".code-view.video-player{margin:0 auto;max-width:640px;width:100%;height:360px}.code-view.use-responsive ::ng-deep iframe{width:100%;height:100%}@media screen and (max-width: 768px){.code-view.use-responsive{height:300px}}@media screen and (max-width: 575px){.code-view.use-responsive{height:250px}}@media screen and (max-width: 480px){.code-view.use-responsive{height:200px}}@media screen and (max-width: 380px){.code-view.use-responsive{height:180px}}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
24
|
-
}
|
|
25
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HtmlRawEditorComponent, decorators: [{
|
|
26
|
-
type: Component,
|
|
27
|
-
args: [{ selector: 'croco-html-html-raw-editor', standalone: true, imports: [MatFormField, MatLabel, MatInput, CdkTextareaAutosize, FormsModule], template: "@if (tag.presentOrEdit) {\n <div [innerHTML]=\"safeHtml\">\n </div>\n}\n@if (!tag.presentOrEdit) {\n <div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0430 \u0442\u0435\u0433\u0430\n </mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u044F\u044F \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0430 \u0442\u0435\u0433\u0430\"\n [(ngModel)]=\"tag.innerHtml\"\n (ngModelChange)=\"onSafeHtmlChange()\"\n ></textarea>\n </mat-form-field>\n </div>\n </div>\n}\n\n", styles: [".code-view.video-player{margin:0 auto;max-width:640px;width:100%;height:360px}.code-view.use-responsive ::ng-deep iframe{width:100%;height:100%}@media screen and (max-width: 768px){.code-view.use-responsive{height:300px}}@media screen and (max-width: 575px){.code-view.use-responsive{height:250px}}@media screen and (max-width: 480px){.code-view.use-responsive{height:200px}}@media screen and (max-width: 380px){.code-view.use-responsive{height:180px}}\n"] }]
|
|
28
|
-
}], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { tag: [{
|
|
29
|
-
type: Input
|
|
30
|
-
}], onTagUpdated: [{
|
|
31
|
-
type: Output
|
|
32
|
-
}] } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1yYXctZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9odG1sLXJhdy1lZGl0b3IvaHRtbC1yYXctZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9odG1sLXJhdy1lZGl0b3IvaHRtbC1yYXctZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRWpHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQVV0RSxNQUFNLE9BQU8sc0JBQXNCO0lBVWpDLFlBQTZCLFVBQXdCO1FBQXhCLGVBQVUsR0FBVixVQUFVLENBQWM7UUFKckQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO0lBSVUsQ0FBQztJQUUxRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RSxDQUFDOytHQXBCVSxzQkFBc0I7bUdBQXRCLHNCQUFzQiw4S0NmbkMsaTFCQXdCQSxnZ0JEWFksWUFBWSw0TEFBRSxRQUFRLHNEQUFFLFFBQVEsaVVBQUUsbUJBQW1CLHdNQUFFLFdBQVc7OzRGQUVqRSxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsNEJBQTRCLGNBRzFCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsQ0FBQztpRkFLN0UsR0FBRztzQkFERixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0bWxCb2R5VGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL21vZGVscyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka1RleHRhcmVhQXV0b3NpemUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGV4dC1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcm9jby1odG1sLWh0bWwtcmF3LWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9odG1sLXJhdy1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi4vZXh0ZXJuYWwtdmlkZW8tZWRpdG9yL2V4dGVybmFsLXZpZGVvLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0Rm9ybUZpZWxkLCBNYXRMYWJlbCwgTWF0SW5wdXQsIENka1RleHRhcmVhQXV0b3NpemUsIEZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBIdG1sUmF3RWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICB0YWc6IEh0bWxCb2R5VGFnO1xuXG4gIEBPdXRwdXQoKVxuICBvblRhZ1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEh0bWxCb2R5VGFnPigpO1xuXG4gIHNhZmVIdG1sOiBTYWZlSHRtbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcikgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd0YWcnXSAmJiBjaGFuZ2VzWyd0YWcnXS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ3RhZyddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuc2FmZUh0bWwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy50YWcuaW5uZXJIdG1sKTtcbiAgICB9XG4gIH1cblxuICBvblNhZmVIdG1sQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuc2FmZUh0bWwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy50YWcuaW5uZXJIdG1sKTtcbiAgfVxufVxuIiwiQGlmICh0YWcucHJlc2VudE9yRWRpdCkge1xuICAgIDxkaXYgW2lubmVySFRNTF09XCJzYWZlSHRtbFwiPlxuICAgIDwvZGl2PlxufVxuQGlmICghdGFnLnByZXNlbnRPckVkaXQpIHtcbiAgPGRpdj5cbiAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMHB4O1wiPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgINCS0L3Rg9GC0YDQtdC90L3Rj9GPINGA0LDQt9C80LXRgtC60LAg0YLQtdCz0LBcbiAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBjZGtUZXh0YXJlYUF1dG9zaXplICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIlxuICAgICAgICAgIGNka0F1dG9zaXplTWluUm93cz1cIjFcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwi0JLQvdGD0YLRgNC10L3QvdGP0Y8g0YDQsNC30LzQtdGC0LrQsCDRgtC10LPQsFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWcuaW5uZXJIdG1sXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNhZmVIdG1sQ2hhbmdlKClcIlxuICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuXG4iXX0=
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';
|
|
2
|
-
import { ImageMethods, FileImageTagDataConsts } from '../../../extensions';
|
|
3
|
-
import { CrocoHtmlOptionsToken } from '../../../consts';
|
|
4
|
-
import { MatInput } from '@angular/material/input';
|
|
5
|
-
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
|
6
|
-
import { FileIdSelectComponent } from '../../file-id-select/file-id-select.component';
|
|
7
|
-
import { MatIcon } from '@angular/material/icon';
|
|
8
|
-
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';
|
|
10
|
-
import { NgStyle } from "@angular/common";
|
|
11
|
-
import { MatIconButton } from "@angular/material/button";
|
|
12
|
-
import { MatSlideToggle } from "@angular/material/slide-toggle";
|
|
13
|
-
import { Subject, takeUntil } from "rxjs";
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "../../../services/screen-width.service";
|
|
16
|
-
import * as i2 from "@angular/forms";
|
|
17
|
-
export class ImageEditorComponent {
|
|
18
|
-
onErrorHandler() {
|
|
19
|
-
this.hasImageError = true;
|
|
20
|
-
}
|
|
21
|
-
get fileId() {
|
|
22
|
-
return this.tag.attributes[FileImageTagDataConsts.FileIdAttrName];
|
|
23
|
-
}
|
|
24
|
-
set fileId(value) {
|
|
25
|
-
this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = value;
|
|
26
|
-
}
|
|
27
|
-
constructor(_options, screenWidthService) {
|
|
28
|
-
this._options = _options;
|
|
29
|
-
this.screenWidthService = screenWidthService;
|
|
30
|
-
this.hasImageError = false;
|
|
31
|
-
this.searchOrEdit = "search";
|
|
32
|
-
this.requests = [];
|
|
33
|
-
this.imageMaxHeight = null;
|
|
34
|
-
this.imageMaxWidth = null;
|
|
35
|
-
this.isShowMediaRequest = false;
|
|
36
|
-
this.unsubscribe = new Subject();
|
|
37
|
-
this.onTagUpdated = new EventEmitter();
|
|
38
|
-
}
|
|
39
|
-
getSrc() {
|
|
40
|
-
return ImageMethods.buildUrl(this.tag.attributes[FileImageTagDataConsts.FileIdAttrName], "Medium", this._options);
|
|
41
|
-
}
|
|
42
|
-
hasFileId() {
|
|
43
|
-
return this.tag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName);
|
|
44
|
-
}
|
|
45
|
-
onFileIdChanged(fileId) {
|
|
46
|
-
this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = fileId;
|
|
47
|
-
this.removeImageError();
|
|
48
|
-
}
|
|
49
|
-
removeImageError() {
|
|
50
|
-
this.hasImageError = false;
|
|
51
|
-
}
|
|
52
|
-
ngOnInit() {
|
|
53
|
-
let attr = this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest];
|
|
54
|
-
this.requests = ImageMethods.mediaRequestStringToArrayParser(attr);
|
|
55
|
-
this.screenWidthService.getScreenWidth()
|
|
56
|
-
.pipe(takeUntil(this.unsubscribe))
|
|
57
|
-
.subscribe(screenWidth => {
|
|
58
|
-
let imageRestrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);
|
|
59
|
-
this.imageMaxHeight = imageRestrictions.maxHeight;
|
|
60
|
-
this.imageMaxWidth = imageRestrictions.maxWidth;
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
requestChanged() {
|
|
64
|
-
this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest] = ImageMethods.mediaRequestsArrayToString(this.requests);
|
|
65
|
-
}
|
|
66
|
-
addNewMediaRequest() {
|
|
67
|
-
this.requests.push({
|
|
68
|
-
maxScreenWidth: 0,
|
|
69
|
-
minScreenWidth: 0,
|
|
70
|
-
maxImageHeight: 0,
|
|
71
|
-
maxImageWidth: 0
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
deleteMediaRequest(index) {
|
|
75
|
-
this.requests.splice(index, 1);
|
|
76
|
-
this.requestChanged();
|
|
77
|
-
}
|
|
78
|
-
ngOnDestroy() {
|
|
79
|
-
this.unsubscribe.next();
|
|
80
|
-
this.unsubscribe.complete();
|
|
81
|
-
}
|
|
82
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageEditorComponent, deps: [{ token: CrocoHtmlOptionsToken }, { token: i1.ScreenWidthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
83
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ImageEditorComponent, isStandalone: true, selector: "croco-html-image-editor", inputs: { tag: "tag" }, outputs: { onTagUpdated: "onTagUpdated" }, ngImport: i0, template: "<div>\n <div style=\"height: 10px;\">\n </div>\n\n @if (hasImageError) {\n <div class=\"error-block\">\n \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u043C\u0443 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0443, \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0444\u0430\u0439\u043B \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043B\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\n </div>\n }\n\n @if (hasFileId() && !hasImageError) {\n <div>\n <img\n [ngStyle]=\"{ 'max-height': imageMaxHeight ? imageMaxHeight + 'px' : '100%', 'max-width': imageMaxWidth ? imageMaxWidth + 'px' : '100%', }\"\n class=\"mx-auto d-block img-fluid\" [src]=\"getSrc()\" (error)=\"onErrorHandler()\" alt=\"photo\"/>\n </div>\n }\n\n @if (!hasFileId()) {\n <div>\n <h5>[\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E]</h5>\n </div>\n }\n\n @if(!tag.presentOrEdit) {\n <mat-slide-toggle style=\"padding: 10px 0\" [(ngModel)]=\"isShowMediaRequest\">\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043C\u0435\u0434\u0438\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u044B</mat-slide-toggle>\n }\n\n @if(isShowMediaRequest) {\n <div style=\"display: flex; flex-direction: column; gap: 20px\">\n <div class=\"media-request__header\">\n <span>\u041C\u0435\u0434\u0438\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u044B:</span>\n @if (!tag.presentOrEdit) {\n <button (click)=\"addNewMediaRequest()\" class=\"w-30\" mat-icon-button color=\"primary\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n @for (request of requests; track $index) {\n <div class=\"media-request__container\">\n @if (tag.presentOrEdit) {\n <div style=\"display: flex; flex-direction: column; gap: 5px\">\n <span class=\"w-100\">\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430: {{request.minScreenWidth}}</span>\n <span class=\"w-100\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430: {{request.maxScreenWidth}}</span>\n <span class=\"w-100\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F: {{request.maxImageHeight}}</span>\n <span class=\"w-100\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F: {{request.maxImageWidth}}</span>\n </div>\n }\n\n @if (!tag.presentOrEdit) {\n <div style=\"width: 100%\">\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430\n </mat-label>\n <input matInput placeholder=\"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0448\u0438\u0440\u0438\u043D\u044B\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.minScreenWidth\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430\n </mat-label>\n <input matInput placeholder=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0448\u0438\u0440\u0438\u043D\u044B\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.maxScreenWidth\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\n </mat-label>\n <input matInput placeholder=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.maxImageHeight\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\n </mat-label>\n <input matInput placeholder=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.maxImageWidth\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n </div>\n\n <button (click)=\"deleteMediaRequest($index)\" class=\"w-30\" mat-icon-button color=\"warn\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n\n@if (!tag.presentOrEdit) {\n <div>\n <div style=\"height: 10px;\"></div>\n <div style=\"overflow-x:auto;\">\n <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n <mat-button-toggle value=\"search\">\n \u0418\u0441\u043A\u0430\u0442\u044C \u0444\u0430\u0439\u043B <mat-icon>search</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"edit\">\n \u0423\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u043E \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0443 <mat-icon>settings</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"height: 10px;\"></div>\n <div [hidden]=\"searchOrEdit !== 'search'\">\n <croco-html-file-id-select\n [labelText]=\"'\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0444\u0430\u0439\u043B'\"\n [(fileId)]=\"fileId\"\n (onFileIdChanged)=\"onFileIdChanged($event)\">\n </croco-html-file-id-select>\n </div>\n <div [hidden]=\"searchOrEdit !== 'edit'\">\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0444\u0430\u0439\u043B\u0430\n </mat-label>\n <input matInput placeholder=\"\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0444\u0430\u0439\u043B\u0430\" new-autocomplete=\"off\" autocomplete=\"off\"\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileIdChanged($event)\">\n </mat-form-field>\n </div>\n </div>\n </div>\n}\n", styles: [".error-block{background-color:#f32323;color:#fff;text-align:center;border-radius:10px;padding:10px}.media-request__header{align-items:center;display:flex;width:100%;justify-content:space-between}.media-request__container{display:flex;align-items:center;border-bottom:1px solid rgba(128,128,128,.7);padding-bottom:10px}@media screen and (max-width: 768px){mat-button-toggle-group{display:flex;flex-direction:column}}\n"], dependencies: [{ kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FileIdSelectComponent, selector: "croco-html-file-id-select", inputs: ["labelText", "fileId"], outputs: ["fileId", "onFileIdChanged"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }] }); }
|
|
84
|
-
}
|
|
85
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageEditorComponent, decorators: [{
|
|
86
|
-
type: Component,
|
|
87
|
-
args: [{ selector: 'croco-html-image-editor', standalone: true, imports: [
|
|
88
|
-
MatButtonToggleGroup,
|
|
89
|
-
FormsModule,
|
|
90
|
-
MatButtonToggle,
|
|
91
|
-
MatIcon,
|
|
92
|
-
FileIdSelectComponent,
|
|
93
|
-
MatFormField,
|
|
94
|
-
MatLabel,
|
|
95
|
-
MatInput,
|
|
96
|
-
NgStyle,
|
|
97
|
-
MatIconButton,
|
|
98
|
-
MatSlideToggle
|
|
99
|
-
], template: "<div>\n <div style=\"height: 10px;\">\n </div>\n\n @if (hasImageError) {\n <div class=\"error-block\">\n \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043F\u043E \u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u043C\u0443 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0443, \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0444\u0430\u0439\u043B \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043B\u0438 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\n </div>\n }\n\n @if (hasFileId() && !hasImageError) {\n <div>\n <img\n [ngStyle]=\"{ 'max-height': imageMaxHeight ? imageMaxHeight + 'px' : '100%', 'max-width': imageMaxWidth ? imageMaxWidth + 'px' : '100%', }\"\n class=\"mx-auto d-block img-fluid\" [src]=\"getSrc()\" (error)=\"onErrorHandler()\" alt=\"photo\"/>\n </div>\n }\n\n @if (!hasFileId()) {\n <div>\n <h5>[\u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E]</h5>\n </div>\n }\n\n @if(!tag.presentOrEdit) {\n <mat-slide-toggle style=\"padding: 10px 0\" [(ngModel)]=\"isShowMediaRequest\">\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043C\u0435\u0434\u0438\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u044B</mat-slide-toggle>\n }\n\n @if(isShowMediaRequest) {\n <div style=\"display: flex; flex-direction: column; gap: 20px\">\n <div class=\"media-request__header\">\n <span>\u041C\u0435\u0434\u0438\u0430 \u0437\u0430\u043F\u0440\u043E\u0441\u044B:</span>\n @if (!tag.presentOrEdit) {\n <button (click)=\"addNewMediaRequest()\" class=\"w-30\" mat-icon-button color=\"primary\">\n <mat-icon>add</mat-icon>\n </button>\n }\n </div>\n @for (request of requests; track $index) {\n <div class=\"media-request__container\">\n @if (tag.presentOrEdit) {\n <div style=\"display: flex; flex-direction: column; gap: 5px\">\n <span class=\"w-100\">\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430: {{request.minScreenWidth}}</span>\n <span class=\"w-100\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430: {{request.maxScreenWidth}}</span>\n <span class=\"w-100\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F: {{request.maxImageHeight}}</span>\n <span class=\"w-100\">\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F: {{request.maxImageWidth}}</span>\n </div>\n }\n\n @if (!tag.presentOrEdit) {\n <div style=\"width: 100%\">\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430\n </mat-label>\n <input matInput placeholder=\"\u041C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0448\u0438\u0440\u0438\u043D\u044B\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.minScreenWidth\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430\n </mat-label>\n <input matInput placeholder=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0433\u0440\u0430\u043D\u0438\u0446\u0430 \u0448\u0438\u0440\u0438\u043D\u044B\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.maxScreenWidth\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\n </mat-label>\n <input matInput placeholder=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0432\u044B\u0441\u043E\u0442\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.maxImageHeight\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\n </mat-label>\n <input matInput placeholder=\"\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0448\u0438\u0440\u0438\u043D\u0430 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\"\n autocomplete=\"off\"\n [(ngModel)]=\"request.maxImageWidth\"\n (ngModelChange)=\"requestChanged()\">\n </mat-form-field>\n </div>\n\n <button (click)=\"deleteMediaRequest($index)\" class=\"w-30\" mat-icon-button color=\"warn\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n\n@if (!tag.presentOrEdit) {\n <div>\n <div style=\"height: 10px;\"></div>\n <div style=\"overflow-x:auto;\">\n <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n <mat-button-toggle value=\"search\">\n \u0418\u0441\u043A\u0430\u0442\u044C \u0444\u0430\u0439\u043B <mat-icon>search</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"edit\">\n \u0423\u043A\u0430\u0437\u0430\u0442\u044C \u043F\u043E \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0443 <mat-icon>settings</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"height: 10px;\"></div>\n <div [hidden]=\"searchOrEdit !== 'search'\">\n <croco-html-file-id-select\n [labelText]=\"'\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0444\u0430\u0439\u043B'\"\n [(fileId)]=\"fileId\"\n (onFileIdChanged)=\"onFileIdChanged($event)\">\n </croco-html-file-id-select>\n </div>\n <div [hidden]=\"searchOrEdit !== 'edit'\">\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0444\u0430\u0439\u043B\u0430\n </mat-label>\n <input matInput placeholder=\"\u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0444\u0430\u0439\u043B\u0430\" new-autocomplete=\"off\" autocomplete=\"off\"\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileIdChanged($event)\">\n </mat-form-field>\n </div>\n </div>\n </div>\n}\n", styles: [".error-block{background-color:#f32323;color:#fff;text-align:center;border-radius:10px;padding:10px}.media-request__header{align-items:center;display:flex;width:100%;justify-content:space-between}.media-request__container{display:flex;align-items:center;border-bottom:1px solid rgba(128,128,128,.7);padding-bottom:10px}@media screen and (max-width: 768px){mat-button-toggle-group{display:flex;flex-direction:column}}\n"] }]
|
|
100
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
101
|
-
type: Inject,
|
|
102
|
-
args: [CrocoHtmlOptionsToken]
|
|
103
|
-
}] }, { type: i1.ScreenWidthService }], propDecorators: { tag: [{
|
|
104
|
-
type: Input
|
|
105
|
-
}], onTagUpdated: [{
|
|
106
|
-
type: Output
|
|
107
|
-
}] } });
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9pbWFnZS1lZGl0b3IvaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9pbWFnZS1lZGl0b3IvaW1hZ2UtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NB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QUNqQixjQUFjLEVBQUUsQ0FBQztZQUNqQixjQUFjLEVBQUUsQ0FBQztZQUNqQixhQUFhLEVBQUUsQ0FBQztTQUNqQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7K0dBckZVLG9CQUFvQixrQkE2QnJCLHFCQUFxQjttR0E3QnBCLG9CQUFvQixzSkNyQ2pDLG9vUEF5SUEsMmREakhJLG9CQUFvQixpVEFDcEIsV0FBVywrbUJBQ1gsZUFBZSw2UUFDZixPQUFPLDJJQUNQLHFCQUFxQiwrSUFDckIsWUFBWSw0TEFDWixRQUFRLHNEQUNSLFFBQVEsaVVBQ1IsT0FBTywyRUFDUCxhQUFhLDZGQUNiLGNBQWM7OzRGQUdMLG9CQUFvQjtrQkFuQmhDLFNBQVM7K0JBQ0UseUJBQXlCLGNBR3ZCLElBQUksV0FDUDt3QkFDUCxvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixPQUFPO3dCQUNQLHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWixRQUFRO3dCQUNSLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLGNBQWM7cUJBQ2Y7OzBCQStCRSxNQUFNOzJCQUFDLHFCQUFxQjswRUFsQi9CLEdBQUc7c0JBREYsS0FBSztnQkFRTixZQUFZO3NCQURYLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VNZXRob2RzLCBGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzIH0gZnJvbSAnLi4vLi4vLi4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBIdG1sQm9keVRhZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9tb2RlbHMnO1xuaW1wb3J0IHsgQ3JvY29IdG1sT3B0aW9uc1Rva2VufSBmcm9tICcuLi8uLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBGaWxlSWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9maWxlLWlkLXNlbGVjdC9maWxlLWlkLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVHcm91cCwgTWF0QnV0dG9uVG9nZ2xlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBOZ1N0eWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgU2NyZWVuV2lkdGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL3NjcmVlbi13aWR0aC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBNYXRJY29uQnV0dG9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvblwiO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQ3JvY29IdG1sT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL29wdGlvbnMnO1xuaW1wb3J0IHsgSU1lZGlhUmVxdWVzdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nyb2NvLWh0bWwtaW1hZ2UtZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0QnV0dG9uVG9nZ2xlR3JvdXAsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0QnV0dG9uVG9nZ2xlLFxuICAgIE1hdEljb24sXG4gICAgRmlsZUlkU2VsZWN0Q29tcG9uZW50LFxuICAgIE1hdEZvcm1GaWVsZCxcbiAgICBNYXRMYWJlbCxcbiAgICBNYXRJbnB1dCxcbiAgICBOZ1N0eWxlLFxuICAgIE1hdEljb25CdXR0b24sXG4gICAgTWF0U2xpZGVUb2dnbGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBoYXNJbWFnZUVycm9yID0gZmFsc2U7XG4gIHNlYXJjaE9yRWRpdCA9IFwic2VhcmNoXCI7XG4gIHJlcXVlc3RzOiBJTWVkaWFSZXF1ZXN0W10gPSBbXTtcbiAgaW1hZ2VNYXhIZWlnaHQ6IG51bWJlciA9IG51bGw7XG4gIGltYWdlTWF4V2lkdGg6IG51bWJlciA9IG51bGw7XG4gIGlzU2hvd01lZGlhUmVxdWVzdCA9IGZhbHNlO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBASW5wdXQoKVxuICB0YWc6IEh0bWxCb2R5VGFnO1xuXG4gIG9uRXJyb3JIYW5kbGVyKCkge1xuICAgIHRoaXMuaGFzSW1hZ2VFcnJvciA9IHRydWU7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgb25UYWdVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxIdG1sQm9keVRhZz4oKTtcblxuICBwdWJsaWMgZ2V0IGZpbGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRhZy5hdHRyaWJ1dGVzW0ZpbGVJbWFnZVRhZ0RhdGFDb25zdHMuRmlsZUlkQXR0ck5hbWVdO1xuICB9XG5cbiAgcHVibGljIHNldCBmaWxlSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGFnLmF0dHJpYnV0ZXNbRmlsZUltYWdlVGFnRGF0YUNvbnN0cy5GaWxlSWRBdHRyTmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ3JvY29IdG1sT3B0aW9uc1Rva2VuKSBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBDcm9jb0h0bWxPcHRpb25zLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NyZWVuV2lkdGhTZXJ2aWNlOiBTY3JlZW5XaWR0aFNlcnZpY2UsXG4gICkgeyB9XG5cbiAgZ2V0U3JjKCkge1xuICAgIHJldHVybiBJbWFnZU1ldGhvZHMuYnVpbGRVcmwodGhpcy50YWcuYXR0cmlidXRlc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLkZpbGVJZEF0dHJOYW1lXSwgXCJNZWRpdW1cIiwgdGhpcy5fb3B0aW9ucyk7XG4gIH1cblxuICBoYXNGaWxlSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFnLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoRmlsZUltYWdlVGFnRGF0YUNvbnN0cy5GaWxlSWRBdHRyTmFtZSk7XG4gIH1cblxuICBvbkZpbGVJZENoYW5nZWQoZmlsZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRhZy5hdHRyaWJ1dGVzW0ZpbGVJbWFnZVRhZ0RhdGFDb25zdHMuRmlsZUlkQXR0ck5hbWVdID0gZmlsZUlkO1xuICAgIHRoaXMucmVtb3ZlSW1hZ2VFcnJvcigpO1xuICB9XG5cbiAgcmVtb3ZlSW1hZ2VFcnJvcigpIHtcbiAgICB0aGlzLmhhc0ltYWdlRXJyb3IgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGxldCBhdHRyID0gdGhpcy50YWcuYXR0cmlidXRlc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLlNjcmVlbk1lZGlhUmVxdWVzdF07XG4gICAgdGhpcy5yZXF1ZXN0cyA9IEltYWdlTWV0aG9kcy5tZWRpYVJlcXVlc3RTdHJpbmdUb0FycmF5UGFyc2VyKGF0dHIpXG5cbiAgICB0aGlzLnNjcmVlbldpZHRoU2VydmljZS5nZXRTY3JlZW5XaWR0aCgpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKHNjcmVlbldpZHRoID0+IHtcbiAgICAgICAgbGV0IGltYWdlUmVzdHJpY3Rpb25zID0gSW1hZ2VNZXRob2RzLmdldEltYWdlUmVzdHJpY3Rpb25zQnlTY3JlZW5TaXplKHNjcmVlbldpZHRoLCB0aGlzLnJlcXVlc3RzKTtcblxuICAgICAgICB0aGlzLmltYWdlTWF4SGVpZ2h0ID0gaW1hZ2VSZXN0cmljdGlvbnMubWF4SGVpZ2h0O1xuICAgICAgICB0aGlzLmltYWdlTWF4V2lkdGggPSBpbWFnZVJlc3RyaWN0aW9ucy5tYXhXaWR0aDtcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVxdWVzdENoYW5nZWQoKSB7XG4gICAgdGhpcy50YWcuYXR0cmlidXRlc1tGaWxlSW1hZ2VUYWdEYXRhQ29uc3RzLlNjcmVlbk1lZGlhUmVxdWVzdF0gPSBJbWFnZU1ldGhvZHMubWVkaWFSZXF1ZXN0c0FycmF5VG9TdHJpbmcodGhpcy5yZXF1ZXN0cylcbiAgfVxuXG4gIGFkZE5ld01lZGlhUmVxdWVzdCgpIHtcbiAgICB0aGlzLnJlcXVlc3RzLnB1c2goe1xuICAgICAgbWF4U2NyZWVuV2lkdGg6IDAsXG4gICAgICBtaW5TY3JlZW5XaWR0aDogMCxcbiAgICAgIG1heEltYWdlSGVpZ2h0OiAwLFxuICAgICAgbWF4SW1hZ2VXaWR0aDogMFxuICAgIH0pXG4gIH1cblxuICBkZWxldGVNZWRpYVJlcXVlc3QoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucmVxdWVzdHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJlcXVlc3RDaGFuZ2VkKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXY+XG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+XG4gIDwvZGl2PlxuXG4gIEBpZiAoaGFzSW1hZ2VFcnJvcikge1xuICAgIDxkaXYgY2xhc3M9XCJlcnJvci1ibG9ja1wiPlxuICAgICAg0JjQt9C+0LHRgNCw0LbQtdC90LjQtSDQvdC1INC90LDQudC00LXQvdC+INC/0L4g0YPQutCw0LfQsNC90L3QvtC80YMg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRgywg0LLQvtC30LzQvtC20L3QviDRhNCw0LnQuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCINC40LvQuCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCINC90LAg0YHQtdGA0LLQtdGA0LUuXG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKGhhc0ZpbGVJZCgpICYmICFoYXNJbWFnZUVycm9yKSB7XG4gICAgPGRpdj5cbiAgICAgIDxpbWdcbiAgICAgICAgW25nU3R5bGVdPVwieyAnbWF4LWhlaWdodCc6IGltYWdlTWF4SGVpZ2h0ID8gaW1hZ2VNYXhIZWlnaHQgKyAncHgnIDogJzEwMCUnLCAnbWF4LXdpZHRoJzogaW1hZ2VNYXhXaWR0aCA/IGltYWdlTWF4V2lkdGggKyAncHgnIDogJzEwMCUnLCB9XCJcbiAgICAgICAgY2xhc3M9XCJteC1hdXRvIGQtYmxvY2sgaW1nLWZsdWlkXCIgW3NyY109XCJnZXRTcmMoKVwiIChlcnJvcik9XCJvbkVycm9ySGFuZGxlcigpXCIgYWx0PVwicGhvdG9cIi8+XG4gICAgPC9kaXY+XG4gIH1cblxuICBAaWYgKCFoYXNGaWxlSWQoKSkge1xuICAgIDxkaXY+XG4gICAgICA8aDU+W9CY0LfQvtCx0YDQsNC20LXQvdC40LUg0L3QtSDQstGL0LHRgNCw0L3Qvl08L2g1PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgQGlmKCF0YWcucHJlc2VudE9yRWRpdCkge1xuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIHN0eWxlPVwicGFkZGluZzogMTBweCAwXCIgWyhuZ01vZGVsKV09XCJpc1Nob3dNZWRpYVJlcXVlc3RcIj7Qn9C+0LrQsNC30YvQstCw0YLRjCDQvNC10LTQuNCwINC30LDQv9GA0L7RgdGLPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICB9XG5cbiAgQGlmKGlzU2hvd01lZGlhUmVxdWVzdCkge1xuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDIwcHhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZWRpYS1yZXF1ZXN0X19oZWFkZXJcIj5cbiAgICAgICAgPHNwYW4+0JzQtdC00LjQsCDQt9Cw0L/RgNC+0YHRizo8L3NwYW4+XG4gICAgICAgIEBpZiAoIXRhZy5wcmVzZW50T3JFZGl0KSB7XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkTmV3TWVkaWFSZXF1ZXN0KClcIiBjbGFzcz1cInctMzBcIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICBAZm9yIChyZXF1ZXN0IG9mIHJlcXVlc3RzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLXJlcXVlc3RfX2NvbnRhaW5lclwiPlxuICAgICAgICAgIEBpZiAodGFnLnByZXNlbnRPckVkaXQpIHtcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDVweFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMTAwXCI+0JzQuNC90LjQvNCw0LvRjNC90LDRjyDRiNC40YDQuNC90LA6IHt7cmVxdWVzdC5taW5TY3JlZW5XaWR0aH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMTAwXCI+0JzQsNC60YHQuNC80LDQu9GM0L3QsNGPINGI0LjRgNC40L3QsDoge3tyZXF1ZXN0Lm1heFNjcmVlbldpZHRofX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy0xMDBcIj7QnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0LLRi9GB0L7RgtCwINC40LfQvtCx0YDQsNC20LXQvdC40Y86IHt7cmVxdWVzdC5tYXhJbWFnZUhlaWdodH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMTAwXCI+0JzQsNC60YHQuNC80LDQu9GM0L3QsNGPINGI0LjRgNC40L3QsCDQuNC30L7QsdGA0LDQttC10L3QuNGPOiB7e3JlcXVlc3QubWF4SW1hZ2VXaWR0aH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmICghdGFnLnByZXNlbnRPckVkaXQpIHtcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICDQnNC40L3QuNC80LDQu9GM0L3QsNGPINGI0LjRgNC40L3QsFxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cItCc0LjQvdC40LzQsNC70YzQvdCw0Y8g0LPRgNCw0L3QuNGG0LAg0YjQuNGA0LjQvdGLXCJcbiAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXF1ZXN0Lm1pblNjcmVlbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVxdWVzdENoYW5nZWQoKVwiPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgINCc0LDQutGB0LjQvNCw0LvRjNC90LDRjyDRiNC40YDQuNC90LBcbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCLQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0LPRgNCw0L3QuNGG0LAg0YjQuNGA0LjQvdGLXCJcbiAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXF1ZXN0Lm1heFNjcmVlbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicmVxdWVzdENoYW5nZWQoKVwiPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgINCc0LDQutGB0LjQvNCw0LvRjNC90LDRjyDQstGL0YHQvtGC0LAg0LjQt9C+0LHRgNCw0LbQtdC90LjRj1xuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cItCc0LDQutGB0LjQvNCw0LvRjNC90LDRjyDQstGL0YHQvtGC0LAg0LjQt9C+0LHRgNCw0LbQtdC90LjRj1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVxdWVzdC5tYXhJbWFnZUhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlcXVlc3RDaGFuZ2VkKClcIj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICDQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0YjQuNGA0LjQvdCwINC40LfQvtCx0YDQsNC20LXQvdC40Y9cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCLQnNCw0LrRgdC40LzQsNC70YzQvdCw0Y8g0YjQuNGA0LjQvdCwINC40LfQvtCx0YDQsNC20LXQvdC40Y9cIlxuICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlcXVlc3QubWF4SW1hZ2VXaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJlcXVlc3RDaGFuZ2VkKClcIj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZWxldGVNZWRpYVJlcXVlc3QoJGluZGV4KVwiIGNsYXNzPVwidy0zMFwiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cIndhcm5cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuQGlmICghdGFnLnByZXNlbnRPckVkaXQpIHtcbiAgPGRpdj5cbiAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMHB4O1wiPjwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy14OmF1dG87XCI+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgWyhuZ01vZGVsKV09XCJzZWFyY2hPckVkaXRcIj5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwic2VhcmNoXCI+XG4gICAgICAgICAg0JjRgdC60LDRgtGMINGE0LDQudC7IDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJlZGl0XCI+XG4gICAgICAgICAg0KPQutCw0LfQsNGC0Ywg0L/QviDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGDIDxtYXQtaWNvbj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+PC9kaXY+XG4gICAgPGRpdiBbaGlkZGVuXT1cInNlYXJjaE9yRWRpdCAhPT0gJ3NlYXJjaCdcIj5cbiAgICAgIDxjcm9jby1odG1sLWZpbGUtaWQtc2VsZWN0XG4gICAgICAgIFtsYWJlbFRleHRdPVwiJ9CS0YvQsdGA0LDRgtGMINGE0LDQudC7J1wiXG4gICAgICAgIFsoZmlsZUlkKV09XCJmaWxlSWRcIlxuICAgICAgICAob25GaWxlSWRDaGFuZ2VkKT1cIm9uRmlsZUlkQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICA8L2Nyb2NvLWh0bWwtZmlsZS1pZC1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBbaGlkZGVuXT1cInNlYXJjaE9yRWRpdCAhPT0gJ2VkaXQnXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRhNCw0LnQu9CwXG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwi0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YTQsNC50LvQsFwiIG5ldy1hdXRvY29tcGxldGU9XCJvZmZcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWxlSWRcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWxlSWRDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbn1cbiJdfQ==
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export * from './external-video-editor/external-video-editor.component';
|
|
2
|
-
export * from './html-raw-editor/html-raw-editor.component';
|
|
3
|
-
export * from './image-editor/image-editor.component';
|
|
4
|
-
export * from './main-editor/main-editor.component';
|
|
5
|
-
export * from './main-editor-block/main-editor-block.component';
|
|
6
|
-
export * from './text-editor/text-editor.component';
|
|
7
|
-
export * from './visual-editor/visual-editor.component';
|
|
8
|
-
export * from './custom-widget-editor/custom-widget-editor.component';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcm9jby1odG1sL3NyYy9saWIvY29tcG9uZW50cy9lZGl0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx5REFBeUQsQ0FBQTtBQUN2RSxjQUFjLDZDQUE2QyxDQUFBO0FBQzNELGNBQWMsdUNBQXVDLENBQUE7QUFDckQsY0FBYyxxQ0FBcUMsQ0FBQTtBQUNuRCxjQUFjLGlEQUFpRCxDQUFBO0FBQy9ELGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYyx5Q0FBeUMsQ0FBQTtBQUN2RCxjQUFjLHVEQUF1RCxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9leHRlcm5hbC12aWRlby1lZGl0b3IvZXh0ZXJuYWwtdmlkZW8tZWRpdG9yLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vaHRtbC1yYXctZWRpdG9yL2h0bWwtcmF3LWVkaXRvci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL2ltYWdlLWVkaXRvci9pbWFnZS1lZGl0b3IuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9tYWluLWVkaXRvci9tYWluLWVkaXRvci5jb21wb25lbnQnXG5leHBvcnQgKiBmcm9tICcuL21haW4tZWRpdG9yLWJsb2NrL21haW4tZWRpdG9yLWJsb2NrLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vdGV4dC1lZGl0b3IvdGV4dC1lZGl0b3IuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi92aXN1YWwtZWRpdG9yL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi9jdXN0b20td2lkZ2V0LWVkaXRvci9jdXN0b20td2lkZ2V0LWVkaXRvci5jb21wb25lbnQnXG4iXX0=
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { VisualEditorComponent } from '../visual-editor/visual-editor.component';
|
|
3
|
-
import { MatCardModule } from '@angular/material/card';
|
|
4
|
-
import { MatButton } from '@angular/material/button';
|
|
5
|
-
import { FormsModule } from '@angular/forms';
|
|
6
|
-
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
7
|
-
import { MatInput } from '@angular/material/input';
|
|
8
|
-
import { MatFormField, MatLabel } from '@angular/material/form-field';
|
|
9
|
-
import { MatTabsModule } from '@angular/material/tabs';
|
|
10
|
-
import { HtmlViewComponent } from "../../html-view/html-view.component";
|
|
11
|
-
import { SpriteIconPathPipe } from "../../../pipes/sprite-icon-path.pipe";
|
|
12
|
-
import { HtmlEditorSettingsModalComponent } from "../html-editor-settings-modal/html-editor-settings-modal.component";
|
|
13
|
-
import { MatIcon } from "@angular/material/icon";
|
|
14
|
-
import { CrocoHtmlOptionsToken } from '../../../consts';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "ngx-clipboard";
|
|
17
|
-
import * as i2 from "@angular/material/snack-bar";
|
|
18
|
-
import * as i3 from "@angular/material/dialog";
|
|
19
|
-
import * as i4 from "../../../services/CrocoHtmlFileOptionsService";
|
|
20
|
-
import * as i5 from "@angular/material/tabs";
|
|
21
|
-
import * as i6 from "@angular/forms";
|
|
22
|
-
import * as i7 from "@angular/material/card";
|
|
23
|
-
export class MainEditorComponent {
|
|
24
|
-
constructor(_clipboardService, _snackBar, _cdref, _dialog, _htmlSettingsService, options) {
|
|
25
|
-
this._clipboardService = _clipboardService;
|
|
26
|
-
this._snackBar = _snackBar;
|
|
27
|
-
this._cdref = _cdref;
|
|
28
|
-
this._dialog = _dialog;
|
|
29
|
-
this._htmlSettingsService = _htmlSettingsService;
|
|
30
|
-
this.visualEditorRendered = false;
|
|
31
|
-
this.showMarkUp = true;
|
|
32
|
-
this.useHtmlRaw = false;
|
|
33
|
-
this.html = "";
|
|
34
|
-
this.onHtmlChanged = new EventEmitter();
|
|
35
|
-
this.showSettingsButton = false;
|
|
36
|
-
this.showSettingsButton = options.showSettingsButton;
|
|
37
|
-
}
|
|
38
|
-
ngAfterViewInit() {
|
|
39
|
-
this.recalculateBodyTags();
|
|
40
|
-
}
|
|
41
|
-
ngAfterContentChecked() {
|
|
42
|
-
this._cdref.detectChanges();
|
|
43
|
-
}
|
|
44
|
-
visualEditorRenderedHandler() {
|
|
45
|
-
this.visualEditorRendered = true;
|
|
46
|
-
this.recalculateBodyTags();
|
|
47
|
-
}
|
|
48
|
-
onHtmlChangedHandler(html) {
|
|
49
|
-
this.html = html;
|
|
50
|
-
this.onHtmlChanged.emit(html);
|
|
51
|
-
}
|
|
52
|
-
textAreaModelChangedHandler() {
|
|
53
|
-
this.recalculateBodyTags();
|
|
54
|
-
this.onHtmlChangedHandler(this.html);
|
|
55
|
-
}
|
|
56
|
-
recalculateBodyTags() {
|
|
57
|
-
this.visualEditor.html = this.html;
|
|
58
|
-
this.visualEditor.recalculateBodyTags();
|
|
59
|
-
this._cdref.markForCheck();
|
|
60
|
-
}
|
|
61
|
-
copyMarkUp() {
|
|
62
|
-
this._snackBar.open("Разметка скопирована в буфер обмена", "Закрыть", { duration: 1500 });
|
|
63
|
-
this._clipboardService.copy(this.html);
|
|
64
|
-
}
|
|
65
|
-
ngOnInit() {
|
|
66
|
-
this.visualEditor.recalculateBodyTags();
|
|
67
|
-
}
|
|
68
|
-
openSettingsModal() {
|
|
69
|
-
this._dialog
|
|
70
|
-
.open(HtmlEditorSettingsModalComponent, {
|
|
71
|
-
height: '300px',
|
|
72
|
-
})
|
|
73
|
-
.afterClosed()
|
|
74
|
-
.subscribe((data) => {
|
|
75
|
-
if (!data) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
this._htmlSettingsService.set({
|
|
79
|
-
usePrivateFiles: data.usePrivateFiles,
|
|
80
|
-
applicationId: data.applicationId === '' ? null : data.applicationId,
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainEditorComponent, deps: [{ token: i1.ClipboardService }, { token: i2.MatSnackBar }, { token: i0.ChangeDetectorRef }, { token: i3.MatDialog }, { token: i4.CrocoHtmlFileOptionsService }, { token: CrocoHtmlOptionsToken }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
85
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MainEditorComponent, isStandalone: true, selector: "croco-html-main-editor", inputs: { showMarkUp: "showMarkUp", useHtmlRaw: "useHtmlRaw", html: "html" }, outputs: { html: "html", onHtmlChanged: "onHtmlChanged" }, viewQueries: [{ propertyName: "visualEditor", first: true, predicate: ["visualEditor"], descendants: true, static: true }], ngImport: i0, template: "<mat-tab-group mat-stretch-tabs=\"false\" mat-align-tabs=\"start\" style=\"position: relative\">\n <mat-tab>\n <ng-template mat-tab-label>\n <svg class=\"custom-icon\" width=\"32\" height=\"26\">\n <use [attr.xlink:href]=\"'visual-editor-tab' | spriteIconPath\"></use>\n </svg>\n </ng-template>\n\n <div style=\"height: 20px;\"></div>\n\n <croco-visual-editor #visualEditor [useHtmlRaw]=\"true\" [html]=\"html\" (onHtmlChanged)=\"onHtmlChangedHandler($event)\"\n (rendered)=\"visualEditorRenderedHandler()\">\n </croco-visual-editor>\n\n <div style=\"height: 20px;\"></div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <svg class=\"custom-icon\" width=\"32\" height=\"26\">\n <use [attr.xlink:href]=\"'source-code-tab' | spriteIconPath\"></use>\n </svg>\n </ng-template>\n\n <div style=\"height: 10px;\"></div>\n @if (visualEditorRendered) {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043A\u043E\u0434</mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\n placeholder=\"\u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043A\u043E\u0434\" [(ngModel)]=\"html\" (ngModelChange)=\"textAreaModelChangedHandler()\"></textarea>\n </mat-form-field>\n </div>\n }\n\n <button (click)=\"copyMarkUp()\" mat-raised-button color=\"primary\">\n \u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0443\n </button>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <svg class=\"custom-icon\" width=\"32\" height=\"30\">\n <use [attr.xlink:href]=\"'viewer-tab' | spriteIconPath\"></use>\n </svg>\n </ng-template>\n\n\n <mat-card style=\"padding: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <croco-html-view [html]=\"html\">\n </croco-html-view>\n </mat-card-content>\n </mat-card>\n </mat-tab>\n</mat-tab-group>\n\n<div [hidden]=\"!showSettingsButton\">\n <mat-icon class=\"settings\" (click)=\"openSettingsModal()\">settings</mat-icon>\n</div>\n", styles: [":host ::ng-deep .mdc-tab.mat-mdc-tab{background-color:#f7f7fa}:host ::ng-deep .mdc-tab.mat-mdc-tab .custom-icon{fill:#323e8b}:host ::ng-deep .mdc-tab.mat-mdc-tab:hover{background-color:#f7f7fa}:host ::ng-deep .mdc-tab.mat-mdc-tab:hover .custom-icon{fill:#747ebf}:host ::ng-deep .mdc-tab.mat-mdc-tab.mdc-tab--active{background-color:#323e8b}:host ::ng-deep .mdc-tab.mat-mdc-tab.mdc-tab--active svg.custom-icon{fill:#fff}:host ::ng-deep div.mat-mdc-tab-labels{justify-content:center}:host{position:relative}:host ::ng-deep .mat-expansion-panel,:host ::ng-deep .mat-mdc-tab-body-content,:host ::ng-deep .mat-mdc-tab-body,:host ::ng-deep .mat-mdc-tab-body-wrapper{overflow:visible}.example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.settings{position:absolute;top:20px;right:20px;cursor:pointer;z-index:1000}\n"], dependencies: [{ kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i5.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i5.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: VisualEditorComponent, selector: "croco-visual-editor", inputs: ["showMarkUp", "useHtmlRaw", "html"], outputs: ["html", "onHtmlChanged", "rendered"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: HtmlViewComponent, selector: "croco-html-view", inputs: ["html"] }, { kind: "pipe", type: SpriteIconPathPipe, name: "spriteIconPath" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
86
|
-
}
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MainEditorComponent, decorators: [{
|
|
88
|
-
type: Component,
|
|
89
|
-
args: [{ selector: 'croco-html-main-editor', standalone: true, imports: [
|
|
90
|
-
MatTabsModule,
|
|
91
|
-
VisualEditorComponent,
|
|
92
|
-
MatFormField,
|
|
93
|
-
MatLabel,
|
|
94
|
-
MatInput,
|
|
95
|
-
CdkTextareaAutosize,
|
|
96
|
-
FormsModule,
|
|
97
|
-
MatButton,
|
|
98
|
-
MatCardModule,
|
|
99
|
-
HtmlViewComponent,
|
|
100
|
-
SpriteIconPathPipe,
|
|
101
|
-
MatIcon
|
|
102
|
-
], template: "<mat-tab-group mat-stretch-tabs=\"false\" mat-align-tabs=\"start\" style=\"position: relative\">\n <mat-tab>\n <ng-template mat-tab-label>\n <svg class=\"custom-icon\" width=\"32\" height=\"26\">\n <use [attr.xlink:href]=\"'visual-editor-tab' | spriteIconPath\"></use>\n </svg>\n </ng-template>\n\n <div style=\"height: 20px;\"></div>\n\n <croco-visual-editor #visualEditor [useHtmlRaw]=\"true\" [html]=\"html\" (onHtmlChanged)=\"onHtmlChangedHandler($event)\"\n (rendered)=\"visualEditorRenderedHandler()\">\n </croco-visual-editor>\n\n <div style=\"height: 20px;\"></div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n <svg class=\"custom-icon\" width=\"32\" height=\"26\">\n <use [attr.xlink:href]=\"'source-code-tab' | spriteIconPath\"></use>\n </svg>\n </ng-template>\n\n <div style=\"height: 10px;\"></div>\n @if (visualEditorRendered) {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043A\u043E\u0434</mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\n placeholder=\"\u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043A\u043E\u0434\" [(ngModel)]=\"html\" (ngModelChange)=\"textAreaModelChangedHandler()\"></textarea>\n </mat-form-field>\n </div>\n }\n\n <button (click)=\"copyMarkUp()\" mat-raised-button color=\"primary\">\n \u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0443\n </button>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <svg class=\"custom-icon\" width=\"32\" height=\"30\">\n <use [attr.xlink:href]=\"'viewer-tab' | spriteIconPath\"></use>\n </svg>\n </ng-template>\n\n\n <mat-card style=\"padding: 2px;\" class=\"mat-card\">\n <mat-card-content>\n <croco-html-view [html]=\"html\">\n </croco-html-view>\n </mat-card-content>\n </mat-card>\n </mat-tab>\n</mat-tab-group>\n\n<div [hidden]=\"!showSettingsButton\">\n <mat-icon class=\"settings\" (click)=\"openSettingsModal()\">settings</mat-icon>\n</div>\n", styles: [":host ::ng-deep .mdc-tab.mat-mdc-tab{background-color:#f7f7fa}:host ::ng-deep .mdc-tab.mat-mdc-tab .custom-icon{fill:#323e8b}:host ::ng-deep .mdc-tab.mat-mdc-tab:hover{background-color:#f7f7fa}:host ::ng-deep .mdc-tab.mat-mdc-tab:hover .custom-icon{fill:#747ebf}:host ::ng-deep .mdc-tab.mat-mdc-tab.mdc-tab--active{background-color:#323e8b}:host ::ng-deep .mdc-tab.mat-mdc-tab.mdc-tab--active svg.custom-icon{fill:#fff}:host ::ng-deep div.mat-mdc-tab-labels{justify-content:center}:host{position:relative}:host ::ng-deep .mat-expansion-panel,:host ::ng-deep .mat-mdc-tab-body-content,:host ::ng-deep .mat-mdc-tab-body,:host ::ng-deep .mat-mdc-tab-body-wrapper{overflow:visible}.example-list{width:500px;max-width:100%;border:solid 1px #ccc;min-height:60px;display:block;background:#fff;border-radius:4px;overflow:hidden}.example-box{padding:20px 10px;border-bottom:solid 1px #ccc;color:#000000de;display:flex;flex-direction:row;align-items:center;justify-content:space-between;box-sizing:border-box;cursor:move;background:#fff;font-size:14px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.settings{position:absolute;top:20px;right:20px;cursor:pointer;z-index:1000}\n"] }]
|
|
103
|
-
}], ctorParameters: () => [{ type: i1.ClipboardService }, { type: i2.MatSnackBar }, { type: i0.ChangeDetectorRef }, { type: i3.MatDialog }, { type: i4.CrocoHtmlFileOptionsService }, { type: undefined, decorators: [{
|
|
104
|
-
type: Inject,
|
|
105
|
-
args: [CrocoHtmlOptionsToken]
|
|
106
|
-
}] }], propDecorators: { visualEditor: [{
|
|
107
|
-
type: ViewChild,
|
|
108
|
-
args: ["visualEditor", { static: true }]
|
|
109
|
-
}], showMarkUp: [{
|
|
110
|
-
type: Input
|
|
111
|
-
}], useHtmlRaw: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], html: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}, {
|
|
116
|
-
type: Output
|
|
117
|
-
}], onHtmlChanged: [{
|
|
118
|
-
type: Output
|
|
119
|
-
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JvY28taHRtbC9zcmMvbGliL2NvbXBvbmVudHMvZWRpdG9yL21haW4tZWRpdG9yL21haW4tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nyb2NvLWh0bWwvc3JjL2xpYi9jb21wb25lbnRzL2VkaXRvci9tYWluLWVkaXRvci9tYWluLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUwsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBRXRI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Q0FBQTtJQUNOLENBQUM7K0dBdEZVLG1CQUFtQixrTEEyQnBCLHFCQUFxQjttR0EzQnBCLG1CQUFtQix1VkNuRGhDLDJxRUEyREEsNGlERHRCSSxhQUFhLHN1QkFDYixxQkFBcUIsOEpBQ3JCLFlBQVksNExBQ1osUUFBUSxzREFDUixRQUFRLGlVQUNSLG1CQUFtQix3TUFDbkIsV0FBVywrbUJBQ1gsU0FBUyxnTEFDVCxhQUFhLDJOQUNiLGlCQUFpQix5RUFDakIsa0JBQWtCLHVEQUNsQixPQUFPOzs0RkFHRSxtQkFBbUI7a0JBcEIvQixTQUFTOytCQUNFLHdCQUF3QixjQUd0QixJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixxQkFBcUI7d0JBQ3JCLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixRQUFRO3dCQUNSLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLE9BQU87cUJBQ1I7OzBCQTZCRSxNQUFNOzJCQUFDLHFCQUFxQjt5Q0F0Qi9CLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkzQyxVQUFVO3NCQURULEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLElBQUk7c0JBRkgsS0FBSzs7c0JBQ0wsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnbmd4LWNsaXBib2FyZCc7XG5pbXBvcnQgeyBWaXN1YWxFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuLi92aXN1YWwtZWRpdG9yL3Zpc3VhbC1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdENhcmRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jYXJkJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENka1RleHRhcmVhQXV0b3NpemUgfSBmcm9tICdAYW5ndWxhci9jZGsvdGV4dC1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IEh0bWxWaWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2h0bWwtdmlldy9odG1sLXZpZXcuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTcHJpdGVJY29uUGF0aFBpcGUgfSBmcm9tIFwiLi4vLi4vLi4vcGlwZXMvc3ByaXRlLWljb24tcGF0aC5waXBlXCI7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyBIdG1sRWRpdG9yU2V0dGluZ3NNb2RhbENvbXBvbmVudCB9IGZyb20gXCIuLi9odG1sLWVkaXRvci1zZXR0aW5ncy1tb2RhbC9odG1sLWVkaXRvci1zZXR0aW5ncy1tb2RhbC5jb21wb25lbnRcIjtcbmltcG9ydCB7IENyb2NvSHRtbEVkaXRvckZpbGVPcHRpb25zLCBDcm9jb0h0bWxPcHRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL29wdGlvbnNcIjtcbmltcG9ydCB7IE1hdEljb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xuaW1wb3J0IHsgQ3JvY29IdG1sRmlsZU9wdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL0Nyb2NvSHRtbEZpbGVPcHRpb25zU2VydmljZVwiO1xuaW1wb3J0IHsgQ3JvY29IdG1sT3B0aW9uc1Rva2VuIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3JvY28taHRtbC1tYWluLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYWluLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21haW4tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRUYWJzTW9kdWxlLFxuICAgIFZpc3VhbEVkaXRvckNvbXBvbmVudCxcbiAgICBNYXRGb3JtRmllbGQsXG4gICAgTWF0TGFiZWwsXG4gICAgTWF0SW5wdXQsXG4gICAgQ2RrVGV4dGFyZWFBdXRvc2l6ZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0Q2FyZE1vZHVsZSxcbiAgICBIdG1sVmlld0NvbXBvbmVudCxcbiAgICBTcHJpdGVJY29uUGF0aFBpcGUsXG4gICAgTWF0SWNvblxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE1haW5FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQge1xuXG4gIHZpc3VhbEVkaXRvclJlbmRlcmVkID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZChcInZpc3VhbEVkaXRvclwiLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB2aXN1YWxFZGl0b3I6IFZpc3VhbEVkaXRvckNvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBzaG93TWFya1VwID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICB1c2VIdG1sUmF3ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgQE91dHB1dCgpXG4gIGh0bWw6IHN0cmluZyA9IFwiXCI7XG5cbiAgQE91dHB1dCgpXG4gIG9uSHRtbENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBzaG93U2V0dGluZ3NCdXR0b24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9jbGlwYm9hcmRTZXJ2aWNlOiBDbGlwYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaHRtbFNldHRpbmdzU2VydmljZTogQ3JvY29IdG1sRmlsZU9wdGlvbnNTZXJ2aWNlLFxuICAgIEBJbmplY3QoQ3JvY29IdG1sT3B0aW9uc1Rva2VuKSBvcHRpb25zOiBDcm9jb0h0bWxPcHRpb25zKSB7XG4gICAgdGhpcy5zaG93U2V0dGluZ3NCdXR0b24gPSBvcHRpb25zLnNob3dTZXR0aW5nc0J1dHRvbjtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlY2FsY3VsYXRlQm9keVRhZ3MoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB2aXN1YWxFZGl0b3JSZW5kZXJlZEhhbmRsZXIoKSB7XG4gICAgdGhpcy52aXN1YWxFZGl0b3JSZW5kZXJlZCA9IHRydWU7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUJvZHlUYWdzKCk7XG4gIH1cblxuICBvbkh0bWxDaGFuZ2VkSGFuZGxlcihodG1sOiBzdHJpbmcpIHtcbiAgICB0aGlzLmh0bWwgPSBodG1sO1xuICAgIHRoaXMub25IdG1sQ2hhbmdlZC5lbWl0KGh0bWwpO1xuICB9XG5cbiAgdGV4dEFyZWFNb2RlbENoYW5nZWRIYW5kbGVyKCkge1xuICAgIHRoaXMucmVjYWxjdWxhdGVCb2R5VGFncygpO1xuICAgIHRoaXMub25IdG1sQ2hhbmdlZEhhbmRsZXIodGhpcy5odG1sKTtcbiAgfVxuXG4gIHJlY2FsY3VsYXRlQm9keVRhZ3MoKSB7XG4gICAgdGhpcy52aXN1YWxFZGl0b3IuaHRtbCA9IHRoaXMuaHRtbDtcbiAgICB0aGlzLnZpc3VhbEVkaXRvci5yZWNhbGN1bGF0ZUJvZHlUYWdzKCk7XG4gICAgdGhpcy5fY2RyZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjb3B5TWFya1VwKCkge1xuICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oXCLQoNCw0LfQvNC10YLQutCwINGB0LrQvtC/0LjRgNC+0LLQsNC90LAg0LIg0LHRg9GE0LXRgCDQvtCx0LzQtdC90LBcIiwgXCLQl9Cw0LrRgNGL0YLRjFwiLCB7IGR1cmF0aW9uOiAxNTAwIH0pO1xuICAgIHRoaXMuX2NsaXBib2FyZFNlcnZpY2UuY29weSh0aGlzLmh0bWwpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52aXN1YWxFZGl0b3IucmVjYWxjdWxhdGVCb2R5VGFncygpO1xuICB9XG5cbiAgb3BlblNldHRpbmdzTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nXG4gICAgICAub3BlbihIdG1sRWRpdG9yU2V0dGluZ3NNb2RhbENvbXBvbmVudCxcbiAgICAgICAge1xuICAgICAgICAgIGhlaWdodDogJzMwMHB4JyxcbiAgICAgICAgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBDcm9jb0h0bWxFZGl0b3JGaWxlT3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9odG1sU2V0dGluZ3NTZXJ2aWNlLnNldCh7XG4gICAgICAgICAgdXNlUHJpdmF0ZUZpbGVzOiBkYXRhLnVzZVByaXZhdGVGaWxlcyxcbiAgICAgICAgICBhcHBsaWNhdGlvbklkOiBkYXRhLmFwcGxpY2F0aW9uSWQgPT09ICcnID8gbnVsbCA6IGRhdGEuYXBwbGljYXRpb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cbiIsIjxtYXQtdGFiLWdyb3VwIG1hdC1zdHJldGNoLXRhYnM9XCJmYWxzZVwiIG1hdC1hbGlnbi10YWJzPVwic3RhcnRcIiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICA8bWF0LXRhYj5cbiAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgIDxzdmcgY2xhc3M9XCJjdXN0b20taWNvblwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIyNlwiPlxuICAgICAgICA8dXNlIFthdHRyLnhsaW5rOmhyZWZdPVwiJ3Zpc3VhbC1lZGl0b3ItdGFiJyB8IHNwcml0ZUljb25QYXRoXCI+PC91c2U+XG4gICAgICA8L3N2Zz5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGRpdiBzdHlsZT1cImhlaWdodDogMjBweDtcIj48L2Rpdj5cblxuICAgIDxjcm9jby12aXN1YWwtZWRpdG9yICN2aXN1YWxFZGl0b3IgW3VzZUh0bWxSYXddPVwidHJ1ZVwiIFtodG1sXT1cImh0bWxcIiAob25IdG1sQ2hhbmdlZCk9XCJvbkh0bWxDaGFuZ2VkSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgIChyZW5kZXJlZCk9XCJ2aXN1YWxFZGl0b3JSZW5kZXJlZEhhbmRsZXIoKVwiPlxuICAgIDwvY3JvY28tdmlzdWFsLWVkaXRvcj5cblxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDIwcHg7XCI+PC9kaXY+XG4gIDwvbWF0LXRhYj5cblxuICA8bWF0LXRhYj5cbiAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgIDxzdmcgY2xhc3M9XCJjdXN0b20taWNvblwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIyNlwiPlxuICAgICAgICA8dXNlIFthdHRyLnhsaW5rOmhyZWZdPVwiJ3NvdXJjZS1jb2RlLXRhYicgfCBzcHJpdGVJY29uUGF0aFwiPjwvdXNlPlxuICAgICAgPC9zdmc+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwcHg7XCI+PC9kaXY+XG4gICAgQGlmICh2aXN1YWxFZGl0b3JSZW5kZXJlZCkge1xuICAgIDxkaXY+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICA8bWF0LWxhYmVsPtCY0YHRhdC+0LTQvdGL0Lkg0LrQvtC0PC9tYXQtbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBjZGtUZXh0YXJlYUF1dG9zaXplICNhdXRvc2l6ZT1cImNka1RleHRhcmVhQXV0b3NpemVcIiBjZGtBdXRvc2l6ZU1pblJvd3M9XCIxXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cItCY0YHRhdC+0LTQvdGL0Lkg0LrQvtC0XCIgWyhuZ01vZGVsKV09XCJodG1sXCIgKG5nTW9kZWxDaGFuZ2UpPVwidGV4dEFyZWFNb2RlbENoYW5nZWRIYW5kbGVyKClcIj48L3RleHRhcmVhPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8YnV0dG9uIChjbGljayk9XCJjb3B5TWFya1VwKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgINCa0L7Qv9C40YDQvtCy0LDRgtGMINGA0LDQt9C80LXRgtC60YNcbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYj5cbiAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgIDxzdmcgY2xhc3M9XCJjdXN0b20taWNvblwiIHdpZHRoPVwiMzJcIiBoZWlnaHQ9XCIzMFwiPlxuICAgICAgICA8dXNlIFthdHRyLnhsaW5rOmhyZWZdPVwiJ3ZpZXdlci10YWInIHwgc3ByaXRlSWNvblBhdGhcIj48L3VzZT5cbiAgICAgIDwvc3ZnPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgIDxtYXQtY2FyZCBzdHlsZT1cInBhZGRpbmc6IDJweDtcIiBjbGFzcz1cIm1hdC1jYXJkXCI+XG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGNyb2NvLWh0bWwtdmlldyBbaHRtbF09XCJodG1sXCI+XG4gICAgICAgIDwvY3JvY28taHRtbC12aWV3PlxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDwvbWF0LWNhcmQ+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuPGRpdiBbaGlkZGVuXT1cIiFzaG93U2V0dGluZ3NCdXR0b25cIj5cbiAgPG1hdC1pY29uIGNsYXNzPVwic2V0dGluZ3NcIiAoY2xpY2spPVwib3BlblNldHRpbmdzTW9kYWwoKVwiPnNldHRpbmdzPC9tYXQtaWNvbj5cbjwvZGl2PlxuIl19
|