Advertisement
Guest User

Untitled

a guest
Jul 25th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var EfinSvgExportModule = (function () {
  2.     //width and height calculated from report
  3.     var download = function (config) {
  4.         //copy original svg for edit
  5.         var svgParentForExport = AJS.$("#" + config.originalSvgId).clone();
  6.         svgParentForExport.find("button").remove();
  7.         svgParentForExport.css("background-color", "red");
  8.  
  9.         var newSvg = svgParentForExport.children(0);
  10.         repairSvg(newSvg);
  11.  
  12.         //prepare image
  13.         var imageForExport = createImageForExport(config.width, config.height, svgParentForExport);
  14.         document.getElementById(config.canvasToImageContainerId).appendChild(imageForExport);
  15.  
  16.         //render image when image load - only this working for correct convert svg to img in Mozilla and Chrome
  17.         imageForExport.onload = function () {
  18.             // render image
  19.             var canvas = document.createElement('canvas');
  20.             canvas.width = imageForExport.width;
  21.             canvas.height = imageForExport.height;
  22.             var context = canvas.getContext('2d');
  23.             context.rect(0, 0, config.width, config.height);
  24.             context.fillStyle = "white";
  25.             context.fill();
  26.             document.getElementById(config.canvasContainerId).appendChild(canvas);
  27.             context.drawImage(imageForExport, 10, 10);
  28.  
  29.             createAndClickLinkElement(canvas.toDataURL("image/png"));
  30.             resetElements(config);
  31.         };
  32.  
  33.         imageForExport.onerror = function () {
  34.             console.log("Exporting image failed");
  35.             resetElements(config);
  36.         };
  37.     };
  38.  
  39.     var createImageForExport = function (width, height, svgParentForExport) {
  40.         var imageForExport = document.createElement("img");
  41.         imageForExport.height = height;
  42.         imageForExport.width = width;
  43.         imageForExport.src = "data:image/svg+xml," + encodeURIComponent(svgParentForExport.html());
  44.         return imageForExport;
  45.     };
  46.  
  47.     var createAndClickLinkElement = function (href) {
  48.         // create and trigger link for download
  49.         var linkEl = document.createElement("a");
  50.         linkEl.href = href;
  51.         linkEl.download = "cashflow-report.png";
  52.         linkEl.click();
  53.         linkEl.removeAttribute("href");
  54.     };
  55.  
  56.     var setAxesStyle = function (svgEl) {
  57.         svgEl
  58.             .css("background-color", "white")
  59.             .find(".x.axis, .y.axis")
  60.             .attr("stroke", "#000")
  61.             .attr("fill", "none");
  62.     };
  63.  
  64.     //remove no valid attributes, add xml namespace for valid xml
  65.     var repairSvg = function (svgEl) {
  66.         svgEl
  67.             .attr("version", "1.1")
  68.             .attr("encoding", "utf-8")
  69.             .find("p, circle").removeAttr("original-title");
  70.         setAxesStyle((svgEl));
  71.         if (!isInternetExplorer()) {
  72.             svgEl.attr("xmlns", "http://www.w3.org/2000/svg");
  73.         }
  74.     };
  75.  
  76.     var resetElements = function (config) {
  77.         document.getElementById(config.canvasToImageContainerId).innerHTML = '';
  78.         document.getElementById(config.canvasContainerId).innerHTML = '';
  79.     };
  80.  
  81.     /**
  82.      * detect IE
  83.      * returns version of IE or false, if browser is not Internet Explorer
  84.      */
  85.     var isInternetExplorer = function () {
  86.         var ua = window.navigator.userAgent;
  87.         ua += "MSIE";
  88.         var msie = ua.indexOf('MSIE ');
  89.         var trident = ua.indexOf('Trident/');
  90.         var edge = ua.indexOf('Edge/');
  91.  
  92.         return (msie + trident + edge) > 0;
  93.     };
  94.  
  95.  
  96.     return { // public API
  97.         downloadAsPng: download,
  98.         isInternetExplorer: isInternetExplorer
  99.     };
  100. }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement