{"version":3,"file":"ndflexcore-angular-editor.mjs","sources":["../../../projects/angular-editor/src/lib/common/common-interfaces.ts","../../../projects/angular-editor/src/lib/services/lang.service.ts","../../../projects/angular-editor/src/lib/common/helpers.ts","../../../projects/angular-editor/src/lib/angular-editor.service.ts","../../../projects/angular-editor/src/lib/config.ts","../../../projects/angular-editor/src/lib/insert-link-dialog.component.ts","../../../projects/angular-editor/src/lib/insert-link-dialog.component.html","../../../projects/angular-editor/src/lib/insert-color-dialog.component.ts","../../../projects/angular-editor/src/lib/insert-color-dialog.component.html","../../../projects/angular-editor/src/lib/utils.ts","../../../projects/angular-editor/src/lib/ae-select/ae-select.component.ts","../../../projects/angular-editor/src/lib/ae-select/ae-select.component.html","../../../projects/angular-editor/src/lib/angular-editor-toolbar.component.ts","../../../projects/angular-editor/src/lib/angular-editor-toolbar.component.html","../../../projects/angular-editor/src/lib/message-dialog.component.ts","../../../projects/angular-editor/src/lib/message-dialog.component.html","../../../projects/angular-editor/src/lib/edit-image-dialog.component.ts","../../../projects/angular-editor/src/lib/edit-image-dialog.component.html","../../../projects/angular-editor/src/lib/edit-table-dialog.component.ts","../../../projects/angular-editor/src/lib/edit-table-dialog.component.html","../../../projects/angular-editor/src/lib/insert-table-dialog.component.ts","../../../projects/angular-editor/src/lib/insert-table-dialog.component.html","../../../projects/angular-editor/src/lib/insert-video-dialog.component.ts","../../../projects/angular-editor/src/lib/insert-video-dialog.component.html","../../../projects/angular-editor/src/lib/set-column-widths-dialog.component.ts","../../../projects/angular-editor/src/lib/set-column-widths-dialog.component.html","../../../projects/angular-editor/src/lib/angular-editor.component.ts","../../../projects/angular-editor/src/lib/angular-editor.component.html","../../../projects/angular-editor/src/lib/angular-editor.module.ts","../../../projects/angular-editor/src/public-api.ts","../../../projects/angular-editor/src/ndflexcore-angular-editor.ts"],"sourcesContent":["import {AngularEditorService} from '../angular-editor.service';\r\n\r\nexport type FtpLinkType = 'file' | 'image';\r\n\r\nexport interface DirectoryChild {\r\n    name: string;\r\n    fullPath: string;\r\n    expandable: boolean;\r\n    fullWebPath: string;\r\n    size: string;\r\n    partialWebPath: string;\r\n    editorId?: string;\r\n    width?: number;\r\n    height?: number;\r\n    alt?: string;\r\n    title?: string;\r\n    crop?: boolean;\r\n}\r\n\r\nexport type VerticalCellAlignment = 'top' | 'middle' | 'bottom';\r\n\r\nexport interface TableDialogResult {\r\n    rows: number;\r\n    cols: number;\r\n    stroke: boolean;\r\n    fullWidth: boolean;\r\n    vAlign: VerticalCellAlignment;\r\n}\r\n\r\nexport interface EditTableDialogResult {\r\n    stroke: boolean;\r\n    fullWidth: boolean;\r\n    vAlign: VerticalCellAlignment;\r\n}\r\n\r\nexport type LinkTargetType = '_blank' | '_self';\r\n\r\nexport interface LinkDialogResult {\r\n    url: string;\r\n    target: LinkTargetType;\r\n}\r\n\r\nexport interface ColorDialogResult {\r\n    color: string;\r\n}\r\n\r\nexport interface VideoDialogResult {\r\n    videoHtml: string;\r\n}\r\n\r\n/*\r\n    used for both in/out\r\n */\r\nexport interface EditImageDialogData {\r\n    width: number;\r\n    height: number;\r\n    alt: string;\r\n    title: string;\r\n    crop: boolean;\r\n}\r\n\r\nexport interface SelectedObject {\r\n    id: string;\r\n    nodeName: string;\r\n    buttonTitle: string;\r\n    rowIndex?: any;\r\n    cellIndex?: any;\r\n}\r\n\r\nexport interface FtpRequest {\r\n    editorId: string;\r\n    presetFiles: boolean;\r\n}\r\n\r\nexport interface ICustomButtonConfig {\r\n    icon: string;\r\n    buttonText: string;\r\n    commandName: CustomCommandName;\r\n}\r\n\r\nexport enum CommandName {\r\n    toggleEditorMode = 'toggleEditorMode',\r\n    clear = 'clear',\r\n    default = 'default',\r\n    insertFtp = 'insertFtp',\r\n    insertTable = 'insertTable',\r\n    insertVideo = 'insertVideo',\r\n    editObject = 'editObject',\r\n    addRowBellow = 'addRowBellow',\r\n    addRowUp = 'addRowUp',\r\n    addColumnRight = 'addColumnRight',\r\n    addColumnLeft = 'addColumnLeft',\r\n    deleteTable = 'deleteTable',\r\n    deleteImage = 'deleteImage',\r\n    insertImageUrl = 'insertImageUrl',\r\n    deleteColumn = 'deleteColumn',\r\n    deleteRow = 'deleteRow',\r\n    setColumnWidths = 'setColumnWidths',\r\n    insertUnorderedList = 'insertUnorderedList',\r\n    insertOrderedList = 'insertOrderedList',\r\n\r\n    undo = 'undo',\r\n    redo = 'redo',\r\n    bold = 'bold',\r\n    italic = 'italic',\r\n    underline = 'underline',\r\n    strikeThrough = 'strikeThrough',\r\n    subscript = 'subscript',\r\n    superscript = 'superscript',\r\n    justifyLeft = 'justifyLeft',\r\n    justifyCenter = 'justifyCenter',\r\n    justifyRight = 'justifyRight',\r\n    justifyFull = 'justifyFull',\r\n    indent = 'indent',\r\n    outdent = 'outdent',\r\n    heading = 'heading',\r\n    fontName = 'fontName',\r\n    fontSize = 'fontSize',\r\n    textColor = 'textColor',\r\n    backgroundColor = 'backgroundColor',\r\n    customClasses = 'customClasses',\r\n    link = 'link',\r\n    unlink = 'unlink',\r\n    insertImage = 'insertImage',\r\n    insertHorizontalRule = 'insertHorizontalRule',\r\n    removeFormat = 'removeFormat',\r\n}\r\n\r\nexport enum CustomCommandName {\r\n    insertAnchor = 'insertAnchor',\r\n    insertAnchor1 = 'insertAnchor1',\r\n    insertAnchor2 = 'insertAnchor2',\r\n    insertAnchor3 = 'insertAnchor3',\r\n    unSubscribeLink = 'unSubscribeLink',\r\n    browserLink = 'browserLink'\r\n}\r\n\r\nexport interface CustomButtonClicked {\r\n    commandName: CustomCommandName;\r\n    editorService: AngularEditorService;\r\n}\r\n\r\nexport enum ColorWhere {\r\n    text,\r\n    background\r\n}\r\n\r\nexport type LangCode = 'en' | 'cs' | 'sk';\r\n","import {EventEmitter, Injectable} from '@angular/core';\r\nimport {LangCode} from '../common/common-interfaces';\r\n\r\nconst sen_en: { [p: string]: string } = {\r\n    undo: 'Undo',\r\n    redo: 'Redo',\r\n    bold: 'Bold',\r\n    italic: 'Italic',\r\n    underline: 'Underline',\r\n    strikethrough: 'Strikethrough',\r\n    subscript: 'Subscript',\r\n    superscript: 'Superscript',\r\n    justifyLeft: 'Justify Left',\r\n    justifyCenter: 'Justify Center',\r\n    justifyRight: 'Justify Right',\r\n    justifyFull: 'Justify Full',\r\n    indent: 'Indent',\r\n    outdent: 'Outdent',\r\n    unorderedList: 'Unordered List',\r\n    orderedList: 'Ordered List',\r\n    insertLink: 'Insert Link',\r\n    unlink: 'Unlink',\r\n    insertImage: 'Insert Image',\r\n    insertFtp: 'Insert File/Image from FTP',\r\n    insertVideo: 'Insert Video',\r\n    horizontalLine: 'Horizontal Line',\r\n    insertTable: 'Insert Table',\r\n    clearFormatting: 'Clear Formatting',\r\n    HTMLCode: 'HTML Code',\r\n    textColor: 'Text Color',\r\n    backgroundColor: 'Background Color',\r\n    placeholder: 'Enter text here...',\r\n    notice: 'Notice',\r\n    pasteDisabled: 'Pasting from clipboard is disallowed.',\r\n    cancel: 'Cancel',\r\n    numRows: 'Number of rows',\r\n    numCols: 'Number of columns',\r\n    stroke: 'Stroke',\r\n    insertLinkPlaceholder: '\"https://www.boo.com\" or \"/c/fashion\"',\r\n    insertLinkUrlTitle: 'Link URL',\r\n    insertLinkValidatorRequired: 'You must enter a value.',\r\n    insertLinkValidatorPattern: 'Invalid URL format.',\r\n    insertVideoValidatorRequired: 'You must enter video URL.',\r\n    insertVideoValidatorPattern: 'Video URL has a bad format.',\r\n    insertVideoUrlLabel: 'Enter Video Url',\r\n    insertVideoUseOrigSize: 'Use original thumbnail size',\r\n    insertVideoUseManualSize: 'Use given size',\r\n    width: 'Width',\r\n    height: 'Height',\r\n    keepRatio: 'Keep original image aspect ratio',\r\n    crop: 'Crop',\r\n    alt: 'Alt',\r\n    title: 'Title',\r\n    editImageDialogTitle: 'Image Properties',\r\n    editTableDialogTitle: 'Edit Table',\r\n    insertColorDialogTitle: 'Set Color',\r\n    insertVideoDialogTitle: 'Insert Video',\r\n    fullWidth: '100% width',\r\n    tableActions: 'Table actions',\r\n    addRowBellow: 'Add Row Bellow',\r\n    addRowUp: 'Add Row Up',\r\n    addColumnRight: 'Add Column Right',\r\n    addColumnLeft: 'Add Column Left',\r\n    deleteColumn: 'Delete Column',\r\n    deleteRow: 'Delete Row',\r\n    deleteTable: 'Delete Table',\r\n    setColumnWidths: 'Set Column Widths',\r\n    h1: 'Heading 1',\r\n    h2: 'Heading 2',\r\n    h3: 'Heading 3',\r\n    h4: 'Heading 4',\r\n    h5: 'Heading 5',\r\n    h6: 'Heading 6',\r\n    p: 'Paragraph',\r\n    clear: 'Default',\r\n    imageActions: 'Image Actions',\r\n    insertImageUrl: 'Set Link',\r\n    deleteImage: 'Delete Image',\r\n    openInNewWindow: 'Open in new window',\r\n    presetColors: 'Preset colors',\r\n    verticalCellAlignment: 'Vertical cell alignment',\r\n    vAlignTop: 'Top',\r\n    vAlignMiddle: 'Middle',\r\n    vAlignBottom: 'Bottom'\r\n};\r\n\r\nconst sen_cs: { [p: string]: string } = {\r\n    undo: 'Zpět',\r\n    redo: 'Znovu',\r\n    bold: 'Tučné',\r\n    italic: 'Kurzíva',\r\n    underline: 'Podtržené',\r\n    strikethrough: 'Přeškrtnuté',\r\n    subscript: 'Dolní index',\r\n    superscript: 'Horní index',\r\n    justifyLeft: 'Zarovnat vlevo',\r\n    justifyCenter: 'Zarovnat doprostřed',\r\n    justifyRight: 'Zarovnat vpravo',\r\n    justifyFull: 'Zarovnat do bloku',\r\n    indent: 'Odsazení',\r\n    outdent: 'Zmenšit odsazení',\r\n    unorderedList: 'Nesetříděný seznam',\r\n    orderedList: 'Setříděný seznam',\r\n    insertLink: 'Vložit odkaz',\r\n    unlink: 'Zrušit odkaz',\r\n    insertImage: 'Vložit obrázek',\r\n    insertFtp: 'Vložit soubor/obrázek z FTP',\r\n    insertVideo: 'Vložit video',\r\n    horizontalLine: 'Vodorovná čára',\r\n    insertTable: 'Vložit tabulku',\r\n    clearFormatting: 'Zrušit formátování',\r\n    HTMLCode: 'HTML kód',\r\n    textColor: 'Barva textu',\r\n    backgroundColor: 'Barva pozadí',\r\n    placeholder: 'Sem zadejte text...',\r\n    notice: 'Upozornění',\r\n    pasteDisabled: 'Funkce vkládání ze schránky je zakázána.',\r\n    cancel: 'Zrušit',\r\n    numRows: 'Počet řádků',\r\n    numCols: 'Počet sloupců',\r\n    stroke: 'Ohraničení',\r\n    insertLinkPlaceholder: '\"https://www.neco.cz\" nebo \"/c/moda\"',\r\n    insertLinkUrlTitle: 'URL odkazu',\r\n    insertLinkValidatorRequired: 'Musíte zadat hodnotu.',\r\n    insertLinkValidatorPattern: 'Neplatný formát URL.',\r\n    insertVideoValidatorRequired: 'Musíte zadat URL videa.',\r\n    insertVideoValidatorPattern: 'URL videa má nesprávný formát.',\r\n    insertVideoUrlLabel: 'Zadejte Url videa',\r\n    insertVideoUseOrigSize: 'Použít původní velikost náhledu',\r\n    insertVideoUseManualSize: 'Zadat vlastní velikost náhledu',\r\n    width: 'Šířka',\r\n    height: 'Výška',\r\n    keepRatio: 'Zachovat poměr stran originálu',\r\n    crop: 'Ořezat',\r\n    alt: 'Alt',\r\n    title: 'Titulek',\r\n    editImageDialogTitle: 'Vlastnosti obrázku',\r\n    editTableDialogTitle: 'Upravit tabulku',\r\n    insertColorDialogTitle: 'Nastavit barvu',\r\n    insertVideoDialogTitle: 'Vložit video',\r\n    fullWidth: '100% šířka',\r\n    tableActions: 'Akce tabulky',\r\n    addRowBellow: 'Přidat řádek pod',\r\n    addRowUp: 'Přidat řádek nad',\r\n    addColumnRight: 'Přidat sloupec vpravo',\r\n    addColumnLeft: 'Přidat sloupec vlevo',\r\n    deleteColumn: 'Smazat sloupec',\r\n    deleteRow: 'Smazat řádek',\r\n    deleteTable: 'Smazat tabulku',\r\n    setColumnWidths: 'Nastavit šířky sloupců',\r\n    h1: 'Nadpis 1',\r\n    h2: 'Nadpis 2',\r\n    h3: 'Nadpis 3',\r\n    h4: 'Nadpis 4',\r\n    h5: 'Nadpis 5',\r\n    h6: 'Nadpis 6',\r\n    p: 'Odstavec',\r\n    clear: 'Výchozí',\r\n    imageActions: 'Akce obrázku',\r\n    deleteImage: 'Smazat obrázek',\r\n    insertImageUrl: 'Nastavit odkaz',\r\n    openInNewWindow: 'Otevřít v novém okně',\r\n    presetColors: 'Přednastavené barvy',\r\n    verticalCellAlignment: 'Svislé zarovnání buněk',\r\n    vAlignTop: 'Nahoru',\r\n    vAlignMiddle: 'Doprostřed',\r\n    vAlignBottom: 'Dolů'\r\n};\r\n\r\nconst sen_sk: { [p: string]: string } = {\r\n    undo: 'Späť',\r\n    redo: 'Znovu',\r\n    bold: 'Tučné',\r\n    italic: 'Kurzíva',\r\n    underline: 'Podčiarknuté',\r\n    strikethrough: 'Prečiarknuté',\r\n    subscript: 'Dolný index',\r\n    superscript: 'Horný index',\r\n    justifyLeft: 'Zarovnať vľavo',\r\n    justifyCenter: 'Zarovnať do stredu',\r\n    justifyRight: 'Zarovnať vpravo',\r\n    justifyFull: 'Zarovnať do bloku',\r\n    indent: 'Odsadenie',\r\n    outdent: 'Zmenšiť odsadenie',\r\n    unorderedList: 'Nezotriedený zoznam',\r\n    orderedList: 'Zotriedený zoznam',\r\n    insertLink: 'Vložiť odkaz',\r\n    unlink: 'Zrušiť odkaz',\r\n    insertImage: 'Vložiť obrázok',\r\n    insertFtp: 'Vložiť súbor/obrázok z FTP',\r\n    insertVideo: 'Vložiť video',\r\n    horizontalLine: 'Vodorovná čiara',\r\n    insertTable: 'Vložiť tabuľku',\r\n    clearFormatting: 'Zrušiť formátovanie',\r\n    HTMLCode: 'HTML kód',\r\n    textColor: 'Farba textu',\r\n    backgroundColor: 'Farba pozadia',\r\n    placeholder: 'Sem zadajte text...',\r\n    notice: 'Upozornenie',\r\n    pasteDisabled: 'Funkcia vkladania zo schránky je zakázaná.',\r\n    cancel: 'Zrušiť',\r\n    numRows: 'Počet riadkov',\r\n    numCols: 'Počet stĺpcov',\r\n    stroke: 'Ohraničenie',\r\n    insertLinkPlaceholder: '\"https://www.neco.cz\" alebo \"/c/moda\"',\r\n    insertLinkUrlTitle: 'URL odkazu',\r\n    insertLinkValidatorRequired: 'Musíte zadať hodnotu.',\r\n    insertLinkValidatorPattern: 'Neplatný formát URL.',\r\n    insertVideoValidatorRequired: 'Musíte zadať URL videa.',\r\n    insertVideoValidatorPattern: 'URL videa má nesprávny formát.',\r\n    insertVideoUrlLabel: 'Zadajte Url videá',\r\n    insertVideoUseOrigSize: 'Použiť pôvodnú veľkosť náhľadu',\r\n    insertVideoUseManualSize: 'Zadať vlastnú veľkosť náhľadu',\r\n    width: 'Šírka',\r\n    height: 'Výška',\r\n    keepRatio: 'Zachovať pomer strán originálu',\r\n    crop: 'Orezať',\r\n    alt: 'Alt',\r\n    title: 'Titulok',\r\n    editImageDialogTitle: 'Vlastnosti obrázku',\r\n    editTableDialogTitle: 'Upraviť tabuľku',\r\n    insertColorDialogTitle: 'Nastaviť farbu',\r\n    insertVideoDialogTitle: 'Vložiť video',\r\n    fullWidth: '100% šírka',\r\n    tableActions: 'Akcia tabuľky',\r\n    addRowBellow: 'Pridať riadok pod',\r\n    addRowUp: 'Pridať riadok nad',\r\n    addColumnRight: 'Pridať stĺpec vpravo',\r\n    addColumnLeft: 'Pridať stĺpec vľavo',\r\n    deleteColumn: 'Zmazať stĺpec',\r\n    deleteRow: 'Zmazať riadok',\r\n    deleteTable: 'Zmazať tabuľku',\r\n    setColumnWidths: 'Nastaviť šírky stĺpcov',\r\n    h1: 'Nadpis 1',\r\n    h2: 'Nadpis 2',\r\n    h3: 'Nadpis 3',\r\n    h4: 'Nadpis 4',\r\n    h5: 'Nadpis 5',\r\n    h6: 'Nadpis 6',\r\n    p: 'Odsek',\r\n    clear: 'Predvolené',\r\n    imageActions: 'Akcia obrázku',\r\n    deleteImage: 'Zmazať obrázok',\r\n    insertImageUrl: 'Nastaviť odkaz',\r\n    openInNewWindow: 'Otvoriť v novom okne',\r\n    presetColors: 'Prednastavené farby',\r\n    verticalCellAlignment: 'Zvislé zarovnanie buniek',\r\n    vAlignTop: 'Hore',\r\n    vAlignMiddle: 'Doprostred',\r\n    vAlignBottom: 'Dole'\r\n};\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class LangService {\r\n    set lang(value: LangCode) {\r\n        this.switchLang(value);\r\n    }\r\n\r\n    get sen(): { [p: string]: string } {\r\n        return this._sen;\r\n    }\r\n\r\n    set sen(value: { [p: string]: string }) {\r\n        this._sen = value;\r\n    }\r\n\r\n    private _sen: { [key: string]: string } = {};\r\n\r\n    languageChanged: EventEmitter<{ [key: string]: string }> = new EventEmitter<{ [key: string]: string }>();\r\n\r\n    constructor() {\r\n        this.switchLang('cs');\r\n    }\r\n\r\n    private switchLang(val: LangCode): void {\r\n        switch (val) {\r\n            case 'cs':\r\n                this.sen = sen_cs;\r\n                break;\r\n            case 'en':\r\n                this.sen = sen_en;\r\n                break;\r\n            case 'sk':\r\n                this.sen = sen_sk;\r\n        }\r\n        this.languageChanged.emit(this.sen);\r\n    }\r\n}\r\n","/**\r\n * Returns a random integer between min (inclusive) and max (inclusive).\r\n * The value is no lower than min (or the next integer greater than min\r\n * if min isn't an integer) and no greater than max (or the next integer\r\n * lower than max if max isn't an integer).\r\n * Using Math.round() will give you a non-uniform distribution!\r\n */\r\nexport function getRandomInt(min, max) {\r\n    min = Math.ceil(min);\r\n    max = Math.floor(max);\r\n    return Math.floor(Math.random() * (max - min + 1)) + min;\r\n}\r\n\r\nexport function randomId(prefix: string): string {\r\n    return `${prefix}_${getRandomInt(100, 100000)}`;\r\n}\r\n","import {EventEmitter, Inject, Injectable} from '@angular/core';\r\nimport {HttpClient, HttpEvent} from '@angular/common/http';\r\nimport {Observable, Subject} from 'rxjs';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {AngularEditorConfig, CustomClass} from './config';\r\nimport {MatDialog} from '@angular/material/dialog';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {ColorWhere, FtpRequest, LinkTargetType, TableDialogResult} from './common/common-interfaces';\r\nimport {LangService} from './services/lang.service';\r\nimport {randomId} from './common/helpers';\r\n\r\nexport interface UploadResponse {\r\n    imageUrl: string;\r\n}\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class AngularEditorService {\r\n\r\n    savedSelection: Range | null;\r\n    selectedText: string;\r\n    uploadUrl: string;\r\n    uploadWithCredentials: boolean;\r\n    sen: { [p: string]: string };\r\n    intervalEmitter: EventEmitter<any> = new EventEmitter<any>();\r\n    ftpLinkRequired: EventEmitter<FtpRequest> = new EventEmitter<FtpRequest>();\r\n    ftpLinkGiven: EventEmitter<string> = new EventEmitter<string>();\r\n    private _linkDialogOpen = false;\r\n    get linkDialogOpen(): boolean {\r\n        return this._linkDialogOpen;\r\n    }\r\n\r\n    set linkDialogOpen(value: boolean) {\r\n        this._linkDialogOpen = value;\r\n    }\r\n    private ngUnsubscribe: Subject<any> = new Subject<any>();\r\n\r\n\r\n    /**\r\n     * generates HTML table string for insertion\r\n     * @param definition .\r\n     * @param config .\r\n     * @param id .\r\n     */\r\n    static createTableHtml(definition: TableDialogResult, config: AngularEditorConfig, id: string): string[] {\r\n        const cls = definition.stroke ? config.tableStrokeClass : config.tableClass;\r\n\r\n        const colPct = Math.round(100 / definition.cols);\r\n\r\n        const ids = randomId(id);\r\n        const prefix =\r\n            `\r\n<table id=\"${ids}\" class=\"${cls}\">\r\n    <tbody>\r\n `;\r\n        const suffix =\r\n            `\r\n    </tbody>\r\n</table>\r\n`;\r\n        let inner = ``;\r\n        for (let i = 0; i < definition.rows; i++) {\r\n            inner += `<tr>\\n`;\r\n            for (let j = 0; j < definition.cols; j++) {\r\n                inner += `<td style=\"width: ${colPct}%\"></td>\\n`;\r\n            }\r\n            inner += `</tr>\\n`;\r\n        }\r\n        return [prefix + inner + suffix, ids];\r\n    }\r\n\r\n\r\n    constructor(private http: HttpClient, @Inject(DOCUMENT) private doc: any, private dialog: MatDialog,\r\n                private langService: LangService) {\r\n        this.sen = this.langService.sen;\r\n        this.langService.languageChanged\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(res => {\r\n                this.sen = res;\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Executed command from editor header buttons exclude toggleEditorMode\r\n     * @param command string from triggerCommand\r\n     */\r\n    executeCommand(command: string) {\r\n        const commands = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre'];\r\n        if (commands.includes(command)) {\r\n            this.doc.execCommand('formatBlock', false, command);\r\n            return;\r\n        }\r\n        this.doc.execCommand(command, false, null);\r\n    }\r\n\r\n    /**\r\n     * Create URL link\r\n     * @param url string from UI prompt\r\n     * @param target _blank or _self\r\n     */\r\n    createLink(url: string, target: LinkTargetType) {\r\n        const newUrl = `<a href=\"${url}\" target=\"${target}\" rel=\"noopener\">${this.selectedText}</a>`;\r\n        this.insertHtml(newUrl);\r\n    }\r\n\r\n    /**\r\n     * insert color either font or background\r\n     *\r\n     * @param color color to be inserted\r\n     * @param where where the color has to be inserted either text/background\r\n     */\r\n    insertColor(color: string, where: ColorWhere): void {\r\n        const restored = this.restoreSelection();\r\n        if (restored) {\r\n            if (where === ColorWhere.text) {\r\n                this.doc.execCommand('foreColor', false, color);\r\n            } else {\r\n                this.doc.execCommand('hiliteColor', false, color);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set font name\r\n     * @param fontName string\r\n     */\r\n    setFontName(fontName: string) {\r\n        this.doc.execCommand('fontName', false, fontName);\r\n    }\r\n\r\n    /**\r\n     * Set font size\r\n     * @param fontSize string\r\n     */\r\n    setFontSize(fontSize: string) {\r\n        this.doc.execCommand('fontSize', false, fontSize);\r\n    }\r\n\r\n    /**\r\n     * Create raw HTML\r\n     * @param html HTML string\r\n     */\r\n    insertHtml(html: string): void {\r\n        try {\r\n            /*const isHTMLInserted = */this.doc.execCommand('insertHTML', false, html);\r\n        } catch {\r\n\r\n        }\r\n\r\n        // if (!isHTMLInserted) {\r\n        //   throw new Error('Unable to perform the operation');\r\n        // }\r\n    }\r\n\r\n    /**\r\n     * save selection when the editor is focussed out\r\n     */\r\n    public saveSelection = (): void => {\r\n        if (this.doc.getSelection) {\r\n            const sel = this.doc.getSelection();\r\n            if (sel.getRangeAt && sel.rangeCount) {\r\n                this.savedSelection = sel.getRangeAt(0);\r\n                this.selectedText = sel.toString();\r\n            }\r\n        } else if (this.doc.getSelection && this.doc.createRange) {\r\n            this.savedSelection = document.createRange();\r\n        } else {\r\n            this.savedSelection = null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * restore selection when the editor is focused in\r\n     *\r\n     * saved selection when the editor is focused out\r\n     */\r\n    restoreSelection(): boolean {\r\n        if (this.savedSelection) {\r\n            if (this.doc.getSelection) {\r\n                const sel = this.doc.getSelection();\r\n                sel.removeAllRanges();\r\n                sel.addRange(this.savedSelection);\r\n                return true;\r\n            } else if (this.doc.getSelection /*&& this.savedSelection.select*/) {\r\n                // this.savedSelection.select();\r\n                return true;\r\n            }\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * setTimeout used for execute 'saveSelection' method in next event loop iteration\r\n     */\r\n    public executeInNextQueueIteration(callbackFn: (...args: any[]) => any, timeout = 1e2): void {\r\n        setTimeout(callbackFn, timeout);\r\n    }\r\n\r\n    /** check any selection is made or not */\r\n\r\n    /* unused method ???\r\n    private checkSelection(): any {\r\n\r\n        const selectedText = this.savedSelection.toString();\r\n\r\n        if (selectedText.length === 0) {\r\n            throw new Error('No Selection Made');\r\n        }\r\n        return true;\r\n    }*/\r\n\r\n    /**\r\n     * Upload file to uploadUrl\r\n     * @param file The file\r\n     */\r\n    uploadImage(file: File): Observable<HttpEvent<UploadResponse>> {\r\n\r\n        const uploadData: FormData = new FormData();\r\n\r\n        uploadData.append('file', file, file.name);\r\n\r\n        return this.http.post<UploadResponse>(this.uploadUrl, uploadData, {\r\n            reportProgress: true,\r\n            observe: 'events',\r\n            withCredentials: this.uploadWithCredentials,\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Insert image with Url\r\n     * @param imageUrl The imageUrl.\r\n     */\r\n    insertImage(imageUrl: string) {\r\n        this.doc.execCommand('insertImage', false, imageUrl);\r\n    }\r\n\r\n    setDefaultParagraphSeparator(separator: string) {\r\n        this.doc.execCommand('defaultParagraphSeparator', false, separator);\r\n    }\r\n\r\n    createCustomClass(customClass: CustomClass) {\r\n        let newTag = this.selectedText;\r\n        if (customClass) {\r\n            const tagName = customClass.tag ? customClass.tag : 'span';\r\n            newTag = '<' + tagName + ' class=\"' + customClass.class + '\">' + this.selectedText + '</' + tagName + '>';\r\n        }\r\n        this.insertHtml(newTag);\r\n    }\r\n\r\n    nextNode(node) {\r\n        if (node.hasChildNodes()) {\r\n            return node.firstChild;\r\n        } else {\r\n            while (node && !node.nextSibling) {\r\n                node = node.parentNode;\r\n            }\r\n            if (!node) {\r\n                return null;\r\n            }\r\n            return node.nextSibling;\r\n        }\r\n    }\r\n\r\n    getRangeSelectedNodes(range, includePartiallySelectedContainers) {\r\n        let node = range.startContainer;\r\n        const endNode = range.endContainer;\r\n        let rangeNodes = [];\r\n\r\n        // Special case for a range that is contained within a single node\r\n        if (node === endNode) {\r\n            rangeNodes = [node];\r\n        } else {\r\n            // Iterate nodes until we hit the end container\r\n            while (node && node !== endNode) {\r\n                rangeNodes.push(node = this.nextNode(node));\r\n            }\r\n\r\n            // Add partially selected nodes at the start of the range\r\n            node = range.startContainer;\r\n            while (node && node !== range.commonAncestorContainer) {\r\n                rangeNodes.unshift(node);\r\n                node = node.parentNode;\r\n            }\r\n        }\r\n\r\n        // Add ancestors of the range container, if required\r\n        if (includePartiallySelectedContainers) {\r\n            node = range.commonAncestorContainer;\r\n            while (node) {\r\n                rangeNodes.push(node);\r\n                node = node.parentNode;\r\n            }\r\n        }\r\n\r\n        return rangeNodes;\r\n    }\r\n\r\n    getSelectedNodes() {\r\n        const nodes = [];\r\n        if (this.doc.getSelection) {\r\n            const sel = this.doc.getSelection();\r\n            for (let i = 0, len = sel.rangeCount; i < len; ++i) {\r\n                nodes.push.apply(nodes, this.getRangeSelectedNodes(sel.getRangeAt(i), true));\r\n            }\r\n        }\r\n        return nodes;\r\n    }\r\n\r\n    replaceWithOwnChildren(el) {\r\n        const parent = el.parentNode;\r\n        while (el.hasChildNodes()) {\r\n            parent.insertBefore(el.firstChild, el);\r\n        }\r\n        if (parent) { parent.removeChild(el); }\r\n    }\r\n\r\n    removeSelectedElements(tagNames) {\r\n        if (!tagNames) { return; }\r\n\r\n        const tagNamesArray = tagNames.toLowerCase().split(',');\r\n        this.getSelectedNodes().forEach((node) => {\r\n            if (node.nodeType === 1 &&\r\n                tagNamesArray.indexOf(node.tagName.toLowerCase()) > -1) {\r\n                // Remove the node and replace it with its children\r\n                this.replaceWithOwnChildren(node);\r\n            }\r\n        });\r\n    }\r\n\r\n\r\n}\r\n","import {ICustomButtonConfig} from './common/common-interfaces';\r\n\r\nexport interface CustomClass {\r\n    name: string;\r\n    class: string;\r\n    tag?: string;\r\n}\r\n\r\nexport interface Font {\r\n    name: string;\r\n    class: string;\r\n}\r\n\r\nexport interface AngularEditorConfig {\r\n    editable?: boolean;\r\n    spellcheck?: boolean;\r\n    height?: 'auto' | string;\r\n    minHeight?: '0' | string;\r\n    maxHeight?: 'auto' | string;\r\n    width?: 'auto' | string;\r\n    minWidth?: '0' | string;\r\n    translate?: 'yes' | 'now' | string;\r\n    enableToolbar?: boolean;\r\n    showToolbar?: boolean;\r\n    defaultParagraphSeparator?: string;\r\n    defaultFontName?: string;\r\n    defaultFontSize?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | string;\r\n    uploadUrl?: string;\r\n    uploadWithCredentials?: boolean;\r\n    fonts?: Font[];\r\n    customClasses?: CustomClass[];\r\n    sanitize?: boolean;\r\n    toolbarPosition?: 'top' | 'bottom';\r\n    outline?: boolean;\r\n    toolbarHiddenButtons?: string[][];\r\n    imageServerUrl: string;\r\n    extensionsApiUrl: string;\r\n    imageType: string;\r\n    presetWidth: number;\r\n    presetHeight: number;\r\n    tableClass: string;\r\n    tableStrokeClass: string;\r\n    pasteEnabled: boolean;\r\n    customColorPalette: string[];\r\n    customButtons: Array<Array<ICustomButtonConfig>>;\r\n}\r\n\r\nexport const angularEditorConfig: AngularEditorConfig = {\r\n    editable: true,\r\n    spellcheck: true,\r\n    height: 'auto',\r\n    minHeight: '0',\r\n    maxHeight: 'auto',\r\n    width: 'auto',\r\n    minWidth: '0',\r\n    translate: 'yes',\r\n    enableToolbar: true,\r\n    showToolbar: true,\r\n    defaultParagraphSeparator: '',\r\n    defaultFontName: '',\r\n    defaultFontSize: '',\r\n    fonts: [],\r\n    uploadUrl: 'v1/image',\r\n    uploadWithCredentials: false,\r\n    sanitize: true,\r\n    toolbarPosition: 'top',\r\n    outline: true,\r\n    imageServerUrl: '',\r\n    extensionsApiUrl: '',\r\n    imageType: 'preview',\r\n    presetWidth: 98,\r\n    presetHeight: 98,\r\n    tableClass: '',\r\n    tableStrokeClass: 'table-bordered',\r\n    pasteEnabled: true,\r\n    customColorPalette: [],\r\n    /*toolbarHiddenButtons: [\r\n      ['bold', 'italic', 'underline', 'strikeThrough', 'superscript', 'subscript'],\r\n      ['heading', 'fontName', 'fontSize', 'color'],\r\n      ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent'],\r\n      ['cut', 'copy', 'delete', 'removeFormat', 'undo', 'redo'],\r\n      ['paragraph', 'blockquote', 'removeBlockquote', 'horizontalLine', 'orderedList', 'unorderedList'],\r\n      ['link', 'unlink', 'image', 'video']\r\n    ]*/\r\n    customButtons: null\r\n};\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject, OnDestroy, OnInit} from '@angular/core';\r\nimport {FtpRequest, LinkDialogResult} from './common/common-interfaces';\r\nimport {UntypedFormBuilder, UntypedFormGroup, Validators} from '@angular/forms';\r\nimport {AngularEditorService} from './angular-editor.service';\r\nimport {Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'dialog-insert-link',\r\n    templateUrl: 'insert-link-dialog.component.html',\r\n    styleUrls: ['insert-table-dialog.component.scss']\r\n})\r\nexport class InsertLinkDialogComponent implements OnInit, OnDestroy {\r\n\r\n    linkForm: UntypedFormGroup;\r\n    private ngUnsubscribe: Subject<any> = new Subject<any>();\r\n\r\n    constructor(public dialogRef: MatDialogRef<InsertLinkDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any, private fb: UntypedFormBuilder, private editorService: AngularEditorService) {\r\n        this.createForm();\r\n        this.editorService.ftpLinkGiven\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(res => {\r\n                this.setLinkForm(res);\r\n            })\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.editorService.linkDialogOpen = true;\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.editorService.linkDialogOpen = false;\r\n        this.ngUnsubscribe.next();\r\n        this.ngUnsubscribe.complete();\r\n    }\r\n\r\n    requireFtpDialog(): void {\r\n        const ftpRequest: FtpRequest = {\r\n            editorId: this.data.editorId,\r\n            presetFiles: true\r\n        }\r\n        this.editorService.ftpLinkRequired.emit(ftpRequest);\r\n    }\r\n\r\n    getErrorMessage() {\r\n        const urlField = this.linkForm.get('url');\r\n\r\n        if (urlField.hasError('required')) {\r\n            return this.data['insertLinkValidatorRequired'];\r\n        }\r\n\r\n        return urlField.hasError('pattern') ? this.data['insertLinkValidatorPattern'] : '';\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        const result: LinkDialogResult = {\r\n            url: this.linkForm.get('url').value,\r\n            target: this.linkForm.get('openInNew').value\r\n                ? '_blank'\r\n                : '_self'\r\n        };\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n    private setLinkForm(value: string): void {\r\n        this.linkForm.patchValue({\r\n            url: value\r\n        });\r\n        this.linkForm.markAsDirty();\r\n    }\r\n\r\n    private createForm(): void {\r\n        const newWindow = this.data.target === '_blank';\r\n        this.linkForm = this.fb.group({\r\n            url: [this.data.url, [Validators.required, Validators.pattern(/(^(https:\\/\\/([\\w\\d\\-]+\\.)+\\w{2,})?(\\/.+)?\\/?$)|(^mailto:[_a-zA-Z0-9-]+(\\.[_a-zA-Z0-9-]+)*(\\+[_a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*)?@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*(\\.[a-zA-Z]{2,8})$)/)]],\r\n            openInNew: [newWindow]\r\n        });\r\n    }\r\n\r\n}\r\n","<h1 mat-dialog-title>{{data.title}}</h1>\r\n<div mat-dialog-content [formGroup]=\"linkForm\">\r\n    <mat-form-field class=\"mat-full-width\">\r\n        <mat-label>{{data.urlTitle}}</mat-label>\r\n        <input matInput formControlName=\"url\" [placeholder]=\"data.placeholder\" type=\"text\">\r\n        <button mat-button matSuffix (click)=\"requireFtpDialog()\">\r\n            <mat-icon>folder</mat-icon>\r\n        </button>\r\n        <mat-error *ngIf=\"linkForm.dirty && linkForm.invalid\">{{getErrorMessage()}}</mat-error>\r\n    </mat-form-field>\r\n    <div>\r\n        <mat-checkbox formControlName=\"openInNew\">{{data.openInNewWindow}}</mat-checkbox>\r\n    </div>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.cancel}}</button>\r\n    <button mat-raised-button color=\"primary\" [disabled]=\"linkForm.pristine || linkForm.invalid\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {ColorDialogResult} from './common/common-interfaces';\r\n\r\n@Component({\r\n    selector: 'dialog-insert-color',\r\n    templateUrl: 'insert-color-dialog.component.html',\r\n    styleUrls: ['insert-table-dialog.component.scss']\r\n})\r\nexport class InsertColorDialogComponent {\r\n\r\n    color: string = '#000000';\r\n\r\n    constructor(public dialogRef: MatDialogRef<InsertColorDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any) {\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        const result: ColorDialogResult = {\r\n            color: this.color,\r\n        };\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n}\r\n","<h1 mat-dialog-title>{{data.senDialogTitle}}</h1>\r\n<div mat-dialog-content>\r\n    <input\r\n        class=\"color-input\"\r\n        [value]=\"color\"\r\n        [style.background]=\"color\"\r\n        [cpOutputFormat]=\"'hex'\"\r\n        [cpPosition]=\"'top'\"\r\n        [cpPresetLabel]=\"data.senPresetColors\"\r\n        [cpPresetColors]=\"data.customColorPalette\"\r\n        [(colorPicker)]=\"color\"/>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.senCancel}}</button>\r\n    <button mat-raised-button color=\"primary\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","export function isDefined(value: any) {\r\n  return value !== undefined && value !== null;\r\n}\r\n","import {\r\n  Attribute,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef, HostBinding,\r\n  HostListener,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  Renderer2,\r\n  ViewChild,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {isDefined} from '../utils';\r\n\r\nexport interface SelectOption {\r\n  label: string;\r\n  value: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'ae-select',\r\n  templateUrl: './ae-select.component.html',\r\n  styleUrls: ['./ae-select.component.scss'],\r\n  encapsulation: ViewEncapsulation.None,\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => AeSelectComponent),\r\n      multi: true,\r\n    }\r\n  ]\r\n})\r\nexport class AeSelectComponent implements OnInit, ControlValueAccessor {\r\n  @Input() options: SelectOption[] = [];\r\n  // tslint:disable-next-line:no-input-rename\r\n  @Input('hidden') isHidden: boolean;\r\n\r\n  selectedOption: SelectOption;\r\n  disabled = false;\r\n  optionId = 0;\r\n\r\n  get label(): string {\r\n    return this.selectedOption && this.selectedOption.hasOwnProperty('label') ? this.selectedOption.label : 'Select';\r\n  }\r\n\r\n  opened = false;\r\n\r\n  get value(): string {\r\n    return this.selectedOption.value;\r\n  }\r\n\r\n  @HostBinding('style.display') hidden = 'inline-block';\r\n\r\n  // tslint:disable-next-line:no-output-native no-output-rename\r\n  @Output('change') changeEvent = new EventEmitter();\r\n\r\n  @ViewChild('labelButton', {static: true}) labelButton: ElementRef;\r\n\r\n  constructor(private elRef: ElementRef,\r\n              private r: Renderer2,\r\n  ) {}\r\n\r\n  ngOnInit() {\r\n    this.selectedOption = this.options[0];\r\n    if (isDefined(this.isHidden) && this.isHidden) {\r\n      this.hide();\r\n    }\r\n  }\r\n\r\n  hide() {\r\n    this.hidden = 'none';\r\n  }\r\n\r\n  optionSelect(option: SelectOption, event: MouseEvent) {\r\n    event.stopPropagation();\r\n    this.setValue(option.value);\r\n    this.onChange(this.selectedOption.value);\r\n    this.changeEvent.emit(this.selectedOption.value);\r\n    this.onTouched();\r\n    this.opened = false;\r\n  }\r\n\r\n  toggleOpen(event: MouseEvent) {\r\n    // event.stopPropagation();\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n    this.opened = !this.opened;\r\n  }\r\n\r\n  @HostListener('document:click', ['$event'])\r\n  onClick($event: MouseEvent) {\r\n    if (!this.elRef.nativeElement.contains($event.target)) {\r\n      this.close();\r\n    }\r\n  }\r\n\r\n  close() {\r\n    this.opened = false;\r\n  }\r\n\r\n  get isOpen(): boolean {\r\n    return this.opened;\r\n  }\r\n\r\n  writeValue(value) {\r\n    if (!value || typeof value !== 'string') {\r\n      return;\r\n    }\r\n    this.setValue(value);\r\n  }\r\n\r\n  setValue(value) {\r\n    let index = 0;\r\n    const selectedEl = this.options.find((el, i) => {\r\n      index = i;\r\n      return el.value === value;\r\n    });\r\n    if (selectedEl) {\r\n      this.selectedOption = selectedEl;\r\n      this.optionId = index;\r\n    }\r\n  }\r\n\r\n  onChange: any = () => {\r\n  }\r\n  onTouched: any = () => {\r\n  }\r\n\r\n  registerOnChange(fn) {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.labelButton.nativeElement.disabled = isDisabled;\r\n    const div = this.labelButton.nativeElement;\r\n    const action = isDisabled ? 'addClass' : 'removeClass';\r\n    this.r[action](div, 'disabled');\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  handleKeyDown($event: KeyboardEvent) {\r\n    if (!this.opened) {\r\n      return;\r\n    }\r\n    // console.log($event.key);\r\n    // if (KeyCode[$event.key]) {\r\n    switch ($event.key) {\r\n      case 'ArrowDown':\r\n        this._handleArrowDown($event);\r\n        break;\r\n      case 'ArrowUp':\r\n        this._handleArrowUp($event);\r\n        break;\r\n      case 'Space':\r\n        this._handleSpace($event);\r\n        break;\r\n      case 'Enter':\r\n        this._handleEnter($event);\r\n        break;\r\n      case 'Tab':\r\n        this._handleTab($event);\r\n        break;\r\n      case 'Escape':\r\n        this.close();\r\n        $event.preventDefault();\r\n        break;\r\n      case 'Backspace':\r\n        this._handleBackspace();\r\n        break;\r\n    }\r\n    // } else if ($event.key && $event.key.length === 1) {\r\n    // this._keyPress$.next($event.key.toLocaleLowerCase());\r\n    // }\r\n  }\r\n\r\n  _handleArrowDown($event) {\r\n    if (this.optionId < this.options.length - 1) {\r\n      this.optionId++;\r\n    }\r\n  }\r\n\r\n  _handleArrowUp($event) {\r\n    if (this.optionId >= 1) {\r\n      this.optionId--;\r\n    }\r\n  }\r\n\r\n  _handleSpace($event) {\r\n\r\n  }\r\n\r\n  _handleEnter($event) {\r\n    this.optionSelect(this.options[this.optionId], $event);\r\n  }\r\n\r\n  _handleTab($event) {\r\n\r\n  }\r\n\r\n  _handleBackspace() {\r\n\r\n  }\r\n}\r\n","<span class=\"ae-font ae-picker\" [ngClass]=\"{'ae-expanded':isOpen}\">\r\n  <button [tabIndex]=\"-1\" #labelButton tabindex=\"0\" type=\"button\" role=\"button\" class=\"ae-picker-label\" (click)=\"toggleOpen($event);\">{{label}}\r\n    <svg viewBox=\"0 0 18 18\">\r\n     <!-- <use x=\"0\" y=\"0\" xlink:href=\"../assets/icons.svg#hom\"></use>-->\r\n      <polygon class=\"ae-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n      <polygon class=\"ae-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n    </svg>\r\n  </button>\r\n  <span class=\"ae-picker-options\">\r\n    <button tabindex=\"-1\" type=\"button\" role=\"button\" class=\"ae-picker-item\"\r\n          *ngFor=\"let item of options; let i = index\"\r\n          [ngClass]=\"{'selected': item.value === value, 'focused': i === optionId}\"\r\n          (click)=\"optionSelect(item, $event)\">\r\n          {{item.label}}\r\n    </button>\r\n    <span class=\"dropdown-item\" *ngIf=\"!options.length\">No items for select</span>\r\n  </span>\r\n</span>\r\n","import {\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    Inject,\r\n    Input,\r\n    OnDestroy,\r\n    Output,\r\n    Renderer2,\r\n    ViewChild\r\n} from '@angular/core';\r\nimport {AngularEditorService} from './angular-editor.service';\r\nimport {HttpResponse} from '@angular/common/http';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {CustomClass} from './config';\r\nimport {SelectOption} from './ae-select/ae-select.component';\r\nimport {MatDialog} from '@angular/material/dialog';\r\nimport {take, takeUntil} from 'rxjs/operators';\r\nimport {\r\n    ColorDialogResult, ColorWhere,\r\n    CommandName,\r\n    CustomCommandName,\r\n    ICustomButtonConfig,\r\n    LinkDialogResult,\r\n    LinkTargetType,\r\n    SelectedObject\r\n} from './common/common-interfaces';\r\nimport {InsertLinkDialogComponent} from './insert-link-dialog.component';\r\nimport {LangService} from './services/lang.service';\r\nimport {Subject} from 'rxjs';\r\nimport {InsertColorDialogComponent} from './insert-color-dialog.component';\r\n\r\n@Component({\r\n    selector: 'angular-editor-toolbar',\r\n    templateUrl: './angular-editor-toolbar.component.html',\r\n    styleUrls: ['./angular-editor-toolbar.component.scss']\r\n})\r\n\r\nexport class AngularEditorToolbarComponent implements OnDestroy {\r\n    sen: { [p: string]: string } = this.langService.sen;\r\n    htmlMode = false;\r\n    unLinkDisabled = true;\r\n    block = 'default';\r\n    fontName = 'Roboto, sans-serif';\r\n    fontSize = '3';\r\n    foreColour;\r\n    backColor;\r\n\r\n    commands = CommandName;\r\n    colorWheres = ColorWhere;\r\n\r\n    headings: SelectOption[] = [];\r\n    fontSizes: SelectOption[] = [\r\n        {\r\n            label: '1',\r\n            value: '1',\r\n        },\r\n        {\r\n            label: '2',\r\n            value: '2',\r\n        },\r\n        {\r\n            label: '3',\r\n            value: '3',\r\n        },\r\n        {\r\n            label: '4',\r\n            value: '4',\r\n        },\r\n        {\r\n            label: '5',\r\n            value: '5',\r\n        },\r\n        {\r\n            label: '6',\r\n            value: '6',\r\n        },\r\n        {\r\n            label: '7',\r\n            value: '7',\r\n        }\r\n    ];\r\n\r\n    tableActions: SelectOption[] = [];\r\n    imageActions: SelectOption[] = [];\r\n\r\n    tableAction: string = null;\r\n    imageAction: string = null;\r\n\r\n    customClassId = '-1';\r\n    // tslint:disable-next-line:variable-name\r\n    _customClasses: CustomClass[];\r\n    customClassList: SelectOption[] = [{label: '', value: ''}];\r\n    // uploadUrl: string;\r\n\r\n    tagMap = {\r\n        BLOCKQUOTE: 'indent',\r\n        A: 'link'\r\n    };\r\n\r\n    select = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'PRE', 'DIV'];\r\n\r\n    buttons = ['bold', 'italic', 'underline', 'strikeThrough', 'subscript', 'superscript', 'justifyLeft', 'justifyCenter',\r\n        'justifyRight', 'justifyFull', 'indent', 'outdent', 'insertUnorderedList', 'insertOrderedList', 'link'];\r\n\r\n    @Input() id: string;\r\n    @Input() uploadUrl: string;\r\n    @Input() showToolbar: boolean;\r\n    @Input() fonts: SelectOption[] = [{label: '', value: ''}];\r\n    @Input() selObject: SelectedObject = null;\r\n    @Input() customColorPalette: string[] = [];\r\n    @Input() customButtons: Array<Array<ICustomButtonConfig>>;\r\n\r\n    @Input()\r\n    set customClasses(classes: CustomClass[]) {\r\n        if (classes) {\r\n            this._customClasses = classes;\r\n            this.customClassList = this._customClasses.map((x, i) => ({label: x.name, value: i.toString()}));\r\n            this.customClassList.unshift({label: 'Clear Class', value: '-1'});\r\n        }\r\n    }\r\n\r\n    @Input()\r\n    set defaultFontName(value: string) {\r\n        if (value) {\r\n            this.fontName = value;\r\n        }\r\n    }\r\n\r\n    @Input()\r\n    set defaultFontSize(value: string) {\r\n        if (value) {\r\n            this.fontSize = value;\r\n        }\r\n    }\r\n\r\n    @Input() hiddenButtons: string[][];\r\n\r\n    @Output() execute: EventEmitter<CommandName> = new EventEmitter<CommandName>();\r\n    @Output() customButtonClicked = new EventEmitter<CustomCommandName>();\r\n\r\n    @ViewChild('fileInput', {static: true}) myInputFile: ElementRef;\r\n\r\n    public get isLinkButtonDisabled(): boolean {\r\n        return this.htmlMode || !Boolean(this.editorService.selectedText);\r\n    }\r\n\r\n    private ngUnsubscribe: Subject<any> = new Subject<any>();\r\n\r\n    constructor(\r\n        private r: Renderer2,\r\n        private editorService: AngularEditorService,\r\n        private langService: LangService,\r\n        @Inject(DOCUMENT) private doc: any,\r\n        private dialog: MatDialog\r\n    ) {\r\n        this.initSelectValues();\r\n\r\n        this.langService.languageChanged\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(res => {\r\n                this.sen = res;\r\n                this.initSelectValues();\r\n            });\r\n        this.editorService.intervalEmitter\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(() => {\r\n                this.setupButtons();\r\n            });\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        this.ngUnsubscribe.next();\r\n        this.ngUnsubscribe.complete();\r\n    }\r\n\r\n    /**\r\n     * Trigger command from editor header buttons\r\n     * @param command string from toolbar buttons\r\n     */\r\n    triggerCommand(command: CommandName) {\r\n        this.execute.emit(command);\r\n    }\r\n\r\n\r\n    /**\r\n     * highlight editor buttons when cursor moved or positioning\r\n     */\r\n    triggerButtons() {\r\n        if (!this.showToolbar) {\r\n            return;\r\n        }\r\n        this.buttons.forEach(e => {\r\n            const result = this.doc.queryCommandState(e);\r\n            const elementById = this.doc.getElementById(e + '-' + this.id);\r\n            if (result) {\r\n                this.r.addClass(elementById, 'active');\r\n            } else {\r\n                this.r.removeClass(elementById, 'active');\r\n            }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Set-up buttons on toolbar, on timer interval tick, when other methods fail / are inconvenient\r\n     */\r\n    setupButtons(): void {\r\n        const selection: Selection = window.getSelection();\r\n        if (!selection.anchorNode || !selection.focusNode || !selection.anchorNode['data']) {\r\n            return;\r\n        }\r\n\r\n        const shouldEnable = selection.anchorNode.parentElement.nodeName === 'A'\r\n            && selection.focusNode.parentElement.nodeName === 'A'\r\n            && selection.anchorNode['data'] === selection.focusNode['data']\r\n            && selection.anchorNode['data'].length > 0\r\n            && selection.type === 'Range';\r\n        this.unLinkDisabled = !shouldEnable;\r\n    }\r\n\r\n    /**\r\n     * trigger highlight editor buttons when cursor moved or positioning in block\r\n     */\r\n    triggerBlocks(nodes: Node[]) {\r\n        if (!this.showToolbar) {\r\n            return;\r\n        }\r\n\r\n        let found = false;\r\n        this.select.forEach(y => {\r\n            const node = nodes.find(x => x.nodeName === y);\r\n            if (node !== undefined && y === node.nodeName) {\r\n                if (found === false) {\r\n                    this.block = node.nodeName.toLowerCase();\r\n                    found = true;\r\n                }\r\n            } else if (found === false) {\r\n                this.block = 'default';\r\n            }\r\n        });\r\n\r\n        found = false;\r\n        if (this._customClasses) {\r\n            this._customClasses.forEach((y, index) => {\r\n                const node = nodes.find(x => {\r\n                    if (x instanceof Element) {\r\n                        return x.className === y.class;\r\n                    }\r\n                });\r\n                if (node !== undefined) {\r\n                    if (found === false) {\r\n                        this.customClassId = index.toString();\r\n                        found = true;\r\n                    }\r\n                } else if (found === false) {\r\n                    this.customClassId = '-1';\r\n                }\r\n            });\r\n        }\r\n\r\n        Object.keys(this.tagMap).map(e => {\r\n            const elementById = this.doc.getElementById(this.tagMap[e] + '-' + this.id);\r\n            const node = nodes.find(x => x.nodeName === e);\r\n            if (node !== undefined && e === node.nodeName) {\r\n                this.r.addClass(elementById, 'active');\r\n            } else {\r\n                this.r.removeClass(elementById, 'active');\r\n            }\r\n        });\r\n\r\n        this.foreColour = this.doc.queryCommandValue('ForeColor');\r\n        this.fontSize = this.doc.queryCommandValue('FontSize');\r\n        this.fontName = this.doc.queryCommandValue('FontName').replace(/\"/g, '');\r\n        this.backColor = this.doc.queryCommandValue('backColor');\r\n    }\r\n\r\n    executeCustomButtonCommand(command: CustomCommandName) {\r\n        this.customButtonClicked.emit(command);\r\n    }\r\n\r\n    /**\r\n     * insert URL link\r\n     */\r\n    insertUrl(): void {\r\n        let url: string;\r\n        let target: LinkTargetType;\r\n        const selection = this.editorService.savedSelection;\r\n        if (selection && selection.commonAncestorContainer.parentElement.nodeName === 'A') {\r\n            const parent = selection.commonAncestorContainer.parentElement as HTMLAnchorElement;\r\n            if (parent.href !== '') {\r\n                url = parent.href;\r\n                target = parent.target as LinkTargetType;\r\n            }\r\n        }\r\n        const dialogRef = this.dialog.open(InsertLinkDialogComponent, {\r\n            width: '405px',\r\n            height: 'auto',\r\n            data: {\r\n                editorId: this.id,\r\n                url: url,\r\n                target: target,\r\n                cancel: this.sen['cancel'],\r\n                title: this.sen['insertLink'],\r\n                placeholder: this.sen['insertLinkPlaceholder'],\r\n                urlTitle: this.sen['insertLinkUrlTitle'],\r\n                openInNewWindow: this.sen['openInNewWindow'],\r\n                insertLinkValidatorRequired: this.sen['insertLinkValidatorRequired'],\r\n                insertLinkValidatorPattern: this.sen['insertLinkValidatorPattern']\r\n            }\r\n        });\r\n        dialogRef.afterClosed()\r\n            .pipe(take(1))\r\n            .subscribe((res: LinkDialogResult) => {\r\n                if (res) {\r\n                    this.editorService.restoreSelection();\r\n                    this.editorService.createLink(res.url, res.target);\r\n                }\r\n            });\r\n    }\r\n\r\n    /**\r\n     * set font Name/family\r\n     * @param foreColor string\r\n     */\r\n    setFontName(foreColor: string): void {\r\n        this.editorService.setFontName(foreColor);\r\n        this.execute.emit(null);\r\n    }\r\n\r\n    /**\r\n     * set font Size\r\n     * @param fontSize string\r\n     */\r\n    setFontSize(fontSize: string): void {\r\n        this.editorService.setFontSize(fontSize);\r\n        this.execute.emit(null);\r\n    }\r\n\r\n    /**\r\n     * toggle editor mode (WYSIWYG or SOURCE)\r\n     * @param m boolean\r\n     */\r\n    setEditorMode(m: boolean) {\r\n        const toggleEditorModeButton = this.doc.getElementById('toggleEditorMode' + '-' + this.id);\r\n        if (m) {\r\n            this.r.addClass(toggleEditorModeButton, 'active');\r\n        } else {\r\n            this.r.removeClass(toggleEditorModeButton, 'active');\r\n        }\r\n        this.htmlMode = m;\r\n    }\r\n\r\n    /**\r\n     * Upload image when file is selected\r\n     */\r\n    onFileChanged(event) {\r\n        const file = event.target.files[0];\r\n        if (file.type.includes('image/')) {\r\n            if (this.uploadUrl) {\r\n                this.editorService.uploadImage(file).subscribe(e => {\r\n                    if (e instanceof HttpResponse) {\r\n                        this.editorService.insertImage(e.body.imageUrl);\r\n                        event.srcElement.value = null;\r\n                    }\r\n                });\r\n            } else {\r\n                const reader = new FileReader();\r\n                reader.onload = (e: ProgressEvent) => {\r\n                    const fr = e.currentTarget as FileReader;\r\n                    this.editorService.insertImage(fr.result.toString());\r\n                };\r\n                reader.readAsDataURL(file);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set custom class\r\n     */\r\n    setCustomClass(classId: string) {\r\n        if (classId === '-1') {\r\n            this.execute.emit(CommandName.clear);\r\n        } else {\r\n            this.editorService.createCustomClass(this._customClasses[+classId]);\r\n        }\r\n    }\r\n\r\n    isButtonHidden(name: CommandName): boolean {\r\n        if (!name) {\r\n            return false;\r\n        }\r\n        if (!(this.hiddenButtons instanceof Array)) {\r\n            return false;\r\n        }\r\n        let result: any;\r\n        for (const arr of this.hiddenButtons) {\r\n            if (arr instanceof Array) {\r\n                result = arr.find(item => item === name);\r\n            }\r\n            if (result) {\r\n                break;\r\n            }\r\n        }\r\n        return result !== undefined;\r\n    }\r\n\r\n    insertColorDialog(where: ColorWhere): void {\r\n        const dialogRef = this.dialog.open(InsertColorDialogComponent, {\r\n            width: '275px',\r\n            height: 'auto',\r\n            data: {\r\n                senDialogTitle: this.sen['insertColorDialogTitle'],\r\n                senPresetColors: this.sen['presetColors'],\r\n                senCancel: this.sen['cancel'],\r\n                customColorPalette: this.customColorPalette\r\n            }\r\n        });\r\n\r\n        dialogRef.afterClosed()\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe((res: ColorDialogResult) => {\r\n                if (res) {\r\n                    this.insertColor(res.color, where);\r\n                }\r\n            });\r\n    }\r\n\r\n    /** insert color */\r\n    private insertColor(color: string, where: ColorWhere) {\r\n        this.editorService.insertColor(color, where);\r\n        this.execute.emit(null);\r\n    }\r\n\r\n    setHeading(block: string) {\r\n        this.triggerCommand(block as CommandName);\r\n    }\r\n\r\n    private initSelectValues(): void {\r\n        this.initHeadings();\r\n        this.initTableActions();\r\n        this.initImageActions();\r\n    }\r\n\r\n    private initHeadings(): void {\r\n        this.headings = [\r\n            {\r\n                label: this.sen['h1'],\r\n                value: 'h1',\r\n            },\r\n            {\r\n                label: this.sen['h2'],\r\n                value: 'h2',\r\n            },\r\n            {\r\n                label: this.sen['h3'],\r\n                value: 'h3',\r\n            },\r\n            {\r\n                label: this.sen['h4'],\r\n                value: 'h4',\r\n            },\r\n            {\r\n                label: this.sen['h5'],\r\n                value: 'h5',\r\n            },\r\n            {\r\n                label: this.sen['h6'],\r\n                value: 'h6',\r\n            },\r\n            {\r\n                label: this.sen['p'],\r\n                value: 'p',\r\n            },\r\n            {\r\n                label: this.sen['clear'],\r\n                value: 'default'\r\n            }\r\n        ];\r\n    }\r\n\r\n    private initTableActions(): void {\r\n        this.tableActions = [\r\n            {\r\n                label: this.sen['tableActions'],\r\n                value: null\r\n            },\r\n            {\r\n                label: this.sen['setColumnWidths'],\r\n                value: 'setColumnWidths'\r\n            },\r\n            {\r\n                label: this.sen['addRowBellow'],\r\n                value: 'addRowBellow'\r\n            },\r\n            {\r\n                label: this.sen['addRowUp'],\r\n                value: 'addRowUp'\r\n            },\r\n            {\r\n                label: this.sen['addColumnRight'],\r\n                value: 'addColumnRight'\r\n            },\r\n            {\r\n                label: this.sen['addColumnLeft'],\r\n                value: 'addColumnLeft'\r\n            },\r\n            {\r\n                label: this.sen['deleteColumn'],\r\n                value: 'deleteColumn'\r\n            },\r\n            {\r\n                label: this.sen['deleteRow'],\r\n                value: 'deleteRow'\r\n            },\r\n            {\r\n                label: this.sen['deleteTable'],\r\n                value: 'deleteTable'\r\n            }\r\n        ];\r\n    }\r\n\r\n    private initImageActions(): void {\r\n        this.imageActions = [\r\n            {\r\n                label: this.sen['imageActions'],\r\n                value: null\r\n            },\r\n            {\r\n                label: this.sen['insertImageUrl'],\r\n                value: 'insertImageUrl'\r\n            },\r\n            {\r\n                label: this.sen['deleteImage'],\r\n                value: 'deleteImage'\r\n            }\r\n        ];\r\n    }\r\n\r\n}\r\n","<div class=\"angular-editor-toolbar\" *ngIf=\"showToolbar\">\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button type=\"button\" [title]=\"sen['undo']\" class=\"angular-editor-button\" (click)=\"triggerCommand(commands.undo)\"\r\n                [hidden]=\"isButtonHidden(commands.undo)\" tabindex=\"-1\"><i\r\n            class='fa fa-undo'></i></button>\r\n        <button type=\"button\" [title]=\"sen['redo']\" class=\"angular-editor-button\" (click)=\"triggerCommand(commands.redo)\"\r\n                [hidden]=\"isButtonHidden(commands.redo)\" tabindex=\"-1\"><i\r\n            class='fa fa-repeat'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'bold-'+id\" type=\"button\" [title]=\"sen['bold']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.bold)\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.bold)\" tabindex=\"-1\"><i class='fa fa-bold'></i>\r\n        </button>\r\n        <button [id]=\"'italic-'+id\" type=\"button\" [title]=\"sen['italic']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.italic)\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.italic)\" tabindex=\"-1\"><i class='fa fa-italic'></i>\r\n        </button>\r\n        <button [id]=\"'underline-'+id\" type=\"button\" [title]=\"sen['underline']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.underline)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.underline)\"\r\n                tabindex=\"-1\"><i class='fa fa-underline'></i></button>\r\n        <button [id]=\"'strikeThrough-'+id\" type=\"button\" [title]=\"sen['strikethrough']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.strikeThrough)\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"isButtonHidden(commands.strikeThrough)\"\r\n                tabindex=\"-1\"><i class='fa fa-strikethrough'></i></button>\r\n        <button [id]=\"'subscript-'+id\" type=\"button\" [title]=\"sen['subscript']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.subscript)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.subscript)\"\r\n                tabindex=\"-1\"><i class='fa fa-subscript'></i></button>\r\n        <button [id]=\"'superscript-'+id\" type=\"button\" [title]=\"sen['superscript']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.superscript)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.superscript)\"\r\n                tabindex=\"-1\"><i class='fa fa-superscript'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'justifyLeft-'+id\" type=\"button\" [title]=\"sen['justifyLeft']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.justifyLeft)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.justifyLeft)\"\r\n                tabindex=\"-1\"><i\r\n            class='fa fa-align-left'></i></button>\r\n        <button [id]=\"'justifyCenter-'+id\" type=\"button\" [title]=\"sen['justifyCenter']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.justifyCenter)\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"isButtonHidden(commands.justifyCenter)\"\r\n                tabindex=\"-1\"><i\r\n            class='fa fa-align-center'></i></button>\r\n        <button [id]=\"'justifyRight-'+id\" type=\"button\" [title]=\"sen['justifyRight']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.justifyRight)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.justifyRight)\"\r\n                tabindex=\"-1\">\r\n            <i class='fa fa-align-right'></i></button>\r\n        <button [id]=\"'justifyFull-'+id\" type=\"button\" [title]=\"sen['justifyFull']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.justifyFull)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.justifyFull)\"\r\n                tabindex=\"-1\"><i\r\n            class='fa fa-align-justify'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'indent-'+id\" type=\"button\" [title]=\"sen['indent']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.indent)\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.indent)\" tabindex=\"-1\"><i\r\n            class='fa fa-indent'></i></button>\r\n        <button [id]=\"'outdent-'+id\" type=\"button\" [title]=\"sen['outdent']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.outdent)\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.outdent)\" tabindex=\"-1\"><i\r\n            class='fa fa-outdent'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'insertUnorderedList-'+id\" type=\"button\" [title]=\"sen['unorderedList']\"\r\n                class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.insertUnorderedList)\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"isButtonHidden(commands.insertUnorderedList)\" tabindex=\"-1\"><i\r\n            class='fa fa-list-ul'></i></button>\r\n        <button [id]=\"'insertOrderedList-'+id\" type=\"button\" [title]=\"sen['orderedList']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.insertOrderedList)\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"isButtonHidden(commands.insertOrderedList)\" tabindex=\"-1\"><i\r\n            class='fa fa-list-ol'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <ae-select class=\"select-heading\" [options]=\"headings\"\r\n                   [(ngModel)]=\"block\"\r\n                   (change)=\"setHeading(block)\"\r\n                   [disabled]=\"htmlMode\"\r\n                   [hidden]=\"isButtonHidden(commands.heading)\"\r\n                   tabindex=\"-1\">\r\n        </ae-select>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <ae-select class=\"select-font\" [options]=\"fonts\"\r\n                   [(ngModel)]=\"fontName\"\r\n                   (change)=\"setFontName(fontName)\"\r\n                   [disabled]=\"htmlMode\"\r\n                   [hidden]=\"isButtonHidden(commands.fontName)\"\r\n                   tabindex=\"-1\">\r\n        </ae-select>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <ae-select class=\"select-font-size\" [options]=\"fontSizes\"\r\n                   [(ngModel)]=\"fontSize\"\r\n                   (change)=\"setFontSize(fontSize)\"\r\n                   [disabled]=\"htmlMode\"\r\n                   [hidden]=\"isButtonHidden(commands.fontSize)\"\r\n                   tabindex=\"-1\">\r\n        </ae-select>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'foregroundColorPicker-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"insertColorDialog(colorWheres.text)\"\r\n                [title]=\"sen['textColor']\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.textColor)\" tabindex=\"-1\"><span\r\n            class=\"color-label foreground\"><i class=\"fa fa-font\"></i></span>\r\n        </button>\r\n        <button [id]=\"'backgroundColorPicker-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"insertColorDialog(colorWheres.background)\"\r\n                [title]=\"sen['backgroundColor']\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.backgroundColor)\" tabindex=\"-1\"><span\r\n            class=\"color-label background\"><i class=\"fa fa-font\"></i></span>\r\n        </button>\r\n    </div>\r\n    <div *ngIf=\"_customClasses\" class=\"angular-editor-toolbar-set\">\r\n        <ae-select class=\"select-custom-style\" [options]=\"customClassList\"\r\n                   [(ngModel)]=\"customClassId\"\r\n                   (change)=\"setCustomClass(customClassId)\"\r\n                   [disabled]=\"htmlMode\"\r\n                   [hidden]=\"isButtonHidden(commands.customClasses)\"\r\n                   tabindex=\"-1\">\r\n        </ae-select>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'link-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"insertUrl()\"\r\n                [title]=\"sen['insertLink']\" [disabled]=\"isLinkButtonDisabled\" [hidden]=\"isButtonHidden(commands.link)\"\r\n                tabindex=\"-1\">\r\n            <i class=\"fa fa-link\"></i>\r\n        </button>\r\n        <button [id]=\"'unlink-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"triggerCommand(commands.unlink)\"\r\n                [title]=\"sen['unlink']\" [disabled]=\"htmlMode || unLinkDisabled\" [hidden]=\"isButtonHidden(commands.unlink)\"\r\n                tabindex=\"-1\">\r\n            <i class=\"fa fa-chain-broken\"></i>\r\n        </button>\r\n        <input\r\n            style=\"display: none\"\r\n            accept=\"image/*\"\r\n            type=\"file\" (change)=\"onFileChanged($event)\"\r\n            #fileInput>\r\n        <button [id]=\"'insertImage-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"fileInput.click()\"\r\n                [title]=\"sen['insertImage']\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.insertImage)\" tabindex=\"-1\"><i class=\"fa fa-image\"></i>\r\n        </button>\r\n        <button [id]=\"'insertFtp-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"triggerCommand(commands.insertFtp)\"\r\n                [title]=\"sen['insertFtp']\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.insertFtp)\" tabindex=\"-1\"><i\r\n            class=\"fa fa-file-image-o\"></i>\r\n        </button>\r\n        <button [id]=\"'insertVideo-'+id\" type=\"button\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.insertVideo)\" [title]=\"sen['insertVideo']\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"isButtonHidden(commands.insertVideo)\"\r\n                tabindex=\"-1\"><i\r\n            class=\"fa fa-video-camera\"></i></button>\r\n        <button [id]=\"'insertHorizontalRule-'+id\" type=\"button\" [title]=\"sen['horizontalLine']\"\r\n                class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.insertHorizontalRule)\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"isButtonHidden(commands.insertHorizontalRule)\" tabindex=\"-1\"><i\r\n            class=\"fa fa-minus\"></i></button>\r\n        <button [id]=\"'insertTable-'+id\" type=\"button\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.insertTable)\"\r\n                [title]=\"sen['insertTable']\"\r\n                [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.insertTable)\" tabindex=\"-1\"><i class=\"fa fa-table\"></i>\r\n        </button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\">\r\n        <button [id]=\"'clearFormatting-'+id\" type=\"button\" [title]=\"sen['clearFormatting']\"\r\n                class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.removeFormat)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden(commands.removeFormat)\"\r\n                tabindex=\"-1\"><i class='fa fa-remove'></i>\r\n        </button>\r\n        <button [id]=\"'toggleEditorMode-'+id\" type=\"button\" [title]=\"sen['HTMLCode']\" class=\"angular-editor-button\"\r\n                (click)=\"triggerCommand(commands.toggleEditorMode)\" [hidden]=\"isButtonHidden(commands.toggleEditorMode)\"\r\n                tabindex=\"-1\"><i\r\n            class='fa fa-code'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\" *ngIf=\"selObject\">\r\n        <button [id]=\"'edit'+id\" type=\"button\" [title]=\"selObject.buttonTitle\" class=\"angular-editor-button\"\r\n                [class.active]=\"selObject\"\r\n                [disabled]=\"!selObject\" (click)=\"triggerCommand(commands.editObject)\"\r\n                tabindex=\"-1\"><i class='fa fa-pencil-square-o'></i></button>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\" *ngIf=\"selObject\">\r\n        <ae-select *ngIf=\"selObject.nodeName === 'IMG'\"\r\n                   class=\"select-heading\" style=\"width:110px\"\r\n                   [class.active]=\"selObject\"\r\n                   [options]=\"imageActions\"\r\n                   [(ngModel)]=\"imageAction\"\r\n                   (change)=\"triggerCommand($event)\"\r\n                   [disabled]=\"htmlMode\"\r\n                   tabindex=\"-1\">\r\n        </ae-select>\r\n        <ae-select *ngIf=\"selObject.nodeName === 'TABLE'\"\r\n                   class=\"select-heading\" style=\"width:135px\"\r\n                   [class.active]=\"selObject\"\r\n                   [options]=\"tableActions\"\r\n                   [(ngModel)]=\"tableAction\"\r\n                   (change)=\"triggerCommand($event)\"\r\n                   [disabled]=\"htmlMode\"\r\n                   tabindex=\"-1\">\r\n        </ae-select>\r\n    </div>\r\n    <div class=\"angular-editor-toolbar-set\"  *ngFor=\"let customButtonArray of customButtons; let i=index\">\r\n        <button *ngFor=\"let customButton of customButtonArray; let j=index\"\r\n                [id]=\"'customButton-'+((i+1)*(j+1))+customButton.commandName\" type=\"button\" [title]=\"customButton.buttonText\"\r\n                class=\"angular-editor-button\"\r\n                (click)=\"executeCustomButtonCommand(customButton.commandName)\" [disabled]=\"htmlMode\"\r\n                [hidden]=\"htmlMode\" tabindex=\"-1\">\r\n            <ng-container *ngIf=\"customButton.icon\"><i class='fa {{customButton.icon}}' ></i>&nbsp;</ng-container>\r\n            <span>{{customButton.buttonText}}</span>\r\n        </button>\r\n    </div>\r\n</div>\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'dialog-message',\r\n    templateUrl: 'message-dialog.component.html',\r\n    styleUrls: ['insert-table-dialog.component.scss']\r\n})\r\nexport class MessageDialogComponent {\r\n\r\n    constructor(public dialogRef: MatDialogRef<MessageDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any) {\r\n\r\n    }\r\n\r\n    ok(): void {\r\n        this.dialogRef.close();\r\n    }\r\n\r\n}\r\n","<!--todo: from dlg data-->\r\n<h1 mat-dialog-title>{{data.title}}</h1>\r\n<div mat-dialog-content>\r\n    <mat-label>{{data.text}}</mat-label>\r\n</div>\r\n<div mat-dialog-actions class=\"pull-right insert-table-actions\">\r\n    <button mat-raised-button color=\"primary\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject, OnDestroy, OnInit} from '@angular/core';\r\nimport {EditImageDialogData} from './common/common-interfaces';\r\nimport {UntypedFormBuilder, UntypedFormGroup, Validators} from '@angular/forms';\r\nimport {Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Component({\r\n    selector: 'dialog-edit-image',\r\n    templateUrl: 'edit-image-dialog.component.html',\r\n    styleUrls: ['edit-image-dialog.component.scss']\r\n})\r\nexport class EditImageDialogComponent implements OnInit, OnDestroy {\r\n\r\n    imageForm: UntypedFormGroup;\r\n    // aspect ratio of original image\r\n    private ratio: number;\r\n    // aspect ratio of current image\r\n    private currenRatio: number;\r\n    private ngUnsubscribe: Subject<any> = new Subject<any>();\r\n\r\n    constructor(public dialogRef: MatDialogRef<EditImageDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any, private fb: UntypedFormBuilder) {\r\n        this.createForm();\r\n    }\r\n\r\n    ngOnInit(): void {\r\n        this.measureCurrent(this.data.width, this.data.height);\r\n\r\n        if (!this.data.oldImageBrowser) {\r\n            this.measureOriginal(this.data.orig);\r\n        } else {\r\n            this.ratio = this.data.width.replace('px', '') / this.data.height.replace('px', '');\r\n        }\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.ngUnsubscribe.next();\r\n        this.ngUnsubscribe.complete();\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        const result: EditImageDialogData = {\r\n            alt: this.imageForm.get('alt').value,\r\n            crop: this.imageForm.get('crop').value,\r\n            height: this.imageForm.get('height').value,\r\n            width: this.imageForm.get('width').value,\r\n            title: this.imageForm.get('title').value\r\n        };\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n    widthKeyPres(): void {\r\n        this.recountHeight()\r\n    }\r\n\r\n    heightKeyPress(): void {\r\n        this.recountWidth()\r\n    }\r\n\r\n    private recountHeight(): void {\r\n        if (!this.imageForm.dirty || !this.imageForm.get('keepRatio').value || !this.imageForm.get('width').dirty || !this.imageForm.get('width').valid) return;\r\n        const newVal = Math.round(this.imageForm.get('width').value / this.ratio);\r\n        this.imageForm.get('height').patchValue(newVal);\r\n    }\r\n\r\n    private forceRecountHeight(): void {\r\n        if (!this.imageForm.get('keepRatio').value || !this.imageForm.get('width').valid) return;\r\n        const newVal = Math.round(this.imageForm.get('width').value / this.ratio);\r\n        this.imageForm.get('height').patchValue(newVal);\r\n    }\r\n\r\n    private recountWidth(): void {\r\n        if (!this.imageForm.dirty || !this.imageForm.get('keepRatio').value || !this.imageForm.get('height').dirty || !this.imageForm.get('height').valid) return;\r\n        const newVal = Math.round(this.imageForm.get('height').value * this.ratio);\r\n        this.imageForm.get('width').patchValue(newVal);\r\n    }\r\n\r\n    private createForm(): void {\r\n        const width = this.data.oldImageBrowser\r\n            ? this.data.width.replace('px', '')\r\n            : this.data.width;\r\n        const height = this.data.oldImageBrowser\r\n            ? this.data.height.replace('px', '')\r\n            : this.data.height;\r\n\r\n        this.imageForm = this.fb.group({\r\n            width: [width, [Validators.required]],\r\n            height: [height, [Validators.required]],\r\n            alt: [this.data.alt, [Validators.required]],\r\n            title: [this.data.title],\r\n            crop: [this.data.crop],\r\n            keepRatio: false\r\n        });\r\n\r\n        this.imageForm.get('keepRatio').valueChanges\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(res => {\r\n                this.forceRecountHeight()\r\n            })\r\n    }\r\n\r\n    private measureOriginal(imageSrc: string): void {\r\n        const img: HTMLImageElement = new Image();\r\n        img.onload = () => {\r\n            this.ratio = img.width / img.height;\r\n            const keepRatioChecked = this.isRatioRoughlyOrig();\r\n            if (keepRatioChecked) {\r\n                this.imageForm.get('keepRatio').patchValue({\r\n                    keepRatio: keepRatioChecked\r\n                });\r\n            }\r\n        }\r\n        img.src = imageSrc;\r\n    }\r\n\r\n    private measureCurrent(w: number, h: number): void {\r\n        this.currenRatio = w / h;\r\n    }\r\n\r\n    private isRatioRoughlyOrig(): boolean {\r\n        const roundedRatio = Math.round((this.ratio + Number.EPSILON) * 100) / 100;\r\n        const roundedCurrentRatio = Math.round((this.currenRatio + Number.EPSILON) * 100) / 100;\r\n        return roundedRatio === roundedCurrentRatio;\r\n    }\r\n}\r\n","<h1 mat-dialog-title>{{data.senDialogTitle}}</h1>\r\n<div mat-dialog-content [formGroup]=\"imageForm\">\r\n    <mat-form-field class=\"image-size-field\">\r\n        <mat-label>{{data.senWidth}}</mat-label>\r\n        <input matInput formControlName=\"width\" type=\"number\" (input)=\"widthKeyPres()\">\r\n    </mat-form-field>\r\n    <mat-form-field class=\"image-size-field\">\r\n        <mat-label>{{data.senHeight}}</mat-label>\r\n        <input matInput formControlName=\"height\" type=\"number\" (input)=\"heightKeyPress()\">\r\n    </mat-form-field>\r\n    <div>\r\n        <mat-form-field class=\"mat-full-width\">\r\n            <mat-label>{{data.senAlt}}</mat-label>\r\n            <input matInput formControlName=\"alt\" type=\"text\" maxlength=\"256\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div>\r\n        <mat-form-field class=\"mat-full-width\">\r\n            <mat-label>{{data.senTitle}}</mat-label>\r\n            <input matInput formControlName=\"title\" type=\"text\" maxlength=\"256\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div *ngIf=\"!data.oldImageBrowser\">\r\n        <mat-checkbox formControlName=\"crop\">{{data.senCrop}}</mat-checkbox>\r\n    </div>\r\n    <div>\r\n        <mat-checkbox formControlName=\"keepRatio\">{{data.senKeepRatio}}</mat-checkbox>\r\n    </div>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.senCancel}}</button>\r\n    <button mat-raised-button [disabled]=\"imageForm.invalid\" color=\"primary\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {EditTableDialogResult} from './common/common-interfaces';\r\nimport {UntypedFormBuilder, UntypedFormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'dialog-insert-table',\r\n    templateUrl: 'edit-table-dialog.component.html',\r\n    styleUrls: ['insert-table-dialog.component.scss']\r\n})\r\nexport class EditTableDialogComponent {\r\n\r\n    tableForm: UntypedFormGroup;\r\n    vAlignOptions = [\r\n        { name: this.data.senVAlignTop, value: 'top' },\r\n        { name: this.data.senVAlignMiddle, value: 'middle' },\r\n        { name: this.data.senVAlignBottom, value: 'bottom' }\r\n    ];\r\n\r\n    constructor(public dialogRef: MatDialogRef<EditTableDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any, private fb: UntypedFormBuilder) {\r\n        this.createForm();\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        const result: EditTableDialogResult = {\r\n            stroke: this.tableForm.get('stroke').value,\r\n            fullWidth: this.tableForm.get('fullWidth').value,\r\n            vAlign: this.tableForm.get('vAlign').value\r\n        };\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n    private createForm(): void {\r\n        this.tableForm = this.fb.group({\r\n            stroke: this.data.stroke,\r\n            fullWidth: this.data.fullWidth,\r\n            vAlign: [this.data.vAlign]\r\n        });\r\n    }\r\n\r\n}\r\n","<h1 mat-dialog-title>{{data.senDialogTitle}}</h1>\r\n<div mat-dialog-content [formGroup]=\"tableForm\">\r\n    <div>\r\n        <mat-checkbox formControlName=\"stroke\">{{data.senStroke}}</mat-checkbox>\r\n    </div>\r\n    <div>\r\n        <mat-checkbox formControlName=\"fullWidth\">{{data.senFullWidth}}</mat-checkbox>\r\n    </div>\r\n    <mat-form-field class=\"vertical-alignment-select\">\r\n        <mat-label>{{this.data.senVerticalCellAlignment}}</mat-label>\r\n        <mat-select formControlName=\"vAlign\">\r\n            <mat-option *ngFor=\"let option of vAlignOptions\" [value]=\"option.value\">\r\n                {{option.name}}\r\n            </mat-option>\r\n        </mat-select>\r\n    </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.senCancel}}</button>\r\n    <button mat-raised-button color=\"primary\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject} from '@angular/core';\r\nimport {TableDialogResult} from './common/common-interfaces';\r\nimport {UntypedFormBuilder, UntypedFormGroup, Validators} from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'dialog-insert-table',\r\n    templateUrl: 'insert-table-dialog.component.html',\r\n    styleUrls: ['insert-table-dialog.component.scss']\r\n})\r\nexport class InsertTableDialogComponent {\r\n\r\n    tableForm: UntypedFormGroup;\r\n    vAlignOptions = [\r\n        { name: this.data.senVAlignTop, value: 'top' },\r\n        { name: this.data.senVAlignMiddle, value: 'middle' },\r\n        { name: this.data.senVAlignBottom, value: 'bottom' }\r\n    ];\r\n\r\n    constructor(public dialogRef: MatDialogRef<InsertTableDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any, private fb: UntypedFormBuilder) {\r\n        this.createForm();\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        const result: TableDialogResult = {\r\n            rows: this.tableForm.get('rows').value,\r\n            cols: this.tableForm.get('cols').value,\r\n            stroke: this.tableForm.get('stroke').value,\r\n            fullWidth: this.tableForm.get('fullWidth').value,\r\n            vAlign: this.tableForm.get('vAlign').value\r\n        };\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n    private createForm(): void {\r\n        this.tableForm = this.fb.group({\r\n            rows: [2, [Validators.required]],\r\n            cols: [2, [Validators.required]],\r\n            stroke: true,\r\n            fullWidth: true,\r\n            vAlign: ['top']\r\n        });\r\n    }\r\n\r\n}\r\n","<h1 mat-dialog-title>{{data.title}}</h1>\r\n<div mat-dialog-content [formGroup]=\"tableForm\">\r\n    <mat-form-field>\r\n        <mat-label>{{data.numRows}}</mat-label>\r\n        <input matInput formControlName=\"rows\" type=\"number\">\r\n    </mat-form-field>\r\n    <mat-form-field>\r\n        <mat-label>{{data.numCols}}</mat-label>\r\n        <input matInput formControlName=\"cols\" type=\"number\">\r\n    </mat-form-field>\r\n    <div>\r\n        <mat-checkbox formControlName=\"stroke\">{{data.stroke}}</mat-checkbox>\r\n    </div>\r\n    <div>\r\n        <mat-checkbox formControlName=\"fullWidth\">{{data.senFullWidth}}</mat-checkbox>\r\n    </div>\r\n    <mat-form-field class=\"vertical-alignment-select\">\r\n        <mat-label>{{this.data.senVerticalCellAlignment}}</mat-label>\r\n        <mat-select formControlName=\"vAlign\">\r\n            <mat-option *ngFor=\"let option of vAlignOptions\" [value]=\"option.value\">\r\n                {{option.name}}\r\n            </mat-option>\r\n        </mat-select>\r\n    </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.cancel}}</button>\r\n    <button mat-raised-button color=\"primary\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport {Component, Inject, OnDestroy} from '@angular/core';\r\nimport {VideoDialogResult} from './common/common-interfaces';\r\nimport {UntypedFormBuilder, UntypedFormGroup, Validators} from '@angular/forms';\r\nimport {merge, Subject} from 'rxjs';\r\nimport {finalize, take, takeUntil} from 'rxjs/operators';\r\nimport {HttpClient} from '@angular/common/http';\r\n\r\ntype VideoKind = 'youtube' | 'vimeo';\r\ntype SizeMode = 'auto' | 'manual';\r\n\r\ninterface HashResult {\r\n    kind: VideoKind,\r\n    hash: string;\r\n}\r\n\r\ninterface VideoInfo {\r\n    width: number;\r\n    height: number;\r\n}\r\n\r\n@Component({\r\n    selector: 'video-insert-link',\r\n    templateUrl: 'insert-video-dialog.component.html',\r\n    styleUrls: ['insert-table-dialog.component.scss']\r\n})\r\nexport class InsertVideoDialogComponent implements OnDestroy {\r\n\r\n    videoForm: UntypedFormGroup;\r\n    videoInfo: VideoInfo;\r\n    gettingSize: boolean;\r\n    sizeMode: SizeMode;\r\n    private ngUnsubscribe: Subject<any> = new Subject<any>();\r\n\r\n    constructor(public dialogRef: MatDialogRef<InsertVideoDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any, private fb: UntypedFormBuilder, private http: HttpClient) {\r\n        this.createForm();\r\n    }\r\n\r\n    getErrorMessage(): any {\r\n        const urlField = this.videoForm.get('url');\r\n\r\n        if (urlField.hasError('required')) {\r\n            return this.data['insertVideoValidatorRequired'];\r\n        }\r\n\r\n        return urlField.hasError('pattern') ? this.data['insertVideoValidatorPattern'] : '';\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        let url = this.videoForm.get('url').value;\r\n        const hashResult: HashResult = InsertVideoDialogComponent.getVideoHash(url);\r\n        const html = this.createVideoHtml(hashResult.kind, hashResult.hash);\r\n\r\n        const result: VideoDialogResult = {\r\n            videoHtml: html\r\n        };\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n    ngOnDestroy(): void {\r\n        this.ngUnsubscribe.next();\r\n        this.ngUnsubscribe.complete();\r\n    }\r\n\r\n    private createForm(): void {\r\n        this.videoForm = this.fb.group({\r\n            url: [this.data.url, [Validators.required, Validators.pattern(/^https:\\/\\/([\\w\\d\\-]+\\.)+\\w{2,}/)]],\r\n            sizeMode: [null, [Validators.required]],\r\n            manWidth: [{value: 240, disabled: true}, [Validators.required]],\r\n            manHeight: [{value: 180, disabled: true}, [Validators.required]],\r\n        });\r\n        this.videoForm.get('sizeMode').valueChanges\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(res => {\r\n                const url = this.videoForm.get('url').value;\r\n                const hashResult = InsertVideoDialogComponent.getVideoHash(url);\r\n\r\n                if (url && hashResult && res === 'auto') {\r\n                    this.sizeMode = 'auto';\r\n                    this.enableManualSizeControls(false);\r\n                    this.getVideoSizeAuto(hashResult);\r\n                }\r\n                if (url && hashResult && res === 'manual') {\r\n                    this.sizeMode = 'manual';\r\n                    this.enableManualSizeControls(true);\r\n                }\r\n            });\r\n        merge(\r\n            this.videoForm.get('manWidth').valueChanges,\r\n            this.videoForm.get('manHeight').valueChanges\r\n        )\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(() => {\r\n                this.getVideoSizeManual();\r\n            })\r\n    }\r\n\r\n    private getVideoSizeAuto(hashResult: HashResult): void {\r\n        this.gettingSize = true;\r\n        const apiUrlPrefix = this.data.apiUrlPrefix;\r\n        if (hashResult.kind === 'youtube') {\r\n            let apiUrl = `${apiUrlPrefix}/youtube-video-info?hash=${hashResult.hash}`;\r\n            this.http.get<string>(apiUrl)\r\n                .pipe(\r\n                    take(1),\r\n                    finalize(() => this.gettingSize = false)\r\n                )\r\n                .subscribe(res => {\r\n                    const result = JSON.parse(res);\r\n                    if (result['thumbnail_width'] && result['thumbnail_height']) {\r\n                        this.videoInfo = {\r\n                            width: result['thumbnail_width'],\r\n                            height: result['thumbnail_height']\r\n                        }\r\n                    }\r\n                })\r\n        }\r\n        if (hashResult.kind === 'vimeo') {\r\n            let apiUrl = `${apiUrlPrefix}/vimeo-video-info?hash=${hashResult.hash}`;\r\n            this.http.get<string>(apiUrl)\r\n                .pipe(\r\n                    take(1),\r\n                    finalize(() => this.gettingSize = false)\r\n                )\r\n                .subscribe(res => {\r\n                    const result = JSON.parse(res);\r\n                    if (result['height'] && result['width']) {\r\n                        this.videoInfo = {\r\n                            width: result['width'],\r\n                            height: result['height']\r\n                        }\r\n                    }\r\n                })\r\n        }\r\n    }\r\n\r\n    private getVideoSizeManual(): void {\r\n        this.videoInfo = {\r\n            width: this.videoForm.get('manWidth').value,\r\n            height: this.videoForm.get('manHeight').value\r\n        }\r\n    }\r\n\r\n    private enableManualSizeControls(enable: boolean): void {\r\n        if (enable) {\r\n            this.videoForm.get('manWidth').enable();\r\n            this.videoForm.get('manHeight').enable();\r\n        } else {\r\n            this.videoForm.get('manWidth').disable();\r\n            this.videoForm.get('manHeight').disable();\r\n        }\r\n    }\r\n\r\n    private createVideoHtml(kind: VideoKind, hash: string): string {\r\n        const size = this.videoInfo\r\n            ? `width=\"${this.videoInfo.width}\" height=\"${this.videoInfo.height}\"`\r\n            : '';\r\n        if (kind === 'youtube') {\r\n            return `\r\n                <iframe src=\"https://www.youtube.com/embed/${hash}\" ${size} frameborder=\"0\" allowfullscreen></iframe>\r\n                `;\r\n        }\r\n        if (kind === 'vimeo') {\r\n            return `\r\n                <iframe src=\"https://player.vimeo.com/video/${hash}\" ${size} frameborder=\"0\" allowfullscreen></iframe>\r\n                `;\r\n        }\r\n        return null;\r\n    }\r\n\r\n    private static getVideoHash(url: string): HashResult {\r\n        let match;\r\n        if (/youtube.com/.test(url)) {\r\n            match = url.match(/https:\\/\\/www.youtube.com\\/watch\\?(?<video>v=.*)/);\r\n            const hashMatch = match['groups']['video'].match(/v=(?<hash>[a-zA-Z0-9_-]*)/);\r\n            const hash = hashMatch['groups']['hash'];\r\n            return {kind: 'youtube', hash: hash};\r\n        }\r\n        if (/vimeo.com/.test(url)) {\r\n            match = url.match(/https:\\/\\/vimeo.com\\/(?<hash>.*)/);\r\n            const hash = match['groups']['hash'];\r\n            return {kind: 'vimeo', hash: hash};\r\n        }\r\n        return null;\r\n    }\r\n\r\n}\r\n","<h1 mat-dialog-title>{{data.senDialogTitle}}</h1>\r\n<div mat-dialog-content [formGroup]=\"videoForm\">\r\n    <mat-form-field class=\"mat-full-width\">\r\n        <mat-label>{{data.urlLabel}}</mat-label>\r\n        <input matInput formControlName=\"url\" placeholder=\"https://www.youtube.com/watch?v=54LEywabkl4\" type=\"text\">\r\n        <mat-error *ngIf=\"videoForm.dirty && videoForm.invalid\">{{getErrorMessage()}}</mat-error>\r\n    </mat-form-field>\r\n    <mat-radio-group class=\"example-radio-group\"\r\n        formControlName=\"sizeMode\">\r\n        <mat-radio-button class=\"example-radio-button\" [value]=\"'auto'\">\r\n            {{data.origSizeLabel}}\r\n            <ng-container *ngIf=\"videoInfo && sizeMode === 'auto'\">\r\n                ({{videoInfo?.width}}x{{videoInfo?.height}})\r\n            </ng-container>\r\n        </mat-radio-button>\r\n        <mat-radio-button class=\"example-radio-button\" [value]=\"'manual'\">\r\n            {{data.manualSizeLabel}}\r\n        </mat-radio-button>\r\n    </mat-radio-group>\r\n    <mat-form-field class=\"size-field\">\r\n        <mat-label>w</mat-label>\r\n        <input matInput formControlName=\"manWidth\" type=\"number\">\r\n    </mat-form-field>\r\n    <mat-form-field class=\"size-field\">\r\n        <mat-label>h</mat-label>\r\n        <input matInput formControlName=\"manHeight\" type=\"number\">\r\n    </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.senCancel}}</button>\r\n    <button mat-raised-button color=\"primary\" [disabled]=\"videoForm.pristine || videoForm.invalid\" (click)=\"ok()\">OK</button>\r\n</div>\r\n\r\n<mat-progress-spinner *ngIf=\"gettingSize\" class=\"dialog-spinner\" diameter=\"30\" mode=\"indeterminate\"></mat-progress-spinner>\r\n","import {Component, Inject} from '@angular/core';\r\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\r\nimport {UntypedFormArray, UntypedFormBuilder, UntypedFormGroup} from '@angular/forms';\r\n\r\n@Component({\r\n    selector: 'set-column-widths',\r\n    templateUrl: './set-column-widths-dialog.component.html',\r\n    styleUrls: ['set-column-widths-dialog.component.scss']\r\n})\r\n\r\nexport class SetColumnWidthsDialogComponent {\r\n\r\n    columnForm: UntypedFormGroup;\r\n    get widths() {\r\n        return this.columnForm.get('widths') as UntypedFormArray;\r\n    }\r\n\r\n    constructor(public dialogRef: MatDialogRef<SetColumnWidthsDialogComponent>,\r\n                @Inject(MAT_DIALOG_DATA) public data: any, private fb: UntypedFormBuilder) {\r\n        this.createForm();\r\n    }\r\n\r\n    onCancelClick(): void {\r\n        this.dialogRef.close(null);\r\n    }\r\n\r\n    ok(): void {\r\n        const result = this.widths.value;\r\n        this.dialogRef.close(result);\r\n    }\r\n\r\n    private createForm(): void {\r\n        this.columnForm = this.fb.group({\r\n            widths: this.fb.array([])\r\n        });\r\n        for (let i = 0; i < this.data.columnWidths.length; i++) {\r\n            this.widths.push(this.fb.control(this.data.columnWidths[i]));\r\n        }\r\n    }\r\n\r\n}\r\n","<h1 mat-dialog-title>{{data.senDialogTitle}}</h1>\r\n<div mat-dialog-content [formGroup]=\"columnForm\">\r\n    <mat-label class=\"description-label\">\r\n        Zadejte šířku ve formátu číslo + jednotka bez mezery, např. 200px, 55%\r\n    </mat-label>\r\n    <div formArrayName=\"widths\">\r\n        <mat-form-field class=\"column-size-field\" *ngFor=\"let width of widths.controls; let i = index\">\r\n            <mat-label>{{i + 1}}.</mat-label>\r\n            <input matInput [formControlName]=\"i\" type=\"text\">\r\n        </mat-form-field>\r\n    </div>\r\n</div>\r\n<div mat-dialog-actions class=\"pull-right dialog-actions\">\r\n    <button mat-raised-button (click)=\"onCancelClick()\">{{data.senCancel}}</button>\r\n    <button mat-raised-button color=\"primary\" (click)=\"ok()\" cdkFocusInitial>OK</button>\r\n</div>\r\n","import {\r\n    AfterViewInit,\r\n    Attribute,\r\n    ChangeDetectorRef,\r\n    Component,\r\n    ElementRef,\r\n    EventEmitter,\r\n    forwardRef,\r\n    HostBinding,\r\n    HostListener,\r\n    Inject,\r\n    Input,\r\n    OnChanges,\r\n    OnDestroy,\r\n    OnInit,\r\n    Output,\r\n    Renderer2,\r\n    SecurityContext,\r\n    SimpleChanges,\r\n    ViewChild\r\n} from '@angular/core';\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AngularEditorConfig, angularEditorConfig} from './config';\r\nimport {AngularEditorToolbarComponent} from './angular-editor-toolbar.component';\r\nimport {AngularEditorService} from './angular-editor.service';\r\nimport {DOCUMENT} from '@angular/common';\r\nimport {DomSanitizer} from '@angular/platform-browser';\r\nimport {isDefined} from './utils';\r\nimport {LangService} from './services/lang.service';\r\nimport {Subject} from 'rxjs';\r\nimport {take, takeUntil} from 'rxjs/operators';\r\nimport {\r\n    CommandName,\r\n    CustomButtonClicked,\r\n    CustomCommandName,\r\n    DirectoryChild,\r\n    EditImageDialogData,\r\n    EditTableDialogResult,\r\n    FtpRequest, LangCode,\r\n    LinkDialogResult,\r\n    LinkTargetType,\r\n    SelectedObject,\r\n    TableDialogResult,\r\n    VideoDialogResult\r\n} from './common/common-interfaces';\r\nimport {MatDialog, MatDialogRef} from '@angular/material/dialog';\r\nimport {MessageDialogComponent} from './message-dialog.component';\r\nimport {randomId} from './common/helpers';\r\nimport {EditImageDialogComponent} from './edit-image-dialog.component';\r\nimport {EditTableDialogComponent} from './edit-table-dialog.component';\r\nimport {InsertTableDialogComponent} from './insert-table-dialog.component';\r\nimport {InsertVideoDialogComponent} from './insert-video-dialog.component';\r\nimport {SelectOption} from './ae-select/ae-select.component';\r\nimport {SetColumnWidthsDialogComponent} from './set-column-widths-dialog.component';\r\nimport {InsertLinkDialogComponent} from './insert-link-dialog.component';\r\n\r\n@Component({\r\n    selector: 'angular-editor',\r\n    templateUrl: './angular-editor.component.html',\r\n    styleUrls: ['./angular-editor.component.scss'],\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => AngularEditorComponent),\r\n            multi: true\r\n        }\r\n    ]\r\n})\r\nexport class AngularEditorComponent implements OnInit, ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy {\r\n\r\n    constructor(\r\n        private r: Renderer2,\r\n        private editorService: AngularEditorService,\r\n        @Inject(DOCUMENT) private doc: any,\r\n        private sanitizer: DomSanitizer,\r\n        private cdRef: ChangeDetectorRef,\r\n        @Attribute('tabindex') defaultTabIndex: string,\r\n        @Attribute('autofocus') private autoFocus: any,\r\n        private langService: LangService,\r\n        private dialog: MatDialog\r\n    ) {\r\n        this.configure();\r\n        const parsedTabIndex = Number(defaultTabIndex);\r\n        this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\r\n        this.langService.languageChanged\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe(res => {\r\n                this.sen = res;\r\n            });\r\n        this.editorService.ftpLinkRequired\r\n            .pipe(takeUntil(this.ngUnsubscribe))\r\n            .subscribe((res) => {\r\n                this.ftpNeeded.emit(res);\r\n            });\r\n    }\r\n\r\n    onChange: (value: string) => void;\r\n    onTouched: () => void;\r\n\r\n    modeVisual = true;\r\n    showPlaceholder = false;\r\n    disabled = false;\r\n    focused = false;\r\n    touched = false;\r\n    changed = false;\r\n    focusInstance: any;\r\n    blurInstance: any;\r\n    sen: { [p: string]: string };\r\n    selObject: SelectedObject;\r\n    editorFonts: SelectOption[] = [{label: '', value: ''}];\r\n    timerHandle: any;\r\n    private ngUnsubscribe: Subject<any> = new Subject<any>();\r\n\r\n    @Input() id = '';\r\n    @Input() config: AngularEditorConfig = angularEditorConfig;\r\n    @Input() tabIndex: number | null;\r\n    @Input() cultureId: number = 34;\r\n    @Input() ftpLink: DirectoryChild | null;\r\n    @Input() placeholder = '';\r\n\r\n    @Output() html;\r\n\r\n    @ViewChild('editor', {static: true}) textArea: ElementRef;\r\n    @ViewChild('editorWrapper', {static: true}) editorWrapper: ElementRef;\r\n    @ViewChild('editorToolbar') editorToolbar: AngularEditorToolbarComponent;\r\n\r\n    @Output() viewMode = new EventEmitter<boolean>();\r\n\r\n    /** emits `blur` event when focused out from the textarea */\r\n        // tslint:disable-next-line:no-output-native no-output-rename\r\n    @Output('blur') blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\r\n\r\n    /** emits `focus` event when focused in to the textarea */\r\n        // tslint:disable-next-line:no-output-rename no-output-native\r\n    @Output('focus') focusEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\r\n\r\n    /*\r\n    emits to trigger Image browser dialog\r\n    emits the editorId of the editor which needs it\r\n     */\r\n    @Output() ftpNeeded: EventEmitter<FtpRequest> = new EventEmitter<FtpRequest>();\r\n\r\n    @Output() customButtonClicked = new EventEmitter<CustomButtonClicked>();\r\n\r\n    @HostBinding('attr.tabindex') tabindex = -1;\r\n\r\n    private static getParentTableId(evt: MouseEvent): string {\r\n        const pathArray = evt.composedPath();\r\n        for (let i = 0; i < pathArray.length; i++) {\r\n            const el = pathArray[i];\r\n            if (el['nodeName'] === 'TABLE') {\r\n                return el['id'];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    @HostListener('focus')\r\n    onFocus() {\r\n        this.focus();\r\n    }\r\n\r\n    @HostListener('click', ['$event'])\r\n    onClick(evt: MouseEvent) {\r\n        const first: EventTarget = <EventTarget> evt.composedPath()[0];\r\n        if (first['nodeName'] === 'IMG') {\r\n            this.selObject = {\r\n                id: first['id'],\r\n                nodeName: 'IMG',\r\n                buttonTitle: this.sen['editImageDialogTitle']\r\n            };\r\n        } else if (first['nodeName'] === 'TD') {\r\n            const rowIndex = <HTMLTableRowElement> first['parentElement']['rowIndex'];\r\n            const cellIndex = <HTMLTableCellElement> first['cellIndex'];\r\n            const tableId = AngularEditorComponent.getParentTableId(evt);\r\n            this.selObject = {\r\n                id: tableId,\r\n                nodeName: 'TABLE',\r\n                buttonTitle: this.sen['editTableDialogTitle'],\r\n                rowIndex: rowIndex,\r\n                cellIndex: cellIndex\r\n            };\r\n        } else {\r\n            if (evt.composedPath().map(m => m['nodeName']).indexOf('ANGULAR-EDITOR-TOOLBAR') === -1) {\r\n                this.selObject = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.timerHandle = setInterval(() => this.editorService.intervalEmitter.emit(), 666);\r\n        this.config.toolbarPosition = this.config.toolbarPosition ? this.config.toolbarPosition : angularEditorConfig.toolbarPosition;\r\n    }\r\n\r\n    ngAfterViewInit() {\r\n        if (isDefined(this.autoFocus)) {\r\n            this.focus();\r\n        }\r\n    }\r\n\r\n    /*\r\n    * Insert image or file from Image Server\r\n     */\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        if (changes['config'] && changes['config'].currentValue) {\r\n            this.editorFonts = this.getFonts();\r\n        }\r\n        if (changes['cultureId'] && changes['cultureId'].currentValue) {\r\n            this.langService.lang = AngularEditorComponent.getLanCodeFromCultureId(this.cultureId);\r\n        }\r\n        if (changes['ftpLink'] && changes['ftpLink'].currentValue) {\r\n            const ftpLink = <DirectoryChild> changes['ftpLink'].currentValue;\r\n            if (ftpLink.editorId === this.id) {\r\n                if (/\\/files\\//.test(ftpLink.fullWebPath)) {\r\n                    /*\r\n                    file link\r\n                     */\r\n                    if (!this.editorService.linkDialogOpen) {\r\n                        const linkHtml = `<a href=\"${ftpLink.fullWebPath}\">${ftpLink.name}</a>`;\r\n                        this.editorService.restoreSelection();\r\n                        this.editorService.insertHtml(linkHtml);\r\n                    } else {\r\n                        this.editorService.ftpLinkGiven.emit(ftpLink.fullWebPath);\r\n                    }\r\n                } else {\r\n                    /*\r\n                    image link\r\n                     */\r\n                    const id = randomId(this.id);\r\n                    const qryStr: string = randomId('qry');\r\n                    const alt = ftpLink.alt || ftpLink.name;\r\n                    const title = ftpLink.title ? `title=\"${ftpLink.title}\"` : '';\r\n                    const width = ftpLink.width ? ftpLink.width : this.config.presetWidth;\r\n                    const height = ftpLink.height ? ftpLink.height : this.config.presetHeight;\r\n                    const imageType = ftpLink.crop ? `${this.config.imageType}_crop` : this.config.imageType;\r\n\r\n                    const srcOrig = `${this.config.imageServerUrl}/${imageType}/${width}/${height}/${ftpLink.partialWebPath}?q=${qryStr}`;\r\n                    let imageHtml;\r\n\r\n                    const webpPath = AngularEditorComponent.renameToWebp(ftpLink.partialWebPath);\r\n                    const srcWebp = `${this.config.imageServerUrl}/${imageType}/${width}/${height}/${webpPath}?q=${qryStr}`;\r\n                    const innerImage =  `<img id=\"${id}\" src=\"${srcOrig}\" alt=\"${alt}\" ${title}>`;\r\n                    imageHtml = `<picture id=\"PIC_${id}\"><source type=\"image/webp\" srcset=\"${srcWebp}\">${innerImage}</picture>`;\r\n\r\n                    this.editorService.restoreSelection();\r\n                    this.editorService.insertHtml(imageHtml);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private static getLanCodeFromCultureId(cultureId: number): LangCode {\r\n        switch (cultureId) {\r\n            case 34:\r\n                return 'cs';\r\n            case 50:\r\n                return 'en';\r\n            case 102:\r\n                return 'sk';\r\n            default:\r\n                return 'cs';\r\n        }\r\n    }\r\n\r\n    private static renameToWebp(imageName: string): string {\r\n        const parts = imageName.split('.');\r\n        parts[parts.length - 1] = 'webp';\r\n        return parts.join('.');\r\n    }\r\n\r\n    executeCustomButtonCommand(command: CustomCommandName) {\r\n        this.customButtonClicked.emit({commandName: command, editorService: this.editorService});\r\n    }\r\n\r\n    /**\r\n     * Executed command from editor header buttons\r\n     * @param command string from triggerCommand\r\n     */\r\n    executeCommand(command: CommandName) {\r\n        this.focus();\r\n        if (command === CommandName.toggleEditorMode) {\r\n            this.toggleEditorMode(this.modeVisual);\r\n        } else if (command !== null) {\r\n            if (command === CommandName.clear) {\r\n                this.editorService.removeSelectedElements(this.getCustomTags());\r\n                this.onContentChange(this.textArea.nativeElement);\r\n            } else if (command === CommandName.default) {\r\n                this.editorService.removeSelectedElements('h1,h2,h3,h4,h5,h6,p,pre');\r\n                this.onContentChange(this.textArea.nativeElement);\r\n            } else if (command === CommandName.insertFtp) {\r\n                const ftpRequest: FtpRequest = {\r\n                    editorId: this.id,\r\n                    presetFiles: false\r\n                };\r\n                this.ftpNeeded.emit(ftpRequest);\r\n            } else if (command === CommandName.insertTable) {\r\n                this.insertTable(this.config, this.id);\r\n            } else if (command === CommandName.insertVideo) {\r\n                this.insertVideoDialog();\r\n            } else if (command === CommandName.editObject) {\r\n                this.editObject();\r\n            } else if (command === CommandName.addRowBellow) {\r\n                this.addRow(false);\r\n            } else if (command === CommandName.addRowUp) {\r\n                this.addRow(true);\r\n            } else if (command === CommandName.addColumnRight) {\r\n                this.addColumn(false);\r\n            } else if (command === CommandName.addColumnLeft) {\r\n                this.addColumn(true);\r\n            } else if (command === CommandName.deleteTable) {\r\n                this.deleteTable();\r\n            } else if (command === CommandName.insertImageUrl) {\r\n                this.insertImageUrl();\r\n            } else if (command === CommandName.deleteImage) {\r\n                this.deleteImage();\r\n            } else if (command === CommandName.deleteColumn) {\r\n                this.deleteColumn();\r\n            } else if (command === CommandName.deleteRow) {\r\n                this.deleteRow();\r\n            } else if (command === CommandName.setColumnWidths) {\r\n                this.setColumnWidths();\r\n            } else {\r\n                this.editorService.executeCommand(command);\r\n            }\r\n            this.exec();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * focus event\r\n     */\r\n    onTextAreaFocus(event: FocusEvent): void {\r\n        if (this.focused) {\r\n            event.stopPropagation();\r\n            return;\r\n        }\r\n        this.focused = true;\r\n        this.focusEvent.emit(event);\r\n        if (!this.touched || !this.changed) {\r\n            this.editorService.executeInNextQueueIteration(() => {\r\n                this.touched = true;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @description fires when cursor leaves textarea\r\n     */\r\n    public onTextAreaMouseOut(/* event: MouseEvent */): void {\r\n        this.editorService.saveSelection();\r\n    }\r\n\r\n    /**\r\n     * blur event\r\n     */\r\n    onTextAreaBlur(event: FocusEvent) {\r\n        /**\r\n         * save selection if focussed out\r\n         */\r\n        this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);\r\n\r\n        if (typeof this.onTouched === 'function') {\r\n            this.onTouched();\r\n        }\r\n\r\n        if (event.relatedTarget !== null) {\r\n            const parent = (event.relatedTarget as HTMLElement).parentElement;\r\n            if (!parent.classList.contains('angular-editor-toolbar-set') && !parent.classList.contains('ae-picker')) {\r\n                this.blurEvent.emit(event);\r\n                this.focused = false;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *  focus the text area when the editor is focused\r\n     */\r\n    focus() {\r\n        if (this.modeVisual) {\r\n            this.textArea.nativeElement.focus();\r\n        } else {\r\n            const sourceText = this.doc.getElementById('sourceText' + this.id);\r\n            sourceText.focus();\r\n            this.focused = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Executed from the contenteditable section while the input property changes\r\n     * @param element html element from contenteditable\r\n     */\r\n    onContentChange(element: any): void {\r\n        let html: string;\r\n        if (this.modeVisual) {\r\n            html = element.innerHTML;\r\n        } else {\r\n            html = element.innerText;\r\n        }\r\n        if ((!html || html === '<br>')) {\r\n            html = '';\r\n        }\r\n        if (typeof this.onChange === 'function') {\r\n            this.onChange(this.config.sanitize || this.config.sanitize === undefined ?\r\n                this.sanitizer.sanitize(SecurityContext.HTML, html) : html);\r\n            if ((!html) !== this.showPlaceholder) {\r\n                this.togglePlaceholder(this.showPlaceholder);\r\n            }\r\n        }\r\n        this.changed = true;\r\n    }\r\n\r\n    /**\r\n     * Set the function to be called\r\n     * when the control receives a change event.\r\n     *\r\n     * @param fn a function\r\n     */\r\n    registerOnChange(fn: any): void {\r\n        this.onChange = e => (e === '<br>' ? fn('') : fn(e));\r\n    }\r\n\r\n    /**\r\n     * Set the function to be called\r\n     * when the control receives a touch event.\r\n     *\r\n     * @param fn a function\r\n     */\r\n    registerOnTouched(fn: any): void {\r\n        this.onTouched = fn;\r\n    }\r\n\r\n    /**\r\n     * Write a new value to the element.\r\n     *\r\n     * @param value value to be executed when there is a change in contenteditable\r\n     */\r\n    writeValue(value: any): void {\r\n\r\n        if ((!value || value === '<br>' || value === '') !== this.showPlaceholder) {\r\n            this.togglePlaceholder(this.showPlaceholder);\r\n        }\r\n\r\n        if (value === undefined || value === '' || value === '<br>') {\r\n            value = null;\r\n        }\r\n\r\n        this.refreshView(value);\r\n    }\r\n\r\n    /**\r\n     * refresh view/HTML of the editor\r\n     *\r\n     * @param value html string from the editor\r\n     */\r\n    refreshView(value: string): void {\r\n        const normalizedValue = value === null ? '' : value;\r\n        this.r.setProperty(this.textArea.nativeElement, 'innerHTML', normalizedValue);\r\n\r\n        return;\r\n    }\r\n\r\n    /**\r\n     * toggles placeholder based on input string\r\n     *\r\n     * @param value A HTML string from the editor\r\n     */\r\n    togglePlaceholder(value: boolean): void {\r\n        if (!value) {\r\n            this.r.addClass(this.editorWrapper.nativeElement, 'show-placeholder');\r\n            this.showPlaceholder = true;\r\n\r\n        } else {\r\n            this.r.removeClass(this.editorWrapper.nativeElement, 'show-placeholder');\r\n            this.showPlaceholder = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Implements disabled state for this element\r\n     *\r\n     * @param isDisabled Disabled flag\r\n     */\r\n    setDisabledState(isDisabled: boolean): void {\r\n        const div = this.textArea.nativeElement;\r\n        const action = isDisabled ? 'addClass' : 'removeClass';\r\n        this.r[action](div, 'disabled');\r\n        this.disabled = isDisabled;\r\n    }\r\n\r\n    /**\r\n     * toggles editor mode based on bToSource bool\r\n     *\r\n     * @param bToSource A boolean value from the editor\r\n     */\r\n    toggleEditorMode(bToSource: boolean) {\r\n        let oContent: any;\r\n        const editableElement = this.textArea.nativeElement;\r\n\r\n        if (bToSource) {\r\n            oContent = this.r.createText(editableElement.innerHTML);\r\n            this.r.setProperty(editableElement, 'innerHTML', '');\r\n            this.r.setProperty(editableElement, 'contentEditable', false);\r\n\r\n            const oPre = this.r.createElement('pre');\r\n            this.r.setStyle(oPre, 'margin', '0');\r\n            this.r.setStyle(oPre, 'outline', 'none');\r\n\r\n            const oCode = this.r.createElement('code');\r\n            this.r.setProperty(oCode, 'id', 'sourceText' + this.id);\r\n            this.r.setStyle(oCode, 'display', 'block');\r\n            this.r.setStyle(oCode, 'white-space', 'pre-wrap');\r\n            this.r.setStyle(oCode, 'word-break', 'keep-all');\r\n            this.r.setStyle(oCode, 'outline', 'none');\r\n            this.r.setStyle(oCode, 'margin', '0');\r\n            this.r.setStyle(oCode, 'background-color', '#fff5b9');\r\n            this.r.setProperty(oCode, 'contentEditable', true);\r\n            this.r.appendChild(oCode, oContent);\r\n            this.focusInstance = this.r.listen(oCode, 'focus', (event) => this.onTextAreaFocus(event));\r\n            this.blurInstance = this.r.listen(oCode, 'blur', (event) => this.onTextAreaBlur(event));\r\n            this.r.appendChild(oPre, oCode);\r\n            this.r.appendChild(editableElement, oPre);\r\n\r\n            // ToDo move to service\r\n            this.doc.execCommand('defaultParagraphSeparator', false, 'div');\r\n\r\n            this.modeVisual = false;\r\n            this.viewMode.emit(false);\r\n            oCode.focus();\r\n        } else {\r\n            if (this.doc.querySelectorAll) {\r\n                this.r.setProperty(editableElement, 'innerHTML', editableElement.innerText);\r\n            } else {\r\n                oContent = this.doc.createRange();\r\n                oContent.selectNodeContents(editableElement.firstChild);\r\n                this.r.setProperty(editableElement, 'innerHTML', oContent.toString());\r\n            }\r\n            this.r.setProperty(editableElement, 'contentEditable', true);\r\n            this.modeVisual = true;\r\n            this.viewMode.emit(true);\r\n            this.onContentChange(editableElement);\r\n            editableElement.focus();\r\n        }\r\n        this.editorToolbar.setEditorMode(!this.modeVisual);\r\n    }\r\n\r\n    /**\r\n     * toggles editor buttons when cursor moved or positioning\r\n     *\r\n     * Send a node array from the contentEditable of the editor\r\n     */\r\n    exec() {\r\n        this.editorToolbar.triggerButtons();\r\n\r\n        let userSelection;\r\n        if (this.doc.getSelection) {\r\n            userSelection = this.doc.getSelection();\r\n            /**\r\n             * here you can try to experiment with focusNode, parents, children etc - e.g. set image attributes, table stroke etc...\r\n             */\r\n            this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);\r\n        }\r\n\r\n        let a = userSelection.focusNode;\r\n        const els = [];\r\n        while (a && a.id !== 'editor') {\r\n            els.unshift(a);\r\n            a = a.parentNode;\r\n        }\r\n        this.editorToolbar.triggerBlocks(els);\r\n    }\r\n\r\n    private configure() {\r\n        this.editorService.uploadUrl = this.config.uploadUrl;\r\n        this.editorService.uploadWithCredentials = this.config.uploadWithCredentials;\r\n        if (this.config.defaultParagraphSeparator) {\r\n            this.editorService.setDefaultParagraphSeparator(this.config.defaultParagraphSeparator);\r\n        }\r\n        if (this.config.defaultFontName) {\r\n            this.editorService.setFontName(this.config.defaultFontName);\r\n        }\r\n        if (this.config.defaultFontSize) {\r\n            this.editorService.setFontSize(this.config.defaultFontSize);\r\n        }\r\n    }\r\n\r\n    getFonts() {\r\n        const fonts = this.config.fonts ? this.config.fonts : angularEditorConfig.fonts;\r\n        return fonts.map(x => {\r\n            return {label: x.name, value: x.name};\r\n        });\r\n    }\r\n\r\n    getCustomTags() {\r\n        const tags = ['span'];\r\n        this.config.customClasses.forEach(x => {\r\n            if (x.tag !== undefined) {\r\n                if (!tags.includes(x.tag)) {\r\n                    tags.push(x.tag);\r\n                }\r\n            }\r\n        });\r\n        return tags.join(',');\r\n    }\r\n\r\n    ngOnDestroy() {\r\n        clearInterval(this.timerHandle);\r\n\r\n        this.ngUnsubscribe.next();\r\n        this.ngUnsubscribe.complete();\r\n\r\n        if (this.blurInstance) {\r\n            this.blurInstance();\r\n        }\r\n        if (this.focusInstance) {\r\n            this.focusInstance();\r\n        }\r\n    }\r\n\r\n    filterStyles(html: string): string {\r\n        html = html.replace('position: fixed;', '');\r\n        return html;\r\n    }\r\n\r\n    editorPaste(): boolean {\r\n        if (!this.config.pasteEnabled) {\r\n            const dialogRef = this.dialog.open(MessageDialogComponent, {\r\n                width: '275px',\r\n                height: 'auto',\r\n                data: {\r\n                    title: this.sen['notice'],\r\n                    text: this.sen['pasteDisabled']\r\n                }\r\n            });\r\n            dialogRef.afterClosed()\r\n                .pipe(takeUntil(this.ngUnsubscribe))\r\n                .subscribe(() => {\r\n                    return false;\r\n                });\r\n        }\r\n\r\n        return this.config.pasteEnabled;\r\n    }\r\n\r\n    editObject(): void {\r\n        switch (this.selObject.nodeName) {\r\n            case 'IMG':\r\n                this.editImage();\r\n                break;\r\n            case 'TABLE':\r\n                this.editTable();\r\n                break;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * opens insert table dialog\r\n     * and inserts table on result\r\n     */\r\n    insertTable(config: AngularEditorConfig, editorId: string): void {\r\n        const dialogRef = this.dialog.open(InsertTableDialogComponent, {\r\n            width: '275px',\r\n            height: 'auto',\r\n            data: {\r\n                cancel: this.sen['cancel'],\r\n                title: this.sen['insertTable'],\r\n                numRows: this.sen['numRows'],\r\n                numCols: this.sen['numCols'],\r\n                stroke: this.sen['stroke'],\r\n                senFullWidth: this.sen['fullWidth'],\r\n                senVerticalCellAlignment: this.sen['verticalCellAlignment'],\r\n                senVAlignTop: this.sen['vAlignTop'],\r\n                senVAlignMiddle: this.sen['vAlignMiddle'],\r\n                senVAlignBottom: this.sen['vAlignBottom']\r\n            }\r\n        });\r\n\r\n        dialogRef.afterClosed()\r\n            .pipe(take(1))\r\n            .subscribe((res: TableDialogResult) => {\r\n                if (res) {\r\n                    const createRes = AngularEditorService.createTableHtml(res, config, editorId);\r\n                    const html = createRes[0];\r\n                    const tableId = createRes[1];\r\n\r\n                    this.editorService.restoreSelection();\r\n                    this.editorService.insertHtml(html);\r\n                    const tab: HTMLTableElement = <HTMLTableElement> document.getElementById(tableId);\r\n                    if (res.fullWidth) {\r\n                        this.r.setStyle(tab, 'width', '100%');\r\n                    } else {\r\n                        this.r.setStyle(tab, 'width', 'auto');\r\n                    }\r\n                    for (let i = 0; i < tab.rows.length; i++) {\r\n                        const row = tab.rows[i];\r\n                        for (let j = 0; j < row.cells.length; j++) {\r\n                            this.r.setStyle(row.cells[j], 'vertical-align', res.vAlign);\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n    }\r\n\r\n    private editImage(): void {\r\n\r\n        const imgEl: HTMLImageElement = <HTMLImageElement>document.getElementById(this.selObject.id);\r\n        const picEl: HTMLPictureElement = <HTMLPictureElement>document.getElementById(`PIC_${this.selObject.id}`);\r\n\r\n        if (!imgEl) {\r\n            return;\r\n        }\r\n\r\n        const oldSrc = imgEl.src;\r\n        const oldAlt = imgEl.alt;\r\n        const oldTitle = imgEl.title;\r\n\r\n        const m = oldSrc.match(/\\/\\d+\\/\\d+\\//);\r\n        if (m && m[0]) {\r\n            const size = m[0].split('/').filter(f => f !== '').map(m1 => parseInt(m1));\r\n            const crop = /_crop\\//.test(oldSrc);\r\n\r\n            const width = size[0];\r\n            const height = size[1];\r\n            const sourceSplit = oldSrc.split('/');\r\n            const source: HTMLSourceElement = <HTMLSourceElement> picEl.childNodes[0];\r\n            const webpSplit = source.srcset.split('/');\r\n            const imageName = sourceSplit[sourceSplit.length - 1];\r\n            const webpName = webpSplit[webpSplit.length - 1];\r\n            const orig = `${this.config.imageServerUrl}/orig/${imageName}`;\r\n\r\n            const dialogRef = this.dialog.open(EditImageDialogComponent, {\r\n                width: '475px',\r\n                height: 'auto',\r\n                data: {\r\n                    oldImageBrowser: false,\r\n                    width: width,\r\n                    height: height,\r\n                    alt: oldAlt,\r\n                    title: oldTitle,\r\n                    crop: crop,\r\n                    orig: orig,\r\n                    senDialogTitle: this.sen['editImageDialogTitle'],\r\n                    senCancel: this.sen['cancel'],\r\n                    senWidth: this.sen['width'],\r\n                    senHeight: this.sen['height'],\r\n                    senKeepRatio: this.sen['keepRatio'],\r\n                    senCrop: this.sen['crop'],\r\n                    senAlt: this.sen['alt'],\r\n                    senTitle: this.sen['title']\r\n                }\r\n            });\r\n\r\n            dialogRef.afterClosed()\r\n                .pipe(take(1))\r\n                .subscribe((res: EditImageDialogData) => {\r\n                    if (!res) {\r\n                        return;\r\n                    }\r\n\r\n                    const imageType = res.crop\r\n                        ? `${this.config.imageType}_crop`\r\n                        : this.config.imageType;\r\n\r\n                    let src = `${this.config.imageServerUrl}/${imageType}/${res.width}/${res.height}/${imageName}`;\r\n                    let webpSrc = `${this.config.imageServerUrl}/${imageType}/${res.width}/${res.height}/${webpName}`;\r\n\r\n                    const qryStr = `?q=${randomId('qry')}`;\r\n                    src = src.replace(/\\?q=.+$/, qryStr);\r\n                    webpSrc = webpSrc.replace(/\\?q=.+$/, qryStr);\r\n\r\n                    this.r.setAttribute(imgEl, 'src', src);\r\n                    this.r.setAttribute(imgEl, 'alt', res.alt);\r\n                    this.r.setAttribute(imgEl, 'title', res.title);\r\n\r\n                    this.r.setAttribute(source, 'srcset', webpSrc);\r\n\r\n                    this.onContentChange(this.textArea.nativeElement);\r\n                });\r\n        }\r\n    }\r\n\r\n    private deleteImage(): void {\r\n        try {\r\n            const i: HTMLImageElement = <HTMLImageElement> document.getElementById(this.selObject.id);\r\n            const p = document.getElementById(`PIC_${this.selObject.id}`);\r\n            i.remove();\r\n            if (p) {\r\n                p.remove();\r\n            }\r\n            this.onContentChange(this.textArea.nativeElement);\r\n        } finally {\r\n            this.selObject = null;\r\n        }\r\n    }\r\n\r\n    private openLinkDialog(target: LinkTargetType, url: string): MatDialogRef<InsertLinkDialogComponent> {\r\n        return this.dialog.open(InsertLinkDialogComponent, {\r\n            width: '405px',\r\n            height: 'auto',\r\n            data: {\r\n                editorId: this.id,\r\n                url: url,\r\n                target: target,\r\n                cancel: this.sen['cancel'],\r\n                title: this.sen['insertImageUrl'],\r\n                placeholder: this.sen['insertLinkPlaceholder'],\r\n                urlTitle: this.sen['insertLinkUrlTitle'],\r\n                openInNewWindow: this.sen['openInNewWindow'],\r\n                insertLinkValidatorRequired: this.sen['insertLinkValidatorRequired'],\r\n                insertLinkValidatorPattern: this.sen['insertLinkValidatorPattern']\r\n            }\r\n        });\r\n    }\r\n\r\n    private insertImageUrl(): void {\r\n        let url: string;\r\n        let target: LinkTargetType;\r\n        let parent: HTMLAnchorElement;\r\n        const i: HTMLPictureElement = <HTMLPictureElement> document.getElementById(`PIC_${this.selObject.id}`);\r\n        const picInner = i.outerHTML;\r\n        const workOnParent: boolean = i.parentElement.nodeName === 'A';\r\n        if (workOnParent) {\r\n            parent = i.parentElement as HTMLAnchorElement;\r\n            url = parent.href;\r\n            target = parent.target as LinkTargetType;\r\n        }\r\n        const dialogRef = this.openLinkDialog(target, url);\r\n        dialogRef.afterClosed()\r\n            .pipe(take(1))\r\n            .subscribe((res: LinkDialogResult) => {\r\n                if (res) {\r\n                    if (workOnParent) {\r\n                        parent.href = res.url;\r\n                        parent.target = res.target;\r\n                    } else {\r\n                        i.outerHTML = `<a href=\"${res.url}\" target=\"${res.target}\" rel=\"noopener\">${picInner}</a>`;\r\n                    }\r\n                    this.onContentChange(this.textArea.nativeElement);\r\n                    this.selObject = null;\r\n                }\r\n            })\r\n    }\r\n\r\n    private addRow(up: boolean): void {\r\n        const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n        const currentRow = t.rows[this.selObject.rowIndex];\r\n        const numColumns = currentRow.cells.length;\r\n        const newRow = up\r\n            ? t.insertRow(this.selObject.rowIndex)\r\n            : t.insertRow(this.selObject.rowIndex + 1);\r\n        for (let i = 0; i < numColumns; i++) {\r\n            newRow.insertCell();\r\n        }\r\n        this.onContentChange(this.textArea.nativeElement);\r\n    }\r\n\r\n    private addColumn(left: boolean): void {\r\n        const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n        const numRows = t.rows.length;\r\n\r\n        const cellIndex = left\r\n            ? this.selObject.cellIndex\r\n            : this.selObject.cellIndex + 1;\r\n\r\n        for (let i = 0; i < numRows; i++) {\r\n            t.rows[i].insertCell(cellIndex);\r\n        }\r\n\r\n        for (let i = 0; i < numRows; i++) {\r\n            const numCols = t.rows[i].cells.length;\r\n            const width = Math.round(100 / numCols);\r\n\r\n            for (let j = 0; j < numCols; j++) {\r\n                const theCell = t.rows[i].cells[j];\r\n                this.r.setStyle(theCell, 'width', `${width}%`);\r\n            }\r\n        }\r\n        this.onContentChange(this.textArea.nativeElement);\r\n    }\r\n\r\n    private deleteColumn(): void {\r\n        const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n        for (let i = 0; i < t.rows.length; i++) {\r\n            const row = t.rows[i];\r\n            row.deleteCell(this.selObject.cellIndex);\r\n        }\r\n        this.onContentChange(this.textArea.nativeElement);\r\n    }\r\n\r\n    private deleteRow(): void {\r\n        const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n        t.deleteRow(this.selObject.rowIndex);\r\n        if (t.rows.length === 0) {\r\n            this.deleteTable();\r\n        }\r\n        this.onContentChange(this.textArea.nativeElement);\r\n    }\r\n\r\n    private deleteTable(): void {\r\n        try {\r\n            const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n            t.remove();\r\n            this.onContentChange(this.textArea.nativeElement);\r\n        } finally {\r\n            this.selObject = null;\r\n        }\r\n    }\r\n\r\n    private editTable(): void {\r\n        const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n\r\n        const isBordered = /table-bordered/.test(t.className);\r\n        const isFullWidth = /100%/.test(t.style.width);\r\n        const vAlign = t.rows[0].cells[0].style.verticalAlign;\r\n\r\n        const dialogRef = this.dialog.open(EditTableDialogComponent, {\r\n            width: '275px',\r\n            height: 'auto',\r\n            data: {\r\n                senDialogTitle: this.sen['editTableDialogTitle'],\r\n                senCancel: this.sen['cancel'],\r\n                senFullWidth: this.sen['fullWidth'],\r\n                senStroke: this.sen['stroke'],\r\n                stroke: isBordered,\r\n                fullWidth: isFullWidth,\r\n                senVerticalCellAlignment: this.sen['verticalCellAlignment'],\r\n                senVAlignTop: this.sen['vAlignTop'],\r\n                senVAlignMiddle: this.sen['vAlignMiddle'],\r\n                senVAlignBottom: this.sen['vAlignBottom'],\r\n                vAlign: vAlign\r\n            }\r\n        });\r\n\r\n        dialogRef.afterClosed()\r\n            .pipe(take(1))\r\n            .subscribe((res: EditTableDialogResult) => {\r\n                if (!res) {\r\n                    return;\r\n                }\r\n\r\n                if (res.fullWidth) {\r\n                    this.r.setStyle(t, 'width', '100%');\r\n                } else {\r\n                    this.r.setStyle(t, 'width', 'auto');\r\n                }\r\n\r\n                if (res.stroke) {\r\n                    this.r.addClass(t, 'table-bordered');\r\n                } else {\r\n                    this.r.removeClass(t, 'table-bordered');\r\n                }\r\n\r\n                for (let i = 0; i < t.rows.length; i++) {\r\n                    const row = t.rows[i];\r\n                    for (let j = 0; j < row.cells.length; j++) {\r\n                        this.r.setStyle(row.cells[j], 'vertical-align', res.vAlign);\r\n                    }\r\n                }\r\n\r\n                this.onContentChange(this.textArea.nativeElement);\r\n            });\r\n    }\r\n\r\n    private setColumnWidths(): void {\r\n        const t: HTMLTableElement = <HTMLTableElement> document.getElementById(this.selObject.id);\r\n        const columns = t.rows[0].cells;\r\n        const widths: string[] = [];\r\n\r\n        for (let i = 0; i < columns.length; i++) {\r\n            const col = columns[i];\r\n            const w = col.style.width;\r\n            widths.push(w);\r\n        }\r\n\r\n        const dialogRef = this.dialog.open(SetColumnWidthsDialogComponent, {\r\n            width: '575px',\r\n            height: 'auto',\r\n            data: {\r\n                senDialogTitle: this.sen['setColumnWidths'],\r\n                senCancel: this.sen['cancel'],\r\n                columnWidths: widths\r\n            }\r\n        });\r\n\r\n        dialogRef.afterClosed()\r\n            .pipe(take(1))\r\n            .subscribe((res: string[]) => {\r\n                if (res) {\r\n                    for (let i = 0; i < t.rows.length; i++) {\r\n                        for (let j = 0; j < t.rows[i].cells.length; j++) {\r\n                            t.rows[i].cells[j].style.width = res[j];\r\n                        }\r\n                    }\r\n                }\r\n                this.onContentChange(this.textArea.nativeElement);\r\n            });\r\n    }\r\n\r\n    insertVideoDialog(): void {\r\n        const dialogRef = this.dialog.open(InsertVideoDialogComponent, {\r\n            width: '555px',\r\n            height: 'auto',\r\n            data: {\r\n                senDialogTitle: this.sen['insertVideoDialogTitle'],\r\n                insertVideoValidatorRequired: this.sen['insertVideoValidatorRequired'],\r\n                insertVideoValidatorPattern: this.sen['insertVideoValidatorPattern'],\r\n                urlLabel: this.sen['insertVideoUrlLabel'],\r\n                origSizeLabel: this.sen['insertVideoUseOrigSize'],\r\n                manualSizeLabel: this.sen['insertVideoUseManualSize'],\r\n                senCancel: this.sen['cancel'],\r\n                apiUrlPrefix: this.config.extensionsApiUrl\r\n            }\r\n        });\r\n\r\n        dialogRef.afterClosed()\r\n            .pipe(take(1))\r\n            .subscribe((res: VideoDialogResult) => {\r\n                if (res && res.videoHtml) {\r\n                    this.editorService.restoreSelection();\r\n                    this.editorService.insertHtml(res.videoHtml);\r\n\r\n                    this.onContentChange(this.textArea.nativeElement);\r\n                }\r\n            });\r\n    }\r\n\r\n\r\n}\r\n","<div class=\"angular-editor\" #angularEditor [style.width]=\"config.width\"\r\n     [style.minWidth]=\"config.minWidth\">\r\n  <angular-editor-toolbar *ngIf=\"config.toolbarPosition === 'top'\" #editorToolbar\r\n                          [id]=\"id\"\r\n                          [uploadUrl]=\"config.uploadUrl\"\r\n                          [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\r\n                          [fonts]=\"editorFonts\"\r\n                          [customClasses]=\"config.customClasses\"\r\n                          [defaultFontName]=\"config.defaultFontName\"\r\n                          [defaultFontSize]=\"config.defaultFontSize\"\r\n                          [hiddenButtons]=\"config.toolbarHiddenButtons\"\r\n                          [selObject]=\"selObject\"\r\n                          [customColorPalette]=\"config.customColorPalette\"\r\n                          (customButtonClicked)=\"executeCustomButtonCommand($event)\"\r\n                          (execute)=\"executeCommand($event)\"\r\n                            [customButtons]=\"config.customButtons\"\r\n  ></angular-editor-toolbar>\r\n\r\n  <div class=\"angular-editor-wrapper\" #editorWrapper>\r\n    <div #editor class=\"angular-editor-textarea\"\r\n         [attr.contenteditable]=\"config.editable\"\r\n         [attr.tabindex]=\"disabled ? -1 : tabIndex\"\r\n         [attr.translate]=\"config.translate\"\r\n         [attr.spellcheck]=\"config.spellcheck\"\r\n         [style.height]=\"config.height\"\r\n         [style.minHeight]=\"config.minHeight\"\r\n         [style.maxHeight]=\"config.maxHeight\"\r\n         [style.outline]=\"config.outline === false ? 'none': undefined\"\r\n         (input)=\"onContentChange($event.target)\"\r\n         (focus)=\"onTextAreaFocus($event)\"\r\n         (blur)=\"onTextAreaBlur($event)\"\r\n         (click)=\"exec()\"\r\n         (keyup)=\"exec()\"\r\n         (mouseout)=\"onTextAreaMouseOut()\"\r\n         (paste)=\"editorPaste()\"\r\n    >\r\n    </div>\r\n    <span class=\"angular-editor-placeholder\">{{ placeholder || sen['placeholder'] }}</span>\r\n  </div>\r\n  <angular-editor-toolbar *ngIf=\"config.toolbarPosition === 'bottom'\" #editorToolbar\r\n                          [id]=\"id\"\r\n                          [uploadUrl]=\"config.uploadUrl\"\r\n                          [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\r\n                          [fonts]=\"editorFonts\"\r\n                          [customClasses]=\"config.customClasses\"\r\n                          [defaultFontName]=\"config.defaultFontName\"\r\n                          [defaultFontSize]=\"config.defaultFontSize\"\r\n                          [hiddenButtons]=\"config.toolbarHiddenButtons\"\r\n                          [selObject]=\"selObject\"\r\n                          [customColorPalette]=\"config.customColorPalette\"\r\n                          (execute)=\"executeCommand($event)\"></angular-editor-toolbar>\r\n</div>\r\n","import {NgModule} from '@angular/core';\r\nimport {AngularEditorComponent} from './angular-editor.component';\r\nimport {AngularEditorToolbarComponent} from './angular-editor-toolbar.component';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {CommonModule} from '@angular/common';\r\nimport {AeSelectComponent} from './ae-select/ae-select.component';\r\nimport {InsertTableDialogComponent} from './insert-table-dialog.component';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport {MessageDialogComponent} from './message-dialog.component';\r\nimport {InsertLinkDialogComponent} from './insert-link-dialog.component';\r\nimport {EditImageDialogComponent} from './edit-image-dialog.component';\r\nimport {EditTableDialogComponent} from './edit-table-dialog.component';\r\nimport {InsertColorDialogComponent} from './insert-color-dialog.component';\r\nimport {InsertVideoDialogComponent} from './insert-video-dialog.component';\r\nimport {ColorPickerModule} from 'ngx-color-picker';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {SetColumnWidthsDialogComponent} from './set-column-widths-dialog.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        ReactiveFormsModule,\r\n        MatFormFieldModule,\r\n        MatDialogModule,\r\n        MatInputModule,\r\n        MatButtonModule,\r\n        MatSlideToggleModule,\r\n        MatCheckboxModule,\r\n        MatProgressSpinnerModule,\r\n        MatRadioModule,\r\n        ColorPickerModule,\r\n        MatSelectModule,\r\n        MatIconModule\r\n    ],\r\n    declarations: [\r\n        AngularEditorComponent,\r\n        AngularEditorToolbarComponent,\r\n        AeSelectComponent,\r\n        InsertTableDialogComponent,\r\n        InsertLinkDialogComponent,\r\n        InsertColorDialogComponent,\r\n        InsertVideoDialogComponent,\r\n        MessageDialogComponent,\r\n        EditImageDialogComponent,\r\n        EditTableDialogComponent,\r\n        SetColumnWidthsDialogComponent\r\n    ],\r\n    exports: [\r\n        AngularEditorComponent,\r\n        AngularEditorToolbarComponent,\r\n        InsertTableDialogComponent,\r\n        InsertColorDialogComponent,\r\n        InsertVideoDialogComponent,\r\n        InsertLinkDialogComponent,\r\n        MessageDialogComponent,\r\n        EditImageDialogComponent,\r\n        EditTableDialogComponent,\r\n        SetColumnWidthsDialogComponent\r\n    ]\r\n})\r\nexport class AngularEditorModule {\r\n}\r\n","/*\r\n * Public API Surface of angular-editor\r\n */\r\n\r\nexport * from './lib/angular-editor.service';\r\nexport * from './lib/angular-editor.component';\r\nexport * from './lib/angular-editor-toolbar.component';\r\nexport * from './lib/angular-editor.module';\r\nexport { AngularEditorConfig, CustomClass } from './lib/config';\r\nexport * from './lib/edit-table-dialog.component';\r\nexport * from './lib/insert-color-dialog.component';\r\nexport * from './lib/insert-video-dialog.component';\r\nexport * from './lib/insert-link-dialog.component';\r\nexport * from './lib/message-dialog.component';\r\nexport * from './lib/edit-image-dialog.component';\r\nexport * from './lib/edit-table-dialog.component';\r\nexport * from './lib/insert-table-dialog.component';\r\nexport * from './lib/set-column-widths-dialog.component';\r\nexport * from './lib/common/common-interfaces';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3.LangService","i3.AngularEditorService","i5","i1","i6","i7","i8","i3","i6.AeSelectComponent","i4","i9","i1.AngularEditorService","i6.AngularEditorToolbarComponent"],"mappings":"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"}