plotly.js 2.16.3 → 2.16.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plotly.js",
3
- "version": "2.16.3",
3
+ "version": "2.16.4",
4
4
  "description": "The open source javascript graphing library that powers plotly",
5
5
  "license": "MIT",
6
6
  "main": "./lib/index.js",
@@ -17,7 +17,7 @@ module.exports = {
17
17
  calc: require('./calc'),
18
18
 
19
19
  // ./scales.js is required in lib/coerce.js ;
20
- // it needs to be a separate module to avoid circular a dependency
20
+ // it needs to be a separate module to avoid a circular dependency
21
21
  scales: scales.scales,
22
22
  defaultScale: scales.defaultScale,
23
23
  getScale: scales.get,
@@ -8,11 +8,12 @@ var ORDER = {
8
8
  nonCluster: ['fill', 'line', 'circle', 'symbol'],
9
9
  };
10
10
 
11
- function ScatterMapbox(subplot, uid, clusterEnabled) {
11
+ function ScatterMapbox(subplot, uid, clusterEnabled, isHidden) {
12
12
  this.type = 'scattermapbox';
13
13
  this.subplot = subplot;
14
14
  this.uid = uid;
15
15
  this.clusterEnabled = clusterEnabled;
16
+ this.isHidden = isHidden;
16
17
 
17
18
  this.sourceIds = {
18
19
  fill: 'source-' + uid + '-fill',
@@ -85,51 +86,96 @@ proto.update = function update(calcTrace) {
85
86
  var map = subplot.map;
86
87
  var optsAll = convert(subplot.gd, calcTrace);
87
88
  var below = subplot.belowLookup['trace-' + this.uid];
88
- var i, k, opts;
89
89
  var hasCluster = !!(trace.cluster && trace.cluster.enabled);
90
90
  var hadCluster = !!this.clusterEnabled;
91
-
92
- if(below !== this.below) {
93
- var order = ORDER.nonCluster;
94
-
95
- for(i = order.length - 1; i >= 0; i--) {
96
- k = order[i];
97
- map.removeLayer(this.layerIds[k]);
91
+ var lThis = this;
92
+
93
+ function addCluster(noSource) {
94
+ if(!noSource) lThis.addSource('circle', optsAll.circle, trace.cluster);
95
+ var order = ORDER.cluster;
96
+ for(var i = 0; i < order.length; i++) {
97
+ var k = order[i];
98
+ var opts = optsAll[k];
99
+ lThis.addLayer(k, opts, below);
98
100
  }
99
- for(i = 0; i < order.length; i++) {
100
- k = order[i];
101
- opts = optsAll[k];
102
- this.addLayer(k, opts, below);
103
- }
104
- this.below = below;
105
- } else if(hasCluster && !hadCluster) {
106
- for(i = ORDER.nonCluster.length - 1; i >= 0; i--) {
107
- k = ORDER.nonCluster[i];
108
- map.removeLayer(this.layerIds[k]);
109
- map.removeSource(this.sourceIds[k]);
101
+ }
102
+
103
+ function removeCluster(noSource) {
104
+ var order = ORDER.cluster;
105
+ for(var i = order.length - 1; i >= 0; i--) {
106
+ var k = order[i];
107
+ map.removeLayer(lThis.layerIds[k]);
110
108
  }
111
- this.addSource('circle', optsAll.circle, trace.cluster);
112
- for(i = 0; i < ORDER.cluster.length; i++) {
113
- k = ORDER.cluster[i];
114
- opts = optsAll[k];
115
- this.addLayer(k, opts, below);
109
+ if(!noSource) map.removeSource(lThis.sourceIds.circle);
110
+ }
111
+
112
+ function addNonCluster(noSource) {
113
+ var order = ORDER.nonCluster;
114
+ for(var i = 0; i < order.length; i++) {
115
+ var k = order[i];
116
+ var opts = optsAll[k];
117
+ if(!noSource) lThis.addSource(k, opts);
118
+ lThis.addLayer(k, opts, below);
116
119
  }
117
- this.clusterEnabled = hasCluster;
118
- } else if(!hasCluster && hadCluster) {
119
- for(i = 0; i < ORDER.cluster.length; i++) {
120
- k = ORDER.cluster[i];
121
- map.removeLayer(this.layerIds[k]);
120
+ }
121
+
122
+ function removeNonCluster(noSource) {
123
+ var order = ORDER.nonCluster;
124
+ for(var i = order.length - 1; i >= 0; i--) {
125
+ var k = order[i];
126
+ map.removeLayer(lThis.layerIds[k]);
127
+ if(!noSource) map.removeSource(lThis.sourceIds[k]);
122
128
  }
123
- map.removeSource(this.sourceIds.circle);
124
- for(i = 0; i < ORDER.nonCluster.length; i++) {
125
- k = ORDER.nonCluster[i];
126
- opts = optsAll[k];
127
- this.addSource(k, opts, trace.cluster);
128
- this.addLayer(k, opts, below);
129
+ }
130
+
131
+ function remove(noSource) {
132
+ if(hadCluster) removeCluster(noSource); else removeNonCluster(noSource);
133
+ }
134
+
135
+ function add(noSource) {
136
+ if(hasCluster) addCluster(noSource); else addNonCluster(noSource);
137
+ }
138
+
139
+ function repaint() {
140
+ var order = hasCluster ? ORDER.cluster : ORDER.nonCluster;
141
+ for(var i = 0; i < order.length; i++) {
142
+ var k = order[i];
143
+ var opts = optsAll[k];
144
+ if(!opts) continue;
145
+
146
+ subplot.setOptions(lThis.layerIds[k], 'setLayoutProperty', opts.layout);
147
+
148
+ if(opts.layout.visibility === 'visible') {
149
+ if(k !== 'cluster') {
150
+ lThis.setSourceData(k, opts);
151
+ }
152
+ subplot.setOptions(lThis.layerIds[k], 'setPaintProperty', opts.paint);
153
+ }
129
154
  }
130
- this.clusterEnabled = hasCluster;
131
155
  }
132
156
 
157
+ var wasHidden = this.isHidden;
158
+ var isHidden = trace.visible !== true;
159
+
160
+ if(isHidden) {
161
+ if(!wasHidden) remove();
162
+ } else if(wasHidden) {
163
+ if(!isHidden) add();
164
+ } else if(hadCluster !== hasCluster) {
165
+ remove();
166
+ add();
167
+ } else if(this.below !== below) {
168
+ remove(true);
169
+ add(true);
170
+ repaint();
171
+ } else {
172
+ repaint();
173
+ }
174
+
175
+ this.clusterEnabled = hasCluster;
176
+ this.isHidden = isHidden;
177
+ this.below = below;
178
+
133
179
  // link ref for quick update during selections
134
180
  calcTrace[0].trace._glTrace = this;
135
181
  };
@@ -147,10 +193,13 @@ proto.dispose = function dispose() {
147
193
  module.exports = function createScatterMapbox(subplot, calcTrace) {
148
194
  var trace = calcTrace[0].trace;
149
195
  var hasCluster = trace.cluster && trace.cluster.enabled;
196
+ var isHidden = trace.visible !== true;
197
+
150
198
  var scatterMapbox = new ScatterMapbox(
151
199
  subplot,
152
200
  trace.uid,
153
- hasCluster
201
+ hasCluster,
202
+ isHidden
154
203
  );
155
204
 
156
205
  var optsAll = convert(subplot.gd, calcTrace);
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
2
 
3
3
  // package version injected by `npm run preprocess`
4
- exports.version = '2.16.3';
4
+ exports.version = '2.16.4';