1 line
82 KiB
JSON
1 line
82 KiB
JSON
{"ast":null,"code":"import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.array.fill.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.array.map.js\";\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport RoamController from './RoamController.js';\nimport * as roamHelper from '../../component/helper/roamHelper.js';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis, enableComponentHighDownFeatures, setDefaultStateProxy } from '../../util/states.js';\nimport geoSourceManager from '../../coord/geo/geoSourceManager.js';\nimport { getUID } from '../../util/component.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { makeInner } from '../../util/model.js';\n/**\n * Only these tags enable use `itemStyle` if they are named in SVG.\n * Other tags like <text> <tspan> <image> might not suitable for `itemStyle`.\n * They will not be considered to be styled until some requirements come.\n */\n\nvar OPTION_STYLE_ENABLED_TAGS = ['rect', 'circle', 'line', 'ellipse', 'polygon', 'polyline', 'path'];\nvar OPTION_STYLE_ENABLED_TAG_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS);\nvar STATE_TRIGGER_TAG_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g']));\nvar LABEL_HOST_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g']));\nvar mapLabelRaw = makeInner();\n\nfunction getFixedItemStyle(model) {\n var itemStyle = model.getItemStyle();\n var areaColor = model.get('areaColor'); // If user want the color not to be changed when hover,\n // they should both set areaColor and color to be null.\n\n if (areaColor != null) {\n itemStyle.fill = areaColor;\n }\n\n return itemStyle;\n} // Only stroke can be used for line.\n// Using fill in style if stroke not exits.\n// TODO Not sure yet. Perhaps a separate `lineStyle`?\n\n\nfunction fixLineStyle(styleHost) {\n var style = styleHost.style;\n\n if (style) {\n style.stroke = style.stroke || style.fill;\n style.fill = null;\n }\n}\n\nvar MapDraw =\n/** @class */\nfunction () {\n function MapDraw(api) {\n var group = new graphic.Group();\n this.uid = getUID('ec_map_draw');\n this._controller = new RoamController(api.getZr());\n this._controllerHost = {\n target: group\n };\n this.group = group;\n group.add(this._regionsGroup = new graphic.Group());\n group.add(this._svgGroup = new graphic.Group());\n }\n\n MapDraw.prototype.draw = function (mapOrGeoModel, ecModel, api, fromView, payload) {\n var isGeo = mapOrGeoModel.mainType === 'geo'; // Map series has data. GEO model that controlled by map series\n // will be assigned with map data. Other GEO model has no data.\n\n var data = mapOrGeoModel.getData && mapOrGeoModel.getData();\n isGeo && ecModel.eachComponent({\n mainType: 'series',\n subType: 'map'\n }, function (mapSeries) {\n if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {\n data = mapSeries.getData();\n }\n });\n var geo = mapOrGeoModel.coordinateSystem;\n var regionsGroup = this._regionsGroup;\n var group = this.group;\n var transformInfo = geo.getTransformInfo();\n var transformInfoRaw = transformInfo.raw;\n var transformInfoRoam = transformInfo.roam; // No animation when first draw or in action\n\n var isFirstDraw = !regionsGroup.childAt(0) || payload;\n\n if (isFirstDraw) {\n group.x = transformInfoRoam.x;\n group.y = transformInfoRoam.y;\n group.scaleX = transformInfoRoam.scaleX;\n group.scaleY = transformInfoRoam.scaleY;\n group.dirty();\n } else {\n graphic.updateProps(group, transformInfoRoam, mapOrGeoModel);\n }\n\n var isVisualEncodedByVisualMap = data && data.getVisual('visualMeta') && data.getVisual('visualMeta').length > 0;\n var viewBuildCtx = {\n api: api,\n geo: geo,\n mapOrGeoModel: mapOrGeoModel,\n data: data,\n isVisualEncodedByVisualMap: isVisualEncodedByVisualMap,\n isGeo: isGeo,\n transformInfoRaw: transformInfoRaw\n };\n\n if (geo.resourceType === 'geoJSON') {\n this._buildGeoJSON(viewBuildCtx);\n } else if (geo.resourceType === 'geoSVG') {\n this._buildSVG(viewBuildCtx);\n }\n\n this._updateController(mapOrGeoModel, ecModel, api);\n\n this._updateMapSelectHandler(mapOrGeoModel, regionsGroup, api, fromView);\n };\n\n MapDraw.prototype._buildGeoJSON = function (viewBuildCtx) {\n var regionsGroupByName = this._regionsGroupByName = zrUtil.createHashMap();\n var regionsInfoByName = zrUtil.createHashMap();\n var regionsGroup = this._regionsGroup;\n var transformInfoRaw = viewBuildCtx.transformInfoRaw;\n var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;\n var data = viewBuildCtx.data;\n var projection = viewBuildCtx.geo.projection;\n var projectionStream = projection && projection.stream;\n\n function transformPoint(point, project) {\n if (project) {\n // projection may return null point.\n point = project(point);\n }\n\n return point && [point[0] * transformInfoRaw.scaleX + transformInfoRaw.x, point[1] * transformInfoRaw.scaleY + transformInfoRaw.y];\n }\n\n ;\n\n function transformPolygonPoints(inPoints) {\n var outPoints = []; // If projectionStream is provided. Use it instead of single point project.\n\n var project = !projectionStream && projection && projection.project;\n\n for (var i = 0; i < inPoints.length; ++i) {\n var newPt = transformPoint(inPoints[i], project);\n newPt && outPoints.push(newPt);\n }\n\n return outPoints;\n }\n\n function getPolyShape(points) {\n return {\n shape: {\n points: transformPolygonPoints(points)\n }\n };\n }\n\n regionsGroup.removeAll(); // Only when the resource is GeoJSON, there is `geo.regions`.\n\n zrUtil.each(viewBuildCtx.geo.regions, function (region) {\n var regionName = region.name; // Consider in GeoJson properties.name may be duplicated, for example,\n // there is multiple region named \"United Kindom\" or \"France\" (so many\n // colonies). And it is not appropriate to merge them in geo, which\n // will make them share the same label and bring trouble in label\n // location calculation.\n\n var regionGroup = regionsGroupByName.get(regionName);\n\n var _a = regionsInfoByName.get(regionName) || {},\n dataIdx = _a.dataIdx,\n regionModel = _a.regionModel;\n\n if (!regionGroup) {\n regionGroup = regionsGroupByName.set(regionName, new graphic.Group());\n regionsGroup.add(regionGroup);\n dataIdx = data ? data.indexOfName(regionName) : null;\n regionModel = viewBuildCtx.isGeo ? mapOrGeoModel.getRegionModel(regionName) : data ? data.getItemModel(dataIdx) : null;\n regionsInfoByName.set(regionName, {\n dataIdx: dataIdx,\n regionModel: regionModel\n });\n }\n\n var polygonSubpaths = [];\n var polylineSubpaths = [];\n zrUtil.each(region.geometries, function (geometry) {\n // Polygon and MultiPolygon\n if (geometry.type === 'polygon') {\n var polys = [geometry.exterior].concat(geometry.interiors || []);\n\n if (projectionStream) {\n polys = projectPolys(polys, projectionStream);\n }\n\n zrUtil.each(polys, function (poly) {\n polygonSubpaths.push(new graphic.Polygon(getPolyShape(poly)));\n });\n } // LineString and MultiLineString\n else {\n var points = geometry.points;\n\n if (projectionStream) {\n points = projectPolys(points, projectionStream, true);\n }\n\n zrUtil.each(points, function (points) {\n polylineSubpaths.push(new graphic.Polyline(getPolyShape(points)));\n });\n }\n });\n var centerPt = transformPoint(region.getCenter(), projection && projection.project);\n\n function createCompoundPath(subpaths, isLine) {\n if (!subpaths.length) {\n return;\n }\n\n var compoundPath = new graphic.CompoundPath({\n culling: true,\n segmentIgnoreThreshold: 1,\n shape: {\n paths: subpaths\n }\n });\n regionGroup.add(compoundPath);\n applyOptionStyleForRegion(viewBuildCtx, compoundPath, dataIdx, regionModel);\n resetLabelForRegion(viewBuildCtx, compoundPath, regionName, regionModel, mapOrGeoModel, dataIdx, centerPt);\n\n if (isLine) {\n fixLineStyle(compoundPath);\n zrUtil.each(compoundPath.states, fixLineStyle);\n }\n }\n\n createCompoundPath(polygonSubpaths);\n createCompoundPath(polylineSubpaths, true);\n }); // Ensure children have been added to `regionGroup` before calling them.\n\n regionsGroupByName.each(function (regionGroup, regionName) {\n var _a = regionsInfoByName.get(regionName),\n dataIdx = _a.dataIdx,\n regionModel = _a.regionModel;\n\n resetEventTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel, dataIdx);\n resetTooltipForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);\n resetStateTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);\n }, this);\n };\n\n MapDraw.prototype._buildSVG = function (viewBuildCtx) {\n var mapName = viewBuildCtx.geo.map;\n var transformInfoRaw = viewBuildCtx.transformInfoRaw;\n this._svgGroup.x = transformInfoRaw.x;\n this._svgGroup.y = transformInfoRaw.y;\n this._svgGroup.scaleX = transformInfoRaw.scaleX;\n this._svgGroup.scaleY = transformInfoRaw.scaleY;\n\n if (this._svgResourceChanged(mapName)) {\n this._freeSVG();\n\n this._useSVG(mapName);\n }\n\n var svgDispatcherMap = this._svgDispatcherMap = zrUtil.createHashMap();\n var focusSelf = false;\n zrUtil.each(this._svgGraphicRecord.named, function (namedItem) {\n // Note that we also allow different elements have the same name.\n // For example, a glyph of a city and the label of the city have\n // the same name and their tooltip info can be defined in a single\n // region option.\n var regionName = namedItem.name;\n var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;\n var data = viewBuildCtx.data;\n var svgNodeTagLower = namedItem.svgNodeTagLower;\n var el = namedItem.el;\n var dataIdx = data ? data.indexOfName(regionName) : null;\n var regionModel = mapOrGeoModel.getRegionModel(regionName);\n\n if (OPTION_STYLE_ENABLED_TAG_MAP.get(svgNodeTagLower) != null && el instanceof Displayable) {\n applyOptionStyleForRegion(viewBuildCtx, el, dataIdx, regionModel);\n }\n\n if (el instanceof Displayable) {\n el.culling = true;\n } // We do not know how the SVG like so we'd better not to change z2.\n // Otherwise it might bring some unexpected result. For example,\n // an area hovered that make some inner city can not be clicked.\n\n\n el.z2EmphasisLift = 0; // If self named:\n\n if (!namedItem.namedFrom) {\n // label should batter to be displayed based on the center of <g>\n // if it is named rather than displayed on each child.\n if (LABEL_HOST_MAP.get(svgNodeTagLower) != null) {\n resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx, null);\n }\n\n resetEventTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx);\n resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);\n\n if (STATE_TRIGGER_TAG_MAP.get(svgNodeTagLower) != null) {\n var focus_1 = resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);\n\n if (focus_1 === 'self') {\n focusSelf = true;\n }\n\n var els = svgDispatcherMap.get(regionName) || svgDispatcherMap.set(regionName, []);\n els.push(el);\n }\n }\n }, this);\n\n this._enableBlurEntireSVG(focusSelf, viewBuildCtx);\n };\n\n MapDraw.prototype._enableBlurEntireSVG = function (focusSelf, viewBuildCtx) {\n // It's a little complicated to support blurring the entire geoSVG in series-map.\n // So do not support it until some requirements come.\n // At present, in series-map, only regions can be blurred.\n if (focusSelf && viewBuildCtx.isGeo) {\n var blurStyle = viewBuildCtx.mapOrGeoModel.getModel(['blur', 'itemStyle']).getItemStyle(); // Only support `opacity` here. Because not sure that other props are suitable for\n // all of the elements generated by SVG (especially for Text/TSpan/Image/... ).\n\n var opacity_1 = blurStyle.opacity;\n\n this._svgGraphicRecord.root.traverse(function (el) {\n if (!el.isGroup) {\n // PENDING: clear those settings to SVG elements when `_freeSVG`.\n // (Currently it happen not to be needed.)\n setDefaultStateProxy(el);\n var style = el.ensureState('blur').style || {}; // Do not overwrite the region style that already set from region option.\n\n if (style.opacity == null && opacity_1 != null) {\n style.opacity = opacity_1;\n } // If `ensureState('blur').style = {}`, there will be default opacity.\n // Enable `stateTransition` (animation).\n\n\n el.ensureState('emphasis');\n }\n });\n }\n };\n\n MapDraw.prototype.remove = function () {\n this._regionsGroup.removeAll();\n\n this._regionsGroupByName = null;\n\n this._svgGroup.removeAll();\n\n this._freeSVG();\n\n this._controller.dispose();\n\n this._controllerHost = null;\n };\n\n MapDraw.prototype.findHighDownDispatchers = function (name, geoModel) {\n if (name == null) {\n return [];\n }\n\n var geo = geoModel.coordinateSystem;\n\n if (geo.resourceType === 'geoJSON') {\n var regionsGroupByName = this._regionsGroupByName;\n\n if (regionsGroupByName) {\n var regionGroup = regionsGroupByName.get(name);\n return regionGroup ? [regionGroup] : [];\n }\n } else if (geo.resourceType === 'geoSVG') {\n return this._svgDispatcherMap && this._svgDispatcherMap.get(name) || [];\n }\n };\n\n MapDraw.prototype._svgResourceChanged = function (mapName) {\n return this._svgMapName !== mapName;\n };\n\n MapDraw.prototype._useSVG = function (mapName) {\n var resource = geoSourceManager.getGeoResource(mapName);\n\n if (resource && resource.type === 'geoSVG') {\n var svgGraphic = resource.useGraphic(this.uid);\n\n this._svgGroup.add(svgGraphic.root);\n\n this._svgGraphicRecord = svgGraphic;\n this._svgMapName = mapName;\n }\n };\n\n MapDraw.prototype._freeSVG = function () {\n var mapName = this._svgMapName;\n\n if (mapName == null) {\n return;\n }\n\n var resource = geoSourceManager.getGeoResource(mapName);\n\n if (resource && resource.type === 'geoSVG') {\n resource.freeGraphic(this.uid);\n }\n\n this._svgGraphicRecord = null;\n this._svgDispatcherMap = null;\n\n this._svgGroup.removeAll();\n\n this._svgMapName = null;\n };\n\n MapDraw.prototype._updateController = function (mapOrGeoModel, ecModel, api) {\n var geo = mapOrGeoModel.coordinateSystem;\n var controller = this._controller;\n var controllerHost = this._controllerHost; // @ts-ignore FIXME:TS\n\n controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n controllerHost.zoom = geo.getZoom(); // roamType is will be set default true if it is null\n // @ts-ignore FIXME:TS\n\n controller.enable(mapOrGeoModel.get('roam') || false);\n var mainType = mapOrGeoModel.mainType;\n\n function makeActionBase() {\n var action = {\n type: 'geoRoam',\n componentType: mainType\n };\n action[mainType + 'Id'] = mapOrGeoModel.id;\n return action;\n }\n\n controller.off('pan').on('pan', function (e) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n dx: e.dx,\n dy: e.dy,\n animation: {\n duration: 0\n }\n }));\n }, this);\n controller.off('zoom').on('zoom', function (e) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n zoom: e.scale,\n originX: e.originX,\n originY: e.originY,\n animation: {\n duration: 0\n }\n }));\n }, this);\n controller.setPointerChecker(function (e, x, y) {\n return geo.containPoint([x, y]) && !onIrrelevantElement(e, api, mapOrGeoModel);\n });\n };\n /**\n * FIXME: this is a temporarily workaround.\n * When `geoRoam` the elements need to be reset in `MapView['render']`, because the props like\n * `ignore` might have been modified by `LabelManager`, and `LabelManager#addLabelsOfSeries`\n * will subsequently cache `defaultAttr` like `ignore`. If do not do this reset, the modified\n * props will have no chance to be restored.\n * Note: This reset should be after `clearStates` in `renderSeries` because `useStates` in\n * `renderSeries` will cache the modified `ignore` to `el._normalState`.\n * TODO:\n * Use clone/immutable in `LabelManager`?\n */\n\n\n MapDraw.prototype.resetForLabelLayout = function () {\n this.group.traverse(function (el) {\n var label = el.getTextContent();\n\n if (label) {\n label.ignore = mapLabelRaw(label).ignore;\n }\n });\n };\n\n MapDraw.prototype._updateMapSelectHandler = function (mapOrGeoModel, regionsGroup, api, fromView) {\n var mapDraw = this;\n regionsGroup.off('mousedown');\n regionsGroup.off('click'); // @ts-ignore FIXME:TS resolve type conflict\n\n if (mapOrGeoModel.get('selectedMode')) {\n regionsGroup.on('mousedown', function () {\n mapDraw._mouseDownFlag = true;\n });\n regionsGroup.on('click', function (e) {\n if (!mapDraw._mouseDownFlag) {\n return;\n }\n\n mapDraw._mouseDownFlag = false;\n });\n }\n };\n\n return MapDraw;\n}();\n\n;\n\nfunction applyOptionStyleForRegion(viewBuildCtx, el, dataIndex, regionModel) {\n // All of the path are using `itemStyle`, because\n // (1) Some SVG also use fill on polyline (The different between\n // polyline and polygon is \"open\" or \"close\" but not fill or not).\n // (2) For the common props like opacity, if some use itemStyle\n // and some use `lineStyle`, it might confuse users.\n // (3) Most SVG use <path>, where can not detect whether to draw a \"line\"\n // or a filled shape, so use `itemStyle` for <path>.\n var normalStyleModel = regionModel.getModel('itemStyle');\n var emphasisStyleModel = regionModel.getModel(['emphasis', 'itemStyle']);\n var blurStyleModel = regionModel.getModel(['blur', 'itemStyle']);\n var selectStyleModel = regionModel.getModel(['select', 'itemStyle']); // NOTE: DON'T use 'style' in visual when drawing map.\n // This component is used for drawing underlying map for both geo component and map series.\n\n var normalStyle = getFixedItemStyle(normalStyleModel);\n var emphasisStyle = getFixedItemStyle(emphasisStyleModel);\n var selectStyle = getFixedItemStyle(selectStyleModel);\n var blurStyle = getFixedItemStyle(blurStyleModel); // Update the itemStyle if has data visual\n\n var data = viewBuildCtx.data;\n\n if (data) {\n // Only visual color of each item will be used. It can be encoded by visualMap\n // But visual color of series is used in symbol drawing\n // Visual color for each series is for the symbol draw\n var style = data.getItemVisual(dataIndex, 'style');\n var decal = data.getItemVisual(dataIndex, 'decal');\n\n if (viewBuildCtx.isVisualEncodedByVisualMap && style.fill) {\n normalStyle.fill = style.fill;\n }\n\n if (decal) {\n normalStyle.decal = createOrUpdatePatternFromDecal(decal, viewBuildCtx.api);\n }\n } // SVG text, tspan and image can be named but not supporeted\n // to be styled by region option yet.\n\n\n el.setStyle(normalStyle);\n el.style.strokeNoScale = true;\n el.ensureState('emphasis').style = emphasisStyle;\n el.ensureState('select').style = selectStyle;\n el.ensureState('blur').style = blurStyle; // Enable blur\n\n setDefaultStateProxy(el);\n}\n\nfunction resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists.\ndataIdx, // If labelXY not provided, use `textConfig.position: 'inside'`\nlabelXY) {\n var data = viewBuildCtx.data;\n var isGeo = viewBuildCtx.isGeo;\n var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx));\n var itemLayout = data && data.getItemLayout(dataIdx); // In the following cases label will be drawn\n // 1. In map series and data value is NaN\n // 2. In geo component\n // 3. Region has no series legendIcon, which will be add a showLabel flag in mapSymbolLayout\n\n if (isGeo || isDataNaN || itemLayout && itemLayout.showLabel) {\n var query = !isGeo ? dataIdx : regionName;\n var labelFetcher = void 0; // Consider dataIdx not found.\n\n if (!data || dataIdx >= 0) {\n labelFetcher = mapOrGeoModel;\n }\n\n var specifiedTextOpt = labelXY ? {\n normal: {\n align: 'center',\n verticalAlign: 'middle'\n }\n } : null; // Caveat: must be called after `setDefaultStateProxy(el);` called.\n // because textContent will be assign with `el.stateProxy` inside.\n\n setLabelStyle(el, getLabelStatesModels(regionModel), {\n labelFetcher: labelFetcher,\n labelDataIndex: query,\n defaultText: regionName\n }, specifiedTextOpt);\n var textEl = el.getTextContent();\n\n if (textEl) {\n mapLabelRaw(textEl).ignore = textEl.ignore;\n\n if (el.textConfig && labelXY) {\n // Compute a relative offset based on the el bounding rect.\n var rect = el.getBoundingRect().clone(); // Need to make sure the percent position base on the same rect in normal and\n // emphasis state. Otherwise if using boundingRect of el, but the emphasis state\n // has borderWidth (even 0.5px), the text position will be changed obviously\n // if the position is very big like ['1234%', '1345%'].\n\n el.textConfig.layoutRect = rect;\n el.textConfig.position = [(labelXY[0] - rect.x) / rect.width * 100 + '%', (labelXY[1] - rect.y) / rect.height * 100 + '%'];\n }\n } // PENDING:\n // If labelLayout is enabled (test/label-layout.html), el.dataIndex should be specified.\n // But el.dataIndex is also used to determine whether user event should be triggered,\n // where el.seriesIndex or el.dataModel must be specified. At present for a single el\n // there is not case that \"only label layout enabled but user event disabled\", so here\n // we depends `resetEventTriggerForRegion` to do the job of setting `el.dataIndex`.\n\n\n el.disableLabelAnimation = true;\n } else {\n el.removeTextContent();\n el.removeTextConfig();\n el.disableLabelAnimation = null;\n }\n}\n\nfunction resetEventTriggerForRegion(viewBuildCtx, eventTrigger, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists.\ndataIdx) {\n // setItemGraphicEl, setHoverStyle after all polygons and labels\n // are added to the regionGroup\n if (viewBuildCtx.data) {\n // FIXME: when series-map use a SVG map, and there are duplicated name specified\n // on different SVG elements, after `data.setItemGraphicEl(...)`:\n // (1) all of them will be mounted with `dataIndex`, `seriesIndex`, so that tooltip\n // can be triggered only mouse hover. That's correct.\n // (2) only the last element will be kept in `data`, so that if trigger tooltip\n // by `dispatchAction`, only the last one can be found and triggered. That might be\n // not correct. We will fix it in future if anyone demanding that.\n viewBuildCtx.data.setItemGraphicEl(dataIdx, eventTrigger);\n } // series-map will not trigger \"geoselectchange\" no matter it is\n // based on a declared geo component. Because series-map will\n // trigger \"selectchange\". If it trigger both the two events,\n // If users call `chart.dispatchAction({type: 'toggleSelect'})`,\n // it not easy to also fire event \"geoselectchanged\".\n else {\n // Package custom mouse event for geo component\n getECData(eventTrigger).eventData = {\n componentType: 'geo',\n componentIndex: mapOrGeoModel.componentIndex,\n geoIndex: mapOrGeoModel.componentIndex,\n name: regionName,\n region: regionModel && regionModel.option || {}\n };\n }\n}\n\nfunction resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {\n if (!viewBuildCtx.data) {\n graphic.setTooltipConfig({\n el: el,\n componentModel: mapOrGeoModel,\n itemName: regionName,\n // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n itemTooltipOption: regionModel.get('tooltip')\n });\n }\n}\n\nfunction resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {\n // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n el.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode'); // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n\n var emphasisModel = regionModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n toggleHoverEmphasis(el, focus, emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n\n if (viewBuildCtx.isGeo) {\n enableComponentHighDownFeatures(el, mapOrGeoModel, regionName);\n }\n\n return focus;\n}\n\nfunction projectPolys(rings, // Polygons include exterior and interiors. Or polylines.\ncreateStream, isLine) {\n var polygons = [];\n var curPoly;\n\n function startPolygon() {\n curPoly = [];\n }\n\n function endPolygon() {\n if (curPoly.length) {\n polygons.push(curPoly);\n curPoly = [];\n }\n }\n\n var stream = createStream({\n polygonStart: startPolygon,\n polygonEnd: endPolygon,\n lineStart: startPolygon,\n lineEnd: endPolygon,\n point: function point(x, y) {\n // May have NaN values from stream.\n if (isFinite(x) && isFinite(y)) {\n curPoly.push([x, y]);\n }\n },\n sphere: function sphere() {}\n });\n !isLine && stream.polygonStart();\n zrUtil.each(rings, function (ring) {\n stream.lineStart();\n\n for (var i = 0; i < ring.length; i++) {\n stream.point(ring[i][0], ring[i][1]);\n }\n\n stream.lineEnd();\n });\n !isLine && stream.polygonEnd();\n return polygons;\n}\n\nexport default MapDraw; // @ts-ignore FIXME:TS fix the \"compatible with each other\"?","map":{"version":3,"sources":["D:/Work/WorkSpace/GitWorkSpace/TenShop/resource/ElectronicMall/src/ElectronicMallVue/node_modules/echarts/lib/component/helper/MapDraw.js"],"names":["zrUtil","RoamController","roamHelper","onIrrelevantElement","graphic","toggleHoverEmphasis","enableComponentHighDownFeatures","setDefaultStateProxy","geoSourceManager","getUID","setLabelStyle","getLabelStatesModels","getECData","createOrUpdatePatternFromDecal","Displayable","makeInner","OPTION_STYLE_ENABLED_TAGS","OPTION_STYLE_ENABLED_TAG_MAP","createHashMap","STATE_TRIGGER_TAG_MAP","concat","LABEL_HOST_MAP","mapLabelRaw","getFixedItemStyle","model","itemStyle","getItemStyle","areaColor","get","fill","fixLineStyle","styleHost","style","stroke","MapDraw","api","group","Group","uid","_controller","getZr","_controllerHost","target","add","_regionsGroup","_svgGroup","prototype","draw","mapOrGeoModel","ecModel","fromView","payload","isGeo","mainType","data","getData","eachComponent","subType","mapSeries","getHostGeoModel","geo","coordinateSystem","regionsGroup","transformInfo","getTransformInfo","transformInfoRaw","raw","transformInfoRoam","roam","isFirstDraw","childAt","x","y","scaleX","scaleY","dirty","updateProps","isVisualEncodedByVisualMap","getVisual","length","viewBuildCtx","resourceType","_buildGeoJSON","_buildSVG","_updateController","_updateMapSelectHandler","regionsGroupByName","_regionsGroupByName","regionsInfoByName","projection","projectionStream","stream","transformPoint","point","project","transformPolygonPoints","inPoints","outPoints","i","newPt","push","getPolyShape","points","shape","removeAll","each","regions","region","regionName","name","regionGroup","_a","dataIdx","regionModel","set","indexOfName","getRegionModel","getItemModel","polygonSubpaths","polylineSubpaths","geometries","geometry","type","polys","exterior","interiors","projectPolys","poly","Polygon","Polyline","centerPt","getCenter","createCompoundPath","subpaths","isLine","compoundPath","CompoundPath","culling","segmentIgnoreThreshold","paths","applyOptionStyleForRegion","resetLabelForRegion","states","resetEventTriggerForRegion","resetTooltipForRegion","resetStateTriggerForRegion","mapName","map","_svgResourceChanged","_freeSVG","_useSVG","svgDispatcherMap","_svgDispatcherMap","focusSelf","_svgGraphicRecord","named","namedItem","svgNodeTagLower","el","z2EmphasisLift","namedFrom","focus_1","els","_enableBlurEntireSVG","blurStyle","getModel","opacity_1","opacity","root","traverse","isGroup","ensureState","remove","dispose","findHighDownDispatchers","geoModel","_svgMapName","resource","getGeoResource","svgGraphic","useGraphic","freeGraphic","controller","controllerHost","zoomLimit","zoom","getZoom","enable","makeActionBase","action","componentType","id","off","on","e","_mouseDownFlag","updateViewOnPan","dx","dy","dispatchAction","extend","animation","duration","updateViewOnZoom","scale","originX","originY","setPointerChecker","containPoint","resetForLabelLayout","label","getTextContent","ignore","mapDraw","dataIndex","normalStyleModel","emphasisStyleModel","blurStyleModel","selectStyleModel","normalStyle","emphasisStyle","selectStyle","getItemVisual","decal","setStyle","strokeNoScale","labelXY","isDataNaN","isNaN","mapDimension","itemLayout","getItemLayout","showLabel","query","labelFetcher","specifiedTextOpt","normal","align","verticalAlign","labelDataIndex","defaultText","textEl","textConfig","rect","getBoundingRect","clone","layoutRect","position","width","height","disableLabelAnimation","removeTextContent","removeTextConfig","eventTrigger","setItemGraphicEl","eventData","componentIndex","geoIndex","option","setTooltipConfig","componentModel","itemName","itemTooltipOption","highDownSilentOnTouch","emphasisModel","focus","rings","createStream","polygons","curPoly","startPolygon","endPolygon","polygonStart","polygonEnd","lineStart","lineEnd","isFinite","sphere","ring"],"mappings":"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","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport RoamController from './RoamController.js';\nimport * as roamHelper from '../../component/helper/roamHelper.js';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis, enableComponentHighDownFeatures, setDefaultStateProxy } from '../../util/states.js';\nimport geoSourceManager from '../../coord/geo/geoSourceManager.js';\nimport { getUID } from '../../util/component.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { makeInner } from '../../util/model.js';\n/**\n * Only these tags enable use `itemStyle` if they are named in SVG.\n * Other tags like <text> <tspan> <image> might not suitable for `itemStyle`.\n * They will not be considered to be styled until some requirements come.\n */\n\nvar OPTION_STYLE_ENABLED_TAGS = ['rect', 'circle', 'line', 'ellipse', 'polygon', 'polyline', 'path'];\nvar OPTION_STYLE_ENABLED_TAG_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS);\nvar STATE_TRIGGER_TAG_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g']));\nvar LABEL_HOST_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g']));\nvar mapLabelRaw = makeInner();\n\nfunction getFixedItemStyle(model) {\n var itemStyle = model.getItemStyle();\n var areaColor = model.get('areaColor'); // If user want the color not to be changed when hover,\n // they should both set areaColor and color to be null.\n\n if (areaColor != null) {\n itemStyle.fill = areaColor;\n }\n\n return itemStyle;\n} // Only stroke can be used for line.\n// Using fill in style if stroke not exits.\n// TODO Not sure yet. Perhaps a separate `lineStyle`?\n\n\nfunction fixLineStyle(styleHost) {\n var style = styleHost.style;\n\n if (style) {\n style.stroke = style.stroke || style.fill;\n style.fill = null;\n }\n}\n\nvar MapDraw =\n/** @class */\nfunction () {\n function MapDraw(api) {\n var group = new graphic.Group();\n this.uid = getUID('ec_map_draw');\n this._controller = new RoamController(api.getZr());\n this._controllerHost = {\n target: group\n };\n this.group = group;\n group.add(this._regionsGroup = new graphic.Group());\n group.add(this._svgGroup = new graphic.Group());\n }\n\n MapDraw.prototype.draw = function (mapOrGeoModel, ecModel, api, fromView, payload) {\n var isGeo = mapOrGeoModel.mainType === 'geo'; // Map series has data. GEO model that controlled by map series\n // will be assigned with map data. Other GEO model has no data.\n\n var data = mapOrGeoModel.getData && mapOrGeoModel.getData();\n isGeo && ecModel.eachComponent({\n mainType: 'series',\n subType: 'map'\n }, function (mapSeries) {\n if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {\n data = mapSeries.getData();\n }\n });\n var geo = mapOrGeoModel.coordinateSystem;\n var regionsGroup = this._regionsGroup;\n var group = this.group;\n var transformInfo = geo.getTransformInfo();\n var transformInfoRaw = transformInfo.raw;\n var transformInfoRoam = transformInfo.roam; // No animation when first draw or in action\n\n var isFirstDraw = !regionsGroup.childAt(0) || payload;\n\n if (isFirstDraw) {\n group.x = transformInfoRoam.x;\n group.y = transformInfoRoam.y;\n group.scaleX = transformInfoRoam.scaleX;\n group.scaleY = transformInfoRoam.scaleY;\n group.dirty();\n } else {\n graphic.updateProps(group, transformInfoRoam, mapOrGeoModel);\n }\n\n var isVisualEncodedByVisualMap = data && data.getVisual('visualMeta') && data.getVisual('visualMeta').length > 0;\n var viewBuildCtx = {\n api: api,\n geo: geo,\n mapOrGeoModel: mapOrGeoModel,\n data: data,\n isVisualEncodedByVisualMap: isVisualEncodedByVisualMap,\n isGeo: isGeo,\n transformInfoRaw: transformInfoRaw\n };\n\n if (geo.resourceType === 'geoJSON') {\n this._buildGeoJSON(viewBuildCtx);\n } else if (geo.resourceType === 'geoSVG') {\n this._buildSVG(viewBuildCtx);\n }\n\n this._updateController(mapOrGeoModel, ecModel, api);\n\n this._updateMapSelectHandler(mapOrGeoModel, regionsGroup, api, fromView);\n };\n\n MapDraw.prototype._buildGeoJSON = function (viewBuildCtx) {\n var regionsGroupByName = this._regionsGroupByName = zrUtil.createHashMap();\n var regionsInfoByName = zrUtil.createHashMap();\n var regionsGroup = this._regionsGroup;\n var transformInfoRaw = viewBuildCtx.transformInfoRaw;\n var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;\n var data = viewBuildCtx.data;\n var projection = viewBuildCtx.geo.projection;\n var projectionStream = projection && projection.stream;\n\n function transformPoint(point, project) {\n if (project) {\n // projection may return null point.\n point = project(point);\n }\n\n return point && [point[0] * transformInfoRaw.scaleX + transformInfoRaw.x, point[1] * transformInfoRaw.scaleY + transformInfoRaw.y];\n }\n\n ;\n\n function transformPolygonPoints(inPoints) {\n var outPoints = []; // If projectionStream is provided. Use it instead of single point project.\n\n var project = !projectionStream && projection && projection.project;\n\n for (var i = 0; i < inPoints.length; ++i) {\n var newPt = transformPoint(inPoints[i], project);\n newPt && outPoints.push(newPt);\n }\n\n return outPoints;\n }\n\n function getPolyShape(points) {\n return {\n shape: {\n points: transformPolygonPoints(points)\n }\n };\n }\n\n regionsGroup.removeAll(); // Only when the resource is GeoJSON, there is `geo.regions`.\n\n zrUtil.each(viewBuildCtx.geo.regions, function (region) {\n var regionName = region.name; // Consider in GeoJson properties.name may be duplicated, for example,\n // there is multiple region named \"United Kindom\" or \"France\" (so many\n // colonies). And it is not appropriate to merge them in geo, which\n // will make them share the same label and bring trouble in label\n // location calculation.\n\n var regionGroup = regionsGroupByName.get(regionName);\n\n var _a = regionsInfoByName.get(regionName) || {},\n dataIdx = _a.dataIdx,\n regionModel = _a.regionModel;\n\n if (!regionGroup) {\n regionGroup = regionsGroupByName.set(regionName, new graphic.Group());\n regionsGroup.add(regionGroup);\n dataIdx = data ? data.indexOfName(regionName) : null;\n regionModel = viewBuildCtx.isGeo ? mapOrGeoModel.getRegionModel(regionName) : data ? data.getItemModel(dataIdx) : null;\n regionsInfoByName.set(regionName, {\n dataIdx: dataIdx,\n regionModel: regionModel\n });\n }\n\n var polygonSubpaths = [];\n var polylineSubpaths = [];\n zrUtil.each(region.geometries, function (geometry) {\n // Polygon and MultiPolygon\n if (geometry.type === 'polygon') {\n var polys = [geometry.exterior].concat(geometry.interiors || []);\n\n if (projectionStream) {\n polys = projectPolys(polys, projectionStream);\n }\n\n zrUtil.each(polys, function (poly) {\n polygonSubpaths.push(new graphic.Polygon(getPolyShape(poly)));\n });\n } // LineString and MultiLineString\n else {\n var points = geometry.points;\n\n if (projectionStream) {\n points = projectPolys(points, projectionStream, true);\n }\n\n zrUtil.each(points, function (points) {\n polylineSubpaths.push(new graphic.Polyline(getPolyShape(points)));\n });\n }\n });\n var centerPt = transformPoint(region.getCenter(), projection && projection.project);\n\n function createCompoundPath(subpaths, isLine) {\n if (!subpaths.length) {\n return;\n }\n\n var compoundPath = new graphic.CompoundPath({\n culling: true,\n segmentIgnoreThreshold: 1,\n shape: {\n paths: subpaths\n }\n });\n regionGroup.add(compoundPath);\n applyOptionStyleForRegion(viewBuildCtx, compoundPath, dataIdx, regionModel);\n resetLabelForRegion(viewBuildCtx, compoundPath, regionName, regionModel, mapOrGeoModel, dataIdx, centerPt);\n\n if (isLine) {\n fixLineStyle(compoundPath);\n zrUtil.each(compoundPath.states, fixLineStyle);\n }\n }\n\n createCompoundPath(polygonSubpaths);\n createCompoundPath(polylineSubpaths, true);\n }); // Ensure children have been added to `regionGroup` before calling them.\n\n regionsGroupByName.each(function (regionGroup, regionName) {\n var _a = regionsInfoByName.get(regionName),\n dataIdx = _a.dataIdx,\n regionModel = _a.regionModel;\n\n resetEventTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel, dataIdx);\n resetTooltipForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);\n resetStateTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);\n }, this);\n };\n\n MapDraw.prototype._buildSVG = function (viewBuildCtx) {\n var mapName = viewBuildCtx.geo.map;\n var transformInfoRaw = viewBuildCtx.transformInfoRaw;\n this._svgGroup.x = transformInfoRaw.x;\n this._svgGroup.y = transformInfoRaw.y;\n this._svgGroup.scaleX = transformInfoRaw.scaleX;\n this._svgGroup.scaleY = transformInfoRaw.scaleY;\n\n if (this._svgResourceChanged(mapName)) {\n this._freeSVG();\n\n this._useSVG(mapName);\n }\n\n var svgDispatcherMap = this._svgDispatcherMap = zrUtil.createHashMap();\n var focusSelf = false;\n zrUtil.each(this._svgGraphicRecord.named, function (namedItem) {\n // Note that we also allow different elements have the same name.\n // For example, a glyph of a city and the label of the city have\n // the same name and their tooltip info can be defined in a single\n // region option.\n var regionName = namedItem.name;\n var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;\n var data = viewBuildCtx.data;\n var svgNodeTagLower = namedItem.svgNodeTagLower;\n var el = namedItem.el;\n var dataIdx = data ? data.indexOfName(regionName) : null;\n var regionModel = mapOrGeoModel.getRegionModel(regionName);\n\n if (OPTION_STYLE_ENABLED_TAG_MAP.get(svgNodeTagLower) != null && el instanceof Displayable) {\n applyOptionStyleForRegion(viewBuildCtx, el, dataIdx, regionModel);\n }\n\n if (el instanceof Displayable) {\n el.culling = true;\n } // We do not know how the SVG like so we'd better not to change z2.\n // Otherwise it might bring some unexpected result. For example,\n // an area hovered that make some inner city can not be clicked.\n\n\n el.z2EmphasisLift = 0; // If self named:\n\n if (!namedItem.namedFrom) {\n // label should batter to be displayed based on the center of <g>\n // if it is named rather than displayed on each child.\n if (LABEL_HOST_MAP.get(svgNodeTagLower) != null) {\n resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx, null);\n }\n\n resetEventTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx);\n resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);\n\n if (STATE_TRIGGER_TAG_MAP.get(svgNodeTagLower) != null) {\n var focus_1 = resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);\n\n if (focus_1 === 'self') {\n focusSelf = true;\n }\n\n var els = svgDispatcherMap.get(regionName) || svgDispatcherMap.set(regionName, []);\n els.push(el);\n }\n }\n }, this);\n\n this._enableBlurEntireSVG(focusSelf, viewBuildCtx);\n };\n\n MapDraw.prototype._enableBlurEntireSVG = function (focusSelf, viewBuildCtx) {\n // It's a little complicated to support blurring the entire geoSVG in series-map.\n // So do not support it until some requirements come.\n // At present, in series-map, only regions can be blurred.\n if (focusSelf && viewBuildCtx.isGeo) {\n var blurStyle = viewBuildCtx.mapOrGeoModel.getModel(['blur', 'itemStyle']).getItemStyle(); // Only support `opacity` here. Because not sure that other props are suitable for\n // all of the elements generated by SVG (especially for Text/TSpan/Image/... ).\n\n var opacity_1 = blurStyle.opacity;\n\n this._svgGraphicRecord.root.traverse(function (el) {\n if (!el.isGroup) {\n // PENDING: clear those settings to SVG elements when `_freeSVG`.\n // (Currently it happen not to be needed.)\n setDefaultStateProxy(el);\n var style = el.ensureState('blur').style || {}; // Do not overwrite the region style that already set from region option.\n\n if (style.opacity == null && opacity_1 != null) {\n style.opacity = opacity_1;\n } // If `ensureState('blur').style = {}`, there will be default opacity.\n // Enable `stateTransition` (animation).\n\n\n el.ensureState('emphasis');\n }\n });\n }\n };\n\n MapDraw.prototype.remove = function () {\n this._regionsGroup.removeAll();\n\n this._regionsGroupByName = null;\n\n this._svgGroup.removeAll();\n\n this._freeSVG();\n\n this._controller.dispose();\n\n this._controllerHost = null;\n };\n\n MapDraw.prototype.findHighDownDispatchers = function (name, geoModel) {\n if (name == null) {\n return [];\n }\n\n var geo = geoModel.coordinateSystem;\n\n if (geo.resourceType === 'geoJSON') {\n var regionsGroupByName = this._regionsGroupByName;\n\n if (regionsGroupByName) {\n var regionGroup = regionsGroupByName.get(name);\n return regionGroup ? [regionGroup] : [];\n }\n } else if (geo.resourceType === 'geoSVG') {\n return this._svgDispatcherMap && this._svgDispatcherMap.get(name) || [];\n }\n };\n\n MapDraw.prototype._svgResourceChanged = function (mapName) {\n return this._svgMapName !== mapName;\n };\n\n MapDraw.prototype._useSVG = function (mapName) {\n var resource = geoSourceManager.getGeoResource(mapName);\n\n if (resource && resource.type === 'geoSVG') {\n var svgGraphic = resource.useGraphic(this.uid);\n\n this._svgGroup.add(svgGraphic.root);\n\n this._svgGraphicRecord = svgGraphic;\n this._svgMapName = mapName;\n }\n };\n\n MapDraw.prototype._freeSVG = function () {\n var mapName = this._svgMapName;\n\n if (mapName == null) {\n return;\n }\n\n var resource = geoSourceManager.getGeoResource(mapName);\n\n if (resource && resource.type === 'geoSVG') {\n resource.freeGraphic(this.uid);\n }\n\n this._svgGraphicRecord = null;\n this._svgDispatcherMap = null;\n\n this._svgGroup.removeAll();\n\n this._svgMapName = null;\n };\n\n MapDraw.prototype._updateController = function (mapOrGeoModel, ecModel, api) {\n var geo = mapOrGeoModel.coordinateSystem;\n var controller = this._controller;\n var controllerHost = this._controllerHost; // @ts-ignore FIXME:TS\n\n controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n controllerHost.zoom = geo.getZoom(); // roamType is will be set default true if it is null\n // @ts-ignore FIXME:TS\n\n controller.enable(mapOrGeoModel.get('roam') || false);\n var mainType = mapOrGeoModel.mainType;\n\n function makeActionBase() {\n var action = {\n type: 'geoRoam',\n componentType: mainType\n };\n action[mainType + 'Id'] = mapOrGeoModel.id;\n return action;\n }\n\n controller.off('pan').on('pan', function (e) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n dx: e.dx,\n dy: e.dy,\n animation: {\n duration: 0\n }\n }));\n }, this);\n controller.off('zoom').on('zoom', function (e) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n zoom: e.scale,\n originX: e.originX,\n originY: e.originY,\n animation: {\n duration: 0\n }\n }));\n }, this);\n controller.setPointerChecker(function (e, x, y) {\n return geo.containPoint([x, y]) && !onIrrelevantElement(e, api, mapOrGeoModel);\n });\n };\n /**\n * FIXME: this is a temporarily workaround.\n * When `geoRoam` the elements need to be reset in `MapView['render']`, because the props like\n * `ignore` might have been modified by `LabelManager`, and `LabelManager#addLabelsOfSeries`\n * will subsequently cache `defaultAttr` like `ignore`. If do not do this reset, the modified\n * props will have no chance to be restored.\n * Note: This reset should be after `clearStates` in `renderSeries` because `useStates` in\n * `renderSeries` will cache the modified `ignore` to `el._normalState`.\n * TODO:\n * Use clone/immutable in `LabelManager`?\n */\n\n\n MapDraw.prototype.resetForLabelLayout = function () {\n this.group.traverse(function (el) {\n var label = el.getTextContent();\n\n if (label) {\n label.ignore = mapLabelRaw(label).ignore;\n }\n });\n };\n\n MapDraw.prototype._updateMapSelectHandler = function (mapOrGeoModel, regionsGroup, api, fromView) {\n var mapDraw = this;\n regionsGroup.off('mousedown');\n regionsGroup.off('click'); // @ts-ignore FIXME:TS resolve type conflict\n\n if (mapOrGeoModel.get('selectedMode')) {\n regionsGroup.on('mousedown', function () {\n mapDraw._mouseDownFlag = true;\n });\n regionsGroup.on('click', function (e) {\n if (!mapDraw._mouseDownFlag) {\n return;\n }\n\n mapDraw._mouseDownFlag = false;\n });\n }\n };\n\n return MapDraw;\n}();\n\n;\n\nfunction applyOptionStyleForRegion(viewBuildCtx, el, dataIndex, regionModel) {\n // All of the path are using `itemStyle`, because\n // (1) Some SVG also use fill on polyline (The different between\n // polyline and polygon is \"open\" or \"close\" but not fill or not).\n // (2) For the common props like opacity, if some use itemStyle\n // and some use `lineStyle`, it might confuse users.\n // (3) Most SVG use <path>, where can not detect whether to draw a \"line\"\n // or a filled shape, so use `itemStyle` for <path>.\n var normalStyleModel = regionModel.getModel('itemStyle');\n var emphasisStyleModel = regionModel.getModel(['emphasis', 'itemStyle']);\n var blurStyleModel = regionModel.getModel(['blur', 'itemStyle']);\n var selectStyleModel = regionModel.getModel(['select', 'itemStyle']); // NOTE: DON'T use 'style' in visual when drawing map.\n // This component is used for drawing underlying map for both geo component and map series.\n\n var normalStyle = getFixedItemStyle(normalStyleModel);\n var emphasisStyle = getFixedItemStyle(emphasisStyleModel);\n var selectStyle = getFixedItemStyle(selectStyleModel);\n var blurStyle = getFixedItemStyle(blurStyleModel); // Update the itemStyle if has data visual\n\n var data = viewBuildCtx.data;\n\n if (data) {\n // Only visual color of each item will be used. It can be encoded by visualMap\n // But visual color of series is used in symbol drawing\n // Visual color for each series is for the symbol draw\n var style = data.getItemVisual(dataIndex, 'style');\n var decal = data.getItemVisual(dataIndex, 'decal');\n\n if (viewBuildCtx.isVisualEncodedByVisualMap && style.fill) {\n normalStyle.fill = style.fill;\n }\n\n if (decal) {\n normalStyle.decal = createOrUpdatePatternFromDecal(decal, viewBuildCtx.api);\n }\n } // SVG text, tspan and image can be named but not supporeted\n // to be styled by region option yet.\n\n\n el.setStyle(normalStyle);\n el.style.strokeNoScale = true;\n el.ensureState('emphasis').style = emphasisStyle;\n el.ensureState('select').style = selectStyle;\n el.ensureState('blur').style = blurStyle; // Enable blur\n\n setDefaultStateProxy(el);\n}\n\nfunction resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists.\ndataIdx, // If labelXY not provided, use `textConfig.position: 'inside'`\nlabelXY) {\n var data = viewBuildCtx.data;\n var isGeo = viewBuildCtx.isGeo;\n var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx));\n var itemLayout = data && data.getItemLayout(dataIdx); // In the following cases label will be drawn\n // 1. In map series and data value is NaN\n // 2. In geo component\n // 3. Region has no series legendIcon, which will be add a showLabel flag in mapSymbolLayout\n\n if (isGeo || isDataNaN || itemLayout && itemLayout.showLabel) {\n var query = !isGeo ? dataIdx : regionName;\n var labelFetcher = void 0; // Consider dataIdx not found.\n\n if (!data || dataIdx >= 0) {\n labelFetcher = mapOrGeoModel;\n }\n\n var specifiedTextOpt = labelXY ? {\n normal: {\n align: 'center',\n verticalAlign: 'middle'\n }\n } : null; // Caveat: must be called after `setDefaultStateProxy(el);` called.\n // because textContent will be assign with `el.stateProxy` inside.\n\n setLabelStyle(el, getLabelStatesModels(regionModel), {\n labelFetcher: labelFetcher,\n labelDataIndex: query,\n defaultText: regionName\n }, specifiedTextOpt);\n var textEl = el.getTextContent();\n\n if (textEl) {\n mapLabelRaw(textEl).ignore = textEl.ignore;\n\n if (el.textConfig && labelXY) {\n // Compute a relative offset based on the el bounding rect.\n var rect = el.getBoundingRect().clone(); // Need to make sure the percent position base on the same rect in normal and\n // emphasis state. Otherwise if using boundingRect of el, but the emphasis state\n // has borderWidth (even 0.5px), the text position will be changed obviously\n // if the position is very big like ['1234%', '1345%'].\n\n el.textConfig.layoutRect = rect;\n el.textConfig.position = [(labelXY[0] - rect.x) / rect.width * 100 + '%', (labelXY[1] - rect.y) / rect.height * 100 + '%'];\n }\n } // PENDING:\n // If labelLayout is enabled (test/label-layout.html), el.dataIndex should be specified.\n // But el.dataIndex is also used to determine whether user event should be triggered,\n // where el.seriesIndex or el.dataModel must be specified. At present for a single el\n // there is not case that \"only label layout enabled but user event disabled\", so here\n // we depends `resetEventTriggerForRegion` to do the job of setting `el.dataIndex`.\n\n\n el.disableLabelAnimation = true;\n } else {\n el.removeTextContent();\n el.removeTextConfig();\n el.disableLabelAnimation = null;\n }\n}\n\nfunction resetEventTriggerForRegion(viewBuildCtx, eventTrigger, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists.\ndataIdx) {\n // setItemGraphicEl, setHoverStyle after all polygons and labels\n // are added to the regionGroup\n if (viewBuildCtx.data) {\n // FIXME: when series-map use a SVG map, and there are duplicated name specified\n // on different SVG elements, after `data.setItemGraphicEl(...)`:\n // (1) all of them will be mounted with `dataIndex`, `seriesIndex`, so that tooltip\n // can be triggered only mouse hover. That's correct.\n // (2) only the last element will be kept in `data`, so that if trigger tooltip\n // by `dispatchAction`, only the last one can be found and triggered. That might be\n // not correct. We will fix it in future if anyone demanding that.\n viewBuildCtx.data.setItemGraphicEl(dataIdx, eventTrigger);\n } // series-map will not trigger \"geoselectchange\" no matter it is\n // based on a declared geo component. Because series-map will\n // trigger \"selectchange\". If it trigger both the two events,\n // If users call `chart.dispatchAction({type: 'toggleSelect'})`,\n // it not easy to also fire event \"geoselectchanged\".\n else {\n // Package custom mouse event for geo component\n getECData(eventTrigger).eventData = {\n componentType: 'geo',\n componentIndex: mapOrGeoModel.componentIndex,\n geoIndex: mapOrGeoModel.componentIndex,\n name: regionName,\n region: regionModel && regionModel.option || {}\n };\n }\n}\n\nfunction resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {\n if (!viewBuildCtx.data) {\n graphic.setTooltipConfig({\n el: el,\n componentModel: mapOrGeoModel,\n itemName: regionName,\n // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n itemTooltipOption: regionModel.get('tooltip')\n });\n }\n}\n\nfunction resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {\n // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n el.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode'); // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n\n var emphasisModel = regionModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n toggleHoverEmphasis(el, focus, emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n\n if (viewBuildCtx.isGeo) {\n enableComponentHighDownFeatures(el, mapOrGeoModel, regionName);\n }\n\n return focus;\n}\n\nfunction projectPolys(rings, // Polygons include exterior and interiors. Or polylines.\ncreateStream, isLine) {\n var polygons = [];\n var curPoly;\n\n function startPolygon() {\n curPoly = [];\n }\n\n function endPolygon() {\n if (curPoly.length) {\n polygons.push(curPoly);\n curPoly = [];\n }\n }\n\n var stream = createStream({\n polygonStart: startPolygon,\n polygonEnd: endPolygon,\n lineStart: startPolygon,\n lineEnd: endPolygon,\n point: function (x, y) {\n // May have NaN values from stream.\n if (isFinite(x) && isFinite(y)) {\n curPoly.push([x, y]);\n }\n },\n sphere: function () {}\n });\n !isLine && stream.polygonStart();\n zrUtil.each(rings, function (ring) {\n stream.lineStart();\n\n for (var i = 0; i < ring.length; i++) {\n stream.point(ring[i][0], ring[i][1]);\n }\n\n stream.lineEnd();\n });\n !isLine && stream.polygonEnd();\n return polygons;\n}\n\nexport default MapDraw; // @ts-ignore FIXME:TS fix the \"compatible with each other\"?"]},"metadata":{},"sourceType":"module"} |