quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 4.87 kB
JavaScript
import SvgDeCanvo from'../_internal/vendors/svgtocanvas/src/svgdecanvo';import{hasSVG,createElement}from'../../../fc-core/src/lib';import{raiseWarning,triggerEvent}from'../../../fc-core/src/event-api';import Ajax from'../../../fc-core/src/ajax';let UNDEF,win=window,Image=win.Image,doc=document,EXPORTACTION={DOWNLOAD:'download',SAVE:'save',DOWNLOADSAVE:'download-save'},isCanvasElemSupported=()=>{var a=doc.createElement('canvas');return!!(a.getContext&&a.getContext('2d'))},getBrowserDetails=()=>{var a,b=win.navigator.userAgent;return-1===(a=b.indexOf('Edge'))?-1===(a=b.indexOf('Chrome'))?-1===(a=b.indexOf('MSIE'))?-1!==(a=b.indexOf('rv'))&&-1!==b.indexOf('Trident')?{name:'ie',version:b.substring(a+5,a+9)}:-1===(a=b.indexOf('Firefox'))?-1===(a=b.indexOf('Safari'))?{name:'default',version:'Not Known'}:{name:'Safari',version:b.substring(a+7,a+11)}:{name:'Firefox',version:b.substring(a+8,a+12)}:{name:'ie',version:b.substring(a+5,a+9)}:{name:'Chrome',version:b.substring(a+7,a+11)}:{name:'Edge',version:b.substring(a+5,a+11)}},browserDetails=getBrowserDetails(),sendExportData=(a,b)=>{var c,d,e,f,g,h,i,j,k=b.exportAction,l=b.exportTargetWindow,m=b.exportCallback,n=b.fusionCharts,o=n.apiInstance,p=b.paper,q=b.chartId,r=b.exportHandler,s=a.parameters;if(k===EXPORTACTION.DOWNLOAD||k===EXPORTACTION.DOWNLOADSAVE){for(c in /(webkit|gecko)/ig.test(win.navigator.userAgent)&&'_self'===l&&(l=e=q+'export_iframe',!j&&(j=f=createElement('IFRAME',{name:e,width:'1px',height:'1px'},doc.body),f.style.cssText='position:absolute;left:-10px;top:-10px;')),d=createElement('form',{method:'POST',action:r,target:l,style:'display:none;'},doc.body),a)createElement('input',{type:'hidden',name:c,value:a[c]},d);return d.submit(),doc.body.removeChild(d),d=UNDEF,h=s.match(/exportfilename=([^|]+)/)[1],i=s.match(/exportformat=([^|]+)/)[1],triggerEvent('exported',o,{DOMId:q,height:p.height,width:p.width,fileName:h+'.'+i,statusCode:UNDEF,statusMessage:UNDEF,notice:UNDEF}),m&&win[m]&&'function'==typeof win[m]&&win[m]({statusCode:1,statusMessage:'success',DOMId:q,width:p&&p.width,height:p&&p.height}),!0}for(c in g=new Ajax(function(a){var b={};a.replace(/([^?=&]+)(=([^&]*))?/g,function(a,c,d,e){b[c]=e}),m&&win[m]&&'function'==typeof win[m]&&win[m](b),triggerEvent('exported',o,b)},function(a){var b={statusCode:0,statusMessage:'failure',error:a,DOMId:q,width:p&&p.width,height:p&&p.height};m&&win[m]&&'function'==typeof win[m]&&win[m](b),triggerEvent('exported',o,b,[b])}),a)a.hasOwnProperty(c)&&(a[c]=encodeURIComponent(a[c]));g.post(r,a)},dataurlToBlob=a=>{var b,c,d,e;for(b=0<=a.split(',')[0].indexOf('base64')?win.atob(a.split(',')[1]):win.unescape(a.split(',')[1]),c=a.split(',')[0].split(':')[1].split(';')[0],d=new Uint8Array(b.length),e=0;e<b.length;e++)d[e]=b.charCodeAt(e);return new win.Blob([d],{type:c})},makeClientSideDownload=(b,c,d,e={})=>{var f,g,h=getBrowserDetails(),i=e.chartId,j=e.exportCallback,k=e.paper;'Chrome'===h.name||'Firefox'===h.name||'Safari'===h.name?('blob'===b&&(c=win.URL.createObjectURL(c)),g=doc.createElement('a'),g.download=d,g.href=c,doc.body.appendChild(g),g.onclick=function(){j&&win[j]&&'function'==typeof win[j]&&win[j]({statusCode:1,statusMessage:'success',DOMId:i,width:k&&k.width,height:k&&k.height}),g.parentNode.removeChild(g)},g.click()):('ie'===h.name||'Edge'===h.name)&&win.navigator.msSaveBlob&&(f='url'===b?dataurlToBlob(c):c,win.navigator.msSaveBlob(f,d)&&j&&win[j]&&'function'==typeof win[j]&&win[j]({statusCode:1,statusMessage:'success',DOMId:i,width:k&&k.width,height:k&&k.height}))},byteLength=function(a){var b,c,d;for(b=a.length,d=a.length-1;0<=d;d--)c=a.charCodeAt(d),127<c&&2047>=c?b++:2047<c&&65535>=c&&(b+=2),56320<=c&&57343>=c&&d--;return b},isDataURITooLong=function(a){var b;return!!(browserDetails.name.toLowerCase()==='Chrome'.toLowerCase()&&byteLength(a)>b)},downloadCharts=function(a,b,c,d,e){b&&!isDataURITooLong(b)?makeClientSideDownload(a,b,c,e):d&&sendExportData(d,e)},addSVGHeader=function(a){return'<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'+a},svgStrToDataUrl=function(a){var b=addSVGHeader(a);return b='data:image/svg+xml;base64,'+win.btoa(win.unescape(encodeURIComponent(b))),b},drawSvgOnCanvas=function(a={},b){let{svg:c,canvas:d,x:e,y:f,width:g,height:h,useCanvas:i}=a;if('ie'===browserDetails.name||'Edge'===browserDetails.name||i)new SvgDeCanvo(c,d,e,f,g,h,function(){b()});else{var j,k,l;l=svgStrToDataUrl(c),j=d.getContext('2d'),k=new Image,k.onload=function(){j.drawImage(k,e,f,g,h),b()},k.onerror=function(){raiseWarning(this,'','run','libSVGToCanvas:drawSvgOnCanvas','Unable to load image for canvas drawing. Aborting attempt.')},k.src=l}};browserDetails.hasCanvas=isCanvasElemSupported(),browserDetails.hasSvg=hasSVG;export{downloadCharts,browserDetails,drawSvgOnCanvas,isCanvasElemSupported};