@@ -32,9 +32,6 @@ function Mapbox(opts) {
32
32
// unique id for this Mapbox instance
33
33
this . uid = fullLayout . _uid + '-' + this . id ;
34
34
35
- // full mapbox options (N.B. needs to be updated on every updates)
36
- this . opts = fullLayout [ this . id ] ;
37
-
38
35
// create framework on instantiation for a smoother first plot call
39
36
this . div = null ;
40
37
this . xaxis = null ;
@@ -57,9 +54,7 @@ module.exports = function createMapbox(opts) {
57
54
58
55
proto . plot = function ( calcData , fullLayout , promises ) {
59
56
var self = this ;
60
-
61
- // feed in new mapbox options
62
- var opts = self . opts = fullLayout [ this . id ] ;
57
+ var opts = fullLayout [ self . id ] ;
63
58
64
59
// remove map and create a new map if access token has change
65
60
if ( self . map && ( opts . accesstoken !== self . accessToken ) ) {
@@ -88,7 +83,7 @@ proto.plot = function(calcData, fullLayout, promises) {
88
83
proto . createMap = function ( calcData , fullLayout , resolve , reject ) {
89
84
var self = this ;
90
85
var gd = self . gd ;
91
- var opts = self . opts ;
86
+ var opts = fullLayout [ self . id ] ;
92
87
93
88
// store style id and URL or object
94
89
var styleObj = self . styleObj = getStyleObj ( opts . style ) ;
@@ -147,14 +142,16 @@ proto.createMap = function(calcData, fullLayout, resolve, reject) {
147
142
// duplicate 'plotly_relayout' events.
148
143
149
144
if ( eventData . originalEvent || wheeling ) {
150
- var view = self . getView ( ) ;
145
+ var optsNow = gd . _fullLayout [ self . id ] ;
146
+ Registry . call ( '_storeDirectGUIEdit' , gd . layout , gd . _fullLayout . _preGUI , self . getViewEdits ( optsNow ) ) ;
151
147
152
- opts . _input . center = opts . center = view . center ;
153
- opts . _input . zoom = opts . zoom = view . zoom ;
154
- opts . _input . bearing = opts . bearing = view . bearing ;
155
- opts . _input . pitch = opts . pitch = view . pitch ;
148
+ var viewNow = self . getView ( ) ;
149
+ optsNow . _input . center = optsNow . center = viewNow . center ;
150
+ optsNow . _input . zoom = optsNow . zoom = viewNow . zoom ;
151
+ optsNow . _input . bearing = optsNow . bearing = viewNow . bearing ;
152
+ optsNow . _input . pitch = optsNow . pitch = viewNow . pitch ;
156
153
157
- emitRelayoutFromView ( view ) ;
154
+ gd . emit ( 'plotly_relayout' , self . getViewEdits ( viewNow ) ) ;
158
155
}
159
156
wheeling = false ;
160
157
} ) ;
@@ -186,35 +183,25 @@ proto.createMap = function(calcData, fullLayout, resolve, reject) {
186
183
map . on ( 'zoomstart' , unhover ) ;
187
184
188
185
map . on ( 'dblclick' , function ( ) {
189
- gd . emit ( 'plotly_doubleclick' , null ) ;
186
+ var optsNow = gd . _fullLayout [ self . id ] ;
187
+ Registry . call ( '_storeDirectGUIEdit' , gd . layout , gd . _fullLayout . _preGUI , self . getViewEdits ( optsNow ) ) ;
190
188
191
189
var viewInitial = self . viewInitial ;
192
-
193
190
map . setCenter ( convertCenter ( viewInitial . center ) ) ;
194
191
map . setZoom ( viewInitial . zoom ) ;
195
192
map . setBearing ( viewInitial . bearing ) ;
196
193
map . setPitch ( viewInitial . pitch ) ;
197
194
198
195
var viewNow = self . getView ( ) ;
196
+ optsNow . _input . center = optsNow . center = viewNow . center ;
197
+ optsNow . _input . zoom = optsNow . zoom = viewNow . zoom ;
198
+ optsNow . _input . bearing = optsNow . bearing = viewNow . bearing ;
199
+ optsNow . _input . pitch = optsNow . pitch = viewNow . pitch ;
199
200
200
- opts . _input . center = opts . center = viewNow . center ;
201
- opts . _input . zoom = opts . zoom = viewNow . zoom ;
202
- opts . _input . bearing = opts . bearing = viewNow . bearing ;
203
- opts . _input . pitch = opts . pitch = viewNow . pitch ;
204
-
205
- emitRelayoutFromView ( viewNow ) ;
201
+ gd . emit ( 'plotly_doubleclick' , null ) ;
202
+ gd . emit ( 'plotly_relayout' , self . getViewEdits ( viewNow ) ) ;
206
203
} ) ;
207
204
208
- function emitRelayoutFromView ( view ) {
209
- var id = self . id ;
210
- var evtData = { } ;
211
- for ( var k in view ) {
212
- evtData [ id + '.' + k ] = view [ k ] ;
213
- }
214
- Registry . call ( '_storeDirectGUIEdit' , gd . layout , gd . _fullLayout . _preGUI , evtData ) ;
215
- gd . emit ( 'plotly_relayout' , evtData ) ;
216
- }
217
-
218
205
// define event handlers on map creation, to keep one ref per map,
219
206
// so that map.on / map.off in updateFx works as expected
220
207
self . clearSelect = function ( ) {
@@ -248,10 +235,11 @@ proto.createMap = function(calcData, fullLayout, resolve, reject) {
248
235
proto . updateMap = function ( calcData , fullLayout , resolve , reject ) {
249
236
var self = this ;
250
237
var map = self . map ;
238
+ var opts = fullLayout [ this . id ] ;
251
239
252
240
self . rejectOnError ( reject ) ;
253
241
254
- var styleObj = getStyleObj ( self . opts . style ) ;
242
+ var styleObj = getStyleObj ( opts . style ) ;
255
243
256
244
if ( self . styleObj . id !== styleObj . id ) {
257
245
self . styleObj = styleObj ;
@@ -309,14 +297,14 @@ proto.updateData = function(calcData) {
309
297
310
298
proto . updateLayout = function ( fullLayout ) {
311
299
var map = this . map ;
312
- var opts = this . opts ;
300
+ var opts = fullLayout [ this . id ] ;
313
301
314
302
map . setCenter ( convertCenter ( opts . center ) ) ;
315
303
map . setZoom ( opts . zoom ) ;
316
304
map . setBearing ( opts . bearing ) ;
317
305
map . setPitch ( opts . pitch ) ;
318
306
319
- this . updateLayers ( ) ;
307
+ this . updateLayers ( fullLayout ) ;
320
308
this . updateFramework ( fullLayout ) ;
321
309
this . updateFx ( fullLayout ) ;
322
310
this . map . resize ( ) ;
@@ -463,8 +451,8 @@ proto.updateFramework = function(fullLayout) {
463
451
this . yaxis . _length = size . h * ( domain . y [ 1 ] - domain . y [ 0 ] ) ;
464
452
} ;
465
453
466
- proto . updateLayers = function ( ) {
467
- var opts = this . opts ;
454
+ proto . updateLayers = function ( fullLayout ) {
455
+ var opts = fullLayout [ this . id ] ;
468
456
var layers = opts . layers ;
469
457
var layerList = this . layerList ;
470
458
var i ;
@@ -519,7 +507,6 @@ proto.project = function(v) {
519
507
// get map's current view values in plotly.js notation
520
508
proto . getView = function ( ) {
521
509
var map = this . map ;
522
-
523
510
var mapCenter = map . getCenter ( ) ;
524
511
var center = { lon : mapCenter . lng , lat : mapCenter . lat } ;
525
512
@@ -531,6 +518,19 @@ proto.getView = function() {
531
518
} ;
532
519
} ;
533
520
521
+ proto . getViewEdits = function ( cont ) {
522
+ var id = this . id ;
523
+ var keys = [ 'center' , 'zoom' , 'bearing' , 'pitch' ] ;
524
+ var obj = { } ;
525
+
526
+ for ( var i = 0 ; i < keys . length ; i ++ ) {
527
+ var k = keys [ i ] ;
528
+ obj [ id + '.' + k ] = cont [ k ] ;
529
+ }
530
+
531
+ return obj ;
532
+ } ;
533
+
534
534
function getStyleObj ( val ) {
535
535
var styleValues = layoutAttributes . style . values ;
536
536
var styleDflt = layoutAttributes . style . dflt ;
0 commit comments