This is an automated email from the ASF dual-hosted git repository. sushuang pushed a commit to branch release in repository https://gitbox.apache.org/repos/asf/incubator-echarts.git
commit 0186bd8921c2c2e1f375948570f7be9c8d7609b0 Author: sushuang <[email protected]> AuthorDate: Wed Sep 12 23:53:01 2018 +0800 fix event query rule. --- src/chart/treemap/Breadcrumb.js | 1 + src/component/axis/AxisBuilder.js | 3 ++- src/component/graphic.js | 2 +- src/component/helper/MapDraw.js | 1 + src/component/title.js | 2 +- src/echarts.js | 38 +++++++++++++++++++++++++++++++------- src/model/mixin/dataFormat.js | 11 +++++++---- test/ec-event.html | 11 +++++++++-- test/hoverStyle.html | 37 +++++++++++++++++++++++++------------ 9 files changed, 78 insertions(+), 28 deletions(-) diff --git a/src/chart/treemap/Breadcrumb.js b/src/chart/treemap/Breadcrumb.js index a7b4d6b..41e355a 100644 --- a/src/chart/treemap/Breadcrumb.js +++ b/src/chart/treemap/Breadcrumb.js @@ -172,6 +172,7 @@ function packEventData(el, seriesModel, itemNode) { el.eventData = { componentType: 'series', componentSubType: 'treemap', + componentIndex: seriesModel.componentIndex, seriesIndex: seriesModel.componentIndex, seriesName: seriesModel.name, seriesType: 'treemap', diff --git a/src/component/axis/AxisBuilder.js b/src/component/axis/AxisBuilder.js index 589996e..1f0ff7e 100644 --- a/src/component/axis/AxisBuilder.js +++ b/src/component/axis/AxisBuilder.js @@ -31,7 +31,8 @@ var PI = Math.PI; function makeAxisEventDataBase(axisModel) { var eventData = { - componentType: axisModel.mainType + componentType: axisModel.mainType, + componentIndex: axisModel.componentIndex }; eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex; return eventData; diff --git a/src/component/graphic.js b/src/component/graphic.js index 8b6d5f8..631dc6d 100644 --- a/src/component/graphic.js +++ b/src/component/graphic.js @@ -538,7 +538,7 @@ function setEventData(el, graphicModel, elOption) { if (!el.silent && !el.ignore && !eventData) { eventData = el.eventData = { componentType: 'graphic', - graphicIndex: graphicModel.componentIndex, + componentIndex: graphicModel.componentIndex, name: el.name }; } diff --git a/src/component/helper/MapDraw.js b/src/component/helper/MapDraw.js index 7f74047..b7b8ee7 100644 --- a/src/component/helper/MapDraw.js +++ b/src/component/helper/MapDraw.js @@ -322,6 +322,7 @@ MapDraw.prototype = { // Package custom mouse event for geo component compoundPath.eventData = { componentType: 'geo', + componentIndex: mapOrGeoModel.componentIndex, geoIndex: mapOrGeoModel.componentIndex, name: region.name, region: (regionModel && regionModel.option) || {} diff --git a/src/component/title.js b/src/component/title.js index 7580df1..a680b1f 100644 --- a/src/component/title.js +++ b/src/component/title.js @@ -151,7 +151,7 @@ echarts.extendComponentView({ textEl.eventData = subTextEl.eventData = triggerEvent ? { componentType: 'title', - titleIndex: titleModel.componentIndex + componentIndex: titleModel.componentIndex } : null; diff --git a/src/echarts.js b/src/echarts.js index c4ea08d..9844570 100644 --- a/src/echarts.js +++ b/src/echarts.js @@ -1525,12 +1525,29 @@ echartsProto._initEvents = function () { params = zrUtil.extend({}, el.eventData); } + // Contract: if params prepared in mouse event, + // these properties must be specified: + // { + // componentType: string (component main type) + // componentIndex: number + // } + // Otherwise event query can not work. + if (params) { - // When trigger by markLine/markPoint/markArea, the - // componentType is 'markLine'/'markPoint'/'markArea'. - var componentType = params.seriesIndex != null - ? 'series' : params.componentType; - var componentIndex = params[componentType + 'Index']; + var componentType = params.componentType; + var componentIndex = params.componentIndex; + // Special handling for historic reason: when trigger by + // markLine/markPoint/markArea, the componentType is + // 'markLine'/'markPoint'/'markArea', but we should better + // enable them to be queried by seriesIndex, since their + // option is set in each series. + if (componentType === 'markLine' + || componentType === 'markPoint' + || componentType === 'markArea' + ) { + componentType = 'series'; + componentIndex = params.seriesIndex; + } var model = componentType && componentIndex != null && ecModel.getComponent(componentType, componentIndex); var view = model && this[ @@ -1541,7 +1558,9 @@ echartsProto._initEvents = function () { // `event.componentType` and `event[componentTpype + 'Index']` must not // be missed, otherwise there is no way to distinguish source component. // See `dataFormat.getDataParams`. - zrUtil.assert(isGlobalOut || (model && view)); + if (!isGlobalOut && !(model && view)) { + console.warn('model or view can not be found by params'); + } } params.event = e; @@ -1773,6 +1792,11 @@ EventProcessor.prototype = { filter: function (eventType, query, args) { // They should be assigned before each trigger call. var eventInfo = this.eventInfo; + + if (!eventInfo) { + return true; + } + var targetEl = eventInfo.targetEl; var packedEvent = eventInfo.packedEvent; var model = eventInfo.model; @@ -1804,7 +1828,7 @@ EventProcessor.prototype = { }, afterTrigger: function () { - // clear immediately after used. + // Make sure the eventInfo wont be used in next trigger. this.eventInfo = null; } }; diff --git a/src/model/mixin/dataFormat.js b/src/model/mixin/dataFormat.js index 1595500..7d48b52 100644 --- a/src/model/mixin/dataFormat.js +++ b/src/model/mixin/dataFormat.js @@ -41,14 +41,17 @@ export default { var tooltipModel = this.ecModel.getComponent('tooltip'); var renderModeOption = tooltipModel && tooltipModel.get('renderMode'); var renderMode = getTooltipRenderMode(renderModeOption); + var mainType = this.mainType; + var isSeries = mainType === 'series'; return { - componentType: this.mainType, + componentType: mainType, componentSubType: this.subType, - seriesType: this.mainType === 'series' ? this.subType : null, + componentIndex: this.componentIndex, + seriesType: isSeries ? this.subType : null, seriesIndex: this.seriesIndex, - seriesId: this.id, - seriesName: this.name, + seriesId: isSeries ? this.id : null, + seriesName: isSeries ? this.name : null, name: name, dataIndex: rawDataIndex, data: itemOpt, diff --git a/test/ec-event.html b/test/ec-event.html index fac3c65..46a1d7a 100644 --- a/test/ec-event.html +++ b/test/ec-event.html @@ -76,6 +76,12 @@ under the License. }, { type: 'line', data: [234, 213, 255], + markPoint: { + data: [{ + name: 'max value (default)', + type: 'max' + }] + } }] }; @@ -83,8 +89,9 @@ under the License. title: [ '[click scatter point, console.log]: "clk", "clk series", "clk series.scatter"', '[click xAxis, console.log]: "clk", "clk xAxis", "clk xAxis.category"', - '[click yAxis.category, console.log]: "clk"', - '[click line point, console.log]: "clk", "clk series"' + '[click yAxis.category, console.log]: "clk", "clk yAxis.category"', + '[click line point, console.log]: "clk", "clk series"', + '[click the markPoint]: "clk", "clk series"' ], option: option }); diff --git a/test/hoverStyle.html b/test/hoverStyle.html index 27db889..762e5b7 100644 --- a/test/hoverStyle.html +++ b/test/hoverStyle.html @@ -40,13 +40,18 @@ under the License. position: fixed; left: 0; top: 0; - background: #fff; + background: #333; + color: #fff; padding: 2px 5px; z-index: 9999; box-shadow: 0 0 2px #333; } </style> + <br> + <br> + <br> + <div id="info"></div> <div id="main0"></div> <div id="main1"></div> @@ -56,32 +61,40 @@ under the License. <script> - var useHoverLayer = location.search.indexOf('?useHoverLayer&') >= 0; + var USE_HOVER_LAYER_KEY = '__EC_TEST_USE_HOVER_LAYER_KEY___'; + + var useHoverLayer = getUseHoverLayer(); var hoverLayerThreshold = useHoverLayer ? 0 : null; var infoEl = document.getElementById('info'); genInfo(); + function setUseHoverLayer(useHoverLayer) { + window.localStorage.setItem(USE_HOVER_LAYER_KEY, useHoverLayer ? 'true' : ''); + } + function getUseHoverLayer() { + return !!window.localStorage.getItem(USE_HOVER_LAYER_KEY); + } + function genInfo(zrRefreshTimestamp) { infoEl.innerHTML = [ + useHoverLayer ? 'Using HoverLayer' : 'NOT using HoverLayer', 'hoverLayerThreshold: ' + hoverLayerThreshold, - 'zr refresh base layer at: <span style="color:red">' + (zrRefreshTimestamp || null) + '</span>' + 'zr refresh base layer at: <span style="color:yellow">' + (zrRefreshTimestamp || null) + '</span>' ].join('<br>'); } function genHoverLayerBtns() { return [{ - text: 'useHoverLayer', + text: 'NOT use hoverLayer', onclick: function () { - var url = location.href; - if (url.indexOf('?') < 0) { - url += '?'; - } - location.href = url.replace('?', '?useHoverLayer&'); + setUseHoverLayer(false); + location.reload(); } }, { - text: 'notUseHoverLayer', + text: 'Use hoverLayer', onclick: function () { - location.href = location.href.replace(/\?useHoverLayer&/, '\?'); + setUseHoverLayer(true); + location.reload(); } }] } @@ -141,7 +154,7 @@ under the License. title: [ 'normal no label, hover show label inside', 'TEST: hover twice, should be normal', - 'zrBaseLayer should not be refreshed' + 'zrBaseLayer should not be refreshed if NOT using hoverLayer' ], option: option, height: 200 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
