You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2018/09/12 15:54:09 UTC
[incubator-echarts] 04/04: fix event query rule.
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 <su...@gmail.com>
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: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org