@@ -41,7 +41,7 @@ function Mapbox(opts) {
4141    // state variables used to infer how and what to update 
4242    this . map  =  null ; 
4343    this . accessToken  =  null ; 
44-     this . styleUrl  =  null ; 
44+     this . styleObj  =  null ; 
4545    this . traceHash  =  { } ; 
4646    this . layerList  =  [ ] ; 
4747} 
@@ -64,7 +64,7 @@ proto.plot = function(calcData, fullLayout, promises) {
6464    if ( self . map  &&  ( opts . accesstoken  !==  self . accessToken ) )  { 
6565        self . map . remove ( ) ; 
6666        self . map  =  null ; 
67-         self . styleUrl  =  null ; 
67+         self . styleObj  =  null ; 
6868        self . traceHash  =  [ ] ; 
6969        self . layerList  =  { } ; 
7070    } 
@@ -90,16 +90,17 @@ proto.createMap = function(calcData, fullLayout, resolve, reject) {
9090        gd  =  self . gd , 
9191        opts  =  self . opts ; 
9292
93-     // mapbox doesn't have a way to get the current style  URL; do it ourselves  
94-     var  styleUrl  =  self . styleUrl  =  convertStyleUrl ( opts . style ) ; 
93+     // store style id and  URL or object  
94+     var  styleObj  =  self . styleObj  =  getStyleObj ( opts . style ) ; 
9595
9696    // store access token associated with this map 
9797    self . accessToken  =  opts . accesstoken ; 
9898
99+     // create the map! 
99100    var  map  =  self . map  =  new  mapboxgl . Map ( { 
100101        container : self . div , 
101102
102-         style : styleUrl , 
103+         style : styleObj . style , 
103104        center : convertCenter ( opts . center ) , 
104105        zoom : opts . zoom , 
105106        bearing : opts . bearing , 
@@ -172,11 +173,11 @@ proto.updateMap = function(calcData, fullLayout, resolve, reject) {
172173
173174    self . rejectOnError ( reject ) ; 
174175
175-     var  styleUrl  =  convertStyleUrl ( self . opts . style ) ; 
176+     var  styleObj  =  getStyleObj ( self . opts . style ) ; 
176177
177-     if ( self . styleUrl  !==  styleUrl )  { 
178-         self . styleUrl  =  styleUrl ; 
179-         map . setStyle ( styleUrl ) ; 
178+     if ( self . styleObj . id  !==  styleObj . id )  { 
179+         self . styleObj  =  styleObj ; 
180+         map . setStyle ( styleObj . style ) ; 
180181
181182        map . style . once ( 'load' ,  function ( )  { 
182183
@@ -402,16 +403,32 @@ proto.getView = function() {
402403    } ; 
403404} ; 
404405
405- function  convertStyleUrl ( style )  { 
406-     var  styleValues  =  layoutAttributes . style . values ; 
406+ function  getStyleObj ( val )  { 
407+     var  styleValues  =  layoutAttributes . style . values , 
408+         styleDflt  =  layoutAttributes . style . dflt , 
409+         styleObj  =  { } ; 
407410
408-     // if style is part of the 'official' mapbox values, 
409-     // add URL prefix and suffix 
410-     if ( styleValues . indexOf ( style )  !==  - 1 )  { 
411-         return  constants . styleUrlPrefix  +  style  +  '-'  +  constants . styleUrlSuffix ; 
411+     if ( Lib . isPlainObject ( val ) )  { 
412+         styleObj . id  =  val . id ; 
413+         styleObj . style  =  val ; 
412414    } 
415+     else  if ( typeof  val  ===  'string' )  { 
416+         styleObj . id  =  val ; 
417+         styleObj . style  =  ( styleValues . indexOf ( val )  !==  - 1 )  ?
418+              convertStyleVal ( val )  :
419+              val ; 
420+     } 
421+     else  { 
422+         styleObj . id  =  styleDflt ; 
423+         styleObj . style  =  convertStyleVal ( styleDflt ) ; 
424+     } 
425+ 
426+     return  styleObj ; 
427+ } 
413428
414-     return  style ; 
429+ // if style is part of the 'official' mapbox values, add URL prefix and suffix 
430+ function  convertStyleVal ( val )  { 
431+     return  constants . styleUrlPrefix  +  val  +  '-'  +  constants . styleUrlSuffix ; 
415432} 
416433
417434function  convertCenter ( center )  { 
0 commit comments