UNPKG

@fusioncharts/features

Version:

FusionCharts JavaScript charting framework

1 lines 10.3 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _lib=require("@fusioncharts/core/src/lib");var _trustedPolicy=_interopRequireDefault(require("@fusioncharts/utils/src/trusted-policy"));var format="xml",FCGlobal,UNDEF;var COMPACTDATAMODE="compactdatamode",STRING="string",FUNCTION="function",OBJECT="object",FALSE="false",XML_CHILDNODE=1,XML_TEXTNODE=3,VLINE_NAMESPACE="vline",nameItemPairQualifier=function nameItemPairQualifier(rule,item,namespace){return typeof this.items[rule][namespace]===OBJECT?this.items[rule][namespace][item]:this.items[rule][namespace]};function replaceSp(str){return str.replace(/</g,"&lt;").replace(/>/g,"&gt;")}var toJSON=function(){var rules={arr:{set:true,node:true,nodes:true,link:true,links:true,trendlines:true,vtrendlines:true,line:{trendlines:true,vtrendlines:true},data:true,dataset:true,lineset:true,categories:true,category:true,tasks:true,linkeddata:true,application:true,definition:true,axis:true,connectors:true,connector:{connectors:true},trendset:true,row:{rows:true},column:{columns:true},label:{labels:true},color:{colorrange:true},dial:{dials:true},pointer:{pointers:true},point:{trendpoints:true},process:{processes:true},task:{tasks:true},milestone:{milestones:true},datacolumn:{datatable:true},text:{datacolumn:true},item:{legend:true},alert:{alerts:true},groups:{annotations:true},items:{groups:true,data:true},shapes:true,shape:{shapes:true},entitydef:true,entity:{entitydef:true}},tag:{chart:"linkedchart",map:"linkedmap",set:"data",node:"nodes",link:"links",vline:{chart:"data",graph:"data",dataset:"data",categories:"category",linkedchart:"data"},apply:{application:"application"},style:{definition:"definition"},marker:{application:"application",definition:"definition",data:"items"},entity:{entitydef:"entitydef",data:"data"},shape:{shapes:"shapes"},connector:{connectors:{chart:"connector",linkedchart:"connector",map:"connectors",linkedmap:"connectors"}},annotationgroup:{annotations:"groups"},annotation:{groups:"items"}},attr:{vline:{vline:"true"}},ins:{chart:true,map:true,graph:true},dsv:{dataset:"data",categories:"category"},text:{target:"target",value:"value"},group:{styles:{definition:true,application:true},chart:{value:true,target:true},graph:{value:true,target:true},linkedchart:{value:true,target:true},markers:{definition:true,application:true,shapes:true,connectors:true,data:true},map:{entitydef:true,data:true},linkedmap:{entitydef:true,data:true}}},parse,_parser,src;parse={append:function append(childObj,obj,nodeName,parentNodeName){if(rules.arr[nodeName]&&(rules.arr[nodeName]===true||rules.arr[nodeName][parentNodeName]===true)){if(!(obj[nodeName]instanceof Array)){obj[nodeName]=[]}obj[nodeName].push(childObj)}else{obj[nodeName]=childObj}},child:function child(obj,children,parentNodeName,baseObj){var i,nodeName,childNode,childObj,temp,rule;for(i=0;i<children.length;i+=1){childNode=children[i];nodeName=childNode.nodeName.toLowerCase();switch(childNode.nodeType){case XML_CHILDNODE:childObj=parse.attr(childNode.attributes);rule=rules.ins[nodeName];if(rule===true){temp=childObj;childObj={};childObj[nodeName]=temp;temp=UNDEF}rule=rules.attr[nodeName];if(typeof rule===OBJECT){(0,_lib.extend2)(childObj,rule,false,true)}rule=rules.tag[nodeName];if(rule){if(typeof rule===OBJECT&&typeof rule[parentNodeName]===OBJECT){temp=UNDEF;for(temp in rule[parentNodeName]){if(baseObj[temp]){nodeName=rule[parentNodeName][temp];break}}}else if(typeof rule===OBJECT&&typeof rule[parentNodeName]===STRING){nodeName=rule[parentNodeName]}else if(typeof rule===STRING){nodeName=rule}}if(childNode.childNodes.length){rule=rules.group[parentNodeName];if(rule&&rule[nodeName]){parse.child(obj,childNode.childNodes,nodeName,baseObj)}else{parse.child(childObj,childNode.childNodes,nodeName,baseObj)}}rule=rules.group[parentNodeName];if(!(rule&&rule[nodeName])){parse.append(childObj,obj,nodeName,parentNodeName)}break;case XML_TEXTNODE:rule=rules.text[parentNodeName];if(rule){nodeName=rule;childObj=childNode.data;parse.append(childObj,obj,nodeName,parentNodeName)}rule=rules.dsv[parentNodeName];if(typeof rule===STRING&&baseObj.chart&&parseInt(baseObj.chart[COMPACTDATAMODE],10)){nodeName=rule;childObj=childNode.data;obj[nodeName]=obj[nodeName]?obj[nodeName]+childObj:childObj}break}}},attr:function attr(attrObj){var i,obj={};if(!attrObj||!attrObj.length){return obj}for(i=0;i<attrObj.length;i+=1){if(src==="xml"){if(attrObj[i].value){attrObj[i].value=replaceSp(attrObj[i].value)}else if(attrObj[i].nodeValue){attrObj[i].nodeValue=replaceSp(attrObj[i].nodeValue)}}obj[attrObj[i].nodeName.toLowerCase()]=attrObj[i].value||attrObj[i].nodeValue}return obj}};_parser=function parser(xmlData){var jsonObj={},xmlDoc,xmlElem,root,rootName,newNode,nodeEle,rootAttrs,childNodes,i,xml=xmlData;if(typeof xml!==OBJECT&&xml&&typeof xml.toString!==FUNCTION){_parser.errorObject=new TypeError("xml2json.parse()");return jsonObj}xml=xml.toString().replace(/<\!--[\s\S]*?-->/g,"").replace(/<\?xml[\s\S]*?\?>/gi,"").replace(/&(?!([^;\n\r]+?;))/g,"&amp;$1");xml=(0,_lib.fastTrim)(xml);if(!xml){return jsonObj}try{if(window.DOMParser){xmlDoc=(new window.DOMParser).parseFromString(xml,"text/xml")}else{if(document.body&&FCGlobal.options.allowIESafeXMLParsing){xmlElem=document.createElement("xml");xmlElem.innerHTML=_trustedPolicy.default.createHTML(xml);document.body.appendChild(xmlElem);xmlDoc=xmlElem.XMLDocument;document.body.removeChild(xmlElem);xmlElem=null}else{xmlDoc=new window.ActiveXObject("Microsoft.XMLDOM");xmlDoc.async=FALSE;xmlDoc.loadXML(xml)}}if(!(xmlDoc&&xmlDoc.childNodes&&xmlDoc.childNodes.length===1&&(root=xmlDoc.childNodes[0])&&root.nodeName&&(rootName=root.nodeName.toLowerCase())&&(rootName==="chart"||rootName==="map"||rootName==="graph"))){_parser.errorObject=new TypeError("xml2json.parse()");return jsonObj}else if(rootName==="graph"){newNode=xmlDoc.createElement("chart");rootAttrs=root.attributes;i=rootAttrs&&rootAttrs.length||0;while(i--){newNode.setAttribute(rootAttrs[i].name,rootAttrs[i].value);rootAttrs.removeNamedItem(rootAttrs[i].name)}childNodes=root.childNodes;i=childNodes&&childNodes.length||0;if(i){i-=1;nodeEle=root.removeChild(childNodes[i]);newNode.appendChild(nodeEle)}while(i--){nodeEle=root.removeChild(childNodes[i]);newNode.insertBefore(nodeEle,newNode.firstChild)}xmlDoc.replaceChild(newNode,root);root=newNode}}catch(e){_parser.errorObject=e}if(root){if(root.attributes){jsonObj[rootName]=parse.attr(root.attributes)}if(root.childNodes){parse.child(jsonObj,root.childNodes,rootName,jsonObj)}delete _parser.errorObject}else{_parser.errorObject=new TypeError("xml2json.parse()")}return jsonObj};return function(xml){delete _parser.errorObject;src=arguments[arguments.length-1];return{data:_parser(xml),error:_parser.errorObject}}}(),fromJSON=function(){var rules,_parser2;rules={items:{explode:{data:"set",nodes:"node",links:"link",groups:{annotations:"annotationgroup"},items:{groups:"annotation"}},text:{chart:{target:"target",value:"value"},graph:{target:"target",value:"value"}},dsv:{dataset:{data:"dataset"},categories:{category:"categories"}},attr:{chart:{chart:"chart"},graph:{graph:"graph"},map:{map:"map"},linkedmap:{map:"map"},linkedchart:{chart:"chart"}},group:{styles:{definition:"style",application:"apply"},map:{data:"entity",entitydef:"entity"},markers:{definition:"marker",application:"marker",shapes:"shape",connectors:"connector",items:"marker"}},tag:{markers:{items:"data"}}},qualify:nameItemPairQualifier};_parser2=function parser(obj,rootnamespace,namespaceparent,flags){var attrString=_lib.BLANKSTRING,innerXML=_lib.BLANKSTRING,outerXML=_lib.BLANKSTRING,trailXML=_lib.BLANKSTRING,tagName,item,lowerItem,qualifier,namespace=rootnamespace;if(namespace&&typeof namespace.toLowerCase==="function"){namespace=namespace.toLowerCase()}if(namespaceparent===UNDEF&&obj[namespace]){for(item in obj[namespace]){lowerItem=item.toLowerCase();if(lowerItem===COMPACTDATAMODE){flags.applyDSV=obj[namespace][item]===1}}}if(obj instanceof Array){for(item=0;item<obj.length;item+=1){if(typeof obj[item]===STRING){outerXML+=(0,_lib.xssEncode)(obj[item])}else{outerXML+=_parser2(obj[item],namespace,namespaceparent,flags)}}}else{for(item in obj){lowerItem=item.toLowerCase().replace(/[`~!@#$%^&*()|+\=?;:'", <>\{\}\[\]\\\/]/gi,"");if(obj[item]instanceof Array&&(qualifier=rules.qualify("group",lowerItem,namespace))){tagName=rules.qualify("tag",lowerItem,namespace)||lowerItem;innerXML+="<"+tagName+">"+_parser2(obj[item],qualifier,namespace,flags)+"</"+tagName+">"}else if(typeof obj[item]===OBJECT){if(qualifier=rules.qualify("attr",lowerItem,namespace)){trailXML=_parser2(obj[item],qualifier,namespace,flags).replace(/\s*\/\>/gi,"");namespace=lowerItem}else{innerXML+=_parser2(obj[item],lowerItem,namespace,flags)}}else{if(flags.applyDSV&&(qualifier=rules.qualify("dsv",lowerItem,namespace))){innerXML+=obj[item]}else if(qualifier=rules.qualify("text",lowerItem,namespace)){tagName=rules.qualify("tag",lowerItem,namespace)||qualifier;innerXML+="<"+tagName+">"+obj[item]+"</"+tagName+">"}else if(lowerItem==="vline"&&Boolean(obj[item])){namespace=VLINE_NAMESPACE}else{attrString+=" "+lowerItem+'="'+(0,_lib.xssEncode)(obj[item]).toString().replace(/\"/gi,"&quot;")+'"'}}}if(qualifier=rules.qualify("explode",namespaceparent,namespace)){namespace=qualifier}tagName=namespace;outerXML=(trailXML!==""?trailXML:"<"+tagName)+attrString+(innerXML!==""?">"+innerXML+"</"+tagName+">":" />")}return outerXML};return function(paramjson){delete _parser2.errorObject;var jsonData=paramjson;if(jsonData&&typeof jsonData===STRING){try{jsonData=JSON.parse(jsonData)}catch(e){_parser2.errorObject=e}}var rootNS=jsonData&&jsonData.graph?"graph":jsonData&&jsonData.map?"map":"chart";return{data:_parser2(jsonData,rootNS,UNDEF,{}),error:_parser2.errorObject}}}(),getXMLData=function getXMLData(){return this.getChartData("xml")},setXMLData=function setXMLData(data){this.setChartData(data,"xml")},wrapper=function wrapper(FusionCharts){if(FusionCharts){FCGlobal=FusionCharts;FusionCharts.prototype.getXMLData=getXMLData;FusionCharts.prototype.setXMLData=setXMLData}return{format:format,toJSON:toJSON,fromJSON:fromJSON}};var _default=exports.default={extension:wrapper,name:"XML",type:"transcoder",requiresFusionCharts:true};