{"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","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 { generateHtmlIdGuid } 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\nimport 'tinymce/plugins/image';\r\nimport '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 { getAppClientInstance, getAppClientType } 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 suffix?: 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 Task = 'task',\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 = generateHtmlIdGuid();\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('appClientType', 'appClientInstance', 'templateGeneratorHost')\r\n public get styleGuideCssUrl() {\r\n if (this.appClientInstance == 'IA') {\r\n return `${this.templateGeneratorHost}/content/document_css/${this.appClientType.toLowerCase()}_document.css`;\r\n } else {\r\n return `${this.templateGeneratorHost}/content/styles/${this.appClientType.toLowerCase()}-${this.appClientInstance.toLowerCase()}.css`;\r\n }\r\n \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 appClientType: CountryCode = 'AU';\r\n protected appClientInstance;\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 'image',\r\n 'link',\r\n 'quickbars',\r\n 'searchreplace',\r\n 'table',\r\n 'wordcount',\r\n 'maxchars',\r\n 'paste',\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 | localimage | pdfpreview | template | table | link image | pagebreak | fullscreen',\r\n ] as string[],\r\n setup: (editor) => {\r\n this.editorSetup(editor);\r\n },\r\n contextmenu: '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 suffix: '.min',\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('secondaryModal').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.appClientType = getAppClientType();\r\n this.appClientInstance = getAppClientInstance();\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 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 case 'task':\r\n try {\r\n this.settings.templates = await this.getTemplates(this.context);\r\n } catch (error) {\r\n console.error('[IaHtmlEditor] Failed to load templates', error);\r\n this.settings.templates = null;\r\n }\r\n this.settings.modal = this.modal;\r\n this.settings.ea = this.ea;\r\n break;\r\n case 'docManagement':\r\n try {\r\n this.settings.templates = (await this.getDocTemplates(this.model)) as any;\r\n } catch (error) {\r\n console.error('[IaHtmlEditor] Failed to load document templates', error);\r\n this.settings.templates = null;\r\n }\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 // Remove insert template when context is Default or when templates are not set - followed TinyMce docs, little overkill?\r\n if (this.context === IaHtmlEditorContext.Default || !this.settings.templates){\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 const templatePluginIndex = this.defaultSettings.plugins.indexOf('template');\r\n if (templatePluginIndex > -1) {\r\n this.defaultSettings.plugins.splice(templatePluginIndex, 1);\r\n }\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 try {\r\n const editors = await tinymce.init(this.settings);\r\n this.editor = tinymce.get(this.id) || editors?.[0] || this.editor;\r\n } catch (error) {\r\n console.error('[IaHtmlEditor] TinyMCE failed to initialise', error, this.settings);\r\n }\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 \r\n ${header}\r\n ${tinymce.activeEditor.getContent()}\r\n \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 this.editor = editor;\r\n 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 setTimeout(() => {\r\n if (this.editor) {\r\n this.editor.focus();\r\n }\r\n }, 250);\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('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"],"names":["http","getTemplates","templateType","Promise","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","appClientType","inlineModeStyleGuideCssUrl","defaultTemplateGeneratorHost","_templateGeneratorHost","defaultSettings","plugins","menubar","toolbar","setup","editorSetup","contextmenu","quickbars_selection_toolbar","quickbars_insert_toolbar","content_css","skin_url","base_url","location","origin","suffix","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","setContent","no_events","initEvent","CustomEvent","bubbles","setTimeout","focus","appClientInstance","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","templatePluginIndex","indexOf","splice","selector","Array","isArray","init_instance_callback","init","editors","get","contentChanged","oldVal","propagateChangeEvent","changeEvent","cancelable","apiTemplates","description","templatesWithCategories","map","tc","t","category","name","getTemplateHtmlContent","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":""}