@progress/telerik-jquery-report-viewer
Version:
Progress® Telerik® Report Viewer for jQuery
162 lines (159 loc) • 4.79 kB
JavaScript
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 };