From fe57501046b9e4edfffa0897d7566b1c54cf6765 Mon Sep 17 00:00:00 2001 From: tombatossals Date: Fri, 27 Dec 2013 17:42:13 +0100 Subject: [PATCH] feat(build): 'maxbounds' updated to work with leaflet 0.7.1 --- dist/angular-leaflet-directive.js | 18 +++++++----------- dist/angular-leaflet-directive.min.js | 2 +- examples/maxbounds-example.html | 16 +++++----------- src/directives/leaflet.js | 5 ----- src/directives/maxbounds.js | 13 +++++++------ test/unit/maxboundsDirectiveSpec.js | 11 ++++++----- 6 files changed, 26 insertions(+), 39 deletions(-) diff --git a/dist/angular-leaflet-directive.js b/dist/angular-leaflet-directive.js index fb0db591..b4d7a78a 100644 --- a/dist/angular-leaflet-directive.js +++ b/dist/angular-leaflet-directive.js @@ -39,11 +39,6 @@ angular.module("leaflet-directive", []).directive('leaflet', function ($q, leafl genDispatchMapEvent = leafletEvents.genDispatchMapEvent, mapEvents = leafletEvents.getAvailableMapEvents(); - // If we are going to set maxbounds, undefine the minZoom property - if (isDefined(scope.maxbounds)) { - defaults.minZoom = undefined; - } - // Set width and height if they are defined if (isDefined(attrs.width)) { if (isNaN(attrs.width)) { @@ -965,17 +960,18 @@ angular.module("leaflet-directive").directive('maxbounds', function ($log, leafl controller.getMap().then(function(map) { leafletScope.$watch("maxbounds", function (maxbounds) { - // Unset any previous maxbounds - map.setMaxBounds(); - map.fire("zoomlevelschange"); - if (!isValidBounds(maxbounds)) { + // Unset any previous maxbounds + map.setMaxBounds(); return; } - map.setMaxBounds( [ + var bounds = [ [ maxbounds.southWest.lat, maxbounds.southWest.lng ], [ maxbounds.northEast.lat, maxbounds.northEast.lng ] - ]); + ]; + + map.setMaxBounds(bounds); + map.fitBounds(bounds); }); }); } diff --git a/dist/angular-leaflet-directive.min.js b/dist/angular-leaflet-directive.min.js index 0bd6b02b..5d786fd4 100644 --- a/dist/angular-leaflet-directive.min.js +++ b/dist/angular-leaflet-directive.min.js @@ -28,5 +28,5 @@ */ /*! angular-leaflet-directive 27-12-2013 */ -!function(){"use strict";angular.module("leaflet-directive",[]).directive("leaflet",["$q","leafletData","leafletMapDefaults","leafletHelpers","leafletEvents",function(a,b,c,d,e){var f;return{restrict:"EA",replace:!0,scope:{center:"=center",defaults:"=defaults",maxbounds:"=maxbounds",bounds:"=bounds",markers:"=markers",legend:"=legend",geojson:"=geojson",paths:"=paths",tiles:"=tiles",layers:"=layers",controls:"=controls",eventBroadcast:"=eventBroadcast"},template:'
',controller:["$scope",function(b){f=a.defer(),this.getMap=function(){return f.promise},this.getLeafletScope=function(){return b}}],link:function(a,g,h){var i=d.isDefined,j=c.setDefaults(a.defaults,h.id),k=e.genDispatchMapEvent,l=e.getAvailableMapEvents();i(a.maxbounds)&&(j.minZoom=void 0),i(h.width)&&(isNaN(h.width)?g.css("width",h.width):g.css("width",h.width+"px")),i(h.height)&&(isNaN(h.height)?g.css("height",h.height):g.css("height",h.height+"px"));var m=new L.Map(g[0],c.getMapCreationDefaults(h.id));if(f.resolve(m),i(h.center)||m.setView([j.center.lat,j.center.lng],j.center.zoom),!i(h.tiles)&&!i(h.layers)){var n=L.tileLayer(j.tileLayer,j.tileLayerOptions);n.addTo(m),b.setTiles(n)}if(i(m.zoomControl)&&i(j.zoomControlPosition)&&m.zoomControl.setPosition(j.zoomControlPosition),i(m.zoomControl)&&j.zoomControl===!1&&m.zoomControl.removeFrom(m),i(m.zoomsliderControl)&&i(j.zoomsliderControl)&&j.zoomsliderControl===!1&&m.zoomsliderControl.removeFrom(m),!i(h.eventBroadcast))for(var o="broadcast",p=0;p'+i.labels[b]+"";return a},e.addTo(b)}else a.warn("[AngularJS - Leaflet] legend.colors and legend.labels must be set.")})}}}]),angular.module("leaflet-directive").directive("geojson",["$log","$rootScope","leafletData","leafletHelpers",function(a,b,c,d){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,e,f,g){var h=d.safeApply,i=d.isDefined,j=g.getLeafletScope(),k={};g.getMap().then(function(a){j.$watch("geojson",function(e){if(i(k)&&a.hasLayer(k)&&a.removeLayer(k),i(e)&&i(e.data)){var f=e.resetStyleOnMouseout,g=e.onEachFeature;g||(g=function(a,c){d.LabelPlugin.isLoaded()&&i(e.label)&&c.bindLabel(a.properties.description),c.on({mouseover:function(c){h(j,function(){e.selected=a,b.$broadcast("leafletDirectiveMap.geojsonMouseover",c)})},mouseout:function(a){f&&k.resetStyle(a.target),h(j,function(){e.selected=void 0,b.$broadcast("leafletDirectiveMap.geojsonMouseout",a)})},click:function(a){h(j,function(){b.$broadcast("leafletDirectiveMap.geojsonClick",e.selected,a)})}})}),e.options={style:e.style,onEachFeature:g},k=L.geoJson(e.data,e.options),c.setGeoJSON(k),k.addTo(a)}})})}}}]),angular.module("leaflet-directive").directive("layers",["$log","$q","leafletData","leafletHelpers","leafletMapDefaults","leafletLayerHelpers",function(a,b,c,d,e,f){var g;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",controller:function(){g=b.defer(),this.getLayers=function(){return g.promise}},link:function(b,h,i,j){var k=d.isDefined,l={},m=j.getLeafletScope(),n=m.layers,o=f.createLayer;j.getMap().then(function(b){var d=e.getDefaults(i.id);if(!k(n)||!k(n.baselayers)||0===Object.keys(n.baselayers).length)return a.error("[AngularJS - Leaflet] At least one baselayer has to be defined"),void 0;g.resolve(l),c.setLayers(l,i.id),l.baselayers={},l.controls={},l.controls.layers=new L.control.layers,l.controls.layers.setPosition(d.controlLayersPosition);var f=!1;for(var h in n.baselayers){var j=o(n.baselayers[h]);k(j)?(l.baselayers[h]=j,n.baselayers[h].top===!0&&(b.addLayer(l.baselayers[h]),f=!0),l.controls.layers.addBaseLayer(l.baselayers[h],n.baselayers[h].name)):delete n.baselayers[h]}Object.keys(n.baselayers).length>1&&l.controls.layers.addTo(b),!f&&Object.keys(l.baselayers).length>0&&b.addLayer(l.baselayers[Object.keys(n.baselayers)[0]]),l.overlays={};for(h in n.overlays){var p=o(n.overlays[h]);k(p)&&(l.overlays[h]=p,n.overlays[h].visible===!0&&b.addLayer(l.overlays[h]),l.controls.layers.addOverlay(l.overlays[h],n.overlays[h].name))}m.$watch("layers.baselayers",function(c){for(var d in l.baselayers)k(c[d])||(l.controls.layers.removeLayer(l.baselayers[d]),b.hasLayer(l.baselayers[d])&&b.removeLayer(l.baselayers[d]),delete l.baselayers[d]);for(var e in c)if(!k(l.baselayers[e])){var f=o(c[e]);k(f)&&(l.baselayers[e]=f,c[e].top===!0&&b.addLayer(l.baselayers[e]),l.controls.layers.addBaseLayer(l.baselayers[e],c[e].name))}if(0===Object.keys(l.baselayers).length)return a.error("[AngularJS - Leaflet] At least one baselayer has to be defined"),void 0;var g=!1;for(var h in l.baselayers)if(b.hasLayer(l.baselayers[h])){g=!0;break}g||b.addLayer(l.baselayers[Object.keys(n.baselayers)[0]])},!0);var q={};m.$watch("layers.overlays",function(a){for(var c in l.overlays)k(a[c])||(l.controls.layers.removeLayer(l.overlays[c]),b.hasLayer(l.overlays[c])&&b.removeLayer(l.overlays[c]),delete l.overlays[c]);for(var d in a){if(!k(l.overlays[d])){var e=o(a[d]);k(e)&&(l.overlays[d]=e,l.controls.layers.addOverlay(l.overlays[d],a[d].name),a[d].visible===!0&&b.addLayer(l.overlays[d]))}a[d].visible&&!b.hasLayer(l.overlays[d])?q[d]?b.addLayer(q[d]):(l.controls.layers.addOverlay(l.overlays[d],a[d].name),b.addLayer(l.overlays[d])):a[d].visible===!1&&b.hasLayer(l.overlays[d])&&(q[d]=l.overlays[d],b.removeLayer(l.overlays[d]))}},!0)})}}}]),angular.module("leaflet-directive").directive("bounds",["$log","leafletHelpers","leafletBoundsHelpers",function(a,b,c){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(d,e,f,g){var h=b.isDefined,i=c.createLeafletBounds,j=c.updateBoundsInScope,k=g.getLeafletScope();g.getMap().then(function(b){var c=!0;b.whenReady(function(){k.$watch("bounds",function(d){if(!h(d))return a.error("[AngularJS - Leaflet] Invalid bounds"),void 0;c=!1;var e=i(d);e&&!b.getBounds().equals(e)&&b.fitBounds(e)},!0),b.on("dragend zoomend",function(){c||j(k,b)})})})}}}]),angular.module("leaflet-directive").directive("markers",["$log","$rootScope","$q","leafletData","leafletHelpers","leafletMapDefaults","leafletMarkerHelpers",function(a,b,c,d,e,f,g){return{restrict:"A",scope:!1,replace:!1,require:["leaflet","?layers"],link:function(b,f,h,i){var j=i[0],k=e.isDefined,l=j.getLeafletScope(),m=l.markers,n=g.deleteMarker,o=g.createMarker;j.getMap().then(function(b){var e,f={},g={};if(e=k(i[1])?i[1].getLayers:function(){var a=c.defer();return a.resolve(),a.promise},!k(m))return a.error('[AngularJS - Leaflet] Received an empty "markers" variable.'),void 0;var j=!k(h.watchMarkers)||"true"===h.watchMarkers;e().then(function(a){d.setMarkers(f,h.id),l.$watch("markers",function(c){for(var d in f)k(c)&&k(c[d])||n(b,f,a,g,d);for(var e in c)if(!k(f[e])){var h=o("markers."+e,c[e],l,b,a,g,j);k(h)&&(f[e]=h)}},j)})})}}}]),angular.module("leaflet-directive").directive("paths",["$log","leafletData","leafletMapDefaults","leafletHelpers",function(a,b,c,d){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,e,f,g){var h=d.isDefined,i=g.getLeafletScope(),j=i.paths,k=d.convertToLeafletLatLng,l=d.convertToLeafletLatLngs,m=d.convertToLeafletMultiLatLngs;g.getMap().then(function(d){function e(b,c,d,e){function f(a){if(h(a.latlngs))switch(a.type){default:case"polyline":case"polygon":g.setLatLngs(l(a.latlngs));break;case"multiPolyline":case"multiPolygon":g.setLatLngs(m(a.latlngs));break;case"rectangle":g.setBounds(new L.LatLngBounds(l(a.latlngs)));break;case"circle":case"circleMarker":g.setLatLng(k(a.latlngs)),h(a.radius)&&g.setRadius(a.radius)}h(a.weight)&&g.setStyle({weight:a.weight}),h(a.color)&&g.setStyle({color:a.color}),h(a.opacity)&&g.setStyle({opacity:a.opacity})}var g,i={weight:e.path.weight,color:e.path.color,opacity:e.path.opacity};switch(h(c.stroke)&&(i.stroke=c.stroke),h(c.fill)&&(i.fill=c.fill),h(c.fillColor)&&(i.fillColor=c.fillColor),h(c.fillOpacity)&&(i.fillOpacity=c.fillOpacity),h(c.smoothFactor)&&(i.smoothFactor=c.smoothFactor),h(c.noClip)&&(i.noClip=c.noClip),h(c.type)||(c.type="polyline"),c.type){default:case"polyline":g=new L.Polyline([],i);break;case"multiPolyline":g=new L.multiPolyline([[[0,0],[1,1]]],i);break;case"polygon":g=new L.Polygon([],i);break;case"multiPolygon":g=new L.MultiPolygon([[[0,0],[1,1],[0,1]]],i);break;case"rectangle":g=new L.Rectangle([[0,0],[1,1]],i);break;case"circle":g=new L.Circle([0,0],1,i);break;case"circleMarker":g=new L.CircleMarker([0,0],i)}d.addLayer(g);var j=a.$watch("paths."+b,function(a){return h(a)?(f(a),void 0):(d.removeLayer(g),j(),void 0)},!0);return g}var g=c.getDefaults(f.id);if(h(j)){var i={};b.setPaths(i,f.id),a.$watch("paths",function(a){for(var b in a)h(i[b])||(i[b]=e(b,a[b],d,g));for(var c in i)h(a[c])||delete i[c]},!0)}})}}}]),angular.module("leaflet-directive").directive("controls",["$log","leafletHelpers",function(a,b){return{restrict:"A",scope:!1,replace:!1,require:"?^leaflet",link:function(a,c,d,e){if(e){var f=b.isDefined,g=e.getLeafletScope(),h=g.controls;e.getMap().then(function(a){if(f(L.Control.Draw)&&f(h.draw)){var b=new L.Control.Draw(h.draw.options);a.addControl(b)}if(f(h.custom))for(var c=0;cOpenStreetMap contributors'},path:{weight:10,opacity:1,color:"#0000ff"},center:{lat:0,lng:0,zoom:1}}}var c=a.isDefined,d=a.obtainEffectiveMapId,e={};return{getDefaults:function(a){var b=d(e,a);return e[b]},getMapCreationDefaults:function(a){var b=d(e,a),f=e[b],g={maxZoom:f.maxZoom,keyboard:f.keyboard,dragging:f.dragging,zoomControl:f.zoomControl,doubleClickZoom:f.doubleClickZoom,scrollWheelZoom:f.scrollWheelZoom,attributionControl:f.attributionControl,worldCopyJump:f.worldCopyJump,crs:f.crs};return c(f.minZoom)&&(g.minZoom=f.minZoom),c(f.zoomAnimation)&&(g.zoomAnimation=f.zoomAnimation),c(f.fadeAnimation)&&(g.fadeAnimation=f.fadeAnimation),c(f.markerZoomAnimation)&&(g.markerZoomAnimation=f.markerZoomAnimation),g},setDefaults:function(a,f){var g=b();c(a)&&(g.doubleClickZoom=c(a.doubleClickZoom)?a.doubleClickZoom:g.doubleClickZoom,g.scrollWheelZoom=c(a.scrollWheelZoom)?a.scrollWheelZoom:g.doubleClickZoom,g.zoomControl=c(a.zoomControl)?a.zoomControl:g.zoomControl,g.zoomsliderControl=c(a.zoomsliderControl)?a.zoomsliderControl:g.zoomsliderControl,g.attributionControl=c(a.attributionControl)?a.attributionControl:g.attributionControl,g.tileLayer=c(a.tileLayer)?a.tileLayer:g.tileLayer,g.zoomControlPosition=c(a.zoomControlPosition)?a.zoomControlPosition:g.zoomControlPosition,g.keyboard=c(a.keyboard)?a.keyboard:g.keyboard,g.dragging=c(a.dragging)?a.dragging:g.dragging,g.controlLayersPosition=c(a.controlLayersPosition)?a.controlLayersPosition:g.controlLayersPosition,c(a.crs)&&c(L.CRS[a.crs])&&(g.crs=L.CRS[a.crs]),c(a.tileLayerOptions)&&angular.copy(a.tileLayerOptions,g.tileLayerOptions),c(a.maxZoom)&&(g.maxZoom=a.maxZoom),c(a.minZoom)&&(g.minZoom=a.minZoom),c(a.zoomAnimation)&&(g.zoomAnimation=a.zoomAnimation),c(a.fadeAnimation)&&(g.fadeAnimation=a.fadeAnimation),c(a.markerZoomAnimation)&&(g.markerZoomAnimation=a.markerZoomAnimation),c(a.worldCopyJump)&&(g.worldCopyJump=a.worldCopyJump));var h=d(e,f);return e[h]=g,g}}}]),angular.module("leaflet-directive").factory("leafletEvents",["$rootScope","$q","leafletHelpers",function(a,b,c){var d=c.safeApply;return{getAvailableMapEvents:function(){return["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","contextmenu","focus","blur","preclick","load","unload","viewreset","movestart","move","moveend","dragstart","drag","dragend","zoomstart","zoomend","zoomlevelschange","resize","autopanstart","layeradd","layerremove","baselayerchange","overlayadd","overlayremove","locationfound","locationerror","popupopen","popupclose"]},genDispatchMapEvent:function(b,c,e){return function(f){var g="leafletDirectiveMap."+c;d(b,function(b){"emit"===e?b.$emit(g,{leafletEvent:f}):"broadcast"===e&&a.$broadcast(g,{leafletEvent:f})})}},getAvailableMarkerEvents:function(){return["click","dblclick","mousedown","mouseover","mouseout","contextmenu","dragstart","drag","dragend","move","remove","popupopen","popupclose"]},genDispatchMarkerEvent:function(b,c,e,f){return function(g){var h="leafletDirectiveMarker."+c;d(b,function(b){"emit"===e?b.$emit(h,{leafletEvent:g,markerName:f}):"broadcast"===e&&a.$broadcast(h,{leafletEvent:g,markerName:f})})}}}}]),angular.module("leaflet-directive").factory("leafletLayerHelpers",["$rootScope","$log","leafletHelpers",function($rootScope,$log,leafletHelpers){function isValidLayerType(a){return isString(a.type)?-1===Object.keys(layerTypes).indexOf(a.type)?($log.error("[AngularJS - Leaflet] A layer must have a valid type: "+Object.keys(layerTypes)),!1):layerTypes[a.type].mustHaveUrl&&!isString(a.url)?($log.error("[AngularJS - Leaflet] A base layer must have an url"),!1):layerTypes[a.type].mustHaveLayer&&!isDefined(a.layer)?($log.error("[AngularJS - Leaflet] The type of layer "+a.type+" must have an layer defined"),!1):layerTypes[a.type].mustHaveBounds&&!isDefined(a.bounds)?($log.error("[AngularJS - Leaflet] The type of layer "+a.type+" must have bounds defined"),!1):!0:!1}var Helpers=leafletHelpers,isString=leafletHelpers.isString,isObject=leafletHelpers.isObject,isDefined=leafletHelpers.isDefined,layerTypes={xyz:{mustHaveUrl:!0,createLayer:function(a){return L.tileLayer(a.url,a.options)}},wms:{mustHaveUrl:!0,createLayer:function(a){return L.tileLayer.wms(a.url,a.options)}},wfs:{mustHaveUrl:!0,mustHaveLayer:!0,createLayer:function(params){if(Helpers.WFSLayerPlugin.isLoaded()){var options=angular.copy(params.options);return options.crs&&"string"==typeof options.crs&&(options.crs=eval(options.crs)),new L.GeoJSON.WFS(params.url,params.layer,options)}}},group:{mustHaveUrl:!1,createLayer:function(){return L.layerGroup()}},google:{mustHaveUrl:!1,createLayer:function(a){var b=a.type||"SATELLITE";if(Helpers.GoogleLayerPlugin.isLoaded())return new L.Google(b,a.options)}},ags:{mustHaveUrl:!0,createLayer:function(a){if(Helpers.AGSLayerPlugin.isLoaded()){var b=angular.copy(a.options);angular.extend(b,{url:a.url});var c=new lvector.AGS(b);return c.onAdd=function(a){this.setMap(a)},c.onRemove=function(){this.setMap(null)},c}}},dynamic:{mustHaveUrl:!0,createLayer:function(a){return Helpers.DynamicMapLayerPlugin.isLoaded()?L.esri.dynamicMapLayer(a.url,a.options):void 0}},markercluster:{mustHaveUrl:!1,createLayer:function(a){return Helpers.MarkerClusterPlugin.isLoaded()?new L.MarkerClusterGroup(a.options):void 0}},bing:{mustHaveUrl:!0,createLayer:function(a){return Helpers.BingLayerPlugin.isLoaded()?new L.BingLayer(a.key,a.options):void 0}},imageOverlay:{mustHaveUrl:!0,mustHaveBounds:!0,createLayer:function(a){return L.imageOverlay(a.url,a.bounds,a.options)}}};return{createLayer:function(a){if(isValidLayerType(a)){if(!isString(a.name))return $log.error("[AngularJS - Leaflet] A base layer must have a name"),void 0;isObject(a.layerParams)||(a.layerParams={}),isObject(a.layerOptions)||(a.layerOptions={});for(var b in a.layerParams)a.layerOptions[b]=a.layerParams[b];var c={url:a.url,options:a.layerOptions,layer:a.layer,type:a.layerType,bounds:a.bounds,key:a.key};return layerTypes[a.type].createLayer(c)}}}}]),angular.module("leaflet-directive").factory("leafletBoundsHelpers",["$log","leafletHelpers",function(a,b){function c(a){return angular.isDefined(a)&&angular.isDefined(a.southWest)&&angular.isDefined(a.northEast)&&angular.isNumber(a.southWest.lat)&&angular.isNumber(a.southWest.lng)&&angular.isNumber(a.northEast.lat)&&angular.isNumber(a.northEast.lng)}var d=b.isArray,e=b.isNumber;return{createLeafletBounds:function(a){return c(a)?L.latLngBounds([a.southWest.lat,a.southWest.lng],[a.northEast.lat,a.northEast.lng]):!1},isValidBounds:c,createBoundsFromArray:function(b){return d(b)&&2===b.length&&d(b[0])&&d(b[1])&&2===b[0].length&&2===b[1].length&&e(b[0][0])&&e(b[0][1])&&e(b[1][0])&&e(b[1][1])?{northEast:{lat:b[0][0],lng:b[0][1]},southWest:{lat:b[1][0],lng:b[1][1]}}:(a.error("[AngularJS - Leaflet] The bounds array is not valid."),void 0)},updateBoundsInScope:function(a,b){var c=b.getBounds(),d={northEast:{lat:c.getNorthEast().lat,lng:c.getNorthEast().lng},southWest:{lat:c.getSouthWest().lat,lng:c.getSouthWest().lng}};angular.equals(a.bounds,d)||(a.bounds=d)}}}]),angular.module("leaflet-directive").factory("leafletMarkerHelpers",["$rootScope","leafletHelpers","$log","leafletEvents",function(a,b,c,d){var e=b.isDefined,f=b,g=b.MarkerClusterPlugin,h=b.isString,i=b.isNumber,j=b.isObject,k=b.safeApply,l=d.getAvailableMarkerEvents(),m=L.Icon.extend({options:{iconUrl:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-icon.png",iconRetinaUrl:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-icon-2x.png",iconSize:[25,41],iconAnchor:[12,40],labelAnchor:[10,-20],popupAnchor:[0,-40],shadow:{url:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-shadow.png",retinaUrl:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-shadow.png",size:[41,41],anchor:[12,40]}}}),n=function(a){return new m(a)},o=function(a){if(e(a)){var b=null;b=a.icon?a.icon:n();var c={icon:b,draggable:a.draggable?!0:!1,clickable:e(a.clickable)?a.clickable:!0,riseOnHover:e(a.riseOnHover)?a.riseOnHover:!1};a.title&&(c.title=a.title);var d=new L.marker(a,c);return a.message&&d.bindPopup(a.message),f.LabelPlugin.isLoaded()&&e(a.label)&&e(a.label.message)&&d.bindLabel(a.label.message,a.label.options),d}},p=function(b,c,d,e,f,g){return function(h){var i="leafletDirectiveMarker."+b,j=d.replace("markers.","");"click"===b?k(e,function(){a.$broadcast("leafletDirectiveMarkersClick",j)}):"dragend"===b&&(k(e,function(){g.lat=f.getLatLng().lat,g.lng=f.getLatLng().lng}),g.message&&g.focus===!0&&f.openPopup()),k(e,function(b){"emit"===c?b.$emit(i,{markerName:j,leafletEvent:h}):a.$broadcast(i,{markerName:j,leafletEvent:h})})}};return{getLeafletIcon:n,deleteMarker:function(a,b,c,d,f){var g=b[f];if(e(c)&&e(c.overlays))for(var h in c.overlays)c.overlays[h]instanceof L.LayerGroup&&c.overlays[h].hasLayer(g)&&c.overlays[h].removeLayer(g);if(e(d))for(var i in d)d[i].hasLayer(g)&&d[i].removeLayer(g);a.removeLayer(g),delete b[f]},createMarker:function(a,b,d,k,m,q,r){var s=o(b);if(e(s)){if(e(b.layer)&&!h(b.layer))return c.error("[AngularJS - Leaflet] A layername must be a string"),void 0;if(e(b.layer)){if(!e(m))return c.error("[AngularJS - Leaflet] You must add layers to the directive if used in a marker"),void 0;if(!e(m.overlays))return c.error("[AngularJS - Leaflet] You must add layers overlays to the directive if used in a marker"),void 0;if(!e(m.overlays[b.layer]))return c.error("[AngularJS - Leaflet] You must use a name of an existing layer"),void 0;var t=m.overlays[b.layer];if(!(t instanceof L.LayerGroup))return c.error('[AngularJS - Leaflet] A marker can only be added to a layer of type "group"'),void 0;t.addLayer(s),k.hasLayer(s)&&b.focus===!0&&s.openPopup()}else{if(e(b.group)){if(!g.isLoaded())return c.error("[AngularJS - Leaflet] The MarkerCluster plugin is not loaded."),void 0;e(q[b.group])||(q[b.group]=new L.MarkerClusterGroup,k.addLayer(q[b.group])),q[b.group].addLayer(s)}else k.addLayer(s);f.LabelPlugin.isLoaded()&&e(b.label)&&e(b.label.options)&&b.label.options.noHide===!0&&s.showLabel(),b.focus===!0&&s.openPopup()}var u,v,w=[],x="broadcast";if(e(d.eventBroadcast))if("object"!=typeof d.eventBroadcast)c.warn("[AngularJS - Leaflet] event-broadcast must be an object check your model.");else if(e(d.eventBroadcast.marker))if(j(d.eventBroadcast.marker))c.warn("[AngularJS - Leaflet] event-broadcast.marker must be an object check your model.");else{void 0!==d.eventBroadcast.marker.logic&&null!==d.eventBroadcast.marker.logic&&("emit"!==d.eventBroadcast.marker.logic&&"broadcast"!==d.eventBroadcast.marker.logic?c.warn("[AngularJS - Leaflet] Available event propagation logic are: 'emit' or 'broadcast'."):"emit"===d.eventBroadcast.marker.logic&&(x="emit"));var y=!1,z=!1;if(void 0!==d.eventBroadcast.marker.enable&&null!==d.eventBroadcast.marker.enable&&"object"==typeof d.eventBroadcast.marker.enable&&(y=!0),void 0!==d.eventBroadcast.marker.disable&&null!==d.eventBroadcast.marker.disable&&"object"==typeof d.eventBroadcast.marker.disable&&(z=!0),y&&z)c.warn("[AngularJS - Leaflet] can not enable and disable events at the same time");else if(y||z)if(y)for(u=0;u',controller:["$scope",function(b){f=a.defer(),this.getMap=function(){return f.promise},this.getLeafletScope=function(){return b}}],link:function(a,g,h){var i=d.isDefined,j=c.setDefaults(a.defaults,h.id),k=e.genDispatchMapEvent,l=e.getAvailableMapEvents();i(h.width)&&(isNaN(h.width)?g.css("width",h.width):g.css("width",h.width+"px")),i(h.height)&&(isNaN(h.height)?g.css("height",h.height):g.css("height",h.height+"px"));var m=new L.Map(g[0],c.getMapCreationDefaults(h.id));if(f.resolve(m),i(h.center)||m.setView([j.center.lat,j.center.lng],j.center.zoom),!i(h.tiles)&&!i(h.layers)){var n=L.tileLayer(j.tileLayer,j.tileLayerOptions);n.addTo(m),b.setTiles(n)}if(i(m.zoomControl)&&i(j.zoomControlPosition)&&m.zoomControl.setPosition(j.zoomControlPosition),i(m.zoomControl)&&j.zoomControl===!1&&m.zoomControl.removeFrom(m),i(m.zoomsliderControl)&&i(j.zoomsliderControl)&&j.zoomsliderControl===!1&&m.zoomsliderControl.removeFrom(m),!i(h.eventBroadcast))for(var o="broadcast",p=0;p'+i.labels[b]+"";return a},e.addTo(b)}else a.warn("[AngularJS - Leaflet] legend.colors and legend.labels must be set.")})}}}]),angular.module("leaflet-directive").directive("geojson",["$log","$rootScope","leafletData","leafletHelpers",function(a,b,c,d){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,e,f,g){var h=d.safeApply,i=d.isDefined,j=g.getLeafletScope(),k={};g.getMap().then(function(a){j.$watch("geojson",function(e){if(i(k)&&a.hasLayer(k)&&a.removeLayer(k),i(e)&&i(e.data)){var f=e.resetStyleOnMouseout,g=e.onEachFeature;g||(g=function(a,c){d.LabelPlugin.isLoaded()&&i(e.label)&&c.bindLabel(a.properties.description),c.on({mouseover:function(c){h(j,function(){e.selected=a,b.$broadcast("leafletDirectiveMap.geojsonMouseover",c)})},mouseout:function(a){f&&k.resetStyle(a.target),h(j,function(){e.selected=void 0,b.$broadcast("leafletDirectiveMap.geojsonMouseout",a)})},click:function(a){h(j,function(){b.$broadcast("leafletDirectiveMap.geojsonClick",e.selected,a)})}})}),e.options={style:e.style,onEachFeature:g},k=L.geoJson(e.data,e.options),c.setGeoJSON(k),k.addTo(a)}})})}}}]),angular.module("leaflet-directive").directive("layers",["$log","$q","leafletData","leafletHelpers","leafletMapDefaults","leafletLayerHelpers",function(a,b,c,d,e,f){var g;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",controller:function(){g=b.defer(),this.getLayers=function(){return g.promise}},link:function(b,h,i,j){var k=d.isDefined,l={},m=j.getLeafletScope(),n=m.layers,o=f.createLayer;j.getMap().then(function(b){var d=e.getDefaults(i.id);if(!k(n)||!k(n.baselayers)||0===Object.keys(n.baselayers).length)return a.error("[AngularJS - Leaflet] At least one baselayer has to be defined"),void 0;g.resolve(l),c.setLayers(l,i.id),l.baselayers={},l.controls={},l.controls.layers=new L.control.layers,l.controls.layers.setPosition(d.controlLayersPosition);var f=!1;for(var h in n.baselayers){var j=o(n.baselayers[h]);k(j)?(l.baselayers[h]=j,n.baselayers[h].top===!0&&(b.addLayer(l.baselayers[h]),f=!0),l.controls.layers.addBaseLayer(l.baselayers[h],n.baselayers[h].name)):delete n.baselayers[h]}Object.keys(n.baselayers).length>1&&l.controls.layers.addTo(b),!f&&Object.keys(l.baselayers).length>0&&b.addLayer(l.baselayers[Object.keys(n.baselayers)[0]]),l.overlays={};for(h in n.overlays){var p=o(n.overlays[h]);k(p)&&(l.overlays[h]=p,n.overlays[h].visible===!0&&b.addLayer(l.overlays[h]),l.controls.layers.addOverlay(l.overlays[h],n.overlays[h].name))}m.$watch("layers.baselayers",function(c){for(var d in l.baselayers)k(c[d])||(l.controls.layers.removeLayer(l.baselayers[d]),b.hasLayer(l.baselayers[d])&&b.removeLayer(l.baselayers[d]),delete l.baselayers[d]);for(var e in c)if(!k(l.baselayers[e])){var f=o(c[e]);k(f)&&(l.baselayers[e]=f,c[e].top===!0&&b.addLayer(l.baselayers[e]),l.controls.layers.addBaseLayer(l.baselayers[e],c[e].name))}if(0===Object.keys(l.baselayers).length)return a.error("[AngularJS - Leaflet] At least one baselayer has to be defined"),void 0;var g=!1;for(var h in l.baselayers)if(b.hasLayer(l.baselayers[h])){g=!0;break}g||b.addLayer(l.baselayers[Object.keys(n.baselayers)[0]])},!0);var q={};m.$watch("layers.overlays",function(a){for(var c in l.overlays)k(a[c])||(l.controls.layers.removeLayer(l.overlays[c]),b.hasLayer(l.overlays[c])&&b.removeLayer(l.overlays[c]),delete l.overlays[c]);for(var d in a){if(!k(l.overlays[d])){var e=o(a[d]);k(e)&&(l.overlays[d]=e,l.controls.layers.addOverlay(l.overlays[d],a[d].name),a[d].visible===!0&&b.addLayer(l.overlays[d]))}a[d].visible&&!b.hasLayer(l.overlays[d])?q[d]?b.addLayer(q[d]):(l.controls.layers.addOverlay(l.overlays[d],a[d].name),b.addLayer(l.overlays[d])):a[d].visible===!1&&b.hasLayer(l.overlays[d])&&(q[d]=l.overlays[d],b.removeLayer(l.overlays[d]))}},!0)})}}}]),angular.module("leaflet-directive").directive("bounds",["$log","leafletHelpers","leafletBoundsHelpers",function(a,b,c){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(d,e,f,g){var h=b.isDefined,i=c.createLeafletBounds,j=c.updateBoundsInScope,k=g.getLeafletScope();g.getMap().then(function(b){var c=!0;b.whenReady(function(){k.$watch("bounds",function(d){if(!h(d))return a.error("[AngularJS - Leaflet] Invalid bounds"),void 0;c=!1;var e=i(d);e&&!b.getBounds().equals(e)&&b.fitBounds(e)},!0),b.on("dragend zoomend",function(){c||j(k,b)})})})}}}]),angular.module("leaflet-directive").directive("markers",["$log","$rootScope","$q","leafletData","leafletHelpers","leafletMapDefaults","leafletMarkerHelpers",function(a,b,c,d,e,f,g){return{restrict:"A",scope:!1,replace:!1,require:["leaflet","?layers"],link:function(b,f,h,i){var j=i[0],k=e.isDefined,l=j.getLeafletScope(),m=l.markers,n=g.deleteMarker,o=g.createMarker;j.getMap().then(function(b){var e,f={},g={};if(e=k(i[1])?i[1].getLayers:function(){var a=c.defer();return a.resolve(),a.promise},!k(m))return a.error('[AngularJS - Leaflet] Received an empty "markers" variable.'),void 0;var j=!k(h.watchMarkers)||"true"===h.watchMarkers;e().then(function(a){d.setMarkers(f,h.id),l.$watch("markers",function(c){for(var d in f)k(c)&&k(c[d])||n(b,f,a,g,d);for(var e in c)if(!k(f[e])){var h=o("markers."+e,c[e],l,b,a,g,j);k(h)&&(f[e]=h)}},j)})})}}}]),angular.module("leaflet-directive").directive("paths",["$log","leafletData","leafletMapDefaults","leafletHelpers",function(a,b,c,d){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,e,f,g){var h=d.isDefined,i=g.getLeafletScope(),j=i.paths,k=d.convertToLeafletLatLng,l=d.convertToLeafletLatLngs,m=d.convertToLeafletMultiLatLngs;g.getMap().then(function(d){function e(b,c,d,e){function f(a){if(h(a.latlngs))switch(a.type){default:case"polyline":case"polygon":g.setLatLngs(l(a.latlngs));break;case"multiPolyline":case"multiPolygon":g.setLatLngs(m(a.latlngs));break;case"rectangle":g.setBounds(new L.LatLngBounds(l(a.latlngs)));break;case"circle":case"circleMarker":g.setLatLng(k(a.latlngs)),h(a.radius)&&g.setRadius(a.radius)}h(a.weight)&&g.setStyle({weight:a.weight}),h(a.color)&&g.setStyle({color:a.color}),h(a.opacity)&&g.setStyle({opacity:a.opacity})}var g,i={weight:e.path.weight,color:e.path.color,opacity:e.path.opacity};switch(h(c.stroke)&&(i.stroke=c.stroke),h(c.fill)&&(i.fill=c.fill),h(c.fillColor)&&(i.fillColor=c.fillColor),h(c.fillOpacity)&&(i.fillOpacity=c.fillOpacity),h(c.smoothFactor)&&(i.smoothFactor=c.smoothFactor),h(c.noClip)&&(i.noClip=c.noClip),h(c.type)||(c.type="polyline"),c.type){default:case"polyline":g=new L.Polyline([],i);break;case"multiPolyline":g=new L.multiPolyline([[[0,0],[1,1]]],i);break;case"polygon":g=new L.Polygon([],i);break;case"multiPolygon":g=new L.MultiPolygon([[[0,0],[1,1],[0,1]]],i);break;case"rectangle":g=new L.Rectangle([[0,0],[1,1]],i);break;case"circle":g=new L.Circle([0,0],1,i);break;case"circleMarker":g=new L.CircleMarker([0,0],i)}d.addLayer(g);var j=a.$watch("paths."+b,function(a){return h(a)?(f(a),void 0):(d.removeLayer(g),j(),void 0)},!0);return g}var g=c.getDefaults(f.id);if(h(j)){var i={};b.setPaths(i,f.id),a.$watch("paths",function(a){for(var b in a)h(i[b])||(i[b]=e(b,a[b],d,g));for(var c in i)h(a[c])||delete i[c]},!0)}})}}}]),angular.module("leaflet-directive").directive("controls",["$log","leafletHelpers",function(a,b){return{restrict:"A",scope:!1,replace:!1,require:"?^leaflet",link:function(a,c,d,e){if(e){var f=b.isDefined,g=e.getLeafletScope(),h=g.controls;e.getMap().then(function(a){if(f(L.Control.Draw)&&f(h.draw)){var b=new L.Control.Draw(h.draw.options);a.addControl(b)}if(f(h.custom))for(var c=0;cOpenStreetMap contributors'},path:{weight:10,opacity:1,color:"#0000ff"},center:{lat:0,lng:0,zoom:1}}}var c=a.isDefined,d=a.obtainEffectiveMapId,e={};return{getDefaults:function(a){var b=d(e,a);return e[b]},getMapCreationDefaults:function(a){var b=d(e,a),f=e[b],g={maxZoom:f.maxZoom,keyboard:f.keyboard,dragging:f.dragging,zoomControl:f.zoomControl,doubleClickZoom:f.doubleClickZoom,scrollWheelZoom:f.scrollWheelZoom,attributionControl:f.attributionControl,worldCopyJump:f.worldCopyJump,crs:f.crs};return c(f.minZoom)&&(g.minZoom=f.minZoom),c(f.zoomAnimation)&&(g.zoomAnimation=f.zoomAnimation),c(f.fadeAnimation)&&(g.fadeAnimation=f.fadeAnimation),c(f.markerZoomAnimation)&&(g.markerZoomAnimation=f.markerZoomAnimation),g},setDefaults:function(a,f){var g=b();c(a)&&(g.doubleClickZoom=c(a.doubleClickZoom)?a.doubleClickZoom:g.doubleClickZoom,g.scrollWheelZoom=c(a.scrollWheelZoom)?a.scrollWheelZoom:g.doubleClickZoom,g.zoomControl=c(a.zoomControl)?a.zoomControl:g.zoomControl,g.zoomsliderControl=c(a.zoomsliderControl)?a.zoomsliderControl:g.zoomsliderControl,g.attributionControl=c(a.attributionControl)?a.attributionControl:g.attributionControl,g.tileLayer=c(a.tileLayer)?a.tileLayer:g.tileLayer,g.zoomControlPosition=c(a.zoomControlPosition)?a.zoomControlPosition:g.zoomControlPosition,g.keyboard=c(a.keyboard)?a.keyboard:g.keyboard,g.dragging=c(a.dragging)?a.dragging:g.dragging,g.controlLayersPosition=c(a.controlLayersPosition)?a.controlLayersPosition:g.controlLayersPosition,c(a.crs)&&c(L.CRS[a.crs])&&(g.crs=L.CRS[a.crs]),c(a.tileLayerOptions)&&angular.copy(a.tileLayerOptions,g.tileLayerOptions),c(a.maxZoom)&&(g.maxZoom=a.maxZoom),c(a.minZoom)&&(g.minZoom=a.minZoom),c(a.zoomAnimation)&&(g.zoomAnimation=a.zoomAnimation),c(a.fadeAnimation)&&(g.fadeAnimation=a.fadeAnimation),c(a.markerZoomAnimation)&&(g.markerZoomAnimation=a.markerZoomAnimation),c(a.worldCopyJump)&&(g.worldCopyJump=a.worldCopyJump));var h=d(e,f);return e[h]=g,g}}}]),angular.module("leaflet-directive").factory("leafletEvents",["$rootScope","$q","leafletHelpers",function(a,b,c){var d=c.safeApply;return{getAvailableMapEvents:function(){return["click","dblclick","mousedown","mouseup","mouseover","mouseout","mousemove","contextmenu","focus","blur","preclick","load","unload","viewreset","movestart","move","moveend","dragstart","drag","dragend","zoomstart","zoomend","zoomlevelschange","resize","autopanstart","layeradd","layerremove","baselayerchange","overlayadd","overlayremove","locationfound","locationerror","popupopen","popupclose"]},genDispatchMapEvent:function(b,c,e){return function(f){var g="leafletDirectiveMap."+c;d(b,function(b){"emit"===e?b.$emit(g,{leafletEvent:f}):"broadcast"===e&&a.$broadcast(g,{leafletEvent:f})})}},getAvailableMarkerEvents:function(){return["click","dblclick","mousedown","mouseover","mouseout","contextmenu","dragstart","drag","dragend","move","remove","popupopen","popupclose"]},genDispatchMarkerEvent:function(b,c,e,f){return function(g){var h="leafletDirectiveMarker."+c;d(b,function(b){"emit"===e?b.$emit(h,{leafletEvent:g,markerName:f}):"broadcast"===e&&a.$broadcast(h,{leafletEvent:g,markerName:f})})}}}}]),angular.module("leaflet-directive").factory("leafletLayerHelpers",["$rootScope","$log","leafletHelpers",function($rootScope,$log,leafletHelpers){function isValidLayerType(a){return isString(a.type)?-1===Object.keys(layerTypes).indexOf(a.type)?($log.error("[AngularJS - Leaflet] A layer must have a valid type: "+Object.keys(layerTypes)),!1):layerTypes[a.type].mustHaveUrl&&!isString(a.url)?($log.error("[AngularJS - Leaflet] A base layer must have an url"),!1):layerTypes[a.type].mustHaveLayer&&!isDefined(a.layer)?($log.error("[AngularJS - Leaflet] The type of layer "+a.type+" must have an layer defined"),!1):layerTypes[a.type].mustHaveBounds&&!isDefined(a.bounds)?($log.error("[AngularJS - Leaflet] The type of layer "+a.type+" must have bounds defined"),!1):!0:!1}var Helpers=leafletHelpers,isString=leafletHelpers.isString,isObject=leafletHelpers.isObject,isDefined=leafletHelpers.isDefined,layerTypes={xyz:{mustHaveUrl:!0,createLayer:function(a){return L.tileLayer(a.url,a.options)}},wms:{mustHaveUrl:!0,createLayer:function(a){return L.tileLayer.wms(a.url,a.options)}},wfs:{mustHaveUrl:!0,mustHaveLayer:!0,createLayer:function(params){if(Helpers.WFSLayerPlugin.isLoaded()){var options=angular.copy(params.options);return options.crs&&"string"==typeof options.crs&&(options.crs=eval(options.crs)),new L.GeoJSON.WFS(params.url,params.layer,options)}}},group:{mustHaveUrl:!1,createLayer:function(){return L.layerGroup()}},google:{mustHaveUrl:!1,createLayer:function(a){var b=a.type||"SATELLITE";if(Helpers.GoogleLayerPlugin.isLoaded())return new L.Google(b,a.options)}},ags:{mustHaveUrl:!0,createLayer:function(a){if(Helpers.AGSLayerPlugin.isLoaded()){var b=angular.copy(a.options);angular.extend(b,{url:a.url});var c=new lvector.AGS(b);return c.onAdd=function(a){this.setMap(a)},c.onRemove=function(){this.setMap(null)},c}}},dynamic:{mustHaveUrl:!0,createLayer:function(a){return Helpers.DynamicMapLayerPlugin.isLoaded()?L.esri.dynamicMapLayer(a.url,a.options):void 0}},markercluster:{mustHaveUrl:!1,createLayer:function(a){return Helpers.MarkerClusterPlugin.isLoaded()?new L.MarkerClusterGroup(a.options):void 0}},bing:{mustHaveUrl:!0,createLayer:function(a){return Helpers.BingLayerPlugin.isLoaded()?new L.BingLayer(a.key,a.options):void 0}},imageOverlay:{mustHaveUrl:!0,mustHaveBounds:!0,createLayer:function(a){return L.imageOverlay(a.url,a.bounds,a.options)}}};return{createLayer:function(a){if(isValidLayerType(a)){if(!isString(a.name))return $log.error("[AngularJS - Leaflet] A base layer must have a name"),void 0;isObject(a.layerParams)||(a.layerParams={}),isObject(a.layerOptions)||(a.layerOptions={});for(var b in a.layerParams)a.layerOptions[b]=a.layerParams[b];var c={url:a.url,options:a.layerOptions,layer:a.layer,type:a.layerType,bounds:a.bounds,key:a.key};return layerTypes[a.type].createLayer(c)}}}}]),angular.module("leaflet-directive").factory("leafletBoundsHelpers",["$log","leafletHelpers",function(a,b){function c(a){return angular.isDefined(a)&&angular.isDefined(a.southWest)&&angular.isDefined(a.northEast)&&angular.isNumber(a.southWest.lat)&&angular.isNumber(a.southWest.lng)&&angular.isNumber(a.northEast.lat)&&angular.isNumber(a.northEast.lng)}var d=b.isArray,e=b.isNumber;return{createLeafletBounds:function(a){return c(a)?L.latLngBounds([a.southWest.lat,a.southWest.lng],[a.northEast.lat,a.northEast.lng]):!1},isValidBounds:c,createBoundsFromArray:function(b){return d(b)&&2===b.length&&d(b[0])&&d(b[1])&&2===b[0].length&&2===b[1].length&&e(b[0][0])&&e(b[0][1])&&e(b[1][0])&&e(b[1][1])?{northEast:{lat:b[0][0],lng:b[0][1]},southWest:{lat:b[1][0],lng:b[1][1]}}:(a.error("[AngularJS - Leaflet] The bounds array is not valid."),void 0)},updateBoundsInScope:function(a,b){var c=b.getBounds(),d={northEast:{lat:c.getNorthEast().lat,lng:c.getNorthEast().lng},southWest:{lat:c.getSouthWest().lat,lng:c.getSouthWest().lng}};angular.equals(a.bounds,d)||(a.bounds=d)}}}]),angular.module("leaflet-directive").factory("leafletMarkerHelpers",["$rootScope","leafletHelpers","$log","leafletEvents",function(a,b,c,d){var e=b.isDefined,f=b,g=b.MarkerClusterPlugin,h=b.isString,i=b.isNumber,j=b.isObject,k=b.safeApply,l=d.getAvailableMarkerEvents(),m=L.Icon.extend({options:{iconUrl:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-icon.png",iconRetinaUrl:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-icon-2x.png",iconSize:[25,41],iconAnchor:[12,40],labelAnchor:[10,-20],popupAnchor:[0,-40],shadow:{url:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-shadow.png",retinaUrl:"http://cdn.leafletjs.com/leaflet-0.7/images/marker-shadow.png",size:[41,41],anchor:[12,40]}}}),n=function(a){return new m(a)},o=function(a){if(e(a)){var b=null;b=a.icon?a.icon:n();var c={icon:b,draggable:a.draggable?!0:!1,clickable:e(a.clickable)?a.clickable:!0,riseOnHover:e(a.riseOnHover)?a.riseOnHover:!1};a.title&&(c.title=a.title);var d=new L.marker(a,c);return a.message&&d.bindPopup(a.message),f.LabelPlugin.isLoaded()&&e(a.label)&&e(a.label.message)&&d.bindLabel(a.label.message,a.label.options),d}},p=function(b,c,d,e,f,g){return function(h){var i="leafletDirectiveMarker."+b,j=d.replace("markers.","");"click"===b?k(e,function(){a.$broadcast("leafletDirectiveMarkersClick",j)}):"dragend"===b&&(k(e,function(){g.lat=f.getLatLng().lat,g.lng=f.getLatLng().lng}),g.message&&g.focus===!0&&f.openPopup()),k(e,function(b){"emit"===c?b.$emit(i,{markerName:j,leafletEvent:h}):a.$broadcast(i,{markerName:j,leafletEvent:h})})}};return{getLeafletIcon:n,deleteMarker:function(a,b,c,d,f){var g=b[f];if(e(c)&&e(c.overlays))for(var h in c.overlays)c.overlays[h]instanceof L.LayerGroup&&c.overlays[h].hasLayer(g)&&c.overlays[h].removeLayer(g);if(e(d))for(var i in d)d[i].hasLayer(g)&&d[i].removeLayer(g);a.removeLayer(g),delete b[f]},createMarker:function(a,b,d,k,m,q,r){var s=o(b);if(e(s)){if(e(b.layer)&&!h(b.layer))return c.error("[AngularJS - Leaflet] A layername must be a string"),void 0;if(e(b.layer)){if(!e(m))return c.error("[AngularJS - Leaflet] You must add layers to the directive if used in a marker"),void 0;if(!e(m.overlays))return c.error("[AngularJS - Leaflet] You must add layers overlays to the directive if used in a marker"),void 0;if(!e(m.overlays[b.layer]))return c.error("[AngularJS - Leaflet] You must use a name of an existing layer"),void 0;var t=m.overlays[b.layer];if(!(t instanceof L.LayerGroup))return c.error('[AngularJS - Leaflet] A marker can only be added to a layer of type "group"'),void 0;t.addLayer(s),k.hasLayer(s)&&b.focus===!0&&s.openPopup()}else{if(e(b.group)){if(!g.isLoaded())return c.error("[AngularJS - Leaflet] The MarkerCluster plugin is not loaded."),void 0;e(q[b.group])||(q[b.group]=new L.MarkerClusterGroup,k.addLayer(q[b.group])),q[b.group].addLayer(s)}else k.addLayer(s);f.LabelPlugin.isLoaded()&&e(b.label)&&e(b.label.options)&&b.label.options.noHide===!0&&s.showLabel(),b.focus===!0&&s.openPopup()}var u,v,w=[],x="broadcast";if(e(d.eventBroadcast))if("object"!=typeof d.eventBroadcast)c.warn("[AngularJS - Leaflet] event-broadcast must be an object check your model.");else if(e(d.eventBroadcast.marker))if(j(d.eventBroadcast.marker))c.warn("[AngularJS - Leaflet] event-broadcast.marker must be an object check your model.");else{void 0!==d.eventBroadcast.marker.logic&&null!==d.eventBroadcast.marker.logic&&("emit"!==d.eventBroadcast.marker.logic&&"broadcast"!==d.eventBroadcast.marker.logic?c.warn("[AngularJS - Leaflet] Available event propagation logic are: 'emit' or 'broadcast'."):"emit"===d.eventBroadcast.marker.logic&&(x="emit"));var y=!1,z=!1;if(void 0!==d.eventBroadcast.marker.enable&&null!==d.eventBroadcast.marker.enable&&"object"==typeof d.eventBroadcast.marker.enable&&(y=!0),void 0!==d.eventBroadcast.marker.disable&&null!==d.eventBroadcast.marker.disable&&"object"==typeof d.eventBroadcast.marker.disable&&(z=!0),y&&z)c.warn("[AngularJS - Leaflet] can not enable and disable events at the same time");else if(y||z)if(y)for(u=0;u - - + + - - +