{"version":3,"file":"primeng-editor.umd.js","sources":["../../src/app/components/editor/editor.ts","../../src/app/components/editor/primeng-editor.ts"],"sourcesContent":["import {NgModule,Component,ElementRef,AfterViewInit,Input,Output,EventEmitter,ContentChild,forwardRef,ChangeDetectionStrategy, ViewEncapsulation, ContentChildren, QueryList, AfterContentInit, TemplateRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {SharedModule,Header, PrimeTemplate} from 'primeng/api'\nimport {DomHandler} from 'primeng/dom';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport * as Quill from \"quill\";\n\nexport const EDITOR_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => Editor),\n  multi: true\n};\n\n@Component({\n    selector: 'p-editor',\n    template: `\n        <div [ngClass]=\"'p-editor-container'\" [class]=\"styleClass\">\n            <div class=\"p-editor-toolbar\" *ngIf=\"toolbar || headerTemplate\">\n                <ng-content select=\"p-header\"></ng-content>\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n            </div>\n            <div class=\"p-editor-toolbar\" *ngIf=\"!toolbar && !headerTemplate\">\n                <span class=\"ql-formats\">\n                    <select class=\"ql-header\">\n                      <option value=\"1\">Heading</option>\n                      <option value=\"2\">Subheading</option>\n                      <option selected>Normal</option>\n                    </select>\n                    <select class=\"ql-font\">\n                      <option selected>Sans Serif</option>\n                      <option value=\"serif\">Serif</option>\n                      <option value=\"monospace\">Monospace</option>\n                    </select>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-bold\" aria-label=\"Bold\" type=\"button\"></button>\n                    <button class=\"ql-italic\" aria-label=\"Italic\" type=\"button\"></button>\n                    <button class=\"ql-underline\" aria-label=\"Underline\" type=\"button\"></button>\n                </span>\n                <span class=\"ql-formats\">\n                    <select class=\"ql-color\"></select>\n                    <select class=\"ql-background\"></select>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-list\" value=\"ordered\" aria-label=\"Ordered List\" type=\"button\"></button>\n                    <button class=\"ql-list\" value=\"bullet\" aria-label=\"Unordered List\" type=\"button\"></button>\n                    <select class=\"ql-align\">\n                        <option selected></option>\n                        <option value=\"center\"></option>\n                        <option value=\"right\"></option>\n                        <option value=\"justify\"></option>\n                    </select>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-link\" aria-label=\"Insert Link\" type=\"button\"></button>\n                    <button class=\"ql-image\" aria-label=\"Insert Image\" type=\"button\"></button>\n                    <button class=\"ql-code-block\" aria-label=\"Insert Code Block\" type=\"button\"></button>\n                </span>\n                <span class=\"ql-formats\">\n                    <button class=\"ql-clean\" aria-label=\"Remove Styles\" type=\"button\"></button>\n                </span>\n            </div>\n            <div class=\"p-editor-content\" [ngStyle]=\"style\"></div>\n        </div>\n    `,\n    providers: [EDITOR_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    styleUrls: ['./editor.css'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class Editor implements AfterViewInit,AfterContentInit,ControlValueAccessor {\n        \n    @Output() onTextChange: EventEmitter<any> = new EventEmitter();\n    \n    @Output() onSelectionChange: EventEmitter<any> = new EventEmitter();\n    \n    @ContentChild(Header) toolbar;\n    \n    @Input() style: any;\n        \n    @Input() styleClass: string;\n    \n    @Input() placeholder: string;\n    \n    @Input() formats: string[];\n\n    @Input() modules: any;\n\n    @Input() bounds: any;\n\n    @Input() scrollingContainer: any;\n\n    @Input() debug: string;\n    \n    @Output() onInit: EventEmitter<any> = new EventEmitter();\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n    \n    value: string;\n    \n    _readonly: boolean;\n    \n    onModelChange: Function = () => {};\n    \n    onModelTouched: Function = () => {};\n    \n    quill: any;\n\n    headerTemplate: TemplateRef<any>;\n    \n    constructor(public el: ElementRef) {}\n\n    ngAfterViewInit() {\n        let editorElement = DomHandler.findSingle(this.el.nativeElement ,'div.p-editor-content'); \n        let toolbarElement = DomHandler.findSingle(this.el.nativeElement ,'div.p-editor-toolbar'); \n        let defaultModule  = {toolbar: toolbarElement};\n        let modules = this.modules ? {...defaultModule, ...this.modules} : defaultModule;\n\n        this.quill = new Quill(editorElement, {\n            modules: modules,\n            placeholder: this.placeholder,\n            readOnly: this.readonly,\n            theme: 'snow',\n            formats: this.formats,\n            bounds: this.bounds,\n            debug: this.debug,\n            scrollingContainer: this.scrollingContainer\n        });\n                \n        if (this.value) {\n            this.quill.setContents(this.quill.clipboard.convert(this.value));\n        }\n        \n        this.quill.on('text-change', (delta, oldContents, source) => {\n            if (source === 'user') {\n                let html = DomHandler.findSingle(editorElement, '.ql-editor').innerHTML;\n                let text = this.quill.getText().trim();\n                if (html === '<p><br></p>') {\n                    html = null;\n                }\n\n                this.onTextChange.emit({\n                    htmlValue: html,\n                    textValue: text,\n                    delta: delta,\n                    source: source\n                });\n                \n                this.onModelChange(html);\n                this.onModelTouched();\n            }\n        });\n        \n        this.quill.on('selection-change', (range, oldRange, source) => {\n            this.onSelectionChange.emit({\n                range: range,\n                oldRange: oldRange,\n                source: source\n            });\n        });\n        \n        this.onInit.emit({\n            editor: this.quill\n        });\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n            }\n        });\n    }\n        \n    writeValue(value: any) : void {\n        this.value = value;\n                \n        if (this.quill) {\n            if (value)\n                this.quill.setContents(this.quill.clipboard.convert(value));\n            else\n                this.quill.setText('');\n        }\n    }\n    \n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n    \n    getQuill() {\n        return this.quill;\n    }\n    \n    @Input() get readonly(): boolean {\n        return this._readonly;\n    }\n\n    set readonly(val:boolean) {\n        this._readonly = val;\n        \n        if (this.quill) {\n            if (this._readonly)\n                this.quill.disable();\n            else\n                this.quill.enable();\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Editor,SharedModule],\n    declarations: [Editor]\n})\nexport class EditorModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NG_VALUE_ACCESSOR","forwardRef","EventEmitter","DomHandler","Quill","Header","PrimeTemplate","Component","ChangeDetectionStrategy","ViewEncapsulation","Output","ContentChild","Input","ContentChildren","CommonModule","SharedModule","NgModule"],"mappings":"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"}