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