From b2f541c38b017f28f171b914ab96fcdf5b3be40f Mon Sep 17 00:00:00 2001 From: tombatossals Date: Fri, 27 Dec 2013 16:56:39 +0100 Subject: [PATCH] feat(build): 'maxBounds' attribute renamed as 'maxbounds'. --- Gruntfile.js | 2 +- dist/angular-leaflet-directive.js | 14 +++++++------- dist/angular-leaflet-directive.min.js | 2 +- doc/leaflet-directive.md | 2 +- ...xBounds-attribute.md => maxbounds-attribute.md} | 14 +++++++------- examples/maxbounds-example.html | 14 +++++++------- src/directives/leaflet.js | 6 +++--- src/directives/{maxBounds.js => maxbounds.js} | 8 ++++---- ...sDirectiveSpec.js => maxboundsDirectiveSpec.js} | 4 ++-- 9 files changed, 33 insertions(+), 33 deletions(-) rename doc/{maxBounds-attribute.md => maxbounds-attribute.md} (75%) rename src/directives/{maxBounds.js => maxbounds.js} (77%) rename test/unit/{maxBoundsDirectiveSpec.js => maxboundsDirectiveSpec.js} (95%) diff --git a/Gruntfile.js b/Gruntfile.js index 15567ba1..8b8bed82 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -240,7 +240,7 @@ module.exports = function(grunt) { 'src/directives/paths.js', 'src/directives/controls.js', 'src/directives/eventBroadcast.js', - 'src/directives/maxBounds.js', + 'src/directives/maxbounds.js', 'src/services/leafletData.js', 'src/services/leafletMapDefaults.js', 'src/services/leafletEvents.js', diff --git a/dist/angular-leaflet-directive.js b/dist/angular-leaflet-directive.js index 0ba0b8df..fb0db591 100644 --- a/dist/angular-leaflet-directive.js +++ b/dist/angular-leaflet-directive.js @@ -10,7 +10,7 @@ angular.module("leaflet-directive", []).directive('leaflet', function ($q, leafl scope: { center: '=center', defaults: '=defaults', - maxBounds: '=maxbounds', + maxbounds: '=maxbounds', bounds: '=bounds', markers: '=markers', legend: '=legend', @@ -39,8 +39,8 @@ 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)) { + // If we are going to set maxbounds, undefine the minZoom property + if (isDefined(scope.maxbounds)) { defaults.minZoom = undefined; } @@ -964,17 +964,17 @@ angular.module("leaflet-directive").directive('maxbounds', function ($log, leafl controller.getMap().then(function(map) { - leafletScope.$watch("maxBounds", function (maxBounds) { + leafletScope.$watch("maxbounds", function (maxbounds) { // Unset any previous maxbounds map.setMaxBounds(); map.fire("zoomlevelschange"); - if (!isValidBounds(maxBounds)) { + if (!isValidBounds(maxbounds)) { return; } map.setMaxBounds( [ - [ maxBounds.southWest.lat, maxBounds.southWest.lng ], - [ maxBounds.northEast.lat, maxBounds.northEast.lng ] + [ maxbounds.southWest.lat, maxbounds.southWest.lng ], + [ maxbounds.northEast.lat, maxbounds.northEast.lng ] ]); }); }); diff --git a/dist/angular-leaflet-directive.min.js b/dist/angular-leaflet-directive.min.js index d71037aa..0bd6b02b 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(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 + ``` -It will map an object _maxBounds_ of our controller scope with the corresponding object on our leaflet directive isolated scope. It's not a bidirectional relationship, only the changes made to our _maxBounds_ object on the controller scope will affect the map, but no viceversa. +It will map an object _maxbounds_ of our controller scope with the corresponding object on our leaflet directive isolated scope. It's not a bidirectional relationship, only the changes made to our _maxbounds_ object on the controller scope will affect the map, but no viceversa. ``` -$scope.maxBounds = { +$scope.maxbounds = { southWest: { lat:51.508742458803326, lng: -0.087890625, @@ -27,14 +27,14 @@ Defining the bounds is a little complex, so we have a helper which will allow us ``` app.controller("DemoController", [ "$scope", "leafletBoundsHelpers", function($scope, leafletBoundsHelpers) { - var maxBounds = leafletBoundsHelpers.createBoundsFromArray([ + var maxbounds = leafletBoundsHelpers.createBoundsFromArray([ [ 51.508742458803326, -0.087890625 ], [ 51.508742458803326, -0.087890625 ] ]); angular.extend($scope, { - maxBounds: maxBounds + maxbounds: maxbounds }); }); ``` -And that's all, we can see how the map is affected when we change the _maxBounds_ scope values, like [this example](http://tombatossals.github.io/angular-leaflet-directive/examples/maxbounds-example.html). +And that's all, we can see how the map is affected when we change the _maxbounds_ scope values, like [this example](http://tombatossals.github.io/angular-leaflet-directive/examples/maxbounds-example.html). diff --git a/examples/maxbounds-example.html b/examples/maxbounds-example.html index 1223882c..e4ffaf0d 100644 --- a/examples/maxbounds-example.html +++ b/examples/maxbounds-example.html @@ -45,7 +45,7 @@ }; angular.extend($scope, { - maxBounds: {}, + maxbounds: {}, defaults: { minZoom: 4 } @@ -62,13 +62,13 @@
- - - - + + + +
- -

Maxbounds: NE(lat: {{ maxBounds.northEast.lat }}, lng: {{ maxBounds.northEast.lng }}) SW(lat: {{ maxBounds.southWest.lat }}, lng: {{ maxBounds.southWest.lng }})

+ +

Maxbounds: NE(lat: {{ maxbounds.northEast.lat }}, lng: {{ maxbounds.northEast.lng }}) SW(lat: {{ maxbounds.southWest.lat }}, lng: {{ maxbounds.southWest.lng }})

diff --git a/src/directives/leaflet.js b/src/directives/leaflet.js index 8c64d4cc..290f94aa 100644 --- a/src/directives/leaflet.js +++ b/src/directives/leaflet.js @@ -6,7 +6,7 @@ angular.module("leaflet-directive", []).directive('leaflet', function ($q, leafl scope: { center: '=center', defaults: '=defaults', - maxBounds: '=maxbounds', + maxbounds: '=maxbounds', bounds: '=bounds', markers: '=markers', legend: '=legend', @@ -35,8 +35,8 @@ 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)) { + // If we are going to set maxbounds, undefine the minZoom property + if (isDefined(scope.maxbounds)) { defaults.minZoom = undefined; } diff --git a/src/directives/maxBounds.js b/src/directives/maxbounds.js similarity index 77% rename from src/directives/maxBounds.js rename to src/directives/maxbounds.js index f59f3315..d245e411 100644 --- a/src/directives/maxBounds.js +++ b/src/directives/maxbounds.js @@ -11,17 +11,17 @@ angular.module("leaflet-directive").directive('maxbounds', function ($log, leafl controller.getMap().then(function(map) { - leafletScope.$watch("maxBounds", function (maxBounds) { + leafletScope.$watch("maxbounds", function (maxbounds) { // Unset any previous maxbounds map.setMaxBounds(); map.fire("zoomlevelschange"); - if (!isValidBounds(maxBounds)) { + if (!isValidBounds(maxbounds)) { return; } map.setMaxBounds( [ - [ maxBounds.southWest.lat, maxBounds.southWest.lng ], - [ maxBounds.northEast.lat, maxBounds.northEast.lng ] + [ maxbounds.southWest.lat, maxbounds.southWest.lng ], + [ maxbounds.northEast.lat, maxbounds.northEast.lng ] ]); }); }); diff --git a/test/unit/maxBoundsDirectiveSpec.js b/test/unit/maxboundsDirectiveSpec.js similarity index 95% rename from test/unit/maxBoundsDirectiveSpec.js rename to test/unit/maxboundsDirectiveSpec.js index 90029b0f..133e31ff 100755 --- a/test/unit/maxBoundsDirectiveSpec.js +++ b/test/unit/maxboundsDirectiveSpec.js @@ -25,7 +25,7 @@ describe('Directive: leaflet', function() { defaults: { minZoom: 4, }, - maxBounds: { + maxbounds: { southWest: { lat: 52.14823737817847, lng: 20.793685913085934 @@ -36,7 +36,7 @@ describe('Directive: leaflet', function() { } } }); - var element = angular.element(''); + var element = angular.element(''); element = $compile(element)($rootScope); var leafletMap; leafletData.getMap().then(function(map) {