{"version":3,"file":"angular-froala-wysiwyg.mjs","sources":["../../projects/library/src/editor/editor.directive.ts","../../projects/library/src/editor/editor.module.ts","../../projects/library/src/view/view.directive.ts","../../projects/library/src/view/view.module.ts","../../projects/library/src/fe-root.module.ts","../../projects/library/src/angular-froala-wysiwyg.ts"],"sourcesContent":["import { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { Directive, ElementRef, EventEmitter, forwardRef, Input, NgZone, Output, PLATFORM_ID, Inject } from '@angular/core';\nimport { isPlatformBrowser } from \"@angular/common\";\n\n@Directive({\n    selector: '[froalaEditor]',\n    exportAs: 'froalaEditor',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => FroalaEditorDirective),\n            multi: true\n        }\n    ],\n    standalone: false\n})\nexport class FroalaEditorDirective implements ControlValueAccessor {\n\n  // editor options\n  private _opts: any = {\n    immediateAngularModelUpdate: false,\n    angularIgnoreAttrs: null\n  };\n\n  private _element: any;\n\n  private SPECIAL_TAGS: string[] = ['img', 'button', 'input', 'a'];\n  private INNER_HTML_ATTR: string = 'innerHTML';\n  private _hasSpecialTag: boolean = false;\n\n  // editor element\n  private _editor: any;\n\n  // initial editor content\n  private _model: string;\n\n  private _editorInitialized: boolean = false;\n\n  private _oldModel: string = null;\n\n  constructor(el: ElementRef, private zone: NgZone, @Inject(PLATFORM_ID) private platformId: Object) {\n\n    let element: any = el.nativeElement;\n\n    // check if the element is a special tag\n    if (this.SPECIAL_TAGS.indexOf(element.tagName.toLowerCase()) != -1) {\n      this._hasSpecialTag = true;\n    }\n    this._element = element;\n\n    this.zone = zone;\n  }\n\n  // Begin ControlValueAccesor methods.\n  onChange = (_: any) => {\n  };\n  onTouched = () => {\n  };\n\n  // Form model content changed.\n  writeValue(content: any): void {\n    this.updateEditor(content);\n    if(content){\n      this.setup();\n    }\n  }\n\n  registerOnChange(fn: (_: any) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  // End ControlValueAccesor methods.\n\n  // froalaEditor directive as input: store the editor options\n  @Input() set froalaEditor(opts: any) {\n    this._opts = this.clone(  opts || this._opts);\n    this._opts =  {...this._opts};\n  }\n\n   // TODO: replace clone method with better possible alternate \n  private clone(item) {\n  \tconst me = this;  \n      if (!item) { return item; } // null, undefined values check\n\n      let types = [ Number, String, Boolean ], \n          result;\n\n      // normalizing primitives if someone did new String('aaa'), or new Number('444');\n      types.forEach(function(type) {\n          if (item instanceof type) {\n              result = type( item );\n          }\n      });\n\n      if (typeof result == \"undefined\") {\n          if (Object.prototype.toString.call( item ) === \"[object Array]\") {\n              result = [];\n              item.forEach(function(child, index, array) { \n                  result[index] = me.clone( child );\n              });\n          } else if (typeof item == \"object\") {\n              // testing that this is DOM\n              if (item.nodeType && typeof item.cloneNode == \"function\") {\n                  result = item.cloneNode( true );    \n              } else if (!item.prototype) { // check that this is a literal\n                  if (item instanceof Date) {\n                      result = new Date(item);\n                  } else {\n                      // it is an object literal\n                      result = {};\n                      for (var i in item) {\n                          result[i] = me.clone( item[i] );\n                      }\n                  }\n              } else {\n                  if (false && item.constructor) {\n                      result = new item.constructor();\n                  } else {\n                      result = item;\n                  }\n              }\n          } else {\n              result = item;\n          }\n      }\n      return result;\n  }\n  // froalaModel directive as input: store initial editor content\n  @Input() set froalaModel(content: any) {\n    this.updateEditor(content);\n  }\n\n  private stringify(obj) {\n    let cache = [];\n    let str = JSON.stringify(obj, function(key, value) {\n      if (typeof value === \"object\" && value !== null) {\n        if (cache.indexOf(value) !== -1) {\n          // Circular reference found, discard key\n          return;\n        }\n        // Store value in our collection\n        cache.push(value);\n      }\n      return value;\n    });\n    cache = null; // reset the cache\n    return str;\n  }\n  \n    // Update editor with model contents.\n    private updateEditor(content: any) {\n      if (this.stringify(this._oldModel) == this.stringify(content)) {\n        return;\n      }\n     \n    if (!this._hasSpecialTag) {\n      this._oldModel = content;\n    } else {\n      this._model = content;\n    }\n\n    if (this._editorInitialized) {\n      if (!this._hasSpecialTag) {\n        this._editor.html.set(content);\n      } else {\n        this.setContent();\n      }\n    } else {\n      if (!this._hasSpecialTag) {\n        this._element.innerHTML = content || '';\n      } else {\n        this.setContent();\n      }\n    }\n  }\n\n  // froalaModel directive as output: update model if editor contentChanged\n  @Output() froalaModelChange: EventEmitter<any> = new EventEmitter<any>();\n\n  // froalaInit directive as output: send manual editor initialization\n  @Output() froalaInit: EventEmitter<Object> = new EventEmitter<Object>();\n\n  // update model if editor contentChanged\n  private updateModel() {\n    this.zone.run(() => {\n\n      let modelContent: any = null;\n\n      if (this._hasSpecialTag) {\n\n        let attributeNodes = this._element.attributes;\n        let attrs = {};\n\n        for (let i = 0; i < attributeNodes.length; i++) {\n\n          let attrName = attributeNodes[i].name;\n          if (this._opts.angularIgnoreAttrs && this._opts.angularIgnoreAttrs.indexOf(attrName) != -1) {\n            continue;\n          }\n\n          attrs[attrName] = attributeNodes[i].value;\n        }\n\n        if (this._element.innerHTML) {\n          attrs[this.INNER_HTML_ATTR] = this._element.innerHTML;\n        }\n\n        modelContent = attrs;\n      } else {\n\n        let returnedHtml: any = this._editor.html.get();\n        if (typeof returnedHtml === 'string') {\n          modelContent = returnedHtml;\n        }\n      }\n      if (this._oldModel !== modelContent) {\n        this._oldModel = modelContent;\n\n        // Update froalaModel.\n        this.froalaModelChange.emit(modelContent);\n\n        // Update form model.\n        this.onChange(modelContent);\n      }\n\n    })\n  }\n\n  private registerEvent(eventName, callback) {\n    if (!eventName || !callback) {\n      return;\n    }\n\n    if (!this._opts.events) {\n      this._opts.events = {};\n    }\n\n    this._opts.events[eventName] = callback;\n  }\n\n  private initListeners() {\n    let self = this;\n    // Check if we have events on the editor.\n    if (this._editor.events) {\n      // bind contentChange and keyup event to froalaModel\n      this._editor.events.on('contentChanged', function () {\n        self.updateModel();\n      });\n      this._editor.events.on('mousedown', function () {\n        setTimeout(function () {\n          self.onTouched();\n        }, 0);\n      });\n\n      if (this._opts.immediateAngularModelUpdate) {\n        this._editor.events.on('keyup', function () {\n          setTimeout(function () {\n            self.updateModel();\n          }, 0);\n        });\n      }\n    }\n\n    this._editorInitialized = true;\n  }\n\n  private createEditor() {\n    if (this._editorInitialized) {\n      return;\n    }\n\n    this.setContent(true);\n\n    // init editor\n    this.zone.runOutsideAngular(() => {\n      // Add listeners on initialized event.\n      if (!this._opts.events) this._opts.events = {};\n\n      // Register initialized event.\n      this.registerEvent('initialized', this._opts.events && this._opts.events.initialized);\n      const existingInitCallback = this._opts.events.initialized;\n      // Default initialized event.\n      if (!this._opts.events.initialized || !this._opts.events.initialized.overridden) {\n        this._opts.events.initialized = () => {\n          this.initListeners();\n          existingInitCallback && existingInitCallback.call(this._editor, this);\n        };\n        this._opts.events.initialized.overridden = true;\n      }\n\n      import('froala-editor').then(({ default: FroalaEditor }) => {\n        // Initialize the Froala Editor.\n        this._editor = new FroalaEditor(\n          this._element,\n          this._opts\n        );\n      });\n    });\n  }\n\n  private setHtml() {\n    this._editor.html.set(this._model || \"\");\n\n    // This will reset the undo stack everytime the model changes externally. Can we fix this?\n    this._editor.undo.reset();\n    this._editor.undo.saveStep();\n  }\n\n  private setContent(firstTime = false) {\n    let self = this;\n\n    // Set initial content\n    if (this._model || this._model == '') {\n      this._oldModel = this._model;\n      if (this._hasSpecialTag) {\n\n        let tags: Object = this._model;\n\n        // add tags on element\n        if (tags) {\n\n          for (let attr in tags) {\n            if (tags.hasOwnProperty(attr) && attr != this.INNER_HTML_ATTR) {\n              this._element.setAttribute(attr, tags[attr]);\n            }\n          }\n\n          if (tags.hasOwnProperty(this.INNER_HTML_ATTR)) {\n            this._element.innerHTML = tags[this.INNER_HTML_ATTR];\n          }\n        }\n      } else {\n        if (firstTime) {\n          this.registerEvent('initialized', function () {\n            self.setHtml();\n          });\n        } else {\n          self.setHtml();\n        }\n      }\n    }\n  }\n\n  private destroyEditor() {\n    if (this._editorInitialized) {\n      this._editor.destroy();\n      this._editorInitialized = false;\n    }\n  }\n\n  private getEditor() {\n    if (this._element) {\n      return this._editor;\n    }\n\n    return null;\n  }\n\n  // send manual editor initialization\n  private generateManualController() {\n    let controls = {\n      initialize: this.createEditor.bind(this),\n      destroy: this.destroyEditor.bind(this),\n      getEditor: this.getEditor.bind(this),\n    };\n    this.froalaInit.emit(controls);\n  }\n\n  // TODO not sure if ngOnInit is executed after @inputs\n  ngAfterViewInit() {\n    // check if output froalaInit is present. Maybe observers is private and should not be used?? TODO how to better test that an output directive is present.\n    // Only allow initialization in browser\n    if (isPlatformBrowser(this.platformId)) {\n      this.setup();\n    }\n  }\n\n  private initialized = false;\n  private setup() {\n    if (this.initialized) {\n      return;\n    }\n    this.initialized = true;\n    if (!this.froalaInit.observers.length) {\n      this.createEditor();\n    } else {\n      this.generateManualController();\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroyEditor();\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { FroalaEditorDirective } from './editor.directive';\n\n@NgModule({\n  declarations: [FroalaEditorDirective],\n  exports: [FroalaEditorDirective]\n})\n\nexport class FroalaEditorModule {\n  public static forRoot(): ModuleWithProviders<FroalaEditorModule> {\n    return {ngModule: FroalaEditorModule, providers: []};\n  }\n}\n","import { Directive, ElementRef, Renderer2, Input } from '@angular/core';\n\n@Directive({\n    selector: '[froalaView]',\n    standalone: false\n})\nexport class FroalaViewDirective {\n\n  private _element: HTMLElement;\n\n  constructor(private renderer: Renderer2, element: ElementRef) {\n    this._element = element.nativeElement;\n  }\n\n  // update content model as it comes\n  @Input() set froalaView(content: string) {\n    this._element.innerHTML = content;\n  }\n\n  ngAfterViewInit() {\n    this.renderer.addClass(this._element, \"fr-view\");\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { FroalaViewDirective } from './view.directive';\n\n@NgModule({\n  declarations: [FroalaViewDirective],\n  exports: [FroalaViewDirective]\n})\nexport class FroalaViewModule {\n  public static forRoot(): ModuleWithProviders<FroalaViewModule> {\n    return {ngModule: FroalaViewModule, providers: []};\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FroalaEditorModule } from './editor/editor.module';\nimport { FroalaViewModule } from './view/view.module';\n\n@NgModule({\n  imports: [\n    FroalaEditorModule.forRoot(),\n    FroalaViewModule.forRoot()\n  ],\n  exports: [\n    FroalaEditorModule,\n    FroalaViewModule\n  ]\n})\nexport class FERootModule {\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}