Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var EfinSvgExportModule = (function () {
- //width and height calculated from report
- var download = function (config) {
- //copy original svg for edit
- var svgParentForExport = AJS.$("#" + config.originalSvgId).clone();
- svgParentForExport.find("button").remove();
- svgParentForExport.css("background-color", "red");
- var newSvg = svgParentForExport.children(0);
- repairSvg(newSvg);
- //prepare image
- var imageForExport = createImageForExport(config.width, config.height, svgParentForExport);
- document.getElementById(config.canvasToImageContainerId).appendChild(imageForExport);
- //render image when image load - only this working for correct convert svg to img in Mozilla and Chrome
- imageForExport.onload = function () {
- // render image
- var canvas = document.createElement('canvas');
- canvas.width = imageForExport.width;
- canvas.height = imageForExport.height;
- var context = canvas.getContext('2d');
- context.rect(0, 0, config.width, config.height);
- context.fillStyle = "white";
- context.fill();
- document.getElementById(config.canvasContainerId).appendChild(canvas);
- context.drawImage(imageForExport, 10, 10);
- createAndClickLinkElement(canvas.toDataURL("image/png"));
- resetElements(config);
- };
- imageForExport.onerror = function () {
- console.log("Exporting image failed");
- resetElements(config);
- };
- };
- var createImageForExport = function (width, height, svgParentForExport) {
- var imageForExport = document.createElement("img");
- imageForExport.height = height;
- imageForExport.width = width;
- imageForExport.src = "data:image/svg+xml," + encodeURIComponent(svgParentForExport.html());
- return imageForExport;
- };
- var createAndClickLinkElement = function (href) {
- // create and trigger link for download
- var linkEl = document.createElement("a");
- linkEl.href = href;
- linkEl.download = "cashflow-report.png";
- linkEl.click();
- linkEl.removeAttribute("href");
- };
- var setAxesStyle = function (svgEl) {
- svgEl
- .css("background-color", "white")
- .find(".x.axis, .y.axis")
- .attr("stroke", "#000")
- .attr("fill", "none");
- };
- //remove no valid attributes, add xml namespace for valid xml
- var repairSvg = function (svgEl) {
- svgEl
- .attr("version", "1.1")
- .attr("encoding", "utf-8")
- .find("p, circle").removeAttr("original-title");
- setAxesStyle((svgEl));
- if (!isInternetExplorer()) {
- svgEl.attr("xmlns", "http://www.w3.org/2000/svg");
- }
- };
- var resetElements = function (config) {
- document.getElementById(config.canvasToImageContainerId).innerHTML = '';
- document.getElementById(config.canvasContainerId).innerHTML = '';
- };
- /**
- * detect IE
- * returns version of IE or false, if browser is not Internet Explorer
- */
- var isInternetExplorer = function () {
- var ua = window.navigator.userAgent;
- ua += "MSIE";
- var msie = ua.indexOf('MSIE ');
- var trident = ua.indexOf('Trident/');
- var edge = ua.indexOf('Edge/');
- return (msie + trident + edge) > 0;
- };
- return { // public API
- downloadAsPng: download,
- isInternetExplorer: isInternetExplorer
- };
- }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement