| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | 
/** 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 _parseSVG = require("zrender/lib/tool/parseSVG");var parseSVG = _parseSVG.parseSVG;var makeViewBoxTransform = _parseSVG.makeViewBoxTransform;var Group = require("zrender/lib/container/Group");var Rect = require("zrender/lib/graphic/shape/Rect");var _util = require("zrender/lib/core/util");var assert = _util.assert;var createHashMap = _util.createHashMap;var BoundingRect = require("zrender/lib/core/BoundingRect");var _model = require("../../util/model");var makeInner = _model.makeInner;/** 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 inner = makeInner();var _default = {  /**   * @param {string} mapName   * @param {Object} mapRecord {specialAreas, geoJSON}   * @return {Object} {root, boundingRect}   */  load: function (mapName, mapRecord) {    var originRoot = inner(mapRecord).originRoot;    if (originRoot) {      return {        root: originRoot,        boundingRect: inner(mapRecord).boundingRect      };    }    var graphic = buildGraphic(mapRecord);    inner(mapRecord).originRoot = graphic.root;    inner(mapRecord).boundingRect = graphic.boundingRect;    return graphic;  },  makeGraphic: function (mapName, mapRecord, hostKey) {    // For performance consideration (in large SVG), graphic only maked    // when necessary and reuse them according to hostKey.    var field = inner(mapRecord);    var rootMap = field.rootMap || (field.rootMap = createHashMap());    var root = rootMap.get(hostKey);    if (root) {      return root;    }    var originRoot = field.originRoot;    var boundingRect = field.boundingRect; // For performance, if originRoot is not used by a view,    // assign it to a view, but not reproduce graphic elements.    if (!field.originRootHostKey) {      field.originRootHostKey = hostKey;      root = originRoot;    } else {      root = buildGraphic(mapRecord, boundingRect).root;    }    return rootMap.set(hostKey, root);  },  removeGraphic: function (mapName, mapRecord, hostKey) {    var field = inner(mapRecord);    var rootMap = field.rootMap;    rootMap && rootMap.removeKey(hostKey);    if (hostKey === field.originRootHostKey) {      field.originRootHostKey = null;    }  }};function buildGraphic(mapRecord, boundingRect) {  var svgXML = mapRecord.svgXML;  var result;  var root;  try {    result = svgXML && parseSVG(svgXML, {      ignoreViewBox: true,      ignoreRootClip: true    }) || {};    root = result.root;    assert(root != null);  } catch (e) {    throw new Error('Invalid svg format\n' + e.message);  }  var svgWidth = result.width;  var svgHeight = result.height;  var viewBoxRect = result.viewBoxRect;  if (!boundingRect) {    boundingRect = svgWidth == null || svgHeight == null ? // If svg width / height not specified, calculate    // bounding rect as the width / height    root.getBoundingRect() : new BoundingRect(0, 0, 0, 0);    if (svgWidth != null) {      boundingRect.width = svgWidth;    }    if (svgHeight != null) {      boundingRect.height = svgHeight;    }  }  if (viewBoxRect) {    var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect.width, boundingRect.height);    var elRoot = root;    root = new Group();    root.add(elRoot);    elRoot.scale = viewBoxTransform.scale;    elRoot.position = viewBoxTransform.position;  }  root.setClipPath(new Rect({    shape: boundingRect.plain()  }));  return {    root: root,    boundingRect: boundingRect  };}module.exports = _default;
 |