@eugenemahota/angular-editor 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eugenemahota-angular-editor.mjs","sources":["../../../projects/angular-editor/src/lib/angular-editor.service.ts","../../../projects/angular-editor/src/lib/config.ts","../../../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/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/eugenemahota-angular-editor.ts"],"sourcesContent":["import {Inject, Injectable} from '@angular/core';\nimport {HttpClient, HttpEvent} from '@angular/common/http';\nimport {Observable} from 'rxjs';\nimport {DOCUMENT} from '@angular/common';\nimport {CustomClass} from './config';\n\nexport interface UploadResponse {\n imageUrl: string;\n}\n\n@Injectable()\nexport class AngularEditorService {\n\n savedSelection: Range | null;\n selectedText: string;\n uploadUrl: string;\n uploadWithCredentials: boolean;\n\n constructor(\n private http: HttpClient,\n @Inject(DOCUMENT) private doc: any\n ) { }\n\n /**\n * Executed command from editor header buttons exclude toggleEditorMode\n * @param command string from triggerCommand\n */\n executeCommand(command: string) {\n const commands = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre'];\n if (commands.includes(command)) {\n this.doc.execCommand('formatBlock', false, command);\n return;\n }\n this.doc.execCommand(command, false, null);\n }\n\n /**\n * Create URL link\n * @param url string from UI prompt\n */\n createLink(url: string) {\n if (!url.includes('http')) {\n this.doc.execCommand('createlink', false, url);\n } else {\n const newUrl = '<a href=\"' + url + '\" target=\"_blank\">' + this.selectedText + '</a>';\n this.insertHtml(newUrl);\n }\n }\n\n /**\n * insert color either font or background\n *\n * @param color color to be inserted\n * @param where where the color has to be inserted either text/background\n */\n insertColor(color: string, where: string): void {\n const restored = this.restoreSelection();\n if (restored) {\n if (where === 'textColor') {\n this.doc.execCommand('foreColor', false, color);\n } else {\n this.doc.execCommand('hiliteColor', false, color);\n }\n }\n }\n\n /**\n * Set font name\n * @param fontName string\n */\n setFontName(fontName: string) {\n this.doc.execCommand('fontName', false, fontName);\n }\n\n /**\n * Set font size\n * @param fontSize string\n */\n setFontSize(fontSize: string) {\n this.doc.execCommand('fontSize', false, fontSize);\n }\n\n /**\n * Create raw HTML\n * @param html HTML string\n */\n insertHtml(html: string): void {\n\n const isHTMLInserted = this.doc.execCommand('insertHTML', false, html);\n\n if (!isHTMLInserted) {\n throw new Error('Unable to perform the operation');\n }\n }\n\n /**\n * save selection when the editor is focussed out\n */\n public saveSelection = (): void => {\n if (this.doc.getSelection) {\n const sel = this.doc.getSelection();\n if (sel.getRangeAt && sel.rangeCount) {\n this.savedSelection = sel.getRangeAt(0);\n this.selectedText = sel.toString();\n }\n } else if (this.doc.getSelection && this.doc.createRange) {\n this.savedSelection = document.createRange();\n } else {\n this.savedSelection = null;\n }\n }\n\n /**\n * restore selection when the editor is focused in\n *\n * saved selection when the editor is focused out\n */\n restoreSelection(): boolean {\n if (this.savedSelection) {\n if (this.doc.getSelection) {\n const sel = this.doc.getSelection();\n sel.removeAllRanges();\n sel.addRange(this.savedSelection);\n return true;\n } else if (this.doc.getSelection /*&& this.savedSelection.select*/) {\n // this.savedSelection.select();\n return true;\n }\n } else {\n return false;\n }\n }\n\n /**\n * setTimeout used for execute 'saveSelection' method in next event loop iteration\n */\n public executeInNextQueueIteration(callbackFn: (...args: any[]) => any, timeout = 1e2): void {\n setTimeout(callbackFn, timeout);\n }\n\n /** check any selection is made or not */\n private checkSelection(): any {\n\n const selectedText = this.savedSelection.toString();\n\n if (selectedText.length === 0) {\n throw new Error('No Selection Made');\n }\n return true;\n }\n\n /**\n * Upload file to uploadUrl\n * @param file The file\n */\n uploadImage(file: File): Observable<HttpEvent<UploadResponse>> {\n\n const uploadData: FormData = new FormData();\n\n uploadData.append('file', file, file.name);\n\n return this.http.post<UploadResponse>(this.uploadUrl, uploadData, {\n reportProgress: true,\n observe: 'events',\n withCredentials: this.uploadWithCredentials,\n });\n }\n\n /**\n * Insert image with Url\n * @param imageUrl The imageUrl.\n */\n insertImage(imageUrl: string) {\n this.doc.execCommand('insertImage', false, imageUrl);\n }\n\n setDefaultParagraphSeparator(separator: string) {\n this.doc.execCommand('defaultParagraphSeparator', false, separator);\n }\n\n createCustomClass(customClass: CustomClass) {\n let newTag = this.selectedText;\n if (customClass) {\n const tagName = customClass.tag ? customClass.tag : 'span';\n newTag = '<' + tagName + ' class=\"' + customClass.class + '\">' + this.selectedText + '</' + tagName + '>';\n }\n this.insertHtml(newTag);\n }\n\n insertVideo(videoUrl: string) {\n if (videoUrl.match('www.youtube.com')) {\n this.insertYouTubeVideoTag(videoUrl);\n }\n if (videoUrl.match('vimeo.com')) {\n this.insertVimeoVideoTag(videoUrl);\n }\n }\n\n private insertYouTubeVideoTag(videoUrl: string): void {\n const id = videoUrl.split('v=')[1];\n const imageUrl = `https://img.youtube.com/vi/${id}/0.jpg`;\n const thumbnail = `\n <div style='position: relative'>\n <a href='${videoUrl}' target='_blank'>\n <img src=\"${imageUrl}\" alt=\"click to watch\"/>\n <img style='position: absolute; left:200px; top:140px'\n src=\"https://img.icons8.com/color/96/000000/youtube-play.png\"/>\n </a>\n </div>`;\n this.insertHtml(thumbnail);\n }\n\n private insertVimeoVideoTag(videoUrl: string): void {\n const sub = this.http.get<any>(`https://vimeo.com/api/oembed.json?url=${videoUrl}`).subscribe(data => {\n const imageUrl = data.thumbnail_url_with_play_button;\n const thumbnail = `<div>\n <a href='${videoUrl}' target='_blank'>\n <img src=\"${imageUrl}\" alt=\"${data.title}\"/>\n </a>\n </div>`;\n this.insertHtml(thumbnail);\n sub.unsubscribe();\n });\n }\n\n nextNode(node) {\n if (node.hasChildNodes()) {\n return node.firstChild;\n } else {\n while (node && !node.nextSibling) {\n node = node.parentNode;\n }\n if (!node) {\n return null;\n }\n return node.nextSibling;\n }\n }\n\n getRangeSelectedNodes(range, includePartiallySelectedContainers) {\n let node = range.startContainer;\n const endNode = range.endContainer;\n let rangeNodes = [];\n\n // Special case for a range that is contained within a single node\n if (node === endNode) {\n rangeNodes = [node];\n } else {\n // Iterate nodes until we hit the end container\n while (node && node !== endNode) {\n rangeNodes.push( node = this.nextNode(node) );\n }\n\n // Add partially selected nodes at the start of the range\n node = range.startContainer;\n while (node && node !== range.commonAncestorContainer) {\n rangeNodes.unshift(node);\n node = node.parentNode;\n }\n }\n\n // Add ancestors of the range container, if required\n if (includePartiallySelectedContainers) {\n node = range.commonAncestorContainer;\n while (node) {\n rangeNodes.push(node);\n node = node.parentNode;\n }\n }\n\n return rangeNodes;\n }\n\n getSelectedNodes() {\n const nodes = [];\n if (this.doc.getSelection) {\n const sel = this.doc.getSelection();\n for (let i = 0, len = sel.rangeCount; i < len; ++i) {\n nodes.push.apply(nodes, this.getRangeSelectedNodes(sel.getRangeAt(i), true));\n }\n }\n return nodes;\n }\n\n replaceWithOwnChildren(el) {\n const parent = el.parentNode;\n while (el.hasChildNodes()) {\n parent.insertBefore(el.firstChild, el);\n }\n parent.removeChild(el);\n }\n\n removeSelectedElements(tagNames) {\n const tagNamesArray = tagNames.toLowerCase().split(',');\n this.getSelectedNodes().forEach((node) => {\n if (node.nodeType === 1 &&\n tagNamesArray.indexOf(node.tagName.toLowerCase()) > -1) {\n // Remove the node and replace it with its children\n this.replaceWithOwnChildren(node);\n }\n });\n }\n}\n","import { UploadResponse } from './angular-editor.service';\nimport { HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nexport interface CustomClass {\n name: string;\n class: string;\n tag?: string;\n}\n\nexport interface Font {\n name: string;\n class: string;\n}\n\nexport interface AngularEditorConfig {\n editable?: boolean;\n spellcheck?: boolean;\n height?: 'auto' | string;\n minHeight?: '0' | string;\n maxHeight?: 'auto' | string;\n width?: 'auto' | string;\n minWidth?: '0' | string;\n translate?: 'yes' | 'now' | string;\n enableToolbar?: boolean;\n showToolbar?: boolean;\n placeholder?: string;\n defaultParagraphSeparator?: string;\n defaultFontName?: string;\n defaultFontSize?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | string;\n uploadUrl?: string;\n upload?: (file: File) => Observable<HttpEvent<UploadResponse>>;\n uploadWithCredentials?: boolean;\n fonts?: Font[];\n customClasses?: CustomClass[];\n sanitize?: boolean;\n toolbarPosition?: 'top' | 'bottom';\n outline?: boolean;\n toolbarHiddenButtons?: string[][];\n rawPaste?: boolean;\n}\n\nexport const angularEditorConfig: AngularEditorConfig = {\n editable: true,\n spellcheck: true,\n height: 'auto',\n minHeight: '0',\n maxHeight: 'auto',\n width: 'auto',\n minWidth: '0',\n translate: 'yes',\n enableToolbar: true,\n showToolbar: true,\n placeholder: 'Enter text here...',\n defaultParagraphSeparator: '',\n defaultFontName: '',\n defaultFontSize: '',\n fonts: [\n {class: 'arial', name: 'Arial'},\n {class: 'times-new-roman', name: 'Times New Roman'},\n {class: 'calibri', name: 'Calibri'},\n {class: 'comic-sans-ms', name: 'Comic Sans MS'}\n ],\n uploadUrl: 'v1/image',\n uploadWithCredentials: false,\n sanitize: true,\n toolbarPosition: 'top',\n outline: true,\n /*toolbarHiddenButtons: [\n ['bold', 'italic', 'underline', 'strikeThrough', 'superscript', 'subscript'],\n ['heading', 'fontName', 'fontSize', 'color'],\n ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent'],\n ['cut', 'copy', 'delete', 'removeFormat', 'undo', 'redo'],\n ['paragraph', 'blockquote', 'removeBlockquote', 'horizontalLine', 'orderedList', 'unorderedList'],\n ['link', 'unlink', 'image', 'video']\n ]*/\n};\n","export function isDefined(value: any) {\n return value !== undefined && value !== null;\n}\n","import {\n Attribute,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef, HostBinding,\n HostListener,\n Input,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {isDefined} from '../utils';\n\nexport interface SelectOption {\n label: string;\n value: string;\n}\n\n@Component({\n selector: 'ae-select',\n templateUrl: './ae-select.component.html',\n styleUrls: ['./ae-select.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AeSelectComponent),\n multi: true,\n }\n ]\n})\nexport class AeSelectComponent implements OnInit, ControlValueAccessor {\n @Input() options: SelectOption[] = [];\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('hidden') isHidden: boolean;\n\n selectedOption: SelectOption;\n disabled = false;\n optionId = 0;\n\n get label(): string {\n return this.selectedOption && this.selectedOption.hasOwnProperty('label') ? this.selectedOption.label : 'Select';\n }\n\n opened = false;\n\n get value(): string {\n return this.selectedOption.value;\n }\n\n @HostBinding('style.display') hidden = 'inline-block';\n\n // eslint-disable-next-line @angular-eslint/no-output-native, @angular-eslint/no-output-rename\n @Output('change') changeEvent = new EventEmitter();\n\n @ViewChild('labelButton', {static: true}) labelButton: ElementRef;\n\n constructor(private elRef: ElementRef,\n private r: Renderer2,\n ) {}\n\n ngOnInit() {\n this.selectedOption = this.options[0];\n if (isDefined(this.isHidden) && this.isHidden) {\n this.hide();\n }\n }\n\n hide() {\n this.hidden = 'none';\n }\n\n optionSelect(option: SelectOption, event: MouseEvent) {\n event.stopPropagation();\n this.setValue(option.value);\n this.onChange(this.selectedOption.value);\n this.changeEvent.emit(this.selectedOption.value);\n this.onTouched();\n this.opened = false;\n }\n\n toggleOpen(event: MouseEvent) {\n // event.stopPropagation();\n if (this.disabled) {\n return;\n }\n this.opened = !this.opened;\n }\n\n @HostListener('document:click', ['$event'])\n onClick($event: MouseEvent) {\n if (!this.elRef.nativeElement.contains($event.target)) {\n this.close();\n }\n }\n\n close() {\n this.opened = false;\n }\n\n get isOpen(): boolean {\n return this.opened;\n }\n\n writeValue(value) {\n if (!value || typeof value !== 'string') {\n return;\n }\n this.setValue(value);\n }\n\n setValue(value) {\n let index = 0;\n const selectedEl = this.options.find((el, i) => {\n index = i;\n return el.value === value;\n });\n if (selectedEl) {\n this.selectedOption = selectedEl;\n this.optionId = index;\n }\n }\n\n onChange: any = () => {\n }\n onTouched: any = () => {\n }\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.labelButton.nativeElement.disabled = isDisabled;\n const div = this.labelButton.nativeElement;\n const action = isDisabled ? 'addClass' : 'removeClass';\n this.r[action](div, 'disabled');\n this.disabled = isDisabled;\n }\n\n @HostListener('keydown', ['$event'])\n handleKeyDown($event: KeyboardEvent) {\n if (!this.opened) {\n return;\n }\n // console.log($event.key);\n // if (KeyCode[$event.key]) {\n switch ($event.key) {\n case 'ArrowDown':\n this._handleArrowDown($event);\n break;\n case 'ArrowUp':\n this._handleArrowUp($event);\n break;\n case 'Space':\n this._handleSpace($event);\n break;\n case 'Enter':\n this._handleEnter($event);\n break;\n case 'Tab':\n this._handleTab($event);\n break;\n case 'Escape':\n this.close();\n $event.preventDefault();\n break;\n case 'Backspace':\n this._handleBackspace();\n break;\n }\n // } else if ($event.key && $event.key.length === 1) {\n // this._keyPress$.next($event.key.toLocaleLowerCase());\n // }\n }\n\n _handleArrowDown($event) {\n if (this.optionId < this.options.length - 1) {\n this.optionId++;\n }\n }\n\n _handleArrowUp($event) {\n if (this.optionId >= 1) {\n this.optionId--;\n }\n }\n\n _handleSpace($event) {\n\n }\n\n _handleEnter($event) {\n this.optionSelect(this.options[this.optionId], $event);\n }\n\n _handleTab($event) {\n\n }\n\n _handleBackspace() {\n\n }\n}\n","<span class=\"ae-font ae-picker\" [ngClass]=\"{'ae-expanded':isOpen}\">\n <button [tabIndex]=\"-1\" #labelButton tabindex=\"0\" type=\"button\" role=\"button\" class=\"ae-picker-label\" (click)=\"toggleOpen($event);\">{{label}}\n <svg viewBox=\"0 0 18 18\">\n <!-- <use x=\"0\" y=\"0\" xlink:href=\"../assets/icons.svg#hom\"></use>-->\n <polygon class=\"ae-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\n <polygon class=\"ae-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\n </svg>\n </button>\n <span class=\"ae-picker-options\">\n <button tabindex=\"-1\" type=\"button\" role=\"button\" class=\"ae-picker-item\"\n *ngFor=\"let item of options; let i = index\"\n [ngClass]=\"{'selected': item.value === value, 'focused': i === optionId}\"\n (click)=\"optionSelect(item, $event)\">\n {{item.label}}\n </button>\n <span class=\"dropdown-item\" *ngIf=\"!options.length\">No items for select</span>\n </span>\n</span>\n","import {Component, ElementRef, EventEmitter, Inject, Input, Output, Renderer2, ViewChild} from '@angular/core';\nimport {AngularEditorService, UploadResponse} from './angular-editor.service';\nimport {HttpResponse, HttpEvent} from '@angular/common/http';\nimport {DOCUMENT} from '@angular/common';\nimport { CustomClass, Font} from './config';\nimport {SelectOption} from './ae-select/ae-select.component';\nimport { Observable } from 'rxjs';\n\n@Component({\n selector: 'angular-editor-toolbar',\n templateUrl: './angular-editor-toolbar.component.html',\n styleUrls: ['./angular-editor-toolbar.component.scss'],\n})\n\nexport class AngularEditorToolbarComponent {\n htmlMode = false;\n linkSelected = false;\n block = 'default';\n fontName = 'Times New Roman';\n fontSize = '3';\n foreColour;\n backColor;\n\n headings: SelectOption[] = [\n {\n label: 'Heading 1',\n value: 'h1',\n },\n {\n label: 'Heading 2',\n value: 'h2',\n },\n {\n label: 'Heading 3',\n value: 'h3',\n },\n {\n label: 'Heading 4',\n value: 'h4',\n },\n {\n label: 'Heading 5',\n value: 'h5',\n },\n {\n label: 'Heading 6',\n value: 'h6',\n },\n {\n label: 'Heading 7',\n value: 'h7',\n },\n {\n label: 'Paragraph',\n value: 'p',\n },\n {\n label: 'Predefined',\n value: 'pre'\n },\n {\n label: 'Standard',\n value: 'div'\n },\n {\n label: 'default',\n value: 'default'\n }\n ];\n\n fontSizes: SelectOption[] = [\n {\n label: '1',\n value: '1',\n },\n {\n label: '2',\n value: '2',\n },\n {\n label: '3',\n value: '3',\n },\n {\n label: '4',\n value: '4',\n },\n {\n label: '5',\n value: '5',\n },\n {\n label: '6',\n value: '6',\n },\n {\n label: '7',\n value: '7',\n }\n ];\n\n customClassId = '-1';\n // eslint-disable-next-line @typescript-eslint/naming-convention, no-underscore-dangle, id-blacklist, id-match\n _customClasses: CustomClass[];\n customClassList: SelectOption[] = [{label: '', value: ''}];\n // uploadUrl: string;\n\n tagMap = {\n BLOCKQUOTE: 'indent',\n A: 'link'\n };\n\n select = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'PRE', 'DIV'];\n\n buttons = ['bold', 'italic', 'underline', 'strikeThrough', 'subscript', 'superscript', 'justifyLeft', 'justifyCenter',\n 'justifyRight', 'justifyFull', 'indent', 'outdent', 'insertUnorderedList', 'insertOrderedList', 'link'];\n\n @Input() id: string;\n @Input() uploadUrl: string;\n @Input() upload: (file: File) => Observable<HttpEvent<UploadResponse>>;\n @Input() showToolbar: boolean;\n\n _fonts: Font[];\n fontsList: SelectOption[] = [{ label: '', value: '' }];\n @Input()\n set fonts(fonts: Font[]) { \n if (fonts) {\n this._fonts = fonts;\n this.fontsList = this._fonts.map((x, i) => ({ label: x.name, value: x.name }));\n }\n }\n\n @Input()\n set customClasses(classes: CustomClass[]) {\n if (classes) {\n this._customClasses = classes;\n this.customClassList = this._customClasses.map((x, i) => ({label: x.name, value: i.toString()}));\n this.customClassList.unshift({label: 'Clear Class', value: '-1'});\n }\n }\n\n @Input()\n set defaultFontName(value: string) {\n if (value) {\n this.fontName = value;\n }\n }\n\n @Input()\n set defaultFontSize(value: string) {\n if (value) {\n this.fontSize = value;\n }\n }\n\n @Input() hiddenButtons: string[][];\n\n @Output() execute: EventEmitter<string> = new EventEmitter<string>();\n\n @ViewChild('fileInput', {static: true}) myInputFile: ElementRef;\n\n public get isLinkButtonDisabled(): boolean {\n return this.htmlMode || !Boolean(this.editorService.selectedText);\n }\n\n constructor(\n private r: Renderer2,\n private editorService: AngularEditorService,\n private er: ElementRef,\n @Inject(DOCUMENT) private doc: any\n ) {\n }\n\n /**\n * Trigger command from editor header buttons\n * @param command string from toolbar buttons\n */\n triggerCommand(command: string) {\n this.execute.emit(command);\n }\n\n /**\n * highlight editor buttons when cursor moved or positioning\n */\n triggerButtons() {\n if (!this.showToolbar) {\n return;\n }\n this.buttons.forEach(e => {\n const result = this.doc.queryCommandState(e);\n const elementById = this.doc.getElementById(e + '-' + this.id);\n if (result) {\n this.r.addClass(elementById, 'active');\n } else {\n this.r.removeClass(elementById, 'active');\n }\n });\n }\n\n /**\n * trigger highlight editor buttons when cursor moved or positioning in block\n */\n triggerBlocks(nodes: Node[]) {\n if (!this.showToolbar) {\n return;\n }\n this.linkSelected = nodes.findIndex(x => x.nodeName === 'A') > -1;\n let found = false;\n this.select.forEach(y => {\n const node = nodes.find(x => x.nodeName === y);\n if (node !== undefined && y === node.nodeName) {\n if (found === false) {\n this.block = node.nodeName.toLowerCase();\n found = true;\n }\n } else if (found === false) {\n this.block = 'default';\n }\n });\n\n found = false;\n if (this._customClasses) {\n this._customClasses.forEach((y, index) => {\n const node = nodes.find(x => {\n if (x instanceof Element) {\n return x.className === y.class;\n }\n });\n if (node !== undefined) {\n if (found === false) {\n this.customClassId = index.toString();\n found = true;\n }\n } else if (found === false) {\n this.customClassId = '-1';\n }\n });\n }\n\n Object.keys(this.tagMap).map(e => {\n const elementById = this.doc.getElementById(this.tagMap[e] + '-' + this.id);\n const node = nodes.find(x => x.nodeName === e);\n if (node !== undefined && e === node.nodeName) {\n this.r.addClass(elementById, 'active');\n } else {\n this.r.removeClass(elementById, 'active');\n }\n });\n\n this.foreColour = this.doc.queryCommandValue('ForeColor');\n this.fontSize = this.doc.queryCommandValue('FontSize');\n this.fontName = this.doc.queryCommandValue('FontName').replace(/\"/g, '');\n this.backColor = this.doc.queryCommandValue('backColor');\n }\n\n /**\n * insert URL link\n */\n insertUrl() {\n let url = 'https:\\/\\/';\n const selection = this.editorService.savedSelection;\n if (selection && selection.commonAncestorContainer.parentElement.nodeName === 'A') {\n const parent = selection.commonAncestorContainer.parentElement as HTMLAnchorElement;\n if (parent.href !== '') {\n url = parent.href;\n }\n }\n url = prompt('Insert URL link', url);\n if (url && url !== '' && url !== 'https://') {\n this.editorService.createLink(url);\n }\n }\n\n /**\n * insert Video link\n */\n insertVideo() {\n this.execute.emit('');\n const url = prompt('Insert Video link', `https://`);\n if (url && url !== '' && url !== `https://`) {\n this.editorService.insertVideo(url);\n }\n }\n\n /** insert color */\n insertColor(color: string, where: string) {\n this.editorService.insertColor(color, where);\n this.execute.emit('');\n }\n\n /**\n * set font Name/family\n * @param foreColor string\n */\n setFontName(foreColor: string): void {\n this.editorService.setFontName(foreColor);\n this.execute.emit('');\n }\n\n /**\n * set font Size\n * @param fontSize string\n */\n setFontSize(fontSize: string): void {\n this.editorService.setFontSize(fontSize);\n this.execute.emit('');\n }\n\n /**\n * toggle editor mode (WYSIWYG or SOURCE)\n * @param m boolean\n */\n setEditorMode(m: boolean) {\n const toggleEditorModeButton = this.doc.getElementById('toggleEditorMode' + '-' + this.id);\n if (m) {\n this.r.addClass(toggleEditorModeButton, 'active');\n } else {\n this.r.removeClass(toggleEditorModeButton, 'active');\n }\n this.htmlMode = m;\n }\n\n /**\n * Upload image when file is selected.\n */\n onFileChanged(event) {\n const file = event.target.files[0];\n if (file.type.includes('image/')) {\n if (this.upload) {\n this.upload(file).subscribe((response: HttpResponse<UploadResponse>) => this.watchUploadImage(response, event));\n } else if (this.uploadUrl) {\n this.editorService.uploadImage(file).subscribe((response: HttpResponse<UploadResponse>) => this.watchUploadImage(response, event));\n } else {\n const reader = new FileReader();\n reader.onload = (e: ProgressEvent) => {\n const fr = e.currentTarget as FileReader;\n this.editorService.insertImage(fr.result.toString());\n };\n reader.readAsDataURL(file);\n }\n }\n }\n\n watchUploadImage(response: HttpResponse<{imageUrl: string}>, event) {\n const { imageUrl } = response.body;\n this.editorService.insertImage(imageUrl);\n event.srcElement.value = null;\n }\n\n /**\n * Set custom class\n */\n setCustomClass(classId: string) {\n if (classId === '-1') {\n this.execute.emit('clear');\n } else {\n this.editorService.createCustomClass(this._customClasses[+classId]);\n }\n }\n\n isButtonHidden(name: string): boolean {\n if (!name) {\n return false;\n }\n if (!(this.hiddenButtons instanceof Array)) {\n return false;\n }\n let result: any;\n for (const arr of this.hiddenButtons) {\n if (arr instanceof Array) {\n result = arr.find(item => item === name);\n }\n if (result) {\n break;\n }\n }\n return result !== undefined;\n }\n\n focus() {\n this.execute.emit('focus');\n console.log('focused');\n }\n}\n","<div class=\"angular-editor-toolbar\" *ngIf=\"showToolbar\">\n <div class=\"angular-editor-toolbar-set\">\n <button type=\"button\" title=\"Undo\" class=\"angular-editor-button\" (click)=\"triggerCommand('undo')\"\n [hidden]=\"isButtonHidden('undo')\" tabindex=\"-1\"><i\n class='fa fa-undo'></i></button>\n <button type=\"button\" title=\"Redo\" class=\"angular-editor-button\" (click)=\"triggerCommand('redo')\"\n [hidden]=\"isButtonHidden('redo')\" tabindex=\"-1\"><i\n class='fa fa-repeat'></i></button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'bold-'+id\" type=\"button\" title=\"Bold\" class=\"angular-editor-button\" (click)=\"triggerCommand('bold')\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('bold')\" tabindex=\"-1\"><i class='fa fa-bold'></i></button>\n <button [id]=\"'italic-'+id\" type=\"button\" title=\"Italic\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('italic')\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('italic')\" tabindex=\"-1\"><i class='fa fa-italic'></i>\n </button>\n <button [id]=\"'underline-'+id\" type=\"button\" title=\"Underline\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('underline')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('underline')\"\n tabindex=\"-1\"><i class='fa fa-underline'></i></button>\n <button [id]=\"'strikeThrough-'+id\" type=\"button\" title=\"Strikethrough\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('strikeThrough')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('strikeThrough')\"\n tabindex=\"-1\"><i class='fa fa-strikethrough'></i></button>\n <button [id]=\"'subscript-'+id\" type=\"button\" title=\"Subscript\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('subscript')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('subscript')\"\n tabindex=\"-1\"><i class='fa fa-subscript'></i></button>\n <button [id]=\"'superscript-'+id\" type=\"button\" title=\"Superscript\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('superscript')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('superscript')\"\n tabindex=\"-1\"><i class='fa fa-superscript'></i></button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'justifyLeft-'+id\" type=\"button\" title=\"Justify Left\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('justifyLeft')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyLeft')\"\n tabindex=\"-1\"><i\n class='fa fa-align-left'></i></button>\n <button [id]=\"'justifyCenter-'+id\" type=\"button\" title=\"Justify Center\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('justifyCenter')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyCenter')\"\n tabindex=\"-1\"><i\n class='fa fa-align-center'></i></button>\n <button [id]=\"'justifyRight-'+id\" type=\"button\" title=\"Justify Right\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('justifyRight')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyRight')\"\n tabindex=\"-1\">\n <i class='fa fa-align-right'></i></button>\n <button [id]=\"'justifyFull-'+id\" type=\"button\" title=\"Justify Full\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('justifyFull')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyFull')\"\n tabindex=\"-1\"><i\n class='fa fa-align-justify'></i></button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'indent-'+id\" type=\"button\" title=\"Indent\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('indent')\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('indent')\" tabindex=\"-1\"><i\n class='fa fa-indent'></i></button>\n <button [id]=\"'outdent-'+id\" type=\"button\" title=\"Outdent\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('outdent')\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('outdent')\" tabindex=\"-1\"><i\n class='fa fa-outdent'></i></button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'insertUnorderedList-'+id\" type=\"button\" title=\"Unordered List\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('insertUnorderedList')\" [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('insertUnorderedList')\" tabindex=\"-1\"><i\n class='fa fa-list-ul'></i></button>\n <button [id]=\"'insertOrderedList-'+id\" type=\"button\" title=\"Ordered List\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('insertOrderedList')\" [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('insertOrderedList')\" tabindex=\"-1\"><i\n class='fa fa-list-ol'></i></button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n\n <ae-select class=\"select-heading\" [options]=\"headings\"\n [(ngModel)]=\"block\"\n (change)=\"triggerCommand(block)\"\n [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('heading')\"\n tabindex=\"-1\"></ae-select>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n\n <ae-select class=\"select-font\" [options]=\"fontsList\"\n [(ngModel)]=\"fontName\"\n (change)=\"setFontName(fontName)\"\n [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('fontName')\"\n tabindex=\"-1\"></ae-select>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n\n <ae-select class=\"select-font-size\" [options]=\"fontSizes\"\n [(ngModel)]=\"fontSize\"\n (change)=\"setFontSize(fontSize)\"\n [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('fontSize')\"\n tabindex=\"-1\">\n </ae-select>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <input\n style=\"display: none\"\n type=\"color\" (change)=\"insertColor(fgInput.value, 'textColor')\"\n #fgInput>\n <button [id]=\"'foregroundColorPicker-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"focus(); ; fgInput.click()\"\n title=\"Text Color\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('textColor')\" tabindex=\"-1\"><span\n class=\"color-label foreground\"><i class=\"fa fa-font\"></i></span>\n </button>\n <input\n style=\"display: none\"\n type=\"color\" (change)=\"insertColor(bgInput.value, 'backgroundColor')\"\n #bgInput>\n <button [id]=\"'backgroundColorPicker-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"focus(); ; bgInput.click()\"\n title=\"Background Color\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('backgroundColor')\" tabindex=\"-1\"><span\n class=\"color-label background\"><i class=\"fa fa-font\"></i></span>\n </button>\n </div>\n <div *ngIf=\"_customClasses\" class=\"angular-editor-toolbar-set\">\n <ae-select class=\"select-custom-style\" [options]=\"customClassList\"\n [(ngModel)]=\"customClassId\"\n (change)=\"setCustomClass(customClassId)\"\n [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('customClasses')\"\n tabindex=\"-1\"></ae-select>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'link-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"insertUrl()\"\n title=\"Insert Link\" [disabled]=\"isLinkButtonDisabled\" [hidden]=\"isButtonHidden('link')\" tabindex=\"-1\">\n <i class=\"fa fa-link\"></i>\n </button>\n <button [id]=\"'unlink-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"triggerCommand('unlink')\"\n title=\"Unlink\" [disabled]=\"htmlMode || !linkSelected\" [hidden]=\"isButtonHidden('unlink')\" tabindex=\"-1\">\n <i class=\"fa fa-chain-broken\"></i>\n </button>\n <input\n style=\"display: none\"\n accept=\"image/*\"\n type=\"file\" (change)=\"onFileChanged($event)\"\n #fileInput>\n <button [id]=\"'insertImage-'+id\" type=\"button\" class=\"angular-editor-button\" (click)=\"focus(); fileInput.click()\"\n title=\"Insert Image\"\n [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('insertImage')\" tabindex=\"-1\"><i class=\"fa fa-image\"></i>\n </button>\n <button [id]=\"'insertVideo-'+id\" type=\"button\" class=\"angular-editor-button\"\n (click)=\"insertVideo()\" title=\"Insert Video\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('insertVideo')\"\n tabindex=\"-1\"><i\n class=\"fa fa-video-camera\"></i></button>\n <button [id]=\"'insertHorizontalRule-'+id\" type=\"button\" title=\"Horizontal Line\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('insertHorizontalRule')\" [disabled]=\"htmlMode\"\n [hidden]=\"isButtonHidden('insertHorizontalRule')\" tabindex=\"-1\"><i\n class=\"fa fa-minus\"></i></button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'clearFormatting-'+id\" type=\"button\" title=\"Clear Formatting\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('removeFormat')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('removeFormat')\"\n tabindex=\"-1\"><i class='fa fa-remove'></i>\n </button>\n </div>\n <div class=\"angular-editor-toolbar-set\">\n <button [id]=\"'toggleEditorMode-'+id\" type=\"button\" title=\"HTML Code\" class=\"angular-editor-button\"\n (click)=\"triggerCommand('toggleEditorMode')\" [hidden]=\"isButtonHidden('toggleEditorMode')\" tabindex=\"-1\"><i\n class='fa fa-code'></i></button>\n </div>\n</div>\n","import {\n AfterViewInit,\n Attribute,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SecurityContext,\n ViewChild\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {AngularEditorConfig, angularEditorConfig} from './config';\nimport {AngularEditorToolbarComponent} from './angular-editor-toolbar.component';\nimport {AngularEditorService} from './angular-editor.service';\nimport {DOCUMENT} from '@angular/common';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {isDefined} from './utils';\n\n@Component({\n selector: 'angular-editor',\n templateUrl: './angular-editor.component.html',\n styleUrls: ['./angular-editor.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AngularEditorComponent),\n multi: true\n },\n AngularEditorService\n ]\n})\nexport class AngularEditorComponent implements OnInit, ControlValueAccessor, AfterViewInit, OnDestroy {\n\n private onChange: (value: string) => void;\n private onTouched: () => void;\n\n modeVisual = true;\n showPlaceholder = false;\n disabled = false;\n focused = false;\n touched = false;\n changed = false;\n\n focusInstance: any;\n blurInstance: any;\n\n @Input() id = '';\n @Input() config: AngularEditorConfig = angularEditorConfig;\n @Input() placeholder = '';\n @Input() tabIndex: number | null;\n\n @Output() html;\n\n @ViewChild('editor', {static: true}) textArea: ElementRef;\n @ViewChild('editorWrapper', {static: true}) editorWrapper: ElementRef;\n @ViewChild('editorToolbar') editorToolbar: AngularEditorToolbarComponent;\n\n @Output() viewMode = new EventEmitter<boolean>();\n\n /** emits `blur` event when focused out from the textarea */\n // eslint-disable-next-line @angular-eslint/no-output-native, @angular-eslint/no-output-rename\n @Output('blur') blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n /** emits `focus` event when focused in to the textarea */\n // eslint-disable-next-line @angular-eslint/no-output-rename, @angular-eslint/no-output-native\n @Output('focus') focusEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n @HostBinding('attr.tabindex') tabindex = -1;\n\n @HostListener('focus')\n onFocus() {\n this.focus();\n }\n\n constructor(\n private r: Renderer2,\n private editorService: AngularEditorService,\n @Inject(DOCUMENT) private doc: any,\n private sanitizer: DomSanitizer,\n private cdRef: ChangeDetectorRef,\n @Attribute('tabindex') defaultTabIndex: string,\n @Attribute('autofocus') private autoFocus: any\n ) {\n const parsedTabIndex = Number(defaultTabIndex);\n this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n }\n\n ngOnInit() {\n this.config.toolbarPosition = this.config.toolbarPosition ? this.config.toolbarPosition : angularEditorConfig.toolbarPosition;\n }\n\n ngAfterViewInit() {\n if (isDefined(this.autoFocus)) {\n this.focus();\n }\n }\n\n onPaste(event: ClipboardEvent){\n if (this.config.rawPaste) {\n event.preventDefault();\n const text = event.clipboardData.getData('text/plain');\n document.execCommand('insertHTML', false, text);\n return text;\n }\n }\n\n /**\n * Executed command from editor header buttons\n * @param command string from triggerCommand\n */\n executeCommand(command: string) {\n this.focus();\n if (command === 'focus') {\n return;\n }\n if (command === 'toggleEditorMode') {\n this.toggleEditorMode(this.modeVisual);\n } else if (command !== '') {\n if (command === 'clear') {\n this.editorService.removeSelectedElements(this.getCustomTags());\n this.onContentChange(this.textArea.nativeElement);\n } else if (command === 'default') {\n this.editorService.removeSelectedElements('h1,h2,h3,h4,h5,h6,p,pre');\n this.onContentChange(this.textArea.nativeElement);\n } else {\n this.editorService.executeCommand(command);\n }\n this.exec();\n }\n }\n\n /**\n * focus event\n */\n onTextAreaFocus(event: FocusEvent): void {\n if (this.focused) {\n event.stopPropagation();\n return;\n }\n this.focused = true;\n this.focusEvent.emit(event);\n if (!this.touched || !this.changed) {\n this.editorService.executeInNextQueueIteration(() => {\n this.configure();\n this.touched = true;\n });\n }\n }\n\n /**\n * @description fires when cursor leaves textarea\n */\n public onTextAreaMouseOut(event: MouseEvent): void {\n this.editorService.saveSelection();\n }\n\n /**\n * blur event\n */\n onTextAreaBlur(event: FocusEvent) {\n /**\n * save selection if focussed out\n */\n this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);\n\n if (typeof this.onTouched === 'function') {\n this.onTouched();\n }\n\n if (event.relatedTarget !== null) {\n const parent = (event.relatedTarget as HTMLElement).parentElement;\n if (!parent.classList.contains('angular-editor-toolbar-set') && !parent.classList.contains('ae-picker')) {\n this.blurEvent.emit(event);\n this.focused = false;\n }\n }\n }\n\n /**\n * focus the text area when the editor is focused\n */\n focus() {\n if (this.modeVisual) {\n this.textArea.nativeElement.focus();\n } else {\n const sourceText = this.doc.getElementById('sourceText' + this.id);\n sourceText.focus();\n this.focused = true;\n }\n }\n\n /**\n * Executed from the contenteditable section while the input property changes\n * @param element html element from contenteditable\n */\n onContentChange(element: HTMLElement): void {\n let html = '';\n if (this.modeVisual) {\n html = element.innerHTML;\n } else {\n html = element.innerText;\n }\n if ((!html || html === '<br>')) {\n html = '';\n }\n if (typeof this.onChange === 'function') {\n this.onChange(this.config.sanitize || this.config.sanitize === undefined ?\n this.sanitizer.sanitize(SecurityContext.HTML, html) : html);\n if ((!html) !== this.showPlaceholder) {\n this.togglePlaceholder(this.showPlaceholder);\n }\n }\n this.changed = true;\n }\n\n /**\n * Set the function to be called\n * when the control receives a change event.\n *\n * @param fn a function\n */\n registerOnChange(fn: any): void {\n this.onChange = e => (e === '<br>' ? fn('') : fn(e)) ;\n }\n\n /**\n * Set the function to be called\n * when the control receives a touch event.\n *\n * @param fn a function\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * Write a new value to the element.\n *\n * @param value value to be executed when there is a change in contenteditable\n */\n writeValue(value: any): void {\n\n if ((!value || value === '<br>' || value === '') !== this.showPlaceholder) {\n this.togglePlaceholder(this.showPlaceholder);\n }\n\n if (value === undefined || value === '' || value === '<br>') {\n value = null;\n }\n\n this.refreshView(value);\n }\n\n /**\n * refresh view/HTML of the editor\n *\n * @param value html string from the editor\n */\n refreshView(value: string): void {\n const normalizedValue = value === null ? '' : value;\n this.r.setProperty(this.textArea.nativeElement, 'innerHTML', normalizedValue);\n\n return;\n }\n\n /**\n * toggles placeholder based on input string\n *\n * @param value A HTML string from the editor\n */\n togglePlaceholder(value: boolean): void {\n if (!value) {\n this.r.addClass(this.editorWrapper.nativeElement, 'show-placeholder');\n this.showPlaceholder = true;\n\n } else {\n this.r.removeClass(this.editorWrapper.nativeElement, 'show-placeholder');\n this.showPlaceholder = false;\n }\n }\n\n /**\n * Implements disabled state for this element\n *\n * @param isDisabled Disabled flag\n */\n setDisabledState(isDisabled: boolean): void {\n const div = this.textArea.nativeElement;\n const action = isDisabled ? 'addClass' : 'removeClass';\n this.r[action](div, 'disabled');\n this.disabled = isDisabled;\n }\n\n /**\n * toggles editor mode based on bToSource bool\n *\n * @param bToSource A boolean value from the editor\n */\n toggleEditorMode(bToSource: boolean) {\n let oContent: any;\n const editableElement = this.textArea.nativeElement;\n\n if (bToSource) {\n oContent = this.r.createText(editableElement.innerHTML);\n this.r.setProperty(editableElement, 'innerHTML', '');\n this.r.setProperty(editableElement, 'contentEditable', false);\n\n const oPre = this.r.createElement('pre');\n this.r.setStyle(oPre, 'margin', '0');\n this.r.setStyle(oPre, 'outline', 'none');\n\n const oCode = this.r.createElement('code');\n this.r.setProperty(oCode, 'id', 'sourceText' + this.id);\n this.r.setStyle(oCode, 'display', 'block');\n this.r.setStyle(oCode, 'white-space', 'pre-wrap');\n this.r.setStyle(oCode, 'word-break', 'keep-all');\n this.r.setStyle(oCode, 'outline', 'none');\n this.r.setStyle(oCode, 'margin', '0');\n this.r.setStyle(oCode, 'background-color', '#fff5b9');\n this.r.setProperty(oCode, 'contentEditable', true);\n this.r.appendChild(oCode, oContent);\n this.focusInstance = this.r.listen(oCode, 'focus', (event) => this.onTextAreaFocus(event));\n this.blurInstance = this.r.listen(oCode, 'blur', (event) => this.onTextAreaBlur(event));\n this.r.appendChild(oPre, oCode);\n this.r.appendChild(editableElement, oPre);\n\n // ToDo move to service\n this.doc.execCommand('defaultParagraphSeparator', false, 'div');\n\n this.modeVisual = false;\n this.viewMode.emit(false);\n oCode.focus();\n } else {\n if (this.doc.querySelectorAll) {\n this.r.setProperty(editableElement, 'innerHTML', editableElement.innerText);\n } else {\n oContent = this.doc.createRange();\n oContent.selectNodeContents(editableElement.firstChild);\n this.r.setProperty(editableElement, 'innerHTML', oContent.toString());\n }\n this.r.setProperty(editableElement, 'contentEditable', true);\n this.modeVisual = true;\n this.viewMode.emit(true);\n this.onContentChange(editableElement);\n editableElement.focus();\n }\n this.editorToolbar.setEditorMode(!this.modeVisual);\n }\n\n /**\n * toggles editor buttons when cursor moved or positioning\n *\n * Send a node array from the contentEditable of the editor\n */\n exec() {\n this.editorToolbar.triggerButtons();\n\n let userSelection;\n if (this.doc.getSelection) {\n userSelection = this.doc.getSelection();\n this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);\n }\n\n let a = userSelection.focusNode;\n const els = [];\n while (a && a.id !== 'editor') {\n els.unshift(a);\n a = a.parentNode;\n }\n this.editorToolbar.triggerBlocks(els);\n }\n\n private configure() {\n this.editorService.uploadUrl = this.config.uploadUrl;\n this.editorService.uploadWithCredentials = this.config.uploadWithCredentials;\n if (this.config.defaultParagraphSeparator) {\n this.editorService.setDefaultParagraphSeparator(this.config.defaultParagraphSeparator);\n }\n if (this.config.defaultFontName) {\n this.editorService.setFontName(this.config.defaultFontName);\n }\n if (this.config.defaultFontSize) {\n this.editorService.setFontSize(this.config.defaultFontSize);\n }\n }\n\n getFonts() {\n const fonts = this.config.fonts ? this.config.fonts : angularEditorConfig.fonts;\n return fonts;\n }\n\n getCustomTags() {\n const tags = ['span'];\n this.config.customClasses.forEach(x => {\n if (x.tag !== undefined) {\n if (!tags.includes(x.tag)) {\n tags.push(x.tag);\n }\n }\n });\n return tags.join(',');\n }\n\n ngOnDestroy() {\n if (this.blurInstance) {\n this.blurInstance();\n }\n if (this.focusInstance) {\n this.focusInstance();\n }\n }\n\n filterStyles(html: string): string {\n html = html.replace('position: fixed;', '');\n return html;\n }\n}\n","<div\n class=\"angular-editor\"\n #angularEditor\n [style.width]=\"config.width\"\n [style.minWidth]=\"config.minWidth\"\n>\n <angular-editor-toolbar\n *ngIf=\"config.toolbarPosition === 'top'\"\n #editorToolbar\n [id]=\"id\"\n [uploadUrl]=\"config.uploadUrl\"\n [upload]=\"config.upload\"\n [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\n [fonts]=\"getFonts()\"\n [customClasses]=\"config.customClasses\"\n [defaultFontName]=\"config.defaultFontName\"\n [defaultFontSize]=\"config.defaultFontSize\"\n [hiddenButtons]=\"config.toolbarHiddenButtons\"\n (execute)=\"executeCommand($event)\"\n ></angular-editor-toolbar>\n\n <div\n class=\"angular-editor-wrapper\"\n #editorWrapper\n >\n <div\n #editor\n class=\"angular-editor-textarea\"\n [attr.contenteditable]=\"config.editable\"\n [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n [attr.translate]=\"config.translate\"\n [attr.spellcheck]=\"config.spellcheck\"\n [style.height]=\"config.height\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxHeight]=\"config.maxHeight\"\n [style.outline]=\"config.outline === false ? 'none': undefined\"\n (input)=\"onContentChange($event.target)\"\n (focus)=\"onTextAreaFocus($event)\"\n (blur)=\"onTextAreaBlur($event)\"\n (click)=\"exec()\"\n (keyup)=\"exec()\"\n (mouseout)=\"onTextAreaMouseOut($event)\"\n (paste)=\"onPaste($event)\"\n >\n </div>\n <span class=\"angular-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\n </div>\n <angular-editor-toolbar\n *ngIf=\"config.toolbarPosition === 'bottom'\"\n #editorToolbar\n [id]=\"id\"\n [uploadUrl]=\"config.uploadUrl\"\n [upload]=\"config.upload\"\n [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\n [fonts]=\"getFonts()\"\n [customClasses]=\"config.customClasses\"\n [defaultFontName]=\"config.defaultFontName\"\n [defaultFontSize]=\"config.defaultFontSize\"\n [hiddenButtons]=\"config.toolbarHiddenButtons\"\n (execute)=\"executeCommand($event)\"\n ></angular-editor-toolbar>\n</div>\n","import {NgModule} from '@angular/core';\nimport {AngularEditorComponent} from './angular-editor.component';\nimport {AngularEditorToolbarComponent} from './angular-editor-toolbar.component';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {CommonModule} from '@angular/common';\nimport { AeSelectComponent } from './ae-select/ae-select.component';\n\n@NgModule({\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule\n ],\n declarations: [AngularEditorComponent, AngularEditorToolbarComponent, AeSelectComponent],\n exports: [AngularEditorComponent, AngularEditorToolbarComponent]\n})\nexport class AngularEditorModule {\n}\n","/*\n * Public API Surface of angular-editor\n */\n\nexport * from './lib/angular-editor.service';\nexport * from './lib/angular-editor.component';\nexport * from './lib/angular-editor-toolbar.component';\nexport * from './lib/angular-editor.module';\nexport { AngularEditorConfig, CustomClass } from './lib/config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}