UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 12.3 kB
import{extend2,PROJECT_VERSION,pluckNumber,pluck,RGBtoHex}from'../../../fc-core/src/lib';import{ComponentInterface}from'../../../fc-core/src/component-interface';import{downloadCharts,browserDetails,drawSvgOnCanvas,isCanvasElemSupported}from'../utils/lib-svg-to-canvas';import{addImage,getDataUrl}from'../utils/jpeg-to-pdf';import{EXPORTACTION,EXPORTMODE,EXPORTFORMAT,LOGMODE,createExportActionOldString,cacheAllImages,makeImageUrlsAbsolute,embedImagesWithNonDataURL,replaceImagesWithNonDataUrl,hasUndownloadableImage,logCharts,svgStrToDataUrl}from'../utils/export-utils';import{getDep}from'../../../fc-core/src/dependency-manager';let isObject=a=>'object'==typeof a,getBackgroundColor=a=>{let b=pluckNumber(a.options.containerBackgroundOpacity,1);return a.jsVars.transparent||0===b?'':a.options.containerBackgroundColor||'#FFFFFF'},getBackgroundAlpha=a=>a.jsVars.transparent?0:pluckNumber(a.options.containerBackgroundOpacity,1)+'',IMAGEDATA='IMAGE-DATA',xAttrRegx=/\s\bx\b=['"][^'"]+?['"]/ig,yAttrRegx=/\s\by\b=['"][^'"]+?['"]/ig,win=window,doc=win.document,DEFAULT_EXPORT_URL='https:'===win.location.protocol?'https://export.api3.fusioncharts.com/':'http://export.api3.fusioncharts.com/',DEFAULT_LOG_URL='https:'===win.location.protocol?'https://export.api3.fusioncharts.com/api/v1.0/logs':'http://export.api3.fusioncharts.com/api/v1.0/logs',isIOS=win.navigator.userAgent.match(/(iPad|iPhone|iPod)/g);export default class ExportModule extends ComponentInterface{constructor(){super(),this.config={exportOption:{},chartConfig:{caption:'',subcaption:'',width:'',height:''}}}getName(){return'exportModule'}getType(){return'extension'}configureMenuBar(){let a,b,c,d,e,f,g,h,j=this,k=j.getFromEnv('chart'),l=j.getFromEnv('toolbar'),m=!!win.btoa,n=j.getFromEnv('chart-attrib').exportformats,o=l.getChild(`hamburgerMenu-${l.getId()}-${k.getId()}-0`),p={PNG:'Export As '+EXPORTFORMAT.PNG.toUpperCase(),JPG:'Export As '+EXPORTFORMAT.JPG.toUpperCase(),PDF:'Export As '+EXPORTFORMAT.PDF.toUpperCase(),SVG:'Export As '+EXPORTFORMAT.SVG.toUpperCase(),XLSX:'Export As '+EXPORTFORMAT.XLSX.toUpperCase()},q=[];if(j.config.exportOption.exportenabled){if(f=function(a){return function(){j.config.exportOption.exportformat=a,j.exportChart({})}},n)for(a=n.split('|'),d=0,e=a.length;d<e;d++)b=a[d].split('='),c=b[0].toUpperCase(),p[c]&&(p[c]=b[1]||p[c]),p[c]&&(h||(h={}))&&(h[c]=!0);for(c in p)('XLSX'!==c||m&&getDep('Excelexport')&&(!getDep('Excelexport')||!getDep('Excelexport').then))&&(!h||h[c])&&(g={name:p[c],handler:f(c),action:'click'},q.push(g));o.appendInMenu(q),m&&getDep('Excelexport')&&getDep('Excelexport').then&&getDep('ExcelExport').then(()=>{o.appendInMenu([{name:p.XLSX,handler:f('XLSX'),action:'click'}]),o.asyncDraw()})}}configure(a){let b=this.getFromEnv('chartInstance'),c=this.config,d=c.chartConfig,e=c.exportOption;a=a.chartConfig,a.caption&&(d.caption=pluck(a.caption,'')),a.subcaption&&(d.subcaption=pluck(a.subcaption,'')),e.exportenabled=pluckNumber(a.exportenabled,0),e.exportshowmenuitem=pluckNumber(a.exportshowmenuitem,1),e.exportformat=pluck(a.exportformat,EXPORTFORMAT.PNG),e.exporthandler=pluck(a.html5exporthandler,a.exporthandler,DEFAULT_EXPORT_URL),e.exportaction=function(){let b;return a.exportaction&&'string'==typeof a.exportaction?(b=a.exportaction.toLowerCase(),0<=[EXPORTACTION.DOWNLOAD,EXPORTACTION.SAVE,EXPORTACTION.DOWNLOADSAVE].indexOf(b)?b:EXPORTACTION.DOWNLOAD):EXPORTACTION.DOWNLOAD}(),e.exporttargetwindow=pluck(a.exporttargetwindow,isIOS?'_parent':'_self'),e.exportfilename=pluck(a.exportfilename,'FusionCharts'),e.exportparameters=pluck(a.exportparameters,''),e.exportcallback=pluck(a.exportcallback,''),e.exportwithimages=pluckNumber(a.exportwithimages,1),e.exportmode=function(){let b;return'undefined'!=typeof a.exportatclientside&&(b={1:EXPORTMODE.AUTO,0:EXPORTMODE.AUTO}[a.exportatclientside]),b=a.exportmode||b||EXPORTMODE.AUTO,b=b.toLowerCase(),b}(),e.logenabled=pluckNumber(a.logenabled,0),e.loghandler=pluck(a.html5loghandler,a.loghandler,DEFAULT_LOG_URL),e.logmode=function(){let b=a.logmode;return'undefined'!=typeof b&&'string'==typeof b&&b.toUpperCase()in LOGMODE?LOGMODE[b.toUpperCase()]:LOGMODE.AUTO}(),e.bgcolor=getBackgroundColor(b),e.bgalpha=getBackgroundAlpha(b),e.exportshowmenuitem&&this.configureMenuBar()}exportChart(a){let b,c,d,e,f=this.getFromEnv('chartInstance'),g=this.getFromEnv('chart'),h=this.config.exportOption,i=isObject(a)&&function(a){let b,c={};for(b in a)c[b.toLowerCase()]=a[b];return c}(a)||{},j=extend2(extend2({},h),i),k=(j.exportformat||EXPORTFORMAT.PNG).toLowerCase(),l=j.exporthandler,m=j.exportaction,n=j.exporttargetwindow||'',o=j.exportfilename,p=j.exportparameters,q=j.exportcallback,r=j.exportwithimages,s=j.exportmode,t=j.logenabled,u=j.loghandler,v=j.logmode,w=this;g.fireChartInstanceEvent('beforeExport',j,e,function(){let a,h,i,x,y,z,A,B,C=f.id,D=w.config.chartConfig.caption,E=w.config.chartConfig.subcaption,F=this.apiInstance.getFromEnv('paper'),G=this.apiInstance.getFromEnv('core-options')['export'].useCanvas,H=g.getChildren('chartMenuBar')[0],I=H.getChild(`hamburgerMenu-${H.getId()}-${g.getId()}-0`),J=I.getChild('listContainer'),K=isCanvasElemSupported(),L={DOMId:C,height:F.height,width:F.width,fileName:o+'.'+k,statusCode:e,statusMessage:e,notice:e},M={exportAction:m,exportTargetWindow:n,exportCallback:q,fusionCharts:f,paper:F,chartId:C,exportHandler:l,logEnabled:t,logMode:v,logHandler:u},N=function(a,b,c){let d,e,g,h;return c=c||m,d=m,e=createExportActionOldString(m),g=['exportfilename='+o,'exportformat='+k,'exportaction='+e,'exportactionnew='+d,'configuredexportaction='+c,'exportparameters='+p].join('|'),h=!!t,v===LOGMODE.CLIENT&&(h=!1),{charttype:f.chartType(),stream_type:a||'',stream:b||'',meta_bgColor:j.bgcolor||'',meta_bgAlpha:j.bgalpha||'1',meta_DOMId:f.id,meta_width:F.width||w.config.chartConfig.width,meta_height:F.height||w.config.chartConfig.height,chart_caption:D,chart_sub_caption:E,is_single_export:!0,is_full_version:!1,version:PROJECT_VERSION,user_time_zone:-new Date().getTimezoneOffset(),log_enabled:h,parameters:g}},O=function(){let a=m;return{chartType:f.chartType(),chartCaption:D,chartSubCaption:E,isSingleExport:!0,isFullVersion:!1,exportAction:a,userTimeZone:-new Date().getTimezoneOffset(),exportFileName:[o,k].join('.'),exportFormat:k,version:PROJECT_VERSION}},P=function(a){let b=N(EXPORTFORMAT.SVG,a);downloadCharts(null,null,null,b,M)},Q=function(a){let b,c,d=hasUndownloadableImage(a);browserDetails.hasCanvas&&'undefined'!=typeof win.btoa?(b=doc.createElement('canvas'),b.width=F.width,b.height=F.height,a=embedImagesWithNonDataURL(a),i=replaceImagesWithNonDataUrl(i),d||k===EXPORTFORMAT.SVG?(c=N(EXPORTFORMAT.SVG,a),downloadCharts(null,null,null,c,M)):drawSvgOnCanvas({svg:i,canvas:b,x:0,y:0,width:F.width,height:F.height,useCanvas:G},function(){let a;switch(k){case EXPORTFORMAT.PNG:a=b.toDataURL('image/png');break;case EXPORTFORMAT.JPEG:a=b.toDataURL('image/jpeg');break;case EXPORTFORMAT.PDF:addImage(b.toDataURL('image/jpeg'),F.height,F.width),a=getDataUrl();break;default:a=b.toDataURL('image/jpeg');}c=N(IMAGEDATA,a),downloadCharts(null,null,null,c,M)})):P(a)},R=function(a,b,c){let d;d=doc.createElement('canvas'),d.width=F.width,d.height=F.height,drawSvgOnCanvas({svg:i,canvas:d,x:0,y:0,width:F.width,height:F.height,useCanvas:G},function(){switch(a){case EXPORTFORMAT.PNG:b(a,d.toDataURL('image/png'),o,c);break;case EXPORTFORMAT.JPEG:b(a,d.toDataURL('image/jpeg'),o,c);break;case EXPORTFORMAT.PDF:b(a,d.toDataURL('image/jpeg'),o,c);break;default:b(a,d.toDataURL('image/jpeg'),o,c);}})},S=function(b,c,d,e,f){b===EXPORTFORMAT.PDF&&(addImage(c,F.height,F.width),c=getDataUrl()),a=f===EXPORTMODE.AUTO?N(IMAGEDATA,c):null,downloadCharts('url',c,d+'.'+b,a,e)},T=function(a,b,c){let d,e;k===EXPORTFORMAT.SVG?(d=svgStrToDataUrl(a),c(d,b)):(e=function(){c(arguments[1],b)},R(k,e,b))},U=function(b,c,d){let e,f,g;e=o+'.'+k,k===EXPORTFORMAT.SVG?(f=svgStrToDataUrl(b),a=d===EXPORTMODE.AUTO?N(IMAGEDATA,f):null,downloadCharts('url',f,e,a,c)):(g=function(){S(arguments[0],arguments[1],arguments[2],arguments[3],d)},R(k,g,c))},V=function(){let a=0;b=[],c.replace(/[^\r\n]+/g,function(c){b[a]=[],b[a]=c.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/).map(function(a){return a.replace(/"/g,'')}),a+=1})},W=function(a){g.fireChartInstanceEvent('exportDataReady',a)},X=function(a){a===LOGMODE.CLIENT&&logCharts(O(),M)};if('xlsx'===k){if('undefined'!=typeof win.btoa)c=f.getCSVData();else return g.fireChartInstanceEvent('exportCancelled',j),!1;W(),V(),A=getDep('ExcelExport'),A&&A(b).then(b=>{if(d=b,y='undefined'!=typeof win.btoa&&('Chrome'===browserDetails.name||'Firefox'===browserDetails.name||'Safari'===browserDetails.name||'Edge'===browserDetails.name||'ie'===browserDetails.name),'server'!==s&&y)(m===EXPORTACTION.DOWNLOAD||m===EXPORTACTION.DOWNLOADSAVE)&&(downloadCharts('blob',d,o+'.'+k,null,M),g.fireChartInstanceEvent('exported',L)),m===EXPORTACTION.SAVE||m===EXPORTACTION.DOWNLOADSAVE?(z=m,m===EXPORTACTION.DOWNLOADSAVE&&(m=EXPORTACTION.SAVE),a=N(IMAGEDATA,d,z),downloadCharts(null,null,null,a,M),X(v)):v!==LOGMODE.SERVER&&logCharts(O(),M);else{let b=new FileReader;b.onload=function(b){let c=b.target.result,d='',e=new Uint8Array(c),f=e.byteLength;for(let a=0;a<f;a++)d+=String.fromCharCode(e[a]);d='data:application/vnd.ms-excel;base64,'+win.btoa(d),a=N(IMAGEDATA,d),downloadCharts(null,null,null,a,M),X(v)},b.readAsArrayBuffer(d)}})}else x=J.getLinkedParent().getGraphicalElement('button','button'),x&&x.attr('visibility','hidden'),h=F.toSVG(r),i=F.toSVG(r&&K),i=i.replace(/&nbsp;/ig,' '),x&&x.attr('visibility','visible'),h=h.replace(/(\sd\s*=\s*["'])[M\s\d\.]*(["'])/ig,'$1M 0 0 L 0 0$2'),h=h.replace(/NS\d+:/gi,'xlink:'),h=h.replace(/&nbsp;/ig,' '),i=i.replace(/NS\d+:/gi,'xlink:'),i=i.replace(/(\sd\s*=\s*["'])[M\s\d\.]*(["'])/ig,'$1M 0 0 L 0 0$2'),i=i.replace(/(xlink:title\s*=\s*)['"].*?["']/ig,''),h=h.replace(/[\w\-]+\=\"undefined\"/ig,''),h=h.replace(/(xlink:title\s*=\s*)['"].*?["']/ig,''),h=h.replace(/rgba\(([^\)]+)\)/ig,function(a){return'#'+new RGBtoHex(a.split(','))}),h=h.replace(/<svg[^>]+/i,function(a){return!a.match(/height/i)&&(F.height||w.config.chartConfig.height)&&(a+=' height="'+(F.height||w.config.chartConfig.height)+'"'),!a.match(/width/i)&&(F.width||w.config.chartConfig.width)&&(a+=' width="'+(F.width||w.config.chartConfig.width)+'"'),a}),h=h.replace(/(([\w]+\-)?opacity\s*=\s*)['"][\d\.]+e[\-\+][\d]+["']/ig,'$1"0.001"'),h=h.replace(/(([\w]+\-)?opacity\s*:\s*)[\d\.]+e[\-\+][\d]+/ig,'$10.001'),h=h.replace(/<text[^\>]+/ig,function(a){return a=a.replace(/stroke\=[\"\']([a-z0-9\#]+)?[\"\']/ig,''),a=a.replace(/stroke\s*\:\s*([a-z0-9\#]+)?;?/ig,''),a=a.replace(/stroke-width\=[\"\']([a-z0-9\#]+)?[\"\']/ig,''),a=a.replace(/stroke-width\s*\:\s*([a-z0-9\#]+)?;?/ig,''),a=a.replace(/stroke-opacity\=[\"\']([a-z0-9\#]+)?[\"\']/ig,''),a=a.replace(/stroke-opacity\s*\:\s*([a-z0-9\#]+)?;?/ig,''),a=a.replace(/(<text[^\>]+fill\=)([\"\'][^\"\']+[\"\'])([^\>]+)/ig,'$1$2 stroke=$2 stroke-width="0.2"$3'),a=a.replace(/(<text[^\>]+fill-opacity\=)([\"\'][^\"\']+[\"\'])([^\>]+)/ig,'$1$2 stroke-opacity=$2 $3'),a}),h=h.replace(/<(\b[^<>s\s]+\b)[^\>]+?opacity\s*=\s*['"][^1][^\>]+?(\/>|>[\s\r\n]*?<\/\1>)/ig,function(a,b){let c,d=xAttrRegx.exec(a)||'',e=yAttrRegx.exec(a)||'';return c=' opacity="1" stroke-opacity="1" fill="#cccccc" stroke-width="0" r="0"',c+=' height="0.5" width="0.5" d="M 0 0 L 1 1" />',a+'<'+b+d+e+c}),h=makeImageUrlsAbsolute(h),i=makeImageUrlsAbsolute(i),B=s===EXPORTMODE.SERVER,cacheAllImages(h,B,function(){a=N(EXPORTFORMAT.SVG,h),W(a),a=null;let b,c='undefined'!=typeof win.btoa&&('Chrome'===browserDetails.name||'Firefox'===browserDetails.name||'Safari'===browserDetails.name||'Edge'===browserDetails.name||'ie'===browserDetails.name),d=hasUndownloadableImage(h);(s===EXPORTMODE.CLIENT||s===EXPORTMODE.AUTO&&!d)&&c?(i=replaceImagesWithNonDataUrl(i),(m===EXPORTACTION.DOWNLOAD||m===EXPORTACTION.DOWNLOADSAVE)&&(U(i,M,s),g.fireChartInstanceEvent('exported',L)),m===EXPORTACTION.SAVE||m===EXPORTACTION.DOWNLOADSAVE?(b=m,m===EXPORTACTION.DOWNLOADSAVE&&(m=EXPORTACTION.SAVE),T(i,M,function(c,d){a=N(IMAGEDATA,c,b),downloadCharts(null,null,null,a,d),X(v)}),g.fireChartInstanceEvent('exported',L)):v!==LOGMODE.SERVER&&logCharts(O(),M)):s===EXPORTMODE.AUTO?(Q(h),X(v)):s===EXPORTMODE.SERVER&&(P(h),X(v))})},function(){g.fireChartInstanceEvent('exportCancelled',j)})}}