11/*!
2- * ui-leaflet 2.0.0 2016-10-04
2+ * ui-leaflet 2.0.0 2016-10-05
33* ui-leaflet - An AngularJS directive to easily interact with Leaflet maps
44* git: https://github.com/angular-ui/ui-leaflet
55*/
@@ -312,14 +312,15 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', ["leafletLogger", "
312312angular . module ( 'ui-leaflet' ) . factory ( 'leafletControlHelpers' , [ "$rootScope" , "leafletLogger" , "leafletHelpers" , "leafletLayerHelpers" , "leafletMapDefaults" , function ( $rootScope , leafletLogger , leafletHelpers , leafletLayerHelpers , leafletMapDefaults ) {
313313 var isDefined = leafletHelpers . isDefined ,
314314 isObject = leafletHelpers . isObject ,
315+ get = leafletHelpers . get ,
315316 createLayer = leafletLayerHelpers . createLayer ,
316317 _controls = { } ,
317318 errorHeader = leafletHelpers . errorHeader + ' [Controls] ' ,
318319 $log = leafletLogger ;
319320
320321 var _controlLayersMustBeVisible = function _controlLayersMustBeVisible ( baselayers , overlays , mapId ) {
321322 var defaults = leafletMapDefaults . getDefaults ( mapId ) ;
322- if ( ! defaults . controls . layers . visible ) {
323+ if ( ! get ( defaults , ' controls.layers.visible' ) ) {
323324 return false ;
324325 }
325326
@@ -357,7 +358,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le
357358 angular . extend ( controlOptions , defaults . controls . layers . options ) ;
358359
359360 var control ;
360- if ( defaults . controls . layers && isDefined ( defaults . controls . layers . control ) ) {
361+ if ( ! ! get ( defaults , ' controls.layers.control' ) ) {
361362 control = defaults . controls . layers . control . apply ( this , [ [ ] , [ ] , controlOptions ] ) ;
362363 } else {
363364 control = new L . control . layers ( [ ] , [ ] , controlOptions ) ;
@@ -534,8 +535,8 @@ angular.module('ui-leaflet').service('leafletData', ["leafletLogger", "$q", "lea
534535 _private [ itemName ] = { } ;
535536 } ) ;
536537
537- this . unresolveMap = function ( scopeId ) {
538- var id = leafletHelpers . obtainEffectiveMapId ( _private . map , scopeId ) ;
538+ this . unresolveMap = function ( mapId ) {
539+ var id = leafletHelpers . obtainEffectiveMapId ( _private . map , mapId ) ;
539540 _privateItems . forEach ( function ( itemName ) {
540541 _private [ itemName ] [ id ] = undefined ;
541542 } ) ;
@@ -544,14 +545,14 @@ angular.module('ui-leaflet').service('leafletData', ["leafletLogger", "$q", "lea
544545 //int repetitive stuff (get and sets)
545546 _privateItems . forEach ( function ( itemName ) {
546547 var name = upperFirst ( itemName ) ;
547- self [ 'set' + name ] = function ( lObject , scopeId ) {
548- var defer = getUnresolvedDefer ( _private [ itemName ] , scopeId ) ;
548+ self [ 'set' + name ] = function ( lObject , mapId ) {
549+ var defer = getUnresolvedDefer ( _private [ itemName ] , mapId ) ;
549550 defer . resolve ( lObject ) ;
550- setResolvedDefer ( _private [ itemName ] , scopeId ) ;
551+ setResolvedDefer ( _private [ itemName ] , mapId ) ;
551552 } ;
552553
553- self [ 'get' + name ] = function ( scopeId ) {
554- var defer = getDefer ( _private [ itemName ] , scopeId ) ;
554+ self [ 'get' + name ] = function ( mapId ) {
555+ var defer = getDefer ( _private [ itemName ] , mapId ) ;
555556 return defer . promise ;
556557 } ;
557558 } ) ;
@@ -568,7 +569,7 @@ angular.module('ui-leaflet').service('leafletDirectiveControlsHelpers', ["leafle
568569
569570 var _errorHeader = _mainErrorHeader + '[leafletDirectiveControlsHelpers' ;
570571
571- var _extend = function _extend ( id , thingToAddName , createFn , cleanFn ) {
572+ var extend = function extend ( id , thingToAddName , createFn , cleanFn ) {
572573 var _fnHeader = _errorHeader + '.extend] ' ;
573574 var extender = { } ;
574575 if ( ! _isDefined ( thingToAddName ) ) {
@@ -589,14 +590,14 @@ angular.module('ui-leaflet').service('leafletDirectiveControlsHelpers', ["leafle
589590 }
590591
591592 //add external control to create / destroy markers without a watch
592- leafletData . getDirectiveControls ( ) . then ( function ( controls ) {
593+ leafletData . getDirectiveControls ( id ) . then ( function ( controls ) {
593594 angular . extend ( controls , extender ) ;
594595 leafletData . setDirectiveControls ( controls , id ) ;
595596 } ) ;
596597 } ;
597598
598599 return {
599- extend : _extend
600+ extend : extend
600601 } ;
601602} ] ) ;
602603
@@ -692,21 +693,16 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", "$timeout"
692693 };
693694 _getObjectValue(obj,"bike.1") returns 'hi'
694695 this is getPath in ui-gmap
696+ like _.get
697+ http://stackoverflow.com/questions/2631001/javascript-test-for-existence-of-nested-object-key?page=1&tab=active#tab-top
695698 */
696- var _getObjectValue = function _getObjectValue ( object , pathStr ) {
697- var obj ;
698- if ( ! object || ! angular . isObject ( object ) ) return ;
699- //if the key is not a sting then we already have the value
700- if ( pathStr === null || ! angular . isString ( pathStr ) ) {
701- return pathStr ;
702- }
703- obj = object ;
704- pathStr . split ( '.' ) . forEach ( function ( value ) {
705- if ( obj ) {
706- obj = obj [ value ] ;
707- }
708- } ) ;
709- return obj ;
699+ var _getObjectValue = function _getObjectValue ( object , path ) {
700+ if ( ! object ) return ;
701+ path = path . split ( '.' ) ;
702+ var obj = object [ path . shift ( ) ] ;
703+ while ( obj && path . length ) {
704+ obj = obj [ path . shift ( ) ] ;
705+ } return obj ;
710706 } ;
711707
712708 /*
@@ -733,18 +729,21 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", "$timeout"
733729 } ;
734730
735731 function _obtainEffectiveMapId ( d , mapId ) {
736- var id , i ;
732+ var id ,
733+ keys = Object . keys ( d ) ;
734+
737735 if ( ! angular . isDefined ( mapId ) ) {
738- if ( Object . keys ( d ) . length === 0 ) {
736+ if ( keys . length === 0 || keys . length === 1 && keys [ 0 ] === 'main' ) {
737+ //default non id attribute map
738+ // OR one key 'main'
739+ /*
740+ Main Reason:
741+ Initally if we have only one map and no "id" then d will be undefined initially.
742+ On subsequent runs it will be just d.main so we need to return the last map.
743+ */
739744 id = "main" ;
740- } else if ( Object . keys ( d ) . length >= 1 ) {
741- for ( i in d ) {
742- if ( d . hasOwnProperty ( i ) ) {
743- id = i ;
744- }
745- }
746745 } else {
747- $log . error ( _errorHeader + "- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call" ) ;
746+ throw new Error ( _errorHeader + "- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call. Where one of the following mapIds " + Object . keys ( d ) . join ( ',' ) + ' are available.' ) ;
748747 }
749748 } else {
750749 id = mapId ;
@@ -809,6 +808,7 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", "$timeout"
809808 var directiveNormalize = function directiveNormalize ( name ) {
810809 return camelCase ( name . replace ( PREFIX_REGEXP , "" ) ) ;
811810 } ;
811+
812812 // END AngularJS port
813813
814814 var _watchTrapDelayMilliSec = 10 ;
@@ -834,6 +834,7 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", "$timeout"
834834 clone : _clone ,
835835 errorHeader : _errorHeader ,
836836 getObjectValue : _getObjectValue ,
837+ get : _getObjectValue ,
837838 getObjectArrayPath : _getObjectArrayPath ,
838839 getObjectDotPath : _getObjectDotPath ,
839840 defaultTo : function defaultTo ( val , _default ) {
0 commit comments