{"version":3,"file":"app-18e79363.xxxxxxxx.bundle.js","mappings":"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","sources":["webpack://iadviser/./src/components/ia-html-editor/doc-template-modal.html","webpack://iadviser/./src/components/ia-html-editor/ia-html-editor.html","webpack://iadviser/./src/components/ia-html-editor/template-modal.html","webpack://iadviser/./src/components/ia-html-editor/api.ts","webpack://iadviser/./src/components/ia-html-editor/doc-template-modal.ts","webpack://iadviser/./src/components/ia-html-editor/ia-html-editor.ts","webpack://iadviser/./src/components/ia-html-editor/styles.css?cb9f","webpack://iadviser/./src/components/ia-html-editor/maxchars-plugin.ts","webpack://iadviser/./src/components/ia-html-editor/template-modal.ts"],"sourcesContent":["// Module\nvar code = \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n ${t.title}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n \\r\\n \\r\\n\\r\\n\";\n// Exports\nexport default code;","// Module\nvar code = \"\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n ${t.title}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n\\r\\n\";\n// Exports\nexport default code;","/* istanbul ignore file */\r\n\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { HttpClient, json } from 'aurelia-fetch-client';\r\nimport { environment } from 'environment';\r\nimport { IaHtmlEditorContext } from './ia-html-editor';\r\n\r\nexport interface Template {\r\n id: number;\r\n name: string;\r\n content?: string;\r\n templateType: number;\r\n}\r\n\r\nexport interface TemplatesWithCategories {\r\n category: string;\r\n templates: Template[];\r\n}\r\n\r\nexport interface Templates {\r\n templatesWithCategories: TemplatesWithCategories[];\r\n templateType: number;\r\n}\r\n\r\n@autoinject()\r\nexport class Api {\r\n constructor(private http: HttpClient) { }\r\n\r\n public async getTemplates(templateType: IaHtmlEditorContext): Promise {\r\n if (templateType === IaHtmlEditorContext.Default) {\r\n return;\r\n }\r\n\r\n const endpoint = environment.templateEndpoints.getTemplates;\r\n const uri = endpoint.uri([templateType]);\r\n\r\n const result = await this.http.fetch(uri, { method: endpoint.method });\r\n\r\n if (result.ok) {\r\n return result.json();\r\n }\r\n }\r\n\r\n public async getDocTemplates(clientId: number, folderType: string, entityId: number): Promise {\r\n const endpoint = environment.documentManagement.document.getTemplates;\r\n const uri = endpoint.uri([clientId, folderType, entityId]);\r\n\r\n const result = await this.http.fetch(uri, { method: endpoint.method });\r\n\r\n if (result.ok) {\r\n return result.json();\r\n }\r\n }\r\n\r\n public async getDocTemplate(clientId: number, templateKey: string, entityId: number): Promise {\r\n const endpoint = environment.documentManagement.document.getTemplate;\r\n const uri = endpoint.uri([clientId, templateKey]);\r\n\r\n const result = await this.http.fetch(uri, { method: endpoint.method, body: json({entityId}) });\r\n\r\n if (result.ok) {\r\n return result.text();\r\n }\r\n }\r\n\r\n public async getTemplateHtml(templateType: IaHtmlEditorContext, templateId: number, returnResponse = true): Promise {\r\n if (templateType === IaHtmlEditorContext.Default) return;\r\n\r\n const endpoint = environment.templateEndpoints.getTemplateHtml;\r\n const uri = endpoint.uri([templateType, templateId]);\r\n\r\n const result = await this.http.fetch(uri, { method: endpoint.method });\r\n if (returnResponse) return result;\r\n if (result.ok) { return result.text(); }\r\n }\r\n\r\n public async getTemplateHtmlWithMetaData(templateType: IaHtmlEditorContext, templateId: number): Promise {\r\n if (templateType === IaHtmlEditorContext.Default) return;\r\n\r\n const endpoint = environment.templateEndpoints.getTemplateHtmlWithMetaData;\r\n const uri = endpoint.uri([templateType, templateId]);\r\n\r\n const result = await this.http.fetch(uri, { method: endpoint.method });\r\n if (result.ok) { return result.json(); }\r\n }\r\n\r\n public async convertHtmlToPdf(html: string, addWatermark = false): Promise {\r\n if (!html) return;\r\n const endpoint = environment.convertEndpoints.htmlToPdf;\r\n const uri = endpoint.uri([addWatermark]);\r\n\r\n const headers = new Headers();\r\n headers.append('Accept', 'application/pdf');\r\n\r\n const result = await this.http.fetch(uri, {\r\n method: endpoint.method,\r\n body: JSON.stringify(html),\r\n headers: headers });\r\n\r\n const pdfBlob = await result.blob();\r\n return pdfBlob;\r\n }\r\n}\r\n","import { ModalService } from 'components/modal/modal-service';\r\nimport { PLATFORM, autoinject, useView } from 'aurelia-framework';\r\nimport { observable } from 'aurelia-typed-observable-plugin';\r\nimport { Api } from './api';\r\n\r\nimport 'select2/dist/js/select2';\r\n\r\nPLATFORM.moduleName('./doc-template-modal');\r\n\r\n@autoinject()\r\n@useView(PLATFORM.moduleName('components/ia-html-editor/doc-template-modal.html'))\r\nexport class DocTemplateModal {\r\n private templates = [];\r\n private select: HTMLSelectElement;\r\n private editor;\r\n private contentCss = '';\r\n private iframeSrc;\r\n private clientId: number;\r\n private entityId: number;\r\n\r\n @observable() template;\r\n\r\n private iframeContainer: HTMLDivElement;\r\n\r\n constructor(private modal: ModalService, private api: Api) {\r\n\r\n }\r\n\r\n activate(data) {\r\n this.editor = data.editor;\r\n this.templates = data.templates;\r\n\r\n if (data?.model?.clientId) {\r\n this.clientId = parseInt(data.model.clientId);\r\n }\r\n\r\n this.entityId = !data.model.document ? data.model.currentFolder.entityId : data.model.document.entityId;\r\n\r\n if (this.editor?.contentCSS) {\r\n for (const url of this.editor.contentCSS) {\r\n this.contentCss += ``;\r\n }\r\n }\r\n }\r\n\r\n attached() {\r\n // @ts-ignore\r\n $('.templateModalSelect').select2().on('select2:select', () => {\r\n const event = new Event('change');\r\n this.select.dispatchEvent(event);\r\n });\r\n }\r\n\r\n templateChanged(template) {\r\n if (template.key !== null) {\r\n this.loadTemplate(template.key);\r\n } else {\r\n this.updatePreview('');\r\n }\r\n }\r\n\r\n async loadTemplate(key: string) {\r\n const template = await this.api.getDocTemplate(this.clientId, key, this.entityId);\r\n\r\n const templateDom = new DOMParser().parseFromString((template)\r\n .replace(/(?:\\\\r\\\\n|\\\\r|\\\\n)/g, '')\r\n .replace(/\\\\\"/g, '\"'),\r\n 'text/html'\r\n );\r\n\r\n const templateParsed = templateDom.querySelector('section').innerHTML;\r\n\r\n if (templateParsed) {\r\n this.updatePreview(templateParsed);\r\n }\r\n }\r\n\r\n updatePreview(html: string) {\r\n const iframe = document.createElement('iframe');\r\n\r\n iframe.frameBorder = 'none';\r\n\r\n const finalHtml = `\r\n \r\n \r\n ${this.contentCss}\r\n ${html}\r\n `;\r\n\r\n const blob = new Blob([finalHtml], {type: 'text/html'});\r\n\r\n iframe.src = window.URL.createObjectURL(blob);\r\n\r\n if (this.iframeContainer) {\r\n this.iframeContainer.innerHTML = '';\r\n this.iframeContainer.appendChild(iframe);\r\n }\r\n\r\n this.iframeSrc = html;\r\n }\r\n\r\n replaceTemplateValues(html, templateValues) {\r\n templateValues.forEach((v, k) => {\r\n if (typeof v === 'function') {\r\n v = v(k);\r\n }\r\n html = html.replace(new RegExp('\\\\{\\\\$' + k + '\\\\}', 'g'), v);\r\n });\r\n }\r\n\r\n insertTemplate(html) {\r\n let el;\r\n const dom = this.editor.dom;\r\n\r\n el = dom.create('div', null, html);\r\n const n = dom.select('.mceTmpl', el);\r\n\r\n if (n && n.length > 0) {\r\n el = dom.create('div', null);\r\n el.appendChild(n[0].cloneNode(true));\r\n }\r\n\r\n this.editor.insertContent(el.innerHTML);\r\n this.editor.addVisual();\r\n }\r\n\r\n cancel() {\r\n this.modal.hide('secondaryModal');\r\n }\r\n\r\n save() {\r\n this.insertTemplate(this.iframeSrc);\r\n\r\n this.modal.hide('secondaryModal');\r\n }\r\n}\r\n","/* istanbul ignore file */\r\n\r\nimport { FolderType } from 'components/document-management/dtos';\r\nimport { DocTemplateModal } from './doc-template-modal';\r\nimport { TemplateModal } from './template-modal';\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { ModalService } from 'components/modal/modal-service';\r\nimport { DOM } from 'aurelia-pal';\r\nimport { generateGuidString } from 'resources/utilities/insecure-guid';\r\nimport { customElement, TaskQueue, bindingMode, autoinject, computedFrom, PLATFORM } from 'aurelia-framework';\r\nimport { bindable } from 'aurelia-typed-observable-plugin';\r\nimport defaultsDeep from 'lodash/defaultsDeep';\r\nimport { LookupDataService } from 'resources/services/lookup-data';\r\nimport { CountryCode } from 'libphonenumber-js';\r\nimport { Api } from './api';\r\nimport { AppRouter } from 'aurelia-router';\r\n\r\nimport styles from './styles.css';\r\n\r\ndeclare const tinymce: any;\r\n\r\n// import tinymce from 'tinymce';\r\n//import 'tinymce/themes/silver';\r\n// import 'tinymce/plugins/pagebreak';\r\nimport 'resources/vendor/tinymce/template.js';\r\n// import 'tinymce/plugins/lists';\r\n// import 'tinymce/plugins/advlist';\r\n// import 'tinymce/plugins/autolink';\r\n// import 'tinymce/plugins/fullscreen';\r\n// import 'tinymce/plugins/help';\r\n// import 'tinymce/plugins/hr';\r\n// import 'tinymce/plugins/image';\r\n// import 'tinymce/plugins/link';\r\n// import 'tinymce/plugins/paste';\r\n// import 'tinymce/plugins/quickbars';\r\n// import 'tinymce/plugins/searchreplace';\r\n// import 'tinymce/plugins/table';\r\n// import 'tinymce/plugins/wordcount';\r\nimport './maxchars-plugin';\r\nimport { getAppClient } from 'resources/parse-jwt';\r\n\r\nexport interface IaHtmlEditorSettings {\r\n pagebreak_separator?: string;\r\n pagebreak_split_block?: boolean;\r\n contextmenu?: boolean | string;\r\n templates?: IaHtmlEditorTemplate[] | string;\r\n template_cdate_classes?: string;\r\n template_mdate_classes?: string;\r\n template_selected_content_classes?: string;\r\n template_cdate_format?: string;\r\n template_mdate_format?: string;\r\n template_replace_values?: Record;\r\n template_popup_height?: string;\r\n template_popup_width?: string;\r\n quickbars_selection_toolbar?: boolean | string;\r\n quickbars_insert_toolbar?: boolean | string;\r\n paste_as_text?: boolean;\r\n modal?: any;\r\n ea?: EventAggregator;\r\n height?: number;\r\n width?: string;\r\n toolbar?: string[];\r\n content_css?: any;\r\n init_instance_callback?: any;\r\n selector?: any;\r\n inline?: any;\r\n plugins?: string[];\r\n menubar?: string;\r\n setup?: any;\r\n skin_url?: string;\r\n base_url?: string;\r\n branding?: boolean;\r\n statusbar?: boolean;\r\n spellchecker_language?: string;\r\n browser_spellcheck?: boolean;\r\n body_class?: string;\r\n images_dataimg_filter?: any;\r\n}\r\n\r\nexport enum IaHtmlEditorContext {\r\n AdditionalPage = 'additionalPage',\r\n DocManagement = 'docManagement',\r\n ClientAdvice = 'clientAdvice',\r\n Soa = 'soa',\r\n RelevantRelationships = 'relevantRelationships',\r\n RemunerationDetails = 'remunerationDetails',\r\n TermsOfEngagement = 'termsOfEngagement',\r\n Default = 'default',\r\n}\r\n\r\nexport interface IaHtmlEditorTemplate {\r\n title: string;\r\n description: string;\r\n content?: string;\r\n url?: string;\r\n}\r\n\r\n@autoinject()\r\n@customElement('ia-html-editor')\r\nexport class IaHtmlEditor {\r\n @bindable({ defaultBindingMode: bindingMode.oneTime }) public id: string = generateGuidString();\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) public content = '';\r\n @bindable public settings: IaHtmlEditorSettings = {};\r\n @bindable public context: IaHtmlEditorContext = IaHtmlEditorContext.Default;\r\n @bindable.booleanAttr public disabled = false;\r\n @bindable.booleanAttr public inline = false;\r\n @bindable.booleanAttr public refreshContentOnce = false;\r\n @bindable.booleanAttr public enableSource = false;\r\n @bindable public cssClasses = '';\r\n @bindable public maxChars = null;\r\n @bindable model = {};\r\n\r\n private styles = styles;\r\n\r\n @computedFrom('appClient', 'templateGeneratorHost')\r\n public get styleGuideCssUrl() {\r\n return `${this.templateGeneratorHost}/content/document_css/${this.appClient.toLowerCase()}_document.css`;\r\n }\r\n\r\n @computedFrom('_templateGeneratorHost')\r\n public get templateGeneratorHost() {\r\n return this._templateGeneratorHost || this.defaultTemplateGeneratorHost;\r\n }\r\n\r\n public editor = null;\r\n protected appClient: CountryCode = 'AU';\r\n protected readonly inlineModeStyleGuideCssUrl = '';\r\n protected readonly defaultTemplateGeneratorHost = 'https://prod1-templategenerator.azurewebsites.net';\r\n private _templateGeneratorHost = '';\r\n private openEventListener;\r\n\r\n protected readonly defaultSettings: IaHtmlEditorSettings = {\r\n plugins: [\r\n 'pagebreak',\r\n 'template',\r\n 'lists',\r\n 'advlist',\r\n 'autolink',\r\n 'fullscreen',\r\n 'help',\r\n 'hr',\r\n 'link',\r\n 'quickbars',\r\n 'searchreplace',\r\n 'table',\r\n 'wordcount',\r\n 'maxchars',\r\n 'tinymcespellchecker',\r\n 'powerpaste',\r\n ],\r\n menubar: 'edit view insert format tools table help',\r\n toolbar: [\r\n 'formatselect fontselect fontsizeselect | bold italic underline | alignleft aligncenter alignright alignjustify | outdent indent | bullist numlist checklist | ',\r\n 'undo redo | cut copy paste | selectall | remove | quickimage | pdfpreview | template | table | link | pagebreak | fullscreen',\r\n ] as string[],\r\n setup: (editor) => {\r\n this.editorSetup(editor);\r\n },\r\n contextmenu: 'spellchecker inserttable pagebreak template link cut copy paste | selectall',\r\n quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable',\r\n quickbars_insert_toolbar: false,\r\n content_css: ['/skins/content/document/content.min.css'],\r\n // skin_url: '/skins/ui/oxide',\r\n // base_url: `${window.location.origin}`,\r\n branding: false,\r\n inline: false,\r\n statusbar: true,\r\n spellchecker_language: 'en_uk',\r\n browser_spellcheck: true,\r\n body_class: 'ia-html-editor',\r\n pagebreak_separator: '',\r\n pagebreak_split_block: false,\r\n images_dataimg_filter: function (img) {\r\n return img.hasAttribute('internal-blob');\r\n },\r\n };\r\n\r\n public constructor(\r\n private taskQueue: TaskQueue,\r\n private api: Api,\r\n private lookups: LookupDataService,\r\n private element: Element,\r\n private modal: ModalService,\r\n private ea: EventAggregator,\r\n private router: AppRouter,\r\n ) {}\r\n\r\n bind() {\r\n this.openEventListener = this.ea.subscribe(`templateDialogOpen-${this.id}`, () => {\r\n if (!this.router.currentInstruction.fragment.includes('/documents')) {\r\n this.modal.show().content(TemplateModal, { templates: this.settings.templates, editor: this.editor, model: this.model })\r\n .withOptions({type: 'wide-lg'})\r\n .styles(this.styles);\r\n } else {\r\n this.modal.show('secondaryModal').content(DocTemplateModal, { templates: this.settings.templates, editor: this.editor, model: this.model })\r\n .withOptions({type: 'wide-lg'})\r\n .styles(this.styles);\r\n }\r\n });\r\n }\r\n\r\n unbind() {\r\n this.openEventListener.dispose();\r\n }\r\n\r\n async attached() {\r\n this.taskQueue.queueMicroTask(async () => {\r\n if (!document.getElementById(this.id)) return;\r\n\r\n this.appClient = getAppClient();\r\n const apiEndpoints = await this.lookups.apiEndpoints();\r\n this._templateGeneratorHost = apiEndpoints.templateGeneratorHost;\r\n\r\n await this.configureEditorBasedOnContext();\r\n if (!this.editor) return;\r\n\r\n const exists: HTMLDivElement = this.element.querySelector('.tox-tinymce');\r\n if (exists) {\r\n exists.style.display = '';\r\n }\r\n\r\n this.enableOrDisableEditor(this.disabled);\r\n });\r\n }\r\n\r\n public detached() {\r\n if (!this.editor) return;\r\n try {\r\n // links cause spellcheck plugin to throw Illegal invocation error when editor is destroyed.\r\n // disable spellcheck before destroying\r\n this.editor.execCommand('mceSpellcheckDisable');\r\n this.editor.destroy();\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n }\r\n\r\n public refreshContent() {\r\n if (!this.editor || !this.taskQueue) return;\r\n\r\n this.taskQueue.queueMicroTask(() => {\r\n this.editor.setContent(this.content || '', { no_events: true });\r\n });\r\n }\r\n\r\n protected disabledChanged(disabled: boolean) {\r\n this.enableOrDisableEditor(disabled);\r\n }\r\n\r\n public async configureEditorBasedOnContext() {\r\n if (!this.context) {\r\n return;\r\n }\r\n\r\n switch (this.context) {\r\n case 'additionalPage':\r\n case 'soa':\r\n case 'relevantRelationships':\r\n case 'clientAdvice':\r\n case 'termsOfEngagement':\r\n this.settings.templates = await this.getTemplates(this.context);\r\n this.settings.modal = this.modal;\r\n this.settings.ea = this.ea;\r\n break;\r\n case 'docManagement':\r\n this.settings.templates = (await this.getDocTemplates(this.model)) as any;\r\n this.settings.modal = this.modal;\r\n this.settings.ea = this.ea;\r\n break;\r\n case 'remunerationDetails':\r\n case 'default':\r\n default:\r\n this.settings.templates = null;\r\n this.settings.modal = this.modal;\r\n this.settings.ea = this.ea;\r\n }\r\n\r\n this.settings.inline = this.inline;\r\n\r\n if (this.settings.inline || this.defaultSettings.inline) {\r\n this.settings.content_css = this.inlineModeStyleGuideCssUrl;\r\n this.defaultSettings.toolbar[1] = this.defaultSettings.toolbar[1].replace('| pdfpreview | template ', '');\r\n }\r\n\r\n if(this.enableSource){\r\n this.defaultSettings.plugins.push('code');\r\n }\r\n\r\n if (this.context === IaHtmlEditorContext.Default){\r\n this.defaultSettings.toolbar[1] = this.defaultSettings.toolbar[1].replace('| template ', '');\r\n this.defaultSettings.contextmenu = this.defaultSettings.contextmenu.toString().replace('template ', '');\r\n };\r\n\r\n this.settings.selector = `#${this.id}`;\r\n\r\n defaultsDeep(this.settings, this.defaultSettings);\r\n\r\n if (!this.settings.inline && Array.isArray(this.settings.content_css)) {\r\n this.settings.content_css.push(this.styleGuideCssUrl);\r\n }\r\n this.settings.init_instance_callback = this.onEditorBootstrap;\r\n\r\n tinymce.init(this.settings);\r\n this.editor = tinymce.get(this.id);\r\n }\r\n\r\n protected editorSetup = (editor) => {\r\n const noPreviewButtonForContexts = [\r\n IaHtmlEditorContext.Soa,\r\n IaHtmlEditorContext.RelevantRelationships,\r\n IaHtmlEditorContext.RemunerationDetails,\r\n ];\r\n\r\n if (noPreviewButtonForContexts.includes(this.context) || editor.settings.inline) return;\r\n\r\n if (this.maxChars) {\r\n (editor as any).maxChars = parseInt(this.maxChars);\r\n }\r\n\r\n (editor as any).ui.registry.addButton('pdfpreview', {\r\n icon: 'preview',\r\n tooltip: 'PDF Preview',\r\n disabled: false,\r\n\r\n onAction: async () => {\r\n let header = '';\r\n let title = '';\r\n\r\n if (this.context === IaHtmlEditorContext.AdditionalPage) {\r\n header = 'Additional Policy Information';\r\n title = 'Additional Page Preview';\r\n }\r\n\r\n if (this.context === IaHtmlEditorContext.ClientAdvice) {\r\n header = 'Advice and Recommendations';\r\n title = 'Advice and Recommendations Preview';\r\n }\r\n\r\n const styledContent = `\r\n \r\n ${header}\r\n ${tinymce.activeEditor.getContent()}\r\n `;\r\n\r\n const pdfBlob = await this.api.convertHtmlToPdf(styledContent, true);\r\n if (!pdfBlob) return;\r\n\r\n const pdfBlobUrl = URL.createObjectURL(pdfBlob);\r\n\r\n const routeFragment = this.router.generate('pdfPreview', { title, url: pdfBlobUrl });\r\n\r\n const openPreview = PLATFORM.global.open(routeFragment, '_blank');\r\n if (!openPreview) {\r\n console.log('Additional page HTML preview popup blocked');\r\n }\r\n },\r\n\r\n onSetup: (buttonApi: any) => {\r\n const editorEventCallback = () => {\r\n if (this.context !== IaHtmlEditorContext.ClientAdvice) {\r\n buttonApi.setDisabled(!this.content);\r\n }\r\n };\r\n editor.on('NodeChange keyup', editorEventCallback);\r\n return () => {\r\n editor.off('NodeChange keyup', editorEventCallback);\r\n };\r\n },\r\n });\r\n };\r\n\r\n protected onEditorBootstrap = (editor) => {\r\n // ensure spellchecker is enabled by default\r\n this.editor.execCommand('mceSpellcheckEnable');\r\n\r\n this.editor.setContent(this.content || '', { no_events: true });\r\n\r\n editor.on('change keyup', () => {\r\n if (!this.editor) return;\r\n this.content = this.editor.getContent();\r\n });\r\n\r\n const initEvent = new CustomEvent('init', {\r\n bubbles: true,\r\n });\r\n\r\n this.element.dispatchEvent(initEvent);\r\n };\r\n\r\n protected contentChanged(content: string, oldVal) {\r\n if (!this.editor) return;\r\n\r\n if (!content) {\r\n this.editor.setContent('', { no_events: true });\r\n } else if (typeof oldVal === 'undefined') {\r\n this.editor.setContent(this.content, { no_events: true });\r\n }\r\n\r\n if (this.refreshContentOnce && content) {\r\n this.refreshContent();\r\n this.refreshContentOnce = false;\r\n }\r\n\r\n this.propagateChangeEvent();\r\n }\r\n\r\n protected propagateChangeEvent() {\r\n const changeEvent = DOM.createCustomEvent('change', {\r\n bubbles: true,\r\n cancelable: true,\r\n });\r\n\r\n this.element.dispatchEvent(changeEvent);\r\n }\r\n\r\n protected async getTemplates(templateType: IaHtmlEditorContext): Promise {\r\n const apiTemplates = await this.api.getTemplates(templateType);\r\n const templates: IaHtmlEditorTemplate[] = [];\r\n\r\n if (!apiTemplates) {\r\n return Promise.reject(new Error('API templates not loaded'));\r\n }\r\n\r\n templates.push({ title: 'Please select...', description: '', content: null });\r\n\r\n apiTemplates.templatesWithCategories?.map((tc) => {\r\n tc.templates.map(async (t) => {\r\n templates.push({\r\n title: `${tc.category}: ${t.name}`,\r\n description: '',\r\n content: await this.getTemplateHtmlContent(t.id, templateType),\r\n });\r\n });\r\n });\r\n\r\n return Promise.resolve(templates);\r\n }\r\n\r\n protected async getDocTemplates(model: any) {\r\n const folderType = !model.document ? model.currentFolder.folderType : model.document.entityTypeId;\r\n let apiTemplates;\r\n\r\n if (!model.document) {\r\n apiTemplates = await this.api.getDocTemplates(\r\n model.clientId,\r\n FolderType[folderType],\r\n model.currentFolder.entityId,\r\n );\r\n } else {\r\n apiTemplates = await this.api.getDocTemplates(model.clientId, FolderType[folderType], model.document.entityId);\r\n }\r\n\r\n const templates = [];\r\n\r\n if (!apiTemplates) {\r\n return Promise.reject(new Error('API templates not loaded'));\r\n }\r\n\r\n templates.push({ title: 'Please select...', group: null, key: null });\r\n\r\n for (const template of apiTemplates) {\r\n templates.push({ title: template.templateName, group: template.groupId, key: template.templateKey });\r\n }\r\n\r\n return Promise.resolve(templates);\r\n }\r\n\r\n private async getTemplateHtmlContent(templateId: number, templateType: IaHtmlEditorContext): Promise {\r\n if (templateId <= 0) return;\r\n\r\n const templateKey = `${templateType}Template`;\r\n let templateString: string = this.lookups.getRefDataFromLocalStorage(templateKey, templateId);\r\n\r\n if (!templateString) {\r\n const response = (await this.api.getTemplateHtml(templateType, templateId)) as Response;\r\n if (!response.ok) return;\r\n\r\n const templateDom = new DOMParser().parseFromString(\r\n (await response.text()).replace(/(?:\\\\r\\\\n|\\\\r|\\\\n)/g, '').replace(/\\\\\"/g, '\"'),\r\n 'text/html',\r\n );\r\n\r\n templateString = templateDom.querySelector('section.template')?.outerHTML || '';\r\n\r\n // TODO: Advice templates are not returning section elements with a template class\r\n // like they are for other template types. This is a workaround to get the content,\r\n // but Matt probably needs to fix this.\r\n if (templateString === '') {\r\n templateString = templateDom.querySelector('section:first-child')?.outerHTML || '';\r\n }\r\n\r\n this.lookups.saveRefDataToLocalStorage(templateKey, response, templateString, templateId);\r\n }\r\n return templateString;\r\n }\r\n\r\n private enableOrDisableEditor(disabled: boolean) {\r\n if (!this.editor) return;\r\n disabled ? this.editor.setMode('readonly') : this.editor.setMode('design');\r\n }\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"iframe-container\":\"iframe-container____aia4B\"};","/* istanbul ignore file */\r\n\r\ndeclare const tinymce: any;\r\n\r\ntinymce.PluginManager.add('maxchars', function(editor) {\r\n editor.maxChars = editor.maxChars || 999999999999999;\r\n\r\n let label = null;\r\n\r\n function init() {\r\n editor.contentStyles.push(`.maxchars { color: red !important; }`);\r\n\r\n const statusbar = jQuery('.tox-statusbar__text-container');\r\n\r\n if (statusbar) {\r\n statusbar.append(``);\r\n\r\n label = statusbar.find('#maxcharslabel');\r\n }\r\n\r\n updateStyle(new Event('keypress'));\r\n }\r\n\r\n function updateMsg(show) {\r\n if (!label) {\r\n return;\r\n }\r\n\r\n const msg = show ? editor.maxChars + ` chars max` : '';\r\n label.text(msg);\r\n }\r\n\r\n function updateStyle(e: Event) {\r\n if (typeof editor.maxChars === 'undefined' || editor.maxChars === null) {\r\n return true;\r\n }\r\n\r\n const content = editor.getContent({\r\n format: 'text'\r\n });\r\n\r\n const $body = (editor as any).$('.mce-content-body');\r\n\r\n if (content.length + 1 > editor.maxChars) {\r\n $body.addClass('maxchars');\r\n updateMsg(true);\r\n e.stopPropagation();\r\n e.preventDefault();\r\n return false;\r\n } else {\r\n $body.removeClass('maxchars');\r\n updateMsg(false);\r\n return true;\r\n }\r\n }\r\n\r\n editor.on('init', init);\r\n editor.on('change KeyDown', updateStyle);\r\n});\r\n","/* istanbul ignore file */\r\n\r\nimport { ModalService } from 'components/modal/modal-service';\r\nimport { PLATFORM, autoinject, useView } from 'aurelia-framework';\r\nimport { observable } from 'aurelia-typed-observable-plugin';\r\n\r\nimport 'select2/dist/js/select2';\r\n\r\nPLATFORM.moduleName('./template-modal');\r\n\r\n@autoinject()\r\n@useView(PLATFORM.moduleName('components/ia-html-editor/template-modal.html'))\r\nexport class TemplateModal {\r\n private templates = [];\r\n private select: HTMLSelectElement;\r\n private editor;\r\n private contentCss = '';\r\n private iframeSrc;\r\n\r\n @observable() template;\r\n\r\n private iframeContainer: HTMLDivElement;\r\n\r\n constructor(private modal: ModalService) {\r\n\r\n }\r\n\r\n activate(data) {\r\n this.editor = data.editor;\r\n this.templates = data.templates;\r\n\r\n if (this.editor?.contentCSS) {\r\n for (const url of this.editor.contentCSS) {\r\n this.contentCss += ``;\r\n }\r\n }\r\n }\r\n\r\n attached() {\r\n // @ts-ignore\r\n $('.templateModalSelect').select2().on('select2:select', () => {\r\n const event = new Event('change');\r\n this.select.dispatchEvent(event);\r\n });\r\n }\r\n\r\n templateChanged(template) {\r\n if (template.content !== null && template.content !== '') {\r\n this.updatePreview(template.content);\r\n } else {\r\n this.updatePreview('');\r\n }\r\n }\r\n\r\n updatePreview(html: string) {\r\n const iframe = document.createElement('iframe');\r\n\r\n iframe.frameBorder = 'none';\r\n\r\n const finalHtml = `\r\n \r\n \r\n ${this.contentCss}\r\n ${html}\r\n `;\r\n\r\n iframe.src = `data:text/html;charset=utf-8,${encodeURIComponent(finalHtml)}`;\r\n\r\n this.iframeContainer.innerHTML = '';\r\n this.iframeContainer.appendChild(iframe);\r\n\r\n this.iframeSrc = html;\r\n }\r\n\r\n replaceTemplateValues(html, templateValues) {\r\n templateValues.forEach((v, k) => {\r\n if (typeof v === 'function') {\r\n v = v(k);\r\n }\r\n html = html.replace(new RegExp('\\\\{\\\\$' + k + '\\\\}', 'g'), v);\r\n });\r\n }\r\n\r\n insertTemplate(html) {\r\n let el;\r\n const dom = this.editor.dom;\r\n\r\n el = dom.create('div', null, html);\r\n const n = dom.select('.mceTmpl', el);\r\n\r\n if (n && n.length > 0) {\r\n el = dom.create('div', null);\r\n el.appendChild(n[0].cloneNode(true));\r\n }\r\n\r\n this.editor.insertContent(el.innerHTML);\r\n this.editor.addVisual();\r\n this.editor.fire('change');\r\n }\r\n\r\n cancel() {\r\n this.modal.hide();\r\n }\r\n\r\n save() {\r\n this.insertTemplate(this.iframeSrc);\r\n\r\n this.modal.hide();\r\n }\r\n}\r\n"],"names":["http","getTemplates","templateType","IaHtmlEditorContext","endpoint","uri","this","fetch","method","result","ok","json","getDocTemplates","clientId","folderType","entityId","getDocTemplate","templateKey","body","text","getTemplateHtml","templateId","returnResponse","getTemplateHtmlWithMetaData","convertHtmlToPdf","html","addWatermark","headers","Headers","append","JSON","stringify","blob","autoinject","Api","modal","api","templates","contentCss","activate","data","editor","model","parseInt","document","currentFolder","contentCSS","url","documentBaseURI","toAbsolute","attached","$","select2","on","event","Event","select","dispatchEvent","templateChanged","template","key","loadTemplate","updatePreview","templateDom","DOMParser","parseFromString","replace","templateParsed","querySelector","innerHTML","iframe","createElement","frameBorder","finalHtml","Blob","type","src","window","URL","createObjectURL","iframeContainer","appendChild","iframeSrc","replaceTemplateValues","templateValues","forEach","v","k","RegExp","insertTemplate","el","dom","create","n","length","cloneNode","insertContent","addVisual","cancel","hide","save","useView","DocTemplateModal","taskQueue","lookups","element","ea","router","id","content","settings","context","Default","disabled","inline","refreshContentOnce","enableSource","cssClasses","maxChars","styles","appClient","inlineModeStyleGuideCssUrl","defaultTemplateGeneratorHost","_templateGeneratorHost","defaultSettings","plugins","menubar","toolbar","setup","editorSetup","contextmenu","quickbars_selection_toolbar","quickbars_insert_toolbar","content_css","branding","statusbar","spellchecker_language","browser_spellcheck","body_class","pagebreak_separator","pagebreak_split_block","images_dataimg_filter","img","hasAttribute","Soa","RelevantRelationships","RemunerationDetails","includes","ui","registry","addButton","icon","tooltip","onAction","header","title","AdditionalPage","ClientAdvice","styledContent","styleGuideCssUrl","tinymce","activeEditor","getContent","pdfBlob","pdfBlobUrl","routeFragment","generate","PLATFORM","console","log","onSetup","buttonApi","editorEventCallback","setDisabled","off","onEditorBootstrap","execCommand","setContent","no_events","initEvent","CustomEvent","bubbles","templateGeneratorHost","toLowerCase","bind","openEventListener","subscribe","currentInstruction","fragment","show","withOptions","TemplateModal","unbind","dispose","queueMicroTask","getElementById","apiEndpoints","configureEditorBasedOnContext","exists","style","display","enableOrDisableEditor","detached","destroy","error","refreshContent","disabledChanged","push","toString","selector","Array","isArray","init_instance_callback","init","get","contentChanged","oldVal","propagateChangeEvent","changeEvent","cancelable","apiTemplates","description","templatesWithCategories","map","tc","t","category","name","getTemplateHtmlContent","Promise","resolve","reject","Error","entityTypeId","group","templateName","groupId","templateString","getRefDataFromLocalStorage","response","outerHTML","saveRefDataToLocalStorage","setMode","defaultBindingMode","bindingMode","computedFrom","customElement","TaskQueue","Element","EventAggregator","IaHtmlEditor","PluginManager","add","label","updateMsg","msg","updateStyle","e","format","$body","addClass","stopPropagation","preventDefault","removeClass","contentStyles","jQuery","find","encodeURIComponent","fire"],"sourceRoot":""}