| 
/* 
 | 
* 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; 
 | 
} 
 |