croco-html 20.4.1 → 20.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"croco-html.mjs","sources":["../../../projects/croco-html/src/lib/extensions/AngularMaterialTableMethods.ts","../../../projects/croco-html/src/lib/extensions/AudioMethods.ts","../../../projects/croco-html/src/lib/extensions/HtmlExtractionMethods.ts","../../../projects/croco-html/src/lib/extensions/ImageMethods.ts","../../../projects/croco-html/src/lib/tag-services/FileImageTagService.ts","../../../projects/croco-html/src/lib/tag-services/TextTagHtmlMarkupTagService.ts","../../../projects/croco-html/src/lib/tag-services/ExternalVideoTagService.ts","../../../projects/croco-html/src/lib/tag-services/HtmlRawTagService.ts","../../../projects/croco-html/src/lib/tag-services/DownloadButtonTagService.ts","../../../projects/croco-html/src/lib/tag-services/ButtonTagService.ts","../../../projects/croco-html/src/lib/tag-services/CustomWidgetTagService.ts","../../../projects/croco-html/src/lib/tag-services/TagBuildExtensions.ts","../../../projects/croco-html/src/lib/tag-services/LinkTagService.ts","../../../projects/croco-html/src/lib/extensions/TextMethods.ts","../../../projects/croco-html/src/lib/extensions/VideoMethods.ts","../../../projects/croco-html/src/lib/extensions/Tags.ts","../../../projects/croco-html/src/lib/tag-services/FileAudioTagService.ts","../../../projects/croco-html/src/lib/extensions/TextSimpleMethods.ts","../../../projects/croco-html/src/lib/extensions/BootstrapTableMethods.ts","../../../projects/croco-html/src/lib/extensions/TableMethods.ts","../../../projects/croco-html/src/lib/tag-services/TableTagService.ts","../../../projects/croco-html/src/lib/extensions/BodyTagsExtensions.ts","../../../projects/croco-html/src/lib/extensions/XmlExtensions.ts","../../../projects/croco-html/src/lib/extensions/TableBuilder.ts","../../../projects/croco-html/src/lib/services/PublicFileUploadService.ts","../../../projects/croco-html/src/lib/services/PrivateFileUploadService.ts","../../../projects/croco-html/src/lib/services/CrocoHtmlFileOptionsService.ts","../../../projects/croco-html/src/lib/components/upload-files-btn/upload-files-btn.component.ts","../../../projects/croco-html/src/lib/components/upload-files-btn/upload-files-btn.component.html","../../../projects/croco-html/src/lib/components/add-files-btn/add-files-btn.component.ts","../../../projects/croco-html/src/lib/components/add-files-btn/add-files-btn.component.html","../../../projects/croco-html/src/lib/services/file-models.ts","../../../projects/croco-html/src/lib/services/PublicFilesQueryService.ts","../../../projects/croco-html/src/lib/services/PrivateFilesQueryService.ts","../../../projects/croco-html/src/lib/services/CommonFileInfoQueryService.ts","../../../projects/croco-html/src/lib/components/editor/audio-editor/audio-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/audio-editor/audio-editor.component.html","../../../projects/croco-html/src/lib/consts/index.ts","../../../projects/croco-html/src/lib/components/xml-tags/audio-player-tag-view/audio-player-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/audio-player-tag-view/audio-player-tag-view.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/embedded-video/code-video.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/embedded-video/code-video.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.html","../../../projects/croco-html/src/lib/services/blob-create.service.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.html","../../../projects/croco-html/src/lib/components/error-banner/error-banner.component.ts","../../../projects/croco-html/src/lib/components/error-banner/error-banner.component.html","../../../projects/croco-html/src/lib/services/screen-width.service.ts","../../../projects/croco-html/src/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/html-raw-view/html-raw-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/html-raw-view/html-raw-view.component.html","../../../projects/croco-html/src/lib/services/HtmlViewController.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.html","../../../projects/croco-html/src/lib/components/editor/link-editor/link-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/link-editor/link-editor.component.html","../../../projects/croco-html/src/lib/components/editor/html-raw-editor/html-raw-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/html-raw-editor/html-raw-editor.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/DefaultTags.ts","../../../projects/croco-html/src/lib/components/xml-tags/defined-custom-tag-view/defined-custom-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/defined-custom-tag-view/defined-custom-tag-view.component.html","../../../projects/croco-html/src/lib/services/HtmlPageDataController.ts","../../../projects/croco-html/src/lib/services/loggers/NullVisualEditorLogger.ts","../../../projects/croco-html/src/lib/services/loggers/ConsoleVisualEditorLogger.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/external-video-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/external-video-editor.component.html","../../../projects/croco-html/src/lib/components/file-id-select/file-id-select.component.ts","../../../projects/croco-html/src/lib/components/file-id-select/file-id-select.component.html","../../../projects/croco-html/src/lib/components/editor/image-editor/image-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/image-editor/image-editor.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/DefaultAligments.ts","../../../projects/croco-html/src/lib/components/editor/download-file-button-editor/download-file-button-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/download-file-button-editor/download-file-button-editor.component.html","../../../projects/croco-html/src/lib/components/editor/text-editor/text-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/text-editor/text-editor.component.html","../../../projects/croco-html/src/lib/components/editor/button-editor/button-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/button-editor/button-editor.component.html","../../../projects/croco-html/src/lib/components/editor/custom-widget-editor/custom-widget-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/custom-widget-editor/custom-widget-editor.component.html","../../../projects/croco-html/src/lib/models/editor-models.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/components/defined-custom-editor-block/defined-custom-editor-block.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/components/defined-custom-editor-block/defined-custom-editor-block.component.html","../../../projects/croco-html/src/lib/components/editor/main-editor-block/main-editor-block.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/main-editor-block.component.html","../../../projects/croco-html/src/lib/pipes/sprite-icon-path.pipe.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/components/custom-widget-icon/custom-widget-icon.component.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/components/custom-widget-icon/custom-widget-icon.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/visual-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/visual-editor.component.html","../../../projects/croco-html/src/lib/pipes/to-preview.pipe.ts","../../../projects/croco-html/src/lib/components/html-view/html-view.component.ts","../../../projects/croco-html/src/lib/components/html-view/html-view.component.html","../../../projects/croco-html/src/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.ts","../../../projects/croco-html/src/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.html","../../../projects/croco-html/src/lib/components/editor/main-editor/main-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor/main-editor.component.html","../../../projects/croco-html/src/lib/pipes/TagToSpanPipe.ts","../../../projects/croco-html/src/lib/pipes/ToHtmlBodyTagsPipe.ts","../../../projects/croco-html/src/lib/pipes/ToPreviewHtmlPipe.ts","../../../projects/croco-html/src/lib/index.ts","../../../projects/croco-html/src/lib/croco-html.module.ts","../../../projects/croco-html/src/public-api.ts","../../../projects/croco-html/src/croco-html.ts"],"sourcesContent":["import { BaseApiResponse } from '../models';\nimport { AngularMaterialTableData, TableHeaderData, TableRowData } from './TableMethods';\n\nexport class AngularMaterialTableMethods {\n static getAngularMaterialTableData(columns: string[], rows: TableRowData[]): AngularMaterialTableData {\n\n let data: object[] = [];\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n\n var elem = {};\n\n for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {\n const column = columns[columnIndex];\n\n elem[column] = row.columns[columnIndex].data.text;\n }\n\n data.push(elem);\n }\n\n return {\n displayedColumns: columns,\n data: data,\n };\n }\n\n static checkHeaders(header: TableHeaderData): BaseApiResponse {\n if (header === null) {\n return {\n isSucceeded: false,\n message: \"Необходимо указать заголовок таблицы\"\n };\n }\n\n let columns: string[] = header.columns;\n\n var uniqueDislayedColumns = columns.filter((v, i, a) => a.indexOf(v) === i);\n\n if (uniqueDislayedColumns.length !== columns.length) {\n return {\n isSucceeded: false,\n message: \"Ошибка при обработке разметки таблицы. Обнаружены дубликаты заголовков.\"\n };\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n };\n }\n static checkAngularMaterialTableData(header: TableHeaderData, rows: TableRowData[], checkHeaders: boolean = true): BaseApiResponse {\n\n if (checkHeaders) {\n var checkHeadersResult = this.checkHeaders(header);\n\n if (!checkHeadersResult.isSucceeded) {\n return checkHeadersResult;\n }\n }\n\n let columns: string[] = header.columns;\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n if (row.columns.length !== columns.length) {\n return {\n isSucceeded: false,\n message: `Ошибка при обработке разметки таблицы. `\n + `Количество колонок в каждой строке таблицы должно соотвествовать количеству колонок указанных в заголовке. `\n + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а должно быть ${columns.length}.`\n };\n }\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n };\n }\n}\n","export class FileAudioTagDataConsts {\n static readonly TagName = \"audio-player\";\n static readonly FileIdAttrName = \"file-id\";\n static readonly TitleAttrName = \"title\";\n}\n\nexport class AudioMethods {\n\n public static buildUrl(fileId: string, fileName: string): string {\n //TODO заглушка, пока юзаем статичный фапйл\n if (fileId && fileId !== '') {\n if (!isNaN(Number(fileId))) {\n return `/api/PrivateFiles/GetFile?fileId=${fileId}`;\n } else {\n return `/api/PublicFiles/GetFile?fileId=${fileId}`;\n }\n }\n\n if (fileName && fileName !== '') {\n return fileName;\n }\n\n return null;\n }\n\n public static isPrivateFileId(fileId: string): boolean {\n return !isNaN(Number(fileId));\n }\n\n public static formatTime(seconds: number): string {\n if (isNaN(seconds) || seconds < 0) {\n return '0:00';\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n\n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n }\n\n public static calculateProgress(currentTime: number, duration: number): number {\n if (duration === 0 || isNaN(duration) || isNaN(currentTime)) {\n return 0;\n }\n return Math.min(100, Math.max(0, (currentTime / duration) * 100));\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { BodyTagsExtensions } from \"./BodyTagsExtensions\";\n\nexport class HtmlExtractionMethods {\n\n static transformHtmlElementToBlocks(element: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock[] {\n const data: InterfaceBlock[] = [];\n\n for (let i = 0; i < element.children.length; i++) {\n\n const elem = element.children.item(i) as HTMLElement;\n const loweredTagName = elem.tagName.toLowerCase();\n\n if (BodyTagsExtensions.hasTagService(loweredTagName, options)) {\n const tagService = BodyTagsExtensions.getTagService(loweredTagName, options);\n\n const resultBlock = tagService.extractBlockFromHtmlElement(elem, options);\n data.push(resultBlock);\n }\n else {\n data.push({\n tagName: \"unsupported-tag\",\n data: {\n tagString: elem.outerHTML\n }\n });\n }\n }\n \n return data;\n }\n\n static transformHtmlStringToBlocks(value: string, options: CrocoHtmlOptions): InterfaceBlock[] {\n\n if (value === undefined || value === null) {\n return [];\n }\n\n value = value\n .replace('\\n', '')\n .replace('\\t', '');\n\n var div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return this.transformHtmlElementToBlocks(div, options);\n }\n}\n","import { ImageRestrictions, IImageMediaRequest } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\n\nexport class FileImageTagDataConsts {\n static readonly TagName = \"file-image\";\n static readonly FileIdAttrName = \"file-id\";\n static readonly ScreenMediaRequest = \"screen-media-request\";\n\n static readonly MaxScreenWidth = 'max-screen-width';\n static readonly MinScreenWidth = 'min-screen-width';\n static readonly MaxImageHeight = 'max-image-height';\n static readonly MaxImageWidth = 'max-image-width';\n\n static readonly DefaultValueForFileImage = \"max-screen-width:1200,min-screen-width:900,max-image-height:300;max-screen-width:900,min-screen-width:600,max-image-height:200\";\n}\n\nexport class ImageMethods {\n\n public static buildUrl(fileId: string, sizeType: string, options: CrocoHtmlOptions): string {\n\n if (fileId === null || fileId === undefined) {\n return null;\n }\n\n return options.imageOptions.sizeTypeAndFileIdImageUrlFormat\n .replace(\"{sizeType}\", sizeType)\n .replace(\"{fileId}\", fileId);\n }\n\n public static buildSmallUrl(fileId: string, options: CrocoHtmlOptions): string {\n return ImageMethods.buildUrl(fileId, \"Small\", options);\n }\n\n public static buildMediumUrl(fileId: string, options: CrocoHtmlOptions): string {\n return ImageMethods.buildUrl(fileId, \"Medium\", options);\n }\n\n public static isPrivateFileId(fileId: string): boolean {\n return !isNaN(Number(fileId));\n }\n\n public static mediaRequestStringToArrayParser = (data: string) => {\n if (!data) {\n return [];\n }\n\n if (!data.length) {\n return []\n }\n\n return data.split(';').reduce((requests: IImageMediaRequest[], currentValue: string) => {\n\n const attrs = currentValue.split(',');\n\n requests.push({\n maxScreenWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxScreenWidth),\n minScreenWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MinScreenWidth),\n maxImageHeight: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxImageHeight),\n maxImageWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxImageHeight)\n });\n\n return requests;\n }, [])\n }\n\n public static createMediaRequestValue(arr: string[], attribute: string): number | null {\n let elem = arr.find(el => el.includes(attribute));\n\n if (!elem) {\n return null;\n }\n\n return +elem.match(/\\d+/g).join('');\n }\n\n public static mediaRequestsArrayToString(data: IImageMediaRequest[]) {\n if (!data.length) {\n return ''\n }\n\n return data.map(el => ImageMethods.mediaRequestToString(el)).join(';')\n }\n\n public static mediaRequestToString(data: IImageMediaRequest) {\n let result = `${FileImageTagDataConsts.MaxScreenWidth}:${data.maxScreenWidth},${FileImageTagDataConsts.MinScreenWidth}:${data.minScreenWidth}`;\n\n if (data.maxImageHeight) {\n result += `,${FileImageTagDataConsts.MaxImageHeight}:${data.maxImageHeight}`;\n }\n\n if (data.maxImageWidth) {\n result += `,${FileImageTagDataConsts.MaxImageWidth}:${data.maxImageWidth}`;\n }\n\n return result;\n }\n\n public static getImageRestrictionsByScreenSize(screenSize: number, requests: IImageMediaRequest[]): ImageRestrictions {\n let result = requests\n .sort((a, b) => b.maxScreenWidth - a.maxScreenWidth)\n .find(el => screenSize <= +el.maxScreenWidth && screenSize >= +el.minScreenWidth);\n\n if (!result) {\n return {\n maxWidth: null,\n maxHeight: null,\n };\n }\n\n return {\n maxHeight: result.maxImageHeight,\n maxWidth: result.maxImageWidth\n };\n }\n}\n","import { FileImageTagDataConsts, ImageMethods } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag, FileImageTagData } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\n\nexport class FileImageTagService implements IMarkUpTagService {\n tagName: string = FileImageTagDataConsts.TagName;\n shortDescription: string = \"Изображение\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n let fileIdAttr = \"\";\n let screenMediaRequestAttr = \"\";\n\n if (bodyTag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName) && bodyTag.attributes[FileImageTagDataConsts.FileIdAttrName]) {\n fileIdAttr = `${FileImageTagDataConsts.FileIdAttrName}=\"${bodyTag.attributes[FileImageTagDataConsts.FileIdAttrName]}\"`;\n }\n\n if (bodyTag.attributes.hasOwnProperty(FileImageTagDataConsts.ScreenMediaRequest) && bodyTag.attributes[FileImageTagDataConsts.ScreenMediaRequest]) {\n screenMediaRequestAttr = ` ${FileImageTagDataConsts.ScreenMediaRequest}=\"${bodyTag.attributes[FileImageTagDataConsts.ScreenMediaRequest]}\"`;\n }\n \n return `<${FileImageTagDataConsts.TagName} ${fileIdAttr}${screenMediaRequestAttr}></${FileImageTagDataConsts.TagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n let fileId = elem.getAttribute(FileImageTagDataConsts.FileIdAttrName);\n\n let src = ImageMethods.buildMediumUrl(fileId, options);\n\n return {\n tagName: FileImageTagDataConsts.TagName,\n data: {\n src,\n fileId: fileId,\n screenMediaRequest: elem.getAttribute(FileImageTagDataConsts.ScreenMediaRequest)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as FileImageTagData;\n\n let attrs = {};\n\n if (fileData.fileId) {\n attrs[FileImageTagDataConsts.FileIdAttrName] = fileData.fileId;\n }\n\n if (fileData.screenMediaRequest) {\n attrs[FileImageTagDataConsts.ScreenMediaRequest] = fileData.screenMediaRequest;\n }\n\n return {\n tagDescription: {\n tag: FileImageTagDataConsts.TagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [FileImageTagDataConsts.FileIdAttrName]: null,\n [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n },\n innerHtml: \"\",\n }\n }\n}\n","import { TextSimpleMethods, SimpleTextTagData, BodyTagsExtensions } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"../tag-services/IMarkUpTagService\";\n\nexport enum TextAlignment {\n Left = 'left',\n Center = 'center',\n Right = 'right',\n}\n\nexport class TextTagDataConsts {\n static readonly HAlign = \"h-align\";\n}\n\nexport class TextTagHtmlMarkupTagService implements IMarkUpTagService {\n\n constructor(tagName: string, shortDescription: string) {\n this.tagName = tagName;\n this.shortDescription = shortDescription;\n }\n\n tagName: string = \"text\";\n shortDescription: string = \"T\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName} h-align=\"${bodyTag.attributes[TextTagDataConsts.HAlign]}\">${bodyTag.innerHtml}</${this.tagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return TextSimpleMethods.extractTextTag(elem);\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let textTagData = data.data as SimpleTextTagData;\n\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: { [TextTagDataConsts.HAlign]: textTagData.horizontalAlignment },\n innerHtml: BodyTagsExtensions.sanitizeInnerHtml(textTagData.html)\n };\n }\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [TextTagDataConsts.HAlign]: TextAlignment.Left\n },\n innerHtml: \"\",\n }\n }\n}\n","import { ExternalVideoTagDataConsts, ExternalVideoSupportedTypes } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nconst defaultLinkYouTube = \"https://www.youtube.com/embed/4CtSAnJDfsI?si=scyBNJa0Hs2t5aLE\";\nconst defaultLinkVk = \"https://vk.com/video_ext.php?oid=-22822305&id=456241864&hd=2\";\n\nexport class ExternalVideoTagService implements IMarkUpTagService {\n tagName: string = ExternalVideoTagDataConsts.TagName;\n shortDescription: string = \"Видео\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n let useResponsiveWrapperAttr = '';\n\n if (bodyTag.attributes[ExternalVideoTagDataConsts.VideoTypeAttrName] === ExternalVideoSupportedTypes.Code) {\n useResponsiveWrapperAttr = `${ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName}=\"${bodyTag.attributes[ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName] || false}\"`;\n }\n\n return `<${bodyTag.tagDescription.tag} ${useResponsiveWrapperAttr} type=\"${bodyTag.attributes[ExternalVideoTagDataConsts.VideoTypeAttrName]}\" link=\"${bodyTag.attributes[ExternalVideoTagDataConsts.LinkAttrName]}\">${bodyTag.innerHtml}</${bodyTag.tagDescription.tag}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: ExternalVideoTagDataConsts.TagName,\n data: {\n type: elem.getAttribute(ExternalVideoTagDataConsts.VideoTypeAttrName),\n link: elem.getAttribute(ExternalVideoTagDataConsts.LinkAttrName),\n useResponsiveWrapper: elem.getAttribute(ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName) !== 'false',\n innerHtml: elem.innerHTML\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as ExternalVideoTagDataConsts;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: fileData,\n innerHtml: data.data.type === ExternalVideoSupportedTypes.Code ? data.data.innerHtml : ''\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n\n let attrs = {\n };\n\n let innerHtml = \"\";\n\n attrs[ExternalVideoTagDataConsts.VideoTypeAttrName] = props.selectedVideoPlayer;\n attrs[ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName] = false;\n attrs[ExternalVideoTagDataConsts.LinkAttrName] = props.selectedVideoPlayer === ExternalVideoSupportedTypes.Code ? '' :\n props.selectedVideoPlayer === ExternalVideoSupportedTypes.VkVideo\n ? defaultLinkVk\n : defaultLinkYouTube;\n\n if (props.selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n innerHtml = props.htmlRaw;\n }\n\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: innerHtml,\n };\n }\n}\n","import { BodyTagsExtensions } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class HtmlRawTagDataConsts {\n static readonly TagName = \"html-raw\";\n}\n\nexport interface HtmlRawTag {\n type: string;\n data: HtmlRawTagData;\n}\n\nexport interface HtmlRawTagData {\n innerHTML: string;\n}\n\n\nexport class HtmlRawTagService implements IMarkUpTagService {\n\n tagName: string = HtmlRawTagDataConsts.TagName;\n shortDescription: string = \"Разметка\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName}>${bodyTag.innerHtml}</${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: HtmlRawTagDataConsts.TagName,\n data: {\n innerHTML: elem.innerHTML\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n return {\n tagDescription: {\n tag: HtmlRawTagDataConsts.TagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {},\n innerHtml: BodyTagsExtensions.sanitizeInnerHtml(data.data[\"innerHTML\"])\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { ButtonTagDataConsts } from \"./ButtonTagService\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nconst defaultLinkForDownload = \"https://storage.yandexcloud.net/mega-academy/presentation.pdf\";\n\nexport class DownloadButtonTagDataConsts {\n static readonly TagName = \"download-file-button\";\n static readonly TitleAttrName = \"title\";\n static readonly LinkAttrName = \"link\";\n}\n\nexport interface DownloadButtonTag {\n type: string;\n data: DownloadButtonTagData;\n}\n\nexport interface DownloadButtonTagData {\n title: string;\n link: string;\n}\n\nexport class DownloadButtonTagService implements IMarkUpTagService {\n tagName: string = DownloadButtonTagDataConsts.TagName;\n shortDescription: string = \"Кнопка для скачивания\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName} title=\"${bodyTag.attributes[DownloadButtonTagDataConsts.TitleAttrName]}\" link=\"${bodyTag.attributes[DownloadButtonTagDataConsts.LinkAttrName]}\"></${this.tagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: DownloadButtonTagDataConsts.TagName,\n data: {\n title: elem.getAttribute(DownloadButtonTagDataConsts.TitleAttrName),\n link: elem.getAttribute(DownloadButtonTagDataConsts.LinkAttrName)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as ButtonTagDataConsts;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: fileData,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [DownloadButtonTagDataConsts.LinkAttrName]: defaultLinkForDownload,\n [DownloadButtonTagDataConsts.TitleAttrName]: 'Скачать'\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class ButtonTagDataConsts {\n static readonly TagName = \"button\";\n static readonly TextAttrName = \"text\";\n static readonly TypeAttrName = \"type\";\n static readonly ClickAttrName = \"click\";\n}\n\nexport interface ButtonTag {\n type: string;\n data: ButtonTagData;\n}\n\n\nexport interface ButtonTagData {\n text: string;\n type: string;\n click: string;\n}\n\nexport class ButtonTagService implements IMarkUpTagService {\n tagName: string = ButtonTagDataConsts.TagName;\n shortDescription: string = \"Кнопка\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n let atts = bodyTag.attributes;\n\n return `<${this.tagName} text=\"${atts[ButtonTagDataConsts.TextAttrName]}\" type=\"${atts[ButtonTagDataConsts.TypeAttrName]}\" click=\"${atts[ButtonTagDataConsts.ClickAttrName]}\"></${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: ButtonTagDataConsts.TagName,\n data: {\n text: elem.getAttribute(ButtonTagDataConsts.TextAttrName),\n type: elem.getAttribute(ButtonTagDataConsts.TypeAttrName),\n click: elem.getAttribute(ButtonTagDataConsts.ClickAttrName)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as ButtonTagDataConsts;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: fileData,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [ButtonTagDataConsts.ClickAttrName]: '',\n [ButtonTagDataConsts.TypeAttrName]: 'button',\n [ButtonTagDataConsts.TextAttrName]: 'Кнопка'\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class CustomWidgetTagDataConsts {\n static readonly TagName = \"custom-widget\";\n\n static readonly TypeAttrName = \"type\";\n static readonly DataIdAttrName = \"data-id\";\n static readonly WidgetIdAttrName = \"widget-id\";\n}\n\nexport interface CustomWidgetTag {\n type: string;\n data: CustomWidgetTagData;\n}\n\nexport interface CustomWidgetTagData {\n type: string;\n dataId: string;\n widgetId: string;\n}\n\n\nexport class CustomWidgetTagService implements IMarkUpTagService {\n tagName: string = CustomWidgetTagDataConsts.TagName;\n shortDescription: string = \"Виджет\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n let attrs = bodyTag.attributes;\n\n return `<${this.tagName} type=\"${attrs[CustomWidgetTagDataConsts.TypeAttrName]}\" data-id=\"${attrs[CustomWidgetTagDataConsts.DataIdAttrName]}\" widget-id=\"${attrs[CustomWidgetTagDataConsts.WidgetIdAttrName]}\"></${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: CustomWidgetTagDataConsts.TagName,\n data: {\n type: elem.getAttribute(CustomWidgetTagDataConsts.TypeAttrName),\n dataId: elem.getAttribute(CustomWidgetTagDataConsts.DataIdAttrName),\n widgetId: elem.getAttribute(CustomWidgetTagDataConsts.WidgetIdAttrName)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let customWidgetTagData = data.data as CustomWidgetTagData;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: customWidgetTagData,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [CustomWidgetTagDataConsts.TypeAttrName]: 'example-type',\n [CustomWidgetTagDataConsts.DataIdAttrName]: 'example-data-id',\n [CustomWidgetTagDataConsts.WidgetIdAttrName]: 'example-widget-id'\n },\n innerHtml: props.htmlRaw,\n };\n }\n\n static ExtractCustomWidgetTagData(attributes: any): CustomWidgetTagData {\n return {\n type: attributes[CustomWidgetTagDataConsts.TypeAttrName],\n dataId: attributes[CustomWidgetTagDataConsts.DataIdAttrName],\n widgetId: attributes[CustomWidgetTagDataConsts.WidgetIdAttrName]\n }\n }\n\n static ExtractCustomWidgetAttributes(customWidgetTagData: CustomWidgetTagData) {\n return {\n [CustomWidgetTagDataConsts.TypeAttrName]: customWidgetTagData.type,\n [CustomWidgetTagDataConsts.DataIdAttrName]: customWidgetTagData.dataId,\n [CustomWidgetTagDataConsts.WidgetIdAttrName]: customWidgetTagData.widgetId\n }\n }\n}\n","import { HtmlBodyTag } from \"../models\";\n\n\nexport class TagBuildExtensions {\n static buildTagString(bodyTag: HtmlBodyTag, attrs: { [name: string]: { defaultValue: string; }; }): string {\n\n const tagName = bodyTag.tagDescription.tag;\n\n const attrValStrs: string[] = [];\n\n Object.keys(attrs).forEach(attributeName => {\n const attrDescription = attrs[attributeName];\n\n let attrVal = bodyTag.attributes[attributeName];\n\n if (attrVal === undefined) {\n attrVal = attrDescription.defaultValue;\n }\n\n const attrValStr = (attrVal === undefined || attrVal === null)\n ? null\n : `${attributeName}=\"${attrVal}\"`;\n\n if (attrValStr) {\n attrValStrs.push(attrValStr);\n }\n });\n\n const attrStr = attrValStrs.length > 0\n ? \" \" + attrValStrs.join(\" \")\n : \"\";\n\n return `<${tagName}${attrStr}></${tagName}>`;\n }\n}\n","import { HtmlBodyTag, InterfaceBlock } from \"../models\"\nimport { CrocoHtmlOptions } from \"../options\"\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\"\nimport { TagBuildExtensions } from \"./TagBuildExtensions\"\n\nexport class LinkTagConsts {\n static readonly TagName = \"croco-link\"\n}\n\nexport class LinkTagAttrs {\n static readonly FileId = \"file-id\"\n\n static readonly Url = \"url\"\n\n static readonly Title = \"title\"\n\n static readonly Type = \"type\"\n}\n\nexport interface LinkTagData {\n url: string;\n title: string;\n type: string;\n fileId: string;\n}\n\nexport class LinkTagService implements IMarkUpTagService {\n\n tagName: string = LinkTagConsts.TagName;\n shortDescription: string = \"Ссылка\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n return TagBuildExtensions.buildTagString(bodyTag, {\n [LinkTagAttrs.Url]: { defaultValue: \"\" },\n [LinkTagAttrs.Title]: { defaultValue: \"\" },\n [LinkTagAttrs.Type]: { defaultValue: null }\n })\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, _: CrocoHtmlOptions): InterfaceBlock {\n\n const data: LinkTagData = {\n url: elem.getAttribute(LinkTagAttrs.Url),\n title: elem.getAttribute(LinkTagAttrs.Title),\n type: elem.getAttribute(LinkTagAttrs.Type),\n fileId: elem.getAttribute(LinkTagAttrs.FileId),\n };\n\n return {\n tagName: this.tagName,\n data\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let tagData: LinkTagData = data.data;\n\n const attrs = {\n [LinkTagAttrs.Url]: tagData.url,\n [LinkTagAttrs.Type]: tagData.type,\n [LinkTagAttrs.FileId]: tagData.fileId,\n [LinkTagAttrs.Title]: tagData.title\n };\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [LinkTagAttrs.Title]: 'Презентация',\n [LinkTagAttrs.Url]: 'https://storage.yandexcloud.net/mega-academy/presentation.pdf',\n [LinkTagAttrs.Type]: 'pdf'\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n\n","export class TextTags {\n\n public static readonly text = \"text\";\n\n public static readonly h1 = \"h1\";\n\n public static readonly h2 = \"h2\";\n\n public static readonly h3 = \"h3\";\n\n public static readonly h4 = \"h4\";\n\n public static readonly h5 = \"h5\";\n\n public static readonly h6 = \"h6\";\n\n public static headerTextTags = [TextTags.h1, TextTags.h2, TextTags.h3, TextTags.h4, TextTags.h5, TextTags.h6];\n\n public static allTextTags = [TextTags.text, ...TextTags.headerTextTags];\n\n}\n","export class ExternalVideoTagDataConsts {\n static readonly TagName = \"external-video\";\n static readonly VideoTypeAttrName = \"type\";\n static readonly LinkAttrName = \"link\";\n static readonly UseResponsiveWrapperAttrName = \"use-responsive-wrapper\";\n static readonly IframeAttrName = \"iframe\";\n}\n\nexport class ExternalVideoSupportedTypes {\n static readonly Youtube = \"youtube\"\n static readonly VkVideo = \"vk-video\"\n static readonly Code = \"code\"\n}\n\nexport const ExternalVideoPlayers = [\n {\n type: ExternalVideoSupportedTypes.Code,\n displayValue: 'Встраиваемое Видео',\n },\n {\n type: ExternalVideoSupportedTypes.Youtube,\n displayValue: 'Youtube',\n },\n {\n type: ExternalVideoSupportedTypes.VkVideo,\n displayValue: 'Vk Video',\n }\n]\n\nexport interface ExternalVideoTag {\n type: string;\n data: ExternalVideoTagData;\n}\n\nexport interface ExternalVideoTagData {\n type: string;\n link: string;\n innerHtml: string;\n useResponsiveWrapper: boolean;\n}\n","import { HtmlRawTagDataConsts } from \"../tag-services\";\nimport { CustomWidgetTagDataConsts } from \"../tag-services/CustomWidgetTagService\";\nimport { FileImageTagDataConsts } from \"./ImageMethods\";\nimport { TextTags } from \"./TextMethods\";\nimport { ExternalVideoTagDataConsts } from \"./VideoMethods\";\n\nexport class Tags {\n public static readonly Text = TextTags.text;\n public static readonly H1 = TextTags.h1;\n public static readonly H2 = TextTags.h2;\n public static readonly H3 = TextTags.h3;\n public static readonly H4 = TextTags.h4;\n public static readonly H5 = TextTags.h5;\n public static readonly H6 = TextTags.h6;\n\n public static readonly HtmlRaw = HtmlRawTagDataConsts.TagName;\n public static readonly FileImage = FileImageTagDataConsts.TagName;\n public static readonly Table = 'table';\n public static readonly RichText = 'rich-text';\n public static readonly ExternalVideo = ExternalVideoTagDataConsts.TagName;\n public static readonly UnsupportedTag = 'unsupported-tag';\n public static readonly CustomWidget = CustomWidgetTagDataConsts.TagName;\n}\n","import { FileAudioTagDataConsts, AudioMethods } from \"../extensions/AudioMethods\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag, FileAudioTagData } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\n\nexport class FileAudioTagService implements IMarkUpTagService {\n tagName: string = FileAudioTagDataConsts.TagName;\n shortDescription: string = \"Аудио\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n let fileIdAttr = \"\";\n let titleAttr = \"\";\n\n if (bodyTag.attributes.hasOwnProperty(FileAudioTagDataConsts.FileIdAttrName) &&\n bodyTag.attributes[FileAudioTagDataConsts.FileIdAttrName]) {\n fileIdAttr = `${FileAudioTagDataConsts.FileIdAttrName}=\"${bodyTag.attributes[FileAudioTagDataConsts.FileIdAttrName]}\"`;\n }\n\n if (bodyTag.attributes.hasOwnProperty(FileAudioTagDataConsts.TitleAttrName) &&\n bodyTag.attributes[FileAudioTagDataConsts.TitleAttrName]) {\n titleAttr = `${FileAudioTagDataConsts.TitleAttrName}=\"${bodyTag.attributes[FileAudioTagDataConsts.TitleAttrName]}\"`;\n }\n\n return `<${FileAudioTagDataConsts.TagName} ${fileIdAttr} ${titleAttr}></${FileAudioTagDataConsts.TagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, _: CrocoHtmlOptions): InterfaceBlock {\n let fileId = elem.getAttribute(FileAudioTagDataConsts.FileIdAttrName);\n let title = elem.getAttribute(FileAudioTagDataConsts.TitleAttrName);\n\n return {\n tagName: FileAudioTagDataConsts.TagName,\n data: {\n fileId: fileId,\n title: title\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n let fileData = data.data as FileAudioTagData;\n\n let attrs = {};\n\n if (fileData.fileId) {\n attrs[FileAudioTagDataConsts.FileIdAttrName] = fileData.fileId;\n }\n\n if (fileData.title) {\n attrs[FileAudioTagDataConsts.TitleAttrName] = fileData.title;\n }\n\n return {\n tagDescription: {\n tag: FileAudioTagDataConsts.TagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [FileAudioTagDataConsts.FileIdAttrName]: '',\n [FileAudioTagDataConsts.TitleAttrName]: ''\n },\n innerHtml: \"\",\n }\n }\n}\n","import { da, tr } from \"date-fns/locale\";\nimport { BaseApiResponse } from \"../models\";\nimport { TextAlignment } from \"../tag-services\";\n\nexport const TextTag = \"text\";\n\nexport interface GenericTextTag {\n tagName: string,\n data: SimpleTextTagData\n}\n\nexport interface IHorizontalAlignmentExtractionResult {\n succeeded: boolean;\n result: TextAlignment;\n errorMessage: string;\n}\n\nexport interface SimpleTextTagData {\n textTagName: string;\n text: string,\n html: string,\n horizontalAlignment: \"left\" | \"right\" | \"center\",\n validationResult: BaseApiResponse\n}\n\nexport class TextSimpleMethods {\n\n static supportedTags = [\"sup\", \"sub\", \"strong\", \"b\", \"i\", \"u\"];\n\n static extractTextTag(elem: HTMLElement): GenericTextTag {\n\n const hAlignExtractResult = this.extractHorizontalAlignment(elem);\n\n var data: SimpleTextTagData = {\n textTagName: elem.tagName.toLowerCase(),\n text: this.prepareText(elem.innerText),\n html: this.prepareText(elem.innerHTML),\n horizontalAlignment: hAlignExtractResult.result,\n validationResult: {\n isSucceeded: true,\n message: \"Ok\"\n }\n };\n\n if (!hAlignExtractResult.succeeded) {\n data.validationResult.isSucceeded = false;\n data.validationResult.message = hAlignExtractResult.errorMessage;\n }\n\n let result: GenericTextTag = {\n tagName: data.textTagName,\n data: data\n };\n\n var html = result.data.html;\n var htmlValidation = this.validateTextHtml(html);\n\n if (!htmlValidation.isSucceeded) {\n result.data.validationResult = htmlValidation;\n }\n\n return result;\n }\n\n static prepareText(s: string): string {\n s = s.trim().replace('\\n\\t', '');\n\n if (s === '\\n') {\n s = '';\n }\n\n return s;\n }\n\n static extractHorizontalAlignment(elem: HTMLElement): IHorizontalAlignmentExtractionResult {\n const hAlignValue = elem.getAttribute(\"h-align\") ?? TextAlignment.Left;\n\n const alignmentVals: string[] = [TextAlignment.Left, TextAlignment.Right, TextAlignment.Center];\n\n if (alignmentVals.indexOf(hAlignValue) < 0) {\n\n return {\n result: TextAlignment.Left,\n succeeded: false,\n errorMessage: `Недопустимое значение атрибута h-align. Допустимые значения: ${alignmentVals.join(', ')}. `\n + 'Данный тег можно не указывать, по-умолчанию будет применено выравнивание слева.'\n };\n }\n\n return {\n result: hAlignValue as TextAlignment,\n succeeded: true,\n errorMessage: \"\"\n };\n }\n\n static validateTextHtml(html: string): BaseApiResponse {\n\n var p = document.createElement(\"p\");\n p.innerHTML = html;\n\n for (let i = 0; i < p.children.length; i++) {\n const element = p.children.item(i);\n\n var validationResult = this.validateTag(element);\n\n if (!validationResult.isSucceeded) {\n return validationResult;\n }\n }\n\n return {\n isSucceeded: true,\n message: `Ok`\n }\n }\n\n static validateTag(element: Element): BaseApiResponse {\n let lowerTag = element.tagName.toLowerCase();\n\n if (!this.supportedTags.includes(lowerTag)) {\n return {\n isSucceeded: false,\n message: `Тег <${lowerTag}> не поддерживается внутри тега <text>`\n }\n }\n\n for (let i = 0; i < element.children.length; i++) {\n const nElement = element.children.item(i);\n\n var innerValidationResult = this.validateTag(nElement);\n\n if (!innerValidationResult.isSucceeded) {\n return innerValidationResult;\n }\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { FileImageTagDataConsts } from './ImageMethods';\nimport { TableHeaderData, TableRowData } from './TableMethods';\nimport { GenericTextTag, TextTag } from './TextSimpleMethods';\nimport { FileImageTag } from \"../models/image-models\";\n\nexport class BootstrapTableMethods {\n\n static buildTable(header: TableHeaderData, rows: TableRowData[]): string {\n let result = `<table class=\"table table-bordered\">`;\n result += this.buildHeader(header);\n result += this.buildBody(rows);\n result += \"</table>\";\n\n return result;\n }\n\n static buildHeader(data: TableHeaderData) {\n if (data === null) {\n return \"\";\n }\n\n let result = \"<thead>\";\n result += \"<tr>\";\n for (let index = 0; index < data.columns.length; index++) {\n result += `<th>${data.columns[index]}</th>`;\n }\n result += \"</tr>\";\n\n result += \"</thead>\";\n\n return result;\n }\n\n static buildBody(rows: TableRowData[]) {\n let result = \"<tbody>\";\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n result += \"<tr>\";\n for (let j = 0; j < row.columns.length; j++) {\n const col = row.columns[j];\n\n result += `<td class=\"align-middle\">${this.buildInnerTags(col.data.children)}</td>`;\n }\n result += \"</tr>\";\n }\n\n result += \"</tbody>\";\n return result;\n }\n\n static buildInnerTags(tags: InterfaceBlock[]) {\n let result = \"\";\n for (let i = 0; i < tags.length; i++) {\n result += this.buildInnerTag(tags[i]);\n }\n\n return result;\n }\n\n static buildInnerTag(data: InterfaceBlock): string {\n if (data.tagName === FileImageTagDataConsts.TagName) {\n let fileImageTag = data as FileImageTag;\n return `<img src=${fileImageTag.data.src} class=\"mx-auto d-block img-fluid\" />`;\n }\n else if (data.tagName === TextTag) {\n\n let simpleTextTag = data as GenericTextTag;\n\n var map = {\n [\"left\"]: \"text-start\",\n [\"center\"]: \"text-center\",\n [\"right\"]: \"text-end\"\n };\n\n if (!simpleTextTag.data.validationResult.isSucceeded) {\n return `<span>Ошибка в тексте ${simpleTextTag.data.validationResult.message}</span>`;\n }\n\n return `<div class=\"${map[simpleTextTag.data.horizontalAlignment]}\"><span>${simpleTextTag.data.html}</span></div>`;\n }\n else {\n return `<p>Тег ${data.tagName} не поддерживается</p>`;\n }\n }\n}\n","import { BaseApiResponse } from '../models';\nimport { CrocoHtmlOptions } from '../options';\nimport { AngularMaterialTableMethods } from './AngularMaterialTableMethods';\nimport { BootstrapTableMethods } from './BootstrapTableMethods';\nimport { HtmlExtractionMethods } from './HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { TextSimpleMethods } from './TextSimpleMethods';\nimport { TextTags } from './TextMethods';\n\nexport interface TableHeaderData {\n type: \"table-header\";\n columns: string[];\n}\n\nexport interface TableRowColumnData {\n type: \"table-row-column-data\";\n data: {\n text: string;\n children: InterfaceBlock[];\n }\n}\n\nexport interface TableRowData {\n type: \"table-row-column\";\n columns: TableRowColumnData[];\n}\n\nexport interface TableData {\n header: TableHeaderData;\n rows: TableRowData[];\n bootstrapHtml: string;\n html: string;\n angularMaterialTableDataCheck?: BaseApiResponse;\n}\n\nexport interface TableTagData {\n type: \"table\";\n data: TableData;\n}\n\nexport class TableTypes {\n static readonly TableRowColumnData = \"table-row-column-data\";\n static readonly Table = \"table\";\n static readonly TableRowColumn = \"table-row-column\";\n}\n\nexport interface AngularMaterialTableData {\n displayedColumns: string[];\n data: object[];\n}\n\nexport class TableMethods {\n\n static getTableFromHtmlTag(tableTag: HTMLTableElement, options: CrocoHtmlOptions): InterfaceBlock {\n\n const tableHeader = TableMethods.getHeader(tableTag);\n const tableRows = TableMethods.getTableRows(tableTag, options);\n\n let tableData: TableData = {\n header: tableHeader,\n rows: tableRows,\n bootstrapHtml: BootstrapTableMethods.buildTable(tableHeader, tableRows),\n html: tableTag.outerHTML,\n angularMaterialTableDataCheck: AngularMaterialTableMethods.checkAngularMaterialTableData(tableHeader, tableRows)\n };\n\n return {\n tagName: TableTypes.Table,\n data: tableData,\n validationResult: this.checkTable(tableData)\n };\n }\n\n static checkTable(tableData: TableData): BaseApiResponse {\n\n let rows = tableData.rows;\n\n let prevRowCount = -1;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n if (row.columns.length !== prevRowCount && prevRowCount != -1) {\n return {\n isSucceeded: false,\n message: `Ошибка при обработке разметки таблицы. `\n + `Количество колонок в каждой строке таблицы должно соотвествовать друг другу. `\n + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а в строке выше ${prevRowCount}.`\n };\n }\n prevRowCount = row.columns.length;\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n }\n }\n\n\n static getHeader(tableTag: HTMLTableElement): TableHeaderData {\n let header = tableTag.tHead;\n\n if (header === null) {\n return null;\n }\n\n let tr = header.children.item(0);\n\n let headerColumns: string[] = [];\n\n for (let j = 0; j < tr.children.length; j++) {\n const jElement = tr.children.item(j) as HTMLElement;\n\n headerColumns.push(jElement.innerHTML);\n }\n\n return {\n type: \"table-header\",\n columns: headerColumns\n };\n }\n\n static getTableRows(tableTag: HTMLTableElement, options: CrocoHtmlOptions): Array<TableRowData> {\n let tBody = tableTag.tBodies.item(0);\n\n let rows: TableRowData[] = [];\n\n for (let i = 0; i < tBody.children.length; i++) {\n const iElement = tBody.children.item(i);\n\n let rowColumns: TableRowColumnData[] = [];\n\n for (let j = 0; j < iElement.children.length; j++) {\n const jElement = iElement.children.item(j) as HTMLElement;\n\n let children = HtmlExtractionMethods.transformHtmlElementToBlocks(jElement, options);\n\n if (children.length === 0) {\n var textTag = document.createElement(TextTags.text);\n textTag.innerHTML = jElement.innerHTML;\n\n var textElem = TextSimpleMethods.extractTextTag(textTag);\n\n children.push(textElem);\n }\n\n var result: TableRowColumnData = {\n type: TableTypes.TableRowColumnData,\n data: {\n text: jElement.innerHTML,\n children\n }\n };\n\n rowColumns.push(result);\n }\n\n rows.push({\n type: TableTypes.TableRowColumn,\n columns: rowColumns\n });\n }\n\n return rows;\n }\n}\n","import { TableData, TableMethods, TableTypes } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class TableTagService implements IMarkUpTagService {\n tagName: string = TableTypes.Table;\n shortDescription: string = \"Таблица\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName}>${bodyTag.innerHtml}</${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return TableMethods.getTableFromHtmlTag(elem as HTMLTableElement, options);\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let tableData = data.data as TableData;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: tableData,\n innerHtml: null\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { HtmlBodyTag } from \"../models/models\";\nimport { HtmlExtractionMethods } from \"./HtmlExtractionMethods\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { FileImageTagDataConsts } from \"./ImageMethods\";\nimport { FileAudioTagDataConsts } from \"./AudioMethods\";\nimport { Tags } from \"./Tags\";\nimport { ExternalVideoTagDataConsts } from \"./VideoMethods\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\nimport { DownloadButtonTagDataConsts, DownloadButtonTagService, FileImageTagService, TextTagHtmlMarkupTagService } from \"../tag-services\";\nimport { FileAudioTagService } from \"../tag-services/FileAudioTagService\";\nimport { ExternalVideoTagService } from \"../tag-services/ExternalVideoTagService\";\nimport { HtmlRawTagDataConsts, HtmlRawTagService } from \"../tag-services/HtmlRawTagService\";\nimport { ButtonTagDataConsts, ButtonTagService } from \"../tag-services/ButtonTagService\";\nimport { TextTags } from \"./TextMethods\";\nimport { TableTypes } from \"./TableMethods\";\nimport { TableTagService } from \"../tag-services/TableTagService\";\nimport { LinkTagConsts, LinkTagService } from \"../tag-services/LinkTagService\";\n\nexport class BodyTagsExtensions {\n\n private static readonly _tagServices: { [id: string]: IMarkUpTagService; } = {\n [TextTags.text]: new TextTagHtmlMarkupTagService(\"text\", \"T\"),\n [TextTags.h1]: new TextTagHtmlMarkupTagService(\"h1\", \"H1\"),\n [TextTags.h2]: new TextTagHtmlMarkupTagService(\"h2\", \"H2\"),\n [TextTags.h3]: new TextTagHtmlMarkupTagService(\"h3\", \"H3\"),\n [TextTags.h4]: new TextTagHtmlMarkupTagService(\"h4\", \"H4\"),\n [TextTags.h5]: new TextTagHtmlMarkupTagService(\"h5\", \"H5\"),\n [TextTags.h6]: new TextTagHtmlMarkupTagService(\"h6\", \"H6\"),\n [FileImageTagDataConsts.TagName]: new FileImageTagService(),\n [FileAudioTagDataConsts.TagName]: new FileAudioTagService(),\n [ExternalVideoTagDataConsts.TagName]: new ExternalVideoTagService(),\n [HtmlRawTagDataConsts.TagName]: new HtmlRawTagService(),\n [DownloadButtonTagDataConsts.TagName]: new DownloadButtonTagService(),\n [ButtonTagDataConsts.TagName]: new ButtonTagService(),\n [TableTypes.Table]: new TableTagService(),\n [LinkTagConsts.TagName]: new LinkTagService()\n }\n\n public static hasTagService(tagName: string, options: CrocoHtmlOptions) {\n if (this._tagServices.hasOwnProperty(tagName)) {\n return true;\n }\n\n if (options.definedCustomTags.hasOwnProperty(tagName)){\n return true;\n }\n\n return false;\n }\n\n public static getTagService(tagName: string, options: CrocoHtmlOptions) {\n if (this._tagServices.hasOwnProperty(tagName)) {\n return this._tagServices[tagName];\n }\n\n return options.definedCustomTags[tagName];\n }\n\n static convertToHtmlString(bodyTag: HtmlBodyTag, options: CrocoHtmlOptions): string {\n const tagName = bodyTag.tagDescription.tag.toLowerCase();\n\n if (this.hasTagService(tagName, options)) {\n return this.getTagService(tagName, options).bodyTagToHtmlStringConverter(bodyTag);\n }\n\n return `<mapper-not-found>\"${tagName}\" тег не найден.</mapper-not-found>`;\n }\n\n static bodyTagsToHtml(bodyTags: HtmlBodyTag[], options: CrocoHtmlOptions): string {\n let htmls = bodyTags.map(bodyTag => (BodyTagsExtensions.convertToHtmlString(bodyTag, options)));\n\n let result = \"\";\n\n for (let index = 0; index < htmls.length; index++) {\n const element = htmls[index];\n\n result += element;\n }\n\n return result;\n }\n\n static getBodyTags(html: string, options: CrocoHtmlOptions) {\n let result = HtmlExtractionMethods.transformHtmlStringToBlocks(html, options);\n \n return result.map(x => BodyTagsExtensions.toBodyTag(x, options));\n }\n\n static sanitizeInnerHtml(html: string): string {\n return html.trim().replace('\\n\\t', '');\n }\n\n static toBodyTag(data: InterfaceBlock, options: CrocoHtmlOptions): HtmlBodyTag {\n\n const tagName = data.tagName;\n\n if (this.hasTagService(tagName, options)) {\n return this.getTagService(tagName, options).toBodyTag(data);\n }\n\n return {\n tagDescription: {\n tag: Tags.UnsupportedTag,\n displayValue: \"Неподдерживаемый тег\",\n isCustom: false\n },\n attributes: {},\n innerHtml: JSON.stringify(data)\n };\n }\n}\n","export class XmlExtensions{\n public static formatXml(xml:string, tab:string = '\\t'):string { // tab = optional indent value, default is tab (\\t)\n var formatted = '', indent= '';\n tab = tab || '\\t';\n xml.split(/>\\s*</).forEach(function(node) {\n if (node.match( /^\\/\\w/ )) indent = indent.substring(tab.length); // decrease indent by one 'tab'\n formatted += indent + '<' + node + '>\\r\\n';\n if (node.match( /^<?\\w[^>]*[^\\/]$/ )) indent += tab; // increase indent\n });\n return formatted.substring(1, formatted.length-3);\n }\n\n public static tagsToLower(xml: string): string{\n xml = this.replaceTagToLower(xml, \"Body\");\n xml = this.replaceTagToLower(xml, \"Image\");\n xml = this.replaceTagToLower(xml, \"Text\");\n\n return xml;\n }\n\n static replaceTagToLower(xml: string, tag: string) : string{\n return xml\n .replace(new RegExp(`<${tag}`, 'g'), `<${tag.toLowerCase()}`)\n .replace(new RegExp(`</${tag}>`, 'g'), `</${tag.toLowerCase()}>`);\n }\n}","import { XmlExtensions } from './XmlExtensions';\n\nexport class TableBuilder {\n static getTableMarkUp(rows: number, cols: number, generateHeaders: boolean): string {\n rows = +rows;\n cols = +cols;\n\n let result = \"<table>\";\n \n if(generateHeaders){\n result += TableBuilder.getTableHeaderMarkUp(cols);\n }\n \n result += TableBuilder.getTableBodyMarkUp(cols, rows);\n result += \"</table>\";\n\n return XmlExtensions.formatXml(result);\n }\n\n static getTableHeaderMarkUp(cols: number): string {\n\n let result = \"<thead><tr>\";\n\n for (let i = 0; i < cols; i++) {\n result += `<th>Колонка #${i + 1}</th>`;\n }\n\n result += \"</tr></thead>\";\n\n return result;\n }\n\n static getTableBodyMarkUp(cols: number, rows: number): string {\n\n let result = \"<tbody>\";\n\n for (let row = 0; row < rows; row++) {\n result += \"<tr>\";\n for (let i = 0; i < cols; i++) {\n\n result += `<td>Ряд№${row + 1} Колонка #${i + 1}</td>`;\n }\n result += \"</tr>\";\n }\n\n result += \"</tbody>\";\n\n return result;\n }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface UploadPublicFilesWithProgressEvent {\n loading: boolean;\n response?: PublicFilesUploadResponse;\n uploadingLoaded: number;\n uploadingTotal: number;\n}\n\nexport interface PublicFilesUploadResponse {\n succeeded: boolean; \n errorMessage: string; \n fileIds: Array<number>; \n filesUploadedEventId: string; \n}\n\n@Injectable({ providedIn: 'root' })\nexport class PublicFileUploadService {\n constructor(\n private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') private readonly baseUrl: string,\n ) {}\n\n public postFiles(files: FileList, applicationId: string | null): Observable<PublicFilesUploadResponse> {\n const formData: FormData = new FormData();\n\n for (let i = 0; i < files.length; i++) {\n var fileToUpload = files.item(i);\n formData.append(`fileKey${i}`, fileToUpload as Blob, fileToUpload?.name);\n }\n\n return this.postFilesInner(formData, applicationId);\n }\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: true,\n ): Observable<HttpEvent<PublicFilesUploadResponse>>;\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress?: false,\n ): Observable<PublicFilesUploadResponse>;\n \n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: boolean,\n ): Observable<PublicFilesUploadResponse> | Observable<HttpEvent<PublicFilesUploadResponse>>;\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress = false,\n ): Observable<PublicFilesUploadResponse> | Observable<HttpEvent<PublicFilesUploadResponse>> {\n let endpoint = this.baseUrl + `api/files/upload?executeHandlersNow=true`;\n\n if (applicationId) {\n endpoint += `&applicationId=${applicationId}`;\n }\n\n return this._httpClient.post<PublicFilesUploadResponse>(\n endpoint,\n formData,\n withProgress ? { reportProgress: true, observe: 'events' } : undefined,\n );\n }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface UploadPrivateFilesWithProgressEvent {\n loading: boolean;\n response?: PrivateFilesCreatedResult;\n uploadingLoaded: number;\n uploadingTotal: number;\n}\n\nexport interface PrivateFilesCreatedResult {\n succeeded: boolean;\n errorMessage: string;\n setId: string;\n fileIds: Array<string>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class PrivateFileUploadService {\n constructor(\n private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') private readonly baseUrl: string,\n ) {}\n\n public postFiles(files: FileList, applicationId: string | null): Observable<PrivateFilesCreatedResult> {\n const formData: FormData = new FormData();\n\n for (let i = 0; i < files.length; i++) {\n var fileToUpload = files.item(i);\n formData.append(`fileKey${i}`, fileToUpload as Blob, fileToUpload?.name);\n }\n\n return this.postFilesInner(formData, applicationId);\n }\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: true,\n ): Observable<HttpEvent<PrivateFilesCreatedResult>>;\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress?: false,\n ): Observable<PrivateFilesCreatedResult>;\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: boolean,\n ): Observable<PrivateFilesCreatedResult> | Observable<HttpEvent<PrivateFilesCreatedResult>>;\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress = false,\n ): Observable<PrivateFilesCreatedResult> | Observable<HttpEvent<PrivateFilesCreatedResult>> {\n let endpoint = this.baseUrl + `api/private-files/upload?executeHandlersNow=true`;\n\n if (applicationId) {\n endpoint += `&applicationId=${applicationId}`;\n }\n\n return this._httpClient.post<PrivateFilesCreatedResult>(\n endpoint,\n formData,\n withProgress ? { reportProgress: true, observe: 'events' } : undefined,\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CrocoHtmlEditorFileOptions } from \"../options\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrocoHtmlFileOptionsService {\n private readonly localStorageToken = 'crocoHtmlEditorFileOptions'\n private readonly defaultOptions = {\n applicationId: null,\n usePrivateFiles: false,\n }\n\n set(data: CrocoHtmlEditorFileOptions) {\n localStorage.setItem(this.localStorageToken, JSON.stringify(data));\n }\n\n get(): CrocoHtmlEditorFileOptions {\n try {\n const data = localStorage.getItem(this.localStorageToken);\n return data ? JSON.parse(data) : this.defaultOptions;\n } catch (e) {\n return this.defaultOptions;\n }\n }\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { PublicFilesUploadResponse, PublicFileUploadService } from '../../services/PublicFileUploadService';\nimport { MatButton } from '@angular/material/button';\nimport { PrivateFilesCreatedResult, PrivateFileUploadService } from \"../../services/PrivateFileUploadService\";\nimport { CrocoHtmlFileOptionsService } from \"../../services/CrocoHtmlFileOptionsService\";\n\nexport interface FilePostingStarted {\n filesCount: number;\n}\n\n@Component({\n selector: 'croco-app-upload-files-btn',\n templateUrl: './upload-files-btn.component.html',\n styleUrls: ['./upload-files-btn.component.css'],\n standalone: true,\n imports: [MatButton]\n})\nexport class UploadFilesBtnComponent {\n\n @ViewChild('filesInput')\n private fileInput!: ElementRef<HTMLInputElement>;\n\n @Input()\n extAccepts: string = \"*/*\";\n\n @Input()\n isMultiple = true;\n\n @Input()\n btnText: string = \"Загрузить файлы\";\n\n @Input()\n hidden = false;\n\n @Output()\n postFilesStarted = new EventEmitter<FilePostingStarted>();\n\n @Output()\n onPublicFilesUploaded = new EventEmitter<PublicFilesUploadResponse>();\n\n @Output()\n onPrivateFilesUploaded = new EventEmitter<PrivateFilesCreatedResult>();\n\n constructor(\n private readonly _publicFileUploadService: PublicFileUploadService,\n private readonly _privateFileUploadService: PrivateFileUploadService,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n ) { }\n\n handleFileInput(e: Event) {\n\n const files: FileList | undefined = e.target[\"files\"];\n\n this.postFilesStarted.emit({\n filesCount: files?.length ?? 0\n });\n\n if (files === null || files === undefined) {\n return;\n }\n\n if (this._htmlSettingsService.get().usePrivateFiles) {\n this._privateFileUploadService\n .postFiles(files, this._htmlSettingsService.get().applicationId)\n .subscribe(data => {\n this.onPrivateFilesUploaded.emit(data);\n })\n }\n else {\n this._publicFileUploadService\n .postFiles(files, null)\n .subscribe(data => {\n this.onPublicFilesUploaded.emit(data);\n })\n }\n }\n\n clickFileInput() {\n this.fileInput.nativeElement.click();\n }\n}\n","<button [hidden]=\"hidden\" mat-raised-button color=\"primary\" (click)=\"filesInput.click()\">{{btnText}}</button>\n<input [hidden]=\"true\" [accept]=\"extAccepts\" [multiple]=\"isMultiple\" type=\"file\" #filesInput (change)=\"handleFileInput($event)\" />","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { FileImageTagDataConsts } from '../../extensions';\nimport { HtmlBodyTag } from '../../models/models';\nimport { FilePostingStarted, UploadFilesBtnComponent } from '../upload-files-btn/upload-files-btn.component';\nimport { MatButton } from '@angular/material/button';\nimport { PublicFilesUploadResponse } from '../../services/PublicFileUploadService';\nimport { PrivateFilesCreatedResult } from \"../../services/PrivateFileUploadService\";\n\n@Component({\n selector: 'croco-html-add-files-btn',\n templateUrl: './add-files-btn.component.html',\n standalone: true,\n imports: [UploadFilesBtnComponent, MatButton]\n})\nexport class AddFilesBtnComponent {\n\n @Output()\n postFilesStarted = new EventEmitter<FilePostingStarted>();\n\n @ViewChild(\"fakeBtn\")\n fakeBtn!: UploadFilesBtnComponent;\n\n fileIds: number[] = [];\n\n @Output()\n filesTagsReady = new EventEmitter<HtmlBodyTag[]>();\n\n postFilesStartedEventHandler(data: FilePostingStarted) {\n this.postFilesStarted.emit(data);\n }\n\n filesUploadedPublicHandler(data: PublicFilesUploadResponse) {\n const fileTags = this.buildFileTags(data.fileIds.map(el => el.toString()));\n this.filesTagsReady.emit(fileTags);\n }\n\n filesUploadedPrivateHandler(data: PrivateFilesCreatedResult) {\n const fileTags = this.buildFileTags(data.fileIds);\n this.filesTagsReady.emit(fileTags);\n }\n\n private buildFileTags(fileIds: string[]): HtmlBodyTag[] {\n return fileIds.map(fileId => ({\n presentOrEdit: true,\n tagDescription: {\n tag: FileImageTagDataConsts.TagName,\n displayValue: \"Изображение\",\n isCustom: false\n },\n attributes: {\n [FileImageTagDataConsts.FileIdAttrName]: fileId,\n [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n },\n innerHtml: \"\"\n }));\n }\n\n handleClick() {\n this.fakeBtn.clickFileInput();\n }\n}\n","<div [hidden]=\"true\">\n <croco-app-upload-files-btn #fakeBtn\n (onPrivateFilesUploaded)=\"filesUploadedPrivateHandler($event)\"\n (onPublicFilesUploaded)=\"filesUploadedPublicHandler($event)\"\n [btnText]=\"'Добавить изображения'\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" [extAccepts]=\"'image/*'\"></croco-app-upload-files-btn>\n</div>\n\n<div>\n <button class=\"w-100\" (click)=\"handleClick()\" mat-stroked-button>Добавить изображения</button>\n</div>\n","\nexport interface GetListResult<T> {\n /*\n Сколько всего записей\n */\n totalCount: number;\n\n /*\n Текущий список\n */\n list: Array<T>;\n}\n\n\nexport interface FileRelationModel {\n entityTypeFullName: string;\n entityKey: string;\n relationName: string;\n relationValue: string;\n relationCustomData: string;\n}\n\nexport interface SearchFilesRequest {\n q: string;\n fileName: string;\n applicationId: string;\n fileTypes: Array<FileType>;\n count: number | null;\n offSet: number;\n}\n\nexport enum FileType {\n Undefined = 'Undefined',\n Unknown = 'Unknown',\n Image = 'Image',\n Audio = 'Audio',\n Video = 'Video',\n Document = 'Document',\n Archive = 'Archive'\n}\n\n\nexport interface GetListSearchModel {\n count: number | null;\n offSet: number;\n}\n\nexport interface FileSimpleModel {\n fileId: number;\n fileName: string;\n type: FileType;\n downloadUrl: string;\n}\n\nexport interface FileInfoModel {\n type: FileType;\n name: string;\n downloadUrl: string;\n}\n\nexport interface CommonFileInfoResultModel {\n id: string;\n isPrivateId: boolean;\n fileInfo: FileInfoModel;\n}","import { HttpClient } from \"@angular/common/http\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { FileSimpleModel, GetListResult, SearchFilesRequest } from \"./file-models\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PublicFilesQueryService {\n\n private readonly _baseControllerUrl: string;\n\n constructor(private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') baseUrl: string) {\n this._baseControllerUrl = `${baseUrl}api/Files`;\n }\n\n public search(model: SearchFilesRequest): Observable<GetListResult<FileSimpleModel>> {\n return this._httpClient.post<GetListResult<FileSimpleModel>>(\n `${this._baseControllerUrl}/GetFiles`, model\n );\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { FileType, GetListResult, SearchFilesRequest } from \"./file-models\";\n\nexport interface PrivateFileNameModel {\n id: string;\n setId: string;\n fileName: string;\n type: FileType;\n downloadUrl: string;\n createdOn: string;\n applicationId: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrivateFilesQueryService {\n\n private readonly _baseControllerUrl: string;\n\n constructor(private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') baseUrl: string) {\n this._baseControllerUrl = `${baseUrl}api/private-files/query`;\n }\n\n public search(model: SearchFilesRequest): Observable<GetListResult<PrivateFileNameModel>> {\n return this._httpClient.post<GetListResult<PrivateFileNameModel>>(\n `${this._baseControllerUrl}/search`, model\n );\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, Inject } from \"@angular/core\";\nimport { CommonFileInfoResultModel } from \"./file-models\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommonFileInfoQueryService {\n\n private readonly _baseControllerUrl: string;\n\n constructor(private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') baseUrl: string) {\n this._baseControllerUrl = `${baseUrl}api/common-files`;\n }\n\n /**\n * Получить информацию о файле на сервере по идентификатору.\n * @param model \n * @returns \n */\n public getInfo(id: string) {\n return this._httpClient.get<CommonFileInfoResultModel>(\n `${this._baseControllerUrl}/query/get-info/${id}`\n );\n }\n}","import {\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ElementRef,\n ChangeDetectionStrategy,\n inject,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { AudioMethods, FileAudioTagDataConsts } from '../../../extensions/AudioMethods';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { Subject, takeUntil } from \"rxjs\";\nimport { PublicFilesQueryService } from '../../../services/PublicFilesQueryService';\nimport { PrivateFilesQueryService } from '../../../services/PrivateFilesQueryService';\nimport { CrocoHtmlFileOptionsService } from '../../../services/CrocoHtmlFileOptionsService';\nimport { FileType } from '../../../services/file-models';\nimport { UploadFilesBtnComponent } from '../../upload-files-btn/upload-files-btn.component';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { MatIconButton } from \"@angular/material/button\";\nimport { CommonFileInfoQueryService } from '../../../services/CommonFileInfoQueryService';\n\n@Component({\n selector: 'croco-html-audio-editor',\n templateUrl: './audio-editor.component.html',\n styleUrls: ['./audio-editor.component.scss'],\n standalone: true,\n imports: [\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatIcon,\n MatFormField,\n MatLabel,\n MatInput,\n UploadFilesBtnComponent,\n NgSelectModule,\n MatIconButton\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AudioEditorComponent implements OnInit, OnDestroy {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n hasAudioError = false;\n errorMessage = '';\n isPlaying = false;\n isLoading = false;\n currentTime = 0;\n duration = 0;\n volume = 1;\n isMuted = false;\n audioSrc = '';\n\n searchOrEdit = \"search\";\n\n files: Array<{ fileId: string; fileName: string }> = [];\n loading = false;\n q = '';\n\n private unsubscribe = new Subject<void>();\n\n @ViewChild('audioPlayer', { static: false })\n audioPlayer!: ElementRef<HTMLAudioElement>;\n\n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = true;\n\n constructor(\n private readonly _publicFileService: PublicFilesQueryService,\n private readonly _privateFileService: PrivateFilesQueryService,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n private readonly _commonFileInfoService: CommonFileInfoQueryService,\n ) { }\n\n public get fileId(): string {\n return this.tag.attributes[FileAudioTagDataConsts.FileIdAttrName];\n }\n\n public set fileId(value: string) {\n this.tag.attributes[FileAudioTagDataConsts.FileIdAttrName] = value;\n }\n\n public get title(): string {\n return this.tag.attributes[FileAudioTagDataConsts.TitleAttrName] || '';\n }\n\n public set title(value: string) {\n this.tag.attributes[FileAudioTagDataConsts.TitleAttrName] = value;\n }\n\n hasFileId() {\n return this.tag.attributes.hasOwnProperty(FileAudioTagDataConsts.FileIdAttrName) && this.fileId && this.fileId !== '';\n }\n\n private get audioElement(): HTMLAudioElement | null {\n return this.audioPlayer?.nativeElement || null;\n }\n\n onErrorHandler() {\n this.hasAudioError = true;\n this.isLoading = false;\n if (!this.errorMessage) {\n this.errorMessage = 'Аудио-файл не найден по указанному идентификатору, возможно файл не существует или отсутствует на сервере.';\n }\n this._cdr.markForCheck();\n }\n\n removeAudioError() {\n this.hasAudioError = false;\n this.errorMessage = '';\n\n this._cdr.markForCheck();\n }\n\n setError(message: string) {\n this.hasAudioError = true;\n this.errorMessage = message;\n this.isLoading = false;\n\n this._cdr.markForCheck();\n }\n\n onFileIdChanged(fileId: string) {\n this.fileId = fileId;\n this.removeAudioError();\n this.checkAndLoadAudioFile();\n\n this._cdr.markForCheck();\n }\n\n checkAndLoadAudioFile() {\n if (!this.hasFileId()) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n this.errorMessage = '';\n\n const fileIdValue = this.fileId;\n\n this._cdr.markForCheck();\n\n this._commonFileInfoService.getInfo(fileIdValue)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe({\n next: (result) => {\n if (!result.fileInfo) {\n this.setError(`Файл с идентификатором ${fileIdValue} не найден на сервере.`);\n return;\n }\n\n if (result.fileInfo.type !== FileType.Audio) {\n this.setError(`Файл с идентификатором ${fileIdValue} должен быть c типом Audio, а получено ${result.fileInfo.type}.`);\n return;\n }\n\n this.audioSrc = result.fileInfo.downloadUrl;\n this.loadAudioFile();\n },\n error: (error) => {\n this.setError(`Ошибка при получении информации о файле: ${error.message || 'Неизвестная ошибка'}`);\n }\n });\n }\n\n loadAudioFile() {\n if (!this.hasFileId() || !this.audioSrc) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n\n const audio = this.audioElement;\n if (audio) {\n audio.load();\n }\n\n this._cdr.markForCheck();\n }\n\n onLoadedMetadata() {\n const audio = this.audioElement;\n if (audio) {\n this.duration = audio.duration;\n this.isLoading = false;\n\n this._cdr.markForCheck();\n }\n }\n\n onTimeUpdate() {\n const audio = this.audioElement;\n if (audio) {\n this.currentTime = audio.currentTime;\n this.duration = audio.duration;\n }\n\n this._cdr.markForCheck();\n }\n\n onEnded() {\n this.isPlaying = false;\n this.currentTime = 0;\n\n this._cdr.markForCheck();\n }\n\n onCanPlay() {\n this.isLoading = false;\n\n this._cdr.markForCheck();\n }\n\n togglePlayPause() {\n const audio = this.audioElement;\n if (!audio) {\n return;\n }\n\n if (this.isPlaying) {\n audio.pause();\n this.isPlaying = false;\n } else {\n audio.play().then(() => {\n this.isPlaying = true;\n this._cdr.markForCheck();\n }).catch(() => {\n this.hasAudioError = true;\n this._cdr.markForCheck();\n });\n }\n }\n\n restart() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = 0;\n this.currentTime = 0;\n\n this._cdr.markForCheck();\n }\n }\n\n rewind() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.max(0, audio.currentTime - 10);\n\n this._cdr.markForCheck();\n }\n }\n\n forward() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.min(audio.duration, audio.currentTime + 10);\n\n this._cdr.markForCheck();\n }\n }\n\n onVolumeChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value) / 100;\n this.volume = value;\n const audio = this.audioElement;\n if (audio) {\n audio.volume = value;\n }\n this.isMuted = value === 0;\n\n this._cdr.markForCheck();\n }\n\n toggleMute() {\n const audio = this.audioElement;\n if (!audio) {\n return;\n }\n\n if (this.isMuted) {\n audio.volume = this.volume;\n this.isMuted = false;\n } else {\n audio.volume = 0;\n this.isMuted = true;\n }\n\n this._cdr.markForCheck();\n }\n\n onSeekChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value);\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = (value / 100) * audio.duration;\n }\n this._cdr.markForCheck();\n }\n\n formatTime(seconds: number): string {\n return AudioMethods.formatTime(seconds);\n }\n\n getProgress(): number {\n return AudioMethods.calculateProgress(this.currentTime, this.duration);\n }\n\n loadFiles() {\n this.loading = true;\n const isPrivate = this._htmlSettingsService.get().usePrivateFiles;\n\n const searchParams = {\n count: 50,\n offSet: 0,\n fileName: null,\n fileTypes: [FileType.Audio],\n applicationId: isPrivate ? this._htmlSettingsService.get().applicationId : null,\n q: this.q\n };\n\n this._cdr.markForCheck();\n\n if (isPrivate) {\n this._privateFileService.search(searchParams)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.id, fileName: el.fileName }));\n this.loading = false;\n this._cdr.markForCheck();\n });\n } else {\n this._publicFileService.search(searchParams)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.fileId.toString(), fileName: el.fileName }));\n this.loading = false;\n this._cdr.markForCheck();\n });\n }\n }\n\n onSearchChanged(q: { term: string, items: object[] }) {\n this.q = q.term;\n this.loadFiles();\n\n this._cdr.markForCheck();\n }\n\n onFileSelected(fileId: string) {\n const selectedFile = this.files.find(f => f.fileId === fileId);\n if (selectedFile) {\n this.fileId = fileId;\n this.checkAndLoadAudioFile();\n\n this._cdr.markForCheck();\n }\n }\n\n onFilesUploaded(fileIds: string[] | number[]) {\n if (fileIds && fileIds.length > 0) {\n const firstFileId = fileIds[0];\n this.fileId = typeof firstFileId === 'number' ? firstFileId.toString() : firstFileId;\n this.loadFiles();\n this.checkAndLoadAudioFile();\n\n this._cdr.markForCheck();\n }\n }\n\n removeAudio() {\n this.fileId = '';\n this.title = '';\n this.audioSrc = '';\n this.isPlaying = false;\n this.currentTime = 0;\n this.duration = 0;\n this.removeAudioError();\n\n this._cdr.markForCheck();\n }\n\n ngOnInit(): void {\n if (this.audioPlayer?.nativeElement) {\n const audio = this.audioPlayer.nativeElement;\n audio.volume = this.volume;\n }\n\n if (this.hasFileId()) {\n this.checkAndLoadAudioFile();\n }\n\n this.loadFiles();\n\n this._cdr.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","<div class=\"audio-editor\">\n @if (hasAudioError) {\n <div class=\"error-block\">\n <mat-icon>error</mat-icon>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n @if (hasFileId() && !hasAudioError) {\n <div class=\"audio-player-container\">\n <audio\n #audioPlayer\n [src]=\"audioSrc\"\n (error)=\"onErrorHandler()\"\n (loadedmetadata)=\"onLoadedMetadata()\"\n (timeupdate)=\"onTimeUpdate()\"\n (ended)=\"onEnded()\"\n (canplay)=\"onCanPlay()\"\n preload=\"metadata\">\n </audio>\n\n @if (isLoading) {\n <div class=\"loading-indicator\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-fill\"></div>\n </div>\n <span>Загрузка аудио...</span>\n </div>\n }\n\n <div class=\"player-controls\">\n <div class=\"control-buttons\">\n <button (click)=\"restart()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay</mat-icon>\n </button>\n\n <button (click)=\"rewind()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay_10</mat-icon>\n </button>\n\n <button\n (click)=\"togglePlayPause()\"\n [disabled]=\"!hasFileId() || isLoading\"\n class=\"play-pause-btn\" mat-icon-button>\n <mat-icon>{{ isPlaying ? 'pause' : 'play_arrow' }}</mat-icon>\n </button>\n\n <button (click)=\"forward()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>forward_10</mat-icon>\n </button>\n\n @if (!presentOrEdit) {\n <button (click)=\"removeAudio()\" [disabled]=\"!hasFileId()\" color=\"warn\" mat-icon-button>\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n\n <div class=\"progress-section\">\n <span class=\"time-display\">{{ formatTime(currentTime) }}</span>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"getProgress()\"\n (input)=\"onSeekChange($event)\"\n [disabled]=\"!hasFileId() || duration === 0\"\n class=\"progress-slider\">\n\n <span class=\"time-display\">{{ formatTime(duration) }}</span>\n </div>\n\n <div class=\"volume-controls\">\n <button (click)=\"toggleMute()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>{{ isMuted ? 'volume_off' : 'volume_up' }}</mat-icon>\n </button>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"volume * 100\"\n (input)=\"onVolumeChange($event)\"\n [disabled]=\"!hasFileId()\"\n class=\"volume-slider\">\n </div>\n </div>\n </div>\n }\n\n @if (!hasFileId()) {\n <div class=\"no-file-message\">\n <mat-icon>music_off</mat-icon>\n <h5>Аудио-файл не выбран</h5>\n @if (!presentOrEdit) {\n <p>Нажмите кнопку редактирования для выбора или загрузки аудио-файла</p>\n }\n </div>\n }\n @if (!presentOrEdit) {\n <div class=\"edit-panel\">\n <div class=\"edit-header\">\n <h6>Настройки аудио-файла</h6>\n </div>\n\n <div class=\"mode-toggle\">\n <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n <mat-button-toggle value=\"search\">\n <mat-icon>search</mat-icon>\n Искать файл\n </mat-button-toggle>\n <mat-button-toggle value=\"edit\">\n <mat-icon>settings</mat-icon>\n Указать по ID\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n @if (searchOrEdit === 'search') {\n <div class=\"file-selection\">\n <div class=\"existing-files\">\n <h6>Выбрать из существующих файлов:</h6>\n <ng-select\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileSelected($event)\"\n [items]=\"files\"\n bindLabel=\"fileName\"\n bindValue=\"fileId\"\n (search)=\"onSearchChanged($event)\"\n [loading]=\"loading\"\n [loadingText]=\"'Загружаю файлы'\"\n placeholder=\"Выберите аудио-файл\"\n [clearable]=\"true\">\n <ng-template ng-option-tmp let-item=\"item\">\n <div class=\"file-option\">\n <mat-icon>audiotrack</mat-icon>\n <span>{{ item.fileName }}</span>\n <small>ID: {{ item.fileId }}</small>\n </div>\n </ng-template>\n </ng-select>\n </div>\n\n <div class=\"title-input\">\n <mat-form-field class=\"w-100\">\n <mat-label>Название аудио-файла</mat-label>\n <input\n matInput\n placeholder=\"Введите название аудио-файла\"\n autocomplete=\"off\"\n [(ngModel)]=\"title\">\n </mat-form-field>\n </div>\n\n <div class=\"upload-section\">\n <h6>Загрузить новый файл:</h6>\n <croco-app-upload-files-btn\n extAccepts=\"audio/*\"\n [isMultiple]=\"false\"\n btnText=\"Загрузить аудио-файл\"\n (onPublicFilesUploaded)=\"onFilesUploaded($event.fileIds)\"\n (onPrivateFilesUploaded)=\"onFilesUploaded($event.fileIds)\">\n </croco-app-upload-files-btn>\n </div>\n </div>\n } @else if (searchOrEdit === 'edit') {\n <div class=\"manual-input\">\n <mat-form-field class=\"w-100\">\n <mat-label>Идентификатор файла</mat-label>\n <input\n matInput\n placeholder=\"Введите ID аудио-файла\"\n autocomplete=\"off\"\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileIdChanged($event)\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Название аудио-файла</mat-label>\n <input\n matInput\n placeholder=\"Введите название аудио-файла\"\n autocomplete=\"off\"\n [(ngModel)]=\"title\">\n </mat-form-field>\n </div>\n }\n </div>\n }\n</div>\n","export const CrocoHtmlOptionsToken = \"croco-html-options\";\n","import {\n Component,\n Inject,\n Input,\n OnInit,\n OnDestroy,\n ViewChild,\n ElementRef,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { AudioMethods } from '../../../extensions/AudioMethods';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MatIcon } from '@angular/material/icon';\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { MatIconButton } from \"@angular/material/button\";\nimport { CommonFileInfoQueryService } from '../../../services/CommonFileInfoQueryService';\nimport { FileType } from '../../../services/file-models';\n\n@Component({\n selector: 'croco-html-audio-player-tag-view',\n templateUrl: './audio-player-tag-view.component.html',\n styleUrls: ['./audio-player-tag-view.component.scss'],\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton\n ]\n})\nexport class AudioPlayerTagViewComponent implements OnInit, OnDestroy, OnChanges {\n\n hasAudioError = false;\n errorMessage = '';\n isPlaying = false;\n isLoading = false;\n currentTime = 0;\n duration = 0;\n volume = 1;\n isMuted = false;\n audioSrc = '';\n\n private unsubscribe = new Subject<void>();\n\n @ViewChild('audioPlayer', { static: false })\n audioPlayer: ElementRef<HTMLAudioElement>;\n\n @Input({ required: true })\n data: InterfaceBlock;\n\n constructor(\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions,\n private readonly _commonFileInfoService: CommonFileInfoQueryService,\n ) { }\n\n get fileId(): string {\n return this.data.data.fileId;\n }\n\n get title(): string {\n return this.data.data.title || 'Аудио-файл';\n }\n\n private get audioElement(): HTMLAudioElement | null {\n return this.audioPlayer?.nativeElement || null;\n }\n\n hasFileId() {\n return this.fileId && this.fileId !== '';\n }\n\n onErrorHandler() {\n this.hasAudioError = true;\n this.isLoading = false;\n if (!this.errorMessage) {\n this.errorMessage = 'Аудио-файл не найден по указанному идентификатору.';\n }\n }\n\n setError(message: string) {\n this.hasAudioError = true;\n this.errorMessage = message;\n this.isLoading = false;\n }\n\n onLoadedMetadata() {\n const audio = this.audioElement;\n if (audio) {\n this.duration = audio.duration;\n this.isLoading = false;\n }\n }\n\n onTimeUpdate() {\n const audio = this.audioElement;\n if (audio) {\n this.currentTime = audio.currentTime;\n this.duration = audio.duration;\n }\n }\n\n onEnded() {\n this.isPlaying = false;\n this.currentTime = 0;\n }\n\n onCanPlay() {\n this.isLoading = false;\n }\n\n togglePlayPause() {\n const audio = this.audioElement;\n if (!audio) return;\n\n if (this.isPlaying) {\n audio.pause();\n this.isPlaying = false;\n } else {\n audio.play().then(() => {\n this.isPlaying = true;\n }).catch(() => {\n this.hasAudioError = true;\n });\n }\n }\n\n restart() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = 0;\n this.currentTime = 0;\n }\n }\n\n rewind() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.max(0, audio.currentTime - 10);\n }\n }\n\n forward() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.min(audio.duration, audio.currentTime + 10);\n }\n }\n\n onVolumeChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value) / 100;\n this.volume = value;\n const audio = this.audioElement;\n if (audio) {\n audio.volume = value;\n }\n this.isMuted = value === 0;\n }\n\n toggleMute() {\n const audio = this.audioElement;\n if (!audio) return;\n\n if (this.isMuted) {\n audio.volume = this.volume;\n this.isMuted = false;\n } else {\n audio.volume = 0;\n this.isMuted = true;\n }\n }\n\n onSeekChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value);\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = (value / 100) * audio.duration;\n }\n }\n\n formatTime(seconds: number): string {\n return AudioMethods.formatTime(seconds);\n }\n\n getProgress(): number {\n return AudioMethods.calculateProgress(this.currentTime, this.duration);\n }\n\n ngOnInit(): void {\n if (this.audioPlayer?.nativeElement) {\n const audio = this.audioElement;\n if (audio) {\n audio.volume = this.volume;\n }\n }\n\n if (this.hasFileId()) {\n this.checkAndLoadAudioFile();\n }\n }\n\n checkAndLoadAudioFile() {\n if (!this.hasFileId()) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n this.errorMessage = '';\n\n const fileIdValue = this.fileId;\n\n this._commonFileInfoService.getInfo(fileIdValue)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe({\n next: (result) => {\n if (!result.fileInfo) {\n this.setError(`Файл с идентификатором ${fileIdValue} не найден на сервере.`);\n return;\n }\n\n if (result.fileInfo.type !== FileType.Audio) {\n this.setError(`Файл с идентификатором ${fileIdValue} должен быть c типом Audio, а получено ${result.fileInfo.type}.`);\n return;\n }\n\n this.audioSrc = result.fileInfo.downloadUrl;\n this.loadAudioFile();\n },\n error: (error) => {\n this.setError(`Ошибка при получении информации о файле: ${error.message || 'Неизвестная ошибка'}`);\n }\n });\n }\n\n loadAudioFile() {\n if (!this.hasFileId() || !this.audioSrc) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n\n const audio = this.audioElement;\n if (audio) {\n audio.load();\n }\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data'] && !changes['data'].firstChange) {\n if (this.hasFileId()) {\n this.checkAndLoadAudioFile();\n }\n }\n }\n}\n","<div class=\"audio-view\">\n @if (hasAudioError) {\n <div class=\"error-block\">\n <mat-icon>error</mat-icon>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n @if (hasFileId() && !hasAudioError) {\n <div class=\"audio-player-container\">\n <audio\n #audioPlayer\n [src]=\"audioSrc\"\n (error)=\"onErrorHandler()\"\n (loadedmetadata)=\"onLoadedMetadata()\"\n (timeupdate)=\"onTimeUpdate()\"\n (ended)=\"onEnded()\"\n (canplay)=\"onCanPlay()\"\n preload=\"metadata\">\n </audio>\n\n @if (isLoading) {\n <div class=\"loading-indicator\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-fill\"></div>\n </div>\n <span>Загрузка аудио...</span>\n </div>\n }\n\n <div class=\"file-info\">\n <mat-icon>audiotrack</mat-icon>\n <span class=\"file-name\">{{ title }}</span>\n </div>\n\n <div class=\"player-controls\">\n <div class=\"control-buttons\">\n <button (click)=\"restart()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay</mat-icon>\n </button>\n\n <button (click)=\"rewind()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay_10</mat-icon>\n </button>\n\n <button\n (click)=\"togglePlayPause()\"\n [disabled]=\"!hasFileId() || isLoading\"\n class=\"play-pause-btn\" mat-icon-button>\n <mat-icon>{{ isPlaying ? 'pause' : 'play_arrow' }}</mat-icon>\n </button>\n\n <button (click)=\"forward()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>forward_10</mat-icon>\n </button>\n </div>\n\n <div class=\"progress-section\">\n <span class=\"time-display\">{{ formatTime(currentTime) }}</span>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"getProgress()\"\n (input)=\"onSeekChange($event)\"\n [disabled]=\"!hasFileId() || duration === 0\"\n class=\"progress-slider\">\n\n <span class=\"time-display\">{{ formatTime(duration) }}</span>\n </div>\n\n <div class=\"volume-controls\">\n <button (click)=\"toggleMute()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>{{ isMuted ? 'volume_off' : 'volume_up' }}</mat-icon>\n </button>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"volume * 100\"\n (input)=\"onVolumeChange($event)\"\n [disabled]=\"!hasFileId()\"\n class=\"volume-slider\">\n </div>\n </div>\n </div>\n }\n\n <!-- Сообщение об отсутствии файла -->\n @if (!hasFileId()) {\n <div class=\"no-file-message\">\n <mat-icon>music_off</mat-icon>\n <h5>Аудио-файл не выбран</h5>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\n@Component({\n selector: 'youtube-video-player',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './youtube-video-player.component.html',\n styleUrl: '../external-video-editor.component.scss'\n})\nexport class YoutubeVideoPlayerComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() set link(link: string) {\n this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(link);\n this._cdr.markForCheck();\n }\n\n public safeUrl: SafeResourceUrl;\n\n constructor(private sanitizer: DomSanitizer) { }\n}\n","<div class=\"code-view video-player use-responsive\">\n <iframe\n [src]=\"safeUrl\"\n title=\"YouTube video player\"\n frameborder=\"0\"\n allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\n@Component({\n selector: 'vk-video-player',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './vk-video-player.component.html',\n styleUrl: '../external-video-editor.component.scss'\n})\nexport class VkVideoPlayerComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() set link(link: string) {\n this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(link);\n this._cdr.markForCheck();\n }\n\n public safeUrl: SafeResourceUrl;\n\n constructor(private sanitizer: DomSanitizer) { }\n}\n","<div class=\"code-view video-player use-responsive\">\n <iframe\n [src]=\"safeUrl\"\n allow=\"autoplay; encrypted-media; fullscreen; picture-in-picture;\"\n frameborder=\"0\"\n allowfullscreen></iframe>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\n\n@Component({\n selector: 'code-video',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './code-video.component.html',\n styleUrl: '../external-video-editor.component.scss'\n})\nexport class CodeVideoComponent implements OnChanges {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() code = \"\";\n @Input() set _useResponsiveWrapper(useResponsiveWrapper: boolean) {\n this.useResponsiveWrapper = useResponsiveWrapper;\n }\n\n useResponsiveWrapper = false\n\n safeHtml: SafeHtml;\n\n constructor(private readonly _sanitizer: DomSanitizer) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['code'] && changes['code'].currentValue !== changes['code'].previousValue) {\n this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.code);\n this._cdr.markForCheck();\n }\n }\n}\n","@if (code) {\n <div class=\"code-view video-player\" [class.use-responsive]=\"useResponsiveWrapper\" [innerHTML]=\"safeHtml\"></div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n} from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { ExternalVideoSupportedTypes, ExternalVideoTagData } from '../../../extensions';\nimport { YoutubeVideoPlayerComponent } from '../../editor/external-video-editor/youtube-video-player/youtube-video-player.component';\nimport { VkVideoPlayerComponent } from '../../editor/external-video-editor/vk-video-player/vk-video-player.component';\nimport { CodeVideoComponent } from \"../../editor/external-video-editor/embedded-video/code-video.component\";\n\n@Component({\n selector: 'croco-html-xml-tag-external-video',\n templateUrl: './xml-tag-external-video.component.html',\n styleUrls: ['./xml-tag-external-video.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [VkVideoPlayerComponent, YoutubeVideoPlayerComponent, CodeVideoComponent],\n})\nexport class XmlTagExternalVideoComponent {\n @Input() public set data(value: InterfaceBlock) {\n this.tagData = value.data;\n };\n\n @Input() public set tagData(value: ExternalVideoTagData) {\n this._block = {\n type: value.type,\n link: value.link,\n useResponsiveWrapper: value.useResponsiveWrapper,\n innerHtml: value.innerHtml\n }\n };\n\n protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n\n public _block: ExternalVideoTagData = {\n type: '',\n link: '',\n innerHtml: '',\n useResponsiveWrapper: false\n }\n}\n","@switch (_block.type) {\n @case (ExternalVideoSupportedTypes.VkVideo) {\n <vk-video-player [link]=\"_block.link\"></vk-video-player>\n }\n @case (ExternalVideoSupportedTypes.Youtube) {\n <youtube-video-player [link]=\"_block.link\"></youtube-video-player>\n }\n @case (ExternalVideoSupportedTypes.Code) {\n <code-video [code]=\"_block.innerHtml\" [_useResponsiveWrapper]=\"_block.useResponsiveWrapper\"></code-video>\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\n\n@Component({\n selector: 'croco-html-xml-tag-header-inner-text-view',\n templateUrl: './xml-tag-header-inner-text-view.component.html',\n standalone: true\n})\nexport class XmlTagHeaderInnerTextViewComponent {\n\n @Input({ required: true })\n item: GenericTextTag;\n}\n","@if (item.tagName === 'h1') {\n <h1\n [innerHtml]=\"item.data.html\">\n </h1>\n}\n@if (item.tagName === 'h2') {\n <h2\n [innerHtml]=\"item.data.html\">\n </h2>\n}\n@if (item.tagName === 'h3') {\n <h3\n [innerHtml]=\"item.data.html\">\n </h3>\n}\n@if (item.tagName === 'h4') {\n <h4\n [innerHtml]=\"item.data.html\">\n </h4>\n}\n@if (item.tagName === 'h5') {\n <h5\n [innerHtml]=\"item.data.html\">\n </h5>\n}\n@if (item.tagName === 'h6') {\n <h6\n [innerHtml]=\"item.data.html\">\n </h6>\n}","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\nimport { XmlTagHeaderInnerTextViewComponent } from '../xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component';\n\n@Component({\n selector: 'croco-html-xml-tag-header-text-view',\n templateUrl: './xml-tag-header-text-view.component.html',\n standalone: true,\n imports: [XmlTagHeaderInnerTextViewComponent]\n})\nexport class XmlTagHeaderTextViewComponent {\n\n @Input({ required: true })\n item: GenericTextTag;\n}\n","@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'left') {\n<div style=\"text-align: left;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n </croco-html-xml-tag-header-inner-text-view>\n }\n</div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'right') {\n<div style=\"text-align: right;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n </croco-html-xml-tag-header-inner-text-view>\n }\n</div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'center') {\n<div style=\"text-align: center;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n </croco-html-xml-tag-header-inner-text-view>\n }\n</div>\n}\n\n@if (!item.data.validationResult.isSucceeded) {\n<div class=\"red\" style=\"margin-top: 10px;\">\n <h4>Допущена ошибка в теге &lt;text&gt;</h4>\n <span>\n {{item.data.validationResult.message}}\n </span>\n</div>\n}","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'croco-html-xml-tag-html-view',\n templateUrl: './xml-tag-html-view.component.html',\n standalone: true\n})\nexport class XmlTagHtmlViewComponent {\n\n @Input()\n html: string = \"\";\n}\n","<div class=\"col table-container\" [innerHTML]=\"html\">\n</div>\n","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\n\n@Component({\n selector: 'croco-html-xml-tag-text-view',\n templateUrl: './xml-tag-text-view.component.html',\n standalone: true\n})\nexport class XmlTagTextViewComponent {\n\n @Input({ required: true })\n item: GenericTextTag;\n}","@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'left') {\n <div style=\"text-align: left;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <span [innerHtml]=\"item.data.html\"></span>\n }\n </div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'right') {\n <div style=\"text-align: right;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <span [innerHtml]=\"item.data.html\"></span>\n }\n </div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'center') {\n <div style=\"text-align: center;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <span [innerHtml]=\"item.data.html\"></span>\n }\n </div>\n}\n\n@if (!item.data.validationResult.isSucceeded) {\n <div class=\"red\" style=\"margin-top: 10px;\" >\n <h4>Допущена ошибка в теге &lt;text&gt;</h4>\n <span>\n {{item.data.validationResult.message}}\n </span>\n </div>\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BlobCreateService {\n\n constructor(private readonly _http: HttpClient) { }\n\n getBlob(link: string): Observable<Blob> {\n return this._http.get(link, { responseType: 'blob' })\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { BlobCreateService } from \"../../../services/blob-create.service\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { DownloadButtonTagData } from '../../../tag-services/DownloadButtonTagService';\n\n@Component({\n selector: 'croco-html-xml-tag-download-file-button',\n standalone: true,\n imports: [\n MatIcon\n ],\n templateUrl: './xml-tag-download-file-button.component.html',\n styleUrl: './xml-tag-download-file-button.component.scss'\n})\nexport class XmlTagDownloadFileButtonComponent {\n @Input() public set data(value: InterfaceBlock) {\n this.tagData = value.data;\n };\n\n @Input() public set tagData(value: DownloadButtonTagData) {\n this._block = {\n title: value.title,\n link: value.link\n }\n };\n\n constructor(private readonly _blobCreateService: BlobCreateService) { }\n\n public _block: DownloadButtonTagData = {\n title: '',\n link: ''\n }\n\n downloadFile() {\n this._blobCreateService.getBlob(this._block.link).subscribe(\n blob => {\n const link = document.createElement('a');\n const objectUrl = URL.createObjectURL(blob);\n link.href = objectUrl;\n\n const regex = /[^/]+$/;\n link.download = this._block.link.match(regex)[0] || 'Без названия';\n link.click();\n URL.revokeObjectURL(objectUrl);\n }\n );\n }\n}\n","<span\n class=\"download-file-button\"\n (click)=\"downloadFile()\">\n <mat-icon> save</mat-icon>\n {{this._block.title}}\n</span>\n","import { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\n\n@Component({\n selector: 'croco-html-error-banner',\n standalone: true,\n imports: [\n MatCardModule,\n MatButtonModule\n ],\n templateUrl: './error-banner.component.html',\n styleUrl: './error-banner.component.css'\n})\nexport class ErrorBannerComponent {\n @Input({ required: true }) \n message: string = \"\";\n}\n","@if (message) {\n <mat-card class=\"red\">\n <mat-card-content>\n <p>\n {{ message }}\n </p>\n </mat-card-content>\n <mat-card-actions>\n <button mat-button (click)=\"message = null\">ЗАКРЫТЬ</button>\n </mat-card-actions>\n </mat-card>\n }\n ","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScreenWidthService {\n\n private screenWidth = new BehaviorSubject<number>(window.innerWidth);\n\n constructor() {\n window.addEventListener('resize', this.onResize.bind(this));\n }\n\n private onResize(event: Event) {\n this.screenWidth.next(window.innerWidth);\n }\n\n getScreenWidth(): Observable<number> {\n return this.screenWidth.asObservable()\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { ImageMethods } from '../../../extensions';\nimport { ScreenWidthService } from \"../../../services/screen-width.service\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { NgStyle } from \"@angular/common\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { FileImageTagData, IImageMediaRequest } from '../../../models';\n\n@Component({\n selector: 'croco-html-file-image-tag-view',\n templateUrl: './file-image-tag-view.component.html',\n imports: [\n NgStyle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class FileImageTagViewComponent implements OnInit, OnDestroy {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() set item(item: InterfaceBlock) {\n let data = item.data as FileImageTagData;\n this.imageData = data;\n this.imageSrc = data.src;\n this.requests = this.getMediaRequests(data.screenMediaRequest);\n\n this._cdr.markForCheck();\n }\n\n @Input({ required: true })\n isEditor = false\n\n imageSrc = \"\";\n imageData: FileImageTagData | null = null;\n requests: IImageMediaRequest[] = []\n\n private unsubscribe = new Subject<void>();\n public imageMaxHeight: number = null;\n public imageMaxWidth: number = null;\n\n constructor(private readonly screenWidthService: ScreenWidthService,\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n ) { }\n\n getMediaRequests(screenMediaRequest: string) : IImageMediaRequest[] {\n let result = ImageMethods.mediaRequestStringToArrayParser(screenMediaRequest);\n\n if (result.length === 0) {\n return this._options.imageOptions.globalMediaRequests ?? [];\n }\n\n return result;\n }\n\n ngOnInit(): void {\n this.screenWidthService.getScreenWidth()\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(screenWidth => {\n let restrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);\n\n this.imageMaxHeight = restrictions.maxHeight;\n this.imageMaxWidth = restrictions.maxWidth;\n\n if (this._options.imageOptions.visualEditorOptions?.previewModeImageMaxHeight && this.isEditor) {\n const visualMaxHeight = this._options.imageOptions.visualEditorOptions.previewModeImageMaxHeight;\n if (this.imageMaxHeight === null || this.imageMaxHeight === undefined || visualMaxHeight < this.imageMaxHeight) {\n this.imageMaxHeight = visualMaxHeight;\n }\n }\n\n this._cdr.markForCheck();\n })\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n onImageClick(): void {\n if (this.imageData && this._options.imageOptions.onImageClick) {\n this._options.imageOptions.onImageClick(this.imageData);\n }\n }\n}\n","<img\n [ngStyle]=\"{ 'max-height': imageMaxHeight ? imageMaxHeight + 'px' : '100%', 'max-width': imageMaxWidth ? imageMaxWidth + 'px' : '100%', }\"\n class=\"mx-auto d-block img-fluid\"\n [src]=\"imageSrc\"\n alt=\"Изображение не загружено\"\n (click)=\"onImageClick()\"\n style=\"cursor: pointer;\"\n/>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Router } from \"@angular/router\";\nimport { HtmlRawTagData } from '../../../tag-services';\nimport { InterfaceBlock } from '../../../models';\nimport { HtmlPageDataController } from '../../../services';\n\n\n@Component({\n selector: 'croco-html-raw-view',\n templateUrl: './html-raw-view.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HtmlRawViewComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef)\n\n @Input({ required: true }) set data(item: InterfaceBlock) {\n const data = item.data as HtmlRawTagData;\n\n this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(data.innerHTML);\n this._cdr.markForCheck();\n }\n\n public _dataController: HtmlPageDataController;\n\n @Input({ required: true }) set dataController(controller: HtmlPageDataController) {\n this._dataController = controller;\n this._cdr.markForCheck();\n }\n\n safeHtml: SafeHtml | null = null;\n\n constructor(\n private readonly _sanitizer: DomSanitizer, \n private readonly router: Router) { }\n\n handleLink(event: MouseEvent) {\n const target = (event.target as HTMLElement).closest('a');\n if (!target) {\n return;\n }\n\n const href = target.getAttribute('href');\n if (!href) {\n return;\n }\n\n const targetAttr = target.getAttribute('target');\n\n if (targetAttr === '_blank') {\n return;\n }\n\n const isExternal =\n href.startsWith('http://') ||\n href.startsWith('https://') ||\n href.startsWith('www.') ||\n href.match(/^[a-zA-Z]+:\\/\\//);\n\n if (isExternal) {\n return;\n }\n event.preventDefault();\n\n const path = href.startsWith('/') ? href : `/${href}`;\n\n this.router.navigate([path]);\n }\n\n}\n","@if (safeHtml) {\n <div [innerHTML]=\"safeHtml\" (click)=\"handleLink($event)\"></div>\n}\n","import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n/**\n * Сервис для обработки логики разметки\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HtmlViewController {\n\n onScriptCalled(script: string) {\n this.scriptCalled.next(script);\n }\n\n scriptCalled = new Subject<string>();\n}\n","import { Component, Input } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { MatButton } from \"@angular/material/button\";\nimport { HtmlViewController } from '../../../services/HtmlViewController';\nimport { ButtonTagData } from '../../../tag-services/ButtonTagService';\n\n@Component({\n selector: 'croco-html-xml-tag-button',\n standalone: true,\n imports: [\n MatButton\n ],\n templateUrl: './xml-tag-button.component.html',\n styleUrl: './xml-tag-button.component.css'\n})\nexport class XmlTagButtonComponent {\n @Input() public set data(value: InterfaceBlock) {\n this.tagData = value.data;\n };\n\n @Input() public set tagData(value: ButtonTagData) {\n this._block = {\n text: value.text,\n type: value.type,\n click: value.click\n }\n };\n\n constructor(private readonly _controller: HtmlViewController) {\n }\n\n public _block: ButtonTagData = {\n text: '',\n type: '',\n click: ''\n };\n\n clickHandler() {\n this._controller.onScriptCalled(this._block.click);\n }\n}\n","<button mat-stroked-button color=\"primary\" (click)=\"clickHandler()\">{{_block.text}}</button>\n","import {\n Component,\n ComponentRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { CrocoHtmlOptionsToken } from \"../../../consts\";\nimport { CrocoHtmlOptions } from \"../../../options\";\nimport { CustomWidgetTagData } from '../../../tag-services/CustomWidgetTagService';\n\n@Component({\n selector: 'croco-html-xml-tag-custom-widget',\n templateUrl: './xml-tag-custom-widget.component.html',\n styleUrls: ['./xml-tag-custom-widget.component.css'],\n imports: [MatTooltip],\n standalone: true\n})\nexport class XmlTagCustomWidgetComponent implements OnInit, OnDestroy {\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n @Input()\n public set tagData(value: CustomWidgetTagData) {\n if (value) {\n this._tagData = value;\n this.tooltipData = `data-id:${value.dataId}; widget-id: ${value.widgetId}`;\n if (this.dynamicContainerRef?.instance) {\n this.dynamicContainerRef.instance.tagData = value;\n }\n }\n };\n\n public get tagData(): CustomWidgetTagData {\n return this._tagData;\n }\n\n public _tagData: CustomWidgetTagData;\n public tooltipData: string = \"\";\n\n constructor(\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n ) {\n }\n\n ngOnInit(): void {\n if (this._options.customWidgetRendererComponent) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(this._options.customWidgetRendererComponent);\n this.dynamicContainerRef.setInput(\"tagData\", this.tagData);\n }\n }\n\n ngOnDestroy(): void {\n this.dynamicContainerRef.destroy();\n }\n}\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <div [matTooltip]=\"tooltipData\">\n Кастомный виджет. тип виджета: {{ tagData?.type }}\n </div>\n }\n</ng-container>\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatInputModule } from \"@angular/material/input\";\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { LinkTagAttrs, LinkTagData } from '../../../tag-services';\nimport { HtmlBodyTag, TagEditorService } from '../../../models';\n\n@Component({\n selector: 'croco-html-file-link-editor',\n imports: [MatInputModule, FormsModule, MatFormFieldModule],\n templateUrl: './link-editor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinkEditorComponent {\n\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _cdr = inject(ChangeDetectorRef);\n\n linkData: LinkTagData = {\n url: '',\n title: 'Текст ссылки',\n type: null,\n fileId: null\n }\n\n public isValid = true;\n public errorMessage = \"\";\n\n public _data: HtmlBodyTag;\n public _tagService: TagEditorService;\n\n public presentOrEdit = true;\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(tag => {\n this._data = tag;\n\n this.linkData.url = this._data.attributes[LinkTagAttrs.Url];\n this.linkData.title = this._data.attributes[LinkTagAttrs.Title];\n this.linkData.type = this._data.attributes[LinkTagAttrs.Type];\n\n this.validate();\n this._cdr.markForCheck();\n })\n\n this._tagService.presentOrEdit$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n })\n }\n\n validate() {\n if (!this.linkData.url || this.linkData.url.length === 0){\n this.errorMessage = \"Ссылка не указана\";\n this.isValid = false;\n return;\n }\n\n if (!this.linkData.title || this.linkData.title.length === 0){\n this.errorMessage = \"Название ссылки не указано\";\n this.isValid = false;\n return;\n }\n\n this.isValid = true;\n }\n\n saveTag() {\n\n const attrs = {\n [LinkTagAttrs.Url]: this.linkData.url,\n [LinkTagAttrs.Title]: this.linkData.title,\n [LinkTagAttrs.Type]: this.linkData.type,\n [LinkTagAttrs.FileId]: this.linkData.fileId,\n };\n\n this._data.attributes = attrs;\n this._tagService.tag$.next(this._data);\n }\n}\n","@if (presentOrEdit) {\n\n @if (isValid){\n <div>\n <a target=\"_blank\" [attr.href]=\"linkData.url\">{{linkData.title}}</a>\n </div>\n }\n @else {\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n }\n}\n@else {\n<div>\n <mat-form-field class=\"w-100\">\n <mat-label>Название</mat-label>\n <input type=\"text\" matInput [(ngModel)]=\"linkData.title\" (ngModelChange)=\"saveTag()\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Ссылка</mat-label>\n <input type=\"text\" matInput [(ngModel)]=\"linkData.url\" (ngModelChange)=\"saveTag()\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Тип ссылки</mat-label>\n <input type=\"text\" matInput [(ngModel)]=\"linkData.type\" (ngModelChange)=\"saveTag()\" />\n </mat-form-field>\n</div>\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input } from '@angular/core';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport { TagEditorService } from '../../../models';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'croco-html-html-raw-editor',\n templateUrl: './html-raw-editor.component.html',\n styleUrls: ['../external-video-editor/external-video-editor.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n FormsModule\n ]\n})\nexport class HtmlRawEditorComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _sanitizer = inject(DomSanitizer);\n\n\n public _data: HtmlBodyTag;\n public _tagService: TagEditorService;\n\n public presentOrEdit = true;\n public safeHtml: SafeHtml | null = null;\n\n\n _tag: HtmlBodyTag;\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(tag => {\n this._tag = tag;\n\n this.onHtmlChanged();\n });\n\n this._tagService.presentOrEdit$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n })\n }\n\n onHtmlChanged() {\n this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this._tag.innerHtml);\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div [innerHTML]=\"safeHtml\">\n </div>\n}\n@else {\n <div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Внутренняя разметка тега\n </mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"Внутренняя разметка тега\"\n [(ngModel)]=\"_tag.innerHtml\"\n (ngModelChange)=\"onHtmlChanged()\"\n ></textarea>\n </mat-form-field>\n </div>\n </div>\n}\n\n","import { ExternalVideoTagDataConsts, FileImageTagDataConsts, FileAudioTagDataConsts } from '../../../extensions';\nimport { InterfaceBlock } from '../../../models';\nimport { HtmlBodyTag, TagItem } from '../../../models/models';\nimport { CrocoHtmlOptions, ITagEditorViewRender, ITagViewViewRender } from '../../../options';\nimport { DownloadButtonTagDataConsts, HtmlRawTagDataConsts } from '../../../tag-services';\nimport { ButtonTagDataConsts } from '../../../tag-services/ButtonTagService';\nimport { LinkTagConsts } from '../../../tag-services/LinkTagService';\nimport { HtmlRawViewComponent } from '../../xml-tags';\nimport { LinkEditorComponent } from '../link-editor/link-editor.component';\nimport { HtmlRawEditorComponent } from '../html-raw-editor/html-raw-editor.component';\n\nexport class DefaultTags {\n\n static textTags: TagItem[] = [\n { tag: 'text', displayValue: 'T', isCustom: false },\n { tag: 'h1', displayValue: 'H1', isCustom: false },\n { tag: 'h2', displayValue: 'H2', isCustom: false },\n { tag: 'h3', displayValue: 'H3', isCustom: false },\n { tag: 'h4', displayValue: 'H4', isCustom: false },\n { tag: 'h5', displayValue: 'H5', isCustom: false },\n { tag: 'h6', displayValue: 'H6', isCustom: false },\n ]\n\n static tags: TagItem[] = [\n { tag: FileImageTagDataConsts.TagName, displayValue: 'Изображение', isCustom: false },\n { tag: FileAudioTagDataConsts.TagName, displayValue: 'Аудио', isCustom: false },\n { tag: ExternalVideoTagDataConsts.TagName, displayValue: 'Видео', isCustom: false },\n { tag: LinkTagConsts.TagName, displayValue: 'Ссылка', isCustom: false },\n { tag: DownloadButtonTagDataConsts.TagName, displayValue: 'Кнопка для скачивания', isCustom: false },\n { tag: ButtonTagDataConsts.TagName, displayValue: 'Кнопка', isCustom: false },\n { tag: HtmlRawTagDataConsts.TagName, displayValue: 'Разметка', isCustom: false },\n { tag: 'text', displayValue: 'Текст', isCustom: false },\n ];\n\n static tagRenderers: { [tagName: string]: ITagViewViewRender } = {\n [HtmlRawTagDataConsts.TagName]: { viewComponent: HtmlRawViewComponent }\n }\n\n static tagEditors: { [tagName: string]: ITagEditorViewRender } = {\n [HtmlRawTagDataConsts.TagName]: { editorComponent: HtmlRawEditorComponent },\n [LinkTagConsts.TagName]: { editorComponent: LinkEditorComponent }\n }\n\n static isViewDefined(item: InterfaceBlock, options: CrocoHtmlOptions) {\n\n const tagName = item.tagName;\n\n if (options.definedViewRenderers.hasOwnProperty(tagName)) {\n return true;\n }\n\n return DefaultTags.tagRenderers.hasOwnProperty(item.tagName);\n }\n\n static isEditorDefined(tag: HtmlBodyTag, options: CrocoHtmlOptions) {\n \n if (tag === null || tag === undefined) {\n return false;\n }\n\n const tagName = tag.tagDescription.tag;\n\n if (options.definedEditorViewRenderers.hasOwnProperty(tagName)) {\n return true;\n }\n\n if (DefaultTags.tagEditors.hasOwnProperty(tagName)){\n return true;\n }\n \n return false;\n }\n\n static getEditor(tag: HtmlBodyTag, options: CrocoHtmlOptions) {\n const tagName = tag.tagDescription.tag;\n\n if (options.definedEditorViewRenderers.hasOwnProperty(tagName)) {\n return options.definedEditorViewRenderers[tagName].editorComponent;\n }\n\n if (DefaultTags.tagEditors.hasOwnProperty(tagName)){\n return DefaultTags.tagEditors[tagName].editorComponent;\n }\n\n return null;\n }\n\n static getTags(options: CrocoHtmlOptions): TagItem[] {\n\n if (options.editorCustomAddTagButtons) {\n return [...options.editorCustomAddTagButtons];\n }\n\n return [...DefaultTags.tags];\n }\n}\n","import { Component, ComponentRef, Inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { JsonPipe } from '@angular/common';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { HtmlPageDataController } from '../../../services';\nimport { DefaultTags } from '../../editor/visual-editor/DefaultTags';\n\n@Component({\n selector: 'croco-html-defined-custom-tag-view',\n imports: [JsonPipe],\n templateUrl: './defined-custom-tag-view.component.html',\n standalone: true\n})\nexport class DefinedCustomTagViewComponent implements OnInit, OnDestroy {\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n @Input({ required: true }) public set data(value: InterfaceBlock) {\n this._data = value;\n if(this.dynamicContainerRef) {\n this.dynamicContainerRef.setInput(\"data\", this._data);\n }\n };\n\n\n @Input({ required: true })\n dataController: HtmlPageDataController;\n\n public _data: InterfaceBlock;\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n getCustomComponent() {\n\n const tagName = this._data.tagName;\n\n if (this._options.definedViewRenderers.hasOwnProperty(tagName)) {\n return this._options.definedViewRenderers[tagName].viewComponent;\n }\n\n if (DefaultTags.tagRenderers.hasOwnProperty(tagName)) {\n return DefaultTags.tagRenderers[tagName].viewComponent;\n }\n\n return null;\n }\n\n ngOnInit(): void {\n\n var component = this.getCustomComponent();\n\n if (component) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n this.dynamicContainerRef.setInput(\"data\", this._data);\n this.dynamicContainerRef.setInput(\"dataController\", this.dataController);\n }\n }\n\n ngOnDestroy(): void {\n this.dynamicContainerRef.destroy();\n }\n}\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <div>\n <div>\n Название тега: {{data.tagName}}\n </div>\n <div>\n Данные:\n </div>\n <div>\n {{data.data | json}}\n </div>\n </div>\n }\n</ng-container>","/**\n * Сервис для прокидывания предрасчитанных данных для виджетов Html разметки.\n * Используется для оптимизации Http запросов за данными.\n */\nexport class HtmlPageDataController {\n\n public readonly _data = new Map<string, object>();\n\n /**\n * Получить данные.\n * @returns\n */\n get<T>(name: string): T | null {\n\n if (!this._data.has(name)) {\n return null;\n }\n\n return this._data.get(name) as T;\n }\n\n /**\n * Установить данные.\n * @param data\n */\n set(name: string, data: object) {\n this._data.set(name, data);\n }\n}\n","import { HtmlBodyTag } from \"../../models\";\nimport { IVisualEditorLogger } from \"./IVisualEditorLogger\";\n\n\nexport class NullVisualEditorLogger implements IVisualEditorLogger {\n\n onAdd(_: HtmlBodyTag[]): void {\n }\n onChange(_: HtmlBodyTag, _2: number): void {\n }\n\n onRemove(_: number): void {\n }\n}\n","import { HtmlBodyTag } from \"../../models\";\nimport { IVisualEditorLogger } from \"./IVisualEditorLogger\";\n\nexport class ConsoleVisualEditorLogger implements IVisualEditorLogger {\n onAdd(tags: HtmlBodyTag[]): void {\n const tagCopy = JSON.parse(JSON.stringify(tags));\n \n console.log(\"onAdd\", tagCopy);\n }\n\n onChange(tag: HtmlBodyTag, index: number): void {\n\n const tagCopy = JSON.parse(JSON.stringify(tag));\n\n console.log(\"onChange\", tagCopy, index);\n }\n\n onRemove(index: number): void {\n console.log(\"onRemove\", index);\n }\n}\n","import { Component, Inject, Input, ViewEncapsulation } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { TextTags } from '../../../extensions';\nimport { XmlTagDownloadFileButtonComponent } from '../xml-tag-download-file-button/xml-tag-download-file-button.component';\nimport { XmlTagExternalVideoComponent } from '../xml-tag-external-video/xml-tag-external-video.component';\nimport { ErrorBannerComponent } from '../../error-banner/error-banner.component';\nimport { XmlTagHtmlViewComponent } from '../xml-tag-html-view/xml-tag-html-view.component';\nimport { FileImageTagViewComponent } from '../file-image-tag-view/file-image-tag-view.component';\nimport { AudioPlayerTagViewComponent } from '../audio-player-tag-view/audio-player-tag-view.component';\nimport { XmlTagHeaderTextViewComponent } from '../xml-tag-header-text-view/xml-tag-header-text-view.component';\nimport { HtmlRawViewComponent } from '../html-raw-view/html-raw-view.component';\nimport { XmlTagTextViewComponent } from '../xml-tag-text-view/xml-tag-text-view.component';\nimport { XmlTagButtonComponent } from \"../xml-tag-custom-button/xml-tag-button.component\";\nimport { XmlTagCustomWidgetComponent } from \"../xml-tag-custom-widget/xml-tag-custom-widget.component\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { DefinedCustomTagViewComponent } from '../defined-custom-tag-view/defined-custom-tag-view.component';\nimport { HtmlPageDataController } from '../../../services';\nimport { DefaultTags } from '../../editor/visual-editor/DefaultTags';\n\n@Component({\n selector: 'croco-html-xml-tag-view',\n templateUrl: './xml-tag-view.component.html',\n styleUrls: ['./xml-tag-view.component.css'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n XmlTagTextViewComponent,\n HtmlRawViewComponent,\n XmlTagHeaderTextViewComponent,\n FileImageTagViewComponent,\n AudioPlayerTagViewComponent,\n XmlTagHtmlViewComponent,\n ErrorBannerComponent,\n XmlTagExternalVideoComponent,\n XmlTagDownloadFileButtonComponent,\n XmlTagButtonComponent,\n XmlTagCustomWidgetComponent,\n DefinedCustomTagViewComponent\n ],\n})\nexport class XmlTagViewComponent {\n\n @Input({ required: true })\n data: InterfaceBlock[] = [];\n\n @Input({ required: true })\n dataController: HtmlPageDataController = new HtmlPageDataController();\n\n @Input({ required: true })\n isEditor = false;\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n isHeaderTextTag(item: InterfaceBlock) {\n return TextTags.headerTextTags.includes(item.tagName);\n }\n\n isViewDefined(item: InterfaceBlock): boolean {\n return DefaultTags.isViewDefined(item, this._options);\n }\n\n isDefinedCustomTag(item: InterfaceBlock) {\n return this._options.definedCustomTags.hasOwnProperty(item.tagName);\n }\n}\n","<div>\n @for (item of data; track $index) {\n <div class=\"row\">\n\n @if (item.tagName === 'text') {\n <div>\n <croco-html-xml-tag-text-view [item]=\"item\"></croco-html-xml-tag-text-view>\n </div>\n }\n @else if (isHeaderTextTag(item)) {\n <div>\n <croco-html-xml-tag-header-text-view [item]=\"item\"></croco-html-xml-tag-header-text-view>\n </div>\n }\n @else if (item.tagName === 'file-image') {\n <div>\n <croco-html-file-image-tag-view [item]=\"item\" [isEditor]=\"isEditor\"></croco-html-file-image-tag-view>\n </div>\n }\n @else if (item.tagName === 'audio-player') {\n <div>\n <croco-html-audio-player-tag-view [data]=\"item\"></croco-html-audio-player-tag-view>\n </div>\n }\n @else if (item.tagName === 'custom-widget') {\n <div>\n <croco-html-xml-tag-custom-widget [tagData]=\"item.data\"></croco-html-xml-tag-custom-widget>\n </div>\n }\n @else if (item.tagName === 'table' && item.validationResult) {\n\n @if (item.validationResult.isSucceeded){\n <div class=\"table-container\">\n <croco-html-xml-tag-html-view [html]=\"item.data.bootstrapHtml\">\n </croco-html-xml-tag-html-view>\n </div>\n }\n @else {\n <croco-html-error-banner [message]=\"item.validationResult.message\">\n </croco-html-error-banner>\n }\n }\n @else if (item.tagName === 'external-video') {\n <div>\n <croco-html-xml-tag-external-video [data]=\"item\"></croco-html-xml-tag-external-video>\n </div>\n }\n @else if (item.tagName === 'download-file-button') {\n <div>\n <croco-html-xml-tag-download-file-button [data]=\"item\"></croco-html-xml-tag-download-file-button>\n </div>\n }\n @else if (item.tagName === 'button') {\n <div>\n <croco-html-xml-tag-button [data]=\"item\"></croco-html-xml-tag-button>\n </div>\n }\n @else if (item.tagName === 'unsupported-tag') {\n <div class=\"red\" style=\"margin-top: 10px;padding: 10px;\">\n <h4>Данный тег не поддерживается</h4>\n <span>\n {{item.data.tagString}}\n </span>\n </div>\n }\n @else if (isViewDefined(item)){\n <div>\n <croco-html-defined-custom-tag-view [data]=\"item\"\n [dataController]=\"dataController\"></croco-html-defined-custom-tag-view>\n </div>\n }\n @else if (isDefinedCustomTag(item)) {\n <div>\n <croco-html-defined-custom-tag-view [data]=\"item\"\n [dataController]=\"dataController\"></croco-html-defined-custom-tag-view>\n </div>\n }\n\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport {\n ExternalVideoTagData,\n ExternalVideoSupportedTypes,\n} from '../../../extensions';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { XmlTagExternalVideoComponent } from '../../xml-tags';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckbox } from \"@angular/material/checkbox\";\n\n@Component({\n selector: 'croco-html-external-video-editor',\n templateUrl: './external-video-editor.component.html',\n styleUrls: ['./external-video-editor.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n XmlTagExternalVideoComponent,\n MatCheckbox,\n ]\n})\nexport class ExternalVideoEditorComponent implements OnInit {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({required: true})\n tag: HtmlBodyTag;\n\n @Input({required: true})\n presentOrEdit = true;\n\n protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n\n tagData: ExternalVideoTagData = {\n link: '',\n innerHtml: '',\n type: ExternalVideoSupportedTypes.Youtube,\n useResponsiveWrapper: false,\n };\n\n linkText = '';\n\n ngOnInit(): void {\n const { link, type, useResponsiveWrapper } = this.tag.attributes as ExternalVideoTagData;\n\n this.tagData = {\n link,\n type,\n useResponsiveWrapper,\n innerHtml: this.tag.innerHtml\n }\n\n switch (this.tagData.type) {\n case ExternalVideoSupportedTypes.Youtube: {\n this.linkText = 'Ссылка на YouTube'\n break;\n }\n case ExternalVideoSupportedTypes.VkVideo: {\n this.linkText = 'Ссылка на Vk Video'\n break;\n }\n case ExternalVideoSupportedTypes.Code: {\n this.linkText = 'Встраиваемый код'\n break;\n }\n }\n\n this._cdr.markForCheck();\n }\n\n linkChanged() {\n if (this.tagData.link.includes('iframe')) {\n this.createLinkByIFrame()\n }\n\n const { innerHtml, ...tagData } = this.tagData;\n this.tag.attributes = tagData;\n this.tag.innerHtml = innerHtml;\n\n this._cdr.markForCheck();\n }\n\n onCheck(checked: boolean): void {\n this.tagData.useResponsiveWrapper = checked;\n this.linkChanged();\n }\n\n createLinkByIFrame() {\n const parser = new DOMParser();\n const document = parser.parseFromString(this.tagData.link, \"text/html\");\n const elem = document.body.children[0];\n const src = elem.getAttribute(\"src\");\n this.tagData.link = src;\n\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div style=\"word-break: break-all\">\n @switch (tagData.type) {\n @case (ExternalVideoSupportedTypes.VkVideo) {\n {{linkText}}: {{tagData.link}}\n }\n @case (ExternalVideoSupportedTypes.Youtube) {\n {{linkText}}: {{tagData.link}}\n }\n @case (ExternalVideoSupportedTypes.Code) {\n <div>\n Встраиваемый код плеера.\n </div>\n }\n }\n </div>\n <div style=\"height: 10px;\"></div>\n <croco-html-xml-tag-external-video [tagData]=\"tagData\"></croco-html-xml-tag-external-video>\n </div>\n}\n@else {\n @if(tagData.type !== ExternalVideoSupportedTypes.Code) {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n {{linkText}}\n </mat-label>\n <input matInput placeholder=\"{{linkText}}\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.link\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-label>\n {{linkText}}\n </mat-label>\n <mat-form-field class=\"w-100\">\n <mat-label>Разметка</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Текст\"\n #textArea\n [(ngModel)]=\"tagData.innerHtml\"\n (ngModelChange)=\"linkChanged()\"\n ></textarea>\n </mat-form-field>\n\n <mat-checkbox\n [checked]=\"tagData.useResponsiveWrapper\"\n (change)=\"onCheck($event.checked)\"\n >\n Использовать адаптив?\n </mat-checkbox>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { ImageMethods } from '../../extensions/ImageMethods';\nimport { PublicFilesQueryService } from '../../services/PublicFilesQueryService';\nimport { CrocoHtmlOptionsToken } from '../../consts';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { CrocoHtmlEditorFileOptions, CrocoHtmlOptions } from '../../options';\nimport { PrivateFilesQueryService } from \"../../services/PrivateFilesQueryService\";\nimport { CrocoHtmlFileOptionsService } from \"../../services/CrocoHtmlFileOptionsService\";\nimport { FileType } from '../../services/file-models';\n\nexport interface SearchQuestionsFormData {\n q: string;\n}\n\nexport interface FileUnifiedModel {\n fileId: string;\n fileName: string;\n}\n\n@Component({\n selector: 'croco-html-file-id-select',\n templateUrl: './file-id-select.component.html',\n styleUrls: ['./file-id-select.component.scss'],\n standalone: true,\n imports: [NgSelectModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileIdSelectComponent implements OnInit, OnChanges {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n \n q: string;\n\n @Input()\n labelText = \"Поиск файлов\"\n\n @Input()\n @Output()\n fileId: string;\n\n loading = false;\n\n files: FileUnifiedModel[] = [];\n\n @Output()\n onFileIdChanged = new EventEmitter<string>();\n\n get crocoHtmlEditorFileOptions(): CrocoHtmlEditorFileOptions {\n return this._htmlSettingsService.get();\n }\n\n constructor(\n private readonly _publicFileService: PublicFilesQueryService,\n private readonly _privateFileService: PrivateFilesQueryService,\n private _htmlSettingsService: CrocoHtmlFileOptionsService,\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n ) {\n }\n\n onModelChanged(fileId: string) {\n this.onFileIdChanged.emit(fileId);\n }\n\n getSrc(fileId: string) {\n return ImageMethods.buildSmallUrl(fileId, this._options);\n }\n\n ngOnInit(): void {\n this.loadFiles();\n }\n\n public loadFiles() {\n this.loading = true;\n const isPrivate = this.crocoHtmlEditorFileOptions.usePrivateFiles;\n\n const searchParams = {\n count: 10,\n offSet: 0,\n fileName: null,\n fileTypes: [FileType.Image],\n applicationId: isPrivate ? this.crocoHtmlEditorFileOptions.applicationId : null,\n q: this.q\n };\n\n this._cdr.markForCheck();\n\n if (isPrivate) {\n this._privateFileService.search(searchParams)\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.id, fileName: el.fileName }));\n this.loading = false;\n\n this._cdr.markForCheck();\n });\n } else {\n this._publicFileService.search(searchParams)\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.fileId.toString(), fileName: el.fileName }));\n this.loading = false;\n\n this._cdr.markForCheck();\n })\n }\n }\n\n onSearchChanged(q: { term: string, items: object[] }) {\n this.q = q.term;\n this.loadFiles();\n\n this._cdr.markForCheck();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.loadFiles();\n }\n}\n","<div class=\"file-id\">\n <div class=\"form-group\">\n <label for=\"fileName\">{{labelText}}</label>\n <ng-select [(ngModel)]=\"fileId\" (ngModelChange)=\"onModelChanged($event)\" [items]=\"files\" #select\n bindLabel=\"fileName\" (search)=\"onSearchChanged($event)\" [loading]=\"loading\" [loadingText]=\"'Загружаю файлы'\"\n dropdownPosition=\"auto\" [bindValue]=\"'fileId'\" labelForId=\"fileName\" placeholder=\"Выбрать файл\"\n [virtualScroll]=\"true\">\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <div class=\"file-id__container\">\n <div class=\"file-id__text-container\">\n <div>\n <span class=\"h5\">Файл: </span>\n <span class=\"h5\"><b>{{item.fileName}}</b></span>\n </div>\n <div>\n <small>\n <span>\n Идентификатор файла: <b>{{item.fileId }}</b>\n </span>\n </small>\n </div>\n </div>\n <div class=\"file-id__img\">\n <img class=\"mx-auto d-block img-fluid\" [src]=\"getSrc(item.fileId)\" />\n </div>\n </div>\n\n </ng-template>\n </ng-select>\n </div>\n</div>\n\n<div>\n Идентификатор файла: {{fileId}}\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ImageMethods, FileImageTagDataConsts } from '../../../extensions';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { FileIdSelectComponent } from '../../file-id-select/file-id-select.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { NgStyle } from \"@angular/common\";\nimport { ScreenWidthService } from \"../../../services/screen-width.service\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatSlideToggle } from \"@angular/material/slide-toggle\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { IImageMediaRequest } from '../../../models';\n\n@Component({\n selector: 'croco-html-image-editor',\n templateUrl: './image-editor.component.html',\n styleUrls: ['./image-editor.component.scss'],\n standalone: true,\n imports: [\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatIcon,\n FileIdSelectComponent,\n MatFormField,\n MatLabel,\n MatInput,\n NgStyle,\n MatIconButton,\n MatSlideToggle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageEditorComponent implements OnInit, OnDestroy {\n\n hasImageError = false;\n searchOrEdit = \"search\";\n requests: IImageMediaRequest[] = [];\n imageMaxHeight: number = null;\n imageMaxWidth: number = null;\n isShowMediaRequest = false;\n private unsubscribe = new Subject<void>();\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = true;\n\n onErrorHandler() {\n this.hasImageError = true;\n }\n\n public get fileId(): string {\n return this.tag.attributes[FileImageTagDataConsts.FileIdAttrName];\n }\n\n public set fileId(value: string) {\n this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = value;\n }\n\n constructor(\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions,\n private readonly screenWidthService: ScreenWidthService,\n ) { }\n\n getSrc() {\n return ImageMethods.buildUrl(this.tag.attributes[FileImageTagDataConsts.FileIdAttrName], \"Medium\", this._options);\n }\n\n hasFileId() {\n return this.tag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName);\n }\n\n onFileIdChanged(fileId: string) {\n this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = fileId;\n this.removeImageError();\n }\n\n removeImageError() {\n this.hasImageError = false;\n this._cdr.markForCheck();\n }\n\n ngOnInit(): void {\n let attr = this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest];\n this.requests = ImageMethods.mediaRequestStringToArrayParser(attr)\n\n this.screenWidthService.getScreenWidth()\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(screenWidth => {\n let imageRestrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);\n\n this.imageMaxHeight = imageRestrictions.maxHeight;\n this.imageMaxWidth = imageRestrictions.maxWidth;\n\n if (this._options.imageOptions.visualEditorOptions?.editorModeImageMaxHeight) {\n const visualMaxHeight = this._options.imageOptions.visualEditorOptions.editorModeImageMaxHeight;\n if (this.imageMaxHeight === null || this.imageMaxHeight === undefined || visualMaxHeight < this.imageMaxHeight) {\n this.imageMaxHeight = visualMaxHeight;\n }\n }\n\n this._cdr.markForCheck();\n });\n }\n\n requestChanged() {\n this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest] = ImageMethods.mediaRequestsArrayToString(this.requests)\n }\n\n addNewMediaRequest() {\n this.requests.push({\n maxScreenWidth: 0,\n minScreenWidth: 0,\n maxImageHeight: 0,\n maxImageWidth: 0\n });\n\n this._cdr.markForCheck();\n }\n\n deleteMediaRequest(index: number) {\n this.requests.splice(index, 1);\n this.requestChanged();\n\n this._cdr.markForCheck();\n }\n\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","<div>\n <div style=\"height: 10px;\">\n </div>\n\n @if (hasImageError) {\n <div class=\"error-block\">\n Изображение не найдено по указанному идентификатору, возможно файл не существует или отсутствует на сервере.\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>[Изображение не выбрано]</h5>\n </div>\n }\n\n @if(!presentOrEdit) {\n <mat-slide-toggle style=\"padding: 10px 0\" [(ngModel)]=\"isShowMediaRequest\">Показывать медиа запросы</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>Медиа запросы:</span>\n @if (!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 (presentOrEdit) {\n <div style=\"display: flex; flex-direction: column; gap: 5px\">\n <span class=\"w-100\">Минимальная ширина: {{request.minScreenWidth}}</span>\n <span class=\"w-100\">Максимальная ширина: {{request.maxScreenWidth}}</span>\n <span class=\"w-100\">Максимальная высота изображения: {{request.maxImageHeight}}</span>\n <span class=\"w-100\">Максимальная ширина изображения: {{request.maxImageWidth}}</span>\n </div>\n }\n @else {\n <div style=\"width: 100%\">\n <mat-form-field class=\"w-100\">\n <mat-label>\n Минимальная ширина\n </mat-label>\n <input matInput placeholder=\"Минимальная граница ширины\"\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 Максимальная ширина\n </mat-label>\n <input matInput placeholder=\"Максимальная граница ширины\"\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 Максимальная высота изображения\n </mat-label>\n <input matInput placeholder=\"Максимальная высота изображения\"\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 Максимальная ширина изображения\n </mat-label>\n <input matInput placeholder=\"Максимальная ширина изображения\"\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 (!presentOrEdit) {\n <div>\n <div style=\"height: 10px;\"></div>\n <div style=\"overflow-x:auto;\" class=\"mode-toggle-container\">\n <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n <mat-button-toggle value=\"search\">\n Искать файл <mat-icon>search</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"edit\">\n Указать по идентификатору <mat-icon>settings</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div [hidden]=\"searchOrEdit !== 'search'\">\n <div class=\"file-selection\">\n <div class=\"existing-files\">\n <h6>Выбрать из существующих файлов:</h6>\n <croco-html-file-id-select\n [labelText]=\"'Выбрать файл'\"\n [fileId]=\"fileId\"\n (onFileIdChanged)=\"onFileIdChanged($event)\">\n </croco-html-file-id-select>\n </div>\n </div>\n </div>\n <div [hidden]=\"searchOrEdit !== 'edit'\">\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Идентификатор файла\n </mat-label>\n <input matInput placeholder=\"Идентификатор файла\" new-autocomplete=\"off\" autocomplete=\"off\"\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileIdChanged($event)\">\n </mat-form-field>\n </div>\n </div>\n </div>\n}\n","import { TextAlignment } from \"../../../tag-services\";\n\nexport const AlignmentsData = [\n { value: TextAlignment.Left , text: 'Слева' },\n { value: TextAlignment.Center, text: 'По центру' },\n { value: TextAlignment.Right, text: 'Справа' },\n];\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { MatFormField, MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { XmlTagDownloadFileButtonComponent } from \"../../xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component\";\nimport { DownloadButtonTagData } from '../../../tag-services/DownloadButtonTagService';\n\n@Component({\n selector: 'croco-html-download-file-button-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatFormField,\n MatInput,\n ReactiveFormsModule,\n FormsModule,\n XmlTagDownloadFileButtonComponent,\n MatFormFieldModule\n ],\n templateUrl: './download-file-button-editor.component.html'\n})\nexport class DownloadFileButtonEditorComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({required: true})\n tag: HtmlBodyTag;\n\n\n @Input({required: true})\n presentOrEdit = true;\n\n tagData: DownloadButtonTagData = {\n link: '',\n title: ''\n };\n\n ngOnInit(): void {\n this.tagData.link = (this.tag.attributes as DownloadButtonTagData).link;\n this.tagData.title = (this.tag.attributes as DownloadButtonTagData).title;\n\n this._cdr.markForCheck();\n }\n\n linkChanged() {\n this.tag.attributes = this.tagData;\n\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div>\n Ссылка для скачивания: {{tagData.link}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n Текст кнопки: {{tagData.title}}\n </div>\n <div style=\"height: 20px;\"></div>\n <croco-html-xml-tag-download-file-button [tagData]=\"tagData\"></croco-html-xml-tag-download-file-button>\n </div>\n}\n@else {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Ссылка на скачивание\n </mat-label>\n <input matInput placeholder=\"Ссылка на скачивание\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.link\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n Текст на кнопке\n </mat-label>\n <input matInput placeholder=\"Текст на кнопке\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.title\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnDestroy } from '@angular/core';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { TagEditorService } from '../../../models';\nimport { TextAlignment, TextTagDataConsts } from '../../../tag-services';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'croco-html-text-editor',\n templateUrl: './text-editor.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatIcon,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize\n ]\n})\nexport class TextEditorComponent implements OnDestroy {\n\n private unsubscribe = new Subject<void>();\n\n _tag: HtmlBodyTag;\n _tagService: TagEditorService;\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(tag => {\n this._tag = tag;\n this._cdr.markForCheck();\n });\n\n this._tagService.presentOrEdit$\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n });\n\n this._horizontalAlignment = this._tag.attributes.hasOwnProperty(TextTagDataConsts.HAlign)\n ? this._tag.attributes[TextTagDataConsts.HAlign]\n : TextAlignment.Left\n\n this._cdr.markForCheck();\n }\n\n presentOrEdit = true;\n\n public TextAlignment = TextAlignment;\n\n public _horizontalAlignment: TextAlignment = TextAlignment.Left;\n\n changeData() {\n this._tag.attributes[TextTagDataConsts.HAlign] = this._horizontalAlignment;\n\n this._tagService.tag$.next(this._tag);\n this._cdr.markForCheck();\n }\n\n getInnerHtml() {\n return `<${this._tag.tagDescription.tag}>${this._tag.innerHtml}<${this._tag.tagDescription.tag}/>`;\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div style=\"height: 10px;\">\n </div>\n @if (_horizontalAlignment === TextAlignment.Left) {\n <div style=\"text-align: left;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @else if (_horizontalAlignment === TextAlignment.Right) {\n <div style=\"text-align: right;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @else if (_horizontalAlignment === TextAlignment.Center) {\n <div style=\"text-align: center;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n </div>\n}\n@else {\n <div>\n <div style=\"overflow-x: auto;\">\n <mat-button-toggle-group [(ngModel)]=\"_horizontalAlignment\" (ngModelChange)=\"changeData()\">\n <mat-button-toggle value=\"center\">\n По центру <mat-icon>format_align_center</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"left\">\n Слева <mat-icon>format_align_left</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"right\">\n Справа <mat-icon> format_align_right</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>Внутренняя разметка текстового тега</mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"Внутренняя разметка текстового тега\"\n [(ngModel)]=\"_tag.innerHtml\" (ngModelChange)=\"changeData()\"></textarea>\n </mat-form-field>\n </div>\n </div>\n}\n","import { ChangeDetectorRef, Component, inject, Input } from '@angular/core';\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { XmlTagButtonComponent } from \"../../xml-tags/xml-tag-custom-button/xml-tag-button.component\";\nimport { ButtonTagData } from '../../../tag-services/ButtonTagService';\n\n@Component({\n selector: 'croco-html-button-editor',\n standalone: true,\n imports: [\n FormsModule,\n MatFormField,\n MatInput,\n MatLabel,\n XmlTagButtonComponent\n ],\n templateUrl: './button-editor.component.html'\n})\nexport class ButtonEditorComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n \n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = true;\n\n tagData: ButtonTagData = {\n type: '',\n text: '',\n click: ''\n };\n\n ngOnInit(): void {\n const data = this.tag.attributes as ButtonTagData;\n this.tagData.type = data.type;\n this.tagData.text = data.text;\n this.tagData.click = data.click;\n\n this._cdr.markForCheck();\n }\n\n linkChanged() {\n this.tag.attributes = this.tagData;\n\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div>\n Тип: {{tagData.type}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n Текст: {{tagData.text}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n Обработчик нажатия: {{tagData.click}}\n </div>\n <div style=\"height: 10px;\"></div>\n <croco-html-xml-tag-button [tagData]=\"tagData\"></croco-html-xml-tag-button>\n </div>\n} @else {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Тип\n </mat-label>\n <input matInput placeholder=\"Тип\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.type\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n Текст\n </mat-label>\n <input matInput placeholder=\"Текст\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.text\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n Обработчик нажатия\n </mat-label>\n <input matInput placeholder=\"Обработчик нажатия\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.click\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnInit } from '@angular/core';\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { XmlTagCustomWidgetComponent } from \"../../xml-tags\";\nimport { CustomWidgetTagData, CustomWidgetTagService } from '../../../tag-services/CustomWidgetTagService';\n\n@Component({\n selector: 'croco-html-custom-widget-editor',\n standalone: true,\n imports: [\n FormsModule,\n MatFormField,\n MatInput,\n MatLabel,\n XmlTagCustomWidgetComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './custom-widget-editor.component.html'\n})\nexport class CustomWidgetEditorComponent implements OnInit {\n private readonly _cdr = inject(ChangeDetectorRef);\n \n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = false;\n\n tagData: CustomWidgetTagData = {\n type: '',\n dataId: '',\n widgetId: ''\n };\n\n ngOnInit(): void {\n this.tagData = CustomWidgetTagService.ExtractCustomWidgetTagData(this.tag.attributes);\n this._cdr.markForCheck();\n }\n\n dataChanged() {\n this.tag.attributes = CustomWidgetTagService.ExtractCustomWidgetAttributes(this.tagData);\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n<div>\n <div>\n <b>type:</b> {{tagData.type}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n <b>data-id:</b> {{tagData.dataId}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n <b>widget-id:</b> {{tagData.widgetId}}\n </div>\n <div style=\"height: 10px;\"></div>\n <croco-html-xml-tag-custom-widget [tagData]=\"tagData\"></croco-html-xml-tag-custom-widget>\n</div>\n} @else {\n<div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n type\n </mat-label>\n <input matInput placeholder=\"type\" autocomplete=\"off\" [(ngModel)]=\"tagData.type\" (ngModelChange)=\"dataChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n data-id\n </mat-label>\n <input matInput placeholder=\"data-id\" autocomplete=\"off\" [(ngModel)]=\"tagData.dataId\"\n (ngModelChange)=\"dataChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n widget-id\n </mat-label>\n <input matInput placeholder=\"widget-id\" autocomplete=\"off\" [(ngModel)]=\"tagData.widgetId\"\n (ngModelChange)=\"dataChanged()\">\n </mat-form-field>\n</div>\n}","import { BehaviorSubject } from \"rxjs\";\nimport { HtmlBodyTag } from \"./models\";\n\nexport class TagEditorService {\n public readonly tag$ = new BehaviorSubject<HtmlBodyTag>(null);\n public readonly presentOrEdit$ = new BehaviorSubject<boolean>(true);\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, DestroyRef, inject, Inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { HtmlBodyTag, TagEditorService } from '../../../../../models';\nimport { CrocoHtmlOptions } from '../../../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../../../consts';\nimport { DefaultTags } from '../../../visual-editor/DefaultTags';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'croco-html-defined-custom-editor-block',\n imports: [],\n templateUrl: './defined-custom-editor-block.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefinedCustomEditorBlockComponent implements OnInit, OnDestroy {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n public _tagService: TagEditorService;\n public _tag: HtmlBodyTag;\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(tag => {\n this._tag = tag;\n this._cdr.markForCheck();\n });\n \n this._cdr.markForCheck();\n }\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n ngOnInit(): void {\n\n var component = DefaultTags.getEditor(this._tag, this._options);\n\n if (component) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n\n this.dynamicContainerRef.setInput(\"tagService\", this._tagService);\n }\n\n this._cdr.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.dynamicContainerRef.destroy();\n }\n}\n\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <div>\n Редактор разметки для {{_tag.tagDescription.tag}} не описан.\n </div>\n <div>\n Установите CrocoHtmlOptions.definedCustomTagViewRenderers[{{_tag.tagDescription.tag}}].editorComponent\n </div>\n }\n</ng-container>","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Inject, Input, OnDestroy, Output} from '@angular/core';\nimport { TextTags } from '../../../extensions/TextMethods';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatIconButton } from '@angular/material/button';\nimport { DownloadFileButtonEditorComponent } from '../download-file-button-editor/download-file-button-editor.component';\nimport { ImageEditorComponent } from '../image-editor/image-editor.component';\nimport { AudioEditorComponent } from '../audio-editor/audio-editor.component';\nimport { TextEditorComponent } from '../text-editor/text-editor.component';\nimport { ExternalVideoEditorComponent } from '../external-video-editor/external-video-editor.component';\nimport { ButtonEditorComponent } from \"../button-editor/button-editor.component\";\nimport { CustomWidgetEditorComponent } from \"../custom-widget-editor/custom-widget-editor.component\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { JsonPipe } from '@angular/common';\nimport { TagEditorService } from '../../../models/editor-models';\nimport { Subject, takeUntil } from 'rxjs';\nimport {\n DefinedCustomEditorBlockComponent\n} from \"./components/defined-custom-editor-block/defined-custom-editor-block.component\";\nimport { DefaultTags } from '../visual-editor/DefaultTags';\n\n@Component({\n selector: 'croco-html-main-editor-block',\n templateUrl: './main-editor-block.component.html',\n styleUrls: ['./main-editor-block.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TextEditorComponent,\n ImageEditorComponent,\n AudioEditorComponent,\n DownloadFileButtonEditorComponent,\n MatIconButton,\n ExternalVideoEditorComponent,\n ButtonEditorComponent,\n CustomWidgetEditorComponent,\n JsonPipe,\n DefinedCustomEditorBlockComponent,\n ]\n})\nexport class MainEditorBlockComponent implements OnDestroy {\n\n textTags = TextTags.allTextTags;\n\n private unsubscribe = new Subject<void>();\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n set tag(data: HtmlBodyTag) {\n this._tag = data;\n this._tagService = new TagEditorService();\n\n this._tagService.tag$.next(this._tag);\n this._tagService.presentOrEdit$\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n });\n }\n\n public _tag: HtmlBodyTag | null = null;\n public _tagService: TagEditorService;\n\n public presentOrEdit = true;\n\n @Output()\n onTagSaved = new EventEmitter<HtmlBodyTag>();\n\n @Output()\n onTagRemoved = new EventEmitter<HtmlBodyTag>();\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n save() {\n const tag = this._tagService.tag$.value;\n\n this.onTagSaved.emit(tag);\n this._tagService.presentOrEdit$.next(true);\n }\n\n cancelSave() {\n this._tagService.presentOrEdit$.next(false);\n }\n\n isEditorDefined() {\n return DefaultTags.isEditorDefined(this._tag, this._options);\n }\n\n deleteItem() {\n this.onTagRemoved.emit(this._tag);\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","<div class=\"main-editor-block\">\n <div class=\"editor-container\">\n @if (textTags.includes(_tag.tagDescription.tag)) {\n <div>\n <croco-html-text-editor [tagService]=\"_tagService\">\n </croco-html-text-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'file-image') {\n <div>\n <croco-html-image-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-image-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'audio-player') {\n <div>\n <croco-html-audio-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-audio-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'custom-widget') {\n <div>\n <croco-html-custom-widget-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-custom-widget-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'external-video') {\n <div>\n <croco-html-external-video-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-external-video-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'download-file-button') {\n <div>\n <croco-html-download-file-button-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-download-file-button-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'button') {\n <div>\n <croco-html-button-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-button-editor>\n </div>\n }\n @else if (isEditorDefined()) {\n <div>\n <croco-html-defined-custom-editor-block [tagService]=\"_tagService\"></croco-html-defined-custom-editor-block>\n </div>\n }\n @else {\n <div>\n {{_tag.tagDescription.tag}} не показан\n </div>\n <div>\n {{_tag | json}}\n </div>\n }\n\n </div>\n\n <div class=\"d-flex justify-content-between\">\n <div class=\"d-flex justify-content-end align-self-center\">\n <div style=\"margin-left: 16px;min-width: 96px\">\n @if (presentOrEdit) {\n <button (click)=\"cancelSave()\" mat-icon-button>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M14.4374 0C15.0921 0 15.7197 0.261421 16.1781 0.723424L19.279 3.82432C19.7407 4.286 20.0001 4.91217 20.0001 5.56508C20.0001 6.21799 19.7407 6.84416 19.279 7.30584L7.95751 18.6238C7.25903 19.4295 6.2689 19.9245 5.1346 20.0023H0V19.0023L0.00324754 14.7873C0.0884381 13.7328 0.578667 12.7523 1.3265 12.0934L12.6954 0.72463C13.1564 0.260831 13.7834 0 14.4374 0ZM5.06401 18.0048C5.59823 17.967 6.09551 17.7184 6.49482 17.2616L14.0567 9.69971L10.3024 5.94518L2.69613 13.5496C2.29098 13.9079 2.04034 14.4092 2.00003 14.8678V18.0029L5.06401 18.0048ZM11.7167 4.53114L15.471 8.28549L17.8648 5.89162C17.9514 5.80502 18.0001 5.68756 18.0001 5.56508C18.0001 5.4426 17.9514 5.32514 17.8648 5.23854L14.7612 2.13486C14.6755 2.04855 14.559 2 14.4374 2C14.3158 2 14.1992 2.04855 14.1136 2.13486L11.7167 4.53114Z\"\n fill=\"#323E8B\" />\n </svg>\n </button>\n }\n @else {\n <button (click)=\"save()\" mat-icon-button>\n <svg width=\"800px\" height=\"800px\" viewBox=\"0 0 24 24\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-labelledby=\"saveIconTitle\" stroke=\"#000000\" stroke-width=\"1\" stroke-linecap=\"square\"\n stroke-linejoin=\"miter\" fill=\"none\" color=\"#000000\">\n <title id=\"saveIconTitle\">Save</title>\n <path\n d=\"M17.2928932,3.29289322 L21,7 L21,20 C21,20.5522847 20.5522847,21 20,21 L4,21 C3.44771525,21 3,20.5522847 3,20 L3,4 C3,3.44771525 3.44771525,3 4,3 L16.5857864,3 C16.8510029,3 17.1053568,3.10535684 17.2928932,3.29289322 Z\" />\n <rect width=\"10\" height=\"8\" x=\"7\" y=\"13\" />\n <rect width=\"8\" height=\"5\" x=\"8\" y=\"3\" />\n </svg>\n </button>\n }\n <button (click)=\"deleteItem()\" mat-icon-button color=\"warn\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.49988 0.833332H12.4999C13.4204 0.833332 14.1665 1.57952 14.1665 2.5V3.33333H16.6665C17.587 3.33333 18.3332 4.07952 18.3332 4.99999V6.66666C18.3332 7.58714 17.587 8.33333 16.6665 8.33333H16.5998L15.8332 17.5C15.8332 18.4205 15.087 19.1667 14.1665 19.1667H5.8332C4.91272 19.1667 4.16653 18.4205 4.16941 17.5692L3.39975 8.33333H3.33317C2.4127 8.33333 1.6665 7.58714 1.6665 6.66666V4.99999C1.6665 4.07952 2.4127 3.33333 3.33317 3.33333H5.83321V2.5C5.83321 1.57952 6.5794 0.833332 7.49988 0.833332ZM5.83321 5V4.99999H3.33317V6.66666H16.6665V4.99999L14.1665 5H5.83321ZM5.83324 17.5L5.07198 8.33333H14.9276L14.1695 17.4308L14.1666 17.5H5.83324ZM12.4999 2.5V3.33334H7.49992V2.5H12.4999Z\"\n fill=\"#F96666\" />\n </svg>\n </button>\n </div>\n </div>\n\n </div>\n</div>","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { SpriteIdsType } from \"../../sprites-ids.type\";\n\n@Pipe({\n name: 'spriteIconPath',\n standalone: true,\n})\nexport class SpriteIconPathPipe implements PipeTransform {\n transform(id: SpriteIdsType): string {\n return `assets/lib-sprites/symbol/croco-html-svg-sprite.svg#${id}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, inject, Inject, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { CrocoHtmlOptions } from '../../../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../../../consts';\n\n@Component({\n selector: 'croco-html-custom-widget-icon',\n imports: [],\n templateUrl: './custom-widget-icon.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CustomWidgetIconComponent implements OnInit {\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n set tagName(tagName: string) {\n this._tagName = tagName;\n this._shortTagName = tagName.substring(0, 2);\n\n this._cdr.markForCheck();\n }\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n }\n\n getIconComponent() {\n if (this._options.definedEditorViewRenderers.hasOwnProperty(this._tagName)) {\n return this._options.definedEditorViewRenderers[this._tagName].iconComponent;\n }\n\n return null;\n }\n\n _tagName: string = \"\";\n _shortTagName: string = \"\";\n\n ngOnInit(): void {\n\n var component = this.getIconComponent();\n\n if (component) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n }\n\n this._cdr.markForCheck();\n }\n}\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <span>\n {{_shortTagName}}\n </span>\n }\n</ng-container>","import { CdkDragDrop, moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n BodyTagsExtensions, ExternalVideoPlayers,\n ExternalVideoSupportedTypes,\n} from '../../../extensions';\nimport {\n ExternalVideoTagDataConsts,\n} from '../../../extensions';\nimport { XmlExtensions } from '../../../extensions';\nimport { TagItem, HtmlBodyTag } from '../../../models/models';\nimport { DefaultTags } from './DefaultTags';\nimport { AlignmentsData } from \"./DefaultAligments\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MainEditorBlockComponent } from '../main-editor-block/main-editor-block.component';\nimport { AddFilesBtnComponent } from '../../add-files-btn/add-files-btn.component';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatIcon } from '@angular/material/icon';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { SpriteIconPathPipe } from \"../../../pipes/sprite-icon-path.pipe\";\nimport { SpriteIdsType } from \"../../../../sprites-ids.type\";\nimport { HtmlRawTagDataConsts, TextAlignment, TextTagDataConsts } from '../../../tag-services';\nimport { CustomWidgetIconComponent } from \"./components/custom-widget-icon/custom-widget-icon.component\";\nimport { FileImageTagDataConsts } from '../../../extensions';\nimport { UploadFilesBtnComponent } from '../../upload-files-btn/upload-files-btn.component';\nimport { IVisualEditorLogger } from '../../../services/loggers/IVisualEditorLogger';\nimport { NullVisualEditorLogger } from '../../../services/loggers/NullVisualEditorLogger';\n\n@Component({\n selector: 'croco-visual-editor',\n templateUrl: './visual-editor.component.html',\n styleUrls: ['./visual-editor.component.scss'],\n standalone: true,\n imports: [\n MatProgressSpinner,\n MatCard,\n MatCardContent,\n MatButton,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n FormsModule,\n MatSelect,\n MatOption,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n MainEditorBlockComponent,\n MatButtonToggleGroup,\n MatButtonToggle,\n NgTemplateOutlet,\n MatTooltip,\n SpriteIconPathPipe,\n CustomWidgetIconComponent,\n MatIcon,\n UploadFilesBtnComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VisualEditorComponent implements OnInit, AfterViewInit {\n @ViewChild('textArea') textArea: ElementRef;\n @ViewChild('imageUploadBtn') imageUploadBtn: UploadFilesBtnComponent;\n\n isLoading = false;\n loadingText = \"Идёт загрузка\";\n text = '';\n htmlRaw = '';\n\n alignment = TextAlignment.Left;\n textTag = DefaultTags.textTags[0].tag;\n textTagOptions = DefaultTags.textTags\n alignmentOptions = AlignmentsData\n isTagAdditionStarted = false\n\n @Input()\n showMarkUp = true;\n\n @Input({required: false})\n logger: IVisualEditorLogger = new NullVisualEditorLogger();\n\n tags: TagItem[] = [];\n videoPlayers = ExternalVideoPlayers\n selectedValue: string = null;\n selectedVideoPlayer: string;\n imageMode: 'select' | 'upload' | null = null;\n\n protected readonly ExternalVideoTagDataConsts = ExternalVideoTagDataConsts;\n protected readonly HtmlRawTagDataConsts = HtmlRawTagDataConsts;\n protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n protected readonly FileImageTagDataConsts = FileImageTagDataConsts;\n\n @Input()\n useHtmlRaw = true;\n\n @Input()\n @Output()\n html: string = \"\";\n\n isHtmlSet() {\n return this.html.startsWith(\"<body>\");\n }\n\n clearHtml() {\n this.html = \"\";\n this.recalculateBodyTags();\n }\n\n getHtml() {\n this.recalculateHtml();\n return this.html;\n }\n\n @Output()\n onHtmlChanged = new EventEmitter<string>();\n\n @Output()\n rendered = new EventEmitter<boolean>();\n\n bodyTags: HtmlBodyTag[] = [];\n saveBodyTags: HtmlBodyTag[] = [];\n\n useCustomWidgetsButton = false;\n\n constructor(\n private readonly _cdr: ChangeDetectorRef,\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n this.useCustomWidgetsButton = this._options.useCustomWidgetsButton;\n }\n\n ngAfterViewInit(): void {\n this.rendered.emit(true);\n }\n\n resetTextStyle(): void {\n this.text = '';\n this.alignment = TextAlignment.Left;\n this.textTag = DefaultTags.textTags[0].tag;\n this._cdr.markForCheck();\n }\n\n drop(event: CdkDragDrop<HtmlBodyTag[]>) {\n moveItemInArray(this.bodyTags, event.previousIndex, event.currentIndex);\n this.recalculateHtml();\n }\n\n addTag(tag: HtmlBodyTag) {\n this.addTags([tag]);\n }\n\n addTags(tags: HtmlBodyTag[]) {\n\n for (let index = 0; index < tags.length; index++) {\n const tag = tags[index];\n\n this.bodyTags.push(tag);\n }\n \n this.recalculateHtml();\n\n this.logger.onAdd(tags);\n }\n\n onTagChangedHandler(data: HtmlBodyTag, index: number) {\n this.bodyTags[index] = data;\n this.recalculateHtml();\n\n this.logger.onChange(data, index);\n }\n\n onTagRemovedHandler(index: number) {\n this.bodyTags.splice(index, 1);\n this.saveBodyTags = [...this.bodyTags];\n this.recalculateHtml();\n }\n\n recalculateHtml() {\n let result = BodyTagsExtensions.bodyTagsToHtml(this.bodyTags, this._options);\n this.html = XmlExtensions.formatXml(\"<body>\" + result + \"</body>\");\n this.onHtmlChanged.emit(this.html);\n\n this._cdr.markForCheck();\n }\n\n recalculateBodyTags() {\n this.bodyTags = BodyTagsExtensions.getBodyTags(this.html, this._options);\n this.saveBodyTags = [...this.bodyTags];\n this._options.onBodyTagsRecalculated?.(this.saveBodyTags)\n this._cdr.markForCheck();\n }\n\n selectTag(data: TagItem) {\n this.htmlRaw = '';\n this.selectedValue = data.tag;\n this.imageMode = null;\n\n if (this.isTagRequiringForm()) {\n if (data.tag === 'text') {\n this.resetTextStyle();\n } \n else if (data.tag === ExternalVideoTagDataConsts.TagName) {\n this.selectedVideoPlayer = this.videoPlayers[0].type;\n }\n this._cdr.markForCheck();\n return;\n }\n\n this.addRegularTag();\n }\n\n isTagRequiringForm(): boolean {\n return this.selectedValue === 'text' ||\n this.selectedValue === ExternalVideoTagDataConsts.TagName ||\n this.selectedValue === HtmlRawTagDataConsts.TagName ||\n this.selectedValue === FileImageTagDataConsts.TagName;\n }\n\n addTagWithForm(): void {\n if (!this.selectedValue) {\n return;\n }\n\n if (this.selectedValue === 'text') {\n this.addTextTag();\n } else if (this.selectedValue === ExternalVideoTagDataConsts.TagName) {\n this.addExternalVideoTag();\n } else if (this.selectedValue === HtmlRawTagDataConsts.TagName) {\n this.addHtmlRawTag();\n } else if (this.selectedValue === FileImageTagDataConsts.TagName) {\n if (this.imageMode === 'select') {\n this.selectExistingImage();\n } else if (this.imageMode === 'upload') {\n return;\n }\n }\n\n this.resetTagForm();\n }\n\n selectExistingImage(): void {\n const tagName = FileImageTagDataConsts.TagName;\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n let tag = tagService.getDefaultValue({\n htmlRaw: '',\n selectedVideoPlayer: null\n });\n\n this.addTag(tag);\n this.resetTagForm();\n }\n }\n\n uploadNewImages(): void {\n if (this.imageUploadBtn) {\n this.imageUploadBtn.clickFileInput();\n }\n }\n\n onImageFilesUploaded(fileIds: string[] | number[]): void {\n if (fileIds && fileIds.length > 0) {\n const fileIdsString = fileIds.map(id => typeof id === 'number' ? id.toString() : id);\n\n const tags: HtmlBodyTag[] = [];\n\n fileIdsString.forEach(fileId => {\n const tag: HtmlBodyTag = {\n tagDescription: {\n tag: FileImageTagDataConsts.TagName,\n displayValue: \"Изображение\",\n isCustom: false\n },\n attributes: {\n [FileImageTagDataConsts.FileIdAttrName]: fileId,\n [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n },\n innerHtml: \"\"\n };\n\n tags.push(tag);\n });\n\n this.addTags(tags);\n this.resetTagForm();\n }\n }\n\n addTextTag(): void {\n if (!this.text || this.text.trim().length === 0) {\n return;\n }\n\n let lines = this.text.split('\\n');\n let tagDescription = this.textTagOptions?.find(x => x.tag === this.textTag);\n\n const tags: HtmlBodyTag[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length > 0) {\n tags.push({\n tagDescription,\n innerHtml: line,\n attributes: {\n [TextTagDataConsts.HAlign]: `${this.alignment}`\n }\n });\n }\n }\n\n this.addTags(tags);\n }\n\n addExternalVideoTag(): void {\n const tagName = ExternalVideoTagDataConsts.TagName;\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n const tag = tagService.getDefaultValue({\n htmlRaw: this.htmlRaw,\n selectedVideoPlayer: this.selectedVideoPlayer\n });\n\n this.addTag(tag);\n }\n }\n\n addHtmlRawTag(): void {\n const tagName = HtmlRawTagDataConsts.TagName;\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n let tag = tagService.getDefaultValue({\n htmlRaw: this.htmlRaw,\n selectedVideoPlayer: null\n });\n\n this.addTag(tag);\n }\n }\n\n resetTagForm(): void {\n this.selectedValue = null;\n this.htmlRaw = '';\n this.text = '';\n this.imageMode = null;\n this.resetTextStyle();\n this.isTagAdditionStarted = false;\n\n this._cdr.markForCheck();\n }\n\n addRegularTag(): void {\n if (!this.selectedValue) {\n return;\n }\n\n const tagName = this.selectedValue;\n\n const tags: HtmlBodyTag[] = [];\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n let tag = tagService.getDefaultValue({\n htmlRaw: '',\n selectedVideoPlayer: null\n });\n\n tags.push(tag);\n this.resetTagForm();\n } else {\n alert(`Сервис для тега ${tagName} не зарегистрирован.`);\n }\n\n this.addTags(tags);\n }\n\n isDefinedCustomWidget(tagName: string): boolean {\n if (this._options.definedCustomTags.hasOwnProperty(tagName)) {\n return true;\n }\n\n return false;\n }\n\n customWidgetsClickHandler() {\n this._options.customWidgetClickHandler(this);\n }\n\n ngOnInit(): void {\n this.recalculateBodyTags();\n\n this.tags = DefaultTags.getTags(this._options);\n this.selectedVideoPlayer = this.videoPlayers[0].type;\n\n this._cdr.markForCheck();\n }\n\n setTagButton(tagName: string): SpriteIdsType {\n return `tag-button-${tagName}` as SpriteIdsType\n }\n\n setAlignButton(type: string): SpriteIdsType {\n return `align-${type}` as SpriteIdsType\n }\n}\n","@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24\" height=\"24\" class=\"move-icon\">\n <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n </svg>\n </div>\n <div>\n <div class=\"badge\" [matTooltip]=\"tag.tagDescription.displayValue\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n </ng-container>\n </span>\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagChangedHandler($event, i)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n</div>\n<div style=\"height: 10px;\"></div>\n<div [hidden]=\"isLoading\">\n @if (!isTagAdditionStarted) {\n <div class=\"col-12\">\n <div class=\"tag-item add-tag-button\" (click)=\"isTagAdditionStarted = true\">\n <div class=\"tag-icon\">\n <mat-icon>add</mat-icon>\n </div>\n <div class=\"tag-text\">Добавить тег</div>\n </div>\n </div>\n }\n @else {\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <div class=\"w-100\">\n <div class=\"tags\">\n @for (tag of tags; track tag.displayValue) {\n <div class=\"tag-item\"\n (click)=\"selectTag(tag)\"\n [class.active]=\"selectedValue === tag.tag\"\n >\n <div class=\"tag-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n </ng-container>\n </div>\n <div class=\"tag-text\">{{tag.displayValue}}</div>\n </div>\n }\n\n @if (useCustomWidgetsButton) {\n <div class=\"tag-item\"\n (click)=\"customWidgetsClickHandler()\"\n >\n <div class=\"tag-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: 'custom-widget'}\">\n </ng-container>\n </div>\n <div class=\"tag-text\">Другие виджеты</div>\n </div>\n }\n </div>\n </div>\n </div>\n @if (selectedValue === FileImageTagDataConsts.TagName && imageMode === null) {\n <div class=\"col-12\">\n <div class=\"image-mode-selection\">\n <button (click)=\"imageMode = 'select'; selectExistingImage()\" class=\"w-100 image-mode-btn\" mat-stroked-button>\n <mat-icon>search</mat-icon>\n <span>Выбрать из уже загруженных файлов</span>\n </button>\n <button (click)=\"uploadNewImages()\" class=\"w-100 image-mode-btn\" mat-stroked-button>\n <mat-icon>upload</mat-icon>\n <span>Загрузить новые изображения</span>\n </button>\n </div>\n </div>\n }\n <croco-app-upload-files-btn\n #imageUploadBtn\n [hidden]=\"true\"\n extAccepts=\"image/*\"\n [isMultiple]=\"true\"\n btnText=\"Загрузить изображения\"\n (onPublicFilesUploaded)=\"onImageFilesUploaded($event.fileIds)\"\n (onPrivateFilesUploaded)=\"onImageFilesUploaded($event.fileIds)\">\n </croco-app-upload-files-btn>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>Выберите видеоплеер</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>Разметка</mat-label>\n <input\n matInput\n placeholder=\"Разметка\"\n [(ngModel)]=\"htmlRaw\"\n >\n </mat-form-field>\n </div>\n }\n <div class=\"col-12\">\n <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n Добавить видео\n </button>\n </div>\n }\n @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\">\n <mat-label>Разметка</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Разметка\"\n #textArea\n [(ngModel)]=\"htmlRaw\"\n ></textarea>\n </mat-form-field>\n </div>\n <div class=\"col-12\">\n <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n Добавить разметку\n </button>\n </div>\n }\n @if (selectedValue === 'text') {\n <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n <mat-button-toggle-group\n [(ngModel)]=\"textTag\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of textTagOptions; track option) {\n <mat-button-toggle value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n\n <div style=\"margin-bottom: 22px\">\n <mat-button-toggle-group\n [(ngModel)]=\"alignment\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of alignmentOptions; track option.value) {\n <mat-button-toggle value=\"{{ option.value }}\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n [ngTemplateOutletContext]=\"{icon: option.value}\">\n </ng-container>\n </span>\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <mat-form-field class=\"w-100\">\n <mat-label>Текст</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Текст\"\n #textArea\n [(ngModel)]=\"text\"\n ></textarea>\n </mat-form-field>\n <div class=\"col-12\">\n <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n Добавить текст\n </button>\n </div>\n }\n </div>\n\n </mat-card-content>\n </mat-card>\n }\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n @if (isDefinedCustomWidget(icon)) {\n <croco-html-custom-widget-icon [tagName]=\"icon\"></croco-html-custom-widget-icon>\n }\n @else if (icon.indexOf('h') === 0 && icon.length === 2) {\n {{icon.toUpperCase()}}\n }\n @else {\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setTagButton(icon) | spriteIconPath\"></use>\n </svg>\n }\n</ng-template>\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { HtmlExtractionMethods } from '../extensions/HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n name: 'topreview',\n standalone: true\n})\nexport class ToPreviewPipe implements PipeTransform {\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n transform(value: string): InterfaceBlock[] {\n return HtmlExtractionMethods.transformHtmlStringToBlocks(value, this._options);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { ToPreviewPipe } from '../../pipes/to-preview.pipe';\nimport { XmlTagViewComponent } from '../xml-tags/xml-tag-view/xml-tag-view.component';\nimport { HtmlPageDataController } from '../../services';\n\n@Component({\n selector: 'croco-html-view',\n templateUrl: './html-view.component.html',\n standalone: true,\n imports: [XmlTagViewComponent, ToPreviewPipe]\n})\nexport class HtmlViewComponent {\n\n @Input({ required: true })\n html: string = \"<body></body>\";\n\n @Input({ required: false })\n isEditor = false\n\n @Input({ required: false })\n dataController: HtmlPageDataController = new HtmlPageDataController();\n}\n","<croco-html-xml-tag-view\n [data]=\"html | topreview\"\n [dataController]=\"dataController\"\n [isEditor]=\"isEditor\"\n></croco-html-xml-tag-view>\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatFormField, MatInput, MatLabel } from \"@angular/material/input\";\nimport { MatCheckbox } from \"@angular/material/checkbox\";\nimport { MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatButton } from \"@angular/material/button\";\nimport { CrocoHtmlFileOptionsService } from \"../../../services/CrocoHtmlFileOptionsService\";\n\n@Component({\n selector: 'croco-html-html-editor-settings-modal',\n standalone: true,\n imports: [\n MatInput,\n MatCheckbox,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatButton\n ],\n templateUrl: './html-editor-settings-modal.component.html',\n styleUrl: './html-editor-settings-modal.component.scss'\n})\nexport class HtmlEditorSettingsModalComponent implements OnInit {\n public form: FormGroup;\n\n constructor(\n private readonly fb: FormBuilder,\n public readonly dialogRef: MatDialogRef<HtmlEditorSettingsModalComponent>,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService\n ) {\n this.form = this.fb.group({\n usePrivateFiles: false,\n applicationId: ''\n });\n }\n\n ngOnInit() {\n this.form.patchValue(this._htmlSettingsService.get())\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n setSettings(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<div mat-dialog-title>Настройки редактора</div>\n<div mat-dialog-content class=\"editor-settings\" [formGroup]=\"form\">\n <mat-form-field style=\"margin-top: 20px\">\n <mat-label>\n Идентификатор приложения\n </mat-label>\n <input matInput formControlName=\"applicationId\">\n </mat-form-field>\n\n <div>\n <mat-label>\n Использовать приватные файлы\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()\">Отмена</button>\n <button mat-raised-button color=\"primary\" (click)=\"setSettings()\">Сохранить</button>\n</div>\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ClipboardService } from 'ngx-clipboard';\nimport { VisualEditorComponent } from '../visual-editor/visual-editor.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButton } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { HtmlViewComponent } from \"../../html-view/html-view.component\";\nimport { SpriteIconPathPipe } from \"../../../pipes/sprite-icon-path.pipe\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { HtmlEditorSettingsModalComponent } from \"../html-editor-settings-modal/html-editor-settings-modal.component\";\nimport { CrocoHtmlEditorFileOptions, CrocoHtmlOptions } from \"../../../options\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { CrocoHtmlFileOptionsService } from \"../../../services/CrocoHtmlFileOptionsService\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\n\n@Component({\n selector: 'croco-html-main-editor',\n templateUrl: './main-editor.component.html',\n styleUrls: ['./main-editor.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatTabsModule,\n VisualEditorComponent,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n FormsModule,\n MatButton,\n MatCardModule,\n HtmlViewComponent,\n SpriteIconPathPipe,\n MatIcon\n ]\n})\nexport class MainEditorComponent implements OnInit, AfterContentChecked, AfterViewInit {\n\n visualEditorRendered = false;\n\n @ViewChild(\"visualEditor\", { static: true })\n visualEditor: VisualEditorComponent;\n\n @Input()\n showMarkUp = true;\n\n @Input()\n useHtmlRaw = false;\n\n @Input()\n @Output()\n html: string = \"\";\n\n @Output()\n onHtmlChanged = new EventEmitter<string>();\n\n showSettingsButton = false;\n\n constructor(private readonly _clipboardService: ClipboardService,\n private readonly _snackBar: MatSnackBar,\n private readonly _cdref: ChangeDetectorRef,\n private readonly _dialog: MatDialog,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n @Inject(CrocoHtmlOptionsToken) options: CrocoHtmlOptions) {\n this.showSettingsButton = options.showSettingsButton;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if(changes['html'].currentValue !== changes['html'].previousValue) {\n this.recalculateBodyTags();\n }\n this._cdref.markForCheck();\n }\n\n ngAfterViewInit(): void {\n this.recalculateBodyTags();\n }\n\n ngAfterContentChecked(): void {\n this._cdref.detectChanges();\n }\n\n visualEditorRenderedHandler() {\n this.visualEditorRendered = true;\n this.recalculateBodyTags();\n }\n\n onHtmlChangedHandler(html: string) {\n this.html = html;\n this.onHtmlChanged.emit(html);\n this._cdref.markForCheck();\n }\n\n textAreaModelChangedHandler() {\n this.recalculateBodyTags();\n this.onHtmlChangedHandler(this.html);\n }\n\n recalculateBodyTags() {\n this.visualEditor.html = this.html;\n this.visualEditor.recalculateBodyTags();\n this._cdref.markForCheck();\n }\n\n copyMarkUp() {\n this._snackBar.open(\"Разметка скопирована в буфер обмена\", \"Закрыть\", { duration: 1500 });\n this._clipboardService.copy(this.html);\n }\n\n ngOnInit(): void {\n this.visualEditor.recalculateBodyTags();\n }\n\n openSettingsModal(): void {\n this._dialog\n .open(HtmlEditorSettingsModalComponent,\n {\n height: '300px',\n })\n .afterClosed()\n .subscribe((data: CrocoHtmlEditorFileOptions) => {\n if (!data) {\n return;\n }\n\n this._htmlSettingsService.set({\n usePrivateFiles: data.usePrivateFiles,\n applicationId: data.applicationId === '' ? null : data.applicationId,\n })\n })\n }\n}\n","<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 </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>Исходный код</mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\n placeholder=\"Исходный код\" [(ngModel)]=\"html\" (ngModelChange)=\"textAreaModelChangedHandler()\"></textarea>\n </mat-form-field>\n </div>\n }\n\n <button (click)=\"copyMarkUp()\" mat-raised-button color=\"primary\">\n Копировать разметку\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\" [isEditor]=\"true\">\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","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: 'tagToSpan',\n standalone: true\n})\nexport class TagToSpanPipe implements PipeTransform {\n transform(value: string[]): string {\n return value.map(x => (`<b>${x}</b>`)).join(' | ')\n }\n}","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { BodyTagsExtensions } from '../extensions/BodyTagsExtensions';\nimport { HtmlBodyTag } from '../models/models';\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n name: 'tohtmlbodytags',\n standalone: true\n})\nexport class ToHtmlBodyTagsPipe implements PipeTransform {\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n transform(value: string): HtmlBodyTag[] {\n return BodyTagsExtensions.getBodyTags(value, this._options);\n }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { HtmlExtractionMethods } from '../extensions/HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n name: 'topreviewhtml',\n standalone: true\n})\nexport class ToPreviewHtmlPipe implements PipeTransform {\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n transform(value: string): InterfaceBlock[] {\n return HtmlExtractionMethods.transformHtmlStringToBlocks(value, this._options);\n }\n}\n","import { CustomWidgetIconComponent, DefinedCustomEditorBlockComponent, DefinedCustomTagViewComponent, ImageEditorComponent } from \"./components\";\nimport { MainEditorBlockComponent } from \"./components\";\nimport { MainEditorComponent } from \"./components\";\nimport { TextEditorComponent } from \"./components\";\nimport { FileIdSelectComponent } from \"./components\";\nimport { XmlTagHeaderInnerTextViewComponent } from \"./components\";\nimport { XmlTagHeaderTextViewComponent } from \"./components\";\nimport { XmlTagHtmlViewComponent } from \"./components\";\nimport { XmlTagTextViewComponent } from \"./components\";\nimport { XmlTagViewComponent } from \"./components\";\nimport { CustomWidgetEditorComponent } from \"./components\";\nimport { VisualEditorComponent } from './components';\nimport { AddFilesBtnComponent } from './components';\nimport { XmlTagExternalVideoComponent } from \"./components\";\nimport { HtmlRawEditorComponent } from \"./components\";\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { TagToSpanPipe, ToHtmlBodyTagsPipe, ToPreviewHtmlPipe, ToPreviewPipe } from \"./pipes\";\nimport { FileImageTagViewComponent, AudioPlayerTagViewComponent, UploadFilesBtnComponent } from \"./components\";\nimport { HtmlRawViewComponent } from \"./components\";\nimport { HtmlViewComponent } from \"./components\";\nimport { XmlTagCustomWidgetComponent } from \"./components\";\n\nexport const EditorComponents = [\n MainEditorComponent,\n FileIdSelectComponent,\n TextEditorComponent,\n ImageEditorComponent,\n MainEditorBlockComponent,\n VisualEditorComponent,\n AddFilesBtnComponent,\n HtmlRawEditorComponent,\n CustomWidgetEditorComponent,\n DefinedCustomEditorBlockComponent,\n CustomWidgetIconComponent\n];\n\nexport const XmlComponents = [\n XmlTagViewComponent,\n XmlTagHtmlViewComponent,\n XmlTagTextViewComponent,\n XmlTagHeaderTextViewComponent,\n XmlTagHeaderInnerTextViewComponent,\n XmlTagExternalVideoComponent,\n HtmlRawViewComponent,\n FileImageTagViewComponent,\n AudioPlayerTagViewComponent,\n XmlTagCustomWidgetComponent,\n HtmlViewComponent,\n DefinedCustomTagViewComponent\n];\n\nexport const CrocoPipes = [\n TagToSpanPipe,\n ToPreviewPipe,\n ToHtmlBodyTagsPipe,\n ToPreviewHtmlPipe\n]\n\nexport const CrocoHtmlDeclarations = [\n UploadFilesBtnComponent,\n HtmlViewComponent,\n ...XmlComponents,\n ...EditorComponents,\n ...CrocoPipes\n]\n\nexport const MaterialModules = [\n MatBadgeModule,\n MatTableModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatSnackBarModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatMenuModule,\n MatCardModule,\n MatSelectModule,\n MatTooltipModule,\n MatCheckboxModule,\n MatChipsModule,\n MatListModule,\n MatButtonModule,\n MatInputModule,\n MatDialogModule,\n MatPaginatorModule,\n MatDatepickerModule,\n MatGridListModule,\n MatSlideToggleModule,\n MatTreeModule,\n MatNativeDateModule,\n MatAutocompleteModule,\n MatSidenavModule,\n MatIconModule,\n DragDropModule,\n MatButtonToggleModule\n];\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { CrocoHtmlDeclarations, MaterialModules } from \".\";\nimport {\n VkVideoPlayerComponent\n} from \"./components/editor/external-video-editor/vk-video-player/vk-video-player.component\";\nimport { ErrorBannerComponent } from \"./components/error-banner/error-banner.component\";\nimport {\n YoutubeVideoPlayerComponent\n} from \"./components/editor/external-video-editor/youtube-video-player/youtube-video-player.component\";\nimport { DownloadFileButtonEditorComponent } from \"./components/editor/download-file-button-editor/download-file-button-editor.component\";\nimport {\n XmlTagDownloadFileButtonComponent\n} from \"./components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component\";\n\n@NgModule({\n exports: [\n ...CrocoHtmlDeclarations,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgSelectModule,\n ...MaterialModules,\n ErrorBannerComponent,\n VkVideoPlayerComponent,\n YoutubeVideoPlayerComponent,\n DownloadFileButtonEditorComponent,\n XmlTagDownloadFileButtonComponent,\n ...CrocoHtmlDeclarations\n ]\n})\nexport class CrocoHtmlModule { }\n","/*\n * Public API Surface of croco-html\n */\n\nexport * from './lib/components';\nexport * from './lib/pipes';\nexport * from './lib/extensions';\nexport * from './lib/croco-html.module';\nexport * from './lib/models';\nexport * from './lib/consts';\nexport * from './lib/services';\nexport * from './lib/options'\nexport * from './lib/tag-services'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PublicFileUploadService","i2.PrivateFileUploadService","i3.CrocoHtmlFileOptionsService","i1.PublicFilesQueryService","i2.PrivateFilesQueryService","i4.CommonFileInfoQueryService","i5","i1.CommonFileInfoQueryService","i1","i1.BlobCreateService","i2","i1.HtmlViewController","i3","i1.ScreenWidthService","MatFormField","MatLabel","i6","i7","i30.UploadFilesBtnComponent","i31.HtmlViewComponent","i32.XmlTagViewComponent","i33.XmlTagHtmlViewComponent","i34.XmlTagTextViewComponent","i35.XmlTagHeaderTextViewComponent","i36.XmlTagHeaderInnerTextViewComponent","i37.XmlTagExternalVideoComponent","i38.HtmlRawViewComponent","i39.FileImageTagViewComponent","i40.AudioPlayerTagViewComponent","i41.XmlTagCustomWidgetComponent","i42.DefinedCustomTagViewComponent","i43.MainEditorComponent","i44.FileIdSelectComponent","i45.TextEditorComponent","i46.ImageEditorComponent","i47.MainEditorBlockComponent","i48.VisualEditorComponent","i49.AddFilesBtnComponent","i50.HtmlRawEditorComponent","i51.CustomWidgetEditorComponent","i52.DefinedCustomEditorBlockComponent","i53.CustomWidgetIconComponent","i54.TagToSpanPipe","i55.ToPreviewPipe","i56.ToHtmlBodyTagsPipe","i57.ToPreviewHtmlPipe"],"mappings":"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"}
1
+ {"version":3,"file":"croco-html.mjs","sources":["../../../projects/croco-html/src/lib/extensions/AngularMaterialTableMethods.ts","../../../projects/croco-html/src/lib/extensions/AudioMethods.ts","../../../projects/croco-html/src/lib/extensions/HtmlExtractionMethods.ts","../../../projects/croco-html/src/lib/extensions/ImageMethods.ts","../../../projects/croco-html/src/lib/tag-services/FileImageTagService.ts","../../../projects/croco-html/src/lib/tag-services/TextTagHtmlMarkupTagService.ts","../../../projects/croco-html/src/lib/tag-services/ExternalVideoTagService.ts","../../../projects/croco-html/src/lib/tag-services/HtmlRawTagService.ts","../../../projects/croco-html/src/lib/tag-services/DownloadButtonTagService.ts","../../../projects/croco-html/src/lib/tag-services/ButtonTagService.ts","../../../projects/croco-html/src/lib/tag-services/CustomWidgetTagService.ts","../../../projects/croco-html/src/lib/tag-services/TagBuildExtensions.ts","../../../projects/croco-html/src/lib/tag-services/LinkTagService.ts","../../../projects/croco-html/src/lib/extensions/TextMethods.ts","../../../projects/croco-html/src/lib/extensions/VideoMethods.ts","../../../projects/croco-html/src/lib/extensions/Tags.ts","../../../projects/croco-html/src/lib/tag-services/FileAudioTagService.ts","../../../projects/croco-html/src/lib/extensions/TextSimpleMethods.ts","../../../projects/croco-html/src/lib/extensions/BootstrapTableMethods.ts","../../../projects/croco-html/src/lib/extensions/TableMethods.ts","../../../projects/croco-html/src/lib/tag-services/TableTagService.ts","../../../projects/croco-html/src/lib/extensions/BodyTagsExtensions.ts","../../../projects/croco-html/src/lib/extensions/XmlExtensions.ts","../../../projects/croco-html/src/lib/extensions/TableBuilder.ts","../../../projects/croco-html/src/lib/services/PublicFileUploadService.ts","../../../projects/croco-html/src/lib/services/PrivateFileUploadService.ts","../../../projects/croco-html/src/lib/services/CrocoHtmlFileOptionsService.ts","../../../projects/croco-html/src/lib/components/upload-files-btn/upload-files-btn.component.ts","../../../projects/croco-html/src/lib/components/upload-files-btn/upload-files-btn.component.html","../../../projects/croco-html/src/lib/components/add-files-btn/add-files-btn.component.ts","../../../projects/croco-html/src/lib/components/add-files-btn/add-files-btn.component.html","../../../projects/croco-html/src/lib/services/file-models.ts","../../../projects/croco-html/src/lib/services/PublicFilesQueryService.ts","../../../projects/croco-html/src/lib/services/PrivateFilesQueryService.ts","../../../projects/croco-html/src/lib/services/CommonFileInfoQueryService.ts","../../../projects/croco-html/src/lib/components/editor/audio-editor/audio-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/audio-editor/audio-editor.component.html","../../../projects/croco-html/src/lib/consts/index.ts","../../../projects/croco-html/src/lib/components/xml-tags/audio-player-tag-view/audio-player-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/audio-player-tag-view/audio-player-tag-view.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/youtube-video-player/youtube-video-player.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/vk-video-player/vk-video-player.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/embedded-video/code-video.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/embedded-video/code-video.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-external-video/xml-tag-external-video.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-header-text-view/xml-tag-header-text-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-html-view/xml-tag-html-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-text-view/xml-tag-text-view.component.html","../../../projects/croco-html/src/lib/services/blob-create.service.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component.html","../../../projects/croco-html/src/lib/components/error-banner/error-banner.component.ts","../../../projects/croco-html/src/lib/components/error-banner/error-banner.component.html","../../../projects/croco-html/src/lib/services/screen-width.service.ts","../../../projects/croco-html/src/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/file-image-tag-view/file-image-tag-view.component.html","../../../projects/croco-html/src/lib/components/xml-tags/html-raw-view/html-raw-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/html-raw-view/html-raw-view.component.html","../../../projects/croco-html/src/lib/services/HtmlViewController.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-button/xml-tag-button.component.html","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-custom-widget/xml-tag-custom-widget.component.html","../../../projects/croco-html/src/lib/components/editor/link-editor/link-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/link-editor/link-editor.component.html","../../../projects/croco-html/src/lib/components/editor/html-raw-editor/html-raw-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/html-raw-editor/html-raw-editor.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/DefaultTags.ts","../../../projects/croco-html/src/lib/components/xml-tags/defined-custom-tag-view/defined-custom-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/defined-custom-tag-view/defined-custom-tag-view.component.html","../../../projects/croco-html/src/lib/services/HtmlPageDataController.ts","../../../projects/croco-html/src/lib/services/loggers/NullVisualEditorLogger.ts","../../../projects/croco-html/src/lib/services/loggers/ConsoleVisualEditorLogger.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.ts","../../../projects/croco-html/src/lib/components/xml-tags/xml-tag-view/xml-tag-view.component.html","../../../projects/croco-html/src/lib/components/editor/external-video-editor/external-video-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/external-video-editor/external-video-editor.component.html","../../../projects/croco-html/src/lib/components/file-id-select/file-id-select.component.ts","../../../projects/croco-html/src/lib/components/file-id-select/file-id-select.component.html","../../../projects/croco-html/src/lib/components/editor/image-editor/image-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/image-editor/image-editor.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/DefaultAligments.ts","../../../projects/croco-html/src/lib/components/editor/download-file-button-editor/download-file-button-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/download-file-button-editor/download-file-button-editor.component.html","../../../projects/croco-html/src/lib/components/editor/text-editor/text-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/text-editor/text-editor.component.html","../../../projects/croco-html/src/lib/components/editor/button-editor/button-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/button-editor/button-editor.component.html","../../../projects/croco-html/src/lib/components/editor/custom-widget-editor/custom-widget-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/custom-widget-editor/custom-widget-editor.component.html","../../../projects/croco-html/src/lib/models/editor-models.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/components/defined-custom-editor-block/defined-custom-editor-block.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/components/defined-custom-editor-block/defined-custom-editor-block.component.html","../../../projects/croco-html/src/lib/components/editor/main-editor-block/main-editor-block.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor-block/main-editor-block.component.html","../../../projects/croco-html/src/lib/pipes/sprite-icon-path.pipe.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/components/custom-widget-icon/custom-widget-icon.component.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/components/custom-widget-icon/custom-widget-icon.component.html","../../../projects/croco-html/src/lib/components/editor/visual-editor/visual-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/visual-editor/visual-editor.component.html","../../../projects/croco-html/src/lib/pipes/to-preview.pipe.ts","../../../projects/croco-html/src/lib/components/html-view/html-view.component.ts","../../../projects/croco-html/src/lib/components/html-view/html-view.component.html","../../../projects/croco-html/src/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.ts","../../../projects/croco-html/src/lib/components/editor/html-editor-settings-modal/html-editor-settings-modal.component.html","../../../projects/croco-html/src/lib/components/editor/main-editor/main-editor.component.ts","../../../projects/croco-html/src/lib/components/editor/main-editor/main-editor.component.html","../../../projects/croco-html/src/lib/pipes/TagToSpanPipe.ts","../../../projects/croco-html/src/lib/pipes/ToHtmlBodyTagsPipe.ts","../../../projects/croco-html/src/lib/pipes/ToPreviewHtmlPipe.ts","../../../projects/croco-html/src/lib/index.ts","../../../projects/croco-html/src/lib/croco-html.module.ts","../../../projects/croco-html/src/public-api.ts","../../../projects/croco-html/src/croco-html.ts"],"sourcesContent":["import { BaseApiResponse } from '../models';\nimport { AngularMaterialTableData, TableHeaderData, TableRowData } from './TableMethods';\n\nexport class AngularMaterialTableMethods {\n static getAngularMaterialTableData(columns: string[], rows: TableRowData[]): AngularMaterialTableData {\n\n let data: object[] = [];\n\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row = rows[rowIndex];\n\n var elem = {};\n\n for (let columnIndex = 0; columnIndex < columns.length; columnIndex++) {\n const column = columns[columnIndex];\n\n elem[column] = row.columns[columnIndex].data.text;\n }\n\n data.push(elem);\n }\n\n return {\n displayedColumns: columns,\n data: data,\n };\n }\n\n static checkHeaders(header: TableHeaderData): BaseApiResponse {\n if (header === null) {\n return {\n isSucceeded: false,\n message: \"Необходимо указать заголовок таблицы\"\n };\n }\n\n let columns: string[] = header.columns;\n\n var uniqueDislayedColumns = columns.filter((v, i, a) => a.indexOf(v) === i);\n\n if (uniqueDislayedColumns.length !== columns.length) {\n return {\n isSucceeded: false,\n message: \"Ошибка при обработке разметки таблицы. Обнаружены дубликаты заголовков.\"\n };\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n };\n }\n static checkAngularMaterialTableData(header: TableHeaderData, rows: TableRowData[], checkHeaders: boolean = true): BaseApiResponse {\n\n if (checkHeaders) {\n var checkHeadersResult = this.checkHeaders(header);\n\n if (!checkHeadersResult.isSucceeded) {\n return checkHeadersResult;\n }\n }\n\n let columns: string[] = header.columns;\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n if (row.columns.length !== columns.length) {\n return {\n isSucceeded: false,\n message: `Ошибка при обработке разметки таблицы. `\n + `Количество колонок в каждой строке таблицы должно соотвествовать количеству колонок указанных в заголовке. `\n + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а должно быть ${columns.length}.`\n };\n }\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n };\n }\n}\n","export class FileAudioTagDataConsts {\n static readonly TagName = \"audio-player\";\n static readonly FileIdAttrName = \"file-id\";\n static readonly TitleAttrName = \"title\";\n}\n\nexport class AudioMethods {\n\n public static buildUrl(fileId: string, fileName: string): string {\n //TODO заглушка, пока юзаем статичный фапйл\n if (fileId && fileId !== '') {\n if (!isNaN(Number(fileId))) {\n return `/api/PrivateFiles/GetFile?fileId=${fileId}`;\n } else {\n return `/api/PublicFiles/GetFile?fileId=${fileId}`;\n }\n }\n\n if (fileName && fileName !== '') {\n return fileName;\n }\n\n return null;\n }\n\n public static isPrivateFileId(fileId: string): boolean {\n return !isNaN(Number(fileId));\n }\n\n public static formatTime(seconds: number): string {\n if (isNaN(seconds) || seconds < 0) {\n return '0:00';\n }\n\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n\n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n }\n\n public static calculateProgress(currentTime: number, duration: number): number {\n if (duration === 0 || isNaN(duration) || isNaN(currentTime)) {\n return 0;\n }\n return Math.min(100, Math.max(0, (currentTime / duration) * 100));\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { BodyTagsExtensions } from \"./BodyTagsExtensions\";\n\nexport class HtmlExtractionMethods {\n\n static transformHtmlElementToBlocks(element: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock[] {\n const data: InterfaceBlock[] = [];\n\n for (let i = 0; i < element.children.length; i++) {\n\n const elem = element.children.item(i) as HTMLElement;\n const loweredTagName = elem.tagName.toLowerCase();\n\n if (BodyTagsExtensions.hasTagService(loweredTagName, options)) {\n const tagService = BodyTagsExtensions.getTagService(loweredTagName, options);\n\n const resultBlock = tagService.extractBlockFromHtmlElement(elem, options);\n data.push(resultBlock);\n }\n else {\n data.push({\n tagName: \"unsupported-tag\",\n data: {\n tagString: elem.outerHTML\n }\n });\n }\n }\n \n return data;\n }\n\n static transformHtmlStringToBlocks(value: string, options: CrocoHtmlOptions): InterfaceBlock[] {\n\n if (value === undefined || value === null) {\n return [];\n }\n\n value = value\n .replace('\\n', '')\n .replace('\\t', '');\n\n var div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return this.transformHtmlElementToBlocks(div, options);\n }\n}\n","import { ImageRestrictions, IImageMediaRequest } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\n\nexport class FileImageTagDataConsts {\n static readonly TagName = \"file-image\";\n static readonly FileIdAttrName = \"file-id\";\n static readonly ScreenMediaRequest = \"screen-media-request\";\n\n static readonly MaxScreenWidth = 'max-screen-width';\n static readonly MinScreenWidth = 'min-screen-width';\n static readonly MaxImageHeight = 'max-image-height';\n static readonly MaxImageWidth = 'max-image-width';\n\n static readonly DefaultValueForFileImage = \"max-screen-width:1200,min-screen-width:900,max-image-height:300;max-screen-width:900,min-screen-width:600,max-image-height:200\";\n}\n\nexport class ImageMethods {\n\n public static buildUrl(fileId: string, sizeType: string, options: CrocoHtmlOptions): string {\n\n if (fileId === null || fileId === undefined) {\n return null;\n }\n\n return options.imageOptions.sizeTypeAndFileIdImageUrlFormat\n .replace(\"{sizeType}\", sizeType)\n .replace(\"{fileId}\", fileId);\n }\n\n public static buildSmallUrl(fileId: string, options: CrocoHtmlOptions): string {\n return ImageMethods.buildUrl(fileId, \"Small\", options);\n }\n\n public static buildMediumUrl(fileId: string, options: CrocoHtmlOptions): string {\n return ImageMethods.buildUrl(fileId, \"Medium\", options);\n }\n\n public static isPrivateFileId(fileId: string): boolean {\n return !isNaN(Number(fileId));\n }\n\n public static mediaRequestStringToArrayParser = (data: string) => {\n if (!data) {\n return [];\n }\n\n if (!data.length) {\n return []\n }\n\n return data.split(';').reduce((requests: IImageMediaRequest[], currentValue: string) => {\n\n const attrs = currentValue.split(',');\n\n requests.push({\n maxScreenWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxScreenWidth),\n minScreenWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MinScreenWidth),\n maxImageHeight: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxImageHeight),\n maxImageWidth: ImageMethods.createMediaRequestValue(attrs, FileImageTagDataConsts.MaxImageHeight)\n });\n\n return requests;\n }, [])\n }\n\n public static createMediaRequestValue(arr: string[], attribute: string): number | null {\n let elem = arr.find(el => el.includes(attribute));\n\n if (!elem) {\n return null;\n }\n\n return +elem.match(/\\d+/g).join('');\n }\n\n public static mediaRequestsArrayToString(data: IImageMediaRequest[]) {\n if (!data.length) {\n return ''\n }\n\n return data.map(el => ImageMethods.mediaRequestToString(el)).join(';')\n }\n\n public static mediaRequestToString(data: IImageMediaRequest) {\n let result = `${FileImageTagDataConsts.MaxScreenWidth}:${data.maxScreenWidth},${FileImageTagDataConsts.MinScreenWidth}:${data.minScreenWidth}`;\n\n if (data.maxImageHeight) {\n result += `,${FileImageTagDataConsts.MaxImageHeight}:${data.maxImageHeight}`;\n }\n\n if (data.maxImageWidth) {\n result += `,${FileImageTagDataConsts.MaxImageWidth}:${data.maxImageWidth}`;\n }\n\n return result;\n }\n\n public static getImageRestrictionsByScreenSize(screenSize: number, requests: IImageMediaRequest[]): ImageRestrictions {\n let result = requests\n .sort((a, b) => b.maxScreenWidth - a.maxScreenWidth)\n .find(el => screenSize <= +el.maxScreenWidth && screenSize >= +el.minScreenWidth);\n\n if (!result) {\n return {\n maxWidth: null,\n maxHeight: null,\n };\n }\n\n return {\n maxHeight: result.maxImageHeight,\n maxWidth: result.maxImageWidth\n };\n }\n}\n","import { FileImageTagDataConsts, ImageMethods } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag, FileImageTagData } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\n\nexport class FileImageTagService implements IMarkUpTagService {\n tagName: string = FileImageTagDataConsts.TagName;\n shortDescription: string = \"Изображение\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n let fileIdAttr = \"\";\n let screenMediaRequestAttr = \"\";\n\n if (bodyTag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName) && bodyTag.attributes[FileImageTagDataConsts.FileIdAttrName]) {\n fileIdAttr = `${FileImageTagDataConsts.FileIdAttrName}=\"${bodyTag.attributes[FileImageTagDataConsts.FileIdAttrName]}\"`;\n }\n\n if (bodyTag.attributes.hasOwnProperty(FileImageTagDataConsts.ScreenMediaRequest) && bodyTag.attributes[FileImageTagDataConsts.ScreenMediaRequest]) {\n screenMediaRequestAttr = ` ${FileImageTagDataConsts.ScreenMediaRequest}=\"${bodyTag.attributes[FileImageTagDataConsts.ScreenMediaRequest]}\"`;\n }\n \n return `<${FileImageTagDataConsts.TagName} ${fileIdAttr}${screenMediaRequestAttr}></${FileImageTagDataConsts.TagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n let fileId = elem.getAttribute(FileImageTagDataConsts.FileIdAttrName);\n\n let src = ImageMethods.buildMediumUrl(fileId, options);\n\n return {\n tagName: FileImageTagDataConsts.TagName,\n data: {\n src,\n fileId: fileId,\n screenMediaRequest: elem.getAttribute(FileImageTagDataConsts.ScreenMediaRequest)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as FileImageTagData;\n\n let attrs = {};\n\n if (fileData.fileId) {\n attrs[FileImageTagDataConsts.FileIdAttrName] = fileData.fileId;\n }\n\n if (fileData.screenMediaRequest) {\n attrs[FileImageTagDataConsts.ScreenMediaRequest] = fileData.screenMediaRequest;\n }\n\n return {\n tagDescription: {\n tag: FileImageTagDataConsts.TagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [FileImageTagDataConsts.FileIdAttrName]: null,\n [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n },\n innerHtml: \"\",\n }\n }\n}\n","import { TextSimpleMethods, SimpleTextTagData, BodyTagsExtensions } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"../tag-services/IMarkUpTagService\";\n\nexport enum TextAlignment {\n Left = 'left',\n Center = 'center',\n Right = 'right',\n}\n\nexport class TextTagDataConsts {\n static readonly HAlign = \"h-align\";\n}\n\nexport class TextTagHtmlMarkupTagService implements IMarkUpTagService {\n\n constructor(tagName: string, shortDescription: string) {\n this.tagName = tagName;\n this.shortDescription = shortDescription;\n }\n\n tagName: string = \"text\";\n shortDescription: string = \"T\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName} h-align=\"${bodyTag.attributes[TextTagDataConsts.HAlign]}\">${bodyTag.innerHtml}</${this.tagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return TextSimpleMethods.extractTextTag(elem);\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let textTagData = data.data as SimpleTextTagData;\n\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: { [TextTagDataConsts.HAlign]: textTagData.horizontalAlignment },\n innerHtml: BodyTagsExtensions.sanitizeInnerHtml(textTagData.html)\n };\n }\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [TextTagDataConsts.HAlign]: TextAlignment.Left\n },\n innerHtml: \"\",\n }\n }\n}\n","import { ExternalVideoTagDataConsts, ExternalVideoSupportedTypes } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nconst defaultLinkYouTube = \"https://www.youtube.com/embed/4CtSAnJDfsI?si=scyBNJa0Hs2t5aLE\";\nconst defaultLinkVk = \"https://vk.com/video_ext.php?oid=-22822305&id=456241864&hd=2\";\n\nexport class ExternalVideoTagService implements IMarkUpTagService {\n tagName: string = ExternalVideoTagDataConsts.TagName;\n shortDescription: string = \"Видео\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n let useResponsiveWrapperAttr = '';\n\n if (bodyTag.attributes[ExternalVideoTagDataConsts.VideoTypeAttrName] === ExternalVideoSupportedTypes.Code) {\n useResponsiveWrapperAttr = `${ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName}=\"${bodyTag.attributes[ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName] || false}\"`;\n }\n\n return `<${bodyTag.tagDescription.tag} ${useResponsiveWrapperAttr} type=\"${bodyTag.attributes[ExternalVideoTagDataConsts.VideoTypeAttrName]}\" link=\"${bodyTag.attributes[ExternalVideoTagDataConsts.LinkAttrName]}\">${bodyTag.innerHtml}</${bodyTag.tagDescription.tag}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: ExternalVideoTagDataConsts.TagName,\n data: {\n type: elem.getAttribute(ExternalVideoTagDataConsts.VideoTypeAttrName),\n link: elem.getAttribute(ExternalVideoTagDataConsts.LinkAttrName),\n useResponsiveWrapper: elem.getAttribute(ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName) !== 'false',\n innerHtml: elem.innerHTML\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as ExternalVideoTagDataConsts;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: fileData,\n innerHtml: data.data.type === ExternalVideoSupportedTypes.Code ? data.data.innerHtml : ''\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n\n let attrs = {\n };\n\n let innerHtml = \"\";\n\n attrs[ExternalVideoTagDataConsts.VideoTypeAttrName] = props.selectedVideoPlayer;\n attrs[ExternalVideoTagDataConsts.UseResponsiveWrapperAttrName] = false;\n attrs[ExternalVideoTagDataConsts.LinkAttrName] = props.selectedVideoPlayer === ExternalVideoSupportedTypes.Code ? '' :\n props.selectedVideoPlayer === ExternalVideoSupportedTypes.VkVideo\n ? defaultLinkVk\n : defaultLinkYouTube;\n\n if (props.selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n innerHtml = props.htmlRaw;\n }\n\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: innerHtml,\n };\n }\n}\n","import { BodyTagsExtensions } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class HtmlRawTagDataConsts {\n static readonly TagName = \"html-raw\";\n}\n\nexport interface HtmlRawTag {\n type: string;\n data: HtmlRawTagData;\n}\n\nexport interface HtmlRawTagData {\n innerHTML: string;\n}\n\n\nexport class HtmlRawTagService implements IMarkUpTagService {\n\n tagName: string = HtmlRawTagDataConsts.TagName;\n shortDescription: string = \"Разметка\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName}>${bodyTag.innerHtml}</${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: HtmlRawTagDataConsts.TagName,\n data: {\n innerHTML: elem.innerHTML\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n return {\n tagDescription: {\n tag: HtmlRawTagDataConsts.TagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {},\n innerHtml: BodyTagsExtensions.sanitizeInnerHtml(data.data[\"innerHTML\"])\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { ButtonTagDataConsts } from \"./ButtonTagService\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nconst defaultLinkForDownload = \"https://storage.yandexcloud.net/mega-academy/presentation.pdf\";\n\nexport class DownloadButtonTagDataConsts {\n static readonly TagName = \"download-file-button\";\n static readonly TitleAttrName = \"title\";\n static readonly LinkAttrName = \"link\";\n}\n\nexport interface DownloadButtonTag {\n type: string;\n data: DownloadButtonTagData;\n}\n\nexport interface DownloadButtonTagData {\n title: string;\n link: string;\n}\n\nexport class DownloadButtonTagService implements IMarkUpTagService {\n tagName: string = DownloadButtonTagDataConsts.TagName;\n shortDescription: string = \"Кнопка для скачивания\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName} title=\"${bodyTag.attributes[DownloadButtonTagDataConsts.TitleAttrName]}\" link=\"${bodyTag.attributes[DownloadButtonTagDataConsts.LinkAttrName]}\"></${this.tagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: DownloadButtonTagDataConsts.TagName,\n data: {\n title: elem.getAttribute(DownloadButtonTagDataConsts.TitleAttrName),\n link: elem.getAttribute(DownloadButtonTagDataConsts.LinkAttrName)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as ButtonTagDataConsts;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: fileData,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [DownloadButtonTagDataConsts.LinkAttrName]: defaultLinkForDownload,\n [DownloadButtonTagDataConsts.TitleAttrName]: 'Скачать'\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class ButtonTagDataConsts {\n static readonly TagName = \"button\";\n static readonly TextAttrName = \"text\";\n static readonly TypeAttrName = \"type\";\n static readonly ClickAttrName = \"click\";\n}\n\nexport interface ButtonTag {\n type: string;\n data: ButtonTagData;\n}\n\n\nexport interface ButtonTagData {\n text: string;\n type: string;\n click: string;\n}\n\nexport class ButtonTagService implements IMarkUpTagService {\n tagName: string = ButtonTagDataConsts.TagName;\n shortDescription: string = \"Кнопка\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n let atts = bodyTag.attributes;\n\n return `<${this.tagName} text=\"${atts[ButtonTagDataConsts.TextAttrName]}\" type=\"${atts[ButtonTagDataConsts.TypeAttrName]}\" click=\"${atts[ButtonTagDataConsts.ClickAttrName]}\"></${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: ButtonTagDataConsts.TagName,\n data: {\n text: elem.getAttribute(ButtonTagDataConsts.TextAttrName),\n type: elem.getAttribute(ButtonTagDataConsts.TypeAttrName),\n click: elem.getAttribute(ButtonTagDataConsts.ClickAttrName)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let fileData = data.data as ButtonTagDataConsts;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: fileData,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [ButtonTagDataConsts.ClickAttrName]: '',\n [ButtonTagDataConsts.TypeAttrName]: 'button',\n [ButtonTagDataConsts.TextAttrName]: 'Кнопка'\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class CustomWidgetTagDataConsts {\n static readonly TagName = \"custom-widget\";\n\n static readonly TypeAttrName = \"type\";\n static readonly DataIdAttrName = \"data-id\";\n static readonly WidgetIdAttrName = \"widget-id\";\n}\n\nexport interface CustomWidgetTag {\n type: string;\n data: CustomWidgetTagData;\n}\n\nexport interface CustomWidgetTagData {\n type: string;\n dataId: string;\n widgetId: string;\n}\n\n\nexport class CustomWidgetTagService implements IMarkUpTagService {\n tagName: string = CustomWidgetTagDataConsts.TagName;\n shortDescription: string = \"Виджет\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n let attrs = bodyTag.attributes;\n\n return `<${this.tagName} type=\"${attrs[CustomWidgetTagDataConsts.TypeAttrName]}\" data-id=\"${attrs[CustomWidgetTagDataConsts.DataIdAttrName]}\" widget-id=\"${attrs[CustomWidgetTagDataConsts.WidgetIdAttrName]}\"></${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return {\n tagName: CustomWidgetTagDataConsts.TagName,\n data: {\n type: elem.getAttribute(CustomWidgetTagDataConsts.TypeAttrName),\n dataId: elem.getAttribute(CustomWidgetTagDataConsts.DataIdAttrName),\n widgetId: elem.getAttribute(CustomWidgetTagDataConsts.WidgetIdAttrName)\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let customWidgetTagData = data.data as CustomWidgetTagData;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: customWidgetTagData,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [CustomWidgetTagDataConsts.TypeAttrName]: 'example-type',\n [CustomWidgetTagDataConsts.DataIdAttrName]: 'example-data-id',\n [CustomWidgetTagDataConsts.WidgetIdAttrName]: 'example-widget-id'\n },\n innerHtml: props.htmlRaw,\n };\n }\n\n static ExtractCustomWidgetTagData(attributes: any): CustomWidgetTagData {\n return {\n type: attributes[CustomWidgetTagDataConsts.TypeAttrName],\n dataId: attributes[CustomWidgetTagDataConsts.DataIdAttrName],\n widgetId: attributes[CustomWidgetTagDataConsts.WidgetIdAttrName]\n }\n }\n\n static ExtractCustomWidgetAttributes(customWidgetTagData: CustomWidgetTagData) {\n return {\n [CustomWidgetTagDataConsts.TypeAttrName]: customWidgetTagData.type,\n [CustomWidgetTagDataConsts.DataIdAttrName]: customWidgetTagData.dataId,\n [CustomWidgetTagDataConsts.WidgetIdAttrName]: customWidgetTagData.widgetId\n }\n }\n}\n","import { HtmlBodyTag } from \"../models\";\n\n\nexport class TagBuildExtensions {\n static buildTagString(bodyTag: HtmlBodyTag, attrs: { [name: string]: { defaultValue: string; }; }): string {\n\n const tagName = bodyTag.tagDescription.tag;\n\n const attrValStrs: string[] = [];\n\n Object.keys(attrs).forEach(attributeName => {\n const attrDescription = attrs[attributeName];\n\n let attrVal = bodyTag.attributes[attributeName];\n\n if (attrVal === undefined) {\n attrVal = attrDescription.defaultValue;\n }\n\n const attrValStr = (attrVal === undefined || attrVal === null)\n ? null\n : `${attributeName}=\"${attrVal}\"`;\n\n if (attrValStr) {\n attrValStrs.push(attrValStr);\n }\n });\n\n const attrStr = attrValStrs.length > 0\n ? \" \" + attrValStrs.join(\" \")\n : \"\";\n\n return `<${tagName}${attrStr}></${tagName}>`;\n }\n}\n","import { HtmlBodyTag, InterfaceBlock } from \"../models\"\nimport { CrocoHtmlOptions } from \"../options\"\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\"\nimport { TagBuildExtensions } from \"./TagBuildExtensions\"\n\nexport class LinkTagConsts {\n static readonly TagName = \"croco-link\"\n}\n\nexport class LinkTagAttrs {\n static readonly FileId = \"file-id\"\n\n static readonly Url = \"url\"\n\n static readonly Title = \"title\"\n\n static readonly Type = \"type\"\n}\n\nexport interface LinkTagData {\n url: string;\n title: string;\n type: string;\n fileId: string;\n}\n\nexport class LinkTagService implements IMarkUpTagService {\n\n tagName: string = LinkTagConsts.TagName;\n shortDescription: string = \"Ссылка\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n\n return TagBuildExtensions.buildTagString(bodyTag, {\n [LinkTagAttrs.Url]: { defaultValue: \"\" },\n [LinkTagAttrs.Title]: { defaultValue: \"\" },\n [LinkTagAttrs.Type]: { defaultValue: null }\n })\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, _: CrocoHtmlOptions): InterfaceBlock {\n\n const data: LinkTagData = {\n url: elem.getAttribute(LinkTagAttrs.Url),\n title: elem.getAttribute(LinkTagAttrs.Title),\n type: elem.getAttribute(LinkTagAttrs.Type),\n fileId: elem.getAttribute(LinkTagAttrs.FileId),\n };\n\n return {\n tagName: this.tagName,\n data\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let tagData: LinkTagData = data.data;\n\n const attrs = {\n [LinkTagAttrs.Url]: tagData.url,\n [LinkTagAttrs.Type]: tagData.type,\n [LinkTagAttrs.FileId]: tagData.fileId,\n [LinkTagAttrs.Title]: tagData.title\n };\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [LinkTagAttrs.Title]: 'Презентация',\n [LinkTagAttrs.Url]: 'https://storage.yandexcloud.net/mega-academy/presentation.pdf',\n [LinkTagAttrs.Type]: 'pdf'\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n\n","export class TextTags {\n\n public static readonly text = \"text\";\n\n public static readonly h1 = \"h1\";\n\n public static readonly h2 = \"h2\";\n\n public static readonly h3 = \"h3\";\n\n public static readonly h4 = \"h4\";\n\n public static readonly h5 = \"h5\";\n\n public static readonly h6 = \"h6\";\n\n public static headerTextTags = [TextTags.h1, TextTags.h2, TextTags.h3, TextTags.h4, TextTags.h5, TextTags.h6];\n\n public static allTextTags = [TextTags.text, ...TextTags.headerTextTags];\n\n}\n","export class ExternalVideoTagDataConsts {\n static readonly TagName = \"external-video\";\n static readonly VideoTypeAttrName = \"type\";\n static readonly LinkAttrName = \"link\";\n static readonly UseResponsiveWrapperAttrName = \"use-responsive-wrapper\";\n static readonly IframeAttrName = \"iframe\";\n}\n\nexport class ExternalVideoSupportedTypes {\n static readonly Youtube = \"youtube\"\n static readonly VkVideo = \"vk-video\"\n static readonly Code = \"code\"\n}\n\nexport const ExternalVideoPlayers = [\n {\n type: ExternalVideoSupportedTypes.Code,\n displayValue: 'Встраиваемое Видео',\n },\n {\n type: ExternalVideoSupportedTypes.Youtube,\n displayValue: 'Youtube',\n },\n {\n type: ExternalVideoSupportedTypes.VkVideo,\n displayValue: 'Vk Video',\n }\n]\n\nexport interface ExternalVideoTag {\n type: string;\n data: ExternalVideoTagData;\n}\n\nexport interface ExternalVideoTagData {\n type: string;\n link: string;\n innerHtml: string;\n useResponsiveWrapper: boolean;\n}\n","import { HtmlRawTagDataConsts } from \"../tag-services\";\nimport { CustomWidgetTagDataConsts } from \"../tag-services/CustomWidgetTagService\";\nimport { FileImageTagDataConsts } from \"./ImageMethods\";\nimport { TextTags } from \"./TextMethods\";\nimport { ExternalVideoTagDataConsts } from \"./VideoMethods\";\n\nexport class Tags {\n public static readonly Text = TextTags.text;\n public static readonly H1 = TextTags.h1;\n public static readonly H2 = TextTags.h2;\n public static readonly H3 = TextTags.h3;\n public static readonly H4 = TextTags.h4;\n public static readonly H5 = TextTags.h5;\n public static readonly H6 = TextTags.h6;\n\n public static readonly HtmlRaw = HtmlRawTagDataConsts.TagName;\n public static readonly FileImage = FileImageTagDataConsts.TagName;\n public static readonly Table = 'table';\n public static readonly RichText = 'rich-text';\n public static readonly ExternalVideo = ExternalVideoTagDataConsts.TagName;\n public static readonly UnsupportedTag = 'unsupported-tag';\n public static readonly CustomWidget = CustomWidgetTagDataConsts.TagName;\n}\n","import { FileAudioTagDataConsts, AudioMethods } from \"../extensions/AudioMethods\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag, FileAudioTagData } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\n\nexport class FileAudioTagService implements IMarkUpTagService {\n tagName: string = FileAudioTagDataConsts.TagName;\n shortDescription: string = \"Аудио\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n let fileIdAttr = \"\";\n let titleAttr = \"\";\n\n if (bodyTag.attributes.hasOwnProperty(FileAudioTagDataConsts.FileIdAttrName) &&\n bodyTag.attributes[FileAudioTagDataConsts.FileIdAttrName]) {\n fileIdAttr = `${FileAudioTagDataConsts.FileIdAttrName}=\"${bodyTag.attributes[FileAudioTagDataConsts.FileIdAttrName]}\"`;\n }\n\n if (bodyTag.attributes.hasOwnProperty(FileAudioTagDataConsts.TitleAttrName) &&\n bodyTag.attributes[FileAudioTagDataConsts.TitleAttrName]) {\n titleAttr = `${FileAudioTagDataConsts.TitleAttrName}=\"${bodyTag.attributes[FileAudioTagDataConsts.TitleAttrName]}\"`;\n }\n\n return `<${FileAudioTagDataConsts.TagName} ${fileIdAttr} ${titleAttr}></${FileAudioTagDataConsts.TagName}>`;\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, _: CrocoHtmlOptions): InterfaceBlock {\n let fileId = elem.getAttribute(FileAudioTagDataConsts.FileIdAttrName);\n let title = elem.getAttribute(FileAudioTagDataConsts.TitleAttrName);\n\n return {\n tagName: FileAudioTagDataConsts.TagName,\n data: {\n fileId: fileId,\n title: title\n }\n };\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n let fileData = data.data as FileAudioTagData;\n\n let attrs = {};\n\n if (fileData.fileId) {\n attrs[FileAudioTagDataConsts.FileIdAttrName] = fileData.fileId;\n }\n\n if (fileData.title) {\n attrs[FileAudioTagDataConsts.TitleAttrName] = fileData.title;\n }\n\n return {\n tagDescription: {\n tag: FileAudioTagDataConsts.TagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: attrs,\n innerHtml: \"\"\n };\n }\n\n getDefaultValue(): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n [FileAudioTagDataConsts.FileIdAttrName]: '',\n [FileAudioTagDataConsts.TitleAttrName]: ''\n },\n innerHtml: \"\",\n }\n }\n}\n","import { da, tr } from \"date-fns/locale\";\nimport { BaseApiResponse } from \"../models\";\nimport { TextAlignment } from \"../tag-services\";\n\nexport const TextTag = \"text\";\n\nexport interface GenericTextTag {\n tagName: string,\n data: SimpleTextTagData\n}\n\nexport interface IHorizontalAlignmentExtractionResult {\n succeeded: boolean;\n result: TextAlignment;\n errorMessage: string;\n}\n\nexport interface SimpleTextTagData {\n textTagName: string;\n text: string,\n html: string,\n horizontalAlignment: \"left\" | \"right\" | \"center\",\n validationResult: BaseApiResponse\n}\n\nexport class TextSimpleMethods {\n\n static supportedTags = [\"sup\", \"sub\", \"strong\", \"b\", \"i\", \"u\"];\n\n static extractTextTag(elem: HTMLElement): GenericTextTag {\n\n const hAlignExtractResult = this.extractHorizontalAlignment(elem);\n\n var data: SimpleTextTagData = {\n textTagName: elem.tagName.toLowerCase(),\n text: this.prepareText(elem.innerText),\n html: this.prepareText(elem.innerHTML),\n horizontalAlignment: hAlignExtractResult.result,\n validationResult: {\n isSucceeded: true,\n message: \"Ok\"\n }\n };\n\n if (!hAlignExtractResult.succeeded) {\n data.validationResult.isSucceeded = false;\n data.validationResult.message = hAlignExtractResult.errorMessage;\n }\n\n let result: GenericTextTag = {\n tagName: data.textTagName,\n data: data\n };\n\n var html = result.data.html;\n var htmlValidation = this.validateTextHtml(html);\n\n if (!htmlValidation.isSucceeded) {\n result.data.validationResult = htmlValidation;\n }\n\n return result;\n }\n\n static prepareText(s: string): string {\n s = s.trim().replace('\\n\\t', '');\n\n if (s === '\\n') {\n s = '';\n }\n\n return s;\n }\n\n static extractHorizontalAlignment(elem: HTMLElement): IHorizontalAlignmentExtractionResult {\n const hAlignValue = elem.getAttribute(\"h-align\") ?? TextAlignment.Left;\n\n const alignmentVals: string[] = [TextAlignment.Left, TextAlignment.Right, TextAlignment.Center];\n\n if (alignmentVals.indexOf(hAlignValue) < 0) {\n\n return {\n result: TextAlignment.Left,\n succeeded: false,\n errorMessage: `Недопустимое значение атрибута h-align. Допустимые значения: ${alignmentVals.join(', ')}. `\n + 'Данный тег можно не указывать, по-умолчанию будет применено выравнивание слева.'\n };\n }\n\n return {\n result: hAlignValue as TextAlignment,\n succeeded: true,\n errorMessage: \"\"\n };\n }\n\n static validateTextHtml(html: string): BaseApiResponse {\n\n var p = document.createElement(\"p\");\n p.innerHTML = html;\n\n for (let i = 0; i < p.children.length; i++) {\n const element = p.children.item(i);\n\n var validationResult = this.validateTag(element);\n\n if (!validationResult.isSucceeded) {\n return validationResult;\n }\n }\n\n return {\n isSucceeded: true,\n message: `Ok`\n }\n }\n\n static validateTag(element: Element): BaseApiResponse {\n let lowerTag = element.tagName.toLowerCase();\n\n if (!this.supportedTags.includes(lowerTag)) {\n return {\n isSucceeded: false,\n message: `Тег <${lowerTag}> не поддерживается внутри тега <text>`\n }\n }\n\n for (let i = 0; i < element.children.length; i++) {\n const nElement = element.children.item(i);\n\n var innerValidationResult = this.validateTag(nElement);\n\n if (!innerValidationResult.isSucceeded) {\n return innerValidationResult;\n }\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n };\n }\n}\n","import { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { FileImageTagDataConsts } from './ImageMethods';\nimport { TableHeaderData, TableRowData } from './TableMethods';\nimport { GenericTextTag, TextTag } from './TextSimpleMethods';\nimport { FileImageTag } from \"../models/image-models\";\n\nexport class BootstrapTableMethods {\n\n static buildTable(header: TableHeaderData, rows: TableRowData[]): string {\n let result = `<table class=\"table table-bordered\">`;\n result += this.buildHeader(header);\n result += this.buildBody(rows);\n result += \"</table>\";\n\n return result;\n }\n\n static buildHeader(data: TableHeaderData) {\n if (data === null) {\n return \"\";\n }\n\n let result = \"<thead>\";\n result += \"<tr>\";\n for (let index = 0; index < data.columns.length; index++) {\n result += `<th>${data.columns[index]}</th>`;\n }\n result += \"</tr>\";\n\n result += \"</thead>\";\n\n return result;\n }\n\n static buildBody(rows: TableRowData[]) {\n let result = \"<tbody>\";\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n result += \"<tr>\";\n for (let j = 0; j < row.columns.length; j++) {\n const col = row.columns[j];\n\n result += `<td class=\"align-middle\">${this.buildInnerTags(col.data.children)}</td>`;\n }\n result += \"</tr>\";\n }\n\n result += \"</tbody>\";\n return result;\n }\n\n static buildInnerTags(tags: InterfaceBlock[]) {\n let result = \"\";\n for (let i = 0; i < tags.length; i++) {\n result += this.buildInnerTag(tags[i]);\n }\n\n return result;\n }\n\n static buildInnerTag(data: InterfaceBlock): string {\n if (data.tagName === FileImageTagDataConsts.TagName) {\n let fileImageTag = data as FileImageTag;\n return `<img src=${fileImageTag.data.src} class=\"mx-auto d-block img-fluid\" />`;\n }\n else if (data.tagName === TextTag) {\n\n let simpleTextTag = data as GenericTextTag;\n\n var map = {\n [\"left\"]: \"text-start\",\n [\"center\"]: \"text-center\",\n [\"right\"]: \"text-end\"\n };\n\n if (!simpleTextTag.data.validationResult.isSucceeded) {\n return `<span>Ошибка в тексте ${simpleTextTag.data.validationResult.message}</span>`;\n }\n\n return `<div class=\"${map[simpleTextTag.data.horizontalAlignment]}\"><span>${simpleTextTag.data.html}</span></div>`;\n }\n else {\n return `<p>Тег ${data.tagName} не поддерживается</p>`;\n }\n }\n}\n","import { BaseApiResponse } from '../models';\nimport { CrocoHtmlOptions } from '../options';\nimport { AngularMaterialTableMethods } from './AngularMaterialTableMethods';\nimport { BootstrapTableMethods } from './BootstrapTableMethods';\nimport { HtmlExtractionMethods } from './HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { TextSimpleMethods } from './TextSimpleMethods';\nimport { TextTags } from './TextMethods';\n\nexport interface TableHeaderData {\n type: \"table-header\";\n columns: string[];\n}\n\nexport interface TableRowColumnData {\n type: \"table-row-column-data\";\n data: {\n text: string;\n children: InterfaceBlock[];\n }\n}\n\nexport interface TableRowData {\n type: \"table-row-column\";\n columns: TableRowColumnData[];\n}\n\nexport interface TableData {\n header: TableHeaderData;\n rows: TableRowData[];\n bootstrapHtml: string;\n html: string;\n angularMaterialTableDataCheck?: BaseApiResponse;\n}\n\nexport interface TableTagData {\n type: \"table\";\n data: TableData;\n}\n\nexport class TableTypes {\n static readonly TableRowColumnData = \"table-row-column-data\";\n static readonly Table = \"table\";\n static readonly TableRowColumn = \"table-row-column\";\n}\n\nexport interface AngularMaterialTableData {\n displayedColumns: string[];\n data: object[];\n}\n\nexport class TableMethods {\n\n static getTableFromHtmlTag(tableTag: HTMLTableElement, options: CrocoHtmlOptions): InterfaceBlock {\n\n const tableHeader = TableMethods.getHeader(tableTag);\n const tableRows = TableMethods.getTableRows(tableTag, options);\n\n let tableData: TableData = {\n header: tableHeader,\n rows: tableRows,\n bootstrapHtml: BootstrapTableMethods.buildTable(tableHeader, tableRows),\n html: tableTag.outerHTML,\n angularMaterialTableDataCheck: AngularMaterialTableMethods.checkAngularMaterialTableData(tableHeader, tableRows)\n };\n\n return {\n tagName: TableTypes.Table,\n data: tableData,\n validationResult: this.checkTable(tableData)\n };\n }\n\n static checkTable(tableData: TableData): BaseApiResponse {\n\n let rows = tableData.rows;\n\n let prevRowCount = -1;\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n\n if (row.columns.length !== prevRowCount && prevRowCount != -1) {\n return {\n isSucceeded: false,\n message: `Ошибка при обработке разметки таблицы. `\n + `Количество колонок в каждой строке таблицы должно соотвествовать друг другу. `\n + `В строке таблицы №${i + 1} количество колонок = ${row.columns.length}, а в строке выше ${prevRowCount}.`\n };\n }\n prevRowCount = row.columns.length;\n }\n\n return {\n isSucceeded: true,\n message: \"Ok\"\n }\n }\n\n\n static getHeader(tableTag: HTMLTableElement): TableHeaderData {\n let header = tableTag.tHead;\n\n if (header === null) {\n return null;\n }\n\n let tr = header.children.item(0);\n\n let headerColumns: string[] = [];\n\n for (let j = 0; j < tr.children.length; j++) {\n const jElement = tr.children.item(j) as HTMLElement;\n\n headerColumns.push(jElement.innerHTML);\n }\n\n return {\n type: \"table-header\",\n columns: headerColumns\n };\n }\n\n static getTableRows(tableTag: HTMLTableElement, options: CrocoHtmlOptions): Array<TableRowData> {\n let tBody = tableTag.tBodies.item(0);\n\n let rows: TableRowData[] = [];\n\n for (let i = 0; i < tBody.children.length; i++) {\n const iElement = tBody.children.item(i);\n\n let rowColumns: TableRowColumnData[] = [];\n\n for (let j = 0; j < iElement.children.length; j++) {\n const jElement = iElement.children.item(j) as HTMLElement;\n\n let children = HtmlExtractionMethods.transformHtmlElementToBlocks(jElement, options);\n\n if (children.length === 0) {\n var textTag = document.createElement(TextTags.text);\n textTag.innerHTML = jElement.innerHTML;\n\n var textElem = TextSimpleMethods.extractTextTag(textTag);\n\n children.push(textElem);\n }\n\n var result: TableRowColumnData = {\n type: TableTypes.TableRowColumnData,\n data: {\n text: jElement.innerHTML,\n children\n }\n };\n\n rowColumns.push(result);\n }\n\n rows.push({\n type: TableTypes.TableRowColumn,\n columns: rowColumns\n });\n }\n\n return rows;\n }\n}\n","import { TableData, TableMethods, TableTypes } from \"../extensions\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { HtmlBodyTag } from \"../models\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService, IVisualEditorProps } from \"./IMarkUpTagService\";\n\nexport class TableTagService implements IMarkUpTagService {\n tagName: string = TableTypes.Table;\n shortDescription: string = \"Таблица\";\n\n bodyTagToHtmlStringConverter(bodyTag: HtmlBodyTag): string {\n return `<${this.tagName}>${bodyTag.innerHtml}</${this.tagName}>`\n }\n\n extractBlockFromHtmlElement(elem: HTMLElement, options: CrocoHtmlOptions): InterfaceBlock {\n return TableMethods.getTableFromHtmlTag(elem as HTMLTableElement, options);\n }\n\n toBodyTag(data: InterfaceBlock): HtmlBodyTag {\n\n let tableData = data.data as TableData;\n\n return {\n tagDescription: {\n tag: data.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: tableData,\n innerHtml: null\n };\n }\n\n getDefaultValue(props: IVisualEditorProps): HtmlBodyTag {\n return {\n tagDescription: {\n tag: this.tagName,\n displayValue: this.shortDescription,\n isCustom: false\n },\n attributes: {\n },\n innerHtml: props.htmlRaw,\n };\n }\n}\n","import { HtmlBodyTag } from \"../models/models\";\nimport { HtmlExtractionMethods } from \"./HtmlExtractionMethods\";\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { FileImageTagDataConsts } from \"./ImageMethods\";\nimport { FileAudioTagDataConsts } from \"./AudioMethods\";\nimport { Tags } from \"./Tags\";\nimport { ExternalVideoTagDataConsts } from \"./VideoMethods\";\nimport { CrocoHtmlOptions } from \"../options\";\nimport { IMarkUpTagService } from \"../tag-services/IMarkUpTagService\";\nimport { DownloadButtonTagDataConsts, DownloadButtonTagService, FileImageTagService, TextTagHtmlMarkupTagService } from \"../tag-services\";\nimport { FileAudioTagService } from \"../tag-services/FileAudioTagService\";\nimport { ExternalVideoTagService } from \"../tag-services/ExternalVideoTagService\";\nimport { HtmlRawTagDataConsts, HtmlRawTagService } from \"../tag-services/HtmlRawTagService\";\nimport { ButtonTagDataConsts, ButtonTagService } from \"../tag-services/ButtonTagService\";\nimport { TextTags } from \"./TextMethods\";\nimport { TableTypes } from \"./TableMethods\";\nimport { TableTagService } from \"../tag-services/TableTagService\";\nimport { LinkTagConsts, LinkTagService } from \"../tag-services/LinkTagService\";\n\nexport class BodyTagsExtensions {\n\n private static readonly _tagServices: { [id: string]: IMarkUpTagService; } = {\n [TextTags.text]: new TextTagHtmlMarkupTagService(\"text\", \"T\"),\n [TextTags.h1]: new TextTagHtmlMarkupTagService(\"h1\", \"H1\"),\n [TextTags.h2]: new TextTagHtmlMarkupTagService(\"h2\", \"H2\"),\n [TextTags.h3]: new TextTagHtmlMarkupTagService(\"h3\", \"H3\"),\n [TextTags.h4]: new TextTagHtmlMarkupTagService(\"h4\", \"H4\"),\n [TextTags.h5]: new TextTagHtmlMarkupTagService(\"h5\", \"H5\"),\n [TextTags.h6]: new TextTagHtmlMarkupTagService(\"h6\", \"H6\"),\n [FileImageTagDataConsts.TagName]: new FileImageTagService(),\n [FileAudioTagDataConsts.TagName]: new FileAudioTagService(),\n [ExternalVideoTagDataConsts.TagName]: new ExternalVideoTagService(),\n [HtmlRawTagDataConsts.TagName]: new HtmlRawTagService(),\n [DownloadButtonTagDataConsts.TagName]: new DownloadButtonTagService(),\n [ButtonTagDataConsts.TagName]: new ButtonTagService(),\n [TableTypes.Table]: new TableTagService(),\n [LinkTagConsts.TagName]: new LinkTagService()\n }\n\n public static hasTagService(tagName: string, options: CrocoHtmlOptions) {\n if (this._tagServices.hasOwnProperty(tagName)) {\n return true;\n }\n\n if (options.definedCustomTags.hasOwnProperty(tagName)){\n return true;\n }\n\n return false;\n }\n\n public static getTagService(tagName: string, options: CrocoHtmlOptions) {\n if (this._tagServices.hasOwnProperty(tagName)) {\n return this._tagServices[tagName];\n }\n\n return options.definedCustomTags[tagName];\n }\n\n static convertToHtmlString(bodyTag: HtmlBodyTag, options: CrocoHtmlOptions): string {\n const tagName = bodyTag.tagDescription.tag.toLowerCase();\n\n if (this.hasTagService(tagName, options)) {\n return this.getTagService(tagName, options).bodyTagToHtmlStringConverter(bodyTag);\n }\n\n return `<mapper-not-found>\"${tagName}\" тег не найден.</mapper-not-found>`;\n }\n\n static bodyTagsToHtml(bodyTags: HtmlBodyTag[], options: CrocoHtmlOptions): string {\n let htmls = bodyTags.map(bodyTag => (BodyTagsExtensions.convertToHtmlString(bodyTag, options)));\n\n let result = \"\";\n\n for (let index = 0; index < htmls.length; index++) {\n const element = htmls[index];\n\n result += element;\n }\n\n return result;\n }\n\n static getBodyTags(html: string, options: CrocoHtmlOptions) {\n let result = HtmlExtractionMethods.transformHtmlStringToBlocks(html, options);\n \n return result.map(x => BodyTagsExtensions.toBodyTag(x, options));\n }\n\n static sanitizeInnerHtml(html: string): string {\n return html.trim().replace('\\n\\t', '');\n }\n\n static toBodyTag(data: InterfaceBlock, options: CrocoHtmlOptions): HtmlBodyTag {\n\n const tagName = data.tagName;\n\n if (this.hasTagService(tagName, options)) {\n return this.getTagService(tagName, options).toBodyTag(data);\n }\n\n return {\n tagDescription: {\n tag: Tags.UnsupportedTag,\n displayValue: \"Неподдерживаемый тег\",\n isCustom: false\n },\n attributes: {},\n innerHtml: JSON.stringify(data)\n };\n }\n}\n","export class XmlExtensions{\n public static formatXml(xml:string, tab:string = '\\t'):string { // tab = optional indent value, default is tab (\\t)\n var formatted = '', indent= '';\n tab = tab || '\\t';\n xml.split(/>\\s*</).forEach(function(node) {\n if (node.match( /^\\/\\w/ )) indent = indent.substring(tab.length); // decrease indent by one 'tab'\n formatted += indent + '<' + node + '>\\r\\n';\n if (node.match( /^<?\\w[^>]*[^\\/]$/ )) indent += tab; // increase indent\n });\n return formatted.substring(1, formatted.length-3);\n }\n\n public static tagsToLower(xml: string): string{\n xml = this.replaceTagToLower(xml, \"Body\");\n xml = this.replaceTagToLower(xml, \"Image\");\n xml = this.replaceTagToLower(xml, \"Text\");\n\n return xml;\n }\n\n static replaceTagToLower(xml: string, tag: string) : string{\n return xml\n .replace(new RegExp(`<${tag}`, 'g'), `<${tag.toLowerCase()}`)\n .replace(new RegExp(`</${tag}>`, 'g'), `</${tag.toLowerCase()}>`);\n }\n}","import { XmlExtensions } from './XmlExtensions';\n\nexport class TableBuilder {\n static getTableMarkUp(rows: number, cols: number, generateHeaders: boolean): string {\n rows = +rows;\n cols = +cols;\n\n let result = \"<table>\";\n \n if(generateHeaders){\n result += TableBuilder.getTableHeaderMarkUp(cols);\n }\n \n result += TableBuilder.getTableBodyMarkUp(cols, rows);\n result += \"</table>\";\n\n return XmlExtensions.formatXml(result);\n }\n\n static getTableHeaderMarkUp(cols: number): string {\n\n let result = \"<thead><tr>\";\n\n for (let i = 0; i < cols; i++) {\n result += `<th>Колонка #${i + 1}</th>`;\n }\n\n result += \"</tr></thead>\";\n\n return result;\n }\n\n static getTableBodyMarkUp(cols: number, rows: number): string {\n\n let result = \"<tbody>\";\n\n for (let row = 0; row < rows; row++) {\n result += \"<tr>\";\n for (let i = 0; i < cols; i++) {\n\n result += `<td>Ряд№${row + 1} Колонка #${i + 1}</td>`;\n }\n result += \"</tr>\";\n }\n\n result += \"</tbody>\";\n\n return result;\n }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface UploadPublicFilesWithProgressEvent {\n loading: boolean;\n response?: PublicFilesUploadResponse;\n uploadingLoaded: number;\n uploadingTotal: number;\n}\n\nexport interface PublicFilesUploadResponse {\n succeeded: boolean; \n errorMessage: string; \n fileIds: Array<number>; \n filesUploadedEventId: string; \n}\n\n@Injectable({ providedIn: 'root' })\nexport class PublicFileUploadService {\n constructor(\n private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') private readonly baseUrl: string,\n ) {}\n\n public postFiles(files: FileList, applicationId: string | null): Observable<PublicFilesUploadResponse> {\n const formData: FormData = new FormData();\n\n for (let i = 0; i < files.length; i++) {\n var fileToUpload = files.item(i);\n formData.append(`fileKey${i}`, fileToUpload as Blob, fileToUpload?.name);\n }\n\n return this.postFilesInner(formData, applicationId);\n }\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: true,\n ): Observable<HttpEvent<PublicFilesUploadResponse>>;\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress?: false,\n ): Observable<PublicFilesUploadResponse>;\n \n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: boolean,\n ): Observable<PublicFilesUploadResponse> | Observable<HttpEvent<PublicFilesUploadResponse>>;\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress = false,\n ): Observable<PublicFilesUploadResponse> | Observable<HttpEvent<PublicFilesUploadResponse>> {\n let endpoint = this.baseUrl + `api/files/upload?executeHandlersNow=true`;\n\n if (applicationId) {\n endpoint += `&applicationId=${applicationId}`;\n }\n\n return this._httpClient.post<PublicFilesUploadResponse>(\n endpoint,\n formData,\n withProgress ? { reportProgress: true, observe: 'events' } : undefined,\n );\n }\n}\n","import { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface UploadPrivateFilesWithProgressEvent {\n loading: boolean;\n response?: PrivateFilesCreatedResult;\n uploadingLoaded: number;\n uploadingTotal: number;\n}\n\nexport interface PrivateFilesCreatedResult {\n succeeded: boolean;\n errorMessage: string;\n setId: string;\n fileIds: Array<string>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class PrivateFileUploadService {\n constructor(\n private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') private readonly baseUrl: string,\n ) {}\n\n public postFiles(files: FileList, applicationId: string | null): Observable<PrivateFilesCreatedResult> {\n const formData: FormData = new FormData();\n\n for (let i = 0; i < files.length; i++) {\n var fileToUpload = files.item(i);\n formData.append(`fileKey${i}`, fileToUpload as Blob, fileToUpload?.name);\n }\n\n return this.postFilesInner(formData, applicationId);\n }\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: true,\n ): Observable<HttpEvent<PrivateFilesCreatedResult>>;\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress?: false,\n ): Observable<PrivateFilesCreatedResult>;\n\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress: boolean,\n ): Observable<PrivateFilesCreatedResult> | Observable<HttpEvent<PrivateFilesCreatedResult>>;\n public postFilesInner(\n formData: FormData,\n applicationId: string | null,\n withProgress = false,\n ): Observable<PrivateFilesCreatedResult> | Observable<HttpEvent<PrivateFilesCreatedResult>> {\n let endpoint = this.baseUrl + `api/private-files/upload?executeHandlersNow=true`;\n\n if (applicationId) {\n endpoint += `&applicationId=${applicationId}`;\n }\n\n return this._httpClient.post<PrivateFilesCreatedResult>(\n endpoint,\n formData,\n withProgress ? { reportProgress: true, observe: 'events' } : undefined,\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { CrocoHtmlEditorFileOptions } from \"../options\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrocoHtmlFileOptionsService {\n private readonly localStorageToken = 'crocoHtmlEditorFileOptions'\n private readonly defaultOptions = {\n applicationId: null,\n usePrivateFiles: false,\n }\n\n set(data: CrocoHtmlEditorFileOptions) {\n localStorage.setItem(this.localStorageToken, JSON.stringify(data));\n }\n\n get(): CrocoHtmlEditorFileOptions {\n try {\n const data = localStorage.getItem(this.localStorageToken);\n return data ? JSON.parse(data) : this.defaultOptions;\n } catch (e) {\n return this.defaultOptions;\n }\n }\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { PublicFilesUploadResponse, PublicFileUploadService } from '../../services/PublicFileUploadService';\nimport { MatButton } from '@angular/material/button';\nimport { PrivateFilesCreatedResult, PrivateFileUploadService } from \"../../services/PrivateFileUploadService\";\nimport { CrocoHtmlFileOptionsService } from \"../../services/CrocoHtmlFileOptionsService\";\n\nexport interface FilePostingStarted {\n filesCount: number;\n}\n\n@Component({\n selector: 'croco-app-upload-files-btn',\n templateUrl: './upload-files-btn.component.html',\n styleUrls: ['./upload-files-btn.component.css'],\n standalone: true,\n imports: [MatButton]\n})\nexport class UploadFilesBtnComponent {\n\n @ViewChild('filesInput')\n private fileInput!: ElementRef<HTMLInputElement>;\n\n @Input()\n extAccepts: string = \"*/*\";\n\n @Input()\n isMultiple = true;\n\n @Input()\n btnText: string = \"Загрузить файлы\";\n\n @Input()\n hidden = false;\n\n @Output()\n postFilesStarted = new EventEmitter<FilePostingStarted>();\n\n @Output()\n onPublicFilesUploaded = new EventEmitter<PublicFilesUploadResponse>();\n\n @Output()\n onPrivateFilesUploaded = new EventEmitter<PrivateFilesCreatedResult>();\n\n constructor(\n private readonly _publicFileUploadService: PublicFileUploadService,\n private readonly _privateFileUploadService: PrivateFileUploadService,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n ) { }\n\n handleFileInput(e: Event) {\n\n const files: FileList | undefined = e.target[\"files\"];\n\n this.postFilesStarted.emit({\n filesCount: files?.length ?? 0\n });\n\n if (files === null || files === undefined) {\n return;\n }\n\n if (this._htmlSettingsService.get().usePrivateFiles) {\n this._privateFileUploadService\n .postFiles(files, this._htmlSettingsService.get().applicationId)\n .subscribe(data => {\n this.onPrivateFilesUploaded.emit(data);\n })\n }\n else {\n this._publicFileUploadService\n .postFiles(files, null)\n .subscribe(data => {\n this.onPublicFilesUploaded.emit(data);\n })\n }\n }\n\n clickFileInput() {\n this.fileInput.nativeElement.click();\n }\n}\n","<button [hidden]=\"hidden\" mat-raised-button color=\"primary\" (click)=\"filesInput.click()\">{{btnText}}</button>\n<input [hidden]=\"true\" [accept]=\"extAccepts\" [multiple]=\"isMultiple\" type=\"file\" #filesInput (change)=\"handleFileInput($event)\" />","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { FileImageTagDataConsts } from '../../extensions';\nimport { HtmlBodyTag } from '../../models/models';\nimport { FilePostingStarted, UploadFilesBtnComponent } from '../upload-files-btn/upload-files-btn.component';\nimport { MatButton } from '@angular/material/button';\nimport { PublicFilesUploadResponse } from '../../services/PublicFileUploadService';\nimport { PrivateFilesCreatedResult } from \"../../services/PrivateFileUploadService\";\n\n@Component({\n selector: 'croco-html-add-files-btn',\n templateUrl: './add-files-btn.component.html',\n standalone: true,\n imports: [UploadFilesBtnComponent, MatButton]\n})\nexport class AddFilesBtnComponent {\n\n @Output()\n postFilesStarted = new EventEmitter<FilePostingStarted>();\n\n @ViewChild(\"fakeBtn\")\n fakeBtn!: UploadFilesBtnComponent;\n\n fileIds: number[] = [];\n\n @Output()\n filesTagsReady = new EventEmitter<HtmlBodyTag[]>();\n\n postFilesStartedEventHandler(data: FilePostingStarted) {\n this.postFilesStarted.emit(data);\n }\n\n filesUploadedPublicHandler(data: PublicFilesUploadResponse) {\n const fileTags = this.buildFileTags(data.fileIds.map(el => el.toString()));\n this.filesTagsReady.emit(fileTags);\n }\n\n filesUploadedPrivateHandler(data: PrivateFilesCreatedResult) {\n const fileTags = this.buildFileTags(data.fileIds);\n this.filesTagsReady.emit(fileTags);\n }\n\n private buildFileTags(fileIds: string[]): HtmlBodyTag[] {\n return fileIds.map(fileId => ({\n presentOrEdit: true,\n tagDescription: {\n tag: FileImageTagDataConsts.TagName,\n displayValue: \"Изображение\",\n isCustom: false\n },\n attributes: {\n [FileImageTagDataConsts.FileIdAttrName]: fileId,\n [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n },\n innerHtml: \"\"\n }));\n }\n\n handleClick() {\n this.fakeBtn.clickFileInput();\n }\n}\n","<div [hidden]=\"true\">\n <croco-app-upload-files-btn #fakeBtn\n (onPrivateFilesUploaded)=\"filesUploadedPrivateHandler($event)\"\n (onPublicFilesUploaded)=\"filesUploadedPublicHandler($event)\"\n [btnText]=\"'Добавить изображения'\"\n (postFilesStarted)=\"postFilesStartedEventHandler($event)\" [extAccepts]=\"'image/*'\"></croco-app-upload-files-btn>\n</div>\n\n<div>\n <button class=\"w-100\" (click)=\"handleClick()\" mat-stroked-button>Добавить изображения</button>\n</div>\n","\nexport interface GetListResult<T> {\n /*\n Сколько всего записей\n */\n totalCount: number;\n\n /*\n Текущий список\n */\n list: Array<T>;\n}\n\n\nexport interface FileRelationModel {\n entityTypeFullName: string;\n entityKey: string;\n relationName: string;\n relationValue: string;\n relationCustomData: string;\n}\n\nexport interface SearchFilesRequest {\n q: string;\n fileName: string;\n applicationId: string;\n fileTypes: Array<FileType>;\n count: number | null;\n offSet: number;\n}\n\nexport enum FileType {\n Undefined = 'Undefined',\n Unknown = 'Unknown',\n Image = 'Image',\n Audio = 'Audio',\n Video = 'Video',\n Document = 'Document',\n Archive = 'Archive'\n}\n\n\nexport interface GetListSearchModel {\n count: number | null;\n offSet: number;\n}\n\nexport interface FileSimpleModel {\n fileId: number;\n fileName: string;\n type: FileType;\n downloadUrl: string;\n}\n\nexport interface FileInfoModel {\n type: FileType;\n name: string;\n downloadUrl: string;\n}\n\nexport interface CommonFileInfoResultModel {\n id: string;\n isPrivateId: boolean;\n fileInfo: FileInfoModel;\n}","import { HttpClient } from \"@angular/common/http\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { FileSimpleModel, GetListResult, SearchFilesRequest } from \"./file-models\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PublicFilesQueryService {\n\n private readonly _baseControllerUrl: string;\n\n constructor(private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') baseUrl: string) {\n this._baseControllerUrl = `${baseUrl}api/Files`;\n }\n\n public search(model: SearchFilesRequest): Observable<GetListResult<FileSimpleModel>> {\n return this._httpClient.post<GetListResult<FileSimpleModel>>(\n `${this._baseControllerUrl}/GetFiles`, model\n );\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, Inject } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { FileType, GetListResult, SearchFilesRequest } from \"./file-models\";\n\nexport interface PrivateFileNameModel {\n id: string;\n setId: string;\n fileName: string;\n type: FileType;\n downloadUrl: string;\n createdOn: string;\n applicationId: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrivateFilesQueryService {\n\n private readonly _baseControllerUrl: string;\n\n constructor(private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') baseUrl: string) {\n this._baseControllerUrl = `${baseUrl}api/private-files/query`;\n }\n\n public search(model: SearchFilesRequest): Observable<GetListResult<PrivateFileNameModel>> {\n return this._httpClient.post<GetListResult<PrivateFileNameModel>>(\n `${this._baseControllerUrl}/search`, model\n );\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { Injectable, Inject } from \"@angular/core\";\nimport { CommonFileInfoResultModel } from \"./file-models\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CommonFileInfoQueryService {\n\n private readonly _baseControllerUrl: string;\n\n constructor(private readonly _httpClient: HttpClient,\n @Inject('BASE_URL') baseUrl: string) {\n this._baseControllerUrl = `${baseUrl}api/common-files`;\n }\n\n /**\n * Получить информацию о файле на сервере по идентификатору.\n * @param model \n * @returns \n */\n public getInfo(id: string) {\n return this._httpClient.get<CommonFileInfoResultModel>(\n `${this._baseControllerUrl}/query/get-info/${id}`\n );\n }\n}","import {\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ElementRef,\n ChangeDetectionStrategy,\n inject,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { AudioMethods, FileAudioTagDataConsts } from '../../../extensions/AudioMethods';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { Subject, takeUntil } from \"rxjs\";\nimport { PublicFilesQueryService } from '../../../services/PublicFilesQueryService';\nimport { PrivateFilesQueryService } from '../../../services/PrivateFilesQueryService';\nimport { CrocoHtmlFileOptionsService } from '../../../services/CrocoHtmlFileOptionsService';\nimport { FileType } from '../../../services/file-models';\nimport { UploadFilesBtnComponent } from '../../upload-files-btn/upload-files-btn.component';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { MatIconButton } from \"@angular/material/button\";\nimport { CommonFileInfoQueryService } from '../../../services/CommonFileInfoQueryService';\n\n@Component({\n selector: 'croco-html-audio-editor',\n templateUrl: './audio-editor.component.html',\n styleUrls: ['./audio-editor.component.scss'],\n standalone: true,\n imports: [\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatIcon,\n MatFormField,\n MatLabel,\n MatInput,\n UploadFilesBtnComponent,\n NgSelectModule,\n MatIconButton\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AudioEditorComponent implements OnInit, OnDestroy {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n hasAudioError = false;\n errorMessage = '';\n isPlaying = false;\n isLoading = false;\n currentTime = 0;\n duration = 0;\n volume = 1;\n isMuted = false;\n audioSrc = '';\n\n searchOrEdit = \"search\";\n\n files: Array<{ fileId: string; fileName: string }> = [];\n loading = false;\n q = '';\n\n private unsubscribe = new Subject<void>();\n\n @ViewChild('audioPlayer', { static: false })\n audioPlayer!: ElementRef<HTMLAudioElement>;\n\n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = true;\n\n constructor(\n private readonly _publicFileService: PublicFilesQueryService,\n private readonly _privateFileService: PrivateFilesQueryService,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n private readonly _commonFileInfoService: CommonFileInfoQueryService,\n ) { }\n\n public get fileId(): string {\n return this.tag.attributes[FileAudioTagDataConsts.FileIdAttrName];\n }\n\n public set fileId(value: string) {\n this.tag.attributes[FileAudioTagDataConsts.FileIdAttrName] = value;\n }\n\n public get title(): string {\n return this.tag.attributes[FileAudioTagDataConsts.TitleAttrName] || '';\n }\n\n public set title(value: string) {\n this.tag.attributes[FileAudioTagDataConsts.TitleAttrName] = value;\n }\n\n hasFileId() {\n return this.tag.attributes.hasOwnProperty(FileAudioTagDataConsts.FileIdAttrName) && this.fileId && this.fileId !== '';\n }\n\n private get audioElement(): HTMLAudioElement | null {\n return this.audioPlayer?.nativeElement || null;\n }\n\n onErrorHandler() {\n this.hasAudioError = true;\n this.isLoading = false;\n if (!this.errorMessage) {\n this.errorMessage = 'Аудио-файл не найден по указанному идентификатору, возможно файл не существует или отсутствует на сервере.';\n }\n this._cdr.markForCheck();\n }\n\n removeAudioError() {\n this.hasAudioError = false;\n this.errorMessage = '';\n\n this._cdr.markForCheck();\n }\n\n setError(message: string) {\n this.hasAudioError = true;\n this.errorMessage = message;\n this.isLoading = false;\n\n this._cdr.markForCheck();\n }\n\n onFileIdChanged(fileId: string) {\n this.fileId = fileId;\n this.removeAudioError();\n this.checkAndLoadAudioFile();\n\n this._cdr.markForCheck();\n }\n\n checkAndLoadAudioFile() {\n if (!this.hasFileId()) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n this.errorMessage = '';\n\n const fileIdValue = this.fileId;\n\n this._cdr.markForCheck();\n\n this._commonFileInfoService.getInfo(fileIdValue)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe({\n next: (result) => {\n if (!result.fileInfo) {\n this.setError(`Файл с идентификатором ${fileIdValue} не найден на сервере.`);\n return;\n }\n\n if (result.fileInfo.type !== FileType.Audio) {\n this.setError(`Файл с идентификатором ${fileIdValue} должен быть c типом Audio, а получено ${result.fileInfo.type}.`);\n return;\n }\n\n this.audioSrc = result.fileInfo.downloadUrl;\n this.loadAudioFile();\n },\n error: (error) => {\n this.setError(`Ошибка при получении информации о файле: ${error.message || 'Неизвестная ошибка'}`);\n }\n });\n }\n\n loadAudioFile() {\n if (!this.hasFileId() || !this.audioSrc) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n\n const audio = this.audioElement;\n if (audio) {\n audio.load();\n }\n\n this._cdr.markForCheck();\n }\n\n onLoadedMetadata() {\n const audio = this.audioElement;\n if (audio) {\n this.duration = audio.duration;\n this.isLoading = false;\n\n this._cdr.markForCheck();\n }\n }\n\n onTimeUpdate() {\n const audio = this.audioElement;\n if (audio) {\n this.currentTime = audio.currentTime;\n this.duration = audio.duration;\n }\n\n this._cdr.markForCheck();\n }\n\n onEnded() {\n this.isPlaying = false;\n this.currentTime = 0;\n\n this._cdr.markForCheck();\n }\n\n onCanPlay() {\n this.isLoading = false;\n\n this._cdr.markForCheck();\n }\n\n togglePlayPause() {\n const audio = this.audioElement;\n if (!audio) {\n return;\n }\n\n if (this.isPlaying) {\n audio.pause();\n this.isPlaying = false;\n } else {\n audio.play().then(() => {\n this.isPlaying = true;\n this._cdr.markForCheck();\n }).catch(() => {\n this.hasAudioError = true;\n this._cdr.markForCheck();\n });\n }\n }\n\n restart() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = 0;\n this.currentTime = 0;\n\n this._cdr.markForCheck();\n }\n }\n\n rewind() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.max(0, audio.currentTime - 10);\n\n this._cdr.markForCheck();\n }\n }\n\n forward() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.min(audio.duration, audio.currentTime + 10);\n\n this._cdr.markForCheck();\n }\n }\n\n onVolumeChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value) / 100;\n this.volume = value;\n const audio = this.audioElement;\n if (audio) {\n audio.volume = value;\n }\n this.isMuted = value === 0;\n\n this._cdr.markForCheck();\n }\n\n toggleMute() {\n const audio = this.audioElement;\n if (!audio) {\n return;\n }\n\n if (this.isMuted) {\n audio.volume = this.volume;\n this.isMuted = false;\n } else {\n audio.volume = 0;\n this.isMuted = true;\n }\n\n this._cdr.markForCheck();\n }\n\n onSeekChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value);\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = (value / 100) * audio.duration;\n }\n this._cdr.markForCheck();\n }\n\n formatTime(seconds: number): string {\n return AudioMethods.formatTime(seconds);\n }\n\n getProgress(): number {\n return AudioMethods.calculateProgress(this.currentTime, this.duration);\n }\n\n loadFiles() {\n this.loading = true;\n const isPrivate = this._htmlSettingsService.get().usePrivateFiles;\n\n const searchParams = {\n count: 50,\n offSet: 0,\n fileName: null,\n fileTypes: [FileType.Audio],\n applicationId: isPrivate ? this._htmlSettingsService.get().applicationId : null,\n q: this.q\n };\n\n this._cdr.markForCheck();\n\n if (isPrivate) {\n this._privateFileService.search(searchParams)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.id, fileName: el.fileName }));\n this.loading = false;\n this._cdr.markForCheck();\n });\n } else {\n this._publicFileService.search(searchParams)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.fileId.toString(), fileName: el.fileName }));\n this.loading = false;\n this._cdr.markForCheck();\n });\n }\n }\n\n onSearchChanged(q: { term: string, items: object[] }) {\n this.q = q.term;\n this.loadFiles();\n\n this._cdr.markForCheck();\n }\n\n onFileSelected(fileId: string) {\n const selectedFile = this.files.find(f => f.fileId === fileId);\n if (selectedFile) {\n this.fileId = fileId;\n this.checkAndLoadAudioFile();\n\n this._cdr.markForCheck();\n }\n }\n\n onFilesUploaded(fileIds: string[] | number[]) {\n if (fileIds && fileIds.length > 0) {\n const firstFileId = fileIds[0];\n this.fileId = typeof firstFileId === 'number' ? firstFileId.toString() : firstFileId;\n this.loadFiles();\n this.checkAndLoadAudioFile();\n\n this._cdr.markForCheck();\n }\n }\n\n removeAudio() {\n this.fileId = '';\n this.title = '';\n this.audioSrc = '';\n this.isPlaying = false;\n this.currentTime = 0;\n this.duration = 0;\n this.removeAudioError();\n\n this._cdr.markForCheck();\n }\n\n ngOnInit(): void {\n if (this.audioPlayer?.nativeElement) {\n const audio = this.audioPlayer.nativeElement;\n audio.volume = this.volume;\n }\n\n if (this.hasFileId()) {\n this.checkAndLoadAudioFile();\n }\n\n this.loadFiles();\n\n this._cdr.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","<div class=\"audio-editor\">\n @if (hasAudioError) {\n <div class=\"error-block\">\n <mat-icon>error</mat-icon>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n @if (hasFileId() && !hasAudioError) {\n <div class=\"audio-player-container\">\n <audio\n #audioPlayer\n [src]=\"audioSrc\"\n (error)=\"onErrorHandler()\"\n (loadedmetadata)=\"onLoadedMetadata()\"\n (timeupdate)=\"onTimeUpdate()\"\n (ended)=\"onEnded()\"\n (canplay)=\"onCanPlay()\"\n preload=\"metadata\">\n </audio>\n\n @if (isLoading) {\n <div class=\"loading-indicator\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-fill\"></div>\n </div>\n <span>Загрузка аудио...</span>\n </div>\n }\n\n <div class=\"player-controls\">\n <div class=\"control-buttons\">\n <button (click)=\"restart()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay</mat-icon>\n </button>\n\n <button (click)=\"rewind()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay_10</mat-icon>\n </button>\n\n <button\n (click)=\"togglePlayPause()\"\n [disabled]=\"!hasFileId() || isLoading\"\n class=\"play-pause-btn\" mat-icon-button>\n <mat-icon>{{ isPlaying ? 'pause' : 'play_arrow' }}</mat-icon>\n </button>\n\n <button (click)=\"forward()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>forward_10</mat-icon>\n </button>\n\n @if (!presentOrEdit) {\n <button (click)=\"removeAudio()\" [disabled]=\"!hasFileId()\" color=\"warn\" mat-icon-button>\n <mat-icon>delete</mat-icon>\n </button>\n }\n </div>\n\n <div class=\"progress-section\">\n <span class=\"time-display\">{{ formatTime(currentTime) }}</span>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"getProgress()\"\n (input)=\"onSeekChange($event)\"\n [disabled]=\"!hasFileId() || duration === 0\"\n class=\"progress-slider\">\n\n <span class=\"time-display\">{{ formatTime(duration) }}</span>\n </div>\n\n <div class=\"volume-controls\">\n <button (click)=\"toggleMute()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>{{ isMuted ? 'volume_off' : 'volume_up' }}</mat-icon>\n </button>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"volume * 100\"\n (input)=\"onVolumeChange($event)\"\n [disabled]=\"!hasFileId()\"\n class=\"volume-slider\">\n </div>\n </div>\n </div>\n }\n\n @if (!hasFileId()) {\n <div class=\"no-file-message\">\n <mat-icon>music_off</mat-icon>\n <h5>Аудио-файл не выбран</h5>\n @if (!presentOrEdit) {\n <p>Нажмите кнопку редактирования для выбора или загрузки аудио-файла</p>\n }\n </div>\n }\n @if (!presentOrEdit) {\n <div class=\"edit-panel\">\n <div class=\"edit-header\">\n <h6>Настройки аудио-файла</h6>\n </div>\n\n <div class=\"mode-toggle\">\n <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n <mat-button-toggle value=\"search\">\n <mat-icon>search</mat-icon>\n Искать файл\n </mat-button-toggle>\n <mat-button-toggle value=\"edit\">\n <mat-icon>settings</mat-icon>\n Указать по ID\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n @if (searchOrEdit === 'search') {\n <div class=\"file-selection\">\n <div class=\"existing-files\">\n <h6>Выбрать из существующих файлов:</h6>\n <ng-select\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileSelected($event)\"\n [items]=\"files\"\n bindLabel=\"fileName\"\n bindValue=\"fileId\"\n (search)=\"onSearchChanged($event)\"\n [loading]=\"loading\"\n [loadingText]=\"'Загружаю файлы'\"\n placeholder=\"Выберите аудио-файл\"\n [clearable]=\"true\">\n <ng-template ng-option-tmp let-item=\"item\">\n <div class=\"file-option\">\n <mat-icon>audiotrack</mat-icon>\n <span>{{ item.fileName }}</span>\n <small>ID: {{ item.fileId }}</small>\n </div>\n </ng-template>\n </ng-select>\n </div>\n\n <div class=\"title-input\">\n <mat-form-field class=\"w-100\">\n <mat-label>Название аудио-файла</mat-label>\n <input\n matInput\n placeholder=\"Введите название аудио-файла\"\n autocomplete=\"off\"\n [(ngModel)]=\"title\">\n </mat-form-field>\n </div>\n\n <div class=\"upload-section\">\n <h6>Загрузить новый файл:</h6>\n <croco-app-upload-files-btn\n extAccepts=\"audio/*\"\n [isMultiple]=\"false\"\n btnText=\"Загрузить аудио-файл\"\n (onPublicFilesUploaded)=\"onFilesUploaded($event.fileIds)\"\n (onPrivateFilesUploaded)=\"onFilesUploaded($event.fileIds)\">\n </croco-app-upload-files-btn>\n </div>\n </div>\n } @else if (searchOrEdit === 'edit') {\n <div class=\"manual-input\">\n <mat-form-field class=\"w-100\">\n <mat-label>Идентификатор файла</mat-label>\n <input\n matInput\n placeholder=\"Введите ID аудио-файла\"\n autocomplete=\"off\"\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileIdChanged($event)\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Название аудио-файла</mat-label>\n <input\n matInput\n placeholder=\"Введите название аудио-файла\"\n autocomplete=\"off\"\n [(ngModel)]=\"title\">\n </mat-form-field>\n </div>\n }\n </div>\n }\n</div>\n","export const CrocoHtmlOptionsToken = \"croco-html-options\";\n","import {\n Component,\n Inject,\n Input,\n OnInit,\n OnDestroy,\n ViewChild,\n ElementRef,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { AudioMethods } from '../../../extensions/AudioMethods';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MatIcon } from '@angular/material/icon';\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { MatIconButton } from \"@angular/material/button\";\nimport { CommonFileInfoQueryService } from '../../../services/CommonFileInfoQueryService';\nimport { FileType } from '../../../services/file-models';\n\n@Component({\n selector: 'croco-html-audio-player-tag-view',\n templateUrl: './audio-player-tag-view.component.html',\n styleUrls: ['./audio-player-tag-view.component.scss'],\n standalone: true,\n imports: [\n MatIcon,\n MatIconButton\n ]\n})\nexport class AudioPlayerTagViewComponent implements OnInit, OnDestroy, OnChanges {\n\n hasAudioError = false;\n errorMessage = '';\n isPlaying = false;\n isLoading = false;\n currentTime = 0;\n duration = 0;\n volume = 1;\n isMuted = false;\n audioSrc = '';\n\n private unsubscribe = new Subject<void>();\n\n @ViewChild('audioPlayer', { static: false })\n audioPlayer: ElementRef<HTMLAudioElement>;\n\n @Input({ required: true })\n data: InterfaceBlock;\n\n constructor(\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions,\n private readonly _commonFileInfoService: CommonFileInfoQueryService,\n ) { }\n\n get fileId(): string {\n return this.data.data.fileId;\n }\n\n get title(): string {\n return this.data.data.title || 'Аудио-файл';\n }\n\n private get audioElement(): HTMLAudioElement | null {\n return this.audioPlayer?.nativeElement || null;\n }\n\n hasFileId() {\n return this.fileId && this.fileId !== '';\n }\n\n onErrorHandler() {\n this.hasAudioError = true;\n this.isLoading = false;\n if (!this.errorMessage) {\n this.errorMessage = 'Аудио-файл не найден по указанному идентификатору.';\n }\n }\n\n setError(message: string) {\n this.hasAudioError = true;\n this.errorMessage = message;\n this.isLoading = false;\n }\n\n onLoadedMetadata() {\n const audio = this.audioElement;\n if (audio) {\n this.duration = audio.duration;\n this.isLoading = false;\n }\n }\n\n onTimeUpdate() {\n const audio = this.audioElement;\n if (audio) {\n this.currentTime = audio.currentTime;\n this.duration = audio.duration;\n }\n }\n\n onEnded() {\n this.isPlaying = false;\n this.currentTime = 0;\n }\n\n onCanPlay() {\n this.isLoading = false;\n }\n\n togglePlayPause() {\n const audio = this.audioElement;\n if (!audio) return;\n\n if (this.isPlaying) {\n audio.pause();\n this.isPlaying = false;\n } else {\n audio.play().then(() => {\n this.isPlaying = true;\n }).catch(() => {\n this.hasAudioError = true;\n });\n }\n }\n\n restart() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = 0;\n this.currentTime = 0;\n }\n }\n\n rewind() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.max(0, audio.currentTime - 10);\n }\n }\n\n forward() {\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = Math.min(audio.duration, audio.currentTime + 10);\n }\n }\n\n onVolumeChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value) / 100;\n this.volume = value;\n const audio = this.audioElement;\n if (audio) {\n audio.volume = value;\n }\n this.isMuted = value === 0;\n }\n\n toggleMute() {\n const audio = this.audioElement;\n if (!audio) return;\n\n if (this.isMuted) {\n audio.volume = this.volume;\n this.isMuted = false;\n } else {\n audio.volume = 0;\n this.isMuted = true;\n }\n }\n\n onSeekChange(event: Event) {\n const target = event.target as HTMLInputElement;\n const value = parseFloat(target.value);\n const audio = this.audioElement;\n if (audio) {\n audio.currentTime = (value / 100) * audio.duration;\n }\n }\n\n formatTime(seconds: number): string {\n return AudioMethods.formatTime(seconds);\n }\n\n getProgress(): number {\n return AudioMethods.calculateProgress(this.currentTime, this.duration);\n }\n\n ngOnInit(): void {\n if (this.audioPlayer?.nativeElement) {\n const audio = this.audioElement;\n if (audio) {\n audio.volume = this.volume;\n }\n }\n\n if (this.hasFileId()) {\n this.checkAndLoadAudioFile();\n }\n }\n\n checkAndLoadAudioFile() {\n if (!this.hasFileId()) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n this.errorMessage = '';\n\n const fileIdValue = this.fileId;\n\n this._commonFileInfoService.getInfo(fileIdValue)\n .pipe(takeUntil(this.unsubscribe))\n .subscribe({\n next: (result) => {\n if (!result.fileInfo) {\n this.setError(`Файл с идентификатором ${fileIdValue} не найден на сервере.`);\n return;\n }\n\n if (result.fileInfo.type !== FileType.Audio) {\n this.setError(`Файл с идентификатором ${fileIdValue} должен быть c типом Audio, а получено ${result.fileInfo.type}.`);\n return;\n }\n\n this.audioSrc = result.fileInfo.downloadUrl;\n this.loadAudioFile();\n },\n error: (error) => {\n this.setError(`Ошибка при получении информации о файле: ${error.message || 'Неизвестная ошибка'}`);\n }\n });\n }\n\n loadAudioFile() {\n if (!this.hasFileId() || !this.audioSrc) {\n return;\n }\n\n this.isLoading = true;\n this.hasAudioError = false;\n\n const audio = this.audioElement;\n if (audio) {\n audio.load();\n }\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data'] && !changes['data'].firstChange) {\n if (this.hasFileId()) {\n this.checkAndLoadAudioFile();\n }\n }\n }\n}\n","<div class=\"audio-view\">\n @if (hasAudioError) {\n <div class=\"error-block\">\n <mat-icon>error</mat-icon>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n @if (hasFileId() && !hasAudioError) {\n <div class=\"audio-player-container\">\n <audio\n #audioPlayer\n [src]=\"audioSrc\"\n (error)=\"onErrorHandler()\"\n (loadedmetadata)=\"onLoadedMetadata()\"\n (timeupdate)=\"onTimeUpdate()\"\n (ended)=\"onEnded()\"\n (canplay)=\"onCanPlay()\"\n preload=\"metadata\">\n </audio>\n\n @if (isLoading) {\n <div class=\"loading-indicator\">\n <div class=\"progress-bar\">\n <div class=\"progress-bar-fill\"></div>\n </div>\n <span>Загрузка аудио...</span>\n </div>\n }\n\n <div class=\"file-info\">\n <mat-icon>audiotrack</mat-icon>\n <span class=\"file-name\">{{ title }}</span>\n </div>\n\n <div class=\"player-controls\">\n <div class=\"control-buttons\">\n <button (click)=\"restart()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay</mat-icon>\n </button>\n\n <button (click)=\"rewind()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>replay_10</mat-icon>\n </button>\n\n <button\n (click)=\"togglePlayPause()\"\n [disabled]=\"!hasFileId() || isLoading\"\n class=\"play-pause-btn\" mat-icon-button>\n <mat-icon>{{ isPlaying ? 'pause' : 'play_arrow' }}</mat-icon>\n </button>\n\n <button (click)=\"forward()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>forward_10</mat-icon>\n </button>\n </div>\n\n <div class=\"progress-section\">\n <span class=\"time-display\">{{ formatTime(currentTime) }}</span>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"getProgress()\"\n (input)=\"onSeekChange($event)\"\n [disabled]=\"!hasFileId() || duration === 0\"\n class=\"progress-slider\">\n\n <span class=\"time-display\">{{ formatTime(duration) }}</span>\n </div>\n\n <div class=\"volume-controls\">\n <button (click)=\"toggleMute()\" [disabled]=\"!hasFileId()\" mat-icon-button>\n <mat-icon>{{ isMuted ? 'volume_off' : 'volume_up' }}</mat-icon>\n </button>\n\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n [value]=\"volume * 100\"\n (input)=\"onVolumeChange($event)\"\n [disabled]=\"!hasFileId()\"\n class=\"volume-slider\">\n </div>\n </div>\n </div>\n }\n\n <!-- Сообщение об отсутствии файла -->\n @if (!hasFileId()) {\n <div class=\"no-file-message\">\n <mat-icon>music_off</mat-icon>\n <h5>Аудио-файл не выбран</h5>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\n@Component({\n selector: 'youtube-video-player',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './youtube-video-player.component.html',\n styleUrl: '../external-video-editor.component.scss'\n})\nexport class YoutubeVideoPlayerComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() set link(link: string) {\n this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(link);\n this._cdr.markForCheck();\n }\n\n public safeUrl: SafeResourceUrl;\n\n constructor(private sanitizer: DomSanitizer) { }\n}\n","<div class=\"code-view video-player use-responsive\">\n <iframe\n [src]=\"safeUrl\"\n title=\"YouTube video player\"\n frameborder=\"0\"\n allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from \"@angular/platform-browser\";\n\n@Component({\n selector: 'vk-video-player',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './vk-video-player.component.html',\n styleUrl: '../external-video-editor.component.scss'\n})\nexport class VkVideoPlayerComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() set link(link: string) {\n this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(link);\n this._cdr.markForCheck();\n }\n\n public safeUrl: SafeResourceUrl;\n\n constructor(private sanitizer: DomSanitizer) { }\n}\n","<div class=\"code-view video-player use-responsive\">\n <iframe\n [src]=\"safeUrl\"\n allow=\"autoplay; encrypted-media; fullscreen; picture-in-picture;\"\n frameborder=\"0\"\n allowfullscreen></iframe>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\n\n@Component({\n selector: 'code-video',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './code-video.component.html',\n styleUrl: '../external-video-editor.component.scss'\n})\nexport class CodeVideoComponent implements OnChanges {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() code = \"\";\n @Input() set _useResponsiveWrapper(useResponsiveWrapper: boolean) {\n this.useResponsiveWrapper = useResponsiveWrapper;\n }\n\n useResponsiveWrapper = false\n\n safeHtml: SafeHtml;\n\n constructor(private readonly _sanitizer: DomSanitizer) { }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['code'] && changes['code'].currentValue !== changes['code'].previousValue) {\n this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this.code);\n this._cdr.markForCheck();\n }\n }\n}\n","@if (code) {\n <div class=\"code-view video-player\" [class.use-responsive]=\"useResponsiveWrapper\" [innerHTML]=\"safeHtml\"></div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n} from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { ExternalVideoSupportedTypes, ExternalVideoTagData } from '../../../extensions';\nimport { YoutubeVideoPlayerComponent } from '../../editor/external-video-editor/youtube-video-player/youtube-video-player.component';\nimport { VkVideoPlayerComponent } from '../../editor/external-video-editor/vk-video-player/vk-video-player.component';\nimport { CodeVideoComponent } from \"../../editor/external-video-editor/embedded-video/code-video.component\";\n\n@Component({\n selector: 'croco-html-xml-tag-external-video',\n templateUrl: './xml-tag-external-video.component.html',\n styleUrls: ['./xml-tag-external-video.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [VkVideoPlayerComponent, YoutubeVideoPlayerComponent, CodeVideoComponent],\n})\nexport class XmlTagExternalVideoComponent {\n @Input() public set data(value: InterfaceBlock) {\n this.tagData = value.data;\n };\n\n @Input() public set tagData(value: ExternalVideoTagData) {\n this._block = {\n type: value.type,\n link: value.link,\n useResponsiveWrapper: value.useResponsiveWrapper,\n innerHtml: value.innerHtml\n }\n };\n\n protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n\n public _block: ExternalVideoTagData = {\n type: '',\n link: '',\n innerHtml: '',\n useResponsiveWrapper: false\n }\n}\n","@switch (_block.type) {\n @case (ExternalVideoSupportedTypes.VkVideo) {\n <vk-video-player [link]=\"_block.link\"></vk-video-player>\n }\n @case (ExternalVideoSupportedTypes.Youtube) {\n <youtube-video-player [link]=\"_block.link\"></youtube-video-player>\n }\n @case (ExternalVideoSupportedTypes.Code) {\n <code-video [code]=\"_block.innerHtml\" [_useResponsiveWrapper]=\"_block.useResponsiveWrapper\"></code-video>\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\n\n@Component({\n selector: 'croco-html-xml-tag-header-inner-text-view',\n templateUrl: './xml-tag-header-inner-text-view.component.html',\n standalone: true\n})\nexport class XmlTagHeaderInnerTextViewComponent {\n\n @Input({ required: true })\n item: GenericTextTag;\n}\n","@if (item.tagName === 'h1') {\n <h1\n [innerHtml]=\"item.data.html\">\n </h1>\n}\n@if (item.tagName === 'h2') {\n <h2\n [innerHtml]=\"item.data.html\">\n </h2>\n}\n@if (item.tagName === 'h3') {\n <h3\n [innerHtml]=\"item.data.html\">\n </h3>\n}\n@if (item.tagName === 'h4') {\n <h4\n [innerHtml]=\"item.data.html\">\n </h4>\n}\n@if (item.tagName === 'h5') {\n <h5\n [innerHtml]=\"item.data.html\">\n </h5>\n}\n@if (item.tagName === 'h6') {\n <h6\n [innerHtml]=\"item.data.html\">\n </h6>\n}","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\nimport { XmlTagHeaderInnerTextViewComponent } from '../xml-tag-header-inner-text-view/xml-tag-header-inner-text-view.component';\n\n@Component({\n selector: 'croco-html-xml-tag-header-text-view',\n templateUrl: './xml-tag-header-text-view.component.html',\n standalone: true,\n imports: [XmlTagHeaderInnerTextViewComponent]\n})\nexport class XmlTagHeaderTextViewComponent {\n\n @Input({ required: true })\n item: GenericTextTag;\n}\n","@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'left') {\n<div style=\"text-align: left;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n </croco-html-xml-tag-header-inner-text-view>\n }\n</div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'right') {\n<div style=\"text-align: right;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n </croco-html-xml-tag-header-inner-text-view>\n }\n</div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'center') {\n<div style=\"text-align: center;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <croco-html-xml-tag-header-inner-text-view [item]=\"item\">\n </croco-html-xml-tag-header-inner-text-view>\n }\n</div>\n}\n\n@if (!item.data.validationResult.isSucceeded) {\n<div class=\"red\" style=\"margin-top: 10px;\">\n <h4>Допущена ошибка в теге &lt;text&gt;</h4>\n <span>\n {{item.data.validationResult.message}}\n </span>\n</div>\n}","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'croco-html-xml-tag-html-view',\n templateUrl: './xml-tag-html-view.component.html',\n standalone: true\n})\nexport class XmlTagHtmlViewComponent {\n\n @Input()\n html: string = \"\";\n}\n","<div class=\"col table-container\" [innerHTML]=\"html\">\n</div>\n","import { Component, Input } from '@angular/core';\nimport { GenericTextTag } from '../../../extensions/TextSimpleMethods';\n\n@Component({\n selector: 'croco-html-xml-tag-text-view',\n templateUrl: './xml-tag-text-view.component.html',\n standalone: true\n})\nexport class XmlTagTextViewComponent {\n\n @Input({ required: true })\n item: GenericTextTag;\n}","@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'left') {\n <div style=\"text-align: left;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <span [innerHtml]=\"item.data.html\"></span>\n }\n </div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'right') {\n <div style=\"text-align: right;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <span [innerHtml]=\"item.data.html\"></span>\n }\n </div>\n}\n\n@if (item.data.validationResult.isSucceeded && item.data.horizontalAlignment === 'center') {\n <div style=\"text-align: center;\">\n @if (item.data.html.length === 0 || !item.data.html) {\n <span>&nbsp;</span>\n }\n @if (item.data.html.length > 0) {\n <span [innerHtml]=\"item.data.html\"></span>\n }\n </div>\n}\n\n@if (!item.data.validationResult.isSucceeded) {\n <div class=\"red\" style=\"margin-top: 10px;\" >\n <h4>Допущена ошибка в теге &lt;text&gt;</h4>\n <span>\n {{item.data.validationResult.message}}\n </span>\n </div>\n}","import { Injectable } from '@angular/core';\nimport { HttpClient } from \"@angular/common/http\";\nimport { Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BlobCreateService {\n\n constructor(private readonly _http: HttpClient) { }\n\n getBlob(link: string): Observable<Blob> {\n return this._http.get(link, { responseType: 'blob' })\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { BlobCreateService } from \"../../../services/blob-create.service\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { DownloadButtonTagData } from '../../../tag-services/DownloadButtonTagService';\n\n@Component({\n selector: 'croco-html-xml-tag-download-file-button',\n standalone: true,\n imports: [\n MatIcon\n ],\n templateUrl: './xml-tag-download-file-button.component.html',\n styleUrl: './xml-tag-download-file-button.component.scss'\n})\nexport class XmlTagDownloadFileButtonComponent {\n @Input() public set data(value: InterfaceBlock) {\n this.tagData = value.data;\n };\n\n @Input() public set tagData(value: DownloadButtonTagData) {\n this._block = {\n title: value.title,\n link: value.link\n }\n };\n\n constructor(private readonly _blobCreateService: BlobCreateService) { }\n\n public _block: DownloadButtonTagData = {\n title: '',\n link: ''\n }\n\n downloadFile() {\n this._blobCreateService.getBlob(this._block.link).subscribe(\n blob => {\n const link = document.createElement('a');\n const objectUrl = URL.createObjectURL(blob);\n link.href = objectUrl;\n\n const regex = /[^/]+$/;\n link.download = this._block.link.match(regex)[0] || 'Без названия';\n link.click();\n URL.revokeObjectURL(objectUrl);\n }\n );\n }\n}\n","<span\n class=\"download-file-button\"\n (click)=\"downloadFile()\">\n <mat-icon> save</mat-icon>\n {{this._block.title}}\n</span>\n","import { Component, Input } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\n\n@Component({\n selector: 'croco-html-error-banner',\n standalone: true,\n imports: [\n MatCardModule,\n MatButtonModule\n ],\n templateUrl: './error-banner.component.html',\n styleUrl: './error-banner.component.css'\n})\nexport class ErrorBannerComponent {\n @Input({ required: true }) \n message: string = \"\";\n}\n","@if (message) {\n <mat-card class=\"red\">\n <mat-card-content>\n <p>\n {{ message }}\n </p>\n </mat-card-content>\n <mat-card-actions>\n <button mat-button (click)=\"message = null\">ЗАКРЫТЬ</button>\n </mat-card-actions>\n </mat-card>\n }\n ","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScreenWidthService {\n\n private screenWidth = new BehaviorSubject<number>(window.innerWidth);\n\n constructor() {\n window.addEventListener('resize', this.onResize.bind(this));\n }\n\n private onResize(event: Event) {\n this.screenWidth.next(window.innerWidth);\n }\n\n getScreenWidth(): Observable<number> {\n return this.screenWidth.asObservable()\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { ImageMethods } from '../../../extensions';\nimport { ScreenWidthService } from \"../../../services/screen-width.service\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { NgStyle } from \"@angular/common\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { FileImageTagData, IImageMediaRequest } from '../../../models';\n\n@Component({\n selector: 'croco-html-file-image-tag-view',\n templateUrl: './file-image-tag-view.component.html',\n imports: [\n NgStyle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class FileImageTagViewComponent implements OnInit, OnDestroy {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input() set item(item: InterfaceBlock) {\n let data = item.data as FileImageTagData;\n this.imageData = data;\n this.imageSrc = data.src;\n this.requests = this.getMediaRequests(data.screenMediaRequest);\n\n this._cdr.markForCheck();\n }\n\n @Input({ required: true })\n isEditor = false\n\n imageSrc = \"\";\n imageData: FileImageTagData | null = null;\n requests: IImageMediaRequest[] = []\n\n private unsubscribe = new Subject<void>();\n public imageMaxHeight: number = null;\n public imageMaxWidth: number = null;\n\n constructor(private readonly screenWidthService: ScreenWidthService,\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n ) { }\n\n getMediaRequests(screenMediaRequest: string) : IImageMediaRequest[] {\n let result = ImageMethods.mediaRequestStringToArrayParser(screenMediaRequest);\n\n if (result.length === 0) {\n return this._options.imageOptions.globalMediaRequests ?? [];\n }\n\n return result;\n }\n\n ngOnInit(): void {\n this.screenWidthService.getScreenWidth()\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(screenWidth => {\n let restrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);\n\n this.imageMaxHeight = restrictions.maxHeight;\n this.imageMaxWidth = restrictions.maxWidth;\n\n if (this._options.imageOptions.visualEditorOptions?.previewModeImageMaxHeight && this.isEditor) {\n const visualMaxHeight = this._options.imageOptions.visualEditorOptions.previewModeImageMaxHeight;\n if (this.imageMaxHeight === null || this.imageMaxHeight === undefined || visualMaxHeight < this.imageMaxHeight) {\n this.imageMaxHeight = visualMaxHeight;\n }\n }\n\n this._cdr.markForCheck();\n })\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n\n onImageClick(): void {\n if (this.imageData && this._options.imageOptions.onImageClick) {\n this._options.imageOptions.onImageClick(this.imageData);\n }\n }\n}\n","<img\n [ngStyle]=\"{ 'max-height': imageMaxHeight ? imageMaxHeight + 'px' : '100%', 'max-width': imageMaxWidth ? imageMaxWidth + 'px' : '100%', }\"\n class=\"mx-auto d-block img-fluid\"\n [src]=\"imageSrc\"\n alt=\"Изображение не загружено\"\n (click)=\"onImageClick()\"\n style=\"cursor: pointer;\"\n/>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Router } from \"@angular/router\";\nimport { HtmlRawTagData } from '../../../tag-services';\nimport { InterfaceBlock } from '../../../models';\nimport { HtmlPageDataController } from '../../../services';\n\n\n@Component({\n selector: 'croco-html-raw-view',\n templateUrl: './html-raw-view.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HtmlRawViewComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef)\n\n @Input({ required: true }) set data(item: InterfaceBlock) {\n const data = item.data as HtmlRawTagData;\n\n this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(data.innerHTML);\n this._cdr.markForCheck();\n }\n\n public _dataController: HtmlPageDataController;\n\n @Input({ required: true }) set dataController(controller: HtmlPageDataController) {\n this._dataController = controller;\n this._cdr.markForCheck();\n }\n\n safeHtml: SafeHtml | null = null;\n\n constructor(\n private readonly _sanitizer: DomSanitizer, \n private readonly router: Router) { }\n\n handleLink(event: MouseEvent) {\n const target = (event.target as HTMLElement).closest('a');\n if (!target) {\n return;\n }\n\n const href = target.getAttribute('href');\n if (!href) {\n return;\n }\n\n const targetAttr = target.getAttribute('target');\n\n if (targetAttr === '_blank') {\n return;\n }\n\n const isExternal =\n href.startsWith('http://') ||\n href.startsWith('https://') ||\n href.startsWith('www.') ||\n href.match(/^[a-zA-Z]+:\\/\\//);\n\n if (isExternal) {\n return;\n }\n event.preventDefault();\n\n const path = href.startsWith('/') ? href : `/${href}`;\n\n this.router.navigate([path]);\n }\n\n}\n","@if (safeHtml) {\n <div [innerHTML]=\"safeHtml\" (click)=\"handleLink($event)\"></div>\n}\n","import { Injectable } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n/**\n * Сервис для обработки логики разметки\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HtmlViewController {\n\n onScriptCalled(script: string) {\n this.scriptCalled.next(script);\n }\n\n scriptCalled = new Subject<string>();\n}\n","import { Component, Input } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { MatButton } from \"@angular/material/button\";\nimport { HtmlViewController } from '../../../services/HtmlViewController';\nimport { ButtonTagData } from '../../../tag-services/ButtonTagService';\n\n@Component({\n selector: 'croco-html-xml-tag-button',\n standalone: true,\n imports: [\n MatButton\n ],\n templateUrl: './xml-tag-button.component.html',\n styleUrl: './xml-tag-button.component.css'\n})\nexport class XmlTagButtonComponent {\n @Input() public set data(value: InterfaceBlock) {\n this.tagData = value.data;\n };\n\n @Input() public set tagData(value: ButtonTagData) {\n this._block = {\n text: value.text,\n type: value.type,\n click: value.click\n }\n };\n\n constructor(private readonly _controller: HtmlViewController) {\n }\n\n public _block: ButtonTagData = {\n text: '',\n type: '',\n click: ''\n };\n\n clickHandler() {\n this._controller.onScriptCalled(this._block.click);\n }\n}\n","<button mat-stroked-button color=\"primary\" (click)=\"clickHandler()\">{{_block.text}}</button>\n","import {\n Component,\n ComponentRef,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { CrocoHtmlOptionsToken } from \"../../../consts\";\nimport { CrocoHtmlOptions } from \"../../../options\";\nimport { CustomWidgetTagData } from '../../../tag-services/CustomWidgetTagService';\n\n@Component({\n selector: 'croco-html-xml-tag-custom-widget',\n templateUrl: './xml-tag-custom-widget.component.html',\n styleUrls: ['./xml-tag-custom-widget.component.css'],\n imports: [MatTooltip],\n standalone: true\n})\nexport class XmlTagCustomWidgetComponent implements OnInit, OnDestroy {\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n @Input()\n public set tagData(value: CustomWidgetTagData) {\n if (value) {\n this._tagData = value;\n this.tooltipData = `data-id:${value.dataId}; widget-id: ${value.widgetId}`;\n if (this.dynamicContainerRef?.instance) {\n this.dynamicContainerRef.instance.tagData = value;\n }\n }\n };\n\n public get tagData(): CustomWidgetTagData {\n return this._tagData;\n }\n\n public _tagData: CustomWidgetTagData;\n public tooltipData: string = \"\";\n\n constructor(\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n ) {\n }\n\n ngOnInit(): void {\n if (this._options.customWidgetRendererComponent) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(this._options.customWidgetRendererComponent);\n this.dynamicContainerRef.setInput(\"tagData\", this.tagData);\n }\n }\n\n ngOnDestroy(): void {\n this.dynamicContainerRef.destroy();\n }\n}\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <div [matTooltip]=\"tooltipData\">\n Кастомный виджет. тип виджета: {{ tagData?.type }}\n </div>\n }\n</ng-container>\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatInputModule } from \"@angular/material/input\";\nimport { FormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { LinkTagAttrs, LinkTagData } from '../../../tag-services';\nimport { HtmlBodyTag, TagEditorService } from '../../../models';\n\n@Component({\n selector: 'croco-html-file-link-editor',\n imports: [MatInputModule, FormsModule, MatFormFieldModule],\n templateUrl: './link-editor.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinkEditorComponent {\n\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _cdr = inject(ChangeDetectorRef);\n\n linkData: LinkTagData = {\n url: '',\n title: 'Текст ссылки',\n type: null,\n fileId: null\n }\n\n public isValid = true;\n public errorMessage = \"\";\n\n public _data: HtmlBodyTag;\n public _tagService: TagEditorService;\n\n public presentOrEdit = true;\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(tag => {\n this._data = tag;\n\n this.linkData.url = this._data.attributes[LinkTagAttrs.Url];\n this.linkData.title = this._data.attributes[LinkTagAttrs.Title];\n this.linkData.type = this._data.attributes[LinkTagAttrs.Type];\n\n this.validate();\n this._cdr.markForCheck();\n })\n\n this._tagService.presentOrEdit$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n })\n }\n\n validate() {\n if (!this.linkData.url || this.linkData.url.length === 0){\n this.errorMessage = \"Ссылка не указана\";\n this.isValid = false;\n return;\n }\n\n if (!this.linkData.title || this.linkData.title.length === 0){\n this.errorMessage = \"Название ссылки не указано\";\n this.isValid = false;\n return;\n }\n\n this.isValid = true;\n }\n\n saveTag() {\n\n const attrs = {\n [LinkTagAttrs.Url]: this.linkData.url,\n [LinkTagAttrs.Title]: this.linkData.title,\n [LinkTagAttrs.Type]: this.linkData.type,\n [LinkTagAttrs.FileId]: this.linkData.fileId,\n };\n\n this._data.attributes = attrs;\n this._tagService.tag$.next(this._data);\n }\n}\n","@if (presentOrEdit) {\n\n @if (isValid){\n <div>\n <a target=\"_blank\" [attr.href]=\"linkData.url\">{{linkData.title}}</a>\n </div>\n }\n @else {\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n }\n}\n@else {\n<div>\n <mat-form-field class=\"w-100\">\n <mat-label>Название</mat-label>\n <input type=\"text\" matInput [(ngModel)]=\"linkData.title\" (ngModelChange)=\"saveTag()\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Ссылка</mat-label>\n <input type=\"text\" matInput [(ngModel)]=\"linkData.url\" (ngModelChange)=\"saveTag()\" />\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>Тип ссылки</mat-label>\n <input type=\"text\" matInput [(ngModel)]=\"linkData.type\" (ngModelChange)=\"saveTag()\" />\n </mat-form-field>\n</div>\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Input } from '@angular/core';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport { TagEditorService } from '../../../models';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'croco-html-html-raw-editor',\n templateUrl: './html-raw-editor.component.html',\n styleUrls: ['../external-video-editor/external-video-editor.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n FormsModule\n ]\n})\nexport class HtmlRawEditorComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n private readonly _sanitizer = inject(DomSanitizer);\n\n\n public _data: HtmlBodyTag;\n public _tagService: TagEditorService;\n\n public presentOrEdit = true;\n public safeHtml: SafeHtml | null = null;\n\n\n _tag: HtmlBodyTag;\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(tag => {\n this._tag = tag;\n\n this.onHtmlChanged();\n });\n\n this._tagService.presentOrEdit$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n })\n }\n\n onHtmlChanged() {\n this.safeHtml = this._sanitizer.bypassSecurityTrustHtml(this._tag.innerHtml);\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div [innerHTML]=\"safeHtml\">\n </div>\n}\n@else {\n <div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Внутренняя разметка тега\n </mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"Внутренняя разметка тега\"\n [(ngModel)]=\"_tag.innerHtml\"\n (ngModelChange)=\"onHtmlChanged()\"\n ></textarea>\n </mat-form-field>\n </div>\n </div>\n}\n\n","import { ExternalVideoTagDataConsts, FileImageTagDataConsts, FileAudioTagDataConsts } from '../../../extensions';\nimport { InterfaceBlock } from '../../../models';\nimport { HtmlBodyTag, TagItem } from '../../../models/models';\nimport { CrocoHtmlOptions, ITagEditorViewRender, ITagViewViewRender } from '../../../options';\nimport { DownloadButtonTagDataConsts, HtmlRawTagDataConsts } from '../../../tag-services';\nimport { ButtonTagDataConsts } from '../../../tag-services/ButtonTagService';\nimport { LinkTagConsts } from '../../../tag-services/LinkTagService';\nimport { HtmlRawViewComponent } from '../../xml-tags';\nimport { LinkEditorComponent } from '../link-editor/link-editor.component';\nimport { HtmlRawEditorComponent } from '../html-raw-editor/html-raw-editor.component';\n\nexport class DefaultTags {\n\n static textTags: TagItem[] = [\n { tag: 'text', displayValue: 'T', isCustom: false },\n { tag: 'h1', displayValue: 'H1', isCustom: false },\n { tag: 'h2', displayValue: 'H2', isCustom: false },\n { tag: 'h3', displayValue: 'H3', isCustom: false },\n { tag: 'h4', displayValue: 'H4', isCustom: false },\n { tag: 'h5', displayValue: 'H5', isCustom: false },\n { tag: 'h6', displayValue: 'H6', isCustom: false },\n ]\n\n static tags: TagItem[] = [\n { tag: FileImageTagDataConsts.TagName, displayValue: 'Изображение', isCustom: false },\n { tag: FileAudioTagDataConsts.TagName, displayValue: 'Аудио', isCustom: false },\n { tag: ExternalVideoTagDataConsts.TagName, displayValue: 'Видео', isCustom: false },\n { tag: LinkTagConsts.TagName, displayValue: 'Ссылка', isCustom: false },\n { tag: DownloadButtonTagDataConsts.TagName, displayValue: 'Кнопка для скачивания', isCustom: false },\n { tag: ButtonTagDataConsts.TagName, displayValue: 'Кнопка', isCustom: false },\n { tag: HtmlRawTagDataConsts.TagName, displayValue: 'Разметка', isCustom: false },\n { tag: 'text', displayValue: 'Текст', isCustom: false },\n ];\n\n static tagRenderers: { [tagName: string]: ITagViewViewRender } = {\n [HtmlRawTagDataConsts.TagName]: { viewComponent: HtmlRawViewComponent }\n }\n\n static tagEditors: { [tagName: string]: ITagEditorViewRender } = {\n [HtmlRawTagDataConsts.TagName]: { editorComponent: HtmlRawEditorComponent },\n [LinkTagConsts.TagName]: { editorComponent: LinkEditorComponent }\n }\n\n static isViewDefined(item: InterfaceBlock, options: CrocoHtmlOptions) {\n\n const tagName = item.tagName;\n\n if (options.definedViewRenderers.hasOwnProperty(tagName)) {\n return true;\n }\n\n return DefaultTags.tagRenderers.hasOwnProperty(item.tagName);\n }\n\n static isEditorDefined(tag: HtmlBodyTag, options: CrocoHtmlOptions) {\n \n if (tag === null || tag === undefined) {\n return false;\n }\n\n const tagName = tag.tagDescription.tag;\n\n if (options.definedEditorViewRenderers.hasOwnProperty(tagName)) {\n return true;\n }\n\n if (DefaultTags.tagEditors.hasOwnProperty(tagName)){\n return true;\n }\n \n return false;\n }\n\n static getEditor(tag: HtmlBodyTag, options: CrocoHtmlOptions) {\n const tagName = tag.tagDescription.tag;\n\n if (options.definedEditorViewRenderers.hasOwnProperty(tagName)) {\n return options.definedEditorViewRenderers[tagName].editorComponent;\n }\n\n if (DefaultTags.tagEditors.hasOwnProperty(tagName)){\n return DefaultTags.tagEditors[tagName].editorComponent;\n }\n\n return null;\n }\n\n static getTags(options: CrocoHtmlOptions): TagItem[] {\n\n if (options.editorCustomAddTagButtons) {\n return [...options.editorCustomAddTagButtons];\n }\n\n return [...DefaultTags.tags];\n }\n}\n","import { Component, ComponentRef, Inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { InterfaceBlock } from '../../../models/InterfaceBlock';\nimport { JsonPipe } from '@angular/common';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { HtmlPageDataController } from '../../../services';\nimport { DefaultTags } from '../../editor/visual-editor/DefaultTags';\n\n@Component({\n selector: 'croco-html-defined-custom-tag-view',\n imports: [JsonPipe],\n templateUrl: './defined-custom-tag-view.component.html',\n standalone: true\n})\nexport class DefinedCustomTagViewComponent implements OnInit, OnDestroy {\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n @Input({ required: true }) public set data(value: InterfaceBlock) {\n this._data = value;\n if(this.dynamicContainerRef) {\n this.dynamicContainerRef.setInput(\"data\", this._data);\n }\n };\n\n\n @Input({ required: true })\n dataController: HtmlPageDataController;\n\n public _data: InterfaceBlock;\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n getCustomComponent() {\n\n const tagName = this._data.tagName;\n\n if (this._options.definedViewRenderers.hasOwnProperty(tagName)) {\n return this._options.definedViewRenderers[tagName].viewComponent;\n }\n\n if (DefaultTags.tagRenderers.hasOwnProperty(tagName)) {\n return DefaultTags.tagRenderers[tagName].viewComponent;\n }\n\n return null;\n }\n\n ngOnInit(): void {\n\n var component = this.getCustomComponent();\n\n if (component) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n this.dynamicContainerRef.setInput(\"data\", this._data);\n this.dynamicContainerRef.setInput(\"dataController\", this.dataController);\n }\n }\n\n ngOnDestroy(): void {\n this.dynamicContainerRef.destroy();\n }\n}\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <div>\n <div>\n Название тега: {{data.tagName}}\n </div>\n <div>\n Данные:\n </div>\n <div>\n {{data.data | json}}\n </div>\n </div>\n }\n</ng-container>","/**\n * Сервис для прокидывания предрасчитанных данных для виджетов Html разметки.\n * Используется для оптимизации Http запросов за данными.\n */\nexport class HtmlPageDataController {\n\n public readonly _data = new Map<string, object>();\n\n /**\n * Получить данные.\n * @returns\n */\n get<T>(name: string): T | null {\n\n if (!this._data.has(name)) {\n return null;\n }\n\n return this._data.get(name) as T;\n }\n\n /**\n * Установить данные.\n * @param data\n */\n set(name: string, data: object) {\n this._data.set(name, data);\n }\n}\n","import { HtmlBodyTag } from \"../../models\";\nimport { IVisualEditorLogger } from \"./IVisualEditorLogger\";\n\n\nexport class NullVisualEditorLogger implements IVisualEditorLogger {\n \n\n onAdd(_: HtmlBodyTag[]): void {\n }\n onChange(_: HtmlBodyTag, _2: number): void {\n }\n\n onRemove(_: number): void {\n }\n\n onHtmlChanged(html: string): void {\n }\n}\n","import { HtmlBodyTag } from \"../../models\";\nimport { IVisualEditorLogger } from \"./IVisualEditorLogger\";\n\nexport class ConsoleVisualEditorLogger implements IVisualEditorLogger {\n \n onAdd(tags: HtmlBodyTag[]): void {\n const tagCopy = JSON.parse(JSON.stringify(tags));\n \n console.log(\"onAdd\", tagCopy);\n }\n\n onChange(tag: HtmlBodyTag, index: number): void {\n\n const tagCopy = JSON.parse(JSON.stringify(tag));\n\n console.log(\"onChange\", tagCopy, index);\n }\n\n onRemove(index: number): void {\n console.log(\"onRemove\", index);\n }\n\n onHtmlChanged(html: string): void {\n console.log(\"onHtmlChanged\", html);\n }\n}\n","import { Component, Inject, Input, ViewEncapsulation } from '@angular/core';\nimport { InterfaceBlock } from \"../../../models/InterfaceBlock\";\nimport { TextTags } from '../../../extensions';\nimport { XmlTagDownloadFileButtonComponent } from '../xml-tag-download-file-button/xml-tag-download-file-button.component';\nimport { XmlTagExternalVideoComponent } from '../xml-tag-external-video/xml-tag-external-video.component';\nimport { ErrorBannerComponent } from '../../error-banner/error-banner.component';\nimport { XmlTagHtmlViewComponent } from '../xml-tag-html-view/xml-tag-html-view.component';\nimport { FileImageTagViewComponent } from '../file-image-tag-view/file-image-tag-view.component';\nimport { AudioPlayerTagViewComponent } from '../audio-player-tag-view/audio-player-tag-view.component';\nimport { XmlTagHeaderTextViewComponent } from '../xml-tag-header-text-view/xml-tag-header-text-view.component';\nimport { HtmlRawViewComponent } from '../html-raw-view/html-raw-view.component';\nimport { XmlTagTextViewComponent } from '../xml-tag-text-view/xml-tag-text-view.component';\nimport { XmlTagButtonComponent } from \"../xml-tag-custom-button/xml-tag-button.component\";\nimport { XmlTagCustomWidgetComponent } from \"../xml-tag-custom-widget/xml-tag-custom-widget.component\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { DefinedCustomTagViewComponent } from '../defined-custom-tag-view/defined-custom-tag-view.component';\nimport { HtmlPageDataController } from '../../../services';\nimport { DefaultTags } from '../../editor/visual-editor/DefaultTags';\n\n@Component({\n selector: 'croco-html-xml-tag-view',\n templateUrl: './xml-tag-view.component.html',\n styleUrls: ['./xml-tag-view.component.css'],\n encapsulation: ViewEncapsulation.None,\n standalone: true,\n imports: [\n XmlTagTextViewComponent,\n HtmlRawViewComponent,\n XmlTagHeaderTextViewComponent,\n FileImageTagViewComponent,\n AudioPlayerTagViewComponent,\n XmlTagHtmlViewComponent,\n ErrorBannerComponent,\n XmlTagExternalVideoComponent,\n XmlTagDownloadFileButtonComponent,\n XmlTagButtonComponent,\n XmlTagCustomWidgetComponent,\n DefinedCustomTagViewComponent\n ],\n})\nexport class XmlTagViewComponent {\n\n @Input({ required: true })\n data: InterfaceBlock[] = [];\n\n @Input({ required: true })\n dataController: HtmlPageDataController = new HtmlPageDataController();\n\n @Input({ required: true })\n isEditor = false;\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n isHeaderTextTag(item: InterfaceBlock) {\n return TextTags.headerTextTags.includes(item.tagName);\n }\n\n isViewDefined(item: InterfaceBlock): boolean {\n return DefaultTags.isViewDefined(item, this._options);\n }\n\n isDefinedCustomTag(item: InterfaceBlock) {\n return this._options.definedCustomTags.hasOwnProperty(item.tagName);\n }\n}\n","<div>\n @for (item of data; track $index) {\n <div class=\"row\">\n\n @if (item.tagName === 'text') {\n <div>\n <croco-html-xml-tag-text-view [item]=\"item\"></croco-html-xml-tag-text-view>\n </div>\n }\n @else if (isHeaderTextTag(item)) {\n <div>\n <croco-html-xml-tag-header-text-view [item]=\"item\"></croco-html-xml-tag-header-text-view>\n </div>\n }\n @else if (item.tagName === 'file-image') {\n <div>\n <croco-html-file-image-tag-view [item]=\"item\" [isEditor]=\"isEditor\"></croco-html-file-image-tag-view>\n </div>\n }\n @else if (item.tagName === 'audio-player') {\n <div>\n <croco-html-audio-player-tag-view [data]=\"item\"></croco-html-audio-player-tag-view>\n </div>\n }\n @else if (item.tagName === 'custom-widget') {\n <div>\n <croco-html-xml-tag-custom-widget [tagData]=\"item.data\"></croco-html-xml-tag-custom-widget>\n </div>\n }\n @else if (item.tagName === 'table' && item.validationResult) {\n\n @if (item.validationResult.isSucceeded){\n <div class=\"table-container\">\n <croco-html-xml-tag-html-view [html]=\"item.data.bootstrapHtml\">\n </croco-html-xml-tag-html-view>\n </div>\n }\n @else {\n <croco-html-error-banner [message]=\"item.validationResult.message\">\n </croco-html-error-banner>\n }\n }\n @else if (item.tagName === 'external-video') {\n <div>\n <croco-html-xml-tag-external-video [data]=\"item\"></croco-html-xml-tag-external-video>\n </div>\n }\n @else if (item.tagName === 'download-file-button') {\n <div>\n <croco-html-xml-tag-download-file-button [data]=\"item\"></croco-html-xml-tag-download-file-button>\n </div>\n }\n @else if (item.tagName === 'button') {\n <div>\n <croco-html-xml-tag-button [data]=\"item\"></croco-html-xml-tag-button>\n </div>\n }\n @else if (item.tagName === 'unsupported-tag') {\n <div class=\"red\" style=\"margin-top: 10px;padding: 10px;\">\n <h4>Данный тег не поддерживается</h4>\n <span>\n {{item.data.tagString}}\n </span>\n </div>\n }\n @else if (isViewDefined(item)){\n <div>\n <croco-html-defined-custom-tag-view [data]=\"item\"\n [dataController]=\"dataController\"></croco-html-defined-custom-tag-view>\n </div>\n }\n @else if (isDefinedCustomTag(item)) {\n <div>\n <croco-html-defined-custom-tag-view [data]=\"item\"\n [dataController]=\"dataController\"></croco-html-defined-custom-tag-view>\n </div>\n }\n\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport {\n ExternalVideoTagData,\n ExternalVideoSupportedTypes,\n} from '../../../extensions';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { FormsModule } from '@angular/forms';\nimport { XmlTagExternalVideoComponent } from '../../xml-tags';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckbox } from \"@angular/material/checkbox\";\n\n@Component({\n selector: 'croco-html-external-video-editor',\n templateUrl: './external-video-editor.component.html',\n styleUrls: ['./external-video-editor.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n XmlTagExternalVideoComponent,\n MatCheckbox,\n ]\n})\nexport class ExternalVideoEditorComponent implements OnInit {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({required: true})\n tag: HtmlBodyTag;\n\n @Input({required: true})\n presentOrEdit = true;\n\n protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n\n tagData: ExternalVideoTagData = {\n link: '',\n innerHtml: '',\n type: ExternalVideoSupportedTypes.Youtube,\n useResponsiveWrapper: false,\n };\n\n linkText = '';\n\n ngOnInit(): void {\n const { link, type, useResponsiveWrapper } = this.tag.attributes as ExternalVideoTagData;\n\n this.tagData = {\n link,\n type,\n useResponsiveWrapper,\n innerHtml: this.tag.innerHtml\n }\n\n switch (this.tagData.type) {\n case ExternalVideoSupportedTypes.Youtube: {\n this.linkText = 'Ссылка на YouTube'\n break;\n }\n case ExternalVideoSupportedTypes.VkVideo: {\n this.linkText = 'Ссылка на Vk Video'\n break;\n }\n case ExternalVideoSupportedTypes.Code: {\n this.linkText = 'Встраиваемый код'\n break;\n }\n }\n\n this._cdr.markForCheck();\n }\n\n linkChanged() {\n if (this.tagData.link.includes('iframe')) {\n this.createLinkByIFrame()\n }\n\n const { innerHtml, ...tagData } = this.tagData;\n this.tag.attributes = tagData;\n this.tag.innerHtml = innerHtml;\n\n this._cdr.markForCheck();\n }\n\n onCheck(checked: boolean): void {\n this.tagData.useResponsiveWrapper = checked;\n this.linkChanged();\n }\n\n createLinkByIFrame() {\n const parser = new DOMParser();\n const document = parser.parseFromString(this.tagData.link, \"text/html\");\n const elem = document.body.children[0];\n const src = elem.getAttribute(\"src\");\n this.tagData.link = src;\n\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div style=\"word-break: break-all\">\n @switch (tagData.type) {\n @case (ExternalVideoSupportedTypes.VkVideo) {\n {{linkText}}: {{tagData.link}}\n }\n @case (ExternalVideoSupportedTypes.Youtube) {\n {{linkText}}: {{tagData.link}}\n }\n @case (ExternalVideoSupportedTypes.Code) {\n <div>\n Встраиваемый код плеера.\n </div>\n }\n }\n </div>\n <div style=\"height: 10px;\"></div>\n <croco-html-xml-tag-external-video [tagData]=\"tagData\"></croco-html-xml-tag-external-video>\n </div>\n}\n@else {\n @if(tagData.type !== ExternalVideoSupportedTypes.Code) {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n {{linkText}}\n </mat-label>\n <input matInput placeholder=\"{{linkText}}\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.link\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n </div>\n } @else {\n <div>\n <mat-label>\n {{linkText}}\n </mat-label>\n <mat-form-field class=\"w-100\">\n <mat-label>Разметка</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Текст\"\n #textArea\n [(ngModel)]=\"tagData.innerHtml\"\n (ngModelChange)=\"linkChanged()\"\n ></textarea>\n </mat-form-field>\n\n <mat-checkbox\n [checked]=\"tagData.useResponsiveWrapper\"\n (change)=\"onCheck($event.checked)\"\n >\n Использовать адаптив?\n </mat-checkbox>\n </div>\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { ImageMethods } from '../../extensions/ImageMethods';\nimport { PublicFilesQueryService } from '../../services/PublicFilesQueryService';\nimport { CrocoHtmlOptionsToken } from '../../consts';\nimport { FormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { CrocoHtmlEditorFileOptions, CrocoHtmlOptions } from '../../options';\nimport { PrivateFilesQueryService } from \"../../services/PrivateFilesQueryService\";\nimport { CrocoHtmlFileOptionsService } from \"../../services/CrocoHtmlFileOptionsService\";\nimport { FileType } from '../../services/file-models';\n\nexport interface SearchQuestionsFormData {\n q: string;\n}\n\nexport interface FileUnifiedModel {\n fileId: string;\n fileName: string;\n}\n\n@Component({\n selector: 'croco-html-file-id-select',\n templateUrl: './file-id-select.component.html',\n styleUrls: ['./file-id-select.component.scss'],\n standalone: true,\n imports: [NgSelectModule, FormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileIdSelectComponent implements OnInit, OnChanges {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n \n q: string;\n\n @Input()\n labelText = \"Поиск файлов\"\n\n @Input()\n @Output()\n fileId: string;\n\n loading = false;\n\n files: FileUnifiedModel[] = [];\n\n @Output()\n onFileIdChanged = new EventEmitter<string>();\n\n get crocoHtmlEditorFileOptions(): CrocoHtmlEditorFileOptions {\n return this._htmlSettingsService.get();\n }\n\n constructor(\n private readonly _publicFileService: PublicFilesQueryService,\n private readonly _privateFileService: PrivateFilesQueryService,\n private _htmlSettingsService: CrocoHtmlFileOptionsService,\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions\n ) {\n }\n\n onModelChanged(fileId: string) {\n this.onFileIdChanged.emit(fileId);\n }\n\n getSrc(fileId: string) {\n return ImageMethods.buildSmallUrl(fileId, this._options);\n }\n\n ngOnInit(): void {\n this.loadFiles();\n }\n\n public loadFiles() {\n this.loading = true;\n const isPrivate = this.crocoHtmlEditorFileOptions.usePrivateFiles;\n\n const searchParams = {\n count: 10,\n offSet: 0,\n fileName: null,\n fileTypes: [FileType.Image],\n applicationId: isPrivate ? this.crocoHtmlEditorFileOptions.applicationId : null,\n q: this.q\n };\n\n this._cdr.markForCheck();\n\n if (isPrivate) {\n this._privateFileService.search(searchParams)\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.id, fileName: el.fileName }));\n this.loading = false;\n\n this._cdr.markForCheck();\n });\n } else {\n this._publicFileService.search(searchParams)\n .subscribe(data => {\n this.files = data.list.map(el => ({ fileId: el.fileId.toString(), fileName: el.fileName }));\n this.loading = false;\n\n this._cdr.markForCheck();\n })\n }\n }\n\n onSearchChanged(q: { term: string, items: object[] }) {\n this.q = q.term;\n this.loadFiles();\n\n this._cdr.markForCheck();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.loadFiles();\n }\n}\n","<div class=\"file-id\">\n <div class=\"form-group\">\n <label for=\"fileName\">{{labelText}}</label>\n <ng-select [(ngModel)]=\"fileId\" (ngModelChange)=\"onModelChanged($event)\" [items]=\"files\" #select\n bindLabel=\"fileName\" (search)=\"onSearchChanged($event)\" [loading]=\"loading\" [loadingText]=\"'Загружаю файлы'\"\n dropdownPosition=\"auto\" [bindValue]=\"'fileId'\" labelForId=\"fileName\" placeholder=\"Выбрать файл\"\n [virtualScroll]=\"true\">\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <div class=\"file-id__container\">\n <div class=\"file-id__text-container\">\n <div>\n <span class=\"h5\">Файл: </span>\n <span class=\"h5\"><b>{{item.fileName}}</b></span>\n </div>\n <div>\n <small>\n <span>\n Идентификатор файла: <b>{{item.fileId }}</b>\n </span>\n </small>\n </div>\n </div>\n <div class=\"file-id__img\">\n <img class=\"mx-auto d-block img-fluid\" [src]=\"getSrc(item.fileId)\" />\n </div>\n </div>\n\n </ng-template>\n </ng-select>\n </div>\n</div>\n\n<div>\n Идентификатор файла: {{fileId}}\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ImageMethods, FileImageTagDataConsts } from '../../../extensions';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { FileIdSelectComponent } from '../../file-id-select/file-id-select.component';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { NgStyle } from \"@angular/common\";\nimport { ScreenWidthService } from \"../../../services/screen-width.service\";\nimport { MatIconButton } from \"@angular/material/button\";\nimport { MatSlideToggle } from \"@angular/material/slide-toggle\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CrocoHtmlOptions } from '../../../options';\nimport { IImageMediaRequest } from '../../../models';\n\n@Component({\n selector: 'croco-html-image-editor',\n templateUrl: './image-editor.component.html',\n styleUrls: ['./image-editor.component.scss'],\n standalone: true,\n imports: [\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatIcon,\n FileIdSelectComponent,\n MatFormField,\n MatLabel,\n MatInput,\n NgStyle,\n MatIconButton,\n MatSlideToggle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ImageEditorComponent implements OnInit, OnDestroy {\n\n hasImageError = false;\n searchOrEdit = \"search\";\n requests: IImageMediaRequest[] = [];\n imageMaxHeight: number = null;\n imageMaxWidth: number = null;\n isShowMediaRequest = false;\n private unsubscribe = new Subject<void>();\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = true;\n\n onErrorHandler() {\n this.hasImageError = true;\n }\n\n public get fileId(): string {\n return this.tag.attributes[FileImageTagDataConsts.FileIdAttrName];\n }\n\n public set fileId(value: string) {\n this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = value;\n }\n\n constructor(\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions,\n private readonly screenWidthService: ScreenWidthService,\n ) { }\n\n getSrc() {\n return ImageMethods.buildUrl(this.tag.attributes[FileImageTagDataConsts.FileIdAttrName], \"Medium\", this._options);\n }\n\n hasFileId() {\n return this.tag.attributes.hasOwnProperty(FileImageTagDataConsts.FileIdAttrName);\n }\n\n onFileIdChanged(fileId: string) {\n this.tag.attributes[FileImageTagDataConsts.FileIdAttrName] = fileId;\n this.removeImageError();\n }\n\n removeImageError() {\n this.hasImageError = false;\n this._cdr.markForCheck();\n }\n\n ngOnInit(): void {\n let attr = this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest];\n this.requests = ImageMethods.mediaRequestStringToArrayParser(attr)\n\n this.screenWidthService.getScreenWidth()\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(screenWidth => {\n let imageRestrictions = ImageMethods.getImageRestrictionsByScreenSize(screenWidth, this.requests);\n\n this.imageMaxHeight = imageRestrictions.maxHeight;\n this.imageMaxWidth = imageRestrictions.maxWidth;\n\n if (this._options.imageOptions.visualEditorOptions?.editorModeImageMaxHeight) {\n const visualMaxHeight = this._options.imageOptions.visualEditorOptions.editorModeImageMaxHeight;\n if (this.imageMaxHeight === null || this.imageMaxHeight === undefined || visualMaxHeight < this.imageMaxHeight) {\n this.imageMaxHeight = visualMaxHeight;\n }\n }\n\n this._cdr.markForCheck();\n });\n }\n\n requestChanged() {\n this.tag.attributes[FileImageTagDataConsts.ScreenMediaRequest] = ImageMethods.mediaRequestsArrayToString(this.requests)\n }\n\n addNewMediaRequest() {\n this.requests.push({\n maxScreenWidth: 0,\n minScreenWidth: 0,\n maxImageHeight: 0,\n maxImageWidth: 0\n });\n\n this._cdr.markForCheck();\n }\n\n deleteMediaRequest(index: number) {\n this.requests.splice(index, 1);\n this.requestChanged();\n\n this._cdr.markForCheck();\n }\n\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","<div>\n <div style=\"height: 10px;\">\n </div>\n\n @if (hasImageError) {\n <div class=\"error-block\">\n Изображение не найдено по указанному идентификатору, возможно файл не существует или отсутствует на сервере.\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>[Изображение не выбрано]</h5>\n </div>\n }\n\n @if(!presentOrEdit) {\n <mat-slide-toggle style=\"padding: 10px 0\" [(ngModel)]=\"isShowMediaRequest\">Показывать медиа запросы</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>Медиа запросы:</span>\n @if (!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 (presentOrEdit) {\n <div style=\"display: flex; flex-direction: column; gap: 5px\">\n <span class=\"w-100\">Минимальная ширина: {{request.minScreenWidth}}</span>\n <span class=\"w-100\">Максимальная ширина: {{request.maxScreenWidth}}</span>\n <span class=\"w-100\">Максимальная высота изображения: {{request.maxImageHeight}}</span>\n <span class=\"w-100\">Максимальная ширина изображения: {{request.maxImageWidth}}</span>\n </div>\n }\n @else {\n <div style=\"width: 100%\">\n <mat-form-field class=\"w-100\">\n <mat-label>\n Минимальная ширина\n </mat-label>\n <input matInput placeholder=\"Минимальная граница ширины\"\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 Максимальная ширина\n </mat-label>\n <input matInput placeholder=\"Максимальная граница ширины\"\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 Максимальная высота изображения\n </mat-label>\n <input matInput placeholder=\"Максимальная высота изображения\"\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 Максимальная ширина изображения\n </mat-label>\n <input matInput placeholder=\"Максимальная ширина изображения\"\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 (!presentOrEdit) {\n <div>\n <div style=\"height: 10px;\"></div>\n <div style=\"overflow-x:auto;\" class=\"mode-toggle-container\">\n <mat-button-toggle-group [(ngModel)]=\"searchOrEdit\">\n <mat-button-toggle value=\"search\">\n Искать файл <mat-icon>search</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"edit\">\n Указать по идентификатору <mat-icon>settings</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div [hidden]=\"searchOrEdit !== 'search'\">\n <div class=\"file-selection\">\n <div class=\"existing-files\">\n <h6>Выбрать из существующих файлов:</h6>\n <croco-html-file-id-select\n [labelText]=\"'Выбрать файл'\"\n [fileId]=\"fileId\"\n (onFileIdChanged)=\"onFileIdChanged($event)\">\n </croco-html-file-id-select>\n </div>\n </div>\n </div>\n <div [hidden]=\"searchOrEdit !== 'edit'\">\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Идентификатор файла\n </mat-label>\n <input matInput placeholder=\"Идентификатор файла\" new-autocomplete=\"off\" autocomplete=\"off\"\n [(ngModel)]=\"fileId\"\n (ngModelChange)=\"onFileIdChanged($event)\">\n </mat-form-field>\n </div>\n </div>\n </div>\n}\n","import { TextAlignment } from \"../../../tag-services\";\n\nexport const AlignmentsData = [\n { value: TextAlignment.Left , text: 'Слева' },\n { value: TextAlignment.Center, text: 'По центру' },\n { value: TextAlignment.Right, text: 'Справа' },\n];\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { MatFormField, MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { XmlTagDownloadFileButtonComponent } from \"../../xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component\";\nimport { DownloadButtonTagData } from '../../../tag-services/DownloadButtonTagService';\n\n@Component({\n selector: 'croco-html-download-file-button-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatFormField,\n MatInput,\n ReactiveFormsModule,\n FormsModule,\n XmlTagDownloadFileButtonComponent,\n MatFormFieldModule\n ],\n templateUrl: './download-file-button-editor.component.html'\n})\nexport class DownloadFileButtonEditorComponent {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({required: true})\n tag: HtmlBodyTag;\n\n\n @Input({required: true})\n presentOrEdit = true;\n\n tagData: DownloadButtonTagData = {\n link: '',\n title: ''\n };\n\n ngOnInit(): void {\n this.tagData.link = (this.tag.attributes as DownloadButtonTagData).link;\n this.tagData.title = (this.tag.attributes as DownloadButtonTagData).title;\n\n this._cdr.markForCheck();\n }\n\n linkChanged() {\n this.tag.attributes = this.tagData;\n\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div>\n Ссылка для скачивания: {{tagData.link}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n Текст кнопки: {{tagData.title}}\n </div>\n <div style=\"height: 20px;\"></div>\n <croco-html-xml-tag-download-file-button [tagData]=\"tagData\"></croco-html-xml-tag-download-file-button>\n </div>\n}\n@else {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Ссылка на скачивание\n </mat-label>\n <input matInput placeholder=\"Ссылка на скачивание\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.link\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n Текст на кнопке\n </mat-label>\n <input matInput placeholder=\"Текст на кнопке\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.title\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnDestroy } from '@angular/core';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatIcon } from '@angular/material/icon';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';\nimport { TagEditorService } from '../../../models';\nimport { TextAlignment, TextTagDataConsts } from '../../../tag-services';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Component({\n selector: 'croco-html-text-editor',\n templateUrl: './text-editor.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatButtonToggleGroup,\n FormsModule,\n MatButtonToggle,\n MatIcon,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize\n ]\n})\nexport class TextEditorComponent implements OnDestroy {\n\n private unsubscribe = new Subject<void>();\n\n _tag: HtmlBodyTag;\n _tagService: TagEditorService;\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(tag => {\n this._tag = tag;\n this._cdr.markForCheck();\n });\n\n this._tagService.presentOrEdit$\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n });\n\n this._horizontalAlignment = this._tag.attributes.hasOwnProperty(TextTagDataConsts.HAlign)\n ? this._tag.attributes[TextTagDataConsts.HAlign]\n : TextAlignment.Left\n\n this._cdr.markForCheck();\n }\n\n presentOrEdit = true;\n\n public TextAlignment = TextAlignment;\n\n public _horizontalAlignment: TextAlignment = TextAlignment.Left;\n\n changeData() {\n this._tag.attributes[TextTagDataConsts.HAlign] = this._horizontalAlignment;\n\n this._tagService.tag$.next(this._tag);\n this._cdr.markForCheck();\n }\n\n getInnerHtml() {\n return `<${this._tag.tagDescription.tag}>${this._tag.innerHtml}<${this._tag.tagDescription.tag}/>`;\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div style=\"height: 10px;\">\n </div>\n @if (_horizontalAlignment === TextAlignment.Left) {\n <div style=\"text-align: left;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @else if (_horizontalAlignment === TextAlignment.Right) {\n <div style=\"text-align: right;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n @else if (_horizontalAlignment === TextAlignment.Center) {\n <div style=\"text-align: center;\" [innerHtml]=\"getInnerHtml()\">\n </div>\n }\n </div>\n}\n@else {\n <div>\n <div style=\"overflow-x: auto;\">\n <mat-button-toggle-group [(ngModel)]=\"_horizontalAlignment\" (ngModelChange)=\"changeData()\">\n <mat-button-toggle value=\"center\">\n По центру <mat-icon>format_align_center</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"left\">\n Слева <mat-icon>format_align_left</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle value=\"right\">\n Справа <mat-icon> format_align_right</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div style=\"height: 10px;\">\n </div>\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>Внутренняя разметка текстового тега</mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n placeholder=\"Внутренняя разметка текстового тега\"\n [(ngModel)]=\"_tag.innerHtml\" (ngModelChange)=\"changeData()\"></textarea>\n </mat-form-field>\n </div>\n </div>\n}\n","import { ChangeDetectorRef, Component, inject, Input } from '@angular/core';\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { XmlTagButtonComponent } from \"../../xml-tags/xml-tag-custom-button/xml-tag-button.component\";\nimport { ButtonTagData } from '../../../tag-services/ButtonTagService';\n\n@Component({\n selector: 'croco-html-button-editor',\n standalone: true,\n imports: [\n FormsModule,\n MatFormField,\n MatInput,\n MatLabel,\n XmlTagButtonComponent\n ],\n templateUrl: './button-editor.component.html'\n})\nexport class ButtonEditorComponent {\n private readonly _cdr = inject(ChangeDetectorRef);\n \n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = true;\n\n tagData: ButtonTagData = {\n type: '',\n text: '',\n click: ''\n };\n\n ngOnInit(): void {\n const data = this.tag.attributes as ButtonTagData;\n this.tagData.type = data.type;\n this.tagData.text = data.text;\n this.tagData.click = data.click;\n\n this._cdr.markForCheck();\n }\n\n linkChanged() {\n this.tag.attributes = this.tagData;\n\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n <div>\n <div>\n Тип: {{tagData.type}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n Текст: {{tagData.text}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n Обработчик нажатия: {{tagData.click}}\n </div>\n <div style=\"height: 10px;\"></div>\n <croco-html-xml-tag-button [tagData]=\"tagData\"></croco-html-xml-tag-button>\n </div>\n} @else {\n <div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n Тип\n </mat-label>\n <input matInput placeholder=\"Тип\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.type\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n Текст\n </mat-label>\n <input matInput placeholder=\"Текст\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.text\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n Обработчик нажатия\n </mat-label>\n <input matInput placeholder=\"Обработчик нажатия\"\n autocomplete=\"off\"\n [(ngModel)]=\"tagData.click\"\n (ngModelChange)=\"linkChanged()\">\n </mat-form-field>\n </div>\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnInit } from '@angular/core';\nimport { HtmlBodyTag } from \"../../../models/models\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatFormField, MatLabel } from \"@angular/material/form-field\";\nimport { MatInput } from \"@angular/material/input\";\nimport { XmlTagCustomWidgetComponent } from \"../../xml-tags\";\nimport { CustomWidgetTagData, CustomWidgetTagService } from '../../../tag-services/CustomWidgetTagService';\n\n@Component({\n selector: 'croco-html-custom-widget-editor',\n standalone: true,\n imports: [\n FormsModule,\n MatFormField,\n MatInput,\n MatLabel,\n XmlTagCustomWidgetComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './custom-widget-editor.component.html'\n})\nexport class CustomWidgetEditorComponent implements OnInit {\n private readonly _cdr = inject(ChangeDetectorRef);\n \n @Input({ required: true })\n tag: HtmlBodyTag;\n\n @Input({ required: true })\n presentOrEdit = false;\n\n tagData: CustomWidgetTagData = {\n type: '',\n dataId: '',\n widgetId: ''\n };\n\n ngOnInit(): void {\n this.tagData = CustomWidgetTagService.ExtractCustomWidgetTagData(this.tag.attributes);\n this._cdr.markForCheck();\n }\n\n dataChanged() {\n this.tag.attributes = CustomWidgetTagService.ExtractCustomWidgetAttributes(this.tagData);\n this._cdr.markForCheck();\n }\n}\n","@if (presentOrEdit) {\n<div>\n <div>\n <b>type:</b> {{tagData.type}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n <b>data-id:</b> {{tagData.dataId}}\n </div>\n <div style=\"height: 10px;\"></div>\n <div>\n <b>widget-id:</b> {{tagData.widgetId}}\n </div>\n <div style=\"height: 10px;\"></div>\n <croco-html-xml-tag-custom-widget [tagData]=\"tagData\"></croco-html-xml-tag-custom-widget>\n</div>\n} @else {\n<div>\n <mat-form-field class=\"w-100\">\n <mat-label>\n type\n </mat-label>\n <input matInput placeholder=\"type\" autocomplete=\"off\" [(ngModel)]=\"tagData.type\" (ngModelChange)=\"dataChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n data-id\n </mat-label>\n <input matInput placeholder=\"data-id\" autocomplete=\"off\" [(ngModel)]=\"tagData.dataId\"\n (ngModelChange)=\"dataChanged()\">\n </mat-form-field>\n\n <mat-form-field class=\"w-100\">\n <mat-label>\n widget-id\n </mat-label>\n <input matInput placeholder=\"widget-id\" autocomplete=\"off\" [(ngModel)]=\"tagData.widgetId\"\n (ngModelChange)=\"dataChanged()\">\n </mat-form-field>\n</div>\n}","import { BehaviorSubject } from \"rxjs\";\nimport { HtmlBodyTag } from \"./models\";\n\nexport class TagEditorService {\n public readonly tag$ = new BehaviorSubject<HtmlBodyTag>(null);\n public readonly presentOrEdit$ = new BehaviorSubject<boolean>(true);\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, DestroyRef, inject, Inject, Input, OnDestroy, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { HtmlBodyTag, TagEditorService } from '../../../../../models';\nimport { CrocoHtmlOptions } from '../../../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../../../consts';\nimport { DefaultTags } from '../../../visual-editor/DefaultTags';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'croco-html-defined-custom-editor-block',\n imports: [],\n templateUrl: './defined-custom-editor-block.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefinedCustomEditorBlockComponent implements OnInit, OnDestroy {\n\n private readonly _cdr = inject(ChangeDetectorRef);\n private readonly _destroyRef = inject(DestroyRef);\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n public _tagService: TagEditorService;\n public _tag: HtmlBodyTag;\n\n @Input({ required: true })\n set tagService(data: TagEditorService) {\n this._tagService = data;\n\n this._tagService.tag$\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe(tag => {\n this._tag = tag;\n this._cdr.markForCheck();\n });\n \n this._cdr.markForCheck();\n }\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n ngOnInit(): void {\n\n var component = DefaultTags.getEditor(this._tag, this._options);\n\n if (component) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n\n this.dynamicContainerRef.setInput(\"tagService\", this._tagService);\n }\n\n this._cdr.markForCheck();\n }\n\n ngOnDestroy(): void {\n this.dynamicContainerRef.destroy();\n }\n}\n\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <div>\n Редактор разметки для {{_tag.tagDescription.tag}} не описан.\n </div>\n <div>\n Установите CrocoHtmlOptions.definedCustomTagViewRenderers[{{_tag.tagDescription.tag}}].editorComponent\n </div>\n }\n</ng-container>","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Inject, Input, OnDestroy, Output} from '@angular/core';\nimport { TextTags } from '../../../extensions/TextMethods';\nimport { HtmlBodyTag } from '../../../models/models';\nimport { MatIconButton } from '@angular/material/button';\nimport { DownloadFileButtonEditorComponent } from '../download-file-button-editor/download-file-button-editor.component';\nimport { ImageEditorComponent } from '../image-editor/image-editor.component';\nimport { AudioEditorComponent } from '../audio-editor/audio-editor.component';\nimport { TextEditorComponent } from '../text-editor/text-editor.component';\nimport { ExternalVideoEditorComponent } from '../external-video-editor/external-video-editor.component';\nimport { ButtonEditorComponent } from \"../button-editor/button-editor.component\";\nimport { CustomWidgetEditorComponent } from \"../custom-widget-editor/custom-widget-editor.component\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { JsonPipe } from '@angular/common';\nimport { TagEditorService } from '../../../models/editor-models';\nimport { Subject, takeUntil } from 'rxjs';\nimport {\n DefinedCustomEditorBlockComponent\n} from \"./components/defined-custom-editor-block/defined-custom-editor-block.component\";\nimport { DefaultTags } from '../visual-editor/DefaultTags';\n\n@Component({\n selector: 'croco-html-main-editor-block',\n templateUrl: './main-editor-block.component.html',\n styleUrls: ['./main-editor-block.component.css'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TextEditorComponent,\n ImageEditorComponent,\n AudioEditorComponent,\n DownloadFileButtonEditorComponent,\n MatIconButton,\n ExternalVideoEditorComponent,\n ButtonEditorComponent,\n CustomWidgetEditorComponent,\n JsonPipe,\n DefinedCustomEditorBlockComponent,\n ]\n})\nexport class MainEditorBlockComponent implements OnDestroy {\n\n textTags = TextTags.allTextTags;\n\n private unsubscribe = new Subject<void>();\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n set tag(data: HtmlBodyTag) {\n this._tag = data;\n this._tagService = new TagEditorService();\n\n this._tagService.tag$.next(this._tag);\n this._tagService.presentOrEdit$\n .pipe(takeUntil(this.unsubscribe))\n .subscribe(val => {\n this.presentOrEdit = val;\n this._cdr.markForCheck();\n });\n }\n\n public _tag: HtmlBodyTag | null = null;\n public _tagService: TagEditorService;\n\n public presentOrEdit = true;\n\n @Output()\n onTagSaved = new EventEmitter<HtmlBodyTag>();\n\n @Output()\n onTagRemoved = new EventEmitter<HtmlBodyTag>();\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n save() {\n const tag = this._tagService.tag$.value;\n\n this.onTagSaved.emit(tag);\n this._tagService.presentOrEdit$.next(true);\n }\n\n cancelSave() {\n this._tagService.presentOrEdit$.next(false);\n }\n\n isEditorDefined() {\n return DefaultTags.isEditorDefined(this._tag, this._options);\n }\n\n deleteItem() {\n this.onTagRemoved.emit(this._tag);\n }\n\n ngOnDestroy(): void {\n this.unsubscribe.next();\n this.unsubscribe.complete();\n }\n}\n","<div class=\"main-editor-block\">\n <div class=\"editor-container\">\n @if (textTags.includes(_tag.tagDescription.tag)) {\n <div>\n <croco-html-text-editor [tagService]=\"_tagService\">\n </croco-html-text-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'file-image') {\n <div>\n <croco-html-image-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-image-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'audio-player') {\n <div>\n <croco-html-audio-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-audio-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'custom-widget') {\n <div>\n <croco-html-custom-widget-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-custom-widget-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'external-video') {\n <div>\n <croco-html-external-video-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-external-video-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'download-file-button') {\n <div>\n <croco-html-download-file-button-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-download-file-button-editor>\n </div>\n }\n @else if (_tag.tagDescription.tag === 'button') {\n <div>\n <croco-html-button-editor [presentOrEdit]=\"presentOrEdit\" [tag]=\"_tag\">\n </croco-html-button-editor>\n </div>\n }\n @else if (isEditorDefined()) {\n <div>\n <croco-html-defined-custom-editor-block [tagService]=\"_tagService\"></croco-html-defined-custom-editor-block>\n </div>\n }\n @else {\n <div>\n {{_tag.tagDescription.tag}} не показан\n </div>\n <div>\n {{_tag | json}}\n </div>\n }\n\n </div>\n\n <div class=\"d-flex justify-content-between\">\n <div class=\"d-flex justify-content-end align-self-center\">\n <div style=\"margin-left: 16px;min-width: 96px\">\n @if (presentOrEdit) {\n <button (click)=\"cancelSave()\" mat-icon-button>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M14.4374 0C15.0921 0 15.7197 0.261421 16.1781 0.723424L19.279 3.82432C19.7407 4.286 20.0001 4.91217 20.0001 5.56508C20.0001 6.21799 19.7407 6.84416 19.279 7.30584L7.95751 18.6238C7.25903 19.4295 6.2689 19.9245 5.1346 20.0023H0V19.0023L0.00324754 14.7873C0.0884381 13.7328 0.578667 12.7523 1.3265 12.0934L12.6954 0.72463C13.1564 0.260831 13.7834 0 14.4374 0ZM5.06401 18.0048C5.59823 17.967 6.09551 17.7184 6.49482 17.2616L14.0567 9.69971L10.3024 5.94518L2.69613 13.5496C2.29098 13.9079 2.04034 14.4092 2.00003 14.8678V18.0029L5.06401 18.0048ZM11.7167 4.53114L15.471 8.28549L17.8648 5.89162C17.9514 5.80502 18.0001 5.68756 18.0001 5.56508C18.0001 5.4426 17.9514 5.32514 17.8648 5.23854L14.7612 2.13486C14.6755 2.04855 14.559 2 14.4374 2C14.3158 2 14.1992 2.04855 14.1136 2.13486L11.7167 4.53114Z\"\n fill=\"#323E8B\" />\n </svg>\n </button>\n }\n @else {\n <button (click)=\"save()\" mat-icon-button>\n <svg width=\"800px\" height=\"800px\" viewBox=\"0 0 24 24\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-labelledby=\"saveIconTitle\" stroke=\"#000000\" stroke-width=\"1\" stroke-linecap=\"square\"\n stroke-linejoin=\"miter\" fill=\"none\" color=\"#000000\">\n <title id=\"saveIconTitle\">Save</title>\n <path\n d=\"M17.2928932,3.29289322 L21,7 L21,20 C21,20.5522847 20.5522847,21 20,21 L4,21 C3.44771525,21 3,20.5522847 3,20 L3,4 C3,3.44771525 3.44771525,3 4,3 L16.5857864,3 C16.8510029,3 17.1053568,3.10535684 17.2928932,3.29289322 Z\" />\n <rect width=\"10\" height=\"8\" x=\"7\" y=\"13\" />\n <rect width=\"8\" height=\"5\" x=\"8\" y=\"3\" />\n </svg>\n </button>\n }\n <button (click)=\"deleteItem()\" mat-icon-button color=\"warn\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7.49988 0.833332H12.4999C13.4204 0.833332 14.1665 1.57952 14.1665 2.5V3.33333H16.6665C17.587 3.33333 18.3332 4.07952 18.3332 4.99999V6.66666C18.3332 7.58714 17.587 8.33333 16.6665 8.33333H16.5998L15.8332 17.5C15.8332 18.4205 15.087 19.1667 14.1665 19.1667H5.8332C4.91272 19.1667 4.16653 18.4205 4.16941 17.5692L3.39975 8.33333H3.33317C2.4127 8.33333 1.6665 7.58714 1.6665 6.66666V4.99999C1.6665 4.07952 2.4127 3.33333 3.33317 3.33333H5.83321V2.5C5.83321 1.57952 6.5794 0.833332 7.49988 0.833332ZM5.83321 5V4.99999H3.33317V6.66666H16.6665V4.99999L14.1665 5H5.83321ZM5.83324 17.5L5.07198 8.33333H14.9276L14.1695 17.4308L14.1666 17.5H5.83324ZM12.4999 2.5V3.33334H7.49992V2.5H12.4999Z\"\n fill=\"#F96666\" />\n </svg>\n </button>\n </div>\n </div>\n\n </div>\n</div>","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { SpriteIdsType } from \"../../sprites-ids.type\";\n\n@Pipe({\n name: 'spriteIconPath',\n standalone: true,\n})\nexport class SpriteIconPathPipe implements PipeTransform {\n transform(id: SpriteIdsType): string {\n return `assets/lib-sprites/symbol/croco-html-svg-sprite.svg#${id}`;\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, inject, Inject, Input, OnInit, ViewChild, ViewContainerRef } from '@angular/core';\nimport { CrocoHtmlOptions } from '../../../../../options';\nimport { CrocoHtmlOptionsToken } from '../../../../../consts';\n\n@Component({\n selector: 'croco-html-custom-widget-icon',\n imports: [],\n templateUrl: './custom-widget-icon.component.html',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CustomWidgetIconComponent implements OnInit {\n\n @ViewChild('container', { read: ViewContainerRef, static: true })\n viewContainerRef!: ViewContainerRef;\n\n public useDynamicComponent = false;\n\n public dynamicContainerRef: ComponentRef<any>;\n\n private readonly _cdr = inject(ChangeDetectorRef);\n\n @Input({ required: true })\n set tagName(tagName: string) {\n this._tagName = tagName;\n this._shortTagName = tagName.substring(0, 2);\n\n this._cdr.markForCheck();\n }\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n }\n\n getIconComponent() {\n if (this._options.definedEditorViewRenderers.hasOwnProperty(this._tagName)) {\n return this._options.definedEditorViewRenderers[this._tagName].iconComponent;\n }\n\n return null;\n }\n\n _tagName: string = \"\";\n _shortTagName: string = \"\";\n\n ngOnInit(): void {\n\n var component = this.getIconComponent();\n\n if (component) {\n this.useDynamicComponent = true;\n this.viewContainerRef.remove();\n this.dynamicContainerRef = this.viewContainerRef.createComponent(component);\n }\n\n this._cdr.markForCheck();\n }\n}\n","<ng-container #container>\n @if (!useDynamicComponent) {\n <span>\n {{_shortTagName}}\n </span>\n }\n</ng-container>","import { CdkDragDrop, moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component, ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n ViewChild\n} from '@angular/core';\nimport {\n BodyTagsExtensions, ExternalVideoPlayers,\n ExternalVideoSupportedTypes,\n} from '../../../extensions';\nimport {\n ExternalVideoTagDataConsts,\n} from '../../../extensions';\nimport { XmlExtensions } from '../../../extensions';\nimport { TagItem, HtmlBodyTag } from '../../../models/models';\nimport { DefaultTags } from './DefaultTags';\nimport { AlignmentsData } from \"./DefaultAligments\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { MainEditorBlockComponent } from '../main-editor-block/main-editor-block.component';\nimport { AddFilesBtnComponent } from '../../add-files-btn/add-files-btn.component';\nimport { MatOption } from '@angular/material/core';\nimport { MatSelect } from '@angular/material/select';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardContent } from '@angular/material/card';\nimport { MatProgressSpinner } from '@angular/material/progress-spinner';\nimport { MatIcon } from '@angular/material/icon';\nimport { CrocoHtmlOptions } from '../../../options';\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { MatTooltip } from \"@angular/material/tooltip\";\nimport { SpriteIconPathPipe } from \"../../../pipes/sprite-icon-path.pipe\";\nimport { SpriteIdsType } from \"../../../../sprites-ids.type\";\nimport { HtmlRawTagDataConsts, TextAlignment, TextTagDataConsts } from '../../../tag-services';\nimport { CustomWidgetIconComponent } from \"./components/custom-widget-icon/custom-widget-icon.component\";\nimport { FileImageTagDataConsts } from '../../../extensions';\nimport { UploadFilesBtnComponent } from '../../upload-files-btn/upload-files-btn.component';\nimport { IVisualEditorLogger } from '../../../services/loggers/IVisualEditorLogger';\nimport { NullVisualEditorLogger } from '../../../services/loggers/NullVisualEditorLogger';\n\n@Component({\n selector: 'croco-visual-editor',\n templateUrl: './visual-editor.component.html',\n styleUrls: ['./visual-editor.component.scss'],\n standalone: true,\n imports: [\n MatProgressSpinner,\n MatCard,\n MatCardContent,\n MatButton,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n FormsModule,\n MatSelect,\n MatOption,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n MainEditorBlockComponent,\n MatButtonToggleGroup,\n MatButtonToggle,\n NgTemplateOutlet,\n MatTooltip,\n SpriteIconPathPipe,\n CustomWidgetIconComponent,\n MatIcon,\n UploadFilesBtnComponent\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VisualEditorComponent implements OnInit, AfterViewInit {\n @ViewChild('textArea') textArea: ElementRef;\n @ViewChild('imageUploadBtn') imageUploadBtn: UploadFilesBtnComponent;\n\n isLoading = false;\n loadingText = \"Идёт загрузка\";\n text = '';\n htmlRaw = '';\n\n alignment = TextAlignment.Left;\n textTag = DefaultTags.textTags[0].tag;\n textTagOptions = DefaultTags.textTags\n alignmentOptions = AlignmentsData\n isTagAdditionStarted = false\n\n @Input({ required: false })\n showMarkUp = true;\n\n @Input({ required: false })\n logger: IVisualEditorLogger = new NullVisualEditorLogger();\n\n tags: TagItem[] = [];\n videoPlayers = ExternalVideoPlayers\n selectedValue: string = null;\n selectedVideoPlayer: string;\n imageMode: 'select' | 'upload' | null = null;\n\n protected readonly ExternalVideoTagDataConsts = ExternalVideoTagDataConsts;\n protected readonly HtmlRawTagDataConsts = HtmlRawTagDataConsts;\n protected readonly ExternalVideoSupportedTypes = ExternalVideoSupportedTypes;\n protected readonly FileImageTagDataConsts = FileImageTagDataConsts;\n\n @Input()\n useHtmlRaw = true;\n\n @Input()\n @Output()\n html: string = \"\";\n\n isHtmlSet() {\n return this.html.startsWith(\"<body>\");\n }\n\n clearHtml() {\n this.html = \"\";\n this.recalculateBodyTags();\n }\n\n getHtml() {\n this.recalculateHtml();\n return this.html;\n }\n\n @Output()\n onHtmlChanged = new EventEmitter<string>();\n\n @Output()\n rendered = new EventEmitter<boolean>();\n\n bodyTags: HtmlBodyTag[] = [];\n saveBodyTags: HtmlBodyTag[] = [];\n\n useCustomWidgetsButton = false;\n\n constructor(\n private readonly _cdr: ChangeDetectorRef,\n @Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n\n this.useCustomWidgetsButton = this._options.useCustomWidgetsButton;\n }\n\n ngAfterViewInit(): void {\n this.rendered.emit(true);\n }\n\n resetTextStyle(): void {\n this.text = '';\n this.alignment = TextAlignment.Left;\n this.textTag = DefaultTags.textTags[0].tag;\n this._cdr.markForCheck();\n }\n\n drop(event: CdkDragDrop<HtmlBodyTag[]>) {\n moveItemInArray(this.bodyTags, event.previousIndex, event.currentIndex);\n this.recalculateHtml();\n }\n\n addTag(tag: HtmlBodyTag) {\n this.addTags([tag]);\n }\n\n addTags(tags: HtmlBodyTag[]) {\n\n for (let index = 0; index < tags.length; index++) {\n const tag = tags[index];\n\n this.bodyTags.push(tag);\n }\n\n this.recalculateHtml();\n\n this.logger.onAdd(tags);\n }\n\n onTagChangedHandler(data: HtmlBodyTag, index: number) {\n this.bodyTags[index] = data;\n this.recalculateHtml();\n\n this.logger.onChange(data, index);\n }\n\n onTagRemovedHandler(index: number) {\n this.bodyTags.splice(index, 1);\n this.saveBodyTags = [...this.bodyTags];\n this.recalculateHtml();\n }\n\n recalculateHtml() {\n let result = BodyTagsExtensions.bodyTagsToHtml(this.bodyTags, this._options);\n this.html = XmlExtensions.formatXml(\"<body>\" + result + \"</body>\");\n this.onHtmlChanged.emit(this.html);\n\n this._cdr.markForCheck();\n }\n\n recalculateBodyTags() {\n this.bodyTags = BodyTagsExtensions.getBodyTags(this.html, this._options);\n this.saveBodyTags = [...this.bodyTags];\n this._options.onBodyTagsRecalculated?.(this.saveBodyTags)\n this._cdr.markForCheck();\n }\n\n selectTag(data: TagItem) {\n this.htmlRaw = '';\n this.selectedValue = data.tag;\n this.imageMode = null;\n\n if (this.isTagRequiringForm()) {\n if (data.tag === 'text') {\n this.resetTextStyle();\n }\n else if (data.tag === ExternalVideoTagDataConsts.TagName) {\n this.selectedVideoPlayer = this.videoPlayers[0].type;\n }\n this._cdr.markForCheck();\n return;\n }\n\n this.addRegularTag();\n }\n\n isTagRequiringForm(): boolean {\n return this.selectedValue === 'text' ||\n this.selectedValue === ExternalVideoTagDataConsts.TagName ||\n this.selectedValue === HtmlRawTagDataConsts.TagName ||\n this.selectedValue === FileImageTagDataConsts.TagName;\n }\n\n addTagWithForm(): void {\n if (!this.selectedValue) {\n return;\n }\n\n if (this.selectedValue === 'text') {\n this.addTextTag();\n } else if (this.selectedValue === ExternalVideoTagDataConsts.TagName) {\n this.addExternalVideoTag();\n } else if (this.selectedValue === HtmlRawTagDataConsts.TagName) {\n this.addHtmlRawTag();\n } else if (this.selectedValue === FileImageTagDataConsts.TagName) {\n if (this.imageMode === 'select') {\n this.selectExistingImage();\n } else if (this.imageMode === 'upload') {\n return;\n }\n }\n\n this.resetTagForm();\n }\n\n selectExistingImage(): void {\n const tagName = FileImageTagDataConsts.TagName;\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n let tag = tagService.getDefaultValue({\n htmlRaw: '',\n selectedVideoPlayer: null\n });\n\n this.addTag(tag);\n this.resetTagForm();\n }\n }\n\n uploadNewImages(): void {\n if (this.imageUploadBtn) {\n this.imageUploadBtn.clickFileInput();\n }\n }\n\n onImageFilesUploaded(fileIds: string[] | number[]): void {\n if (fileIds && fileIds.length > 0) {\n const fileIdsString = fileIds.map(id => typeof id === 'number' ? id.toString() : id);\n\n const tags: HtmlBodyTag[] = [];\n\n fileIdsString.forEach(fileId => {\n const tag: HtmlBodyTag = {\n tagDescription: {\n tag: FileImageTagDataConsts.TagName,\n displayValue: \"Изображение\",\n isCustom: false\n },\n attributes: {\n [FileImageTagDataConsts.FileIdAttrName]: fileId,\n [FileImageTagDataConsts.ScreenMediaRequest]: FileImageTagDataConsts.DefaultValueForFileImage\n },\n innerHtml: \"\"\n };\n\n tags.push(tag);\n });\n\n this.addTags(tags);\n this.resetTagForm();\n }\n }\n\n addTextTag(): void {\n if (!this.text || this.text.trim().length === 0) {\n return;\n }\n\n let lines = this.text.split('\\n');\n let tagDescription = this.textTagOptions?.find(x => x.tag === this.textTag);\n\n const tags: HtmlBodyTag[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length > 0) {\n tags.push({\n tagDescription,\n innerHtml: line,\n attributes: {\n [TextTagDataConsts.HAlign]: `${this.alignment}`\n }\n });\n }\n }\n\n this.addTags(tags);\n }\n\n addExternalVideoTag(): void {\n const tagName = ExternalVideoTagDataConsts.TagName;\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n const tag = tagService.getDefaultValue({\n htmlRaw: this.htmlRaw,\n selectedVideoPlayer: this.selectedVideoPlayer\n });\n\n this.addTag(tag);\n }\n }\n\n addHtmlRawTag(): void {\n const tagName = HtmlRawTagDataConsts.TagName;\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n let tag = tagService.getDefaultValue({\n htmlRaw: this.htmlRaw,\n selectedVideoPlayer: null\n });\n\n this.addTag(tag);\n }\n }\n\n resetTagForm(): void {\n this.selectedValue = null;\n this.htmlRaw = '';\n this.text = '';\n this.imageMode = null;\n this.resetTextStyle();\n this.isTagAdditionStarted = false;\n\n this._cdr.markForCheck();\n }\n\n addRegularTag(): void {\n if (!this.selectedValue) {\n return;\n }\n\n const tagName = this.selectedValue;\n\n const tags: HtmlBodyTag[] = [];\n\n if (BodyTagsExtensions.hasTagService(tagName, this._options)) {\n const tagService = BodyTagsExtensions.getTagService(tagName, this._options);\n let tag = tagService.getDefaultValue({\n htmlRaw: '',\n selectedVideoPlayer: null\n });\n\n tags.push(tag);\n this.resetTagForm();\n } else {\n alert(`Сервис для тега ${tagName} не зарегистрирован.`);\n }\n\n this.addTags(tags);\n }\n\n isDefinedCustomWidget(tagName: string): boolean {\n if (this._options.definedCustomTags.hasOwnProperty(tagName)) {\n return true;\n }\n\n return false;\n }\n\n customWidgetsClickHandler() {\n this._options.customWidgetClickHandler(this);\n }\n\n ngOnInit(): void {\n this.recalculateBodyTags();\n\n this.tags = DefaultTags.getTags(this._options);\n this.selectedVideoPlayer = this.videoPlayers[0].type;\n\n this._cdr.markForCheck();\n }\n\n setTagButton(tagName: string): SpriteIdsType {\n return `tag-button-${tagName}` as SpriteIdsType\n }\n\n setAlignButton(type: string): SpriteIdsType {\n return `align-${type}` as SpriteIdsType\n }\n}\n","@if (isLoading) {\n <div>\n <div>\n <mat-spinner style=\"margin:0 auto;\"></mat-spinner>\n <div style=\"text-align: center;\">{{loadingText}}</div>\n </div>\n <div style=\"height: 10px;\"></div>\n </div>\n}\n<div [hidden]=\"isLoading\">\n <div cdkDropList (cdkDropListDropped)=\"drop($event)\">\n @for (tag of bodyTags; track tag; let i = $index) {\n <div cdkDrag>\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"d-flex justify-content-between\">\n <div class=\"example-handle\" cdkDragHandle>\n <svg width=\"24\" height=\"24\" class=\"move-icon\">\n <use [attr.xlink:href]=\"'move-icon' | spriteIconPath\"></use>\n </svg>\n </div>\n <div>\n <div class=\"badge\" [matTooltip]=\"tag.tagDescription.displayValue\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tagDescription.tag}\">\n </ng-container>\n </span>\n </div>\n </div>\n </div>\n <div style=\"height: 15px;\"></div>\n <croco-html-main-editor-block [tag]=\"tag\" (onTagSaved)=\"onTagChangedHandler($event, i)\"\n (onTagRemoved)=\"onTagRemovedHandler(i)\">\n </croco-html-main-editor-block>\n </mat-card-content>\n </mat-card>\n </div>\n }\n </div>\n</div>\n<div style=\"height: 10px;\"></div>\n<div [hidden]=\"isLoading\">\n @if (!isTagAdditionStarted) {\n <div class=\"col-12\">\n <div class=\"tag-item add-tag-button\" (click)=\"isTagAdditionStarted = true\">\n <div class=\"tag-icon\">\n <mat-icon>add</mat-icon>\n </div>\n <div class=\"tag-text\">Добавить тег</div>\n </div>\n </div>\n }\n @else {\n <mat-card style=\"margin: 2px;\" class=\"mat-card special\">\n <mat-card-content>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-12\">\n <div class=\"w-100\">\n <div class=\"tags\">\n @for (tag of tags; track tag.displayValue) {\n <div class=\"tag-item\"\n (click)=\"selectTag(tag)\"\n [class.active]=\"selectedValue === tag.tag\"\n >\n <div class=\"tag-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: tag.tag}\">\n </ng-container>\n </div>\n <div class=\"tag-text\">{{tag.displayValue}}</div>\n </div>\n }\n\n @if (useCustomWidgetsButton) {\n <div class=\"tag-item\"\n (click)=\"customWidgetsClickHandler()\"\n >\n <div class=\"tag-icon\">\n <ng-container [ngTemplateOutlet]=\"tagButtonIcons\"\n [ngTemplateOutletContext]=\"{icon: 'custom-widget'}\">\n </ng-container>\n </div>\n <div class=\"tag-text\">Другие виджеты</div>\n </div>\n }\n </div>\n </div>\n </div>\n @if (selectedValue === FileImageTagDataConsts.TagName && imageMode === null) {\n <div class=\"col-12\">\n <div class=\"image-mode-selection\">\n <button (click)=\"imageMode = 'select'; selectExistingImage()\" class=\"w-100 image-mode-btn\" mat-stroked-button>\n <mat-icon>search</mat-icon>\n <span>Выбрать из уже загруженных файлов</span>\n </button>\n <button (click)=\"uploadNewImages()\" class=\"w-100 image-mode-btn\" mat-stroked-button>\n <mat-icon>upload</mat-icon>\n <span>Загрузить новые изображения</span>\n </button>\n </div>\n </div>\n }\n <croco-app-upload-files-btn\n #imageUploadBtn\n [hidden]=\"true\"\n extAccepts=\"image/*\"\n [isMultiple]=\"true\"\n btnText=\"Загрузить изображения\"\n (onPublicFilesUploaded)=\"onImageFilesUploaded($event.fileIds)\"\n (onPrivateFilesUploaded)=\"onImageFilesUploaded($event.fileIds)\">\n </croco-app-upload-files-btn>\n @if (selectedValue === ExternalVideoTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>Выберите видеоплеер</mat-label>\n <mat-select [(ngModel)]=\"selectedVideoPlayer\">\n @for (videoPlayer of videoPlayers; track videoPlayer.type) {\n <mat-option [value]=\"videoPlayer.type\">\n {{videoPlayer.displayValue}}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n @if (selectedVideoPlayer === ExternalVideoSupportedTypes.Code) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\" appearance=\"outline\">\n <mat-label>Разметка</mat-label>\n <input\n matInput\n placeholder=\"Разметка\"\n [(ngModel)]=\"htmlRaw\"\n >\n </mat-form-field>\n </div>\n }\n <div class=\"col-12\">\n <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n Добавить видео\n </button>\n </div>\n }\n @if (selectedValue === HtmlRawTagDataConsts.TagName) {\n <div class=\"col-12\">\n <mat-form-field class=\"w-100\">\n <mat-label>Разметка</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Разметка\"\n #textArea\n [(ngModel)]=\"htmlRaw\"\n ></textarea>\n </mat-form-field>\n </div>\n <div class=\"col-12\">\n <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n Добавить разметку\n </button>\n </div>\n }\n @if (selectedValue === 'text') {\n <div style=\"display: flex; justify-content: space-between; flex-wrap: wrap\">\n <div style=\"margin-bottom: 22px; overflow-x: auto;\">\n <mat-button-toggle-group\n [(ngModel)]=\"textTag\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of textTagOptions; track option) {\n <mat-button-toggle value=\"{{ option.tag }}\">\n {{ option.displayValue }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n\n <div style=\"margin-bottom: 22px\">\n <mat-button-toggle-group\n [(ngModel)]=\"alignment\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of alignmentOptions; track option.value) {\n <mat-button-toggle value=\"{{ option.value }}\">\n <span class=\"text-align-icon\">\n <ng-container [ngTemplateOutlet]=\"textAlignToggleIcons\"\n [ngTemplateOutletContext]=\"{icon: option.value}\">\n </ng-container>\n </span>\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </div>\n <mat-form-field class=\"w-100\">\n <mat-label>Текст</mat-label>\n <textarea\n #autosize=\"cdkTextareaAutosize\"\n matInput\n cdkTextareaAutosize\n cdkAutosizeMinRows=\"1\"\n cdkAutosizeMaxRows=\"5\"\n placeholder=\"Текст\"\n #textArea\n [(ngModel)]=\"text\"\n ></textarea>\n </mat-form-field>\n <div class=\"col-12\">\n <button (click)=\"addTagWithForm()\" class=\"w-100\" mat-stroked-button>\n Добавить текст\n </button>\n </div>\n }\n </div>\n\n </mat-card-content>\n </mat-card>\n }\n</div>\n\n<ng-template #textAlignToggleIcons let-icon=\"icon\">\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setAlignButton(icon) | spriteIconPath\"></use>\n </svg>\n</ng-template>\n\n<ng-template #tagButtonIcons let-icon=\"icon\">\n @if (isDefinedCustomWidget(icon)) {\n <croco-html-custom-widget-icon [tagName]=\"icon\"></croco-html-custom-widget-icon>\n }\n @else if (icon.indexOf('h') === 0 && icon.length === 2) {\n {{icon.toUpperCase()}}\n }\n @else {\n <svg width=\"20\" height=\"20\">\n <use [attr.xlink:href]=\"setTagButton(icon) | spriteIconPath\"></use>\n </svg>\n }\n</ng-template>\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { HtmlExtractionMethods } from '../extensions/HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n name: 'topreview',\n standalone: true\n})\nexport class ToPreviewPipe implements PipeTransform {\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n transform(value: string): InterfaceBlock[] {\n return HtmlExtractionMethods.transformHtmlStringToBlocks(value, this._options);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { ToPreviewPipe } from '../../pipes/to-preview.pipe';\nimport { XmlTagViewComponent } from '../xml-tags/xml-tag-view/xml-tag-view.component';\nimport { HtmlPageDataController } from '../../services';\n\n@Component({\n selector: 'croco-html-view',\n templateUrl: './html-view.component.html',\n standalone: true,\n imports: [XmlTagViewComponent, ToPreviewPipe]\n})\nexport class HtmlViewComponent {\n\n @Input({ required: true })\n html: string = \"<body></body>\";\n\n @Input({ required: false })\n isEditor = false\n\n @Input({ required: false })\n dataController: HtmlPageDataController = new HtmlPageDataController();\n}\n","<croco-html-xml-tag-view\n [data]=\"html | topreview\"\n [dataController]=\"dataController\"\n [isEditor]=\"isEditor\"\n></croco-html-xml-tag-view>\n","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatFormField, MatInput, MatLabel } from \"@angular/material/input\";\nimport { MatCheckbox } from \"@angular/material/checkbox\";\nimport { MatDialogActions, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatButton } from \"@angular/material/button\";\nimport { CrocoHtmlFileOptionsService } from \"../../../services/CrocoHtmlFileOptionsService\";\n\n@Component({\n selector: 'croco-html-html-editor-settings-modal',\n standalone: true,\n imports: [\n MatInput,\n MatCheckbox,\n ReactiveFormsModule,\n MatFormField,\n MatLabel,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatButton\n ],\n templateUrl: './html-editor-settings-modal.component.html',\n styleUrl: './html-editor-settings-modal.component.scss'\n})\nexport class HtmlEditorSettingsModalComponent implements OnInit {\n public form: FormGroup;\n\n constructor(\n private readonly fb: FormBuilder,\n public readonly dialogRef: MatDialogRef<HtmlEditorSettingsModalComponent>,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService\n ) {\n this.form = this.fb.group({\n usePrivateFiles: false,\n applicationId: ''\n });\n }\n\n ngOnInit() {\n this.form.patchValue(this._htmlSettingsService.get())\n }\n\n cancel(): void {\n this.dialogRef.close();\n }\n\n setSettings(): void {\n this.dialogRef.close(this.form.getRawValue());\n }\n}\n","<div mat-dialog-title>Настройки редактора</div>\n<div mat-dialog-content class=\"editor-settings\" [formGroup]=\"form\">\n <mat-form-field style=\"margin-top: 20px\">\n <mat-label>\n Идентификатор приложения\n </mat-label>\n <input matInput formControlName=\"applicationId\">\n </mat-form-field>\n\n <div>\n <mat-label>\n Использовать приватные файлы\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()\">Отмена</button>\n <button mat-raised-button color=\"primary\" (click)=\"setSettings()\">Сохранить</button>\n</div>\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ClipboardService } from 'ngx-clipboard';\nimport { VisualEditorComponent } from '../visual-editor/visual-editor.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButton } from '@angular/material/button';\nimport { FormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { HtmlViewComponent } from \"../../html-view/html-view.component\";\nimport { SpriteIconPathPipe } from \"../../../pipes/sprite-icon-path.pipe\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { HtmlEditorSettingsModalComponent } from \"../html-editor-settings-modal/html-editor-settings-modal.component\";\nimport { CrocoHtmlEditorFileOptions, CrocoHtmlOptions } from \"../../../options\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { CrocoHtmlFileOptionsService } from \"../../../services/CrocoHtmlFileOptionsService\";\nimport { CrocoHtmlOptionsToken } from '../../../consts';\nimport { IVisualEditorLogger, NullVisualEditorLogger } from '../../../services';\n\n@Component({\n selector: 'croco-html-main-editor',\n templateUrl: './main-editor.component.html',\n styleUrls: ['./main-editor.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatTabsModule,\n VisualEditorComponent,\n MatFormField,\n MatLabel,\n MatInput,\n CdkTextareaAutosize,\n FormsModule,\n MatButton,\n MatCardModule,\n HtmlViewComponent,\n SpriteIconPathPipe,\n MatIcon\n ]\n})\nexport class MainEditorComponent implements OnInit, AfterContentChecked, AfterViewInit {\n\n visualEditorRendered = false;\n\n @ViewChild(\"visualEditor\", { static: true })\n visualEditor: VisualEditorComponent;\n\n @Input({ required: false })\n showMarkUp = true;\n\n @Input({ required: false })\n useHtmlRaw = false;\n\n @Input({ required: false })\n public logger: IVisualEditorLogger = new NullVisualEditorLogger();\n\n @Input()\n @Output()\n html: string = \"\";\n\n @Output()\n onHtmlChanged = new EventEmitter<string>();\n\n showSettingsButton = false;\n\n constructor(private readonly _clipboardService: ClipboardService,\n private readonly _snackBar: MatSnackBar,\n private readonly _cdref: ChangeDetectorRef,\n private readonly _dialog: MatDialog,\n private readonly _htmlSettingsService: CrocoHtmlFileOptionsService,\n @Inject(CrocoHtmlOptionsToken) options: CrocoHtmlOptions) {\n this.showSettingsButton = options.showSettingsButton;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['html'].currentValue !== changes['html'].previousValue) {\n this.recalculateBodyTags();\n }\n this._cdref.markForCheck();\n }\n\n ngAfterViewInit(): void {\n this.recalculateBodyTags();\n }\n\n ngAfterContentChecked(): void {\n this._cdref.detectChanges();\n }\n\n visualEditorRenderedHandler() {\n this.visualEditorRendered = true;\n this.recalculateBodyTags();\n }\n\n onHtmlChangedHandler(html: string) {\n this.html = html;\n this.onHtmlChanged.emit(html);\n \n this._cdref.markForCheck();\n\n this.logger.onHtmlChanged(html);\n }\n\n textAreaModelChangedHandler() {\n this.recalculateBodyTags();\n this.onHtmlChangedHandler(this.html);\n }\n\n recalculateBodyTags() {\n this.visualEditor.html = this.html;\n this.visualEditor.recalculateBodyTags();\n this._cdref.markForCheck();\n }\n\n copyMarkUp() {\n this._snackBar.open(\"Разметка скопирована в буфер обмена\", \"Закрыть\", { duration: 1500 });\n this._clipboardService.copy(this.html);\n }\n\n ngOnInit(): void {\n this.visualEditor.recalculateBodyTags();\n }\n\n openSettingsModal(): void {\n this._dialog\n .open(HtmlEditorSettingsModalComponent,\n {\n height: '300px',\n })\n .afterClosed()\n .subscribe((data: CrocoHtmlEditorFileOptions) => {\n if (!data) {\n return;\n }\n\n this._htmlSettingsService.set({\n usePrivateFiles: data.usePrivateFiles,\n applicationId: data.applicationId === '' ? null : data.applicationId,\n })\n })\n }\n}\n","<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\" [logger]=\"logger\" [html]=\"html\" (onHtmlChanged)=\"onHtmlChangedHandler($event)\"\n (rendered)=\"visualEditorRenderedHandler()\">\n </croco-visual-editor>\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>Исходный код</mat-label>\n <textarea matInput cdkTextareaAutosize #autosize=\"cdkTextareaAutosize\" cdkAutosizeMinRows=\"1\"\n placeholder=\"Исходный код\" [(ngModel)]=\"html\" (ngModelChange)=\"textAreaModelChangedHandler()\"></textarea>\n </mat-form-field>\n </div>\n }\n\n <button (click)=\"copyMarkUp()\" mat-raised-button color=\"primary\">\n Копировать разметку\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\" [isEditor]=\"true\">\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","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: 'tagToSpan',\n standalone: true\n})\nexport class TagToSpanPipe implements PipeTransform {\n transform(value: string[]): string {\n return value.map(x => (`<b>${x}</b>`)).join(' | ')\n }\n}","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { BodyTagsExtensions } from '../extensions/BodyTagsExtensions';\nimport { HtmlBodyTag } from '../models/models';\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n name: 'tohtmlbodytags',\n standalone: true\n})\nexport class ToHtmlBodyTagsPipe implements PipeTransform {\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n transform(value: string): HtmlBodyTag[] {\n return BodyTagsExtensions.getBodyTags(value, this._options);\n }\n}\n","import { Inject, Pipe, PipeTransform } from '@angular/core';\nimport { HtmlExtractionMethods } from '../extensions/HtmlExtractionMethods';\nimport { InterfaceBlock } from \"../models/InterfaceBlock\";\nimport { CrocoHtmlOptionsToken } from '../consts';\nimport { CrocoHtmlOptions } from '../options';\n\n@Pipe({\n name: 'topreviewhtml',\n standalone: true\n})\nexport class ToPreviewHtmlPipe implements PipeTransform {\n\n constructor(@Inject(CrocoHtmlOptionsToken) private readonly _options: CrocoHtmlOptions) {\n }\n\n transform(value: string): InterfaceBlock[] {\n return HtmlExtractionMethods.transformHtmlStringToBlocks(value, this._options);\n }\n}\n","import { CustomWidgetIconComponent, DefinedCustomEditorBlockComponent, DefinedCustomTagViewComponent, ImageEditorComponent } from \"./components\";\nimport { MainEditorBlockComponent } from \"./components\";\nimport { MainEditorComponent } from \"./components\";\nimport { TextEditorComponent } from \"./components\";\nimport { FileIdSelectComponent } from \"./components\";\nimport { XmlTagHeaderInnerTextViewComponent } from \"./components\";\nimport { XmlTagHeaderTextViewComponent } from \"./components\";\nimport { XmlTagHtmlViewComponent } from \"./components\";\nimport { XmlTagTextViewComponent } from \"./components\";\nimport { XmlTagViewComponent } from \"./components\";\nimport { CustomWidgetEditorComponent } from \"./components\";\nimport { VisualEditorComponent } from './components';\nimport { AddFilesBtnComponent } from './components';\nimport { XmlTagExternalVideoComponent } from \"./components\";\nimport { HtmlRawEditorComponent } from \"./components\";\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { TagToSpanPipe, ToHtmlBodyTagsPipe, ToPreviewHtmlPipe, ToPreviewPipe } from \"./pipes\";\nimport { FileImageTagViewComponent, AudioPlayerTagViewComponent, UploadFilesBtnComponent } from \"./components\";\nimport { HtmlRawViewComponent } from \"./components\";\nimport { HtmlViewComponent } from \"./components\";\nimport { XmlTagCustomWidgetComponent } from \"./components\";\n\nexport const EditorComponents = [\n MainEditorComponent,\n FileIdSelectComponent,\n TextEditorComponent,\n ImageEditorComponent,\n MainEditorBlockComponent,\n VisualEditorComponent,\n AddFilesBtnComponent,\n HtmlRawEditorComponent,\n CustomWidgetEditorComponent,\n DefinedCustomEditorBlockComponent,\n CustomWidgetIconComponent\n];\n\nexport const XmlComponents = [\n XmlTagViewComponent,\n XmlTagHtmlViewComponent,\n XmlTagTextViewComponent,\n XmlTagHeaderTextViewComponent,\n XmlTagHeaderInnerTextViewComponent,\n XmlTagExternalVideoComponent,\n HtmlRawViewComponent,\n FileImageTagViewComponent,\n AudioPlayerTagViewComponent,\n XmlTagCustomWidgetComponent,\n HtmlViewComponent,\n DefinedCustomTagViewComponent\n];\n\nexport const CrocoPipes = [\n TagToSpanPipe,\n ToPreviewPipe,\n ToHtmlBodyTagsPipe,\n ToPreviewHtmlPipe\n]\n\nexport const CrocoHtmlDeclarations = [\n UploadFilesBtnComponent,\n HtmlViewComponent,\n ...XmlComponents,\n ...EditorComponents,\n ...CrocoPipes\n]\n\nexport const MaterialModules = [\n MatBadgeModule,\n MatTableModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatSnackBarModule,\n MatProgressBarModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatMenuModule,\n MatCardModule,\n MatSelectModule,\n MatTooltipModule,\n MatCheckboxModule,\n MatChipsModule,\n MatListModule,\n MatButtonModule,\n MatInputModule,\n MatDialogModule,\n MatPaginatorModule,\n MatDatepickerModule,\n MatGridListModule,\n MatSlideToggleModule,\n MatTreeModule,\n MatNativeDateModule,\n MatAutocompleteModule,\n MatSidenavModule,\n MatIconModule,\n DragDropModule,\n MatButtonToggleModule\n];\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { CrocoHtmlDeclarations, MaterialModules } from \".\";\nimport {\n VkVideoPlayerComponent\n} from \"./components/editor/external-video-editor/vk-video-player/vk-video-player.component\";\nimport { ErrorBannerComponent } from \"./components/error-banner/error-banner.component\";\nimport {\n YoutubeVideoPlayerComponent\n} from \"./components/editor/external-video-editor/youtube-video-player/youtube-video-player.component\";\nimport { DownloadFileButtonEditorComponent } from \"./components/editor/download-file-button-editor/download-file-button-editor.component\";\nimport {\n XmlTagDownloadFileButtonComponent\n} from \"./components/xml-tags/xml-tag-download-file-button/xml-tag-download-file-button.component\";\n\n@NgModule({\n exports: [\n ...CrocoHtmlDeclarations,\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n NgSelectModule,\n ...MaterialModules,\n ErrorBannerComponent,\n VkVideoPlayerComponent,\n YoutubeVideoPlayerComponent,\n DownloadFileButtonEditorComponent,\n XmlTagDownloadFileButtonComponent,\n ...CrocoHtmlDeclarations\n ]\n})\nexport class CrocoHtmlModule { }\n","/*\n * Public API Surface of croco-html\n */\n\nexport * from './lib/components';\nexport * from './lib/pipes';\nexport * from './lib/extensions';\nexport * from './lib/croco-html.module';\nexport * from './lib/models';\nexport * from './lib/consts';\nexport * from './lib/services';\nexport * from './lib/options'\nexport * from './lib/tag-services'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PublicFileUploadService","i2.PrivateFileUploadService","i3.CrocoHtmlFileOptionsService","i1.PublicFilesQueryService","i2.PrivateFilesQueryService","i4.CommonFileInfoQueryService","i5","i1.CommonFileInfoQueryService","i1","i1.BlobCreateService","i2","i1.HtmlViewController","i3","i1.ScreenWidthService","MatFormField","MatLabel","i6","i7","i30.UploadFilesBtnComponent","i31.HtmlViewComponent","i32.XmlTagViewComponent","i33.XmlTagHtmlViewComponent","i34.XmlTagTextViewComponent","i35.XmlTagHeaderTextViewComponent","i36.XmlTagHeaderInnerTextViewComponent","i37.XmlTagExternalVideoComponent","i38.HtmlRawViewComponent","i39.FileImageTagViewComponent","i40.AudioPlayerTagViewComponent","i41.XmlTagCustomWidgetComponent","i42.DefinedCustomTagViewComponent","i43.MainEditorComponent","i44.FileIdSelectComponent","i45.TextEditorComponent","i46.ImageEditorComponent","i47.MainEditorBlockComponent","i48.VisualEditorComponent","i49.AddFilesBtnComponent","i50.HtmlRawEditorComponent","i51.CustomWidgetEditorComponent","i52.DefinedCustomEditorBlockComponent","i53.CustomWidgetIconComponent","i54.TagToSpanPipe","i55.ToPreviewPipe","i56.ToHtmlBodyTagsPipe","i57.ToPreviewHtmlPipe"],"mappings":"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"}