11/*!
2- * angular-leaflet-directive 0.8.4 2015-06-23
2+ * angular-leaflet-directive 0.8.4 2015-06-26
33* angular-leaflet-directive - An AngularJS directive to easily interact with Leaflet maps
44* git: https://github.com/tombatossals/angular-leaflet-directive
55*/
@@ -43,8 +43,8 @@ angular.module("leaflet-directive", []).directive('leaflet',
4343 link : function ( scope , element , attrs , ctrl ) {
4444 var isDefined = leafletHelpers . isDefined ,
4545 defaults = leafletMapDefaults . setDefaults ( scope . defaults , attrs . id ) ,
46- genDispatchMapEvent = leafletEvents . genDispatchMapEvent ,
47- mapEvents = leafletEvents . getAvailableMapEvents ( ) ;
46+ mapEvents = leafletEvents . getAvailableMapEvents ( ) ,
47+ addEvents = leafletEvents . addEvents ;
4848
4949 scope . mapId = attrs . id ;
5050 leafletData . setDirectiveControls ( { } , attrs . id ) ;
@@ -132,12 +132,7 @@ angular.module("leaflet-directive", []).directive('leaflet',
132132 // if no event-broadcast attribute, all events are broadcasted
133133 if ( ! isDefined ( attrs . eventBroadcast ) ) {
134134 var logic = "broadcast" ;
135- for ( var i = 0 ; i < mapEvents . length ; i ++ ) {
136- var eventName = mapEvents [ i ] ;
137- map . on ( eventName , genDispatchMapEvent ( scope , eventName , logic ) , {
138- eventName : eventName
139- } ) ;
140- }
135+ addEvents ( map , mapEvents , "eventName" , scope , logic ) ;
141136 }
142137
143138 // Resolve the map object to the promises
@@ -423,14 +418,25 @@ angular.module("leaflet-directive")
423418} ] ) ;
424419
425420angular . module ( "leaflet-directive" ) . factory ( 'leafletEvents' ,
426- [ "leafletMapEvents" , "leafletMarkerEvents" , "leafletPathEvents" , function ( leafletMapEvents , leafletMarkerEvents , leafletPathEvents ) {
427- //NOTE THIS SHOULD BE DEPRECATED infavor of getting a specific events helper
428- return angular . extend ( { } ,
421+ [ "leafletMapEvents" , "leafletMarkerEvents" , "leafletPathEvents" , "leafletIterators" , function ( leafletMapEvents , leafletMarkerEvents , leafletPathEvents , leafletIterators ) {
422+ //NOTE THIS SHOULD BE DEPRECATED infavor of getting a specific events helper
423+ var instance = angular . extend ( { } ,
429424 leafletMapEvents , {
430425 bindMarkerEvents : leafletMarkerEvents . bindEvents ,
431426 getAvailableMarkerEvents : leafletMarkerEvents . getAvailableEvents
432- } ,
433- leafletPathEvents ) ;
427+ } , leafletPathEvents ) ;
428+
429+ var genDispatchMapEvent = instance . genDispatchMapEvent ;
430+
431+ instance . addEvents = function ( map , mapEvents , contextName , scope , logic ) {
432+ leafletIterators . each ( mapEvents , function ( eventName ) {
433+ var context = { } ;
434+ context [ contextName ] = eventName ;
435+ map . on ( eventName , genDispatchMapEvent ( scope , eventName , logic ) , context ) ;
436+ } ) ;
437+ } ;
438+
439+ return instance ;
434440} ] ) ;
435441
436442angular . module ( "leaflet-directive" )
@@ -2805,7 +2811,8 @@ angular.module("leaflet-directive").directive('center',
28052811 safeApply = leafletHelpers . safeApply ,
28062812 isValidCenter = leafletHelpers . isValidCenter ,
28072813 isValidBounds = leafletBoundsHelpers . isValidBounds ,
2808- isUndefinedOrEmpty = leafletHelpers . isUndefinedOrEmpty ;
2814+ isUndefinedOrEmpty = leafletHelpers . isUndefinedOrEmpty ,
2815+ errorHeader = leafletHelpers . errorHeader ;
28092816
28102817 var shouldInitializeMapWithBounds = function ( bounds , center ) {
28112818 return isDefined ( bounds ) && isValidBounds ( bounds ) && isUndefinedOrEmpty ( center ) ;
@@ -2831,7 +2838,7 @@ angular.module("leaflet-directive").directive('center',
28312838 var defaults = leafletMapDefaults . getDefaults ( attrs . id ) ;
28322839
28332840 if ( attrs . center . search ( "-" ) !== - 1 ) {
2834- $log . error ( ' The "center" variable can\'t use a "-" on his key name: "' + attrs . center + '".' ) ;
2841+ $log . error ( errorHeader + ' The "center" variable can\'t use a "-" on his key name: "' + attrs . center + '".' ) ;
28352842 map . setView ( [ defaults . center . lat , defaults . center . lng ] , defaults . center . zoom ) ;
28362843 return ;
28372844 } else if ( shouldInitializeMapWithBounds ( leafletScope . bounds , centerModel ) ) {
@@ -2865,7 +2872,7 @@ angular.module("leaflet-directive").directive('center',
28652872 } ;
28662873 } ) ;
28672874 } else if ( ! isDefined ( centerModel ) ) {
2868- $log . error ( ' The "center" property is not defined in the main scope') ;
2875+ $log . error ( errorHeader + ' The "center" property is not defined in the main scope') ;
28692876 map . setView ( [ defaults . center . lat , defaults . center . lng ] , defaults . center . zoom ) ;
28702877 return ;
28712878 } else if ( ! ( isDefined ( centerModel . lat ) && isDefined ( centerModel . lng ) ) && ! isDefined ( centerModel . autoDiscover ) ) {
@@ -2911,7 +2918,7 @@ angular.module("leaflet-directive").directive('center',
29112918 }
29122919
29132920 if ( ! isValidCenter ( center ) && center . autoDiscover !== true ) {
2914- $log . warn ( "[AngularJS - Leaflet] invalid 'center'") ;
2921+ $log . warn ( errorHeader + " invalid 'center'") ;
29152922 //map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);
29162923 return ;
29172924 }
@@ -2949,7 +2956,7 @@ angular.module("leaflet-directive").directive('center',
29492956 mapReady = true ;
29502957 } ) ;
29512958
2952- map . on ( " moveend" , function ( /* event */ ) {
2959+ map . on ( ' moveend' , function ( /* event */ ) {
29532960 // Resolve the center after the first map position
29542961 _leafletCenter . resolve ( ) ;
29552962 leafletEvents . notifyCenterUrlHashChanged ( leafletScope , map , attrs , $location . search ( ) ) ;
@@ -2961,21 +2968,20 @@ angular.module("leaflet-directive").directive('center',
29612968 safeApply ( leafletScope , function ( scope ) {
29622969 if ( ! leafletScope . settingCenterFromScope ) {
29632970 //$log.debug("updating center model...", map.getCenter(), map.getZoom());
2964-
29652971 angular . extend ( scope . center , {
2966- lat : map . getCenter ( ) . lat ,
2967- lng : map . getCenter ( ) . lng ,
2968- zoom : map . getZoom ( ) ,
2969- autoDiscover : false
2972+ lat : map . getCenter ( ) . lat ,
2973+ lng : map . getCenter ( ) . lng ,
2974+ zoom : map . getZoom ( ) ,
2975+ autoDiscover : false
29702976 } ) ;
29712977 }
29722978 leafletEvents . notifyCenterChangedToBounds ( leafletScope , map ) ;
29732979 } ) ;
29742980 } ) ;
29752981
29762982 if ( centerModel . autoDiscover === true ) {
2977- map . on ( " locationerror" , function ( ) {
2978- $log . warn ( "[AngularJS - Leaflet] The Geolocation API is unauthorized on this page.") ;
2983+ map . on ( ' locationerror' , function ( ) {
2984+ $log . warn ( errorHeader + " The Geolocation API is unauthorized on this page.") ;
29792985 if ( isValidCenter ( centerModel ) ) {
29802986 map . setView ( [ centerModel . lat , centerModel . lng ] , centerModel . zoom ) ;
29812987 leafletEvents . notifyCenterChangedToBounds ( leafletScope , map ) ;
@@ -3133,7 +3139,7 @@ angular.module("leaflet-directive").directive("decorations", ["$log", "leafletHe
31333139 } ;
31343140} ] ) ;
31353141
3136- angular . module ( "leaflet-directive" ) . directive ( 'eventBroadcast' , [ "$log" , "$rootScope" , "leafletHelpers" , "leafletEvents" , function ( $log , $rootScope , leafletHelpers , leafletEvents ) {
3142+ angular . module ( "leaflet-directive" ) . directive ( 'eventBroadcast' , [ "$log" , "$rootScope" , "leafletHelpers" , "leafletEvents" , "leafletIterators" , function ( $log , $rootScope , leafletHelpers , leafletEvents , leafletIterators ) {
31373143 return {
31383144 restrict : "A" ,
31393145 scope : false ,
@@ -3146,14 +3152,12 @@ angular.module("leaflet-directive").directive('eventBroadcast', ["$log", "$rootS
31463152 leafletScope = controller . getLeafletScope ( ) ,
31473153 eventBroadcast = leafletScope . eventBroadcast ,
31483154 availableMapEvents = leafletEvents . getAvailableMapEvents ( ) ,
3149- genDispatchMapEvent = leafletEvents . genDispatchMapEvent ;
3155+ addEvents = leafletEvents . addEvents ;
31503156
31513157 controller . getMap ( ) . then ( function ( map ) {
31523158
3153- var mapEvents = [ ] ;
3154- var i ;
3155- var eventName ;
3156- var logic = "broadcast" ;
3159+ var mapEvents = [ ] ,
3160+ logic = "broadcast" ;
31573161
31583162 // We have a possible valid object
31593163 if ( ! isDefined ( eventBroadcast . map ) ) {
@@ -3176,23 +3180,18 @@ angular.module("leaflet-directive").directive('eventBroadcast', ["$log", "$rootS
31763180 $log . warn ( "[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model." ) ;
31773181 } else {
31783182 // Enable events
3179- for ( i = 0 ; i < eventBroadcast . map . enable . length ; i ++ ) {
3180- eventName = eventBroadcast . map . enable [ i ] ;
3183+ leafletIterators . each ( eventBroadcast . map . enable , function ( eventName ) {
31813184 // Do we have already the event enabled?
31823185 if ( mapEvents . indexOf ( eventName ) === - 1 && availableMapEvents . indexOf ( eventName ) !== - 1 ) {
31833186 mapEvents . push ( eventName ) ;
31843187 }
3185- }
3188+ } ) ;
31863189 }
31873190
31883191 }
3189-
3190- for ( i = 0 ; i < mapEvents . length ; i ++ ) {
3191- eventName = mapEvents [ i ] ;
3192- map . on ( eventName , genDispatchMapEvent ( leafletScope , eventName , logic ) , {
3193- eventName : eventName
3194- } ) ;
3195- }
3192+ // as long as the map is removed in the root leaflet directive we
3193+ // do not need ot clean up the events as leaflet does it itself
3194+ addEvents ( map , mapEvents , "eventName" , leafletScope , logic ) ;
31963195 } ) ;
31973196 }
31983197 } ;
@@ -4032,7 +4031,8 @@ angular.module("leaflet-directive").directive('markers',
40324031 leafletMarkerEvents . bindEvents ( marker , pathToMarker , model , leafletScope , layerName ) ;
40334032 }
40344033 else {
4035- updateMarker ( model , oldModels [ newName ] , maybeLMarker , pathToMarker , leafletScope , layers , map ) ;
4034+ var oldModel = isDefined ( oldModel ) ? oldModels [ newName ] : undefined ;
4035+ updateMarker ( model , oldModel , maybeLMarker , pathToMarker , leafletScope , layers , map ) ;
40364036 }
40374037 }
40384038 } ;
@@ -4122,7 +4122,8 @@ angular.module("leaflet-directive").directive('markers',
41224122 var _clean = function ( models , oldModels ) {
41234123 if ( isNested ) {
41244124 $it . each ( models , function ( markerToMaybeDel , layerName ) {
4125- _destroy ( markerToMaybeDel , oldModels [ layerName ] , leafletMarkers [ layerName ] , map , layers ) ;
4125+ var oldModel = isDefined ( oldModel ) ? oldModels [ layerName ] : undefined ;
4126+ _destroy ( markerToMaybeDel , oldModel , leafletMarkers [ layerName ] , map , layers ) ;
41264127 } ) ;
41274128 return ;
41284129 }
@@ -4134,7 +4135,8 @@ angular.module("leaflet-directive").directive('markers',
41344135 var skips = null ;
41354136 if ( isNested ) {
41364137 $it . each ( models , function ( markersToAdd , layerName ) {
4137- skips = _getNewModelsToSkipp ( models [ layerName ] , oldModels [ layerName ] , leafletMarkers [ layerName ] ) ;
4138+ var oldModel = isDefined ( oldModel ) ? oldModels [ layerName ] : undefined ;
4139+ skips = _getNewModelsToSkipp ( models [ layerName ] , oldModel , leafletMarkers [ layerName ] ) ;
41384140 _addMarkers ( markersToAdd , oldModels , map , layers , leafletMarkers , leafletScope ,
41394141 watchOptions , layerName , skips ) ;
41404142 } ) ;
@@ -4601,7 +4603,7 @@ angular.module("leaflet-directive")
46014603 return EventsHelper ;
46024604} ] )
46034605. service ( 'leafletEventsHelpers' , [ "leafletEventsHelpersFactory" , function ( leafletEventsHelpersFactory ) {
4604- return new leafletEventsHelpersFactory ( ) ;
4606+ return new leafletEventsHelpersFactory ( ) ;
46054607} ] ) ;
46064608
46074609angular . module ( "leaflet-directive" )
0 commit comments