UNPKG

@fusioncharts/features

Version:

FusionCharts JavaScript charting framework

1 lines 7.46 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.svgStrToDataUrl=exports.replaceImagesWithNonDataUrl=exports.removeImagesWithNonDataURL=exports.parseUrl=exports.objCacheFunctions=exports.makeImageUrlsAbsolute=exports.logCharts=exports.isCacheAllImagesCompleted=exports.hasUndownloadableImage=exports.getImageCachedDetails=exports.extractNonDataURLFromSVG=exports.extractNonDataImageFromSVG=exports.embedImagesWithNonDataURL=exports.createExportActionOldString=exports.cacheAllImages=exports.LOGMODE=exports.EXPORTMODE=exports.EXPORTFORMAT=exports.EXPORTACTION=void 0;var _libSvgToCanvas=require("./lib-svg-to-canvas");var _ajax=_interopRequireDefault(require("@fusioncharts/core/src/ajax"));var _lib=require("@fusioncharts/core/src/lib");var _trustedPolicy=_interopRequireDefault(require("@fusioncharts/utils/src/trusted-policy"));var extractNonDataImageFromSVG=exports.extractNonDataImageFromSVG=function extractNonDataImageFromSVG(svgStr){var URLRegex,dataURIRegex,arrImageStr,match,tmpImageStr,tmpUrl;URLRegex=/(<image [^\>]*href=["']([^\>'"]*)["'][^\>]*\>)/g;dataURIRegex=/^\s*data:([a-z]+\/[a-z]+(;[a-z\-]+\=[a-z\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i;arrImageStr=[];do{match=URLRegex.exec(svgStr);if(match!==null){tmpImageStr=match[1];tmpUrl=match[2];if(!dataURIRegex.test(tmpUrl)){arrImageStr.push(tmpImageStr)}}}while(match&&match!==null);return arrImageStr},removeImagesWithNonDataURL=exports.removeImagesWithNonDataURL=function removeImagesWithNonDataURL(svgStrContent){var arrImageStr,i,currentImageStr,svgStr=svgStrContent;arrImageStr=extractNonDataImageFromSVG(svgStr);for(i=0;i<arrImageStr.length;i++){currentImageStr=arrImageStr[i];svgStr=svgStr.replace(currentImageStr,"")}return svgStr},extractNonDataURLFromSVG=exports.extractNonDataURLFromSVG=function extractNonDataURLFromSVG(svgStr,returnURLAsAbsolute){if(returnURLAsAbsolute===void 0){returnURLAsAbsolute=true}var anyImageURLRegex,dataURIRegex,arrUrl,match,tmpUrl;anyImageURLRegex=/<image [^\>]*href=["']([^\>'"]*)["'][^\>]*\>/g;dataURIRegex=/^\s*data:([a-z]+\/[a-z]+(;[a-z\-]+\=[a-z\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i;arrUrl=[];do{match=anyImageURLRegex.exec(svgStr);if(match!==null){tmpUrl=match[1];if(dataURIRegex.test(tmpUrl)){continue}if(returnURLAsAbsolute){tmpUrl=parseUrl(tmpUrl).href}arrUrl.push(tmpUrl)}}while(match&&match!==null);return arrUrl},parseUrl=exports.parseUrl=function parseUrl(url){var div=document.createElement("div");div.innerHTML=_trustedPolicy.default.createHTML("<a></a>");div.firstChild.href=url;div.innerHTML=_trustedPolicy.default.createHTML(div.innerHTML);return div.firstChild},EXPORTACTION=exports.EXPORTACTION={DOWNLOAD:"download",SAVE:"save",DOWNLOADSAVE:"download-save"},EXPORTMODE=exports.EXPORTMODE={CLIENT:"client",SERVER:"server",AUTO:"auto"},EXPORTFORMAT=exports.EXPORTFORMAT={PNG:"png",SVG:"svg",JPEG:"jpeg",JPG:"jpg",PDF:"pdf",XLSX:"xlsx",XLS:"xls",CSV:"csv"},LOGMODE=exports.LOGMODE={CLIENT:"client",SERVER:"server",AUTO:"auto"},createExportActionOldString=exports.createExportActionOldString=function createExportActionOldString(exportAction){return{download:EXPORTACTION.DOWNLOAD,"download-save":EXPORTACTION.DOWNLOAD,save:EXPORTACTION.SAVE}[exportAction]},objCacheFunctions=exports.objCacheFunctions=function(){var imgCache,cacheAllImages,getImageCachedDetails,isCacheAllImagesCompleted;imgCache={};imgCache.cacheCompleted=false;cacheAllImages=function cacheAllImages(svgStr,noOP,callback){if(noOP===void 0){noOP=false}var arrUrl,arrLength,countCompletedImages,i;arrUrl=extractNonDataURLFromSVG(svgStr);arrLength=arrUrl.length;if((0,_libSvgToCanvas.isCanvasElemSupported)()&&!noOP&&arrLength){countCompletedImages=0;for(i=0;i<arrLength;i++){(function(){var currentUrl,img;currentUrl=arrUrl[i];if(currentUrl in imgCache){countCompletedImages++;if(arrLength===countCompletedImages){imgCache.cacheCompleted=true;callback()}return}img=new Image;img.crossOrigin=_lib.BLANKSTRING;img.onload=function(){var canvas,imageUri;canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;canvas.getContext("2d").drawImage(this,0,0);try{imageUri=canvas.toDataURL("image/png");imgCache[currentUrl]={loaded:true,notCORS:true,imageUri:imageUri}}catch(err){imgCache[currentUrl]={loaded:true,notCORS:false}}finally{countCompletedImages++;if(arrLength===countCompletedImages){imgCache.cacheCompleted=true;callback()}}};img.onerror=function(){imgCache[currentUrl]={loaded:false};countCompletedImages++;if(arrLength===countCompletedImages){imgCache.cacheCompleted=true;callback()}};img.src=currentUrl})()}}else{callback()}};getImageCachedDetails=function getImageCachedDetails(url){return imgCache[url]};isCacheAllImagesCompleted=function isCacheAllImagesCompleted(){return imgCache.cacheCompleted};return{cacheAllImages:cacheAllImages,getImageCachedDetails:getImageCachedDetails,isCacheAllImagesCompleted:isCacheAllImagesCompleted}}(),cacheAllImages=exports.cacheAllImages=objCacheFunctions.cacheAllImages,getImageCachedDetails=exports.getImageCachedDetails=objCacheFunctions.getImageCachedDetails,isCacheAllImagesCompleted=exports.isCacheAllImagesCompleted=objCacheFunctions.isCacheAllImagesCompleted,replaceImageToAbsoluteValue=function replaceImageToAbsoluteValue(matchStr){matchStr=matchStr.replace(/(:href=")([^"]*)(")/gi,(function(matchSubStr,p1,p2,p3){return p1+parseUrl(p2).href+p3}));return matchStr},makeImageUrlsAbsolute=exports.makeImageUrlsAbsolute=function makeImageUrlsAbsolute(svgStr){return svgStr.replace(/<image [^\>]*\>/gi,replaceImageToAbsoluteValue)},embedImagesWithNonDataURL=exports.embedImagesWithNonDataURL=function embedImagesWithNonDataURL(svgStrInput){var arrURL,i,currentURL,currentURLDetails,svgStr=makeImageUrlsAbsolute(svgStrInput);arrURL=extractNonDataURLFromSVG(svgStr);for(i=0;i<arrURL.length;i++){currentURL=arrURL[i];currentURLDetails=getImageCachedDetails(currentURL);if(currentURLDetails!==_lib.UNDEF&&currentURLDetails.loaded&&currentURLDetails.notCORS&&currentURLDetails.imageUri){svgStr=svgStr.replace(currentURL,currentURLDetails.imageUri)}}return svgStr},replaceImagesWithNonDataUrl=exports.replaceImagesWithNonDataUrl=function replaceImagesWithNonDataUrl(svgStr){return removeImagesWithNonDataURL(embedImagesWithNonDataURL(svgStr))},hasUndownloadableImage=exports.hasUndownloadableImage=function hasUndownloadableImage(svgStrInput){var svgStr=embedImagesWithNonDataURL(svgStrInput);return svgStr!==removeImagesWithNonDataURL(svgStr)},logChartsWithoutCheck=function logChartsWithoutCheck(postData,options){var ajaxLog=new _ajax.default(_lib.stubFN,_lib.stubFN);for(var item in postData){postData.hasOwnProperty(item)&&(postData[item]=encodeURIComponent(postData[item]))}ajaxLog.post(options.logHandler,postData)},logCharts=exports.logCharts=function logCharts(postData,options){if(options.logEnabled&&options.logMode!==LOGMODE.SERVER){logChartsWithoutCheck(postData,options)}},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=exports.svgStrToDataUrl=function svgStrToDataUrl(svgStr){var finalSvgStr=addSVGHeader(svgStr);finalSvgStr="data:image/svg+xml;base64,"+window.btoa(window.unescape(encodeURIComponent(finalSvgStr)));return finalSvgStr};