UNPKG

@progress/telerik-jquery-report-viewer

Version:

Progress® Telerik® Report Viewer for jQuery

162 lines (159 loc) 4.79 kB
import { logError } from './utils.js'; function IEHelper() { function getPdfPlugin() { var classIds = ["AcroPDF.PDF.1", "PDF.PdfCtrl.6", "PDF.PdfCtrl.5"]; var plugin = null; $.each(classIds, function(index, classId) { try { plugin = new ActiveXObject(classId); if (plugin) { return false; } } catch (ex) { } }); return plugin; } return { hasPdfPlugin: function() { return getPdfPlugin() !== null; } }; } function FirefoxHelper() { function hasPdfPlugin2() { var matches = /Firefox[\/\s](\d+\.\d+)/.exec(navigator.userAgent); if (null !== matches && matches.length > 1) { var version = parseFloat(matches[1]); if (version >= 19) { return false; } } var pdfPlugins = navigator.mimeTypes["application/pdf"]; var pdfPlugin = pdfPlugins !== null ? pdfPlugins.enabledPlugin : null; if (pdfPlugin) { var description = pdfPlugin.description; return description.indexOf("Adobe") !== -1 && (description.indexOf("Version") === -1 || parseFloat(description.split("Version")[1]) >= 6); } return false; } return { hasPdfPlugin: function() { return hasPdfPlugin2(); } }; } function ChromiumHelper(defaultPlugin) { function hasPdfPlugin2() { var navPlugins = navigator.plugins; var found = false; $.each(navPlugins, function(key, value) { if (navPlugins[key].name === defaultPlugin || navPlugins[key].name === "Adobe Acrobat") { found = true; return false; } }); return found; } return { hasPdfPlugin: function() { return hasPdfPlugin2(); } }; } function OtherBrowserHelper() { return { hasPdfPlugin: function() { return false; } }; } function selectBrowserHelper() { if (window.navigator) { var userAgent = window.navigator.userAgent.toLowerCase(); if (userAgent.indexOf("msie") > -1 || userAgent.indexOf("mozilla") > -1 && userAgent.indexOf("trident") > -1) return IEHelper(); else if (userAgent.indexOf("firefox") > -1) return FirefoxHelper(); else if (userAgent.indexOf("edg/") > -1) return ChromiumHelper("Microsoft Edge PDF Plugin"); else if (userAgent.indexOf("chrome") > -1) return ChromiumHelper("Chrome PDF Viewer"); else if (userAgent.indexOf("safari") > -1) return ChromiumHelper("WebKit built-in PDF"); return OtherBrowserHelper(); } return null; } var helper = selectBrowserHelper(); var hasPdfPlugin = helper ? helper.hasPdfPlugin() : false; var PrintManager = function() { var iframe; function printDesktop(src) { var sameOriginUrl = null; if (!iframe) { iframe = document.createElement("iframe"); iframe.style.display = "none"; iframe.onload = function() { try { iframe.contentDocument.execCommand("print", true, null); } catch (e) { logError(e); } finally { if (sameOriginUrl) { (window.URL || window.webkitURL).revokeObjectURL(sameOriginUrl); } } }; } if (isSameOriginUrl(src) && useMsBlobHandling()) { iframe.src = src; document.body.appendChild(iframe); return; } var request = new XMLHttpRequest(); request.open("GET", src, true); request.responseType = "arraybuffer"; request.onload = function(e) { if (this.status === 200) { var localPdf = new Blob([this.response], { type: "application/pdf" }); if (useMsBlobHandling()) { window.navigator.msSaveOrOpenBlob(localPdf); } else { sameOriginUrl = (window.URL || window.webkitURL).createObjectURL(localPdf); iframe.src = sameOriginUrl; document.body.appendChild(iframe); } } else { console.log("Could not retrieve remote PDF document."); } }; request.send(); } function useMsBlobHandling() { return window.navigator && window.navigator.msSaveOrOpenBlob; } function isSameOriginUrl(url) { var location = window.location; var anchor = document.createElement("a"); anchor.setAttribute("href", url); if (anchor.host == "") { anchor.href = anchor.href; } return location.hostname === anchor.hostname && location.protocol === anchor.protocol && location.port === anchor.port; } function printMobile(src) { window.open(src, "_self"); } var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); var printFunc = isMobile ? printMobile : printDesktop; return { print: function(src) { printFunc(src); }, getDirectPrintState: function() { return hasPdfPlugin; } }; }(); export { PrintManager };