{"version":3,"file":"PrintPreview.min.js","sources":["EncompassWebServices/Controls/PrintPreview.js"],"sourcesContent":["\"use strict\";\r\n\r\nconst BC_PrintPreview = function (EWS) {\r\n this.EWS = EWS;\r\n\r\n this.Dialog = false;\r\n\r\n this.File = false;\r\n this.Type = false;\r\n this.Report = false;\r\n};\r\n\r\nBC_PrintPreview.prototype.Load = async function () {\r\n if (this.Dialog && this.File && this.Type) {\r\n const me = this;\r\n const myResult = new ECP.EC_Request(\"GetPrintPreviewResult\");\r\n myResult.SetReturnType(ECP.EC_ReturnType.Text);\r\n\r\n let grid = \"False\";\r\n if (me.Dialog.querySelector(\"#ews-print-grid\").checked) {\r\n grid = \"True\";\r\n }\r\n\r\n myResult.AddRequestVariable(\"Request\", \"Print\");\r\n myResult.AddRequestVariable(\"FileName\", me.File, ECP.EC_Verb.Post);\r\n\r\n if (me.Report && me.Report >= 0) {\r\n myResult.AddRequestVariable(\"ReportID\", me.Report);\r\n }\r\n\r\n myResult.AddRequestVariable(\"Type\", me.Type);\r\n myResult.AddRequestVariable(\"ShowGridLines\", grid);\r\n\r\n let breaks = \"False\";\r\n\r\n if (me.Dialog.querySelector(\"#ews-print-break\").checked) {\r\n breaks = \"True\";\r\n }\r\n\r\n myResult.AddRequestVariable(\"PageBreaks\", breaks);\r\n\r\n myResult.AddRequestVariable(\"WorksheetIndex\", me.Dialog.querySelector(\"#ews-print-sheet\").value || \"\");\r\n\r\n myResult.AddRequestVariable(\"HeaderTopLeft\", me.Dialog.querySelector(\"#ews-print-header-top-left\").value || \"None\");\r\n myResult.AddRequestVariable(\"HeaderTopRight\", me.Dialog.querySelector(\"#ews-print-header-top-right\").value || \"None\");\r\n myResult.AddRequestVariable(\"HeaderBottomLeft\", me.Dialog.querySelector(\"#ews-print-header-bottom-left\").value || \"None\");\r\n myResult.AddRequestVariable(\"HeaderBottomRight\", me.Dialog.querySelector(\"#ews-print-header-bottom-right\").value || \"None\");\r\n\r\n myResult.AddRequestVariable(\"Orientation\", me.Dialog.querySelector(\"#ews-print-orientation\").value);\r\n myResult.AddRequestVariable(\"PaperSize\", me.Dialog.querySelector(\"#ews-print-size\").value);\r\n myResult.AddRequestVariable(\"Margin\", me.Dialog.querySelector(\"#ews-print-margin\").value);\r\n myResult.AddRequestVariable(\"Scale\", me.Dialog.querySelector(\"#ews-print-scale\").value);\r\n\r\n myResult.AddRequestVariable(\"Submit\", \"True\");\r\n\r\n let result = await myResult.Submit();\r\n\r\n if (EC_Fmt.Browser === ECP.Browser.Firefox) {\r\n result = decodeURIComponent(result);\r\n\r\n if (result.indexOf(\"../\") >= 0) {\r\n result = result.replace(\"../\", \"\");\r\n }\r\n\r\n if (result.indexOf(\"?\") >= 0) {\r\n me.Dialog.querySelector(\"#ews-print-preview\").src = `${result}&t=${new Date().getTime()}`;\r\n } else {\r\n me.Dialog.querySelector(\"#ews-print-preview\").src = `${result}?t=${new Date().getTime()}`;\r\n }\r\n } else {\r\n me.Dialog.querySelector(\"#ews-print-preview\").src = `Controls/PrintPreview.html?file=${result}&t=${new Date().getTime()}`;\r\n }\r\n }\r\n};\r\n\r\nBC_PrintPreview.prototype.Print = function (file, type, report, master, processUrlCallback) {\r\n const me = this;\r\n\r\n if (!type) {\r\n if (file.toLowerCase().indexOf(\".xlsx\") >= 0) {\r\n type = \"XLSX\";\r\n } else {\r\n type = \"PDF\";\r\n }\r\n }\r\n\r\n if (EC_Fmt.isMobile) {\r\n ECP.Dialog.Alert(\"You can not print from a mobile device.\");\r\n } else if (file.length < 5000) {\r\n const printArgs = {\r\n file,\r\n type,\r\n report,\r\n master,\r\n processUrlCallback\r\n };\r\n\r\n let hasFilters = \"\";\r\n\r\n if (document.querySelector(\".FiltersSheet\")) {\r\n hasFilters = \"True\";\r\n }\r\n\r\n if (document.querySelector(\".ecp-printPreview-dialog\")) {\r\n document.querySelector(\".ecp-printPreview-dialog\").parentNode.style.display = \"block\";\r\n return;\r\n }\r\n\r\n EWS.VerifySession(async () => {\r\n const myResult = new ECP.EC_Request(\"GetPrintPreviewResult\");\r\n myResult.AddRequestVariable(\"Request\", \"Dialog\");\r\n myResult.AddRequestVariable(\"HasFilters\", hasFilters);\r\n\r\n const result = await myResult.Submit();\r\n\r\n const Dialog = ECP.Dialog.ShowDialog(result.title, result.content, {\r\n width: 930,\r\n height: 790,\r\n cancelButtonTitle: result.cancel,\r\n confirmButtonTitle: result.print,\r\n confirmButtonAction(dialog) {\r\n if (EC_Fmt.Browser !== ECP.Browser.Firefox) {\r\n const frame = dialog.querySelector(\"#ews-print-preview\");\r\n\r\n if (frame) {\r\n frame.focus();\r\n frame.contentWindow.print();\r\n } else {\r\n ECP.Dialog.Alert(\"Print preview is loading.\");\r\n }\r\n }\r\n }\r\n });\r\n\r\n Dialog.firstElementChild.classList.add(\"ecp-printPreview-dialog\");\r\n\r\n const confirmButton = Dialog.querySelector(\".ecp-dialog-confirm-button\");\r\n if (EC_Fmt.Browser === ECP.Browser.Firefox) {\r\n confirmButton.classList.add(\"disabled\");\r\n confirmButton.parentNode.insertBefore(EC_Fmt.HtmlStrToElement(\"\"), confirmButton);\r\n\r\n Dialog.querySelector(\".firefox-floater-tip\").style.display = \"block\";\r\n } else {\r\n confirmButton.parentNode.insertBefore(EC_Fmt.HtmlStrToElement(\"\"), confirmButton);\r\n }\r\n\r\n const printPreview = Dialog.querySelector(\"#ews-print-preview\");\r\n\r\n const printSettingsForm = Dialog.querySelector(\"#ews-print-settings-form\");\r\n printSettingsForm.addEventListener(\"change\", (event) => {\r\n const target = event.target;\r\n\r\n if (target.tagName.toLowerCase() === \"input\" || target.tagName.toLowerCase() === \"select\") {\r\n // Task 640348: Changing options on the print dialog for a fusion report causes the 'Preview' button to become un-readable\r\n printPreview.classList.add(\"ActionButtonAttention\");\r\n\r\n if (EC_Fmt.Browser !== ECP.Browser.Firefox) {\r\n confirmButton.classList.add(\"disabled\");\r\n\r\n Dialog.querySelector(\".floater-tip\").style.display = \"block\";\r\n }\r\n }\r\n });\r\n\r\n const printPreviewButton = Dialog.querySelector(\"#ews-print-preview-button\");\r\n printPreviewButton.addEventListener(\"click\", (event) => {\r\n me.Load();\r\n event.currentTarget.classList.remove(\"ActionButtonAttention\");\r\n\r\n if (EC_Fmt.Browser !== ECP.Browser.Firefox) {\r\n confirmButton.classList.remove(\"disabled\");\r\n Dialog.querySelector(\".floater-tip\").style.display = \"none\";\r\n }\r\n });\r\n\r\n const printDownloadButton = Dialog.querySelector(\"#ews-print-download-button\");\r\n\r\n if (EC_Fmt.Browser !== ECP.Browser.Firefox) {\r\n printDownloadButton.classList.add(\"disabled\");\r\n }\r\n\r\n printDownloadButton.addEventListener(\"click\", () => {\r\n if (EC_Fmt.Browser !== ECP.Browser.Firefox) {\r\n const inner = (printPreview.contentDocument || printPreview.contentWindow.document);\r\n const url = inner.getElementById(\"raw-pdf\").getAttribute(\"src\");\r\n\r\n const printPreviewResult = new ECP.EC_Request(\"GetPrintPreviewResult\");\r\n printPreviewResult.SetReturnType(ECP.EC_ReturnType.Text);\r\n\r\n printPreviewResult.AddRequestVariable(\"Request\", \"FileURL\");\r\n printPreviewResult.AddRequestVariable(\"Url\", url);\r\n printPreviewResult.Submit().then((resultURL) => {\r\n let title = document.getElementsByTagName(\"title\");\r\n if (title.length > 0) {\r\n title = title[0].innerHTML;\r\n }\r\n\r\n let downloadUrl = `api?APICommand=GetPrintPreviewResult&Request=Download&Url=${url}`;\r\n if (resultURL) {\r\n downloadUrl = resultURL.replace(\"../\", \"\");\r\n }\r\n\r\n EC_Fmt.DownloadFileFromURL(downloadUrl, EC_Fmt.Null2EmptyStr(title));\r\n });\r\n } else {\r\n ECP.Dialog.Alert(\"Download Not Supported in Firefox\");\r\n }\r\n });\r\n\r\n Dialog.querySelector(\"#ews-print-next-page-button\").addEventListener(\"click\", () => {\r\n if (printPreview?.getAttribute(\"src\") !== \"about:blank\") {\r\n printPreview.contentWindow.NextPage();\r\n }\r\n });\r\n\r\n Dialog.querySelector(\"#ews-print-previous-page-button\").addEventListener(\"click\", () => {\r\n if (printPreview?.getAttribute(\"src\") !== \"about:blank\") {\r\n frame.contentWindow.PreviousPage();\r\n }\r\n });\r\n\r\n printPreview.src = \"about:blank\";\r\n\r\n me.Dialog = Dialog;\r\n me.File = printArgs.file;\r\n me.Type = printArgs.type;\r\n me.Report = printArgs.report;\r\n\r\n if (printArgs.processUrlCallback) {\r\n me.File = printArgs.processUrlCallback(me.File, \"Print\");\r\n }\r\n\r\n if (printArgs.type === \"XLSX\") {\r\n printSettingsForm.querySelectorAll(\"input, select, table\").forEach((input) => {\r\n input.disabled = false;\r\n });\r\n\r\n printPreviewButton.style.display = \"\";\r\n printDownloadButton.style.display = \"block\";\r\n\r\n const printPreviewResult = new ECP.EC_Request(\"GetPrintPreviewResult\");\r\n printPreviewResult.AddRequestVariable(\"Request\", \"PrintSettings\");\r\n printPreviewResult.AddRequestVariable(\"FileName\", printArgs.file, ECP.EC_Verb.Post);\r\n if (printArgs.report && printArgs.report >= 0) {\r\n printPreviewResult.AddRequestVariable(\"ReportID\", printArgs.report);\r\n }\r\n if (printArgs.master === true) {\r\n printPreviewResult.AddRequestVariable(\"FromMaster\", \"True\");\r\n }\r\n\r\n const printResult = await printPreviewResult.Submit();\r\n\r\n Dialog.querySelector(\"#ews-print-grid\").checked = printResult.grid;\r\n Dialog.querySelector(\"#ews-print-break\").checked = printResult.break;\r\n\r\n Dialog.querySelector(\"#ews-print-size\").value = printResult.size;\r\n Dialog.querySelector(\"#ews-print-orientation\").value = printResult.orientation;\r\n Dialog.querySelector(\"#ews-print-scale\").value = printResult.scale;\r\n Dialog.querySelector(\"#ews-print-margin\").value = printResult.margin;\r\n\r\n Dialog.querySelector(\"#ews-print-header-top-left\").value = printResult.header.top.left;\r\n Dialog.querySelector(\"#ews-print-header-top-right\").value = printResult.header.top.right;\r\n Dialog.querySelector(\"#ews-print-header-bottom-left\").value = printResult.header.bottom.left;\r\n Dialog.querySelector(\"#ews-print-header-bottom-right\").value = printResult.header.bottom.right;\r\n\r\n const printSheet = Dialog.querySelector(\"#ews-print-sheet\");\r\n if (printResult.sheet && printResult.sheet.length > 0) {\r\n let html = ``;\r\n\r\n for (let i = 0; i < printResult.sheet.length; i++) {\r\n html += ``;\r\n }\r\n\r\n printSheet.disabled = false;\r\n printSheet.innerHTML = html;\r\n printSheet.value = \"\";\r\n } else {\r\n printSheet.disabled = true;\r\n printSheet.innerHTML = \"\";\r\n printSheet.value = \"\";\r\n }\r\n\r\n if (printResult.sheet && printResult.sheet.length > 0) {\r\n printSheet.disabled = false;\r\n }\r\n\r\n me.Load();\r\n } else {\r\n printSettingsForm.querySelectorAll(\"input, select, table\").forEach((input) => {\r\n input.disabled = true;\r\n });\r\n\r\n printPreviewButton.style.display = \"none\";\r\n printDownloadButton.style.display = \"none\";\r\n\r\n printPreview.src = `Controls/PrintPreview.html?file=${encodeURIComponent(`../${me.File}`)}&t=${new Date().getTime()}`;\r\n }\r\n\r\n Dialog.querySelector(\".ecp-dialog-cancel-button\").addEventListener(\"click\", () => {\r\n me.Dialog = false;\r\n me.File = false;\r\n me.Type = false;\r\n me.Report = false;\r\n });\r\n }, true, null, () => {\r\n // Task 604081: Export and print buttons do nothing on Quicklinks reports - Add option to login when clicking those buttons\r\n ECP.Dialog.ShowDialog(\"Confirm\", `