@fusioncharts/features
Version:
FusionCharts JavaScript charting framework
1 lines • 9.2 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.isCanvasElemSupported=exports.drawSvgOnCanvas=exports.downloadCharts=exports.browserDetails=void 0;var _svgdecanvo=_interopRequireDefault(require("../_internal/vendors/svgtocanvas/src/svgdecanvo"));var _lib=require("@fusioncharts/core/src/lib");var _eventApi=require("@fusioncharts/core/src/event-api");var _ajax=_interopRequireDefault(require("@fusioncharts/core/src/ajax"));var win=window,Image=win.Image,doc=document,UNDEF,FORM="form",POST="POST",INPUT="input",HIDDEN="hidden",EXPORTACTION={DOWNLOAD:"download",SAVE:"save",DOWNLOADSAVE:"download-save"},isCanvasElemSupported=exports.isCanvasElemSupported=function isCanvasElemSupported(){var elem=doc.createElement("canvas");return!!(elem.getContext&&elem.getContext("2d"))},getBrowserDetails=function getBrowserDetails(){var userAgent=win.navigator.userAgent,index;if((index=userAgent.indexOf("Edge"))!==-1){return{name:"Edge",version:userAgent.substring(index+5,index+11)}}if((index=userAgent.indexOf("Chrome"))!==-1){return{name:"Chrome",version:userAgent.substring(index+7,index+11)}}if((index=userAgent.indexOf("MSIE"))!==-1){return{name:"ie",version:userAgent.substring(index+5,index+9)}}if((index=userAgent.indexOf("rv"))!==-1&&userAgent.indexOf("Trident")!==-1){return{name:"ie",version:userAgent.substring(index+5,index+9)}}if((index=userAgent.indexOf("Firefox"))!==-1){return{name:"Firefox",version:userAgent.substring(index+8,index+12)}}if((index=userAgent.indexOf("Safari"))!==-1){return{name:"Safari",version:userAgent.substring(index+7,index+11)}}return{name:"default",version:"Not Known"}},browserDetails=exports.browserDetails=getBrowserDetails(),sendExportData=function sendExportData(postData,options){var item,form,frameid,iframe,ajax,exportAction=options.exportAction,exportTargetWindow=options.exportTargetWindow,exportCallback=options.exportCallback,chart=options.fusionCharts.apiInstance,paper=options.paper,chartId=options.chartId,exportHandler=options.exportHandler,parameters=postData.parameters,exportFileName,exportFormat,exportIframe;if(exportAction===EXPORTACTION.DOWNLOAD||exportAction===EXPORTACTION.DOWNLOADSAVE){if(/(webkit|gecko)/gi.test(win.navigator.userAgent)&&exportTargetWindow==="_self"){exportTargetWindow=frameid=chartId+"export_iframe";if(!exportIframe){exportIframe=iframe=(0,_lib.createElement)("IFRAME",{name:frameid,width:"1px",height:"1px"},doc.body);iframe.style.cssText="position:absolute;left:-10px;top:-10px;";iframe.setAttribute("sandbox","allow-downloads allow-scripts allow-top-navigation")}}form=(0,_lib.createElement)(FORM,{method:POST,action:exportHandler,target:exportTargetWindow,style:"display:none;"},doc.body);for(item in postData){(0,_lib.createElement)(INPUT,{type:HIDDEN,name:item,value:postData[item]},form)}form.submit();doc.body.removeChild(form);form=UNDEF;exportFileName=parameters.match(/exportfilename=([^|]+)/)[1];exportFormat=parameters.match(/exportformat=([^|]+)/)[1];(0,_eventApi.triggerEvent)("exported",chart,{DOMId:chartId,height:paper.height,width:paper.width,fileName:exportFileName+"."+exportFormat,statusCode:UNDEF,statusMessage:UNDEF,notice:UNDEF});exportCallback&&win[exportCallback]&&typeof win[exportCallback]==="function"&&win[exportCallback]({statusCode:1,statusMessage:"success",DOMId:chartId,width:paper&&paper.width,height:paper&&paper.height});return true}ajax=new _ajax.default((function(resp){var responseObj={};resp.replace(new RegExp("([^?=&]+)(=([^&]*))?","g"),(function($0,$1,$2,$3){responseObj[$1]=$3}));exportCallback&&win[exportCallback]&&typeof win[exportCallback]==="function"&&win[exportCallback](responseObj);(0,_eventApi.triggerEvent)("exported",chart,responseObj)}),(function(err){var responseObj={statusCode:0,statusMessage:"failure",error:err,DOMId:chartId,width:paper&&paper.width,height:paper&&paper.height};exportCallback&&win[exportCallback]&&typeof win[exportCallback]==="function"&&win[exportCallback](responseObj);(0,_eventApi.triggerEvent)("exported",chart,responseObj,[responseObj])}));for(item in postData){postData.hasOwnProperty(item)&&(postData[item]=encodeURIComponent(postData[item]))}ajax.post(exportHandler,postData)},dataurlToBlob=function dataurlToBlob(dataURI){var byteString,mimeString,ia,i;if(dataURI.split(",")[0].indexOf("base64")>=0){byteString=win.atob(dataURI.split(",")[1])}else{byteString=win.unescape(dataURI.split(",")[1])}mimeString=dataURI.split(",")[0].split(":")[1].split(";")[0];ia=new Uint8Array(byteString.length);for(i=0;i<byteString.length;i++){ia[i]=byteString.charCodeAt(i)}return new win.Blob([ia],{type:mimeString})},makeClientSideDownload=function makeClientSideDownload(type,imageData,name,options){if(options===void 0){options={}}var browser=getBrowserDetails(),chartId=options.chartId,exportCallback=options.exportCallback,paper=options.paper,blobObject,a,data=imageData;if(browser.name==="Chrome"||browser.name==="Firefox"||browser.name==="Safari"){if(type==="blob"){data=win.URL.createObjectURL(data)}a=doc.createElement("a");a.download=name;a.href=data;doc.body.appendChild(a);a.onclick=function(){exportCallback&&win[exportCallback]&&typeof win[exportCallback]==="function"&&win[exportCallback]({statusCode:1,statusMessage:"success",DOMId:chartId,width:paper&&paper.width,height:paper&&paper.height});a.parentNode.removeChild(a)};a.click()}else if(browser.name==="ie"||browser.name==="Edge"){if(win.navigator.msSaveBlob){if(type==="url"){blobObject=dataurlToBlob(data)}else{blobObject=data}if(win.navigator.msSaveBlob(blobObject,name)){exportCallback&&win[exportCallback]&&typeof win[exportCallback]==="function"&&win[exportCallback]({statusCode:1,statusMessage:"success",DOMId:chartId,width:paper&&paper.width,height:paper&&paper.height})}}}},byteLength=function byteLength(str){var s,code,i;s=str.length;for(i=str.length-1;i>=0;i--){code=str.charCodeAt(i);if(code>127&&code<=2047){s++}else if(code>2047&&code<=65535){s+=2}if(code>=56320&&code<=57343){i--}}return s},isDataURITooLong=function isDataURITooLong(datauri){var maxChromeByteSize;if(browserDetails.name.toLowerCase()==="Chrome".toLowerCase()){if(byteLength(datauri)>maxChromeByteSize){return true}}return false},downloadCharts=exports.downloadCharts=function downloadCharts(type,data,name,postData,options){var isMobileDevice=/Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent),match=window.location.href.match(/:\/\/(www[0-9]?\.)?((?:[\0-\t\x0B\f\x0E-\u2027\u202A-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])(?:[\0-\.0-9;-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)/),isIpad=navigator.platform==="MacIntel"&&navigator.maxTouchPoints>0||navigator.platform==="iPad";if(isIpad){sendExportData(postData,options);return}if(isMobileDevice&&!match){sendMobileExportData(type,data,name,postData)}else{if(data&&!isDataURITooLong(data)){makeClientSideDownload(type,data,name,options)}else if(postData){sendExportData(postData,options)}}},sendMobileExportData=function sendMobileExportData(type,data,name,postData){if(data&&name){if(type==="blob"){var reader=new FileReader;reader.readAsDataURL(data);reader.onloadend=function(){var exportData=reader.result;callWebViewBridge(exportData,name)}}else{callWebViewBridge(data,name)}}else if(postData){var res=postData.parameters.split("|"),file=res[0].substr(res[0].indexOf("=")+1),ext=res[1].substr(res[1].indexOf("=")+1),fileNmae=file+"."+ext;var sendData;if(ext==="svg"){sendData="data:image/svg+xml;base64,"+win.btoa(win.unescape(encodeURIComponent(postData.stream)))}else{sendData=postData.stream}callWebViewBridge(sendData,fileNmae)}},callWebViewBridge=function callWebViewBridge(data,name){var dataObj={edata:data,name:name,eventName:"download"};window.webViewBridge.send(null,dataObj)},addSVGHeader=function addSVGHeader(svgStr){return'<?xml version="1.0" standalone="no"?>\n <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"\n "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> '+svgStr},svgStrToDataUrl=function svgStrToDataUrl(svgStr){var finalSvgStr=addSVGHeader(svgStr);finalSvgStr="data:image/svg+xml;base64,"+win.btoa(win.unescape(encodeURIComponent(finalSvgStr)));return finalSvgStr},drawSvgOnCanvas=exports.drawSvgOnCanvas=function drawSvgOnCanvas(options,callback){if(options===void 0){options={}}var _options=options,svg=_options.svg,canvas=_options.canvas,x=_options.x,y=_options.y,width=_options.width,height=_options.height,useCanvas=_options.useCanvas;if(browserDetails.name==="ie"||browserDetails.name==="Edge"||useCanvas){new _svgdecanvo.default(svg,canvas,x,y,width,height,(function(){callback()}))}else{var ctx,image,svgDataURI;svgDataURI=svgStrToDataUrl(svg);ctx=canvas.getContext("2d");image=new Image;image.onload=function(){ctx.drawImage(image,x,y,width,height);callback()};image.onerror=function(){(0,_eventApi.raiseWarning)(this,"","run","libSVGToCanvas:drawSvgOnCanvas","Unable to load image for canvas drawing. Aborting attempt.")};image.src=svgDataURI}};browserDetails.hasCanvas=isCanvasElemSupported();browserDetails.hasSvg=_lib.hasSVG;