|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
|   | 
|   | 
| /** | 
|  * AUTO-GENERATED FILE. DO NOT MODIFY. | 
|  */ | 
|   | 
| /* | 
| * Licensed to the Apache Software Foundation (ASF) under one | 
| * or more contributor license agreements.  See the NOTICE file | 
| * distributed with this work for additional information | 
| * regarding copyright ownership.  The ASF licenses this file | 
| * to you under the Apache License, Version 2.0 (the | 
| * "License"); you may not use this file except in compliance | 
| * with the License.  You may obtain a copy of the License at | 
| * | 
| *   http://www.apache.org/licenses/LICENSE-2.0 | 
| * | 
| * Unless required by applicable law or agreed to in writing, | 
| * software distributed under the License is distributed on an | 
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
| * KIND, either express or implied.  See the License for the | 
| * specific language governing permissions and limitations | 
| * under the License. | 
| */ | 
| // @ts-nocheck | 
|   | 
| /** | 
|  * This is a parse of GEXF. | 
|  * | 
|  * The spec of GEXF: | 
|  * https://gephi.org/gexf/1.2draft/gexf-12draft-primer.pdf | 
|  */ | 
| import * as zrUtil from 'zrender/lib/core/util.js'; | 
| export function parse(xml) { | 
|   var doc; | 
|   | 
|   if (typeof xml === 'string') { | 
|     var parser = new DOMParser(); | 
|     doc = parser.parseFromString(xml, 'text/xml'); | 
|   } else { | 
|     doc = xml; | 
|   } | 
|   | 
|   if (!doc || doc.getElementsByTagName('parsererror').length) { | 
|     return null; | 
|   } | 
|   | 
|   var gexfRoot = getChildByTagName(doc, 'gexf'); | 
|   | 
|   if (!gexfRoot) { | 
|     return null; | 
|   } | 
|   | 
|   var graphRoot = getChildByTagName(gexfRoot, 'graph'); | 
|   var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes')); | 
|   var attributesMap = {}; | 
|   | 
|   for (var i = 0; i < attributes.length; i++) { | 
|     attributesMap[attributes[i].id] = attributes[i]; | 
|   } | 
|   | 
|   return { | 
|     nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap), | 
|     links: parseEdges(getChildByTagName(graphRoot, 'edges')) | 
|   }; | 
| } | 
|   | 
| function parseAttributes(parent) { | 
|   return parent ? zrUtil.map(getChildrenByTagName(parent, 'attribute'), function (attribDom) { | 
|     return { | 
|       id: getAttr(attribDom, 'id'), | 
|       title: getAttr(attribDom, 'title'), | 
|       type: getAttr(attribDom, 'type') | 
|     }; | 
|   }) : []; | 
| } | 
|   | 
| function parseNodes(parent, attributesMap) { | 
|   return parent ? zrUtil.map(getChildrenByTagName(parent, 'node'), function (nodeDom) { | 
|     var id = getAttr(nodeDom, 'id'); | 
|     var label = getAttr(nodeDom, 'label'); | 
|     var node = { | 
|       id: id, | 
|       name: label, | 
|       itemStyle: { | 
|         normal: {} | 
|       } | 
|     }; | 
|     var vizSizeDom = getChildByTagName(nodeDom, 'viz:size'); | 
|     var vizPosDom = getChildByTagName(nodeDom, 'viz:position'); | 
|     var vizColorDom = getChildByTagName(nodeDom, 'viz:color'); // let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape'); | 
|   | 
|     var attvaluesDom = getChildByTagName(nodeDom, 'attvalues'); | 
|   | 
|     if (vizSizeDom) { | 
|       node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value')); | 
|     } | 
|   | 
|     if (vizPosDom) { | 
|       node.x = parseFloat(getAttr(vizPosDom, 'x')); | 
|       node.y = parseFloat(getAttr(vizPosDom, 'y')); // z | 
|     } | 
|   | 
|     if (vizColorDom) { | 
|       node.itemStyle.normal.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')'; | 
|     } // if (vizShapeDom) { | 
|     // node.shape = getAttr(vizShapeDom, 'shape'); | 
|     // } | 
|   | 
|   | 
|     if (attvaluesDom) { | 
|       var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue'); | 
|       node.attributes = {}; | 
|   | 
|       for (var j = 0; j < attvalueDomList.length; j++) { | 
|         var attvalueDom = attvalueDomList[j]; | 
|         var attId = getAttr(attvalueDom, 'for'); | 
|         var attValue = getAttr(attvalueDom, 'value'); | 
|         var attribute = attributesMap[attId]; | 
|   | 
|         if (attribute) { | 
|           switch (attribute.type) { | 
|             case 'integer': | 
|             case 'long': | 
|               attValue = parseInt(attValue, 10); | 
|               break; | 
|   | 
|             case 'float': | 
|             case 'double': | 
|               attValue = parseFloat(attValue); | 
|               break; | 
|   | 
|             case 'boolean': | 
|               attValue = attValue.toLowerCase() === 'true'; | 
|               break; | 
|   | 
|             default: | 
|           } | 
|   | 
|           node.attributes[attId] = attValue; | 
|         } | 
|       } | 
|     } | 
|   | 
|     return node; | 
|   }) : []; | 
| } | 
|   | 
| function parseEdges(parent) { | 
|   return parent ? zrUtil.map(getChildrenByTagName(parent, 'edge'), function (edgeDom) { | 
|     var id = getAttr(edgeDom, 'id'); | 
|     var label = getAttr(edgeDom, 'label'); | 
|     var sourceId = getAttr(edgeDom, 'source'); | 
|     var targetId = getAttr(edgeDom, 'target'); | 
|     var edge = { | 
|       id: id, | 
|       name: label, | 
|       source: sourceId, | 
|       target: targetId, | 
|       lineStyle: { | 
|         normal: {} | 
|       } | 
|     }; | 
|     var lineStyle = edge.lineStyle.normal; | 
|     var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness'); | 
|     var vizColorDom = getChildByTagName(edgeDom, 'viz:color'); // let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape'); | 
|   | 
|     if (vizThicknessDom) { | 
|       lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value')); | 
|     } | 
|   | 
|     if (vizColorDom) { | 
|       lineStyle.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')'; | 
|     } // if (vizShapeDom) { | 
|     //     edge.shape = vizShapeDom.getAttribute('shape'); | 
|     // } | 
|   | 
|   | 
|     return edge; | 
|   }) : []; | 
| } | 
|   | 
| function getAttr(el, attrName) { | 
|   return el.getAttribute(attrName); | 
| } | 
|   | 
| function getChildByTagName(parent, tagName) { | 
|   var node = parent.firstChild; | 
|   | 
|   while (node) { | 
|     if (node.nodeType !== 1 || node.nodeName.toLowerCase() !== tagName.toLowerCase()) { | 
|       node = node.nextSibling; | 
|     } else { | 
|       return node; | 
|     } | 
|   } | 
|   | 
|   return null; | 
| } | 
|   | 
| function getChildrenByTagName(parent, tagName) { | 
|   var node = parent.firstChild; | 
|   var children = []; | 
|   | 
|   while (node) { | 
|     if (node.nodeName.toLowerCase() === tagName.toLowerCase()) { | 
|       children.push(node); | 
|     } | 
|   | 
|     node = node.nextSibling; | 
|   } | 
|   | 
|   return children; | 
| } |