| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | 
/** 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.*/var zrUtil = require("zrender/lib/core/util");var formatUtil = require("../../util/format");/** 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.*/var AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single']; // Supported coords.var COORDS = ['cartesian2d', 'polar', 'singleAxis'];/** * @param {string} coordType * @return {boolean} */function isCoordSupported(coordType) {  return zrUtil.indexOf(COORDS, coordType) >= 0;}/** * Create "each" method to iterate names. * * @pubilc * @param  {Array.<string>} names * @param  {Array.<string>=} attrs * @return {Function} */function createNameEach(names, attrs) {  names = names.slice();  var capitalNames = zrUtil.map(names, formatUtil.capitalFirst);  attrs = (attrs || []).slice();  var capitalAttrs = zrUtil.map(attrs, formatUtil.capitalFirst);  return function (callback, context) {    zrUtil.each(names, function (name, index) {      var nameObj = {        name: name,        capital: capitalNames[index]      };      for (var j = 0; j < attrs.length; j++) {        nameObj[attrs[j]] = name + capitalAttrs[j];      }      callback.call(context, nameObj);    });  };}/** * Iterate each dimension name. * * @public * @param {Function} callback The parameter is like: *                            { *                                name: 'angle', *                                capital: 'Angle', *                                axis: 'angleAxis', *                                axisIndex: 'angleAixs', *                                index: 'angleIndex' *                            } * @param {Object} context */var eachAxisDim = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']);/** * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'. * dataZoomModels and 'links' make up one or more graphics. * This function finds the graphic where the source dataZoomModel is in. * * @public * @param {Function} forEachNode Node iterator. * @param {Function} forEachEdgeType edgeType iterator * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id. * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}} */function createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) {  return function (sourceNode) {    var result = {      nodes: [],      records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).    };    forEachEdgeType(function (edgeType) {      result.records[edgeType.name] = {};    });    if (!sourceNode) {      return result;    }    absorb(sourceNode, result);    var existsLink;    do {      existsLink = false;      forEachNode(processSingleNode);    } while (existsLink);    function processSingleNode(node) {      if (!isNodeAbsorded(node, result) && isLinked(node, result)) {        absorb(node, result);        existsLink = true;      }    }    return result;  };  function isNodeAbsorded(node, result) {    return zrUtil.indexOf(result.nodes, node) >= 0;  }  function isLinked(node, result) {    var hasLink = false;    forEachEdgeType(function (edgeType) {      zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {        result.records[edgeType.name][edgeId] && (hasLink = true);      });    });    return hasLink;  }  function absorb(node, result) {    result.nodes.push(node);    forEachEdgeType(function (edgeType) {      zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {        result.records[edgeType.name][edgeId] = true;      });    });  }}exports.isCoordSupported = isCoordSupported;exports.createNameEach = createNameEach;exports.eachAxisDim = eachAxisDim;exports.createLinkedNodesFinder = createLinkedNodesFinder;
 |