{"version":3,"file":"PDFStore-BS6dCq1V.js","sources":["../../Vue/src/components/SheetMusic/Toolbar/ToolbarSelectChordsTransposeKey.vue","../../Vue/src/stores/PDFStore.ts"],"sourcesContent":["\r\n\r\n\r\n \r\n \r\n {{\r\n data\r\n }}\r\n {{\r\n $t(\"S.LIT_TransposeKeyTC\")\r\n }}\r\n {{ o.label }}\r\n \r\n\r\n\r\n\r\n","import { loadScript } from \"@/functions/misc\";\r\nimport { isIOS } from \"@vueuse/core\";\r\n\r\ndeclare const pdfjsLib: any;\r\n\r\nexport const usePDFStore = defineStore(\"pdf\", () => {\r\n const debug = useDebug();\r\n const toast = useToastStore();\r\n const { t } = useI18n();\r\n\r\n async function loadPDFLib() {\r\n await loadScript(\r\n \"https://cdn.jsdelivr.net/npm/pdfjs-dist@2.4.456/build/pdf.min.js\",\r\n \"pdfjslib\",\r\n );\r\n }\r\n\r\n function createCanvas(container: HTMLDivElement) {\r\n const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\r\n canvas.id = `canvas-page`;\r\n container.appendChild(canvas);\r\n return canvas;\r\n }\r\n\r\n function createCanvasContainer() {\r\n const container = document.createElement(\"div\") as HTMLDivElement;\r\n document.body.appendChild(container);\r\n return container;\r\n }\r\n\r\n async function getPDFDoc(url: string) {\r\n await loadPDFLib();\r\n const task = pdfjsLib.getDocument(url);\r\n const pdfDoc = await task.promise;\r\n const numPages = pdfDoc.numPages;\r\n return {\r\n pdfDoc,\r\n numPages,\r\n };\r\n }\r\n\r\n async function generatePage(\r\n pdfdoc: any,\r\n pageNumber: number,\r\n container: HTMLDivElement,\r\n ) {\r\n const page = await pdfdoc.getPage(pageNumber);\r\n const canvas = createCanvas(container);\r\n\r\n const context = canvas.getContext(\"2d\", {\r\n willReadFrequently: true,\r\n alpha: false,\r\n });\r\n\r\n if (!context) {\r\n throw new Error(\"Context can be generated from Canvas\");\r\n }\r\n const viewport = page.getViewport({ scale: 2 });\r\n\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n\r\n const pageRendering = page.render({\r\n canvasContext: context,\r\n undefined,\r\n viewport,\r\n });\r\n\r\n await pageRendering.promise;\r\n\r\n const image = canvas.toDataURL(\"image/png\");\r\n canvas.remove();\r\n return image;\r\n }\r\n\r\n async function convertPDFToPNGs(pdfUrl: string) {\r\n const { pdfDoc, numPages } = await getPDFDoc(pdfUrl);\r\n\r\n const container = createCanvasContainer();\r\n const imagePromises = [] as Promise[];\r\n for (let page = 1; page <= numPages; page++) {\r\n imagePromises.push(generatePage(pdfDoc, page, container));\r\n }\r\n\r\n const images = await Promise.all(imagePromises);\r\n container.remove();\r\n return images;\r\n }\r\n\r\n async function printPdf(url: string) {\r\n debug.log(\"url\", url);\r\n if (isFirefox() || (isIOS && !isSafari(true)) || isAndroid()) {\r\n // throw new Error('Firefox printing of PDFs is not supported\"');\r\n printUsingNewWindow(window.location.origin + url);\r\n return;\r\n }\r\n\r\n let iframe = document.getElementById(\"PDFIFrame\") as HTMLIFrameElement;\r\n\r\n if (!iframe) {\r\n iframe = document.createElement(\"iframe\");\r\n iframe.id = \"PDFIFrame\";\r\n iframe.style.display = \"none\";\r\n }\r\n\r\n try {\r\n await new Promise((res, rej) => {\r\n iframe.onload = () => {\r\n setTimeout(() => {\r\n iframe.focus();\r\n // notes: this does not work well for chrome on iOS.\r\n // found issue with potential same site origin security issues as well doing this..\r\n // solution: disable printing feature for iOS devices that are anything OTHER than safari\r\n if (!iframe.contentWindow) {\r\n rej(\"No content window available\");\r\n return;\r\n }\r\n try {\r\n iframe.contentWindow.print();\r\n URL.revokeObjectURL(url);\r\n res();\r\n } catch (err) {\r\n rej(err);\r\n }\r\n }, 1);\r\n };\r\n\r\n iframe.src = window.location.origin + url;\r\n document.body.appendChild(iframe);\r\n });\r\n } catch (err) {\r\n printUsingNewWindow(window.location.origin + url);\r\n }\r\n }\r\n\r\n function printUsingNewWindow(url: string) {\r\n const printWindow = window.open(url);\r\n if (!printWindow) {\r\n toast.warningToast(t(\"SV.MES_EnablePrinting\"));\r\n throw new Error(\"Cannot print\");\r\n }\r\n\r\n printWindow.onload = () => {\r\n printWindow.print();\r\n };\r\n\r\n //Close window once print is finished\r\n printWindow.onafterprint = function () {\r\n printWindow.close();\r\n };\r\n }\r\n\r\n return {\r\n printPdf,\r\n convertPDFToPNGs,\r\n };\r\n});\r\n"],"names":["MajorKeys","MinorKeys","songStore","useSongStore","availableKeys","computed","_a","props","__props","options","k","emit","__emit","data","newValue","usePDFStore","defineStore","debug","useDebug","toast","useToastStore","t","useI18n","loadPDFLib","loadScript","createCanvas","container","canvas","createCanvasContainer","getPDFDoc","url","pdfDoc","numPages","generatePage","pdfdoc","pageNumber","page","context","viewport","image","convertPDFToPNGs","pdfUrl","imagePromises","images","printPdf","isFirefox","isIOS","isSafari","isAndroid","printUsingNewWindow","iframe","res","rej","err","printWindow"],"mappings":"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"}