{"version":3,"file":"footer.js","sources":["../../src/modules/exportToWord.ts","../../src/footer.ts"],"sourcesContent":["import { isProdSite } from './site.js';\nimport { hasPreviewPage } from './previewUtil.js';\nimport CdtsConfigurator from '../config/cdts.config.js';\nimport Module from './Module.js';\nimport { Language } from '../types/template.js';\nimport i18next from 'i18next';\n\nexport default class ExportToWordModule extends Module {\n moduleReady: boolean = false;\n readonly exportDetailsId = 'export2word';\n readonly exportButtonId = 'exportToWord';\n\n getModuleName(): string {\n return 'exportToWord';\n }\n\n doLogic(): Promise {\n this.initExportToWord();\n return Promise.resolve();\n }\n\n initExportToWord() {\n if (isProdSite() || hasPreviewPage()) {\n return;\n }\n const exportToWord =\n Language.ENGLISH === i18next.language ? 'Export to Word' : 'Exporter vers Word';\n\n const previewPageInfo = document.querySelector('h1');\n if (previewPageInfo != null) {\n previewPageInfo.insertAdjacentHTML(\n 'beforebegin',\n `
\n Information\n
\n \n
\n
`\n );\n const exportButton = document.getElementById(this.exportButtonId);\n if (exportButton) {\n exportButton.onclick = async () => {\n await this.export2word();\n // Add your export to Word logic here\n };\n }\n }\n\n this.moduleReady = true;\n }\n\n async export2word() {\n const mainElement = document.querySelector('main');\n if (!mainElement) {\n console.error('Main element not found');\n return;\n }\n const imgElements = mainElement.querySelectorAll('img');\n\n for (const img of imgElements) {\n const src = img.getAttribute('src');\n if (src) {\n try {\n const base64 = await this.getBase64FromImageUrl(src);\n img.setAttribute('src', base64);\n } catch (error) {\n console.error(`Error getting base64 from image ${src}`, error);\n }\n }\n }\n\n const parser = new DOMParser();\n let content = mainElement.innerHTML;\n if (content == null) {\n console.error('No content found to export');\n return;\n }\n const doc = parser.parseFromString(content, 'text/html');\n const element = doc.querySelector(`#${this.exportDetailsId}`);\n if (element != null) {\n element.remove();\n }\n content = new XMLSerializer().serializeToString(doc);\n\n let fullPage = `\n \n \n \n \n ${content}\n \n \n `;\n\n fullPage = fullPage.replace('class=\"wb-inv\"', '');\n fullPage = fullPage.replace('', '');\n\n let filename = window.location.pathname;\n filename = filename.replace(/^\\//, '');\n filename = filename.replace(/\\//g, '_');\n filename = filename.replace(/\\.shtml/, '.doc');\n const blob = new Blob([fullPage], { type: 'text/plain;charset=utf-8' });\n\n this.saveAs(blob, filename);\n }\n\n saveAs(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n URL.revokeObjectURL(url); // Clean up the URL\n }\n\n async getBase64FromImageUrl(url: string): Promise {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(img, 0, 0);\n const dataURL = canvas.toDataURL('image/png');\n resolve(dataURL);\n } else {\n reject(new Error('Canvas context is not available'));\n }\n };\n img.src = url;\n });\n }\n}\n","import ExportToWordModule from './modules/exportToWord';\nimport WhenReady from './WhenReady';\nimport { ConfigModuleFactory } from './config/factory.config.js';\nimport type { TemplateFrontEndGlobals } from './types/script.js';\nimport type { CustomWindow } from './types/template.js';\ndeclare let window: CustomWindow;\n\nWhenReady.whenTemplateReady(() => {\n new ExportToWordModule().run().catch((error) => {\n console.error(error);\n });\n\n const config = ConfigModuleFactory.getConfig(\n (window.templateFrontEnd as TemplateFrontEndGlobals).site\n );\n\n const footerAssets = config?.getFooterAssets();\n footerAssets?.forEach((footerAsset) => {\n if (!footerAsset.isInjectable || footerAsset.isInjectable.call(this)) {\n if (typeof footerAsset.asset === 'string') {\n const scriptElement = document.createElement('script');\n scriptElement.setAttribute('src', footerAsset.asset);\n if (document.body) {\n // Insert the script before the closing tag\n document.body.appendChild(scriptElement);\n } else {\n console.error('Body element not found');\n }\n } else {\n (footerAsset.asset as () => unknown)();\n }\n }\n });\n});\n"],"names":["ExportToWordModule","Module","isProdSite","hasPreviewPage","exportToWord","Language","i18next","previewPageInfo","exportButton","mainElement","imgElements","img","src","base64","error","parser","content","doc","element","fullPage","CdtsConfigurator","filename","blob","url","a","resolve","reject","canvas","ctx","dataURL","WhenReady","ConfigModuleFactory","footerAsset","this","scriptElement"],"mappings":"8GAOA,MAAqBA,UAA2BC,CAAO,CACrD,YAAuB,GACd,gBAAkB,cAClB,eAAiB,eAE1B,eAAwB,CACf,MAAA,cAAA,CAGT,SAA4B,CAC1B,YAAK,iBAAiB,EACf,QAAQ,QAAQ,CAAA,CAGzB,kBAAmB,CACb,GAAAC,EAAA,GAAgBC,IAClB,OAEF,MAAMC,EACJC,EAAS,UAAYC,EAAQ,SAAW,iBAAmB,qBAEvDC,EAAkB,SAAS,cAAc,IAAI,EACnD,GAAIA,GAAmB,KAAM,CACXA,EAAA,mBACd,cACA,gBAAgB,KAAK,eAAe;AAAA;AAAA;AAAA,8BAGd,KAAK,cAAc,mEAAmEH,CAAY;AAAA;AAAA,uBAG1H,EACA,MAAMI,EAAe,SAAS,eAAe,KAAK,cAAc,EAC5DA,IACFA,EAAa,QAAU,SAAY,CACjC,MAAM,KAAK,YAAY,CAEzB,EACF,CAGF,KAAK,YAAc,EAAA,CAGrB,MAAM,aAAc,CACZ,MAAAC,EAAc,SAAS,cAAc,MAAM,EACjD,GAAI,CAACA,EAAa,CAChB,QAAQ,MAAM,wBAAwB,EACtC,MAAA,CAEI,MAAAC,EAAcD,EAAY,iBAAiB,KAAK,EAEtD,UAAWE,KAAOD,EAAa,CACvB,MAAAE,EAAMD,EAAI,aAAa,KAAK,EAClC,GAAIC,EACE,GAAA,CACF,MAAMC,EAAS,MAAM,KAAK,sBAAsBD,CAAG,EAC/CD,EAAA,aAAa,MAAOE,CAAM,QACvBC,EAAO,CACd,QAAQ,MAAM,mCAAmCF,CAAG,GAAIE,CAAK,CAAA,CAEjE,CAGI,MAAAC,EAAS,IAAI,UACnB,IAAIC,EAAUP,EAAY,UAC1B,GAAIO,GAAW,KAAM,CACnB,QAAQ,MAAM,4BAA4B,EAC1C,MAAA,CAEF,MAAMC,EAAMF,EAAO,gBAAgBC,EAAS,WAAW,EACjDE,EAAUD,EAAI,cAAc,IAAI,KAAK,eAAe,EAAE,EAE1DC,GAAQ,OAAO,EAEjBF,EAAU,IAAI,gBAAgB,kBAAkBC,CAAG,EAEnD,IAAIE,EAAW;AAAA;AAAA,0BAEOC,EAAiB,QAAQ;AAAA;AAAA;AAAA,cAGrCJ,CAAO;AAAA;AAAA;AAAA,QAKNG,EAAAA,EAAS,QAAQ,iBAAkB,EAAE,EACrCA,EAAAA,EAAS,QAAQ,SAAU,8BAA8B,EAEhE,IAAAE,EAAW,OAAO,SAAS,SACpBA,EAAAA,EAAS,QAAQ,MAAO,EAAE,EAC1BA,EAAAA,EAAS,QAAQ,MAAO,GAAG,EAC3BA,EAAAA,EAAS,QAAQ,UAAW,MAAM,EACvC,MAAAC,EAAO,IAAI,KAAK,CAACH,CAAQ,EAAG,CAAE,KAAM,2BAA4B,EAEjE,KAAA,OAAOG,EAAMD,CAAQ,CAAA,CAG5B,OAAOC,EAAYD,EAAwB,CACnC,MAAAE,EAAM,IAAI,gBAAgBD,CAAI,EAE9BE,EAAI,SAAS,cAAc,GAAG,EACpCA,EAAE,KAAOD,EACTC,EAAE,SAAWH,EACbG,EAAE,MAAM,EACR,IAAI,gBAAgBD,CAAG,CAAA,CAGzB,MAAM,sBAAsBA,EAA8B,CACxD,OAAO,IAAI,QAAQ,CAACE,EAASC,IAAW,CAChC,MAAAf,EAAM,IAAI,MAChBA,EAAI,YAAc,YAClBA,EAAI,OAAS,IAAM,CACX,MAAAgB,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,MAAQhB,EAAI,MACnBgB,EAAO,OAAShB,EAAI,OACd,MAAAiB,EAAMD,EAAO,WAAW,IAAI,EAClC,GAAIC,EAAK,CACHA,EAAA,UAAUjB,EAAK,EAAG,CAAC,EACjB,MAAAkB,EAAUF,EAAO,UAAU,WAAW,EAC5CF,EAAQI,CAAO,CAAA,MAERH,EAAA,IAAI,MAAM,iCAAiC,CAAC,CAEvD,EACAf,EAAI,IAAMY,CAAA,CACX,CAAA,CAEL,CCjIAO,EAAU,kBAAkB,IAAM,CAChC,IAAI9B,IAAqB,IAAM,EAAA,MAAOc,GAAU,CAC9C,QAAQ,MAAMA,CAAK,CAAA,CACpB,EAEciB,EAAoB,UAChC,OAAO,iBAA6C,IACvD,GAE6B,gBAAgB,GAC/B,QAASC,GAAgB,CACrC,GAAI,CAACA,EAAY,cAAgBA,EAAY,aAAa,KAAKC,MAAI,EAC7D,GAAA,OAAOD,EAAY,OAAU,SAAU,CACnC,MAAAE,EAAgB,SAAS,cAAc,QAAQ,EACvCA,EAAA,aAAa,MAAOF,EAAY,KAAK,EAC/C,SAAS,KAEF,SAAA,KAAK,YAAYE,CAAa,EAEvC,QAAQ,MAAM,wBAAwB,CACxC,MAECF,EAAY,MAAwB,CAEzC,CACD,CACH,CAAC"}