diff --git a/.gitignore b/.gitignore index 33ae9bc6..8393f9a8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ Thumbs.db # =========== dist/ui-leaflet.pre.js dist/coverage/ +dist/src/ js/angular-leaflet-directive-webpage.ngmin.js # Related ecosystem diff --git a/.jshintrc b/.jshintrc index 054b6ae3..6072241c 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,7 +1,7 @@ { "node": true, - "browser": true, "esnext": true, + "browser": true, "bitwise": true, "curly": false, "eqeqeq": true, diff --git a/.npmignore b/.npmignore index 19367728..d14df6be 100644 --- a/.npmignore +++ b/.npmignore @@ -5,6 +5,8 @@ Thumbs.db # Project # =========== +dist/coverage/ +dist/src/ dist/ui-leaflet.pre.js js/angular-leaflet-directive-webpage.ngmin.js @@ -44,3 +46,4 @@ package.json bower.json dist/coverage/ +logo.svg diff --git a/.travis.yml b/.travis.yml index 45012326..e047ca96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: node_js node_js: - - "0.10" + - "4" env: global: @@ -13,6 +13,6 @@ before_script:   - npm install -g grunt-cli   - npm install -g bower - bower install --config.interactive=false - + notifications: slack: ng-leaflet:DYS8q20K3um7RVFU8D8yGCIq diff --git a/Gruntfile.js b/Gruntfile.js index 3bf01262..a3cdbcd8 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,5 +1,10 @@ global._ = require('lodash'); -module.exports = function (grunt) { +const karmaRunner = require('./grunt/utils/karma'); + +module.exports = (grunt) => { require('load-grunt-config')(grunt); + grunt.registerTask('karma', 'karma runner', function() { + return karmaRunner('../../test/karma.conf.js', grunt)(this.async()); + }); }; diff --git a/bower.json b/bower.json index fde675bb..a8488cb9 100644 --- a/bower.json +++ b/bower.json @@ -1,70 +1,73 @@ { - "name": "ui-leaflet", - "author": "https://github.com/angular-ui/ui-leaflet/graphs/contributors", - "description": "ui-leaflet - An AngularJS directive to easily interact with Leaflet maps", - "version": "1.0.0", - "homepage": "http://angular-ui.github.io/ui-leaflet/", - "keywords": [ - "angularjs", - "javascript", - "directive", - "leaflet", - "angular-ui" - ], - "main": [ - "dist/ui-leaflet.js" - ], - "dependencies": { - "angular": "1.x", - "angular-simple-logger": "~0.1.4", - "leaflet": "0.7.x" - }, - "devDependencies": { - "jquery": "*", - "semantic-ui": "*", - "bootstrap": "*", - "prism": "*", - "angular-route": "1.x", - "angular-animate": "1.x", - "angular-mocks": "1.x", - "leaflet.markercluster": "*", - "leaflet.draw": "*", - "Leaflet.label": "*", - "leaflet-tilelayer-geojson": "*", - "Leaflet.utfgrid": "danzel/Leaflet.utfgrid", - "Leaflet.awesome-markers": "*", - "leaflet-providers": "~1.1.5", - "leaflet.vector-markers": "~0.0.3", - "webgl-heatmap-leaflet": "*", - "leaflet-plugins": "*", - "esri-leaflet": "*", - "proj4": "*", - "font-awesome": "~4.3.x", - "proj4leaflet": "*", - "Leaflet.MakiMarkers": "*", - "Leaflet.heat": "https://github.com/Leaflet/Leaflet.heat/archive/gh-pages.tar.gz", - "Leaflet.ExtraMarkers": "https://github.com/coryasilva/Leaflet.ExtraMarkers/archive/v1.0.1.tar.gz", - "Leaflet.fullscreen": "http://github.com/Leaflet/Leaflet.fullscreen/archive/v0.0.4.tar.gz", - "Leaflet.PolylineDecorator": "bbecquet/Leaflet.PolylineDecorator", - "ionrangeslider": "~1.9.3", - "leaflet-minimap": "~2.2.0", - "esri-leaflet-clustered-feature-layer": "~1.0.x", - "esri-leaflet-heatmap-feature-layer": "~1.0.x", - "leaflet-search": "~1.5.8", - "highlightjs": "~8.8.0", - "angular-highlightjs": "~0.4.3" - }, - "ignore": [ - "website/", - "**/.*", - "src", - "doc", - "examples", - "test", - "*.md", - "Gruntfile.js", - "package.json", - "bower.json", - "dist/coverage/" - ] + "name": "ui-leaflet", + "author": "https://github.com/angular-ui/ui-leaflet/graphs/contributors", + "description": "ui-leaflet - An AngularJS directive to easily interact with Leaflet maps", + "version": "1.0.0", + "homepage": "http://angular-ui.github.io/ui-leaflet/", + "keywords": [ + "angularjs", + "javascript", + "directive", + "leaflet", + "angular-ui" + ], + "main": [ + "dist/ui-leaflet.js" + ], + "dependencies": { + "angular": "1.x", + "angular-simple-logger": "~0.1.4", + "leaflet": "0.7.x" + }, + "devDependencies": { + "jquery": "*", + "semantic-ui": "*", + "bootstrap": "*", + "prism": "*", + "angular-route": "1.x", + "angular-animate": "1.x", + "angular-mocks": "1.x", + "leaflet.markercluster": "*", + "leaflet.draw": "*", + "Leaflet.label": "*", + "leaflet-tilelayer-geojson": "*", + "Leaflet.utfgrid": "danzel/Leaflet.utfgrid", + "Leaflet.awesome-markers": "*", + "leaflet-providers": "~1.1.5", + "leaflet.vector-markers": "~0.0.3", + "webgl-heatmap-leaflet": "*", + "leaflet-plugins": "*", + "esri-leaflet": "*", + "proj4": "*", + "font-awesome": "~4.3.x", + "proj4leaflet": "*", + "Leaflet.MakiMarkers": "*", + "Leaflet.heat": "https://github.com/Leaflet/Leaflet.heat/archive/gh-pages.tar.gz", + "Leaflet.ExtraMarkers": "https://github.com/coryasilva/Leaflet.ExtraMarkers/archive/v1.0.1.tar.gz", + "Leaflet.fullscreen": "http://github.com/Leaflet/Leaflet.fullscreen/archive/v0.0.4.tar.gz", + "Leaflet.PolylineDecorator": "bbecquet/Leaflet.PolylineDecorator", + "ionrangeslider": "~1.9.3", + "leaflet-minimap": "~2.2.0", + "esri-leaflet-clustered-feature-layer": "~1.0.x", + "esri-leaflet-heatmap-feature-layer": "~1.0.x", + "leaflet-search": "~1.5.8", + "highlightjs": "~8.8.0", + "angular-highlightjs": "~0.4.3" + }, + "ignore": [ + "dist/coverage/", + "dist/src/", + "website/", + "**/.*", + "src", + "doc", + "examples", + "test", + "*.md", + "Gruntfile.js", + "package.json", + "bower.json", + "dist/coverage/", + "logo.svg" + ] } diff --git a/coffeelint.json b/coffeelint.json index 761e6d32..d0d59a09 100644 --- a/coffeelint.json +++ b/coffeelint.json @@ -42,7 +42,7 @@ }, "colon_assignment_spacing": { "name": "colon_assignment_spacing", - "level": "warn", + "level": "ignore", "spacing": { "left": 0, "right": 1 diff --git a/dist/ui-leaflet.js b/dist/ui-leaflet.js index 91958027..2d3db114 100644 --- a/dist/ui-leaflet.js +++ b/dist/ui-leaflet.js @@ -1,52 +1,53 @@ /*! -* ui-leaflet 1.0.0 2015-11-03 +* ui-leaflet 1.0.0 2015-11-09 * ui-leaflet - An AngularJS directive to easily interact with Leaflet maps * git: https://github.com/angular-ui/ui-leaflet */ (function(angular){ 'use strict'; -angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', - ["$q", "leafletData", "leafletMapDefaults", "leafletHelpers", "leafletMapEvents", function ($q, leafletData, leafletMapDefaults, leafletHelpers, leafletMapEvents) { +'use strict'; + +angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', ["$q", "leafletData", "leafletMapDefaults", "leafletHelpers", "leafletMapEvents", function ($q, leafletData, leafletMapDefaults, leafletHelpers, leafletMapEvents) { return { restrict: "EA", replace: true, scope: { - center : '=', - lfCenter : '=', - defaults : '=', - maxbounds : '=', - bounds : '=', - markers : '=', - legend : '=', - geojson : '=', - paths : '=', - tiles : '=', - layers : '=', - controls : '=', - decorations : '=', - eventBroadcast : '=', - watchOptions : '=' + center: '=', + lfCenter: '=', + defaults: '=', + maxbounds: '=', + bounds: '=', + markers: '=', + legend: '=', + geojson: '=', + paths: '=', + tiles: '=', + layers: '=', + controls: '=', + decorations: '=', + eventBroadcast: '=', + watchOptions: '=' }, transclude: true, template: '
', - controller: ["$scope", function ($scope) { + controller: ["$scope", function controller($scope) { this._leafletMap = $q.defer(); this.getMap = function () { return this._leafletMap.promise; }; - this.getLeafletScope = function() { + this.getLeafletScope = function () { return $scope; }; }], - link: function(scope, element, attrs, ctrl) { + link: function link(scope, element, attrs, ctrl) { var isDefined = leafletHelpers.isDefined, - defaults = leafletMapDefaults.setDefaults(scope.defaults, attrs.id), + defaults = leafletMapDefaults.setDefaults(scope.defaults, attrs.id), mapEvents = leafletMapEvents.getAvailableMapEvents(), addEvents = leafletMapEvents.addEvents; - scope.mapId = attrs.id; + scope.mapId = attrs.id; leafletData.setDirectiveControls({}, attrs.id); // Set width and height utility functions @@ -71,14 +72,12 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', if (isDefined(attrs.width)) { updateWidth(); - scope.$watch( - function () { - return element[0].getAttribute('width'); - }, - function () { - updateWidth(); - map.invalidateSize(); - }); + scope.$watch(function () { + return element[0].getAttribute('width'); + }, function () { + updateWidth(); + map.invalidateSize(); + }); } // If the height attribute defined update css @@ -86,14 +85,12 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', if (isDefined(attrs.height)) { updateHeight(); - scope.$watch( - function () { - return element[0].getAttribute('height'); - }, - function () { - updateHeight(); - map.invalidateSize(); - }); + scope.$watch(function () { + return element[0].getAttribute('height'); + }, function () { + updateHeight(); + map.invalidateSize(); + }); } // Create the Leaflet Map Object with the options @@ -105,30 +102,25 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', } // If no layers nor tiles defined, set the default tileLayer - if (!isDefined(attrs.tiles) && (!isDefined(attrs.layers))) { + if (!isDefined(attrs.tiles) && !isDefined(attrs.layers)) { var tileLayerObj = L.tileLayer(defaults.tileLayer, defaults.tileLayerOptions); tileLayerObj.addTo(map); leafletData.setTiles(tileLayerObj, attrs.id); } // Set zoom control configuration - if (isDefined(map.zoomControl) && - isDefined(defaults.zoomControlPosition)) { + if (isDefined(map.zoomControl) && isDefined(defaults.zoomControlPosition)) { map.zoomControl.setPosition(defaults.zoomControlPosition); } - if (isDefined(map.zoomControl) && - defaults.zoomControl===false) { + if (isDefined(map.zoomControl) && defaults.zoomControl === false) { map.zoomControl.removeFrom(map); } - if (isDefined(map.zoomsliderControl) && - isDefined(defaults.zoomsliderControl) && - defaults.zoomsliderControl===false) { + if (isDefined(map.zoomsliderControl) && isDefined(defaults.zoomsliderControl) && defaults.zoomsliderControl === false) { map.zoomsliderControl.removeFrom(map); } - // if no event-broadcast attribute, all events are broadcasted if (!isDefined(attrs.eventBroadcast)) { var logic = "broadcast"; @@ -136,7 +128,7 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', } // Resolve the map object to the promises - map.whenReady(function() { + map.whenReady(function () { leafletData.setMap(map, attrs.id); }); @@ -149,13 +141,15 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', //Handle request to invalidate the map size //Up scope using $scope.$emit('invalidateSize') //Down scope using $scope.$broadcast('invalidateSize') - scope.$on('invalidateSize', function() { + scope.$on('invalidateSize', function () { map.invalidateSize(); }); } }; }]); +'use strict'; + angular.module('ui-leaflet').factory('leafletBoundsHelpers', ["leafletLogger", "leafletHelpers", function (leafletLogger, leafletHelpers) { var isArray = leafletHelpers.isArray, @@ -165,28 +159,20 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', ["leafletLogger", " $log = leafletLogger; function _isValidBounds(bounds) { - return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) && - angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) && - angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) && - angular.isNumber(bounds.northEast.lng); + return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) && angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) && angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) && angular.isNumber(bounds.northEast.lng); } return { - createLeafletBounds: function(bounds) { + createLeafletBounds: function createLeafletBounds(bounds) { if (_isValidBounds(bounds)) { - return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng], - [bounds.northEast.lat, bounds.northEast.lng ]); + return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng], [bounds.northEast.lat, bounds.northEast.lng]); } }, isValidBounds: _isValidBounds, - createBoundsFromArray: function(boundsArray) { - if (!(isArray(boundsArray) && boundsArray.length === 2 && - isArray(boundsArray[0]) && isArray(boundsArray[1]) && - boundsArray[0].length === 2 && boundsArray[1].length === 2 && - isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) && - isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) { + createBoundsFromArray: function createBoundsFromArray(boundsArray) { + if (!(isArray(boundsArray) && boundsArray.length === 2 && isArray(boundsArray[0]) && isArray(boundsArray[1]) && boundsArray[0].length === 2 && boundsArray[1].length === 2 && isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) && isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) { $log.error("[AngularJS - Leaflet] The bounds array is not valid."); return; } @@ -203,7 +189,7 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', ["leafletLogger", " }; }, - createBoundsFromLeaflet: function(lfBounds) { + createBoundsFromLeaflet: function createBoundsFromLeaflet(lfBounds) { if (!(isDefined(lfBounds) && isFunction(lfBounds.getNorthEast) && isFunction(lfBounds.getSouthWest))) { $log.error("[AngularJS - Leaflet] The leaflet bounds is not valid object."); return; @@ -226,6 +212,8 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', ["leafletLogger", " }; }]); +'use strict'; + angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "leafletLogger", "leafletHelpers", "leafletLayerHelpers", "leafletMapDefaults", function ($rootScope, leafletLogger, leafletHelpers, leafletLayerHelpers, leafletMapDefaults) { var isDefined = leafletHelpers.isDefined, isObject = leafletHelpers.isObject, @@ -234,16 +222,16 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le errorHeader = leafletHelpers.errorHeader + ' [Controls] ', $log = leafletLogger; - var _controlLayersMustBeVisible = function(baselayers, overlays, mapId) { + var _controlLayersMustBeVisible = function _controlLayersMustBeVisible(baselayers, overlays, mapId) { var defaults = leafletMapDefaults.getDefaults(mapId); - if(!defaults.controls.layers.visible) { + if (!defaults.controls.layers.visible) { return false; } var atLeastOneControlItemMustBeShown = false; if (isObject(baselayers)) { - Object.keys(baselayers).forEach(function(key) { + Object.keys(baselayers).forEach(function (key) { var layer = baselayers[key]; if (!isDefined(layer.layerOptions) || layer.layerOptions.showOnSelector !== false) { atLeastOneControlItemMustBeShown = true; @@ -252,7 +240,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le } if (isObject(overlays)) { - Object.keys(overlays).forEach(function(key) { + Object.keys(overlays).forEach(function (key) { var layer = overlays[key]; if (!isDefined(layer.layerParams) || layer.layerParams.showOnSelector !== false) { atLeastOneControlItemMustBeShown = true; @@ -263,7 +251,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le return atLeastOneControlItemMustBeShown; }; - var _createLayersControl = function(mapId) { + var _createLayersControl = function _createLayersControl(mapId) { var defaults = leafletMapDefaults.getDefaults(mapId); var controlOptions = { collapsed: defaults.controls.layers.collapsed, @@ -274,75 +262,75 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le angular.extend(controlOptions, defaults.controls.layers.options); var control; - if(defaults.controls.layers && isDefined(defaults.controls.layers.control)) { - control = defaults.controls.layers.control.apply(this, [[], [], controlOptions]); - } else { - control = new L.control.layers([], [], controlOptions); - } + if (defaults.controls.layers && isDefined(defaults.controls.layers.control)) { + control = defaults.controls.layers.control.apply(this, [[], [], controlOptions]); + } else { + control = new L.control.layers([], [], controlOptions); + } return control; }; var controlTypes = { draw: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.Draw)) { $log.error(errorHeader + ' Draw plugin is not loaded.'); return false; } return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.Control.Draw(params); } }, scale: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.control.scale(params); } }, fullscreen: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.Fullscreen)) { $log.error(errorHeader + ' Fullscreen plugin is not loaded.'); return false; } return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.Control.Fullscreen(params); } }, search: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.Search)) { $log.error(errorHeader + ' Search plugin is not loaded.'); return false; } return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.Control.Search(params); } }, custom: {}, minimap: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.MiniMap)) { $log.error(errorHeader + ' Minimap plugin is not loaded.'); return false; @@ -350,14 +338,14 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le return true; }, - checkValidParams: function(params) { - if(!isDefined(params.layer)) { - $log.warn(errorHeader +' minimap "layer" option should be defined.'); + checkValidParams: function checkValidParams(params) { + if (!isDefined(params.layer)) { + $log.warn(errorHeader + ' minimap "layer" option should be defined.'); return false; } return true; }, - createControl: function(params) { + createControl: function createControl(params) { var layer = createLayer(params.layer); if (!isDefined(layer)) { @@ -373,11 +361,11 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le return { layersControlMustBeVisible: _controlLayersMustBeVisible, - isValidControlType: function(type) { + isValidControlType: function isValidControlType(type) { return Object.keys(controlTypes).indexOf(type) !== -1; }, - createControl: function (type, params) { + createControl: function createControl(type, params) { if (!controlTypes[type].checkValidParams(params)) { return; } @@ -385,7 +373,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le return controlTypes[type].createControl(params); }, - updateLayersControl: function(map, mapId, loaded, baselayers, overlays, leafletLayers) { + updateLayersControl: function updateLayersControl(map, mapId, loaded, baselayers, overlays, leafletLayers) { var i; var _layersControl = _controls[mapId]; var mustBeLoaded = _controlLayersMustBeVisible(baselayers, overlays, mapId); @@ -405,15 +393,13 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le _layersControl = _createLayersControl(mapId); _controls[mapId] = _layersControl; for (i in baselayers) { - var hideOnSelector = isDefined(baselayers[i].layerOptions) && - baselayers[i].layerOptions.showOnSelector === false; + var hideOnSelector = isDefined(baselayers[i].layerOptions) && baselayers[i].layerOptions.showOnSelector === false; if (!hideOnSelector && isDefined(leafletLayers.baselayers[i])) { _layersControl.addBaseLayer(leafletLayers.baselayers[i], baselayers[i].name); } } for (i in overlays) { - var hideOverlayOnSelector = isDefined(overlays[i].layerParams) && - overlays[i].layerParams.showOnSelector === false; + var hideOverlayOnSelector = isDefined(overlays[i].layerParams) && overlays[i].layerParams.showOnSelector === false; if (!hideOverlayOnSelector && isDefined(leafletLayers.overlays[i])) { _layersControl.addOverlay(leafletLayers.overlays[i], overlays[i].name); } @@ -426,32 +412,26 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', ["$rootScope", "le }; }]); +'use strict'; + angular.module('ui-leaflet').service('leafletData', ["leafletLogger", "$q", "leafletHelpers", function (leafletLogger, $q, leafletHelpers) { var getDefer = leafletHelpers.getDefer, getUnresolvedDefer = leafletHelpers.getUnresolvedDefer, setResolvedDefer = leafletHelpers.setResolvedDefer; - // $log = leafletLogger; + // $log = leafletLogger; var _private = {}; var self = this; - var upperFirst = function (string) { + var upperFirst = function upperFirst(string) { return string.charAt(0).toUpperCase() + string.slice(1); }; - var _privateItems = [ - 'map', - 'tiles', - 'layers', - 'paths', - 'markers', - 'geoJSON', - 'UTFGrid', //odd ball on naming convention keeping to not break - 'decorations', - 'directiveControls']; + var _privateItems = ['map', 'tiles', 'layers', 'paths', 'markers', 'geoJSON', 'UTFGrid', //odd ball on naming convention keeping to not break + 'decorations', 'directiveControls']; //init - _privateItems.forEach(function(itemName){ + _privateItems.forEach(function (itemName) { _private[itemName] = {}; }); @@ -478,8 +458,9 @@ angular.module('ui-leaflet').service('leafletData', ["leafletLogger", "$q", "lea }); }]); -angular.module('ui-leaflet') -.service('leafletDirectiveControlsHelpers', ["leafletLogger", "leafletData", "leafletHelpers", function (leafletLogger, leafletData, leafletHelpers) { +'use strict'; + +angular.module('ui-leaflet').service('leafletDirectiveControlsHelpers', ["leafletLogger", "leafletData", "leafletHelpers", function (leafletLogger, leafletData, leafletHelpers) { var _isDefined = leafletHelpers.isDefined, _isString = leafletHelpers.isString, _isObject = leafletHelpers.isObject, @@ -488,30 +469,28 @@ angular.module('ui-leaflet') var _errorHeader = _mainErrorHeader + '[leafletDirectiveControlsHelpers'; - var _extend = function(id, thingToAddName, createFn, cleanFn){ + var _extend = function _extend(id, thingToAddName, createFn, cleanFn) { var _fnHeader = _errorHeader + '.extend] '; var extender = {}; - if(!_isDefined(thingToAddName)){ + if (!_isDefined(thingToAddName)) { $log.error(_fnHeader + 'thingToAddName cannot be undefined'); return; } - if(_isString(thingToAddName) && _isDefined(createFn) && _isDefined(cleanFn)){ + if (_isString(thingToAddName) && _isDefined(createFn) && _isDefined(cleanFn)) { extender[thingToAddName] = { create: createFn, clean: cleanFn }; - } - else if(_isObject(thingToAddName) && !_isDefined(createFn) && !_isDefined(cleanFn)){ + } else if (_isObject(thingToAddName) && !_isDefined(createFn) && !_isDefined(cleanFn)) { extender = thingToAddName; - } - else{ + } else { $log.error(_fnHeader + 'incorrect arguments'); return; } //add external control to create / destroy markers without a watch - leafletData.getDirectiveControls().then(function(controls){ + leafletData.getDirectiveControls().then(function (controls) { angular.extend(controls, extender); leafletData.setDirectiveControls(controls, id); }); @@ -522,17 +501,18 @@ angular.module('ui-leaflet') }; }]); -angular.module('ui-leaflet') -.service('leafletGeoJsonHelpers', ["leafletHelpers", "leafletIterators", function (leafletHelpers, leafletIterators) { +'use strict'; + +angular.module('ui-leaflet').service('leafletGeoJsonHelpers', ["leafletHelpers", "leafletIterators", function (leafletHelpers, leafletIterators) { var lHlp = leafletHelpers, - lIt = leafletIterators; - var Point = function(lat,lng){ + lIt = leafletIterators; + var Point = function Point(lat, lng) { this.lat = lat; this.lng = lng; return this; }; - var _getLat = function(value) { + var _getLat = function _getLat(value) { if (Array.isArray(value) && value.length === 2) { return value[1]; } else if (lHlp.isDefined(value.type) && value.type === 'Point') { @@ -542,7 +522,7 @@ angular.module('ui-leaflet') } }; - var _getLng = function(value) { + var _getLng = function _getLng(value) { if (Array.isArray(value) && value.length === 2) { return value[0]; } else if (lHlp.isDefined(value.type) && value.type === 'Point') { @@ -552,7 +532,7 @@ angular.module('ui-leaflet') } }; - var _validateCoords = function(coords) { + var _validateCoords = function _validateCoords(coords) { if (lHlp.isUndefined(coords)) { return false; } @@ -561,54 +541,50 @@ angular.module('ui-leaflet') return true; } } else if (lHlp.isDefined(coords.type)) { - if ( - coords.type === 'Point' && lHlp.isArray(coords.coordinates) && - coords.coordinates.length === 2 && - lHlp.isNumber(coords.coordinates[0]) && - lHlp.isNumber(coords.coordinates[1])) { - return true; - } + if (coords.type === 'Point' && lHlp.isArray(coords.coordinates) && coords.coordinates.length === 2 && lHlp.isNumber(coords.coordinates[0]) && lHlp.isNumber(coords.coordinates[1])) { + return true; } + } - var ret = lIt.all(['lat', 'lng'], function(pos){ - return lHlp.isDefined(coords[pos]) && lHlp.isNumber(coords[pos]); - }); - return ret; - }; + var ret = lIt.all(['lat', 'lng'], function (pos) { + return lHlp.isDefined(coords[pos]) && lHlp.isNumber(coords[pos]); + }); + return ret; + }; - var _getCoords = function(value) { - if (!value || !_validateCoords(value)) { - return; - } - var p = null; - if (Array.isArray(value) && value.length === 2) { - p = new Point(value[1], value[0]); - } else if (lHlp.isDefined(value.type) && value.type === 'Point') { - p = new Point(value.coordinates[1], value.coordinates[0]); - } else { - return value; - } - //note angular.merge is avail in angular 1.4.X we might want to fill it here - return angular.extend(value, p);//tap on lat, lng if it doesnt exist - }; + var _getCoords = function _getCoords(value) { + if (!value || !_validateCoords(value)) { + return; + } + var p = null; + if (Array.isArray(value) && value.length === 2) { + p = new Point(value[1], value[0]); + } else if (lHlp.isDefined(value.type) && value.type === 'Point') { + p = new Point(value.coordinates[1], value.coordinates[0]); + } else { + return value; + } + //note angular.merge is avail in angular 1.4.X we might want to fill it here + return angular.extend(value, p); //tap on lat, lng if it doesnt exist + }; + return { + getLat: _getLat, + getLng: _getLng, + validateCoords: _validateCoords, + getCoords: _getCoords + }; +}]); - return { - getLat: _getLat, - getLng: _getLng, - validateCoords: _validateCoords, - getCoords: _getCoords - }; - }]); +'use strict'; angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ($q, $log) { - var _errorHeader = '[AngularJS - Leaflet] '; + var _errorHeader = '[ui-leaflet] '; var _copy = angular.copy; var _clone = _copy; /* For parsing paths to a field in an object - - Example: + Example: var obj = { bike:{ 1: 'hi' @@ -618,16 +594,15 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( _getObjectValue(obj,"bike.1") returns 'hi' this is getPath in ui-gmap */ - var _getObjectValue = function(object, pathStr) { + var _getObjectValue = function _getObjectValue(object, pathStr) { var obj; - if(!object || !angular.isObject(object)) - return; + if (!object || !angular.isObject(object)) return; //if the key is not a sting then we already have the value - if ((pathStr === null) || !angular.isString(pathStr)) { + if (pathStr === null || !angular.isString(pathStr)) { return pathStr; } obj = object; - pathStr.split('.').forEach(function(value) { + pathStr.split('.').forEach(function (value) { if (obj) { obj = obj[value]; } @@ -641,9 +616,9 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( returns: 'bike["one"]["two"]' */ - var _getObjectArrayPath = function(pathStr){ - return pathStr.split('.').reduce(function(previous, current) { - return previous + '["'+ current + '"]'; + var _getObjectArrayPath = function _getObjectArrayPath(pathStr) { + return pathStr.split('.').reduce(function (previous, current) { + return previous + '["' + current + '"]'; }); }; @@ -652,8 +627,8 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( returns: "bike.one.two" */ - var _getObjectDotPath = function(arrayOfStrings){ - return arrayOfStrings.reduce(function(previous, current) { + var _getObjectDotPath = function _getObjectDotPath(arrayOfStrings) { + return arrayOfStrings.reduce(function (previous, current) { return previous + '.' + current; }); }; @@ -661,15 +636,15 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( function _obtainEffectiveMapId(d, mapId) { var id, i; if (!angular.isDefined(mapId)) { - if (Object.keys(d).length === 0) { - id = "main"; - } else if (Object.keys(d).length >= 1) { - for (i in d) { - if (d.hasOwnProperty(i)) { - id = i; + if (Object.keys(d).length === 0) { + id = "main"; + } else if (Object.keys(d).length >= 1) { + for (i in d) { + if (d.hasOwnProperty(i)) { + id = i; + } } - } - } else { + } else { $log.error(_errorHeader + "- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call"); } } else { @@ -696,10 +671,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( return defer; } - var _isDefined = function(value) { + var _isDefined = function _isDefined(value) { return angular.isDefined(value) && value !== null; }; - var _isUndefined = function(value){ + var _isUndefined = function _isUndefined(value) { return !_isDefined(value); }; @@ -717,24 +692,23 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( @param name Name to normalize */ - var camelCase = function(name) { - return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - if (offset) { - return letter.toUpperCase(); - } else { - return letter; - } - }).replace(MOZ_HACK_REGEXP, "Moz$1"); + var camelCase = function camelCase(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { + if (offset) { + return letter.toUpperCase(); + } else { + return letter; + } + }).replace(MOZ_HACK_REGEXP, "Moz$1"); }; - /** Converts all accepted directives format into proper directive name. @param name Name to normalize */ - var directiveNormalize = function(name) { - return camelCase(name.replace(PREFIX_REGEXP, "")); + var directiveNormalize = function directiveNormalize(name) { + return camelCase(name.replace(PREFIX_REGEXP, "")); }; // END AngularJS port @@ -742,32 +716,32 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( return { camelCase: camelCase, directiveNormalize: directiveNormalize, - copy:_copy, - clone:_clone, + copy: _copy, + clone: _clone, errorHeader: _errorHeader, getObjectValue: _getObjectValue, - getObjectArrayPath:_getObjectArrayPath, + getObjectArrayPath: _getObjectArrayPath, getObjectDotPath: _getObjectDotPath, - defaultTo: function(val, _default){ + defaultTo: function defaultTo(val, _default) { return _isDefined(val) ? val : _default; }, //mainly for checking attributes of directives lets keep this minimal (on what we accept) - isTruthy: function(val){ + isTruthy: function isTruthy(val) { return val === 'true' || val === true; }, //Determine if a reference is {} - isEmpty: function(value) { + isEmpty: function isEmpty(value) { return Object.keys(value).length === 0; }, //Determine if a reference is undefined or {} - isUndefinedOrEmpty: function (value) { - return (angular.isUndefined(value) || value === null) || Object.keys(value).length === 0; + isUndefinedOrEmpty: function isUndefinedOrEmpty(value) { + return angular.isUndefined(value) || value === null || Object.keys(value).length === 0; }, // Determine if a reference is defined isDefined: _isDefined, - isUndefined:_isUndefined, + isUndefined: _isUndefined, isNumber: angular.isNumber, isString: angular.isString, isArray: angular.isArray, @@ -775,12 +749,11 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( isFunction: angular.isFunction, equals: angular.equals, - isValidCenter: function(center) { - return angular.isDefined(center) && angular.isNumber(center.lat) && - angular.isNumber(center.lng) && angular.isNumber(center.zoom); + isValidCenter: function isValidCenter(center) { + return angular.isDefined(center) && angular.isNumber(center.lat) && angular.isNumber(center.lng) && angular.isNumber(center.zoom); }, - isValidPoint: function(point) { + isValidPoint: function isValidPoint(point) { if (!angular.isDefined(point)) { return false; } @@ -790,19 +763,16 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( return angular.isNumber(point.lat) && angular.isNumber(point.lng); }, - isSameCenterOnMap: function(centerModel, map) { + isSameCenterOnMap: function isSameCenterOnMap(centerModel, map) { var mapCenter = map.getCenter(); var zoom = map.getZoom(); - if (centerModel.lat && centerModel.lng && - mapCenter.lat.toFixed(4) === centerModel.lat.toFixed(4) && - mapCenter.lng.toFixed(4) === centerModel.lng.toFixed(4) && - zoom === centerModel.zoom) { - return true; + if (centerModel.lat && centerModel.lng && mapCenter.lat.toFixed(4) === centerModel.lat.toFixed(4) && mapCenter.lng.toFixed(4) === centerModel.lng.toFixed(4) && zoom === centerModel.zoom) { + return true; } return false; }, - safeApply: function($scope, fn) { + safeApply: function safeApply($scope, fn) { var phase = $scope.$root.$$phase; if (phase === '$apply' || phase === '$digest') { $scope.$eval(fn); @@ -813,7 +783,7 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( obtainEffectiveMapId: _obtainEffectiveMapId, - getDefer: function(d, mapId) { + getDefer: function getDefer(d, mapId) { var id = _obtainEffectiveMapId(d, mapId), defer; if (!angular.isDefined(d[id]) || d[id].resolvedDefer === false) { @@ -826,41 +796,41 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( getUnresolvedDefer: _getUnresolvedDefer, - setResolvedDefer: function(d, mapId) { + setResolvedDefer: function setResolvedDefer(d, mapId) { var id = _obtainEffectiveMapId(d, mapId); d[id].resolvedDefer = true; }, - rangeIsSupported: function() { + rangeIsSupported: function rangeIsSupported() { var testrange = document.createElement('input'); testrange.setAttribute('type', 'range'); return testrange.type === 'range'; }, FullScreenControlPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Control.Fullscreen); } }, MiniMapControlPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Control.MiniMap); } }, AwesomeMarkersPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.AwesomeMarkers) && angular.isDefined(L.AwesomeMarkers.Icon); }, - is: function(icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.AwesomeMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -873,17 +843,17 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( }, VectorMarkersPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.VectorMarkers) && angular.isDefined(L.VectorMarkers.Icon); }, - is: function(icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.VectorMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -896,21 +866,21 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( }, DomMarkersPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { if (angular.isDefined(L.DomMarkers) && angular.isDefined(L.DomMarkers.Icon)) { return true; } else { return false; } }, - is: function (icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.DomMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -923,21 +893,21 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( }, PolylineDecoratorPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { if (angular.isDefined(L.PolylineDecorator)) { return true; } else { return false; } }, - is: function(decoration) { + is: function is(decoration) { if (this.isLoaded()) { return decoration instanceof L.PolylineDecorator; } else { return false; } }, - equal: function(decorationA, decorationB) { + equal: function equal(decorationA, decorationB) { if (!this.isLoaded()) { return false; } @@ -950,21 +920,21 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( }, MakiMarkersPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { if (angular.isDefined(L.MakiMarkers) && angular.isDefined(L.MakiMarkers.Icon)) { return true; } else { return false; } }, - is: function(icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.MakiMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -976,21 +946,21 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, ExtraMarkersPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { if (angular.isDefined(L.ExtraMarkers) && angular.isDefined(L.ExtraMarkers.Icon)) { return true; } else { return false; } }, - is: function (icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.ExtraMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -1002,10 +972,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, LabelPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Label); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.MarkerClusterGroup; } else { @@ -1014,10 +984,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, MarkerClusterPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.MarkerClusterGroup); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.MarkerClusterGroup; } else { @@ -1026,10 +996,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, GoogleLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Google); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.Google; } else { @@ -1038,37 +1008,37 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, LeafletProviderPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.TileLayer.Provider); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.TileLayer.Provider; } else { return false; } } - }, + }, ChinaLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.tileLayer.chinaProvider); } }, HeatLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.heatLayer); } }, WebGLHeatMapLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.TileLayer.WebGLHeatMap); } }, BingLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.BingLayer); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.BingLayer; } else { @@ -1077,10 +1047,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, WFSLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.GeoJSON.WFS !== undefined; }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.GeoJSON.WFS; } else { @@ -1089,10 +1059,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSBaseLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.basemapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.basemapLayer; } else { @@ -1101,10 +1071,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return lvector !== undefined && lvector.AGS !== undefined; }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof lvector.AGS; } else { @@ -1113,10 +1083,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSFeatureLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.featureLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.featureLayer; } else { @@ -1125,10 +1095,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSTiledMapLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.tiledMapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.tiledMapLayer; } else { @@ -1137,10 +1107,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSDynamicMapLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.dynamicMapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.dynamicMapLayer; } else { @@ -1149,10 +1119,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSImageMapLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.imageMapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.imageMapLayer; } else { @@ -1161,10 +1131,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSClusteredLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.clusteredFeatureLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.clusteredFeatureLayer; } else { @@ -1173,10 +1143,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, AGSHeatmapLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.heatmapFeatureLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.heatmapFeatureLayer; } else { @@ -1185,10 +1155,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, YandexLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Yandex); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.Yandex; } else { @@ -1197,10 +1167,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, GeoJSONPlugin: { - isLoaded: function(){ + isLoaded: function isLoaded() { return angular.isDefined(L.TileLayer.GeoJSON); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.TileLayer.GeoJSON; } else { @@ -1209,10 +1179,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, UTFGridPlugin: { - isLoaded: function(){ + isLoaded: function isLoaded() { return angular.isDefined(L.UtfGrid); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.UtfGrid; } else { @@ -1222,10 +1192,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, CartoDB: { - isLoaded: function(){ + isLoaded: function isLoaded() { return cartodb; }, - is: function(/*layer*/) { + is: function is() /*layer*/{ return true; /* if (this.isLoaded()) { @@ -1237,10 +1207,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( }, Leaflet: { DivIcon: { - is: function(icon) { + is: function is(icon) { return icon instanceof L.DivIcon; }, - equal: function(iconA, iconB) { + equal: function equal(iconA, iconB) { if (this.is(iconA)) { return angular.equals(iconA, iconB); } else { @@ -1249,10 +1219,10 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( } }, Icon: { - is: function(icon) { + is: function is(icon) { return icon instanceof L.Icon; }, - equal: function(iconA, iconB) { + equal: function equal(iconA, iconB) { if (this.is(iconA)) { return angular.equals(iconA, iconB); } else { @@ -1271,18 +1241,20 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ( */ //legacy defaults watchOptions: { - type:'watchDeep', - individual:{ + type: 'watchDeep', + individual: { type: 'watchDeep' } } }; }]); +'use strict'; + angular.module('ui-leaflet').service('leafletIterators', ["leafletLogger", "leafletHelpers", function (leafletLogger, leafletHelpers) { var lHlp = leafletHelpers, - errorHeader = leafletHelpers.errorHeader + 'leafletIterators: '; + errorHeader = leafletHelpers.errorHeader + 'leafletIterators: '; //BEGIN COPY from underscore var _keys = Object.keys; @@ -1295,18 +1267,18 @@ angular.module('ui-leaflet').service('leafletIterators', ["leafletLogger", "leaf // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var _isArrayLike = function(collection) { + var _isArrayLike = function _isArrayLike(collection) { var length = collection !== null && collection.length; - return lHlp.isNumber(length) && length >= 0 && length <= MAX_ARRAY_INDEX; + return lHlp.isNumber(length) && length >= 0 && length <= MAX_ARRAY_INDEX; }; // Keep the identity function around for default iteratees. - var _identity = function(value) { + var _identity = function _identity(value) { return value; }; - var _property = function(key) { - return function(obj) { + var _property = function _property(key) { + return function (obj) { return obj === null ? void 0 : obj[key]; }; }; @@ -1314,30 +1286,34 @@ angular.module('ui-leaflet').service('leafletIterators', ["leafletLogger", "leaf // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. - var optimizeCb = function(func, context, argCount) { + var optimizeCb = function optimizeCb(func, context, argCount) { if (context === void 0) return func; switch (argCount === null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; + case 1: + return function (value) { + return func.call(context, value); + }; + case 2: + return function (value, other) { + return func.call(context, value, other); + }; + case 3: + return function (value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: + return function (accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; } - return function() { + return function () { return func.apply(context, arguments); }; }; // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, undefinedOnly) { - return function(obj) { + var createAssigner = function createAssigner(keysFunc, undefinedOnly) { + return function (obj) { var length = arguments.length; if (length < 2 || obj === null) return obj; for (var index = 1; index < length; index++) { @@ -1355,12 +1331,14 @@ angular.module('ui-leaflet').service('leafletIterators', ["leafletLogger", "leaf // Assigns a given object with all the own properties in the passed-in object(s) // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - var _extendOwn, _assign = null; + var _extendOwn, + _assign = null; _extendOwn = _assign = createAssigner(_keys); // Returns whether an object has a given set of `key:value` pairs. - var _isMatch = function(object, attrs) { - var keys = _keys(attrs), length = keys.length; + var _isMatch = function _isMatch(object, attrs) { + var keys = _keys(attrs), + length = keys.length; if (object === null) return !length; var obj = Object(object); for (var i = 0; i < length; i++) { @@ -1372,30 +1350,31 @@ angular.module('ui-leaflet').service('leafletIterators', ["leafletLogger", "leaf // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. - var _matcher, _matches = null; - _matcher = _matches = function(attrs) { + var _matcher, + _matches = null; + _matcher = _matches = function (attrs) { attrs = _extendOwn({}, attrs); - return function(obj) { + return function (obj) { return _isMatch(obj, attrs); }; }; - // A mostly-internal function to generate callbacks that can be applied // to each element in a collection, returning the desired result — either // identity, an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { + var cb = function cb(value, context, argCount) { if (value === null) return _identity; if (_isFunction(value)) return optimizeCb(value, context, argCount); if (_isObject(value)) return _matcher(value); return _property(value); }; - var _every, _all = null; - _every = _all = function(obj, predicate, context) { + var _every, + _all = null; + _every = _all = function (obj, predicate, context) { predicate = cb(predicate, context); var keys = !_isArrayLike(obj) && _keys(obj), - length = (keys || obj).length; + length = (keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = keys ? keys[index] : index; if (!predicate(obj[currentKey], currentKey, obj)) return false; @@ -1405,51 +1384,52 @@ angular.module('ui-leaflet').service('leafletIterators', ["leafletLogger", "leaf //END COPY fron underscore - var _hasErrors = function(collection, cb, ignoreCollection, cbName){ - if(!ignoreCollection) { + var _hasErrors = function _hasErrors(collection, cb, ignoreCollection, cbName) { + if (!ignoreCollection) { if (!lHlp.isDefined(collection) || !lHlp.isDefined(cb)) { return true; } } - if(!lHlp.isFunction(cb)){ - cbName = lHlp.defaultTo(cb,'cb'); + if (!lHlp.isFunction(cb)) { + cbName = lHlp.defaultTo(cb, 'cb'); $log.error(errorHeader + cbName + ' is not a function'); return true; } return false; }; - var _iterate = function(collection, externalCb, internalCb){ - if(_hasErrors(undefined, internalCb, true, 'internalCb')){ + var _iterate = function _iterate(collection, externalCb, internalCb) { + if (_hasErrors(undefined, internalCb, true, 'internalCb')) { return; } - if(!_hasErrors(collection, externalCb)){ - for(var key in collection){ - if (collection.hasOwnProperty(key)) { - internalCb(collection[key], key); - } + if (!_hasErrors(collection, externalCb)) { + for (var key in collection) { + if (collection.hasOwnProperty(key)) { + internalCb(collection[key], key); + } } } }; //see http://jsperf.com/iterators/3 //utilizing for in is way faster - var _each = function(collection, cb){ - _iterate(collection, cb, function(val, key){ + var _each = function _each(collection, cb) { + _iterate(collection, cb, function (val, key) { cb(val, key); }); }; return { - each:_each, + each: _each, forEach: _each, every: _every, all: _all }; }]); -angular.module('ui-leaflet') -.factory('leafletLayerHelpers', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletIterators", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletIterators) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletLayerHelpers', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletIterators", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletIterators) { var Helpers = leafletHelpers; var isString = leafletHelpers.isString; var isObject = leafletHelpers.isObject; @@ -1459,26 +1439,26 @@ angular.module('ui-leaflet') var $it = leafletIterators; var $log = leafletLogger; - var utfGridCreateLayer = function(params) { + var utfGridCreateLayer = function utfGridCreateLayer(params) { if (!Helpers.UTFGridPlugin.isLoaded()) { $log.error('[AngularJS - Leaflet] The UTFGrid plugin is not loaded.'); return; } var utfgrid = new L.UtfGrid(params.url, params.pluginOptions); - utfgrid.on('mouseover', function(e) { + utfgrid.on('mouseover', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseover', e); }); - utfgrid.on('mouseout', function(e) { + utfgrid.on('mouseout', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseout', e); }); - utfgrid.on('click', function(e) { + utfgrid.on('click', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridClick', e); }); - utfgrid.on('mousemove', function(e) { + utfgrid.on('mousemove', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridMousemove', e); }); @@ -1488,26 +1468,24 @@ angular.module('ui-leaflet') var layerTypes = { xyz: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer(params.url, params.options); } }, mapbox: { mustHaveKey: true, - createLayer: function(params) { + createLayer: function createLayer(params) { var version = 3; - if(isDefined(params.options.version) && params.options.version === 4) { + if (isDefined(params.options.version) && params.options.version === 4) { version = params.options.version; } - var url = version === 3? - '//{s}.tiles.mapbox.com/v3/' + params.key + '/{z}/{x}/{y}.png': - '//api.tiles.mapbox.com/v4/' + params.key + '/{z}/{x}/{y}.png?access_token=' + params.apiKey; + var url = version === 3 ? '//{s}.tiles.mapbox.com/v3/' + params.key + '/{z}/{x}/{y}.png' : '//api.tiles.mapbox.com/v4/' + params.key + '/{z}/{x}/{y}.png?access_token=' + params.apiKey; return L.tileLayer(url, params.options); } }, geoJSON: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.GeoJSONPlugin.isLoaded()) { return; } @@ -1516,27 +1494,26 @@ angular.module('ui-leaflet') }, geoJSONShape: { mustHaveUrl: false, - createLayer: function(params) { - return new L.GeoJSON(params.data, - params.options); + createLayer: function createLayer(params) { + return new L.GeoJSON(params.data, params.options); } }, geoJSONAwesomeMarker: { mustHaveUrl: false, - createLayer: function(params) { - return new L.geoJson(params.data, { - pointToLayer: function (feature, latlng) { - return L.marker(latlng, {icon: L.AwesomeMarkers.icon(params.icon)}); + createLayer: function createLayer(params) { + return new L.geoJson(params.data, { + pointToLayer: function pointToLayer(feature, latlng) { + return L.marker(latlng, { icon: L.AwesomeMarkers.icon(params.icon) }); } }); } }, geoJSONVectorMarker: { mustHaveUrl: false, - createLayer: function(params) { - return new L.geoJson(params.data, { - pointToLayer: function (feature, latlng) { - return L.marker(latlng, {icon: L.VectorMarkers.icon(params.icon)}); + createLayer: function createLayer(params) { + return new L.geoJson(params.data, { + pointToLayer: function pointToLayer(feature, latlng) { + return L.marker(latlng, { icon: L.VectorMarkers.icon(params.icon) }); } }); } @@ -1547,23 +1524,23 @@ angular.module('ui-leaflet') }, cartodbTiles: { mustHaveKey: true, - createLayer: function(params) { + createLayer: function createLayer(params) { var url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png'; return L.tileLayer(url, params.options); } }, cartodbUTFGrid: { mustHaveKey: true, - mustHaveLayer : true, - createLayer: function(params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json'; return utfGridCreateLayer(params); } }, cartodbInteractive: { mustHaveKey: true, - mustHaveLayer : true, - createLayer: function(params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { var tilesURL = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png'; var tileLayer = L.tileLayer(tilesURL, params.options); params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json'; @@ -1573,25 +1550,25 @@ angular.module('ui-leaflet') }, wms: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer.wms(params.url, params.options); } }, wmts: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer.wmts(params.url, params.options); } }, wfs: { mustHaveUrl: true, - mustHaveLayer : true, - createLayer: function(params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { if (!Helpers.WFSLayerPlugin.isLoaded()) { return; } var options = angular.copy(params.options); - if(options.crs && 'string' === typeof options.crs) { + if (options.crs && 'string' === typeof options.crs) { /*jshint -W061 */ options.crs = eval(options.crs); } @@ -1600,17 +1577,17 @@ angular.module('ui-leaflet') }, group: { mustHaveUrl: false, - createLayer: function (params) { + createLayer: function createLayer(params) { var lyrs = []; - $it.each(params.options.layers, function(l){ - lyrs.push(createLayer(l)); + $it.each(params.options.layers, function (l) { + lyrs.push(_createLayer(l)); }); - params.options.loadedDefer = function() { + params.options.loadedDefer = function () { var defers = []; - if(isDefined(params.options.layers)) { + if (isDefined(params.options.layers)) { for (var i = 0; i < params.options.layers.length; i++) { var d = params.options.layers[i].layerOptions.loadedDefer; - if(isDefined(d)) { + if (isDefined(d)) { defers.push(d); } } @@ -1622,13 +1599,13 @@ angular.module('ui-leaflet') }, featureGroup: { mustHaveUrl: false, - createLayer: function () { + createLayer: function createLayer() { return L.featureGroup(); } }, google: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { var type = params.type || 'SATELLITE'; if (!Helpers.GoogleLayerPlugin.isLoaded()) { return; @@ -1638,27 +1615,27 @@ angular.module('ui-leaflet') }, here: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { var provider = params.provider || 'HERE.terrainDay'; if (!Helpers.LeafletProviderPlugin.isLoaded()) { return; } return new L.TileLayer.Provider(provider, params.options); } - }, - china:{ - mustHaveUrl:false, - createLayer:function(params){ + }, + china: { + mustHaveUrl: false, + createLayer: function createLayer(params) { var type = params.type || ''; - if(!Helpers.ChinaLayerPlugin.isLoaded()){ + if (!Helpers.ChinaLayerPlugin.isLoaded()) { return; } return L.tileLayer.chinaProvider(type, params.options); } }, agsBase: { - mustHaveLayer : true, - createLayer: function (params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { if (!Helpers.AGSBaseLayerPlugin.isLoaded()) { return; } @@ -1667,7 +1644,7 @@ angular.module('ui-leaflet') }, ags: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSLayerPlugin.isLoaded()) { return; } @@ -1677,10 +1654,10 @@ angular.module('ui-leaflet') url: params.url }); var layer = new lvector.AGS(options); - layer.onAdd = function(map) { + layer.onAdd = function (map) { this.setMap(map); }; - layer.onRemove = function() { + layer.onRemove = function () { this.setMap(null); }; return layer; @@ -1688,7 +1665,7 @@ angular.module('ui-leaflet') }, agsFeature: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSFeatureLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; @@ -1697,12 +1674,12 @@ angular.module('ui-leaflet') params.options.url = params.url; var layer = L.esri.featureLayer(params.options); - var load = function() { - if(isDefined(params.options.loadedDefer)) { + var load = function load() { + if (isDefined(params.options.loadedDefer)) { params.options.loadedDefer.resolve(); } }; - layer.on('loading', function() { + layer.on('loading', function () { params.options.loadedDefer = $q.defer(); layer.off('load', load); layer.on('load', load); @@ -1713,7 +1690,7 @@ angular.module('ui-leaflet') }, agsTiled: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSTiledMapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; @@ -1726,7 +1703,7 @@ angular.module('ui-leaflet') }, agsDynamic: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSDynamicMapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; @@ -1739,25 +1716,25 @@ angular.module('ui-leaflet') }, agsImage: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSImageMapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; } - params.options.url = params.url; + params.options.url = params.url; return L.esri.imageMapLayer(params.options); } }, agsClustered: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSClusteredLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri clustered layer plugin is not loaded.'); return; } - if(!Helpers.MarkerClusterPlugin.isLoaded()) { + if (!Helpers.MarkerClusterPlugin.isLoaded()) { $log.warn(errorHeader + ' The markercluster plugin is not loaded.'); return; } @@ -1766,13 +1743,13 @@ angular.module('ui-leaflet') }, agsHeatmap: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSHeatmapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri heatmap layer plugin is not loaded.'); return; } - if(!Helpers.HeatLayerPlugin.isLoaded()) { + if (!Helpers.HeatLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The heatlayer plugin is not loaded.'); return; } @@ -1781,7 +1758,7 @@ angular.module('ui-leaflet') }, markercluster: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.MarkerClusterPlugin.isLoaded()) { $log.warn(errorHeader + ' The markercluster plugin is not loaded.'); return; @@ -1791,7 +1768,7 @@ angular.module('ui-leaflet') }, bing: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.BingLayerPlugin.isLoaded()) { return; } @@ -1801,7 +1778,7 @@ angular.module('ui-leaflet') webGLHeatmap: { mustHaveUrl: false, mustHaveData: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.WebGLHeatMapLayerPlugin.isLoaded()) { return; } @@ -1816,7 +1793,7 @@ angular.module('ui-leaflet') heat: { mustHaveUrl: false, mustHaveData: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.HeatLayerPlugin.isLoaded()) { return; } @@ -1835,7 +1812,7 @@ angular.module('ui-leaflet') }, yandex: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { var type = params.type || 'map'; if (!Helpers.YandexLayerPlugin.isLoaded()) { return; @@ -1845,14 +1822,14 @@ angular.module('ui-leaflet') }, imageOverlay: { mustHaveUrl: true, - mustHaveBounds : true, - createLayer: function(params) { + mustHaveBounds: true, + createLayer: function createLayer(params) { return L.imageOverlay(params.url, params.bounds, params.options); } }, iip: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer.iip(params.url, params.options); } }, @@ -1862,18 +1839,17 @@ angular.module('ui-leaflet') // so we let user to define their own layer outside the directive, // and pass it on "createLayer" result for next processes custom: { - createLayer: function (params) { + createLayer: function createLayer(params) { if (params.layer instanceof L.Class) { return angular.copy(params.layer); - } - else { + } else { $log.error('[AngularJS - Leaflet] A custom layer must be a leaflet Class'); } } }, cartodb: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return cartodb.createLayer(params.map, params.url); } } @@ -1902,24 +1878,24 @@ angular.module('ui-leaflet') return false; } - if(layerTypes[layerDefinition.type].mustHaveLayer && !isDefined(layerDefinition.layer)) { + if (layerTypes[layerDefinition.type].mustHaveLayer && !isDefined(layerDefinition.layer)) { $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have an layer defined'); return false; } if (layerTypes[layerDefinition.type].mustHaveBounds && !isDefined(layerDefinition.bounds)) { $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have bounds defined'); - return false ; + return false; } if (layerTypes[layerDefinition.type].mustHaveKey && !isDefined(layerDefinition.key)) { $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have key defined'); - return false ; + return false; } return true; } - function createLayer(layerDefinition) { + function _createLayer(layerDefinition) { if (!isValidLayerType(layerDefinition)) { return; } @@ -1968,27 +1944,27 @@ angular.module('ui-leaflet') } function safeRemoveLayer(map, layer, layerOptions) { - if(isDefined(layerOptions) && isDefined(layerOptions.loadedDefer)) { - if(angular.isFunction(layerOptions.loadedDefer)) { + if (isDefined(layerOptions) && isDefined(layerOptions.loadedDefer)) { + if (angular.isFunction(layerOptions.loadedDefer)) { var defers = layerOptions.loadedDefer(); $log.debug('Loaded Deferred', defers); var count = defers.length; - if(count > 0) { - var resolve = function() { + if (count > 0) { + var resolve = function resolve() { count--; - if(count === 0) { + if (count === 0) { map.removeLayer(layer); } }; - for(var i = 0; i < defers.length; i++) { + for (var i = 0; i < defers.length; i++) { defers[i].promise.then(resolve); } } else { map.removeLayer(layer); } } else { - layerOptions.loadedDefer.promise.then(function() { + layerOptions.loadedDefer.promise.then(function () { map.removeLayer(layer); }); } @@ -1998,26 +1974,28 @@ angular.module('ui-leaflet') } return { - createLayer: createLayer, + createLayer: _createLayer, safeAddLayer: safeAddLayer, safeRemoveLayer: safeRemoveLayer }; }]); +'use strict'; + angular.module("ui-leaflet").factory('leafletLegendHelpers', ["$http", "$q", "$log", "leafletHelpers", function ($http, $q, $log, leafletHelpers) { var requestQueue = {}, - isDefined = leafletHelpers.isDefined; + isDefined = leafletHelpers.isDefined; - var _execNext = function(mapId) { + var _execNext = function _execNext(mapId) { var queue = requestQueue[mapId]; var task = queue[0]; - $http(task.c).then(function(data) { + $http(task.c).then(function (data) { queue.shift(); task.d.resolve(data); if (queue.length > 0) { _execNext(mapId); } - }, function(err) { + }, function (err) { queue.shift(); task.d.reject(err); if (queue.length > 0) { @@ -2026,31 +2004,28 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', ["$http", "$q", "$l }); }; - var _updateLegend = function(div, legendData, type, url) { + var _updateLegend = function _updateLegend(div, legendData, type, url) { div.innerHTML = ''; - if(legendData.error) { + if (legendData.error) { div.innerHTML += '
' + legendData.error.message + '
'; } else { if (type === 'arcgis') { for (var i = 0; i < legendData.layers.length; i++) { var layer = legendData.layers[i]; div.innerHTML += '
' + layer.layerName + '
'; - for(var j = 0; j < layer.legend.length; j++) { + for (var j = 0; j < layer.legend.length; j++) { var leg = layer.legend[j]; - div.innerHTML += - '
' + - '
' + leg.label + '
'; + div.innerHTML += '
' + '
' + leg.label + '
'; } } - } - else if (type === 'image') { + } else if (type === 'image') { div.innerHTML = ''; } } }; - var _getOnAddLegend = function(legendData, legendClass, type, url) { - return function(/*map*/) { + var _getOnAddLegend = function _getOnAddLegend(legendData, legendClass, type, url) { + return function () /*map*/{ var div = L.DomUtil.create('div', legendClass); if (!L.Browser.touch) { @@ -2064,21 +2039,19 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', ["$http", "$q", "$l }; }; - var _getOnAddArrayLegend = function(legend, legendClass) { - return function(/*map*/) { + var _getOnAddArrayLegend = function _getOnAddArrayLegend(legend, legendClass) { + return function () /*map*/{ var div = L.DomUtil.create('div', legendClass); - for (var i = 0; i < legend.colors.length; i++) { - div.innerHTML += - '
' + - '
' + legend.labels[i] + '
'; - } - if (!L.Browser.touch) { + for (var i = 0; i < legend.colors.length; i++) { + div.innerHTML += '
' + '
' + legend.labels[i] + '
'; + } + if (!L.Browser.touch) { L.DomEvent.disableClickPropagation(div); L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation); } else { L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation); } - return div; + return div; }; }; @@ -2086,12 +2059,12 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', ["$http", "$q", "$l getOnAddLegend: _getOnAddLegend, getOnAddArrayLegend: _getOnAddArrayLegend, updateLegend: _updateLegend, - addLegendURL: function(mapId, config) { + addLegendURL: function addLegendURL(mapId, config) { var d = $q.defer(); - if(!isDefined(requestQueue[mapId])) { + if (!isDefined(requestQueue[mapId])) { requestQueue[mapId] = []; } - requestQueue[mapId].push({c:config,d:d}); + requestQueue[mapId].push({ c: config, d: d }); if (requestQueue[mapId].length === 1) { _execNext(mapId); } @@ -2100,6 +2073,8 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', ["$http", "$q", "$l }; }]); +'use strict'; + angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelpers", function ($q, leafletHelpers) { function _getDefaults() { return { @@ -2138,7 +2113,8 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelper lat: 0, lng: 0, zoom: 1 - } + }, + trackResize: true }; } @@ -2149,15 +2125,15 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelper // Get the _defaults dictionary, and override the properties defined by the user return { - reset: function () { - defaults = {}; + reset: function reset() { + defaults = {}; }, - getDefaults: function (scopeId) { + getDefaults: function getDefaults(scopeId) { var mapId = obtainEffectiveMapId(defaults, scopeId); return defaults[mapId]; }, - getMapCreationDefaults: function (scopeId) { + getMapCreationDefaults: function getMapCreationDefaults(scopeId) { var mapId = obtainEffectiveMapId(defaults, scopeId); var d = defaults[mapId]; @@ -2172,7 +2148,8 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelper touchZoom: d.touchZoom, attributionControl: d.attributionControl, worldCopyJump: d.worldCopyJump, - crs: d.crs + crs: d.crs, + trackResize: d.trackResize }; if (isDefined(d.minZoom)) { @@ -2200,7 +2177,7 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelper return mapDefaults; }, - setDefaults: function (userDefaults, scopeId) { + setDefaults: function setDefaults(userDefaults, scopeId) { var newDefaults = _getDefaults(); if (isDefined(userDefaults)) { @@ -2215,6 +2192,7 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelper newDefaults.zoomControlPosition = isDefined(userDefaults.zoomControlPosition) ? userDefaults.zoomControlPosition : newDefaults.zoomControlPosition; newDefaults.keyboard = isDefined(userDefaults.keyboard) ? userDefaults.keyboard : newDefaults.keyboard; newDefaults.dragging = isDefined(userDefaults.dragging) ? userDefaults.dragging : newDefaults.dragging; + newDefaults.trackResize = isDefined(userDefaults.trackResize) ? userDefaults.trackResize : newDefaults.trackResize; if (isDefined(userDefaults.controls)) { angular.extend(newDefaults.controls, userDefaults.controls); @@ -2274,6 +2252,8 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', ["$q", "leafletHelper }; }]); +'use strict'; + angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$timeout", "leafletHelpers", "leafletLogger", "$compile", "leafletGeoJsonHelpers", "leafletWatchHelpers", function ($rootScope, $timeout, leafletHelpers, leafletLogger, $compile, leafletGeoJsonHelpers, leafletWatchHelpers) { var isDefined = leafletHelpers.isDefined, defaultTo = leafletHelpers.defaultTo, @@ -2294,7 +2274,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t maybeWatch = leafletWatchHelpers.maybeWatch, $log = leafletLogger; - var _string = function (marker) { + var _string = function _string(marker) { //this exists since JSON.stringify barfs on cyclic var retStr = ''; ['_icon', '_latlng', '_leaflet_id', '_map', '_shadow'].forEach(function (prop) { @@ -2302,12 +2282,12 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t }); return '[leafletMarker] : \n' + retStr; }; - var _log = function (marker, useConsole) { + var _log = function _log(marker, useConsole) { var logger = useConsole ? console : $log; logger.debug(_string(marker)); }; - var createLeafletIcon = function (iconData) { + var createLeafletIcon = function createLeafletIcon(iconData) { if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'awesomeMarker') { if (!AwesomeMarkersPlugin.isLoaded()) { $log.error(errorHeader + ' The AwesomeMarkers Plugin is not loaded.'); @@ -2376,17 +2356,17 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t return new L.Icon(iconData); }; - var _resetMarkerGroup = function (groupName) { + var _resetMarkerGroup = function _resetMarkerGroup(groupName) { if (isDefined(groups[groupName])) { groups.splice(groupName, 1); } }; - var _resetMarkerGroups = function () { + var _resetMarkerGroups = function _resetMarkerGroups() { groups = {}; }; - var _deleteMarker = function (marker, map, layers) { + var _deleteMarker = function _deleteMarker(marker, map, layers) { marker.closePopup(); // There is no easy way to know if a marker is added to a layer, so we search for it // if there are overlays @@ -2414,7 +2394,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t } }; - var adjustPopupPan = function(marker, map) { + var adjustPopupPan = function adjustPopupPan(marker, map) { var containerHeight = marker._popup._container.offsetHeight, layerPos = new L.Point(marker._popup._containerLeft, -containerHeight - marker._popup._containerBottom), containerPos = map.layerPointToContainerPoint(layerPos); @@ -2423,11 +2403,11 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t } }; - var compilePopup = function(marker, markerScope) { + var compilePopup = function compilePopup(marker, markerScope) { $compile(marker._popup._contentNode)(markerScope); }; - var updatePopup = function (marker, markerScope, map) { + var updatePopup = function updatePopup(marker, markerScope, map) { //The innerText should be more than 1 once angular has compiled. //We need to keep trying until angular has compiled before we _updateLayout and _updatePosition //This should take care of any scenario , eg ngincludes, whatever. @@ -2453,7 +2433,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t return reflow; }; - var _manageOpenPopup = function (marker, markerData, map) { + var _manageOpenPopup = function _manageOpenPopup(marker, markerData, map) { // The marker may provide a scope returning function used to compile the message // default to $rootScope otherwise var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope, @@ -2470,8 +2450,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t } }; - - var _manageOpenLabel = function (marker, markerData) { + var _manageOpenLabel = function _manageOpenLabel(marker, markerData) { var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope, labelScope = angular.isFunction(markerData.getLabelScope) ? markerData.getLabelScope() : markerScope, compileMessage = isDefined(markerData.compileMessage) ? markerData.compileMessage : true; @@ -2486,243 +2465,239 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t } }; - var _updateMarker = function (markerData, oldMarkerData, marker, name, leafletScope, layers, map) { - if (!isDefined(oldMarkerData)) { - return; - } - - // Update the lat-lng property (always present in marker properties) - if (!geoHlp.validateCoords(markerData)) { - $log.warn('There are problems with lat-lng data, please verify your marker model'); - _deleteMarker(marker, map, layers); - return; - } - - // watch is being initialized if old and new object is the same - var isInitializing = markerData === oldMarkerData; + var _updateMarker = function _updateMarker(markerData, oldMarkerData, marker, name, leafletScope, layers, map) { + if (!isDefined(oldMarkerData)) { + return; + } - // Update marker rotation - if (isDefined(markerData.iconAngle) && oldMarkerData.iconAngle !== markerData.iconAngle) { - marker.setIconAngle(markerData.iconAngle); - } + // Update the lat-lng property (always present in marker properties) + if (!geoHlp.validateCoords(markerData)) { + $log.warn('There are problems with lat-lng data, please verify your marker model'); + _deleteMarker(marker, map, layers); + return; + } - // It is possible that the layer has been removed or the layer marker does not exist - // Update the layer group if present or move it to the map if not - if (!isString(markerData.layer)) { - // There is no layer information, we move the marker to the map if it was in a layer group - if (isString(oldMarkerData.layer)) { - // Remove from the layer group that is supposed to be - if (isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { - layers.overlays[oldMarkerData.layer].removeLayer(marker); - marker.closePopup(); - } - // Test if it is not on the map and add it - if (!map.hasLayer(marker)) { - map.addLayer(marker); - } - } - } + // watch is being initialized if old and new object is the same + var isInitializing = markerData === oldMarkerData; - if ((isNumber(markerData.opacity) || isNumber(parseFloat(markerData.opacity))) && markerData.opacity !== oldMarkerData.opacity) { - // There was a different opacity so we update it - marker.setOpacity(markerData.opacity); - } + // Update marker rotation + if (isDefined(markerData.iconAngle) && oldMarkerData.iconAngle !== markerData.iconAngle) { + marker.setIconAngle(markerData.iconAngle); + } - if (isString(markerData.layer) && oldMarkerData.layer !== markerData.layer) { - // If it was on a layer group we have to remove it - if (isString(oldMarkerData.layer) && isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { + // It is possible that the layer has been removed or the layer marker does not exist + // Update the layer group if present or move it to the map if not + if (!isString(markerData.layer)) { + // There is no layer information, we move the marker to the map if it was in a layer group + if (isString(oldMarkerData.layer)) { + // Remove from the layer group that is supposed to be + if (isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { layers.overlays[oldMarkerData.layer].removeLayer(marker); + marker.closePopup(); } - marker.closePopup(); - - // Remove it from the map in case the new layer is hidden or there is an error in the new layer - if (map.hasLayer(marker)) { - map.removeLayer(marker); - } - - // The markerData.layer is defined so we add the marker to the layer if it is different from the old data - if (!isDefined(layers.overlays[markerData.layer])) { - $log.error(errorHeader + 'You must use a name of an existing layer'); - return; - } - // Is a group layer? - var layerGroup = layers.overlays[markerData.layer]; - if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) { - $log.error(errorHeader + 'A marker can only be added to a layer of type "group" or "featureGroup"'); - return; - } - // The marker goes to a correct layer group, so first of all we add it - layerGroup.addLayer(marker); - // The marker is automatically added to the map depending on the visibility - // of the layer, so we only have to open the popup if the marker is in the map - if (map.hasLayer(marker) && markerData.focus === true) { - marker.openPopup(); + // Test if it is not on the map and add it + if (!map.hasLayer(marker)) { + map.addLayer(marker); } } + } + + if ((isNumber(markerData.opacity) || isNumber(parseFloat(markerData.opacity))) && markerData.opacity !== oldMarkerData.opacity) { + // There was a different opacity so we update it + marker.setOpacity(markerData.opacity); + } - // Update the draggable property - if (markerData.draggable !== true && oldMarkerData.draggable === true && (isDefined(marker.dragging))) { - marker.dragging.disable(); + if (isString(markerData.layer) && oldMarkerData.layer !== markerData.layer) { + // If it was on a layer group we have to remove it + if (isString(oldMarkerData.layer) && isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { + layers.overlays[oldMarkerData.layer].removeLayer(marker); } + marker.closePopup(); - if (markerData.draggable === true && oldMarkerData.draggable !== true) { - // The markerData.draggable property must be true so we update if there wasn't a previous value or it wasn't true - if (marker.dragging) { - marker.dragging.enable(); - } else { - if (L.Handler.MarkerDrag) { - marker.dragging = new L.Handler.MarkerDrag(marker); - marker.options.draggable = true; - marker.dragging.enable(); - } - } + // Remove it from the map in case the new layer is hidden or there is an error in the new layer + if (map.hasLayer(marker)) { + map.removeLayer(marker); } - // Update the icon property - if (!isObject(markerData.icon)) { - // If there is no icon property or it's not an object - if (isObject(oldMarkerData.icon)) { - // If there was an icon before restore to the default - marker.setIcon(createLeafletIcon()); - marker.closePopup(); - marker.unbindPopup(); - if (isString(markerData.message)) { - marker.bindPopup(markerData.message, markerData.popupOptions); - } - } + // The markerData.layer is defined so we add the marker to the layer if it is different from the old data + if (!isDefined(layers.overlays[markerData.layer])) { + $log.error(errorHeader + 'You must use a name of an existing layer'); + return; + } + // Is a group layer? + var layerGroup = layers.overlays[markerData.layer]; + if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) { + $log.error(errorHeader + 'A marker can only be added to a layer of type "group" or "featureGroup"'); + return; + } + // The marker goes to a correct layer group, so first of all we add it + layerGroup.addLayer(marker); + // The marker is automatically added to the map depending on the visibility + // of the layer, so we only have to open the popup if the marker is in the map + if (map.hasLayer(marker) && markerData.focus === true) { + marker.openPopup(); } + } - if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { - var dragG = false; - if (marker.dragging) { - dragG = marker.dragging.enabled(); - } - marker.setIcon(createLeafletIcon(markerData.icon)); - if (dragG) { + // Update the draggable property + if (markerData.draggable !== true && oldMarkerData.draggable === true && isDefined(marker.dragging)) { + marker.dragging.disable(); + } + + if (markerData.draggable === true && oldMarkerData.draggable !== true) { + // The markerData.draggable property must be true so we update if there wasn't a previous value or it wasn't true + if (marker.dragging) { + marker.dragging.enable(); + } else { + if (L.Handler.MarkerDrag) { + marker.dragging = new L.Handler.MarkerDrag(marker); + marker.options.draggable = true; marker.dragging.enable(); } + } + } + + // Update the icon property + if (!isObject(markerData.icon)) { + // If there is no icon property or it's not an object + if (isObject(oldMarkerData.icon)) { + // If there was an icon before restore to the default + marker.setIcon(createLeafletIcon()); marker.closePopup(); marker.unbindPopup(); if (isString(markerData.message)) { marker.bindPopup(markerData.message, markerData.popupOptions); - // if marker has been already focused, reopen popup - if (map.hasLayer(marker) && markerData.focus === true) { - marker.openPopup(); - } } } + } - // Update the Popup message property - if (!isString(markerData.message) && isString(oldMarkerData.message)) { - marker.closePopup(); - marker.unbindPopup(); + if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { + var dragG = false; + if (marker.dragging) { + dragG = marker.dragging.enabled(); } - - // Update the label content or bind a new label if the old one has been removed. - if (Helpers.LabelPlugin.isLoaded()) { - if (isDefined(markerData.label) && isDefined(markerData.label.message)) { - if ('label' in oldMarkerData && 'message' in oldMarkerData.label && !angular.equals(markerData.label.message, oldMarkerData.label.message)) { - marker.updateLabelContent(markerData.label.message); - } else if (!angular.isFunction(marker.getLabel) || angular.isFunction(marker.getLabel) && !isDefined(marker.getLabel())) { - marker.bindLabel(markerData.label.message, markerData.label.options); - _manageOpenLabel(marker, markerData); - } else { - _manageOpenLabel(marker, markerData); - } - } else if (!('label' in markerData && !('message' in markerData.label))) { - if (angular.isFunction(marker.unbindLabel)) { - marker.unbindLabel(); - } - } + marker.setIcon(createLeafletIcon(markerData.icon)); + if (dragG) { + marker.dragging.enable(); } - - // There is some text in the popup, so we must show the text or update existing - if (isString(markerData.message) && !isString(oldMarkerData.message)) { - // There was no message before so we create it + marker.closePopup(); + marker.unbindPopup(); + if (isString(markerData.message)) { marker.bindPopup(markerData.message, markerData.popupOptions); + // if marker has been already focused, reopen popup + if (map.hasLayer(marker) && markerData.focus === true) { + marker.openPopup(); + } } + } - if (isString(markerData.message) && isString(oldMarkerData.message) && markerData.message !== oldMarkerData.message) { - // There was a different previous message so we update it - marker.setPopupContent(markerData.message); - } - - // Update the focus property - var updatedFocus = false; - if (markerData.focus !== true && oldMarkerData.focus === true) { - // If there was a focus property and was true we turn it off - marker.closePopup(); - updatedFocus = true; - } + // Update the Popup message property + if (!isString(markerData.message) && isString(oldMarkerData.message)) { + marker.closePopup(); + marker.unbindPopup(); + } - // The markerData.focus property must be true so we update if there wasn't a previous value or it wasn't true - if (markerData.focus === true && ( !isDefined(oldMarkerData.focus) || oldMarkerData.focus === false) || (isInitializing && markerData.focus === true)) { - // Reopen the popup when focus is still true - marker.openPopup(); - updatedFocus = true; - } - - // zIndexOffset adjustment - if (oldMarkerData.zIndexOffset !== markerData.zIndexOffset) { - marker.setZIndexOffset(markerData.zIndexOffset); - } - - var markerLatLng = marker.getLatLng(); - var isCluster = (isString(markerData.layer) && Helpers.MarkerClusterPlugin.is(layers.overlays[markerData.layer])); - // If the marker is in a cluster it has to be removed and added to the layer when the location is changed - if (isCluster) { - // The focus has changed even by a user click or programatically - if (updatedFocus) { - // We only have to update the location if it was changed programatically, because it was - // changed by a user drag the marker data has already been updated by the internal event - // listened by the directive - if ((markerData.lat !== oldMarkerData.lat) || (markerData.lng !== oldMarkerData.lng)) { - layers.overlays[markerData.layer].removeLayer(marker); - marker.setLatLng([markerData.lat, markerData.lng]); - layers.overlays[markerData.layer].addLayer(marker); - } + // Update the label content or bind a new label if the old one has been removed. + if (Helpers.LabelPlugin.isLoaded()) { + if (isDefined(markerData.label) && isDefined(markerData.label.message)) { + if ('label' in oldMarkerData && 'message' in oldMarkerData.label && !angular.equals(markerData.label.message, oldMarkerData.label.message)) { + marker.updateLabelContent(markerData.label.message); + } else if (!angular.isFunction(marker.getLabel) || angular.isFunction(marker.getLabel) && !isDefined(marker.getLabel())) { + marker.bindLabel(markerData.label.message, markerData.label.options); + _manageOpenLabel(marker, markerData); } else { - // The marker has possibly moved. It can be moved by a user drag (marker location and data are equal but old - // data is diferent) or programatically (marker location and data are diferent) - if ((markerLatLng.lat !== markerData.lat) || (markerLatLng.lng !== markerData.lng)) { - // The marker was moved by a user drag - layers.overlays[markerData.layer].removeLayer(marker); - marker.setLatLng([markerData.lat, markerData.lng]); - layers.overlays[markerData.layer].addLayer(marker); - } else if ((markerData.lat !== oldMarkerData.lat) || (markerData.lng !== oldMarkerData.lng)) { - // The marker was moved programatically - layers.overlays[markerData.layer].removeLayer(marker); - marker.setLatLng([markerData.lat, markerData.lng]); - layers.overlays[markerData.layer].addLayer(marker); - } else if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { - layers.overlays[markerData.layer].removeLayer(marker); - layers.overlays[markerData.layer].addLayer(marker); - } + _manageOpenLabel(marker, markerData); + } + } else if (!('label' in markerData && !('message' in markerData.label))) { + if (angular.isFunction(marker.unbindLabel)) { + marker.unbindLabel(); } - } else if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) { - marker.setLatLng([markerData.lat, markerData.lng]); } - }; + } + + // There is some text in the popup, so we must show the text or update existing + if (isString(markerData.message) && !isString(oldMarkerData.message)) { + // There was no message before so we create it + marker.bindPopup(markerData.message, markerData.popupOptions); + } + + if (isString(markerData.message) && isString(oldMarkerData.message) && markerData.message !== oldMarkerData.message) { + // There was a different previous message so we update it + marker.setPopupContent(markerData.message); + } + + // Update the focus property + var updatedFocus = false; + if (markerData.focus !== true && oldMarkerData.focus === true) { + // If there was a focus property and was true we turn it off + marker.closePopup(); + updatedFocus = true; + } + + // The markerData.focus property must be true so we update if there wasn't a previous value or it wasn't true + if (markerData.focus === true && (!isDefined(oldMarkerData.focus) || oldMarkerData.focus === false) || isInitializing && markerData.focus === true) { + // Reopen the popup when focus is still true + marker.openPopup(); + updatedFocus = true; + } + + // zIndexOffset adjustment + if (oldMarkerData.zIndexOffset !== markerData.zIndexOffset) { + marker.setZIndexOffset(markerData.zIndexOffset); + } - var _getLayerModels = function (models, layerName){ - if (!isDefined(models)) - return; - if (layerName) - return models[layerName]; - return models; + var markerLatLng = marker.getLatLng(); + var isCluster = isString(markerData.layer) && Helpers.MarkerClusterPlugin.is(layers.overlays[markerData.layer]); + // If the marker is in a cluster it has to be removed and added to the layer when the location is changed + if (isCluster) { + // The focus has changed even by a user click or programatically + if (updatedFocus) { + // We only have to update the location if it was changed programatically, because it was + // changed by a user drag the marker data has already been updated by the internal event + // listened by the directive + if (markerData.lat !== oldMarkerData.lat || markerData.lng !== oldMarkerData.lng) { + layers.overlays[markerData.layer].removeLayer(marker); + marker.setLatLng([markerData.lat, markerData.lng]); + layers.overlays[markerData.layer].addLayer(marker); + } + } else { + // The marker has possibly moved. It can be moved by a user drag (marker location and data are equal but old + // data is diferent) or programatically (marker location and data are diferent) + if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) { + // The marker was moved by a user drag + layers.overlays[markerData.layer].removeLayer(marker); + marker.setLatLng([markerData.lat, markerData.lng]); + layers.overlays[markerData.layer].addLayer(marker); + } else if (markerData.lat !== oldMarkerData.lat || markerData.lng !== oldMarkerData.lng) { + // The marker was moved programatically + layers.overlays[markerData.layer].removeLayer(marker); + marker.setLatLng([markerData.lat, markerData.lng]); + layers.overlays[markerData.layer].addLayer(marker); + } else if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { + layers.overlays[markerData.layer].removeLayer(marker); + layers.overlays[markerData.layer].addLayer(marker); + } + } + } else if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) { + marker.setLatLng([markerData.lat, markerData.lng]); + } }; - var _getModelFromModels = function (models, id, layerName){ - if(!isDefined(models)) - return; - if(!id){ - $log.error(errorHeader + 'marker id missing in getMarker'); - return; - } - if(layerName) - return models[layerName][id]; + var _getLayerModels = function _getLayerModels(models, layerName) { + if (!isDefined(models)) return; + if (layerName) return models[layerName]; + return models; + }; + + var _getModelFromModels = function _getModelFromModels(models, id, layerName) { + if (!isDefined(models)) return; + if (!id) { + $log.error(errorHeader + 'marker id missing in getMarker'); + return; + } + if (layerName) return models[layerName][id]; - return models[id]; + return models[id]; }; return { resetMarkerGroup: _resetMarkerGroup, @@ -2735,7 +2710,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t manageOpenLabel: _manageOpenLabel, - createMarker: function (markerData) { + createMarker: function createMarker(markerData) { if (!isDefined(markerData) || !geoHlp.validateCoords(markerData)) { $log.error(errorHeader + 'The marker definition is not valid.'); return; @@ -2772,7 +2747,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t return marker; }, - addMarkerToGroup: function (marker, groupName, groupOptions, map) { + addMarkerToGroup: function addMarkerToGroup(marker, groupName, groupOptions, map) { if (!isString(groupName)) { $log.error(errorHeader + 'The marker group you have specified is invalid.'); return; @@ -2789,34 +2764,33 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t groups[groupName].addLayer(marker); }, - listenMarkerEvents: function (marker, markerData, leafletScope, watchType, map) { - marker.on("popupopen", function (/* event */) { + listenMarkerEvents: function listenMarkerEvents(marker, markerData, leafletScope, watchType, map) { + marker.on("popupopen", function () /* event */{ safeApply(leafletScope, function () { if (isDefined(marker._popup) || isDefined(marker._popup._contentNode)) { markerData.focus = true; - _manageOpenPopup(marker, markerData, map);//needed since markerData is now a copy + _manageOpenPopup(marker, markerData, map); //needed since markerData is now a copy } }); }); - marker.on("popupclose", function (/* event */) { + marker.on("popupclose", function () /* event */{ safeApply(leafletScope, function () { markerData.focus = false; }); }); - marker.on("add", function (/* event */) { + marker.on("add", function () /* event */{ safeApply(leafletScope, function () { - if ('label' in markerData) - _manageOpenLabel(marker, markerData); + if ('label' in markerData) _manageOpenLabel(marker, markerData); }); }); }, updateMarker: _updateMarker, - addMarkerWatcher: function (marker, name, leafletScope, layers, map, watchOptions) { + addMarkerWatcher: function addMarkerWatcher(marker, name, leafletScope, layers, map, watchOptions) { var markerWatchPath = Helpers.getObjectArrayPath("markers." + name); - maybeWatch(leafletScope, markerWatchPath, watchOptions, function(markerData, oldMarkerData, clearWatch){ + maybeWatch(leafletScope, markerWatchPath, watchOptions, function (markerData, oldMarkerData, clearWatch) { if (!isDefined(markerData)) { _deleteMarker(marker, map, layers); clearWatch(); @@ -2827,30 +2801,28 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', ["$rootScope", "$t }, string: _string, log: _log, - getModelFromModels : _getModelFromModels, - getLayerModels : _getLayerModels + getModelFromModels: _getModelFromModels, + getLayerModels: _getLayerModels }; }]); +'use strict'; + angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leafletLogger", "leafletHelpers", function ($rootScope, leafletLogger, leafletHelpers) { var isDefined = leafletHelpers.isDefined, isArray = leafletHelpers.isArray, isNumber = leafletHelpers.isNumber, isValidPoint = leafletHelpers.isValidPoint, $log = leafletLogger; - + var availableOptions = [ - // Path options - 'stroke', 'weight', 'color', 'opacity', - 'fill', 'fillColor', 'fillOpacity', - 'dashArray', 'lineCap', 'lineJoin', 'clickable', - 'pointerEvents', 'className', - - // Polyline options - 'smoothFactor', 'noClip' - ]; + // Path options + 'stroke', 'weight', 'color', 'opacity', 'fill', 'fillColor', 'fillOpacity', 'dashArray', 'lineCap', 'lineJoin', 'clickable', 'pointerEvents', 'className', + + // Polyline options + 'smoothFactor', 'noClip']; function _convertToLeafletLatLngs(latlngs) { - return latlngs.filter(function(latlng) { + return latlngs.filter(function (latlng) { return isValidPoint(latlng); }).map(function (latlng) { return _convertToLeafletLatLng(latlng); @@ -2866,7 +2838,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf } function _convertToLeafletMultiLatLngs(paths) { - return paths.map(function(latlngs) { + return paths.map(function (latlngs) { return _convertToLeafletLatLngs(latlngs); }); } @@ -2886,7 +2858,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf return options; } - var _updatePathOptions = function (path, data) { + var _updatePathOptions = function _updatePathOptions(path, data) { var updatedStyle = {}; for (var i = 0; i < availableOptions.length; i++) { var optionName = availableOptions[i]; @@ -2897,7 +2869,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf path.setStyle(data); }; - var _isValidPolyline = function(latlngs) { + var _isValidPolyline = function _isValidPolyline(latlngs) { if (!isArray(latlngs)) { return false; } @@ -2912,21 +2884,21 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf var pathTypes = { polyline: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; return _isValidPolyline(latlngs); }, - createPath: function(options) { + createPath: function createPath(options) { return new L.Polyline([], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } }, multiPolyline: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; if (!isArray(latlngs)) { return false; @@ -2941,31 +2913,31 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf return true; }, - createPath: function(options) { - return new L.multiPolyline([[[0,0],[1,1]]], options); + createPath: function createPath(options) { + return new L.multiPolyline([[[0, 0], [1, 1]]], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } - } , + }, polygon: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; return _isValidPolyline(latlngs); }, - createPath: function(options) { + createPath: function createPath(options) { return new L.Polygon([], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } }, multiPolygon: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; if (!isArray(latlngs)) { @@ -2981,17 +2953,17 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf return true; }, - createPath: function(options) { - return new L.MultiPolygon([[[0,0],[1,1],[0,1]]], options); + createPath: function createPath(options) { + return new L.MultiPolygon([[[0, 0], [1, 1], [0, 1]]], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } }, rectangle: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; if (!isArray(latlngs) || latlngs.length !== 2) { @@ -3007,23 +2979,23 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf return true; }, - createPath: function(options) { - return new L.Rectangle([[0,0],[1,1]], options); + createPath: function createPath(options) { + return new L.Rectangle([[0, 0], [1, 1]], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setBounds(new L.LatLngBounds(_convertToLeafletLatLngs(data.latlngs))); _updatePathOptions(path, data); } }, circle: { - isValid: function(pathData) { - var point= pathData.latlngs; + isValid: function isValid(pathData) { + var point = pathData.latlngs; return isValidPoint(point) && isNumber(pathData.radius); }, - createPath: function(options) { - return new L.Circle([0,0], 1, options); + createPath: function createPath(options) { + return new L.Circle([0, 0], 1, options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLng(_convertToLeafletLatLng(data.latlngs)); if (isDefined(data.radius)) { path.setRadius(data.radius); @@ -3032,14 +3004,14 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf } }, circleMarker: { - isValid: function(pathData) { - var point= pathData.latlngs; + isValid: function isValid(pathData) { + var point = pathData.latlngs; return isValidPoint(point) && isNumber(pathData.radius); }, - createPath: function(options) { - return new L.CircleMarker([0,0], options); + createPath: function createPath(options) { + return new L.CircleMarker([0, 0], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLng(_convertToLeafletLatLng(data.latlngs)); if (isDefined(data.radius)) { path.setRadius(data.radius); @@ -3049,7 +3021,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf } }; - var _getPathData = function(path) { + var _getPathData = function _getPathData(path) { var pathData = {}; if (path.latlngs) { pathData.latlngs = path.latlngs; @@ -3063,14 +3035,14 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf }; return { - setPathOptions: function(leafletPath, pathType, data) { - if(!isDefined(pathType)) { + setPathOptions: function setPathOptions(leafletPath, pathType, data) { + if (!isDefined(pathType)) { pathType = "polyline"; } pathTypes[pathType].setPath(leafletPath, data); }, - createPath: function(name, path, defaults) { - if(!isDefined(path.type)) { + createPath: function createPath(name, path, defaults) { + if (!isDefined(path.type)) { path.type = "polyline"; } var options = _getOptions(path, defaults); @@ -3086,60 +3058,62 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', ["$rootScope", "leaf }; }]); -angular.module('ui-leaflet') -.service('leafletWatchHelpers', function (){ +'use strict'; + +angular.module('ui-leaflet').service('leafletWatchHelpers', function () { - var _maybe = function(scope, watchFunctionName, thingToWatchStr, watchOptions, initCb){ - var unWatch = scope[watchFunctionName](thingToWatchStr, function(newValue, oldValue) { + var _maybe = function _maybe(scope, watchFunctionName, thingToWatchStr, watchOptions, initCb) { + var unWatch = scope[watchFunctionName](thingToWatchStr, function (newValue, oldValue) { //make the unWatch function available to the callback as well. initCb(newValue, oldValue, unWatch); - if(watchOptions.type === null) - unWatch(); + if (watchOptions.type === null) unWatch(); }, watchOptions.type === 'watchDeep'); return unWatch; }; - /* - @name: maybeWatch - @description: Utility to watch something once or forever. - @returns unWatch function - @param watchOptions - This object is used to determine the type of - watch used. - */ - var _maybeWatch = function(scope, thingToWatchStr, watchOptions, initCb){ - var watchMethod; - - if(watchOptions.type === 'watchCollection') { - watchMethod = '$watchCollection'; - } - else { - watchMethod = '$watch'; - } + /* + @name: maybeWatch + @description: Utility to watch something once or forever. + @returns unWatch function + @param watchOptions - This object is used to determine the type of + watch used. + */ + var _maybeWatch = function _maybeWatch(scope, thingToWatchStr, watchOptions, initCb) { + var watchMethod; + if (watchOptions.type === 'watchCollection') { + watchMethod = '$watchCollection'; + } else { + watchMethod = '$watch'; + } - return _maybe(scope, watchMethod, thingToWatchStr, watchOptions, initCb); - }; + return _maybe(scope, watchMethod, thingToWatchStr, watchOptions, initCb); + }; - return { - maybeWatch: _maybeWatch - }; + return { + maybeWatch: _maybeWatch + }; }); -angular.module('ui-leaflet').service('leafletLogger', ["nemSimpleLogger", function(nemSimpleLogger) { +'use strict'; + +angular.module('ui-leaflet').service('leafletLogger', ["nemSimpleLogger", function (nemSimpleLogger) { return nemSimpleLogger.spawn(); }]); +'use strict'; + angular.module('ui-leaflet').factory('nominatimService', ["$q", "$http", "leafletHelpers", "leafletMapDefaults", function ($q, $http, leafletHelpers, leafletMapDefaults) { var isDefined = leafletHelpers.isDefined; return { - query: function(address, mapId) { + query: function query(address, mapId) { var defaults = leafletMapDefaults.getDefaults(mapId); var url = defaults.nominatim.server; var df = $q.defer(); - $http.get(url, { params: { format: 'json', limit: 1, q: address } }).success(function(data) { + $http.get(url, { params: { format: 'json', limit: 1, q: address } }).success(function (data) { if (data.length > 0 && isDefined(data[0].boundingbox)) { df.resolve(data[0]); } else { @@ -3152,24 +3126,25 @@ angular.module('ui-leaflet').factory('nominatimService', ["$q", "$http", "leafle }; }]); +'use strict'; + angular.module('ui-leaflet').directive('bounds', ["leafletLogger", "$timeout", "$http", "leafletHelpers", "nominatimService", "leafletBoundsHelpers", function (leafletLogger, $timeout, $http, leafletHelpers, nominatimService, leafletBoundsHelpers) { var $log = leafletLogger; return { restrict: "A", scope: false, replace: false, - require: [ 'leaflet' ], + require: ['leaflet'], - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined; var createLeafletBounds = leafletBoundsHelpers.createLeafletBounds; var leafletScope = controller[0].getLeafletScope(); var mapController = controller[0]; var errorHeader = leafletHelpers.errorHeader + ' [Bounds] '; - var emptyBounds = function(bounds) { - return (bounds._southWest.lat === 0 && bounds._southWest.lng === 0 && - bounds._northEast.lat === 0 && bounds._northEast.lng === 0); + var emptyBounds = function emptyBounds(bounds) { + return bounds._southWest.lat === 0 && bounds._southWest.lng === 0 && bounds._northEast.lat === 0 && bounds._northEast.lng === 0; }; mapController.getMap().then(function (map) { @@ -3195,26 +3170,25 @@ angular.module('ui-leaflet').directive('bounds', ["leafletLogger", "$timeout", " if (!angular.equals(scope.bounds, newScopeBounds)) { scope.bounds = newScopeBounds; } - $timeout( function() { + $timeout(function () { scope.settingBoundsFromLeaflet = false; }); }); var lastNominatimQuery; leafletScope.$watch('bounds', function (bounds) { - if (scope.settingBoundsFromLeaflet) - return; + if (scope.settingBoundsFromLeaflet) return; if (isDefined(bounds.address) && bounds.address !== lastNominatimQuery) { scope.settingBoundsFromScope = true; - nominatimService.query(bounds.address, attrs.id).then(function(data) { + nominatimService.query(bounds.address, attrs.id).then(function (data) { var b = data.boundingbox; - var newBounds = [ [ b[0], b[2]], [ b[1], b[3]] ]; + var newBounds = [[b[0], b[2]], [b[1], b[3]]]; map.fitBounds(newBounds); - }, function(errMsg) { + }, function (errMsg) { $log.error(errorHeader + ' ' + errMsg + '.'); }); lastNominatimQuery = bounds.address; - $timeout( function() { + $timeout(function () { scope.settingBoundsFromScope = false; }); return; @@ -3224,7 +3198,7 @@ angular.module('ui-leaflet').directive('bounds', ["leafletLogger", "$timeout", " if (leafletBounds && !map.getBounds().equals(leafletBounds)) { scope.settingBoundsFromScope = true; map.fitBounds(leafletBounds, bounds.options); - $timeout( function() { + $timeout(function () { scope.settingBoundsFromScope = false; }); } @@ -3234,14 +3208,13 @@ angular.module('ui-leaflet').directive('bounds', ["leafletLogger", "$timeout", " }; }]); +'use strict'; + var centerDirectiveTypes = ['center', 'lfCenter'], centerDirectives = {}; -centerDirectiveTypes.forEach(function(directiveName) { - centerDirectives[directiveName] = ['leafletLogger', '$q', '$location', '$timeout', 'leafletMapDefaults', 'leafletHelpers', - 'leafletBoundsHelpers', 'leafletMapEvents', - function(leafletLogger, $q, $location, $timeout, leafletMapDefaults, leafletHelpers, - leafletBoundsHelpers, leafletMapEvents) { +centerDirectiveTypes.forEach(function (directiveName) { + centerDirectives[directiveName] = ['leafletLogger', '$q', '$location', '$timeout', 'leafletMapDefaults', 'leafletHelpers', 'leafletBoundsHelpers', 'leafletMapEvents', function (leafletLogger, $q, $location, $timeout, leafletMapDefaults, leafletHelpers, leafletBoundsHelpers, leafletMapEvents) { var isDefined = leafletHelpers.isDefined, isNumber = leafletHelpers.isNumber, @@ -3253,7 +3226,7 @@ centerDirectiveTypes.forEach(function(directiveName) { errorHeader = leafletHelpers.errorHeader, $log = leafletLogger; - var shouldInitializeMapWithBounds = function(bounds, center) { + var shouldInitializeMapWithBounds = function shouldInitializeMapWithBounds(bounds, center) { return isDefined(bounds) && isValidBounds(bounds) && isUndefinedOrEmpty(center); }; @@ -3263,17 +3236,17 @@ centerDirectiveTypes.forEach(function(directiveName) { scope: false, replace: false, require: 'leaflet', - controller: function() { + controller: function controller() { _leafletCenter = $q.defer(); - this.getCenter = function() { + this.getCenter = function () { return _leafletCenter.promise; }; }, - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var leafletScope = controller.getLeafletScope(), centerModel = leafletScope[directiveName]; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var defaults = leafletMapDefaults.getDefaults(attrs.id); if (attrs[directiveName].search("-") !== -1) { @@ -3283,7 +3256,7 @@ centerDirectiveTypes.forEach(function(directiveName) { } else if (shouldInitializeMapWithBounds(leafletScope.bounds, centerModel)) { map.fitBounds(leafletBoundsHelpers.createLeafletBounds(leafletScope.bounds), leafletScope.bounds.options); centerModel = map.getCenter(); - safeApply(leafletScope, function(scope) { + safeApply(leafletScope, function (scope) { angular.extend(scope[directiveName], { lat: map.getCenter().lat, lng: map.getCenter().lng, @@ -3291,7 +3264,7 @@ centerDirectiveTypes.forEach(function(directiveName) { autoDiscover: false }); }); - safeApply(leafletScope, function(scope) { + safeApply(leafletScope, function (scope) { var mapBounds = map.getBounds(); scope.bounds = { northEast: { @@ -3314,7 +3287,7 @@ centerDirectiveTypes.forEach(function(directiveName) { var urlCenterHash, mapReady; if (attrs.urlHashCenter === "yes") { - var extractCenterFromUrl = function() { + var extractCenterFromUrl = function extractCenterFromUrl() { var search = $location.search(); var centerParam; if (isDefined(search.c)) { @@ -3331,7 +3304,7 @@ centerDirectiveTypes.forEach(function(directiveName) { }; urlCenterHash = extractCenterFromUrl(); - leafletScope.$on('$locationChangeSuccess', function(event) { + leafletScope.$on('$locationChangeSuccess', function (event) { var scope = event.currentScope; //$log.debug("updated location..."); var urlCenter = extractCenterFromUrl(); @@ -3346,9 +3319,8 @@ centerDirectiveTypes.forEach(function(directiveName) { }); } - leafletScope.$watch(directiveName, function(center) { - if (leafletScope.settingCenterFromLeaflet) - return; + leafletScope.$watch(directiveName, function (center) { + if (leafletScope.settingCenterFromLeaflet) return; //$log.debug("updated center model..."); // The center from the URL has priority if (isDefined(urlCenterHash)) { @@ -3393,17 +3365,17 @@ centerDirectiveTypes.forEach(function(directiveName) { leafletScope.settingCenterFromScope = true; map.setView([center.lat, center.lng], center.zoom); leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map); - $timeout(function() { + $timeout(function () { leafletScope.settingCenterFromScope = false; //$log.debug("allow center scope updates"); }); }, true); - map.whenReady(function() { + map.whenReady(function () { mapReady = true; }); - map.on('moveend', function( /* event */ ) { + map.on('moveend', function () /* event */{ // Resolve the center after the first map position _leafletCenter.resolve(); leafletMapEvents.notifyCenterUrlHashChanged(leafletScope, map, attrs, $location.search()); @@ -3413,7 +3385,7 @@ centerDirectiveTypes.forEach(function(directiveName) { return; } leafletScope.settingCenterFromLeaflet = true; - safeApply(leafletScope, function(scope) { + safeApply(leafletScope, function (scope) { if (!leafletScope.settingCenterFromScope) { //$log.debug("updating center model...", map.getCenter(), map.getZoom()); angular.extend(scope[directiveName], { @@ -3424,14 +3396,14 @@ centerDirectiveTypes.forEach(function(directiveName) { }); } leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map); - $timeout(function() { + $timeout(function () { leafletScope.settingCenterFromLeaflet = false; }); }); }); if (centerModel.autoDiscover === true) { - map.on('locationerror', function() { + map.on('locationerror', function () { $log.warn(errorHeader + " The Geolocation API is unauthorized on this page."); if (isValidCenter(centerModel)) { map.setView([centerModel.lat, centerModel.lng], centerModel.zoom); @@ -3445,14 +3417,15 @@ centerDirectiveTypes.forEach(function(directiveName) { }); } }; - } - ]; + }]; }); -centerDirectiveTypes.forEach(function(dirType){ - angular.module('ui-leaflet').directive(dirType, centerDirectives[dirType]); +centerDirectiveTypes.forEach(function (dirType) { + angular.module('ui-leaflet').directive(dirType, centerDirectives[dirType]); }); +'use strict'; + angular.module('ui-leaflet').directive('controls', ["leafletLogger", "leafletHelpers", "leafletControlHelpers", function (leafletLogger, leafletHelpers, leafletControlHelpers) { var $log = leafletLogger; return { @@ -3461,22 +3434,22 @@ angular.module('ui-leaflet').directive('controls', ["leafletLogger", "leafletHel replace: false, require: '?^leaflet', - link: function(scope, element, attrs, controller) { - if(!controller) { + link: function link(scope, element, attrs, controller) { + if (!controller) { return; } var createControl = leafletControlHelpers.createControl; var isValidControlType = leafletControlHelpers.isValidControlType; - var leafletScope = controller.getLeafletScope(); + var leafletScope = controller.getLeafletScope(); var isDefined = leafletHelpers.isDefined; var isArray = leafletHelpers.isArray; var leafletControls = {}; var errorHeader = leafletHelpers.errorHeader + ' [Controls] '; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { - leafletScope.$watchCollection('controls', function(newControls) { + leafletScope.$watchCollection('controls', function (newControls) { // Delete controls from the array for (var name in leafletControls) { @@ -3516,15 +3489,15 @@ angular.module('ui-leaflet').directive('controls', ["leafletLogger", "leafletHel } } } - }); - }); } }; }]); -angular.module('ui-leaflet').directive("decorations", ["leafletLogger", "leafletHelpers", function(leafletLogger, leafletHelpers) { +"use strict"; + +angular.module('ui-leaflet').directive("decorations", ["leafletLogger", "leafletHelpers", function (leafletLogger, leafletHelpers) { var $log = leafletLogger; return { restrict: "A", @@ -3532,11 +3505,11 @@ angular.module('ui-leaflet').directive("decorations", ["leafletLogger", "leaflet replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var leafletScope = controller.getLeafletScope(), - PolylineDecoratorPlugin = leafletHelpers.PolylineDecoratorPlugin, - isDefined = leafletHelpers.isDefined, - leafletDecorations = {}; + PolylineDecoratorPlugin = leafletHelpers.PolylineDecoratorPlugin, + isDefined = leafletHelpers.isDefined, + leafletDecorations = {}; /* Creates an "empty" decoration with a set of coordinates, but no pattern. */ function createDecoration(options) { @@ -3560,8 +3533,8 @@ angular.module('ui-leaflet').directive("decorations", ["leafletLogger", "leaflet } } - controller.getMap().then(function(map) { - leafletScope.$watch("decorations", function(newDecorations) { + controller.getMap().then(function (map) { + leafletScope.$watch("decorations", function (newDecorations) { for (var name in leafletDecorations) { if (!isDefined(newDecorations[name]) || !angular.equals(newDecorations[name], leafletDecorations)) { map.removeLayer(leafletDecorations[name]); @@ -3571,7 +3544,7 @@ angular.module('ui-leaflet').directive("decorations", ["leafletLogger", "leaflet for (var newName in newDecorations) { var decorationData = newDecorations[newName], - newDecoration = createDecoration(decorationData); + newDecoration = createDecoration(decorationData); if (isDefined(newDecoration)) { leafletDecorations[newName] = newDecoration; @@ -3585,6 +3558,8 @@ angular.module('ui-leaflet').directive("decorations", ["leafletLogger", "leaflet }; }]); +'use strict'; + angular.module('ui-leaflet').directive('eventBroadcast', ["leafletLogger", "$rootScope", "leafletHelpers", "leafletMapEvents", "leafletIterators", function (leafletLogger, $rootScope, leafletHelpers, leafletMapEvents, leafletIterators) { var $log = leafletLogger; return { @@ -3593,15 +3568,15 @@ angular.module('ui-leaflet').directive('eventBroadcast', ["leafletLogger", "$roo replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isObject = leafletHelpers.isObject, isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), eventBroadcast = leafletScope.eventBroadcast, availableMapEvents = leafletMapEvents.getAvailableMapEvents(), addEvents = leafletMapEvents.addEvents; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var mapEvents = [], logic = "broadcast"; @@ -3627,14 +3602,13 @@ angular.module('ui-leaflet').directive('eventBroadcast', ["leafletLogger", "$roo $log.warn("[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model."); } else { // Enable events - leafletIterators.each(eventBroadcast.map.enable, function(eventName) { + leafletIterators.each(eventBroadcast.map.enable, function (eventName) { // Do we have already the event enabled? if (mapEvents.indexOf(eventName) === -1 && availableMapEvents.indexOf(eventName) !== -1) { mapEvents.push(eventName); } }); } - } // as long as the map is removed in the root leaflet directive we // do not need ot clean up the events as leaflet does it itself @@ -3644,15 +3618,15 @@ angular.module('ui-leaflet').directive('eventBroadcast', ["leafletLogger", "$roo }; }]); -angular.module('ui-leaflet') -.directive('geojson', ["leafletLogger", "$rootScope", "leafletData", "leafletHelpers", "leafletWatchHelpers", "leafletDirectiveControlsHelpers", "leafletIterators", "leafletGeoJsonEvents", function (leafletLogger, $rootScope, leafletData, leafletHelpers, - leafletWatchHelpers, leafletDirectiveControlsHelpers,leafletIterators, leafletGeoJsonEvents) { +'use strict'; + +angular.module('ui-leaflet').directive('geojson', ["leafletLogger", "$rootScope", "leafletData", "leafletHelpers", "leafletWatchHelpers", "leafletDirectiveControlsHelpers", "leafletIterators", "leafletGeoJsonEvents", function (leafletLogger, $rootScope, leafletData, leafletHelpers, leafletWatchHelpers, leafletDirectiveControlsHelpers, leafletIterators, leafletGeoJsonEvents) { var _maybeWatch = leafletWatchHelpers.maybeWatch, _defaultWatchOptions = leafletHelpers.watchOptions, _extendDirectiveControls = leafletDirectiveControlsHelpers.extend, hlp = leafletHelpers, $it = leafletIterators; - // $log = leafletLogger; + // $log = leafletLogger; return { restrict: "A", @@ -3660,54 +3634,49 @@ angular.module('ui-leaflet') replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), leafletGeoJSON = {}, _hasSetLeafletData = false; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var watchOptions; - if(leafletScope.watchOptions && leafletScope.watchOptions.geojson) { + if (leafletScope.watchOptions && leafletScope.watchOptions.geojson) { watchOptions = leafletScope.watchOptions.geojson; - } - else { + } else { watchOptions = _defaultWatchOptions; - } + } - var _hookUpEvents = function(geojson, maybeName){ + var _hookUpEvents = function _hookUpEvents(geojson, maybeName) { var onEachFeature; if (angular.isFunction(geojson.onEachFeature)) { onEachFeature = geojson.onEachFeature; } else { - onEachFeature = function(feature, layer) { + onEachFeature = function (feature, layer) { if (leafletHelpers.LabelPlugin.isLoaded() && isDefined(feature.properties.description)) { layer.bindLabel(feature.properties.description); } - leafletGeoJsonEvents.bindEvents(attrs.id, layer, null, feature, - leafletScope, maybeName, - {resetStyleOnMouseout: geojson.resetStyleOnMouseout, - mapId: attrs.id}); + leafletGeoJsonEvents.bindEvents(attrs.id, layer, null, feature, leafletScope, maybeName, { resetStyleOnMouseout: geojson.resetStyleOnMouseout, + mapId: attrs.id }); }; } return onEachFeature; }; - var isNested = (hlp.isDefined(attrs.geojsonNested) && - hlp.isTruthy(attrs.geojsonNested)); + var isNested = hlp.isDefined(attrs.geojsonNested) && hlp.isTruthy(attrs.geojsonNested); - var _clean = function(){ - if(!leafletGeoJSON) - return; - var _remove = function(lObject) { + var _clean = function _clean() { + if (!leafletGeoJSON) return; + var _remove = function _remove(lObject) { if (isDefined(lObject) && map.hasLayer(lObject)) { map.removeLayer(lObject); } }; - if(isNested) { - $it.each(leafletGeoJSON, function(lObject) { + if (isNested) { + $it.each(leafletGeoJSON, function (lObject) { _remove(lObject); }); return; @@ -3715,7 +3684,7 @@ angular.module('ui-leaflet') _remove(leafletGeoJSON); }; - var _addGeojson = function(model, maybeName){ + var _addGeojson = function _addGeojson(model, maybeName) { var geojson = angular.copy(model); if (!(isDefined(geojson) && isDefined(geojson.data))) { return; @@ -3736,30 +3705,29 @@ angular.module('ui-leaflet') var lObject = L.geoJson(geojson.data, geojson.options); - if(maybeName && hlp.isString(maybeName)){ + if (maybeName && hlp.isString(maybeName)) { leafletGeoJSON[maybeName] = lObject; - } - else{ + } else { leafletGeoJSON = lObject; } lObject.addTo(map); - if(!_hasSetLeafletData){//only do this once and play with the same ref forever + if (!_hasSetLeafletData) { + //only do this once and play with the same ref forever _hasSetLeafletData = true; leafletData.setGeoJSON(leafletGeoJSON, attrs.id); } }; - var _create = function(model){ + var _create = function _create(model) { _clean(); - if(isNested) { - if(!model || !Object.keys(model).length) - return; - $it.each(model, function(m, name) { + if (isNested) { + if (!model || !Object.keys(model).length) return; + $it.each(model, function (m, name) { //name could be layerName and or groupName //for now it is not tied to a layer - _addGeojson(m,name); + _addGeojson(m, name); }); return; } @@ -3768,7 +3736,7 @@ angular.module('ui-leaflet') _extendDirectiveControls(attrs.id, 'geojson', _create, _clean); - _maybeWatch(leafletScope,'geojson', watchOptions, function(geojson){ + _maybeWatch(leafletScope, 'geojson', watchOptions, function (geojson) { _create(geojson); }); }); @@ -3776,6 +3744,8 @@ angular.module('ui-leaflet') }; }]); +'use strict'; + angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogger", "leafletData", "leafletHelpers", function ($filter, leafletLogger, leafletData, leafletHelpers) { var $log = leafletLogger; return { @@ -3791,27 +3761,27 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge replace: true, transclude: false, require: '^leaflet', - controller: ["$scope", "$element", "$sce", function ($scope, $element, $sce) { + controller: ["$scope", "$element", "$sce", function controller($scope, $element, $sce) { $log.debug('[Angular Directive - Layers] layers', $scope, $element); var safeApply = leafletHelpers.safeApply, - isDefined = leafletHelpers.isDefined; + isDefined = leafletHelpers.isDefined; angular.extend($scope, { baselayer: '', oldGroup: '', layerProperties: {}, groupProperties: {}, rangeIsSupported: leafletHelpers.rangeIsSupported(), - changeBaseLayer: function(key, e) { - leafletHelpers.safeApply($scope, function(scp) { + changeBaseLayer: function changeBaseLayer(key, e) { + leafletHelpers.safeApply($scope, function (scp) { scp.baselayer = key; - leafletData.getMap().then(function(map) { - leafletData.getLayers().then(function(leafletLayers) { - if(map.hasLayer(leafletLayers.baselayers[key])) { + leafletData.getMap().then(function (map) { + leafletData.getLayers().then(function (leafletLayers) { + if (map.hasLayer(leafletLayers.baselayers[key])) { return; } - for(var i in scp.layers.baselayers) { + for (var i in scp.layers.baselayers) { scp.layers.baselayers[i].icon = scp.icons.unradio; - if(map.hasLayer(leafletLayers.baselayers[i])) { + if (map.hasLayer(leafletLayers.baselayers[i])) { map.removeLayer(leafletLayers.baselayers[i]); } } @@ -3822,18 +3792,18 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge }); e.preventDefault(); }, - moveLayer: function(ly, newIndex, e) { + moveLayer: function moveLayer(ly, newIndex, e) { var delta = Object.keys($scope.layers.baselayers).length; - if(newIndex >= (1+delta) && newIndex <= ($scope.overlaysArray.length+delta)) { + if (newIndex >= 1 + delta && newIndex <= $scope.overlaysArray.length + delta) { var oldLy; - for(var key in $scope.layers.overlays) { - if($scope.layers.overlays[key].index === newIndex) { + for (var key in $scope.layers.overlays) { + if ($scope.layers.overlays[key].index === newIndex) { oldLy = $scope.layers.overlays[key]; break; } } - if(oldLy) { - safeApply($scope, function() { + if (oldLy) { + safeApply($scope, function () { oldLy.index = ly.index; ly.index = newIndex; }); @@ -3842,17 +3812,17 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge e.stopPropagation(); e.preventDefault(); }, - initIndex: function(layer, idx) { + initIndex: function initIndex(layer, idx) { var delta = Object.keys($scope.layers.baselayers).length; - layer.index = isDefined(layer.index)? layer.index:idx+delta+1; + layer.index = isDefined(layer.index) ? layer.index : idx + delta + 1; }, - initGroup: function(groupName) { - $scope.groupProperties[groupName] = $scope.groupProperties[groupName]? $scope.groupProperties[groupName]:{}; + initGroup: function initGroup(groupName) { + $scope.groupProperties[groupName] = $scope.groupProperties[groupName] ? $scope.groupProperties[groupName] : {}; }, - toggleOpacity: function(e, layer) { - if(layer.visible) { - if($scope.autoHideOpacity && !$scope.layerProperties[layer.name].opacityControl) { - for(var k in $scope.layerProperties) { + toggleOpacity: function toggleOpacity(e, layer) { + if (layer.visible) { + if ($scope.autoHideOpacity && !$scope.layerProperties[layer.name].opacityControl) { + for (var k in $scope.layerProperties) { $scope.layerProperties[k].opacityControl = false; } } @@ -3861,41 +3831,41 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge e.stopPropagation(); e.preventDefault(); }, - toggleLegend: function(layer) { + toggleLegend: function toggleLegend(layer) { $scope.layerProperties[layer.name].showLegend = !$scope.layerProperties[layer.name].showLegend; }, - showLegend: function(layer) { + showLegend: function showLegend(layer) { return layer.legend && $scope.layerProperties[layer.name].showLegend; }, - unsafeHTML: function(html) { + unsafeHTML: function unsafeHTML(html) { return $sce.trustAsHtml(html); }, - getOpacityIcon: function(layer) { - return layer.visible && $scope.layerProperties[layer.name].opacityControl? $scope.icons.close:$scope.icons.open; + getOpacityIcon: function getOpacityIcon(layer) { + return layer.visible && $scope.layerProperties[layer.name].opacityControl ? $scope.icons.close : $scope.icons.open; }, - getGroupIcon: function(group) { - return group.visible? $scope.icons.check:$scope.icons.uncheck; + getGroupIcon: function getGroupIcon(group) { + return group.visible ? $scope.icons.check : $scope.icons.uncheck; }, - changeOpacity: function(layer) { + changeOpacity: function changeOpacity(layer) { var op = $scope.layerProperties[layer.name].opacity; - leafletData.getMap().then(function(map) { - leafletData.getLayers().then(function(leafletLayers) { + leafletData.getMap().then(function (map) { + leafletData.getLayers().then(function (leafletLayers) { var ly; - for(var k in $scope.layers.overlays) { - if($scope.layers.overlays[k] === layer) { + for (var k in $scope.layers.overlays) { + if ($scope.layers.overlays[k] === layer) { ly = leafletLayers.overlays[k]; break; } } - if(map.hasLayer(ly)) { - if(ly.setOpacity) { - ly.setOpacity(op/100); + if (map.hasLayer(ly)) { + if (ly.setOpacity) { + ly.setOpacity(op / 100); } - if(ly.getLayers && ly.eachLayer) { - ly.eachLayer(function(lay) { - if(lay.setOpacity) { - lay.setOpacity(op/100); + if (ly.getLayers && ly.eachLayer) { + ly.eachLayer(function (lay) { + if (lay.setOpacity) { + lay.setOpacity(op / 100); } }); } @@ -3903,14 +3873,14 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge }); }); }, - changeGroupVisibility: function(groupName) { - if(!isDefined($scope.groupProperties[groupName])) { + changeGroupVisibility: function changeGroupVisibility(groupName) { + if (!isDefined($scope.groupProperties[groupName])) { return; } var visible = $scope.groupProperties[groupName].visible; - for(var k in $scope.layers.overlays) { + for (var k in $scope.layers.overlays) { var layer = $scope.layers.overlays[k]; - if(layer.group === groupName) { + if (layer.group === groupName) { layer.visible = visible; } } @@ -3925,59 +3895,13 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation); } }], - template: - '
' + - '

{{ title }}

' + - '
' + - '
{{ baseTitle }}
' + - '
' + - '' + - '
' + - '
' + - '
' + - '
{{ overlaysTitle }}
' + - '
' + - '
' + - ''+ - ''+ - '
' + - ' ' + - ' ' + - ' ' + - '' + - '
' + - '
' + - '
' + - '' + - '' + - '' + - '
Range is not supported in this browser
' + - '
' + - '
' + - '
' + - '
' + - '
', - link: function(scope, element, attrs, controller) { + template: '
' + '

{{ title }}

' + '
' + '
{{ baseTitle }}
' + '
' + '' + '
' + '
' + '
' + '
{{ overlaysTitle }}
' + '
' + '
' + '' + '' + '
' + ' ' + ' ' + ' ' + '' + '
' + '
' + '
' + '' + '' + '' + '
Range is not supported in this browser
' + '
' + '
' + '
' + '
' + '
', + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), - layers = leafletScope.layers; + leafletScope = controller.getLeafletScope(), + layers = leafletScope.layers; - scope.$watch('icons', function() { + scope.$watch('icons', function () { var defaultIcons = { uncheck: 'fa fa-square-o', check: 'fa fa-check-square-o', @@ -3989,7 +3913,7 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge close: 'fa fa-angle-double-up', toggleLegend: 'fa fa-pencil-square-o' }; - if(isDefined(scope.icons)) { + if (isDefined(scope.icons)) { angular.extend(defaultIcons, scope.icons); angular.extend(scope.icons, defaultIcons); } else { @@ -3998,62 +3922,62 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge }); // Setting layer stack order. - attrs.order = (isDefined(attrs.order) && (attrs.order === 'normal' || attrs.order === 'reverse'))? attrs.order:'normal'; + attrs.order = isDefined(attrs.order) && (attrs.order === 'normal' || attrs.order === 'reverse') ? attrs.order : 'normal'; scope.order = attrs.order === 'normal'; - scope.orderNumber = attrs.order === 'normal'? -1:1; + scope.orderNumber = attrs.order === 'normal' ? -1 : 1; scope.layers = layers; - controller.getMap().then(function(map) { - leafletScope.$watch('layers.baselayers', function(newBaseLayers) { + controller.getMap().then(function (map) { + leafletScope.$watch('layers.baselayers', function (newBaseLayers) { var baselayersArray = {}; - leafletData.getLayers().then(function(leafletLayers) { + leafletData.getLayers().then(function (leafletLayers) { var key; - for(key in newBaseLayers) { + for (key in newBaseLayers) { var layer = newBaseLayers[key]; - layer.icon = scope.icons[map.hasLayer(leafletLayers.baselayers[key])? 'radio':'unradio']; + layer.icon = scope.icons[map.hasLayer(leafletLayers.baselayers[key]) ? 'radio' : 'unradio']; baselayersArray[key] = layer; } scope.baselayersArray = baselayersArray; }); }); - leafletScope.$watch('layers.overlays', function(newOverlayLayers) { + leafletScope.$watch('layers.overlays', function (newOverlayLayers) { var overlaysArray = []; var groupVisibleCount = {}; - leafletData.getLayers().then(function(leafletLayers) { + leafletData.getLayers().then(function (leafletLayers) { var key; - for(key in newOverlayLayers) { + for (key in newOverlayLayers) { var layer = newOverlayLayers[key]; - layer.icon = scope.icons[(layer.visible? 'check':'uncheck')]; + layer.icon = scope.icons[layer.visible ? 'check' : 'uncheck']; overlaysArray.push(layer); - if(!isDefined(scope.layerProperties[layer.name])) { + if (!isDefined(scope.layerProperties[layer.name])) { scope.layerProperties[layer.name] = { - opacity: isDefined(layer.layerOptions.opacity)? layer.layerOptions.opacity*100:100, + opacity: isDefined(layer.layerOptions.opacity) ? layer.layerOptions.opacity * 100 : 100, opacityControl: false, showLegend: true }; } - if(isDefined(layer.group)) { - if(!isDefined(scope.groupProperties[layer.group])) { + if (isDefined(layer.group)) { + if (!isDefined(scope.groupProperties[layer.group])) { scope.groupProperties[layer.group] = { visible: false }; } - groupVisibleCount[layer.group] = isDefined(groupVisibleCount[layer.group])? groupVisibleCount[layer.group]:{ + groupVisibleCount[layer.group] = isDefined(groupVisibleCount[layer.group]) ? groupVisibleCount[layer.group] : { count: 0, visibles: 0 }; groupVisibleCount[layer.group].count++; - if(layer.visible) { + if (layer.visible) { groupVisibleCount[layer.group].visibles++; } } - if(isDefined(layer.index) && leafletLayers.overlays[key].setZIndex) { + if (isDefined(layer.index) && leafletLayers.overlays[key].setZIndex) { leafletLayers.overlays[key].setZIndex(newOverlayLayers[key].index); } } - for(key in groupVisibleCount) { + for (key in groupVisibleCount) { scope.groupProperties[key].visible = groupVisibleCount[key].visibles === groupVisibleCount[key].count; } scope.overlaysArray = overlaysArray; @@ -4064,6 +3988,8 @@ angular.module('ui-leaflet').directive('layercontrol', ["$filter", "leafletLogge }; }]); +'use strict'; + angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafletData", "leafletHelpers", "leafletLayerHelpers", "leafletControlHelpers", function (leafletLogger, $q, leafletData, leafletHelpers, leafletLayerHelpers, leafletControlHelpers) { // var $log = leafletLogger; return { @@ -4071,16 +3997,16 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle scope: false, replace: false, require: 'leaflet', - controller: ["$scope", function ($scope) { + controller: ["$scope", function controller($scope) { $scope._leafletLayers = $q.defer(); this.getLayers = function () { return $scope._leafletLayers.promise; }; }], - link: function(scope, element, attrs, controller){ + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, leafletLayers = {}, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), layers = leafletScope.layers, createLayer = leafletLayerHelpers.createLayer, safeAddLayer = leafletLayerHelpers.safeAddLayer, @@ -4088,7 +4014,7 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle updateLayersControl = leafletControlHelpers.updateLayersControl, isLayersControlVisible = false; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { // We have baselayers to add to the map scope._leafletLayers.resolve(leafletLayers); @@ -4123,9 +4049,7 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle // Setup the Overlays for (layerName in layers.overlays) { - if(layers.overlays[layerName].type === 'cartodb') { - - } + if (layers.overlays[layerName].type === 'cartodb') {} var newOverlayLayer = createLayer(layers.overlays[layerName]); if (!isDefined(newOverlayLayer)) { delete layers.overlays[layerName]; @@ -4139,8 +4063,8 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle } // Watch for the base layers - leafletScope.$watch('layers.baselayers', function(newBaseLayers, oldBaseLayers) { - if(angular.equals(newBaseLayers, oldBaseLayers)) { + leafletScope.$watch('layers.baselayers', function (newBaseLayers, oldBaseLayers) { + if (angular.equals(newBaseLayers, oldBaseLayers)) { isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, newBaseLayers, layers.overlays, leafletLayers); return true; } @@ -4197,8 +4121,8 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle }, true); // Watch for the overlay layers - leafletScope.$watch('layers.overlays', function(newOverlayLayers, oldOverlayLayers) { - if(angular.equals(newOverlayLayers, oldOverlayLayers)) { + leafletScope.$watch('layers.overlays', function (newOverlayLayers, oldOverlayLayers) { + if (angular.equals(newOverlayLayers, oldOverlayLayers)) { isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, layers.baselayers, newOverlayLayers, leafletLayers); return true; } @@ -4209,8 +4133,7 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle // Remove from the map if it's on it if (map.hasLayer(leafletLayers.overlays[name])) { // Safe remove when ArcGIS layers is loading. - var options = isDefined(newOverlayLayers[name])? - newOverlayLayers[name].layerOptions:null; + var options = isDefined(newOverlayLayers[name]) ? newOverlayLayers[name].layerOptions : null; safeRemoveLayer(map, leafletLayers.overlays[name], options); } // TODO: Depending on the layer type we will have to delete what's included on it @@ -4259,154 +4182,154 @@ angular.module('ui-leaflet').directive('layers', ["leafletLogger", "$q", "leafle }; }]); -angular.module("ui-leaflet").directive('legend', ["leafletLogger", "$http", "$timeout", "leafletHelpers", "leafletLegendHelpers", function (leafletLogger, $http, $timeout, leafletHelpers, leafletLegendHelpers) { - var $log = leafletLogger, - errorHeader = leafletHelpers.errorHeader + ' [Legend] '; - return { - restrict: "A", - scope: false, - replace: false, - require: 'leaflet', - transclude: false, +'use strict'; - link: function (scope, element, attrs, controller) { +angular.module("ui-leaflet").directive('legend', ["leafletLogger", "$http", "$timeout", "leafletHelpers", "leafletLegendHelpers", function (leafletLogger, $http, $timeout, leafletHelpers, leafletLegendHelpers) { + var $log = leafletLogger, + errorHeader = leafletHelpers.errorHeader + ' [Legend] '; + return { + restrict: "A", + scope: false, + replace: false, + require: 'leaflet', + transclude: false, - var isArray = leafletHelpers.isArray, - isString = leafletHelpers.isString, - isDefined = leafletHelpers.isDefined, - isFunction = leafletHelpers.isFunction, - leafletScope = controller.getLeafletScope(), - legend = leafletScope.legend; + link: function link(scope, element, attrs, controller) { - var legendClass; - var position; - var leafletLegend; - var type; + var isArray = leafletHelpers.isArray, + isString = leafletHelpers.isString, + isDefined = leafletHelpers.isDefined, + isFunction = leafletHelpers.isFunction, + leafletScope = controller.getLeafletScope(), + legend = leafletScope.legend; - leafletScope.$watch('legend', function (newLegend) { + var legendClass; + var position; + var leafletLegend; + var type; - if (isDefined(newLegend)) { - legendClass = newLegend.legendClass ? newLegend.legendClass : "legend"; - position = newLegend.position || 'bottomright'; - // default to arcgis - type = newLegend.type || 'arcgis'; - } - }, true); + leafletScope.$watch('legend', function (newLegend) { - var createLegend = function(map, legendData, newURL) { - if(legendData && legendData.layers && legendData.layers.length > 0) { - if (isDefined(leafletLegend)) { - leafletLegendHelpers.updateLegend(leafletLegend.getContainer(), legendData, type, newURL); - } else { - leafletLegend = L.control({ - position: position - }); - leafletLegend.onAdd = leafletLegendHelpers.getOnAddLegend(legendData, legendClass, type, newURL); - leafletLegend.addTo(map); - } + if (isDefined(newLegend)) { + legendClass = newLegend.legendClass ? newLegend.legendClass : "legend"; + position = newLegend.position || 'bottomright'; + // default to arcgis + type = newLegend.type || 'arcgis'; + } + }, true); - if (isDefined(legend.loadedData) && isFunction(legend.loadedData)) { - legend.loadedData(); - } + var createLegend = function createLegend(map, legendData, newURL) { + if (legendData && legendData.layers && legendData.layers.length > 0) { + if (isDefined(leafletLegend)) { + leafletLegendHelpers.updateLegend(leafletLegend.getContainer(), legendData, type, newURL); + } else { + leafletLegend = L.control({ + position: position + }); + leafletLegend.onAdd = leafletLegendHelpers.getOnAddLegend(legendData, legendClass, type, newURL); + leafletLegend.addTo(map); } - }; - controller.getMap().then(function (map) { - leafletScope.$watch('legend', function (newLegend) { - if (!isDefined(newLegend)) { - if (isDefined(leafletLegend)) { - leafletLegend.removeFrom(map); - leafletLegend= null; - } + if (isDefined(legend.loadedData) && isFunction(legend.loadedData)) { + legend.loadedData(); + } + } + }; - return; + controller.getMap().then(function (map) { + leafletScope.$watch('legend', function (newLegend) { + if (!isDefined(newLegend)) { + if (isDefined(leafletLegend)) { + leafletLegend.removeFrom(map); + leafletLegend = null; } - if (!isDefined(newLegend.url) && (type === 'arcgis') && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) { - $log.warn(errorHeader + " legend.colors and legend.labels must be set."); - return; - } + return; + } - if (isDefined(newLegend.url)) { - $log.info(errorHeader + " loading legend service."); - return; - } + if (!isDefined(newLegend.url) && type === 'arcgis' && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) { + $log.warn(errorHeader + " legend.colors and legend.labels must be set."); + return; + } - if (isDefined(leafletLegend)) { - leafletLegend.removeFrom(map); - leafletLegend= null; - } + if (isDefined(newLegend.url)) { + $log.info(errorHeader + " loading legend service."); + return; + } - leafletLegend = L.control({ - position: position - }); + if (isDefined(leafletLegend)) { + leafletLegend.removeFrom(map); + leafletLegend = null; + } - if (type === 'arcgis') { - leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass); - } - leafletLegend.addTo(map); + leafletLegend = L.control({ + position: position }); - leafletScope.$watch('legend.url', function (newURL) { - if (!isDefined(newURL)) { - return; - } + if (type === 'arcgis') { + leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass); + } + leafletLegend.addTo(map); + }); - if(!isArray(newURL) && !isString(newURL)) { - $log.warn(errorHeader + " legend.url must be an array or string."); - return; - } + leafletScope.$watch('legend.url', function (newURL) { + if (!isDefined(newURL)) { + return; + } - var urls = isString(newURL)? [newURL]:newURL; + if (!isArray(newURL) && !isString(newURL)) { + $log.warn(errorHeader + " legend.url must be an array or string."); + return; + } + + var urls = isString(newURL) ? [newURL] : newURL; - var legendData; - var onResult = function(idx, url) { - return function(ld) { - if(isDefined(ld.data.error)) { - $log.warn(errorHeader + 'Error loadin legend from: ' + url, ld.data.error.message); + var legendData; + var onResult = function onResult(idx, url) { + return function (ld) { + if (isDefined(ld.data.error)) { + $log.warn(errorHeader + 'Error loadin legend from: ' + url, ld.data.error.message); + } else { + if (legendData && legendData.layers && legendData.layers.length > 0) { + legendData.layers = legendData.layers.concat(ld.data.layers); } else { - if(legendData && legendData.layers && legendData.layers.length > 0) { - legendData.layers = legendData.layers.concat(ld.data.layers); - } else { - legendData = ld.data; - } + legendData = ld.data; } + } - if(idx === urls.length-1) { - createLegend(map, legendData, newURL); - } - }; - }; - var onError = function(err) { - $log.warn(errorHeader + ' legend.url not loaded.', err); + if (idx === urls.length - 1) { + createLegend(map, legendData, newURL); + } }; + }; + var onError = function onError(err) { + $log.warn(errorHeader + ' legend.url not loaded.', err); + }; - for(var i = 0; i < urls.length; i++) { - leafletLegendHelpers.addLegendURL(attrs.id, { - url: urls[i], - method: 'GET' - }).then(onResult(i)).catch(onError); - } - }); + for (var i = 0; i < urls.length; i++) { + leafletLegendHelpers.addLegendURL(attrs.id, { + url: urls[i], + method: 'GET' + }).then(onResult(i)).catch(onError); + } + }); - leafletScope.$watch('legend.legendData', function (legendData) { - $log.debug('legendData', legendData); - if(isDefined(leafletScope.legend.url) || !isDefined(legendData)) { - return; - } + leafletScope.$watch('legend.legendData', function (legendData) { + $log.debug('legendData', legendData); + if (isDefined(leafletScope.legend.url) || !isDefined(legendData)) { + return; + } - createLegend(map, legendData); - }, true); - }); + createLegend(map, legendData); + }, true); + }); + } + }; +}]); - } - }; - }]); +'use strict'; -angular.module('ui-leaflet').directive('markers', - ["leafletLogger", "$rootScope", "$q", "leafletData", "leafletHelpers", "leafletMapDefaults", "leafletMarkersHelpers", "leafletMarkerEvents", "leafletIterators", "leafletWatchHelpers", "leafletDirectiveControlsHelpers", function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers, leafletMapDefaults, - leafletMarkersHelpers, leafletMarkerEvents, leafletIterators, leafletWatchHelpers, - leafletDirectiveControlsHelpers) { +angular.module('ui-leaflet').directive('markers', ["leafletLogger", "$rootScope", "$q", "leafletData", "leafletHelpers", "leafletMapDefaults", "leafletMarkersHelpers", "leafletMarkerEvents", "leafletIterators", "leafletWatchHelpers", "leafletDirectiveControlsHelpers", function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers, leafletMapDefaults, leafletMarkersHelpers, leafletMarkerEvents, leafletIterators, leafletWatchHelpers, leafletDirectiveControlsHelpers) { //less terse vars to helpers var isDefined = leafletHelpers.isDefined, errorHeader = leafletHelpers.errorHeader, @@ -4426,28 +4349,24 @@ angular.module('ui-leaflet').directive('markers', extendDirectiveControls = leafletDirectiveControlsHelpers.extend, $log = leafletLogger; - var _getLMarker = function(leafletMarkers, name, maybeLayerName){ - if(!Object.keys(leafletMarkers).length) return; - if(maybeLayerName && isString(maybeLayerName)){ - if(!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length) - return; + var _getLMarker = function _getLMarker(leafletMarkers, name, maybeLayerName) { + if (!Object.keys(leafletMarkers).length) return; + if (maybeLayerName && isString(maybeLayerName)) { + if (!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length) return; return leafletMarkers[maybeLayerName][name]; } return leafletMarkers[name]; }; - var _setLMarker = function(lObject, leafletMarkers, name, maybeLayerName){ - if(maybeLayerName && isString(maybeLayerName)){ - if(!isDefined(leafletMarkers[maybeLayerName])) - leafletMarkers[maybeLayerName] = {}; + var _setLMarker = function _setLMarker(lObject, leafletMarkers, name, maybeLayerName) { + if (maybeLayerName && isString(maybeLayerName)) { + if (!isDefined(leafletMarkers[maybeLayerName])) leafletMarkers[maybeLayerName] = {}; leafletMarkers[maybeLayerName][name] = lObject; - } - else - leafletMarkers[name] = lObject; + } else leafletMarkers[name] = lObject; return lObject; }; - var _maybeAddMarkerToLayer = function(layerName, layers, model, marker, watchType, map){ + var _maybeAddMarkerToLayer = function _maybeAddMarkerToLayer(layerName, layers, model, marker, watchType, map) { if (!isString(layerName)) { $log.error(errorHeader + ' A layername must be a string'); @@ -4460,7 +4379,7 @@ angular.module('ui-leaflet').directive('markers', } if (!isDefined(layers.overlays) || !isDefined(layers.overlays[layerName])) { - $log.error(errorHeader +' A marker can only be added to a layer of type "group"'); + $log.error(errorHeader + ' A marker can only be added to a layer of type "group"'); return false; } var layerGroup = layers.overlays[layerName]; @@ -4480,11 +4399,9 @@ angular.module('ui-leaflet').directive('markers', return true; }; //TODO: move to leafletMarkersHelpers??? or make a new class/function file (leafletMarkersHelpers is large already) - var _addMarkers = function(mapId, markersToRender, oldModels, map, layers, leafletMarkers, leafletScope, - watchOptions, maybeLayerName, skips){ + var _addMarkers = function _addMarkers(mapId, markersToRender, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, maybeLayerName, skips) { for (var newName in markersToRender) { - if(skips[newName]) - continue; + if (skips[newName]) continue; if (newName.search("-") !== -1) { $log.error('The marker can\'t use a "-" on his key name: "' + newName + '".'); @@ -4492,15 +4409,15 @@ angular.module('ui-leaflet').directive('markers', } var model = Helpers.copy(markersToRender[newName]); - var pathToMarker = Helpers.getObjectDotPath(maybeLayerName? [maybeLayerName, newName]: [newName]); - var maybeLMarker = _getLMarker(leafletMarkers,newName, maybeLayerName); + var pathToMarker = Helpers.getObjectDotPath(maybeLayerName ? [maybeLayerName, newName] : [newName]); + var maybeLMarker = _getLMarker(leafletMarkers, newName, maybeLayerName); if (!isDefined(maybeLMarker)) { //(nmccready) very important to not have model changes when lObject is changed //this might be desirable in some cases but it causes two-way binding to lObject which is not ideal //if it is left as the reference then all changes from oldModel vs newModel are ignored //see _destroy (where modelDiff becomes meaningless if we do not copy here) var marker = createMarker(model); - var layerName = (model? model.layer : undefined) || maybeLayerName; //original way takes pref + var layerName = (model ? model.layer : undefined) || maybeLayerName; //original way takes pref if (!isDefined(marker)) { $log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.'); continue; @@ -4524,80 +4441,69 @@ angular.module('ui-leaflet').directive('markers', } // Check if the marker should be added to a layer - if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))){ + if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))) { - var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, - watchOptions.individual.type, map); - if(!pass) - continue; //something went wrong move on in the loop + var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, watchOptions.individual.type, map); + if (!pass) continue; //something went wrong move on in the loop } else if (!isDefined(model.group)) { - // We do not have a layer attr, so the marker goes to the map layer - map.addLayer(marker); - if (watchOptions.individual.type === null && model.focus === true) { - marker.openPopup(); + // We do not have a layer attr, so the marker goes to the map layer + map.addLayer(marker); + if (watchOptions.individual.type === null && model.focus === true) { + marker.openPopup(); + } } - } if (watchOptions.individual.type !== null) { - addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, - watchOptions.individual); + addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, watchOptions.individual); } listenMarkerEvents(marker, model, leafletScope, watchOptions.individual.type, map); leafletMarkerEvents.bindEvents(mapId, marker, pathToMarker, model, leafletScope, layerName); - } - else { + } else { var oldModel = getModelFromModels(oldModels, newName, maybeLayerName); updateMarker(model, oldModel, maybeLMarker, pathToMarker, leafletScope, layers, map); } } }; - var _seeWhatWeAlreadyHave = function(markerModels, oldMarkerModels, lMarkers, isEqual, cb){ + var _seeWhatWeAlreadyHave = function _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, isEqual, cb) { var hasLogged = false, equals = false, oldMarker, newMarker; - var doCheckOldModel = isDefined(oldMarkerModels); + var doCheckOldModel = isDefined(oldMarkerModels); for (var name in lMarkers) { - if(!hasLogged) { + if (!hasLogged) { $log.debug(errorHeader + "[markers] destroy: "); hasLogged = true; } - if(doCheckOldModel){ + if (doCheckOldModel) { //might want to make the option (in watch options) to disable deep checking //ie the options to only check !== (reference check) instead of angular.equals (slow) newMarker = markerModels[name]; oldMarker = oldMarkerModels[name]; - equals = angular.equals(newMarker,oldMarker) && isEqual; + equals = angular.equals(newMarker, oldMarker) && isEqual; } - if (!isDefined(markerModels) || - !Object.keys(markerModels).length || - !isDefined(markerModels[name]) || - !Object.keys(markerModels[name]).length || - equals) { - if(cb && Helpers.isFunction(cb)) - cb(newMarker, oldMarker, name); + if (!isDefined(markerModels) || !Object.keys(markerModels).length || !isDefined(markerModels[name]) || !Object.keys(markerModels[name]).length || equals) { + if (cb && Helpers.isFunction(cb)) cb(newMarker, oldMarker, name); } } }; - var _destroy = function(markerModels, oldMarkerModels, lMarkers, map, layers){ - _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, false, - function(newMarker, oldMarker, lMarkerName){ - $log.debug(errorHeader + '[marker] is deleting marker: ' + lMarkerName); - deleteMarker(lMarkers[lMarkerName], map, layers); - delete lMarkers[lMarkerName]; - }); + var _destroy = function _destroy(markerModels, oldMarkerModels, lMarkers, map, layers) { + _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, false, function (newMarker, oldMarker, lMarkerName) { + $log.debug(errorHeader + '[marker] is deleting marker: ' + lMarkerName); + deleteMarker(lMarkers[lMarkerName], map, layers); + delete lMarkers[lMarkerName]; + }); }; - var _getNewModelsToSkipp = function(newModels, oldModels, lMarkers){ + var _getNewModelsToSkipp = function _getNewModelsToSkipp(newModels, oldModels, lMarkers) { var skips = {}; - _seeWhatWeAlreadyHave(newModels, oldModels, lMarkers, true, - function(newMarker, oldMarker, lMarkerName){ - $log.debug(errorHeader + '[marker] is already rendered, marker: ' + lMarkerName); - skips[lMarkerName] = newMarker; - }); + _seeWhatWeAlreadyHave(newModels, oldModels, lMarkers, true, function (newMarker, oldMarker, lMarkerName) { + $log.debug(errorHeader + '[marker] is already rendered, marker: ' + lMarkerName); + skips[lMarkerName] = newMarker; + }); return skips; }; @@ -4607,18 +4513,19 @@ angular.module('ui-leaflet').directive('markers', replace: false, require: ['leaflet', '?layers'], - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var mapController = controller[0], - leafletScope = mapController.getLeafletScope(); + leafletScope = mapController.getLeafletScope(); - mapController.getMap().then(function(map) { - var leafletMarkers = {}, getLayers; + mapController.getMap().then(function (map) { + var leafletMarkers = {}, + getLayers; // If the layers attribute is used, we must wait until the layers are created if (isDefined(controller[1])) { getLayers = controller[1].getLayers; } else { - getLayers = function() { + getLayers = function () { var deferred = $q.defer(); deferred.resolve(); return deferred.promise; @@ -4626,20 +4533,19 @@ angular.module('ui-leaflet').directive('markers', } var watchOptions; - if(leafletScope.watchOptions && leafletScope.watchOptions.markers) { + if (leafletScope.watchOptions && leafletScope.watchOptions.markers) { watchOptions = leafletScope.watchOptions.markers; - } - else { + } else { watchOptions = _defaultWatchOptions; - } + } - var isNested = (isDefined(attrs.markersNested) && Helpers.isTruthy(attrs.markersNested)); + var isNested = isDefined(attrs.markersNested) && Helpers.isTruthy(attrs.markersNested); - getLayers().then(function(layers) { - var _clean = function(models, oldModels){ - if(isNested) { - $it.each(models, function(markerToMaybeDel, layerName) { - var oldLayerModels = getLayerModels(oldModels, layerName); + getLayers().then(function (layers) { + var _clean = function _clean(models, oldModels) { + if (isNested) { + $it.each(models, function (markerToMaybeDel, layerName) { + var oldLayerModels = getLayerModels(oldModels, layerName); _destroy(markerToMaybeDel, oldLayerModels, leafletMarkers[layerName], map, layers); }); return; @@ -4647,27 +4553,25 @@ angular.module('ui-leaflet').directive('markers', _destroy(models, oldModels, leafletMarkers, map, layers); }; - var _create = function(models, oldModels){ + var _create = function _create(models, oldModels) { _clean(models, oldModels); var skips = null; - if(isNested) { - $it.each(models, function(markersToAdd, layerName) { + if (isNested) { + $it.each(models, function (markersToAdd, layerName) { var oldLayerModels = getLayerModels(oldModels, layerName); var newlayerModels = getLayerModels(models, layerName); skips = _getNewModelsToSkipp(newlayerModels, oldLayerModels, leafletMarkers[layerName]); - _addMarkers(attrs.id, markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope, - watchOptions, layerName, skips); + _addMarkers(attrs.id, markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, layerName, skips); }); return; } skips = _getNewModelsToSkipp(models, oldModels, leafletMarkers); - _addMarkers(attrs.id, models, oldModels, map, layers, leafletMarkers, leafletScope, - watchOptions, undefined, skips); + _addMarkers(attrs.id, models, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, undefined, skips); }; extendDirectiveControls(attrs.id, 'markers', _create, _clean); leafletData.setMarkers(leafletMarkers, attrs.id); - maybeWatch(leafletScope,'markers', watchOptions, function(newMarkers, oldMarkers){ + maybeWatch(leafletScope, 'markers', watchOptions, function (newMarkers, oldMarkers) { _create(newMarkers, oldMarkers); }); }); @@ -4676,6 +4580,8 @@ angular.module('ui-leaflet').directive('markers', }; }]); +'use strict'; + angular.module('ui-leaflet').directive('maxbounds', ["leafletLogger", "leafletMapDefaults", "leafletBoundsHelpers", "leafletHelpers", function (leafletLogger, leafletMapDefaults, leafletBoundsHelpers, leafletHelpers) { // var $log = leafletLogger; return { @@ -4684,13 +4590,12 @@ angular.module('ui-leaflet').directive('maxbounds', ["leafletLogger", "leafletMa replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { - var leafletScope = controller.getLeafletScope(), + link: function link(scope, element, attrs, controller) { + var leafletScope = controller.getLeafletScope(), isValidBounds = leafletBoundsHelpers.isValidBounds, isNumber = leafletHelpers.isNumber; - - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { leafletScope.$watch("maxbounds", function (maxbounds) { if (!isValidBounds(maxbounds)) { // Unset any previous maxbounds @@ -4699,8 +4604,8 @@ angular.module('ui-leaflet').directive('maxbounds', ["leafletLogger", "leafletMa } var leafletBounds = leafletBoundsHelpers.createLeafletBounds(maxbounds); - if(isNumber(maxbounds.pad)) { - leafletBounds = leafletBounds.pad(maxbounds.pad); + if (isNumber(maxbounds.pad)) { + leafletBounds = leafletBounds.pad(maxbounds.pad); } map.setMaxBounds(leafletBounds); @@ -4713,6 +4618,8 @@ angular.module('ui-leaflet').directive('maxbounds', ["leafletLogger", "leafletMa }; }]); +'use strict'; + angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leafletData", "leafletMapDefaults", "leafletHelpers", "leafletPathsHelpers", "leafletPathEvents", "leafletWatchHelpers", function (leafletLogger, $q, leafletData, leafletMapDefaults, leafletHelpers, leafletPathsHelpers, leafletPathEvents, leafletWatchHelpers) { var $log = leafletLogger; return { @@ -4721,18 +4628,18 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet replace: false, require: ['leaflet', '?layers'], - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var mapController = controller[0], isDefined = leafletHelpers.isDefined, isString = leafletHelpers.isString, - leafletScope = mapController.getLeafletScope(), - paths = leafletScope.paths, + leafletScope = mapController.getLeafletScope(), + paths = leafletScope.paths, createPath = leafletPathsHelpers.createPath, bindPathEvents = leafletPathEvents.bindPathEvents, setPathOptions = leafletPathsHelpers.setPathOptions, maybeWatch = leafletWatchHelpers.maybeWatch; - mapController.getMap().then(function(map) { + mapController.getMap().then(function (map) { var defaults = leafletMapDefaults.getDefaults(attrs.id), getLayers; @@ -4740,7 +4647,7 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet if (isDefined(controller[1])) { getLayers = controller[1].getLayers; } else { - getLayers = function() { + getLayers = function () { var deferred = $q.defer(); deferred.resolve(); return deferred.promise; @@ -4760,23 +4667,22 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet }; var watchOptions; - if(leafletScope.watchOptions && leafletScope.watchOptions.paths) { + if (leafletScope.watchOptions && leafletScope.watchOptions.paths) { watchOptions = leafletScope.watchOptions.paths; - } - else { + } else { watchOptions = _legacyWatchOptions; } - getLayers().then(function(layers) { + getLayers().then(function (layers) { var leafletPaths = {}; leafletData.setPaths(leafletPaths, attrs.id); // Function for listening every single path once created - var watchPathFn = function(leafletPath, name, watchOptions) { - var pathWatchPath = "paths[\""+name+"\"]"; + var watchPathFn = function watchPathFn(leafletPath, name, watchOptions) { + var pathWatchPath = "paths[\"" + name + "\"]"; - maybeWatch(leafletScope, pathWatchPath, watchOptions, function(pathData, old, clearWatch){ + maybeWatch(leafletScope, pathWatchPath, watchOptions, function (pathData, old, clearWatch) { if (!isDefined(pathData)) { if (isDefined(old.layer)) { for (var i in layers.overlays) { @@ -4792,7 +4698,7 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet }); }; - var _clean = function(newPaths){ + var _clean = function _clean(newPaths) { // Delete paths (by name) from the array for (var name in leafletPaths) { if (!isDefined(newPaths[name])) { @@ -4802,7 +4708,7 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet } }; - var _create = function(newPaths){ + var _create = function _create(newPaths) { _clean(newPaths); // Create the new paths for (var newName in newPaths) { @@ -4858,7 +4764,7 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet if (watchOptions.individual.type !== null) { watchPathFn(newPath, newName, watchOptions.individual); } else { - setPathOptions(newPath, pathData.type, pathData); + setPathOptions(newPath, pathData.type, pathData); } } else if (isDefined(newPath)) { // Listen for changes on the new path @@ -4868,7 +4774,7 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet if (watchOptions.individual.type !== null) { watchPathFn(newPath, newName, watchOptions.individual); } else { - setPathOptions(newPath, pathData.type, pathData); + setPathOptions(newPath, pathData.type, pathData); } } @@ -4877,16 +4783,17 @@ angular.module('ui-leaflet').directive('paths', ["leafletLogger", "$q", "leaflet } }; - maybeWatch(leafletScope,'paths', watchOptions, function(newPaths){ + maybeWatch(leafletScope, 'paths', watchOptions, function (newPaths) { _create(newPaths); }); - }); }); } }; }]); +'use strict'; + angular.module('ui-leaflet').directive('tiles', ["leafletLogger", "leafletData", "leafletMapDefaults", "leafletHelpers", function (leafletLogger, leafletData, leafletMapDefaults, leafletHelpers) { var $log = leafletLogger; return { @@ -4895,20 +4802,20 @@ angular.module('ui-leaflet').directive('tiles', ["leafletLogger", "leafletData", replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), tiles = leafletScope.tiles; - if (!isDefined(tiles) || !isDefined(tiles.url)) { + if (!isDefined(tiles) || !isDefined(tiles.url)) { $log.warn("[AngularJS - Leaflet] The 'tiles' definition doesn't have the 'url' property."); return; } - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var defaults = leafletMapDefaults.getDefaults(attrs.id); var tileLayerObj; - leafletScope.$watch("tiles", function(tiles) { + leafletScope.$watch("tiles", function (tiles) { var tileLayerOptions = defaults.tileLayerOptions; var tileLayerUrl = defaults.tileLayer; @@ -4956,245 +4863,232 @@ angular.module('ui-leaflet').directive('tiles', ["leafletLogger", "leafletData", }; }]); -angular.module('ui-leaflet').directive('watchOptions', [ - '$log', '$rootScope', '$q', 'leafletData', 'leafletHelpers', - function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers) { +'use strict'; - var isDefined = leafletHelpers.isDefined, - errorHeader = leafletHelpers.errorHeader, - isObject = leafletHelpers.isObject, - $log = leafletLogger; +angular.module('ui-leaflet').directive('watchOptions', ['$log', '$rootScope', '$q', 'leafletData', 'leafletHelpers', function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers) { - return { - restrict: "A", - scope: false, - replace: false, - require: ['leaflet'], + var isDefined = leafletHelpers.isDefined, + errorHeader = leafletHelpers.errorHeader, + isObject = leafletHelpers.isObject, + $log = leafletLogger; - link: function (scope, element, attrs, controller) { - var mapController = controller[0], - leafletScope = mapController.getLeafletScope(); + return { + restrict: "A", + scope: false, + replace: false, + require: ['leaflet'], - var _isValidWatchType = function(type) { - return type === 'watch' || - type === 'watchCollection' || - type === 'watchDeep' || - type === null; - }; + link: function link(scope, element, attrs, controller) { + var mapController = controller[0], + leafletScope = mapController.getLeafletScope(); - if(isDefined(leafletScope.watchOptions) && isObject(leafletScope.watchOptions)) { - angular.forEach(['markers', 'geojson', 'paths'], function(name) { - if (isDefined(leafletScope.watchOptions[name])) { - if(!_isValidWatchType(leafletScope.watchOptions[name].type)) { - $log.error(errorHeader + ' watchOptions.' + name + '.type is not a valid type.'); - } - if(isDefined(leafletScope.watchOptions[name].individual)) { - if(!_isValidWatchType(leafletScope.watchOptions[name].individual.type)) { - $log.error(errorHeader + ' watchOptions.' + name + '.individual.type is not a valid type.'); - } - } - else { - $log.error(errorHeader + ' watchOptions.' + name + '.type.individual must be defined.'); + var _isValidWatchType = function _isValidWatchType(type) { + return type === 'watch' || type === 'watchCollection' || type === 'watchDeep' || type === null; + }; + + if (isDefined(leafletScope.watchOptions) && isObject(leafletScope.watchOptions)) { + angular.forEach(['markers', 'geojson', 'paths'], function (name) { + if (isDefined(leafletScope.watchOptions[name])) { + if (!_isValidWatchType(leafletScope.watchOptions[name].type)) { + $log.error(errorHeader + ' watchOptions.' + name + '.type is not a valid type.'); + } + if (isDefined(leafletScope.watchOptions[name].individual)) { + if (!_isValidWatchType(leafletScope.watchOptions[name].individual.type)) { + $log.error(errorHeader + ' watchOptions.' + name + '.individual.type is not a valid type.'); } + } else { + $log.error(errorHeader + ' watchOptions.' + name + '.type.individual must be defined.'); } - }); - } + } + }); } - }; + } + }; }]); -angular.module('ui-leaflet') -.factory('leafletEventsHelpersFactory', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", function ($rootScope, $q, leafletLogger, leafletHelpers) { - var safeApply = leafletHelpers.safeApply, - isDefined = leafletHelpers.isDefined, - isObject = leafletHelpers.isObject, - isArray = leafletHelpers.isArray, - errorHeader = leafletHelpers.errorHeader, - $log = leafletLogger; +'use strict'; - var EventsHelper = function(rootBroadcastName, lObjectType){ - this.rootBroadcastName = rootBroadcastName; - $log.debug("leafletEventsHelpersFactory: lObjectType: " + lObjectType + "rootBroadcastName: " + rootBroadcastName); - //used to path/key out certain properties based on the type , "markers", "geojson" - this.lObjectType = lObjectType; - }; +angular.module('ui-leaflet').factory('leafletEventsHelpersFactory', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", function ($rootScope, $q, leafletLogger, leafletHelpers) { + var safeApply = leafletHelpers.safeApply, + isDefined = leafletHelpers.isDefined, + isObject = leafletHelpers.isObject, + isArray = leafletHelpers.isArray, + errorHeader = leafletHelpers.errorHeader, + $log = leafletLogger; - EventsHelper.prototype.getAvailableEvents = function(){return [];}; + var EventsHelper = function EventsHelper(rootBroadcastName, lObjectType) { + this.rootBroadcastName = rootBroadcastName; + $log.debug("leafletEventsHelpersFactory: lObjectType: " + lObjectType + "rootBroadcastName: " + rootBroadcastName); + //used to path/key out certain properties based on the type , "markers", "geojson" + this.lObjectType = lObjectType; + }; - /* - argument: name: Note this can be a single string or dot notation - Example: - markerModel : { - m1: { lat:_, lon: _} - } - //would yield name of - name = "m1" - - If nested: - markerModel : { - cars: { - m1: { lat:_, lon: _} - } - } - //would yield name of - name = "cars.m1" - */ - EventsHelper.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { - var _this = this; + EventsHelper.prototype.getAvailableEvents = function () { + return []; + }; + + /* + argument: name: Note this can be a single string or dot notation + Example: + markerModel : { + m1: { lat:_, lon: _} + } + //would yield name of + name = "m1" + If nested: + markerModel : { + cars: { + m1: { lat:_, lon: _} + } + } + //would yield name of + name = "cars.m1" + */ + EventsHelper.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { + var _this = this; - maybeMapId = maybeMapId || ''; - if (maybeMapId) - maybeMapId = '.' + maybeMapId; + maybeMapId = maybeMapId || ''; + if (maybeMapId) maybeMapId = '.' + maybeMapId; - return function (e) { - var broadcastName = _this.rootBroadcastName + maybeMapId + '.' + eventName; - $log.debug(broadcastName); - _this.fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName, extra); - }; + return function (e) { + var broadcastName = _this.rootBroadcastName + maybeMapId + '.' + eventName; + $log.debug(broadcastName); + _this.fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName, extra); }; + }; - EventsHelper.prototype.fire = function(scope, broadcastName, logic, event, lObject, model, modelName, layerName, extra){ - // Safely broadcast the event - safeApply(scope, function(){ - var toSend = { - leafletEvent: event, - leafletObject: lObject, - modelName: modelName, - model: model - }; - if (isDefined(layerName)) - angular.extend(toSend, {layerName: layerName}); + EventsHelper.prototype.fire = function (scope, broadcastName, logic, event, lObject, model, modelName, layerName, extra) { + // Safely broadcast the event + safeApply(scope, function () { + var toSend = { + leafletEvent: event, + leafletObject: lObject, + modelName: modelName, + model: model + }; + if (isDefined(layerName)) angular.extend(toSend, { layerName: layerName }); - if (logic === "emit") { - scope.$emit(broadcastName, toSend); - } else { - $rootScope.$broadcast(broadcastName, toSend); - } - }); - }; + if (logic === "emit") { + scope.$emit(broadcastName, toSend); + } else { + $rootScope.$broadcast(broadcastName, toSend); + } + }); + }; - EventsHelper.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName, extra) { - var events = []; - var logic = 'emit'; - var _this = this; + EventsHelper.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName, extra) { + var events = []; + var logic = 'emit'; + var _this = this; - if (!isDefined(leafletScope.eventBroadcast)) { - // Backward compatibility, if no event-broadcast attribute, all events are broadcasted + if (!isDefined(leafletScope.eventBroadcast)) { + // Backward compatibility, if no event-broadcast attribute, all events are broadcasted + events = this.getAvailableEvents(); + } else if (!isObject(leafletScope.eventBroadcast)) { + // Not a valid object + $log.error(errorHeader + "event-broadcast must be an object check your model."); + } else { + // We have a possible valid object + if (!isDefined(leafletScope.eventBroadcast[_this.lObjectType])) { + // We do not have events enable/disable do we do nothing (all enabled by default) events = this.getAvailableEvents(); - } else if (!isObject(leafletScope.eventBroadcast)) { + } else if (!isObject(leafletScope.eventBroadcast[_this.lObjectType])) { // Not a valid object - $log.error(errorHeader + "event-broadcast must be an object check your model."); + $log.warn(errorHeader + 'event-broadcast.' + [_this.lObjectType] + ' must be an object check your model.'); } else { - // We have a possible valid object - if (!isDefined(leafletScope.eventBroadcast[_this.lObjectType])) { - // We do not have events enable/disable do we do nothing (all enabled by default) - events = this.getAvailableEvents(); - } else if (!isObject(leafletScope.eventBroadcast[_this.lObjectType])) { - // Not a valid object - $log.warn(errorHeader + 'event-broadcast.' + [_this.lObjectType] + ' must be an object check your model.'); - } else { - // We have a possible valid map object - // Event propadation logic - if (isDefined(leafletScope.eventBroadcast[this.lObjectType].logic)) { - // We take care of possible propagation logic - if (leafletScope.eventBroadcast[_this.lObjectType].logic !== "emit" && - leafletScope.eventBroadcast[_this.lObjectType].logic !== "broadcast") - $log.warn(errorHeader + "Available event propagation logic are: 'emit' or 'broadcast'."); - } - // Enable / Disable - var eventsEnable = false, eventsDisable = false; - if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].enable) && - isArray(leafletScope.eventBroadcast[_this.lObjectType].enable)) - eventsEnable = true; - if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].disable) && - isArray(leafletScope.eventBroadcast[_this.lObjectType].disable)) - eventsDisable = true; - - if (eventsEnable && eventsDisable) { - // Both are active, this is an error - $log.warn(errorHeader + "can not enable and disable events at the same time"); - } else if (!eventsEnable && !eventsDisable) { - // Both are inactive, this is an error - $log.warn(errorHeader + "must enable or disable events"); - } else { - // At this point the object is OK, lets enable or disable events - if (eventsEnable) { - // Enable events - leafletScope.eventBroadcast[this.lObjectType].enable.forEach(function(eventName){ - // Do we have already the event enabled? - if (events.indexOf(eventName) !== -1) { - // Repeated event, this is an error - $log.warn(errorHeader + "This event " + eventName + " is already enabled"); - } else { - // Does the event exists? - if (_this.getAvailableEvents().indexOf(eventName) === -1) { - // The event does not exists, this is an error - $log.warn(errorHeader + "This event " + eventName + " does not exist"); - } else { - // All ok enable the event - events.push(eventName); - } - } - }); - } else { - // Disable events - events = this.getAvailableEvents(); - leafletScope.eventBroadcast[_this.lObjectType].disable.forEach(function(eventName) { - var index = events.indexOf(eventName); - if (index === -1) { - // The event does not exist - $log.warn(errorHeader + "This event " + eventName + " does not exist or has been already disabled"); + // We have a possible valid map object + // Event propadation logic + if (isDefined(leafletScope.eventBroadcast[this.lObjectType].logic)) { + // We take care of possible propagation logic + if (leafletScope.eventBroadcast[_this.lObjectType].logic !== "emit" && leafletScope.eventBroadcast[_this.lObjectType].logic !== "broadcast") $log.warn(errorHeader + "Available event propagation logic are: 'emit' or 'broadcast'."); + } + // Enable / Disable + var eventsEnable = false, + eventsDisable = false; + if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].enable) && isArray(leafletScope.eventBroadcast[_this.lObjectType].enable)) eventsEnable = true; + if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].disable) && isArray(leafletScope.eventBroadcast[_this.lObjectType].disable)) eventsDisable = true; + if (eventsEnable && eventsDisable) { + // Both are active, this is an error + $log.warn(errorHeader + "can not enable and disable events at the same time"); + } else if (!eventsEnable && !eventsDisable) { + // Both are inactive, this is an error + $log.warn(errorHeader + "must enable or disable events"); + } else { + // At this point the object is OK, lets enable or disable events + if (eventsEnable) { + // Enable events + leafletScope.eventBroadcast[this.lObjectType].enable.forEach(function (eventName) { + // Do we have already the event enabled? + if (events.indexOf(eventName) !== -1) { + // Repeated event, this is an error + $log.warn(errorHeader + "This event " + eventName + " is already enabled"); + } else { + // Does the event exists? + if (_this.getAvailableEvents().indexOf(eventName) === -1) { + // The event does not exists, this is an error + $log.warn(errorHeader + "This event " + eventName + " does not exist"); } else { - events.splice(index, 1); + // All ok enable the event + events.push(eventName); } - }); - } + } + }); + } else { + // Disable events + events = this.getAvailableEvents(); + leafletScope.eventBroadcast[_this.lObjectType].disable.forEach(function (eventName) { + var index = events.indexOf(eventName); + if (index === -1) { + // The event does not exist + $log.warn(errorHeader + "This event " + eventName + " does not exist or has been already disabled"); + } else { + events.splice(index, 1); + } + }); } } } + } - events.forEach(function(eventName){ - lObject.on(eventName,_this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra)); - }); - return logic; - }; + events.forEach(function (eventName) { + lObject.on(eventName, _this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra)); + }); + return logic; + }; - return EventsHelper; -}]) -.service('leafletEventsHelpers', ["leafletEventsHelpersFactory", function(leafletEventsHelpersFactory){ + return EventsHelper; +}]).service('leafletEventsHelpers', ["leafletEventsHelpersFactory", function (leafletEventsHelpersFactory) { return new leafletEventsHelpersFactory(); }]); -angular.module('ui-leaflet') -.factory('leafletGeoJsonEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpersFactory", "leafletData", function ($rootScope, $q, leafletLogger, leafletHelpers, - leafletEventsHelpersFactory, leafletData) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletGeoJsonEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpersFactory", "leafletData", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletData) { var safeApply = leafletHelpers.safeApply, EventsHelper = leafletEventsHelpersFactory; - // $log = leafletLogger; + // $log = leafletLogger; - var GeoJsonEvents = function(){ - EventsHelper.call(this,'leafletDirectiveGeoJson', 'geojson'); + var GeoJsonEvents = function GeoJsonEvents() { + EventsHelper.call(this, 'leafletDirectiveGeoJson', 'geojson'); }; - GeoJsonEvents.prototype = new EventsHelper(); + GeoJsonEvents.prototype = new EventsHelper(); - GeoJsonEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { + GeoJsonEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { var base = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName), - _this = this; + _this = this; - return function(e){ + return function (e) { if (eventName === 'mouseout') { if (extra.resetStyleOnMouseout) { - leafletData.getGeoJSON(extra.mapId) - .then(function(leafletGeoJSON){ + leafletData.getGeoJSON(extra.mapId).then(function (leafletGeoJSON) { //this is broken on nested needs to traverse or user layerName (nested) - var lobj = layerName? leafletGeoJSON[layerName]: leafletGeoJSON; + var lobj = layerName ? leafletGeoJSON[layerName] : leafletGeoJSON; lobj.resetStyle(e.target); }); - } - safeApply(leafletScope, function() { + safeApply(leafletScope, function () { $rootScope.$broadcast(_this.rootBroadcastName + '.mouseout', e); }); } @@ -5202,118 +5096,61 @@ angular.module('ui-leaflet') }; }; - GeoJsonEvents.prototype.getAvailableEvents = function(){ return [ - 'click', - 'dblclick', - 'mouseover', - 'mouseout', - ]; + GeoJsonEvents.prototype.getAvailableEvents = function () { + return ['click', 'dblclick', 'mouseover', 'mouseout']; }; return new GeoJsonEvents(); }]); -angular.module('ui-leaflet') -.factory('leafletLabelEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpersFactory", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletLabelEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpersFactory", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory) { var Helpers = leafletHelpers, EventsHelper = leafletEventsHelpersFactory; - //$log = leafletLogger; + //$log = leafletLogger; - var LabelEvents = function(){ - EventsHelper.call(this,'leafletDirectiveLabel', 'markers'); - }; - LabelEvents.prototype = new EventsHelper(); + var LabelEvents = function LabelEvents() { + EventsHelper.call(this, 'leafletDirectiveLabel', 'markers'); + }; + LabelEvents.prototype = new EventsHelper(); - LabelEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { - var markerName = name.replace('markers.', ''); - return EventsHelper.prototype - .genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, markerName, model, layerName); - }; + LabelEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var markerName = name.replace('markers.', ''); + return EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, markerName, model, layerName); + }; - LabelEvents.prototype.getAvailableEvents = function(){ - return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseover', - 'mouseout', - 'contextmenu' - ]; - }; + LabelEvents.prototype.getAvailableEvents = function () { + return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu']; + }; - LabelEvents.prototype.genEvents = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { - var _this = this; - var labelEvents = this.getAvailableEvents(); - var scopeWatchName = Helpers.getObjectArrayPath("markers." + name); - labelEvents.forEach(function(eventName) { - lObject.label.on(eventName, _this.genDispatchEvent( - maybeMapId, eventName, logic, leafletScope, lObject.label, scopeWatchName, model, layerName)); - }); - }; + LabelEvents.prototype.genEvents = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var _this = this; + var labelEvents = this.getAvailableEvents(); + var scopeWatchName = Helpers.getObjectArrayPath("markers." + name); + labelEvents.forEach(function (eventName) { + lObject.label.on(eventName, _this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject.label, scopeWatchName, model, layerName)); + }); + }; - LabelEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {}; + LabelEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {}; - return new LabelEvents(); + return new LabelEvents(); }]); -angular.module('ui-leaflet') -.factory('leafletMapEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpers", "leafletIterators", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpers, leafletIterators) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletMapEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpers", "leafletIterators", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpers, leafletIterators) { var isDefined = leafletHelpers.isDefined, fire = leafletEventsHelpers.fire; - var _getAvailableMapEvents = function() { - return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseup', - 'mouseover', - 'mouseout', - 'mousemove', - 'contextmenu', - 'focus', - 'blur', - 'preclick', - 'load', - 'unload', - 'viewreset', - 'movestart', - 'move', - 'moveend', - 'dragstart', - 'drag', - 'dragend', - 'zoomstart', - 'zoomanim', - 'zoomend', - 'zoomlevelschange', - 'resize', - 'autopanstart', - 'layeradd', - 'layerremove', - 'baselayerchange', - 'overlayadd', - 'overlayremove', - 'locationfound', - 'locationerror', - 'popupopen', - 'popupclose', - 'draw:created', - 'draw:edited', - 'draw:deleted', - 'draw:drawstart', - 'draw:drawstop', - 'draw:editstart', - 'draw:editstop', - 'draw:deletestart', - 'draw:deletestop' - ]; + var _getAvailableMapEvents = function _getAvailableMapEvents() { + return ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'contextmenu', 'focus', 'blur', 'preclick', 'load', 'unload', 'viewreset', 'movestart', 'move', 'moveend', 'dragstart', 'drag', 'dragend', 'zoomstart', 'zoomanim', 'zoomend', 'zoomlevelschange', 'resize', 'autopanstart', 'layeradd', 'layerremove', 'baselayerchange', 'overlayadd', 'overlayremove', 'locationfound', 'locationerror', 'popupopen', 'popupclose', 'draw:created', 'draw:edited', 'draw:deleted', 'draw:drawstart', 'draw:drawstop', 'draw:editstart', 'draw:editstop', 'draw:deletestart', 'draw:deletestop']; }; - var _genDispatchMapEvent = function(scope, eventName, logic, maybeMapId) { - if (maybeMapId) - maybeMapId = maybeMapId + '.'; - return function(e) { + var _genDispatchMapEvent = function _genDispatchMapEvent(scope, eventName, logic, maybeMapId) { + if (maybeMapId) maybeMapId = maybeMapId + '.'; + return function (e) { // Put together broadcast name var broadcastName = 'leafletDirectiveMap.' + maybeMapId + eventName; leafletLogger.debug(broadcastName); @@ -5322,24 +5159,24 @@ angular.module('ui-leaflet') }; }; - var _notifyCenterChangedToBounds = function(scope) { + var _notifyCenterChangedToBounds = function _notifyCenterChangedToBounds(scope) { scope.$broadcast("boundsChanged"); }; - var _notifyCenterUrlHashChanged = function(scope, map, attrs, search) { + var _notifyCenterUrlHashChanged = function _notifyCenterUrlHashChanged(scope, map, attrs, search) { if (!isDefined(attrs.urlHashCenter)) { return; } var center = map.getCenter(); - var centerUrlHash = (center.lat).toFixed(4) + ":" + (center.lng).toFixed(4) + ":" + map.getZoom(); + var centerUrlHash = center.lat.toFixed(4) + ":" + center.lng.toFixed(4) + ":" + map.getZoom(); if (!isDefined(search.c) || search.c !== centerUrlHash) { //$log.debug("notified new center..."); scope.$emit("centerUrlHash", centerUrlHash); } }; - var _addEvents = function(map, mapEvents, contextName, scope, logic){ - leafletIterators.each(mapEvents, function(eventName) { + var _addEvents = function _addEvents(map, mapEvents, contextName, scope, logic) { + leafletIterators.each(mapEvents, function (eventName) { var context = {}; context[contextName] = eventName; map.on(eventName, _genDispatchMapEvent(scope, eventName, logic, map._container.id || ''), context); @@ -5355,8 +5192,9 @@ angular.module('ui-leaflet') }; }]); -angular.module('ui-leaflet') -.factory('leafletMarkerEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpersFactory", "leafletLabelEvents", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletLabelEvents) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletMarkerEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletEventsHelpersFactory", "leafletLabelEvents", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletLabelEvents) { var safeApply = leafletHelpers.safeApply, isDefined = leafletHelpers.isDefined, Helpers = leafletHelpers, @@ -5364,16 +5202,15 @@ angular.module('ui-leaflet') EventsHelper = leafletEventsHelpersFactory, $log = leafletLogger; - var MarkerEvents = function(){ - EventsHelper.call(this,'leafletDirectiveMarker', 'markers'); + var MarkerEvents = function MarkerEvents() { + EventsHelper.call(this, 'leafletDirectiveMarker', 'markers'); }; MarkerEvents.prototype = new EventsHelper(); - MarkerEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { - var handle = EventsHelper.prototype - .genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName); - return function(e){ + MarkerEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var handle = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName); + return function (e) { // Broadcast old marker click name for backwards compatibility if (eventName === "click") { safeApply(leafletScope, function () { @@ -5392,41 +5229,26 @@ angular.module('ui-leaflet') }; }; - MarkerEvents.prototype.getAvailableEvents = function(){ return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseover', - 'mouseout', - 'contextmenu', - 'dragstart', - 'drag', - 'dragend', - 'move', - 'remove', - 'popupopen', - 'popupclose', - 'touchend', - 'touchstart', - 'touchmove', - 'touchcancel', - 'touchleave' - ]; + MarkerEvents.prototype.getAvailableEvents = function () { + return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu', 'dragstart', 'drag', 'dragend', 'move', 'remove', 'popupopen', 'popupclose', 'touchend', 'touchstart', 'touchmove', 'touchcancel', 'touchleave']; }; MarkerEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) { - var logic = EventsHelper.prototype.bindEvents.call(this, maybeMapId, lObject, name, model, leafletScope, layerName); + var logic = EventsHelper.prototype.bindEvents.call(this, maybeMapId, lObject, name, model, leafletScope, layerName); - if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) { - lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model, layerName); - } + if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) { + lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model, layerName); + } }; return new MarkerEvents(); }]); -angular.module('ui-leaflet') -.factory('leafletPathEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletLabelEvents", "leafletEventsHelpers", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletLabelEvents, leafletEventsHelpers) { +'use strict'; + +function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } + +angular.module('ui-leaflet').factory('leafletPathEvents', ["$rootScope", "$q", "leafletLogger", "leafletHelpers", "leafletLabelEvents", "leafletEventsHelpers", function ($rootScope, $q, leafletLogger, leafletHelpers, leafletLabelEvents, leafletEventsHelpers) { var isDefined = leafletHelpers.isDefined, isObject = leafletHelpers.isObject, Helpers = leafletHelpers, @@ -5439,11 +5261,10 @@ angular.module('ui-leaflet') TODO (nmccready) This EventsHelper needs to be derrived from leafletEventsHelpers to elminate copy and paste code. */ - var _genDispatchPathEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var _genDispatchPathEvent = function _genDispatchPathEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { maybeMapId = maybeMapId || ''; - if (maybeMapId) - maybeMapId = '.' + maybeMapId; + if (maybeMapId) maybeMapId = '.' + maybeMapId; return function (e) { var broadcastName = 'leafletDirectivePath' + maybeMapId + '.' + eventName; @@ -5452,7 +5273,7 @@ angular.module('ui-leaflet') }; }; - var _bindPathEvents = function (maybeMapId, lObject, name, model, leafletScope) { + var _bindPathEvents = function _bindPathEvents(maybeMapId, lObject, name, model, leafletScope) { var pathEvents = [], i, eventName, @@ -5485,14 +5306,15 @@ angular.module('ui-leaflet') } } // Enable / Disable - var pathEventsEnable = false, pathEventsDisable = false; + var pathEventsEnable = false, + pathEventsDisable = false; if (leafletScope.eventBroadcast.path.enable !== undefined && leafletScope.eventBroadcast.path.enable !== null) { - if (typeof leafletScope.eventBroadcast.path.enable === 'object') { + if (_typeof(leafletScope.eventBroadcast.path.enable) === 'object') { pathEventsEnable = true; } } if (leafletScope.eventBroadcast.path.disable !== undefined && leafletScope.eventBroadcast.path.disable !== null) { - if (typeof leafletScope.eventBroadcast.path.disable === 'object') { + if (_typeof(leafletScope.eventBroadcast.path.disable) === 'object') { pathEventsDisable = true; } } @@ -5532,7 +5354,6 @@ angular.module('ui-leaflet') if (index === -1) { // The event does not exist $log.warn(errorHeader + "This event " + eventName + " does not exist or has been already disabled"); - } else { pathEvents.splice(index, 1); } @@ -5552,19 +5373,8 @@ angular.module('ui-leaflet') } }; - var _getAvailablePathEvents = function () { - return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseover', - 'mouseout', - 'contextmenu', - 'add', - 'remove', - 'popupopen', - 'popupclose' - ]; + var _getAvailablePathEvents = function _getAvailablePathEvents() { + return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu', 'add', 'remove', 'popupopen', 'popupclose']; }; return { diff --git a/dist/ui-leaflet.min.js b/dist/ui-leaflet.min.js deleted file mode 100644 index 61809260..00000000 --- a/dist/ui-leaflet.min.js +++ /dev/null @@ -1,39 +0,0 @@ -/**! - * The MIT License - * - * Copyright (c) the ui-leaflet Team, http://angular-ui.github.io/ui-leaflet - * - * Original Copyright (c) https://github.com/angular-ui/ui-leaflet - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * ui-leaflet - * https://github.com/angular-ui/ui-leaflet - * - * @authors https://github.com/angular-ui/ui-leaflet/graphs/contributors - */ - -/*! -* ui-leaflet 1.0.0 2015-11-03 -* ui-leaflet - An AngularJS directive to easily interact with Leaflet maps -* git: https://github.com/angular-ui/ui-leaflet -*/ -!function(angular){"use strict";angular.module("ui-leaflet",["nemLogging"]).directive("leaflet",["$q","leafletData","leafletMapDefaults","leafletHelpers","leafletMapEvents",function(a,b,c,d,e){return{restrict:"EA",replace:!0,scope:{center:"=",lfCenter:"=",defaults:"=",maxbounds:"=",bounds:"=",markers:"=",legend:"=",geojson:"=",paths:"=",tiles:"=",layers:"=",controls:"=",decorations:"=",eventBroadcast:"=",watchOptions:"="},transclude:!0,template:'
',controller:["$scope",function(b){this._leafletMap=a.defer(),this.getMap=function(){return this._leafletMap.promise},this.getLeafletScope=function(){return b}}],link:function(a,f,g,h){function i(){isNaN(g.width)?f.css("width",g.width):f.css("width",g.width+"px")}function j(){isNaN(g.height)?f.css("height",g.height):f.css("height",g.height+"px")}var k=d.isDefined,l=c.setDefaults(a.defaults,g.id),m=e.getAvailableMapEvents(),n=e.addEvents;a.mapId=g.id,b.setDirectiveControls({},g.id),k(g.width)&&(i(),a.$watch(function(){return f[0].getAttribute("width")},function(){i(),o.invalidateSize()})),k(g.height)&&(j(),a.$watch(function(){return f[0].getAttribute("height")},function(){j(),o.invalidateSize()}));var o=new L.Map(f[0],c.getMapCreationDefaults(g.id));if(h._leafletMap.resolve(o),k(g.center)||k(g.lfCenter)||o.setView([l.center.lat,l.center.lng],l.center.zoom),!k(g.tiles)&&!k(g.layers)){var p=L.tileLayer(l.tileLayer,l.tileLayerOptions);p.addTo(o),b.setTiles(p,g.id)}if(k(o.zoomControl)&&k(l.zoomControlPosition)&&o.zoomControl.setPosition(l.zoomControlPosition),k(o.zoomControl)&&l.zoomControl===!1&&o.zoomControl.removeFrom(o),k(o.zoomsliderControl)&&k(l.zoomsliderControl)&&l.zoomsliderControl===!1&&o.zoomsliderControl.removeFrom(o),!k(g.eventBroadcast)){var q="broadcast";n(o,m,"eventName",a,q)}o.whenReady(function(){b.setMap(o,g.id)}),a.$on("$destroy",function(){c.reset(),o.remove(),b.unresolveMap(g.id)}),a.$on("invalidateSize",function(){o.invalidateSize()})}}}]),angular.module("ui-leaflet").factory("leafletBoundsHelpers",["leafletLogger","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,f=b.isFunction,g=b.isDefined,h=a;return{createLeafletBounds:function(a){return c(a)?L.latLngBounds([a.southWest.lat,a.southWest.lng],[a.northEast.lat,a.northEast.lng]):void 0},isValidBounds:c,createBoundsFromArray:function(a){return d(a)&&2===a.length&&d(a[0])&&d(a[1])&&2===a[0].length&&2===a[1].length&&e(a[0][0])&&e(a[0][1])&&e(a[1][0])&&e(a[1][1])?{northEast:{lat:a[0][0],lng:a[0][1]},southWest:{lat:a[1][0],lng:a[1][1]}}:void h.error("[AngularJS - Leaflet] The bounds array is not valid.")},createBoundsFromLeaflet:function(a){if(!(g(a)&&f(a.getNorthEast)&&f(a.getSouthWest)))return void h.error("[AngularJS - Leaflet] The leaflet bounds is not valid object.");var b=a.getNorthEast(),c=a.getSouthWest();return{northEast:{lat:b.lat,lng:b.lng},southWest:{lat:c.lat,lng:c.lng}}}}}]),angular.module("ui-leaflet").factory("leafletControlHelpers",["$rootScope","leafletLogger","leafletHelpers","leafletLayerHelpers","leafletMapDefaults",function(a,b,c,d,e){var f=c.isDefined,g=c.isObject,h=d.createLayer,i={},j=c.errorHeader+" [Controls] ",k=b,l=function(a,b,c){var d=e.getDefaults(c);if(!d.controls.layers.visible)return!1;var h=!1;return g(a)&&Object.keys(a).forEach(function(b){var c=a[b];f(c.layerOptions)&&c.layerOptions.showOnSelector===!1||(h=!0)}),g(b)&&Object.keys(b).forEach(function(a){var c=b[a];f(c.layerParams)&&c.layerParams.showOnSelector===!1||(h=!0)}),h},m=function(a){var b=e.getDefaults(a),c={collapsed:b.controls.layers.collapsed,position:b.controls.layers.position,autoZIndex:!1};angular.extend(c,b.controls.layers.options);var d;return d=b.controls.layers&&f(b.controls.layers.control)?b.controls.layers.control.apply(this,[[],[],c]):new L.control.layers([],[],c)},n={draw:{isPluginLoaded:function(){return angular.isDefined(L.Control.Draw)?!0:(k.error(j+" Draw plugin is not loaded."),!1)},checkValidParams:function(){return!0},createControl:function(a){return new L.Control.Draw(a)}},scale:{isPluginLoaded:function(){return!0},checkValidParams:function(){return!0},createControl:function(a){return new L.control.scale(a)}},fullscreen:{isPluginLoaded:function(){return angular.isDefined(L.Control.Fullscreen)?!0:(k.error(j+" Fullscreen plugin is not loaded."),!1)},checkValidParams:function(){return!0},createControl:function(a){return new L.Control.Fullscreen(a)}},search:{isPluginLoaded:function(){return angular.isDefined(L.Control.Search)?!0:(k.error(j+" Search plugin is not loaded."),!1)},checkValidParams:function(){return!0},createControl:function(a){return new L.Control.Search(a)}},custom:{},minimap:{isPluginLoaded:function(){return angular.isDefined(L.Control.MiniMap)?!0:(k.error(j+" Minimap plugin is not loaded."),!1)},checkValidParams:function(a){return f(a.layer)?!0:(k.warn(j+' minimap "layer" option should be defined.'),!1)},createControl:function(a){var b=h(a.layer);return f(b)?new L.Control.MiniMap(b,a):void k.warn(j+' minimap control "layer" could not be created.')}}};return{layersControlMustBeVisible:l,isValidControlType:function(a){return-1!==Object.keys(n).indexOf(a)},createControl:function(a,b){return n[a].checkValidParams(b)?n[a].createControl(b):void 0},updateLayersControl:function(a,b,c,d,e,g){var h,j=i[b],k=l(d,e,b);if(f(j)&&c){for(h in g.baselayers)j.removeLayer(g.baselayers[h]);for(h in g.overlays)j.removeLayer(g.overlays[h]);a.removeControl(j),delete i[b]}if(k){j=m(b),i[b]=j;for(h in d){var n=f(d[h].layerOptions)&&d[h].layerOptions.showOnSelector===!1;!n&&f(g.baselayers[h])&&j.addBaseLayer(g.baselayers[h],d[h].name)}for(h in e){var o=f(e[h].layerParams)&&e[h].layerParams.showOnSelector===!1;!o&&f(g.overlays[h])&&j.addOverlay(g.overlays[h],e[h].name)}a.addControl(j)}return k}}}]),angular.module("ui-leaflet").service("leafletData",["leafletLogger","$q","leafletHelpers",function(a,b,c){var d=c.getDefer,e=c.getUnresolvedDefer,f=c.setResolvedDefer,g={},h=this,i=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},j=["map","tiles","layers","paths","markers","geoJSON","UTFGrid","decorations","directiveControls"];j.forEach(function(a){g[a]={}}),this.unresolveMap=function(a){var b=c.obtainEffectiveMapId(g.map,a);j.forEach(function(a){g[a][b]=void 0})},j.forEach(function(a){var b=i(a);h["set"+b]=function(b,c){var d=e(g[a],c);d.resolve(b),f(g[a],c)},h["get"+b]=function(b){var c=d(g[a],b);return c.promise}})}]),angular.module("ui-leaflet").service("leafletDirectiveControlsHelpers",["leafletLogger","leafletData","leafletHelpers",function(a,b,c){var d=c.isDefined,e=c.isString,f=c.isObject,g=c.errorHeader,h=a,i=g+"[leafletDirectiveControlsHelpers",j=function(a,c,g,j){var k=i+".extend] ",l={};if(!d(c))return void h.error(k+"thingToAddName cannot be undefined");if(e(c)&&d(g)&&d(j))l[c]={create:g,clean:j};else{if(!f(c)||d(g)||d(j))return void h.error(k+"incorrect arguments");l=c}b.getDirectiveControls().then(function(c){angular.extend(c,l),b.setDirectiveControls(c,a)})};return{extend:j}}]),angular.module("ui-leaflet").service("leafletGeoJsonHelpers",["leafletHelpers","leafletIterators",function(a,b){var c=a,d=b,e=function(a,b){return this.lat=a,this.lng=b,this},f=function(a){return Array.isArray(a)&&2===a.length?a[1]:c.isDefined(a.type)&&"Point"===a.type?+a.coordinates[1]:+a.lat},g=function(a){return Array.isArray(a)&&2===a.length?a[0]:c.isDefined(a.type)&&"Point"===a.type?+a.coordinates[0]:+a.lng},h=function(a){if(c.isUndefined(a))return!1;if(c.isArray(a)){if(2===a.length&&c.isNumber(a[0])&&c.isNumber(a[1]))return!0}else if(c.isDefined(a.type)&&"Point"===a.type&&c.isArray(a.coordinates)&&2===a.coordinates.length&&c.isNumber(a.coordinates[0])&&c.isNumber(a.coordinates[1]))return!0;var b=d.all(["lat","lng"],function(b){return c.isDefined(a[b])&&c.isNumber(a[b])});return b},i=function(a){if(a&&h(a)){var b=null;if(Array.isArray(a)&&2===a.length)b=new e(a[1],a[0]);else{if(!c.isDefined(a.type)||"Point"!==a.type)return a;b=new e(a.coordinates[1],a.coordinates[0])}return angular.extend(a,b)}};return{getLat:f,getLng:g,validateCoords:h,getCoords:i}}]),angular.module("ui-leaflet").service("leafletHelpers",["$q","$log",function(a,b){function c(a,c){var d,f;if(angular.isDefined(c))d=c;else if(0===Object.keys(a).length)d="main";else if(Object.keys(a).length>=1)for(f in a)a.hasOwnProperty(f)&&(d=f);else b.error(e+"- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call");return d}function d(b,d){var e,f=c(b,d);return angular.isDefined(b[f])&&b[f].resolvedDefer!==!0?e=b[f].defer:(e=a.defer(),b[f]={defer:e,resolvedDefer:!1}),e}var e="[AngularJS - Leaflet] ",f=angular.copy,g=f,h=function(a,b){var c;if(a&&angular.isObject(a))return null!==b&&angular.isString(b)?(c=a,b.split(".").forEach(function(a){c&&(c=c[a])}),c):b},i=function(a){return a.split(".").reduce(function(a,b){return a+'["'+b+'"]'})},j=function(a){return a.reduce(function(a,b){return a+"."+b})},k=function(a){return angular.isDefined(a)&&null!==a},l=function(a){return!k(a)},m=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/,o=/^((?:x|data)[\:\-_])/i,p=function(a){return a.replace(m,function(a,b,c,d){return d?c.toUpperCase():c}).replace(n,"Moz$1")},q=function(a){return p(a.replace(o,""))};return{camelCase:p,directiveNormalize:q,copy:f,clone:g,errorHeader:e,getObjectValue:h,getObjectArrayPath:i,getObjectDotPath:j,defaultTo:function(a,b){return k(a)?a:b},isTruthy:function(a){return"true"===a||a===!0},isEmpty:function(a){return 0===Object.keys(a).length},isUndefinedOrEmpty:function(a){return angular.isUndefined(a)||null===a||0===Object.keys(a).length},isDefined:k,isUndefined:l,isNumber:angular.isNumber,isString:angular.isString,isArray:angular.isArray,isObject:angular.isObject,isFunction:angular.isFunction,equals:angular.equals,isValidCenter:function(a){return angular.isDefined(a)&&angular.isNumber(a.lat)&&angular.isNumber(a.lng)&&angular.isNumber(a.zoom)},isValidPoint:function(a){return angular.isDefined(a)?angular.isArray(a)?2===a.length&&angular.isNumber(a[0])&&angular.isNumber(a[1]):angular.isNumber(a.lat)&&angular.isNumber(a.lng):!1},isSameCenterOnMap:function(a,b){var c=b.getCenter(),d=b.getZoom();return a.lat&&a.lng&&c.lat.toFixed(4)===a.lat.toFixed(4)&&c.lng.toFixed(4)===a.lng.toFixed(4)&&d===a.zoom?!0:!1},safeApply:function(a,b){var c=a.$root.$$phase;"$apply"===c||"$digest"===c?a.$eval(b):a.$evalAsync(b)},obtainEffectiveMapId:c,getDefer:function(a,b){var e,f=c(a,b);return e=angular.isDefined(a[f])&&a[f].resolvedDefer!==!1?a[f].defer:d(a,b)},getUnresolvedDefer:d,setResolvedDefer:function(a,b){var d=c(a,b);a[d].resolvedDefer=!0},rangeIsSupported:function(){var a=document.createElement("input");return a.setAttribute("type","range"),"range"===a.type},FullScreenControlPlugin:{isLoaded:function(){return angular.isDefined(L.Control.Fullscreen)}},MiniMapControlPlugin:{isLoaded:function(){return angular.isDefined(L.Control.MiniMap)}},AwesomeMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.AwesomeMarkers)&&angular.isDefined(L.AwesomeMarkers.Icon)},is:function(a){return this.isLoaded()?a instanceof L.AwesomeMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},VectorMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.VectorMarkers)&&angular.isDefined(L.VectorMarkers.Icon)},is:function(a){return this.isLoaded()?a instanceof L.VectorMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},DomMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.DomMarkers)&&angular.isDefined(L.DomMarkers.Icon)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.DomMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},PolylineDecoratorPlugin:{isLoaded:function(){return angular.isDefined(L.PolylineDecorator)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.PolylineDecorator:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},MakiMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.MakiMarkers)&&angular.isDefined(L.MakiMarkers.Icon)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.MakiMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},ExtraMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.ExtraMarkers)&&angular.isDefined(L.ExtraMarkers.Icon)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.ExtraMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},LabelPlugin:{isLoaded:function(){return angular.isDefined(L.Label)},is:function(a){return this.isLoaded()?a instanceof L.MarkerClusterGroup:!1}},MarkerClusterPlugin:{isLoaded:function(){return angular.isDefined(L.MarkerClusterGroup)},is:function(a){return this.isLoaded()?a instanceof L.MarkerClusterGroup:!1}},GoogleLayerPlugin:{isLoaded:function(){return angular.isDefined(L.Google)},is:function(a){return this.isLoaded()?a instanceof L.Google:!1}},LeafletProviderPlugin:{isLoaded:function(){return angular.isDefined(L.TileLayer.Provider)},is:function(a){return this.isLoaded()?a instanceof L.TileLayer.Provider:!1}},ChinaLayerPlugin:{isLoaded:function(){return angular.isDefined(L.tileLayer.chinaProvider)}},HeatLayerPlugin:{isLoaded:function(){return angular.isDefined(L.heatLayer)}},WebGLHeatMapLayerPlugin:{isLoaded:function(){return angular.isDefined(L.TileLayer.WebGLHeatMap)}},BingLayerPlugin:{isLoaded:function(){return angular.isDefined(L.BingLayer)},is:function(a){return this.isLoaded()?a instanceof L.BingLayer:!1}},WFSLayerPlugin:{isLoaded:function(){return void 0!==L.GeoJSON.WFS},is:function(a){return this.isLoaded()?a instanceof L.GeoJSON.WFS:!1}},AGSBaseLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.basemapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.basemapLayer:!1}},AGSLayerPlugin:{isLoaded:function(){return void 0!==lvector&&void 0!==lvector.AGS},is:function(a){return this.isLoaded()?a instanceof lvector.AGS:!1}},AGSFeatureLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.featureLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.featureLayer:!1}},AGSTiledMapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.tiledMapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.tiledMapLayer:!1}},AGSDynamicMapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.dynamicMapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.dynamicMapLayer:!1}},AGSImageMapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.imageMapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.imageMapLayer:!1}},AGSClusteredLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.clusteredFeatureLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.clusteredFeatureLayer:!1}},AGSHeatmapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.heatmapFeatureLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.heatmapFeatureLayer:!1}},YandexLayerPlugin:{isLoaded:function(){return angular.isDefined(L.Yandex)},is:function(a){return this.isLoaded()?a instanceof L.Yandex:!1}},GeoJSONPlugin:{isLoaded:function(){return angular.isDefined(L.TileLayer.GeoJSON)},is:function(a){return this.isLoaded()?a instanceof L.TileLayer.GeoJSON:!1}},UTFGridPlugin:{isLoaded:function(){return angular.isDefined(L.UtfGrid)},is:function(a){return this.isLoaded()?a instanceof L.UtfGrid:(b.error("[AngularJS - Leaflet] No UtfGrid plugin found."),!1)}},CartoDB:{isLoaded:function(){return cartodb},is:function(){return!0}},Leaflet:{DivIcon:{is:function(a){return a instanceof L.DivIcon},equal:function(a,b){return this.is(a)?angular.equals(a,b):!1}},Icon:{is:function(a){return a instanceof L.Icon},equal:function(a,b){return this.is(a)?angular.equals(a,b):!1}}},watchOptions:{type:"watchDeep",individual:{type:"watchDeep"}}}}]),angular.module("ui-leaflet").service("leafletIterators",["leafletLogger","leafletHelpers",function(a,b){var c,d=b,e=b.errorHeader+"leafletIterators: ",f=Object.keys,g=d.isFunction,h=d.isObject,i=a,j=Math.pow(2,53)-1,k=function(a){var b=null!==a&&a.length;return d.isNumber(b)&&b>=0&&j>=b},l=function(a){return a},m=function(a){return function(b){return null===b?void 0:b[a]}},n=function(a,b,c){if(void 0===b)return a;switch(null===c?3:c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)}}return function(){return a.apply(b,arguments)}},o=function(a,b){return function(c){var d=arguments.length;if(2>d||null===c)return c;for(var e=1;d>e;e++)for(var f=arguments[e],g=a(f),h=g.length,i=0;h>i;i++){var j=g[i];b&&void 0!==c[j]||(c[j]=f[j])}return c}},p=null;c=p=o(f);var q,r=function(a,b){var c=f(b),d=c.length;if(null===a)return!d;for(var e=Object(a),g=0;d>g;g++){var h=c[g];if(b[h]!==e[h]||!(h in e))return!1}return!0},s=null;q=s=function(a){return a=c({},a),function(b){return r(b,a)}};var t,u=function(a,b,c){return null===a?l:g(a)?n(a,b,c):h(a)?q(a):m(a)},v=null;t=v=function(a,b,c){b=u(b,c);for(var d=!k(a)&&f(a),e=(d||a).length,g=0;e>g;g++){var h=d?d[g]:g;if(!b(a[h],h,a))return!1}return!0};var w=function(a,b,c,f){return c||d.isDefined(a)&&d.isDefined(b)?d.isFunction(b)?!1:(f=d.defaultTo(b,"cb"),i.error(e+f+" is not a function"),!0):!0},x=function(a,b,c){if(!w(void 0,c,!0,"internalCb")&&!w(a,b))for(var d in a)a.hasOwnProperty(d)&&c(a[d],d)},y=function(a,b){x(a,b,function(a,c){b(a,c)})};return{each:y,forEach:y,every:t,all:v}}]),angular.module("ui-leaflet").factory("leafletLayerHelpers",["$rootScope","$q","leafletLogger","leafletHelpers","leafletIterators",function($rootScope,$q,leafletLogger,leafletHelpers,leafletIterators){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].mustHaveData&&!isDefined(a.data)?($log.error('[AngularJS - Leaflet] The base layer must have a "data" array attribute'),!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):layerTypes[a.type].mustHaveKey&&!isDefined(a.key)?($log.error("[AngularJS - Leaflet] The type of layer "+a.type+" must have key defined"),!1):!0:($log.error("[AngularJS - Leaflet] A layer must have a valid type defined."),!1)}function createLayer(a){if(isValidLayerType(a)){if(!isString(a.name))return void $log.error("[AngularJS - Leaflet] A base layer must have a name");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,data:a.data,options:a.layerOptions,layer:a.layer,icon:a.icon,type:a.layerType,bounds:a.bounds,key:a.key,apiKey:a.apiKey,pluginOptions:a.pluginOptions,user:a.user};return layerTypes[a.type].createLayer(c)}}function safeAddLayer(a,b){b&&"function"==typeof b.addTo?b.addTo(a):a.addLayer(b)}function safeRemoveLayer(a,b,c){if(isDefined(c)&&isDefined(c.loadedDefer))if(angular.isFunction(c.loadedDefer)){var d=c.loadedDefer();$log.debug("Loaded Deferred",d);var e=d.length;if(e>0)for(var f=function(){e--,0===e&&a.removeLayer(b)},g=0;g0&&g(b)},function(a){c.shift(),d.d.reject(a),c.length>0&&g(b)})},h=function(a,b,c,d){if(a.innerHTML="",b.error)a.innerHTML+='
'+b.error.message+"
";else if("arcgis"===c)for(var e=0;e'+f.layerName+"";for(var g=0;g
'+h.label+"
"}}else"image"===c&&(a.innerHTML='')},i=function(a,b,c,d){return function(){var e=L.DomUtil.create("div",b);return L.Browser.touch?L.DomEvent.on(e,"click",L.DomEvent.stopPropagation):(L.DomEvent.disableClickPropagation(e),L.DomEvent.on(e,"mousewheel",L.DomEvent.stopPropagation)),h(e,a,c,d),e}},j=function(a,b){return function(){for(var c=L.DomUtil.create("div",b),d=0;d
'+a.labels[d]+"
";return L.Browser.touch?L.DomEvent.on(c,"click",L.DomEvent.stopPropagation):(L.DomEvent.disableClickPropagation(c),L.DomEvent.on(c,"mousewheel",L.DomEvent.stopPropagation)),c}};return{getOnAddLegend:i,getOnAddArrayLegend:j,updateLegend:h,addLegendURL:function(a,c){var d=b.defer();return f(e[a])||(e[a]=[]),e[a].push({c:c,d:d}),1===e[a].length&&g(a),d.promise}}}]),angular.module("ui-leaflet").factory("leafletMapDefaults",["$q","leafletHelpers",function(a,b){function c(){return{keyboard:!0,dragging:!0,worldCopyJump:!1,doubleClickZoom:!0,scrollWheelZoom:!0,tap:!0,touchZoom:!0,zoomControl:!0,zoomsliderControl:!1,zoomControlPosition:"topleft",attributionControl:!0,controls:{layers:{visible:!0,position:"topright",collapsed:!0}},nominatim:{server:" http://nominatim.openstreetmap.org/search"},crs:L.CRS.EPSG3857,tileLayer:"//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",tileLayerOptions:{attribution:'© OpenStreetMap contributors'},path:{weight:10,opacity:1,color:"#0000ff"},center:{lat:0,lng:0,zoom:1}}}var d=b.isDefined,e=b.isObject,f=b.obtainEffectiveMapId,g={};return{reset:function(){g={}},getDefaults:function(a){var b=f(g,a);return g[b]},getMapCreationDefaults:function(a){var b=f(g,a),c=g[b],e={maxZoom:c.maxZoom,keyboard:c.keyboard,dragging:c.dragging,zoomControl:c.zoomControl,doubleClickZoom:c.doubleClickZoom,scrollWheelZoom:c.scrollWheelZoom,tap:c.tap,touchZoom:c.touchZoom,attributionControl:c.attributionControl,worldCopyJump:c.worldCopyJump,crs:c.crs};if(d(c.minZoom)&&(e.minZoom=c.minZoom),d(c.zoomAnimation)&&(e.zoomAnimation=c.zoomAnimation),d(c.fadeAnimation)&&(e.fadeAnimation=c.fadeAnimation),d(c.markerZoomAnimation)&&(e.markerZoomAnimation=c.markerZoomAnimation),c.map)for(var h in c.map)e[h]=c.map[h];return e},setDefaults:function(a,b){var h=c();d(a)&&(h.doubleClickZoom=d(a.doubleClickZoom)?a.doubleClickZoom:h.doubleClickZoom,h.scrollWheelZoom=d(a.scrollWheelZoom)?a.scrollWheelZoom:h.doubleClickZoom,h.tap=d(a.tap)?a.tap:h.tap,h.touchZoom=d(a.touchZoom)?a.touchZoom:h.doubleClickZoom,h.zoomControl=d(a.zoomControl)?a.zoomControl:h.zoomControl,h.zoomsliderControl=d(a.zoomsliderControl)?a.zoomsliderControl:h.zoomsliderControl,h.attributionControl=d(a.attributionControl)?a.attributionControl:h.attributionControl,h.tileLayer=d(a.tileLayer)?a.tileLayer:h.tileLayer,h.zoomControlPosition=d(a.zoomControlPosition)?a.zoomControlPosition:h.zoomControlPosition,h.keyboard=d(a.keyboard)?a.keyboard:h.keyboard,h.dragging=d(a.dragging)?a.dragging:h.dragging,d(a.controls)&&angular.extend(h.controls,a.controls),e(a.crs)?h.crs=a.crs:d(L.CRS[a.crs])&&(h.crs=L.CRS[a.crs]),d(a.center)&&angular.copy(a.center,h.center),d(a.tileLayerOptions)&&angular.copy(a.tileLayerOptions,h.tileLayerOptions),d(a.maxZoom)&&(h.maxZoom=a.maxZoom),d(a.minZoom)&&(h.minZoom=a.minZoom),d(a.zoomAnimation)&&(h.zoomAnimation=a.zoomAnimation),d(a.fadeAnimation)&&(h.fadeAnimation=a.fadeAnimation),d(a.markerZoomAnimation)&&(h.markerZoomAnimation=a.markerZoomAnimation),d(a.worldCopyJump)&&(h.worldCopyJump=a.worldCopyJump), -d(a.map)&&(h.map=a.map),d(a.path)&&(h.path=a.path));var i=f(g,b);return g[i]=h,h}}}]),angular.module("ui-leaflet").service("leafletMarkersHelpers",["$rootScope","$timeout","leafletHelpers","leafletLogger","$compile","leafletGeoJsonHelpers","leafletWatchHelpers",function(a,b,c,d,e,f,g){var h=c.isDefined,i=c.defaultTo,j=c.MarkerClusterPlugin,k=c.AwesomeMarkersPlugin,l=c.VectorMarkersPlugin,m=c.MakiMarkersPlugin,n=c.ExtraMarkersPlugin,o=c.DomMarkersPlugin,p=c.safeApply,q=c,r=c.isString,s=c.isNumber,t=c.isObject,u={},v=f,w=c.errorHeader,x=g.maybeWatch,y=d,z=function(a){var b="";return["_icon","_latlng","_leaflet_id","_map","_shadow"].forEach(function(c){b+=c+": "+i(a[c],"undefined")+" \n"}),"[leafletMarker] : \n"+b},A=function(a,b){var c=b?console:y;c.debug(z(a))},B=function(b){if(h(b)&&h(b.type)&&"awesomeMarker"===b.type)return k.isLoaded()||y.error(w+" The AwesomeMarkers Plugin is not loaded."),new L.AwesomeMarkers.icon(b);if(h(b)&&h(b.type)&&"vectorMarker"===b.type)return l.isLoaded()||y.error(w+" The VectorMarkers Plugin is not loaded."),new L.VectorMarkers.icon(b);if(h(b)&&h(b.type)&&"makiMarker"===b.type)return m.isLoaded()||y.error(w+"The MakiMarkers Plugin is not loaded."),new L.MakiMarkers.icon(b);if(h(b)&&h(b.type)&&"extraMarker"===b.type)return n.isLoaded()||y.error(w+"The ExtraMarkers Plugin is not loaded."),new L.ExtraMarkers.icon(b);if(h(b)&&h(b.type)&&"div"===b.type)return new L.divIcon(b);if(h(b)&&h(b.type)&&"dom"===b.type){o.isLoaded()||y.error(w+"The DomMarkers Plugin is not loaded.");var c=angular.isFunction(b.getMarkerScope)?b.getMarkerScope():a,d=e(b.template)(c),f=angular.copy(b);return f.element=d[0],new L.DomMarkers.icon(f)}if(h(b)&&h(b.type)&&"icon"===b.type)return b.icon;var g="data:image/png;base64,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",i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAC5ElEQVRYw+2YW4/TMBCF45S0S1luXZCABy5CgLQgwf//S4BYBLTdJLax0fFqmB07nnQfEGqkIydpVH85M+NLjPe++dcPc4Q8Qh4hj5D/AaQJx6H/4TMwB0PeBNwU7EGQAmAtsNfAzoZkgIa0ZgLMa4Aj6CxIAsjhjOCoL5z7Glg1JAOkaicgvQBXuncwJAWjksLtBTWZe04CnYRktUGdilALppZBOgHGZcBzL6OClABvMSVIzyBjazOgrvACf1ydC5mguqAVg6RhdkSWQFj2uxfaq/BrIZOLEWgZdALIDvcMcZLD8ZbLC9de4yR1sYMi4G20S4Q/PWeJYxTOZn5zJXANZHIxAd4JWhPIloTJZhzMQduM89WQ3MUVAE/RnhAXpTycqys3NZALOBbB7kFrgLesQl2h45Fcj8L1tTSohUwuxhy8H/Qg6K7gIs+3kkaigQCOcyEXCHN07wyQazhrmIulvKMQAwMcmLNqyCVyMAI+BuxSMeTk3OPikLY2J1uE+VHQk6ANrhds+tNARqBeaGc72cK550FP4WhXmFmcMGhTwAR1ifOe3EvPqIegFmF+C8gVy0OfAaWQPMR7gF1OQKqGoBjq90HPMP01BUjPOqGFksC4emE48tWQAH0YmvOgF3DST6xieJgHAWxPAHMuNhrImIdvoNOKNWIOcE+UXE0pYAnkX6uhWsgVXDxHdTfCmrEEmMB2zMFimLVOtiiajxiGWrbU52EeCdyOwPEQD8LqyPH9Ti2kgYMf4OhSKB7qYILbBv3CuVTJ11Y80oaseiMWOONc/Y7kJYe0xL2f0BaiFTxknHO5HaMGMublKwxFGzYdWsBF174H/QDknhTHmHHN39iWFnkZx8lPyM8WHfYELmlLKtgWNmFNzQcC1b47gJ4hL19i7o65dhH0Negbca8vONZoP7doIeOC9zXm8RjuL0Gf4d4OYaU5ljo3GYiqzrWQHfJxA6ALhDpVKv9qYeZA8eM3EhfPSCmpuD0AAAAASUVORK5CYII=";return h(b)&&h(b.iconUrl)?new L.Icon(b):new L.Icon.Default({iconUrl:g,shadowUrl:i,iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]})},C=function(a){h(u[a])&&u.splice(a,1)},D=function(){u={}},E=function(a,b,c){if(a.closePopup(),h(c)&&h(c.overlays))for(var d in c.overlays)if((c.overlays[d]instanceof L.LayerGroup||c.overlays[d]instanceof L.FeatureGroup)&&c.overlays[d].hasLayer(a))return void c.overlays[d].removeLayer(a);if(h(u))for(var e in u)u[e].hasLayer(a)&&u[e].removeLayer(a);b.hasLayer(a)&&b.removeLayer(a)},F=function(a,b){var c=a._popup._container.offsetHeight,d=new L.Point(a._popup._containerLeft,-c-a._popup._containerBottom),e=b.layerPointToContainerPoint(d);null!==e&&a._popup._adjustPan()},G=function(a,b){e(a._popup._contentNode)(b)},H=function(a,c,d){var e=a._popup._contentNode.innerText||a._popup._contentNode.textContent;e.length<1&&b(function(){H(a,c,d)});var f=a._popup._contentNode.offsetWidth;return a._popup._updateLayout(),a._popup._updatePosition(),a._popup.options.autoPan&&F(a,d),f},I=function(b,c,d){var e=angular.isFunction(c.getMessageScope)?c.getMessageScope():a,f=h(c.compileMessage)?c.compileMessage:!0;if(f){if(!h(b._popup)||!h(b._popup._contentNode))return y.error(w+"Popup is invalid or does not have any content."),!1;G(b,e),H(b,c,d)}},J=function(b,c){var d=angular.isFunction(c.getMessageScope)?c.getMessageScope():a,f=angular.isFunction(c.getLabelScope)?c.getLabelScope():d,g=h(c.compileMessage)?c.compileMessage:!0;q.LabelPlugin.isLoaded()&&h(c.label)&&(h(c.label.options)&&c.label.options.noHide===!0&&b.showLabel(),g&&h(b.label)&&e(b.label._container)(f))},K=function(a,b,c,d,e,f,g){if(h(b)){if(!v.validateCoords(a))return y.warn("There are problems with lat-lng data, please verify your marker model"),void E(c,g,f);var i=a===b;if(h(a.iconAngle)&&b.iconAngle!==a.iconAngle&&c.setIconAngle(a.iconAngle),r(a.layer)||r(b.layer)&&(h(f.overlays[b.layer])&&f.overlays[b.layer].hasLayer(c)&&(f.overlays[b.layer].removeLayer(c),c.closePopup()),g.hasLayer(c)||g.addLayer(c)),(s(a.opacity)||s(parseFloat(a.opacity)))&&a.opacity!==b.opacity&&c.setOpacity(a.opacity),r(a.layer)&&b.layer!==a.layer){if(r(b.layer)&&h(f.overlays[b.layer])&&f.overlays[b.layer].hasLayer(c)&&f.overlays[b.layer].removeLayer(c),c.closePopup(),g.hasLayer(c)&&g.removeLayer(c),!h(f.overlays[a.layer]))return void y.error(w+"You must use a name of an existing layer");var j=f.overlays[a.layer];if(!(j instanceof L.LayerGroup||j instanceof L.FeatureGroup))return void y.error(w+'A marker can only be added to a layer of type "group" or "featureGroup"');j.addLayer(c),g.hasLayer(c)&&a.focus===!0&&c.openPopup()}if(a.draggable!==!0&&b.draggable===!0&&h(c.dragging)&&c.dragging.disable(),a.draggable===!0&&b.draggable!==!0&&(c.dragging?c.dragging.enable():L.Handler.MarkerDrag&&(c.dragging=new L.Handler.MarkerDrag(c),c.options.draggable=!0,c.dragging.enable())),t(a.icon)||t(b.icon)&&(c.setIcon(B()),c.closePopup(),c.unbindPopup(),r(a.message)&&c.bindPopup(a.message,a.popupOptions)),t(a.icon)&&t(b.icon)&&!angular.equals(a.icon,b.icon)){var k=!1;c.dragging&&(k=c.dragging.enabled()),c.setIcon(B(a.icon)),k&&c.dragging.enable(),c.closePopup(),c.unbindPopup(),r(a.message)&&(c.bindPopup(a.message,a.popupOptions),g.hasLayer(c)&&a.focus===!0&&c.openPopup())}!r(a.message)&&r(b.message)&&(c.closePopup(),c.unbindPopup()),q.LabelPlugin.isLoaded()&&(h(a.label)&&h(a.label.message)?"label"in b&&"message"in b.label&&!angular.equals(a.label.message,b.label.message)?c.updateLabelContent(a.label.message):!angular.isFunction(c.getLabel)||angular.isFunction(c.getLabel)&&!h(c.getLabel())?(c.bindLabel(a.label.message,a.label.options),J(c,a)):J(c,a):(!("label"in a)||"message"in a.label)&&angular.isFunction(c.unbindLabel)&&c.unbindLabel()),r(a.message)&&!r(b.message)&&c.bindPopup(a.message,a.popupOptions),r(a.message)&&r(b.message)&&a.message!==b.message&&c.setPopupContent(a.message);var l=!1;a.focus!==!0&&b.focus===!0&&(c.closePopup(),l=!0),(a.focus===!0&&(!h(b.focus)||b.focus===!1)||i&&a.focus===!0)&&(c.openPopup(),l=!0),b.zIndexOffset!==a.zIndexOffset&&c.setZIndexOffset(a.zIndexOffset);var m=c.getLatLng(),n=r(a.layer)&&q.MarkerClusterPlugin.is(f.overlays[a.layer]);n?l?(a.lat!==b.lat||a.lng!==b.lng)&&(f.overlays[a.layer].removeLayer(c),c.setLatLng([a.lat,a.lng]),f.overlays[a.layer].addLayer(c)):m.lat!==a.lat||m.lng!==a.lng?(f.overlays[a.layer].removeLayer(c),c.setLatLng([a.lat,a.lng]),f.overlays[a.layer].addLayer(c)):a.lat!==b.lat||a.lng!==b.lng?(f.overlays[a.layer].removeLayer(c),c.setLatLng([a.lat,a.lng]),f.overlays[a.layer].addLayer(c)):t(a.icon)&&t(b.icon)&&!angular.equals(a.icon,b.icon)&&(f.overlays[a.layer].removeLayer(c),f.overlays[a.layer].addLayer(c)):(m.lat!==a.lat||m.lng!==a.lng)&&c.setLatLng([a.lat,a.lng])}},M=function(a,b){return h(a)?b?a[b]:a:void 0},N=function(a,b,c){return h(a)?b?c?a[c][b]:a[b]:void y.error(w+"marker id missing in getMarker"):void 0};return{resetMarkerGroup:C,resetMarkerGroups:D,deleteMarker:E,manageOpenPopup:I,manageOpenLabel:J,createMarker:function(a){if(!h(a)||!v.validateCoords(a))return void y.error(w+"The marker definition is not valid.");var b=v.getCoords(a);if(!h(b))return void y.error(w+"Unable to get coordinates from markerData.");var c={icon:B(a.icon),title:h(a.title)?a.title:"",draggable:h(a.draggable)?a.draggable:!1,clickable:h(a.clickable)?a.clickable:!0,riseOnHover:h(a.riseOnHover)?a.riseOnHover:!1,zIndexOffset:h(a.zIndexOffset)?a.zIndexOffset:0,iconAngle:h(a.iconAngle)?a.iconAngle:0};for(var d in a)a.hasOwnProperty(d)&&!c.hasOwnProperty(d)&&(c[d]=a[d]);var e=new L.marker(b,c);return r(a.message)||e.unbindPopup(),e},addMarkerToGroup:function(a,b,c,d){return r(b)?j.isLoaded()?(h(u[b])||(u[b]=new L.MarkerClusterGroup(c),d.addLayer(u[b])),void u[b].addLayer(a)):void y.error(w+"The MarkerCluster plugin is not loaded."):void y.error(w+"The marker group you have specified is invalid.")},listenMarkerEvents:function(a,b,c,d,e){a.on("popupopen",function(){p(c,function(){(h(a._popup)||h(a._popup._contentNode))&&(b.focus=!0,I(a,b,e))})}),a.on("popupclose",function(){p(c,function(){b.focus=!1})}),a.on("add",function(){p(c,function(){"label"in b&&J(a,b)})})},updateMarker:K,addMarkerWatcher:function(a,b,c,d,e,f){var g=q.getObjectArrayPath("markers."+b);x(c,g,f,function(f,g,i){return h(f)?void K(f,g,a,b,c,d,e):(E(a,e,d),void i())})},string:z,log:A,getModelFromModels:N,getLayerModels:M}}]),angular.module("ui-leaflet").factory("leafletPathsHelpers",["$rootScope","leafletLogger","leafletHelpers",function(a,b,c){function d(a){return a.filter(function(a){return k(a)}).map(function(a){return e(a)})}function e(a){return i(a)?new L.LatLng(a[0],a[1]):new L.LatLng(a.lat,a.lng)}function f(a){return a.map(function(a){return d(a)})}function g(a,b){for(var c={},d=0;d0&&e(a[0].boundingbox)?i.resolve(a[0]):i.reject("[Nominatim] Invalid address")}),i.promise}}}]),angular.module("ui-leaflet").directive("bounds",["leafletLogger","$timeout","$http","leafletHelpers","nominatimService","leafletBoundsHelpers",function(a,b,c,d,e,f){var g=a;return{restrict:"A",scope:!1,replace:!1,require:["leaflet"],link:function(a,c,h,i){var j=d.isDefined,k=f.createLeafletBounds,l=i[0].getLeafletScope(),m=i[0],n=d.errorHeader+" [Bounds] ",o=function(a){return 0===a._southWest.lat&&0===a._southWest.lng&&0===a._northEast.lat&&0===a._northEast.lng};m.getMap().then(function(c){l.$on("boundsChanged",function(a){var d=a.currentScope,e=c.getBounds();if(!o(e)&&!d.settingBoundsFromScope){d.settingBoundsFromLeaflet=!0;var f={northEast:{lat:e._northEast.lat,lng:e._northEast.lng},southWest:{lat:e._southWest.lat,lng:e._southWest.lng},options:e.options};angular.equals(d.bounds,f)||(d.bounds=f),b(function(){d.settingBoundsFromLeaflet=!1})}});var d;l.$watch("bounds",function(f){if(!a.settingBoundsFromLeaflet){if(j(f.address)&&f.address!==d)return a.settingBoundsFromScope=!0,e.query(f.address,h.id).then(function(a){var b=a.boundingbox,d=[[b[0],b[2]],[b[1],b[3]]];c.fitBounds(d)},function(a){g.error(n+" "+a+".")}),d=f.address,void b(function(){a.settingBoundsFromScope=!1});var i=k(f);i&&!c.getBounds().equals(i)&&(a.settingBoundsFromScope=!0,c.fitBounds(i,f.options),b(function(){a.settingBoundsFromScope=!1}))}},!0)})}}}]);var centerDirectiveTypes=["center","lfCenter"],centerDirectives={};centerDirectiveTypes.forEach(function(a){centerDirectives[a]=["leafletLogger","$q","$location","$timeout","leafletMapDefaults","leafletHelpers","leafletBoundsHelpers","leafletMapEvents",function(b,c,d,e,f,g,h,i){var j,k=g.isDefined,l=g.isNumber,m=g.isSameCenterOnMap,n=g.safeApply,o=g.isValidCenter,p=h.isValidBounds,q=g.isUndefinedOrEmpty,r=g.errorHeader,s=b,t=function(a,b){return k(a)&&p(a)&&q(b)};return{restrict:"A",scope:!1,replace:!1,require:"leaflet",controller:function(){j=c.defer(),this.getCenter=function(){return j.promise}},link:function(b,c,g,p){var q=p.getLeafletScope(),u=q[a];p.getMap().then(function(b){var c=f.getDefaults(g.id);if(-1!==g[a].search("-"))return s.error(r+' The "center" variable can\'t use a "-" on its key name: "'+g[a]+'".'),void b.setView([c.center.lat,c.center.lng],c.center.zoom);if(t(q.bounds,u))b.fitBounds(h.createLeafletBounds(q.bounds),q.bounds.options),u=b.getCenter(),n(q,function(c){angular.extend(c[a],{lat:b.getCenter().lat,lng:b.getCenter().lng,zoom:b.getZoom(),autoDiscover:!1})}),n(q,function(a){var c=b.getBounds();a.bounds={northEast:{lat:c._northEast.lat,lng:c._northEast.lng},southWest:{lat:c._southWest.lat,lng:c._southWest.lng}}});else{if(!k(u))return s.error(r+' The "center" property is not defined in the main scope'),void b.setView([c.center.lat,c.center.lng],c.center.zoom);k(u.lat)&&k(u.lng)||k(u.autoDiscover)||angular.copy(c.center,u)}var p,v;if("yes"===g.urlHashCenter){var w=function(){var a,b=d.search();if(k(b.c)){var c=b.c.split(":");3===c.length&&(a={lat:parseFloat(c[0]),lng:parseFloat(c[1]),zoom:parseInt(c[2],10)})}return a};p=w(),q.$on("$locationChangeSuccess",function(c){var d=c.currentScope,e=w();k(e)&&!m(e,b)&&angular.extend(d[a],{lat:e.lat,lng:e.lng,zoom:e.zoom})})}q.$watch(a,function(a){return q.settingCenterFromLeaflet?void 0:(k(p)&&(angular.copy(p,a),p=void 0),o(a)||a.autoDiscover===!0?a.autoDiscover===!0?(l(a.zoom)||b.setView([c.center.lat,c.center.lng],c.center.zoom),void(l(a.zoom)&&a.zoom>c.center.zoom?b.locate({setView:!0,maxZoom:a.zoom}):k(c.maxZoom)?b.locate({setView:!0,maxZoom:c.maxZoom}):b.locate({setView:!0}))):void(v&&m(a,b)||(q.settingCenterFromScope=!0,b.setView([a.lat,a.lng],a.zoom),i.notifyCenterChangedToBounds(q,b),e(function(){q.settingCenterFromScope=!1}))):void s.warn(r+" invalid 'center'"))},!0),b.whenReady(function(){v=!0}),b.on("moveend",function(){j.resolve(),i.notifyCenterUrlHashChanged(q,b,g,d.search()),m(u,b)||q.settingCenterFromScope||(q.settingCenterFromLeaflet=!0,n(q,function(c){q.settingCenterFromScope||angular.extend(c[a],{lat:b.getCenter().lat,lng:b.getCenter().lng,zoom:b.getZoom(),autoDiscover:!1}),i.notifyCenterChangedToBounds(q,b),e(function(){q.settingCenterFromLeaflet=!1})}))}),u.autoDiscover===!0&&b.on("locationerror",function(){s.warn(r+" The Geolocation API is unauthorized on this page."),o(u)?(b.setView([u.lat,u.lng],u.zoom),i.notifyCenterChangedToBounds(q,b)):(b.setView([c.center.lat,c.center.lng],c.center.zoom),i.notifyCenterChangedToBounds(q,b))})})}}}]}),centerDirectiveTypes.forEach(function(a){angular.module("ui-leaflet").directive(a,centerDirectives[a])}),angular.module("ui-leaflet").directive("controls",["leafletLogger","leafletHelpers","leafletControlHelpers",function(a,b,c){var d=a;return{restrict:"A",scope:!1,replace:!1,require:"?^leaflet",link:function(a,e,f,g){if(g){var h=c.createControl,i=c.isValidControlType,j=g.getLeafletScope(),k=b.isDefined,l=b.isArray,m={},n=b.errorHeader+" [Controls] ";g.getMap().then(function(a){j.$watchCollection("controls",function(b){for(var c in m)k(b[c])||(a.hasControl(m[c])&&a.removeControl(m[c]),delete m[c]);for(var e in b){var f,g=k(b[e].type)?b[e].type:e;if(!i(g))return void d.error(n+" Invalid control type: "+g+".");if("custom"!==g)f=h(g,b[e]),a.addControl(f),m[e]=f;else{var j=b[e];if(l(j))for(var o in j){var p=j[o];a.addControl(p),m[e]=k(m[e])?m[e].concat([p]):[p]}else a.addControl(j),m[e]=j}}})})}}}}]),angular.module("ui-leaflet").directive("decorations",["leafletLogger","leafletHelpers",function(a,b){var c=a;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,d,e,f){function g(a){return k(a)&&k(a.coordinates)&&(j.isLoaded()||c.error("[AngularJS - Leaflet] The PolylineDecorator Plugin is not loaded.")),L.polylineDecorator(a.coordinates)}function h(a,b){return k(a)&&k(b)&&k(b.coordinates)&&k(b.patterns)?(a.setPaths(b.coordinates),a.setPatterns(b.patterns),a):void 0}var i=f.getLeafletScope(),j=b.PolylineDecoratorPlugin,k=b.isDefined,l={};f.getMap().then(function(a){i.$watch("decorations",function(b){for(var c in l)k(b[c])&&angular.equals(b[c],l)||(a.removeLayer(l[c]),delete l[c]);for(var d in b){var e=b[d],f=g(e);k(f)&&(l[d]=f,a.addLayer(f),h(f,e))}},!0)})}}}]),angular.module("ui-leaflet").directive("eventBroadcast",["leafletLogger","$rootScope","leafletHelpers","leafletMapEvents","leafletIterators",function(a,b,c,d,e){var f=a;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,b,g,h){var i=c.isObject,j=c.isDefined,k=h.getLeafletScope(),l=k.eventBroadcast,m=d.getAvailableMapEvents(),n=d.addEvents;h.getMap().then(function(a){var b=[],c="broadcast";j(l.map)?i(l.map)?("emit"!==l.map.logic&&"broadcast"!==l.map.logic?f.warn("[AngularJS - Leaflet] Available event propagation logic are: 'emit' or 'broadcast'."):c=l.map.logic,i(l.map.enable)&&l.map.enable.length>=0?e.each(l.map.enable,function(a){-1===b.indexOf(a)&&-1!==m.indexOf(a)&&b.push(a)}):f.warn("[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model.")):f.warn("[AngularJS - Leaflet] event-broadcast.map must be an object check your model."):b=m,n(a,b,"eventName",k,c)})}}}]),angular.module("ui-leaflet").directive("geojson",["leafletLogger","$rootScope","leafletData","leafletHelpers","leafletWatchHelpers","leafletDirectiveControlsHelpers","leafletIterators","leafletGeoJsonEvents",function(a,b,c,d,e,f,g,h){var i=e.maybeWatch,j=d.watchOptions,k=f.extend,l=d,m=g;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,b,e,f){var g=d.isDefined,n=f.getLeafletScope(),o={},p=!1;f.getMap().then(function(a){var b;b=n.watchOptions&&n.watchOptions.geojson?n.watchOptions.geojson:j;var f=function(a,b){var c;return c=angular.isFunction(a.onEachFeature)?a.onEachFeature:function(c,f){d.LabelPlugin.isLoaded()&&g(c.properties.description)&&f.bindLabel(c.properties.description),h.bindEvents(e.id,f,null,c,n,b,{resetStyleOnMouseout:a.resetStyleOnMouseout,mapId:e.id})}},q=l.isDefined(e.geojsonNested)&&l.isTruthy(e.geojsonNested),r=function(){if(o){var b=function(b){g(b)&&a.hasLayer(b)&&a.removeLayer(b)};return q?void m.each(o,function(a){b(a)}):void b(o)}},s=function(b,d){var h=angular.copy(b);if(g(h)&&g(h.data)){var i=f(h,d);g(h.options)||(h.options={style:h.style,filter:h.filter,onEachFeature:i,pointToLayer:h.pointToLayer});var j=L.geoJson(h.data,h.options);d&&l.isString(d)?o[d]=j:o=j,j.addTo(a),p||(p=!0,c.setGeoJSON(o,e.id))}},t=function(a){if(r(),q){if(!a||!Object.keys(a).length)return;return void m.each(a,function(a,b){s(a,b)})}s(a)};k(e.id,"geojson",t,r),i(n,"geojson",b,function(a){t(a)})})}}}]),angular.module("ui-leaflet").directive("layercontrol",["$filter","leafletLogger","leafletData","leafletHelpers",function(a,b,c,d){var e=b;return{restrict:"E",scope:{icons:"=?",autoHideOpacity:"=?",showGroups:"=?",title:"@",baseTitle:"@",overlaysTitle:"@"},replace:!0,transclude:!1,require:"^leaflet",controller:["$scope","$element","$sce",function(a,b,f){e.debug("[Angular Directive - Layers] layers",a,b);var g=d.safeApply,h=d.isDefined;angular.extend(a,{baselayer:"",oldGroup:"",layerProperties:{},groupProperties:{},rangeIsSupported:d.rangeIsSupported(),changeBaseLayer:function(b,e){d.safeApply(a,function(d){d.baselayer=b,c.getMap().then(function(e){c.getLayers().then(function(c){if(!e.hasLayer(c.baselayers[b])){for(var f in d.layers.baselayers)d.layers.baselayers[f].icon=d.icons.unradio,e.hasLayer(c.baselayers[f])&&e.removeLayer(c.baselayers[f]);e.addLayer(c.baselayers[b]),d.layers.baselayers[b].icon=a.icons.radio}})})}),e.preventDefault()},moveLayer:function(b,c,d){var e=Object.keys(a.layers.baselayers).length;if(c>=1+e&&c<=a.overlaysArray.length+e){var f;for(var h in a.layers.overlays)if(a.layers.overlays[h].index===c){f=a.layers.overlays[h];break}f&&g(a,function(){f.index=b.index,b.index=c})}d.stopPropagation(),d.preventDefault()},initIndex:function(b,c){var d=Object.keys(a.layers.baselayers).length;b.index=h(b.index)?b.index:c+d+1},initGroup:function(b){a.groupProperties[b]=a.groupProperties[b]?a.groupProperties[b]:{}},toggleOpacity:function(b,c){if(c.visible){if(a.autoHideOpacity&&!a.layerProperties[c.name].opacityControl)for(var d in a.layerProperties)a.layerProperties[d].opacityControl=!1;a.layerProperties[c.name].opacityControl=!a.layerProperties[c.name].opacityControl}b.stopPropagation(),b.preventDefault()},toggleLegend:function(b){a.layerProperties[b.name].showLegend=!a.layerProperties[b.name].showLegend},showLegend:function(b){return b.legend&&a.layerProperties[b.name].showLegend},unsafeHTML:function(a){return f.trustAsHtml(a)},getOpacityIcon:function(b){return b.visible&&a.layerProperties[b.name].opacityControl?a.icons.close:a.icons.open},getGroupIcon:function(b){return b.visible?a.icons.check:a.icons.uncheck},changeOpacity:function(b){var d=a.layerProperties[b.name].opacity;c.getMap().then(function(e){c.getLayers().then(function(c){var f;for(var g in a.layers.overlays)if(a.layers.overlays[g]===b){f=c.overlays[g];break}e.hasLayer(f)&&(f.setOpacity&&f.setOpacity(d/100),f.getLayers&&f.eachLayer&&f.eachLayer(function(a){a.setOpacity&&a.setOpacity(d/100)}))})})},changeGroupVisibility:function(b){if(h(a.groupProperties[b])){var c=a.groupProperties[b].visible;for(var d in a.layers.overlays){var e=a.layers.overlays[d];e.group===b&&(e.visible=c)}}}});var i=b.get(0);L.Browser.touch?L.DomEvent.on(i,"click",L.DomEvent.stopPropagation):(L.DomEvent.disableClickPropagation(i),L.DomEvent.on(i,"mousewheel",L.DomEvent.stopPropagation))}],template:'

{{ title }}

{{ baseTitle }}
{{ overlaysTitle }}
Range is not supported in this browser
',link:function(a,b,e,f){var g=d.isDefined,h=f.getLeafletScope(),i=h.layers;a.$watch("icons",function(){var b={uncheck:"fa fa-square-o",check:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",unradio:"fa fa-circle-o",up:"fa fa-angle-up",down:"fa fa-angle-down",open:"fa fa-angle-double-down",close:"fa fa-angle-double-up",toggleLegend:"fa fa-pencil-square-o"};g(a.icons)?(angular.extend(b,a.icons),angular.extend(a.icons,b)):a.icons=b}),e.order=!g(e.order)||"normal"!==e.order&&"reverse"!==e.order?"normal":e.order,a.order="normal"===e.order,a.orderNumber="normal"===e.order?-1:1,a.layers=i,f.getMap().then(function(b){h.$watch("layers.baselayers",function(d){var e={};c.getLayers().then(function(c){var f;for(f in d){var g=d[f];g.icon=a.icons[b.hasLayer(c.baselayers[f])?"radio":"unradio"],e[f]=g}a.baselayersArray=e})}),h.$watch("layers.overlays",function(b){var d=[],e={};c.getLayers().then(function(c){var f;for(f in b){var h=b[f];h.icon=a.icons[h.visible?"check":"uncheck"],d.push(h),g(a.layerProperties[h.name])||(a.layerProperties[h.name]={opacity:g(h.layerOptions.opacity)?100*h.layerOptions.opacity:100,opacityControl:!1,showLegend:!0}),g(h.group)&&(g(a.groupProperties[h.group])||(a.groupProperties[h.group]={visible:!1}),e[h.group]=g(e[h.group])?e[h.group]:{count:0,visibles:0},e[h.group].count++,h.visible&&e[h.group].visibles++),g(h.index)&&c.overlays[f].setZIndex&&c.overlays[f].setZIndex(b[f].index)}for(f in e)a.groupProperties[f].visible=e[f].visibles===e[f].count;a.overlaysArray=d})},!0)})}}}]),angular.module("ui-leaflet").directive("layers",["leafletLogger","$q","leafletData","leafletHelpers","leafletLayerHelpers","leafletControlHelpers",function(a,b,c,d,e,f){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",controller:["$scope",function(a){a._leafletLayers=b.defer(),this.getLayers=function(){return a._leafletLayers.promise}}],link:function(a,b,g,h){var i=d.isDefined,j={},k=h.getLeafletScope(),l=k.layers,m=e.createLayer,n=e.safeAddLayer,o=e.safeRemoveLayer,p=f.updateLayersControl,q=!1;h.getMap().then(function(b){a._leafletLayers.resolve(j),c.setLayers(j,g.id),j.baselayers={},j.overlays={};var d=g.id,e=!1;for(var f in l.baselayers){var h=m(l.baselayers[f]);i(h)?(j.baselayers[f]=h,l.baselayers[f].top===!0&&(n(b,j.baselayers[f]),e=!0)):delete l.baselayers[f]}!e&&Object.keys(j.baselayers).length>0&&n(b,j.baselayers[Object.keys(l.baselayers)[0]]);for(f in l.overlays){"cartodb"===l.overlays[f].type;var r=m(l.overlays[f]);i(r)?(j.overlays[f]=r,l.overlays[f].visible===!0&&n(b,j.overlays[f])):delete l.overlays[f]}k.$watch("layers.baselayers",function(a,c){if(angular.equals(a,c))return q=p(b,d,q,a,l.overlays,j),!0;for(var e in j.baselayers)(!i(a[e])||a[e].doRefresh)&&(b.hasLayer(j.baselayers[e])&&b.removeLayer(j.baselayers[e]), -delete j.baselayers[e],a[e]&&a[e].doRefresh&&(a[e].doRefresh=!1));for(var f in a)if(i(j.baselayers[f]))a[f].top!==!0||b.hasLayer(j.baselayers[f])?a[f].top===!1&&b.hasLayer(j.baselayers[f])&&b.removeLayer(j.baselayers[f]):n(b,j.baselayers[f]);else{var g=m(a[f]);i(g)&&(j.baselayers[f]=g,a[f].top===!0&&n(b,j.baselayers[f]))}var h=!1;for(var k in j.baselayers)if(b.hasLayer(j.baselayers[k])){h=!0;break}!h&&Object.keys(j.baselayers).length>0&&n(b,j.baselayers[Object.keys(j.baselayers)[0]]),q=p(b,d,q,a,l.overlays,j)},!0),k.$watch("layers.overlays",function(a,c){if(angular.equals(a,c))return q=p(b,d,q,l.baselayers,a,j),!0;for(var e in j.overlays)if(!i(a[e])||a[e].doRefresh){if(b.hasLayer(j.overlays[e])){var f=i(a[e])?a[e].layerOptions:null;o(b,j.overlays[e],f)}delete j.overlays[e],a[e]&&a[e].doRefresh&&(a[e].doRefresh=!1)}for(var g in a){if(i(j.overlays[g]))a[g].visible&&!b.hasLayer(j.overlays[g])?n(b,j.overlays[g]):a[g].visible===!1&&b.hasLayer(j.overlays[g])&&o(b,j.overlays[g],a[g].layerOptions);else{var h=m(a[g]);if(!i(h))continue;j.overlays[g]=h,a[g].visible===!0&&n(b,j.overlays[g])}a[g].visible&&b._loaded&&a[g].data&&"heatmap"===a[g].type&&(j.overlays[g].setData(a[g].data),j.overlays[g].update())}q=p(b,d,q,l.baselayers,a,j)},!0)})}}}]),angular.module("ui-leaflet").directive("legend",["leafletLogger","$http","$timeout","leafletHelpers","leafletLegendHelpers",function(a,b,c,d,e){var f=a,g=d.errorHeader+" [Legend] ";return{restrict:"A",scope:!1,replace:!1,require:"leaflet",transclude:!1,link:function(a,b,c,h){var i,j,k,l,m=d.isArray,n=d.isString,o=d.isDefined,p=d.isFunction,q=h.getLeafletScope(),r=q.legend;q.$watch("legend",function(a){o(a)&&(i=a.legendClass?a.legendClass:"legend",j=a.position||"bottomright",l=a.type||"arcgis")},!0);var s=function(a,b,c){b&&b.layers&&b.layers.length>0&&(o(k)?e.updateLegend(k.getContainer(),b,l,c):(k=L.control({position:j}),k.onAdd=e.getOnAddLegend(b,i,l,c),k.addTo(a)),o(r.loadedData)&&p(r.loadedData)&&r.loadedData())};h.getMap().then(function(a){q.$watch("legend",function(b){return o(b)?o(b.url)||"arcgis"!==l||m(b.colors)&&m(b.labels)&&b.colors.length===b.labels.length?o(b.url)?void f.info(g+" loading legend service."):(o(k)&&(k.removeFrom(a),k=null),k=L.control({position:j}),"arcgis"===l&&(k.onAdd=e.getOnAddArrayLegend(b,i)),void k.addTo(a)):void f.warn(g+" legend.colors and legend.labels must be set."):void(o(k)&&(k.removeFrom(a),k=null))}),q.$watch("legend.url",function(b){if(o(b)){if(!m(b)&&!n(b))return void f.warn(g+" legend.url must be an array or string.");for(var d,h=n(b)?[b]:b,i=function(c,e){return function(i){o(i.data.error)?f.warn(g+"Error loadin legend from: "+e,i.data.error.message):d&&d.layers&&d.layers.length>0?d.layers=d.layers.concat(i.data.layers):d=i.data,c===h.length-1&&s(a,d,b)}},j=function(a){f.warn(g+" legend.url not loaded.",a)},k=0;k
',controller:["$scope",function(b){this._leafletMap=a.defer(),this.getMap=function(){return this._leafletMap.promise},this.getLeafletScope=function(){return b}}],link:function(a,f,g,h){function i(){isNaN(g.width)?f.css("width",g.width):f.css("width",g.width+"px")}function j(){isNaN(g.height)?f.css("height",g.height):f.css("height",g.height+"px")}var k=d.isDefined,l=c.setDefaults(a.defaults,g.id),m=e.getAvailableMapEvents(),n=e.addEvents;a.mapId=g.id,b.setDirectiveControls({},g.id),k(g.width)&&(i(),a.$watch(function(){return f[0].getAttribute("width")},function(){i(),o.invalidateSize()})),k(g.height)&&(j(),a.$watch(function(){return f[0].getAttribute("height")},function(){j(),o.invalidateSize()}));var o=new L.Map(f[0],c.getMapCreationDefaults(g.id));if(h._leafletMap.resolve(o),k(g.center)||k(g.lfCenter)||o.setView([l.center.lat,l.center.lng],l.center.zoom),!k(g.tiles)&&!k(g.layers)){var p=L.tileLayer(l.tileLayer,l.tileLayerOptions);p.addTo(o),b.setTiles(p,g.id)}if(k(o.zoomControl)&&k(l.zoomControlPosition)&&o.zoomControl.setPosition(l.zoomControlPosition),k(o.zoomControl)&&l.zoomControl===!1&&o.zoomControl.removeFrom(o),k(o.zoomsliderControl)&&k(l.zoomsliderControl)&&l.zoomsliderControl===!1&&o.zoomsliderControl.removeFrom(o),!k(g.eventBroadcast)){var q="broadcast";n(o,m,"eventName",a,q)}o.whenReady(function(){b.setMap(o,g.id)}),a.$on("$destroy",function(){c.reset(),o.remove(),b.unresolveMap(g.id)}),a.$on("invalidateSize",function(){o.invalidateSize()})}}}]),angular.module("ui-leaflet").factory("leafletBoundsHelpers",["leafletLogger","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,f=b.isFunction,g=b.isDefined,h=a;return{createLeafletBounds:function(a){return c(a)?L.latLngBounds([a.southWest.lat,a.southWest.lng],[a.northEast.lat,a.northEast.lng]):void 0},isValidBounds:c,createBoundsFromArray:function(a){return d(a)&&2===a.length&&d(a[0])&&d(a[1])&&2===a[0].length&&2===a[1].length&&e(a[0][0])&&e(a[0][1])&&e(a[1][0])&&e(a[1][1])?{northEast:{lat:a[0][0],lng:a[0][1]},southWest:{lat:a[1][0],lng:a[1][1]}}:void h.error("[AngularJS - Leaflet] The bounds array is not valid.")},createBoundsFromLeaflet:function(a){if(!(g(a)&&f(a.getNorthEast)&&f(a.getSouthWest)))return void h.error("[AngularJS - Leaflet] The leaflet bounds is not valid object.");var b=a.getNorthEast(),c=a.getSouthWest();return{northEast:{lat:b.lat,lng:b.lng},southWest:{lat:c.lat,lng:c.lng}}}}}]),angular.module("ui-leaflet").factory("leafletControlHelpers",["$rootScope","leafletLogger","leafletHelpers","leafletLayerHelpers","leafletMapDefaults",function(a,b,c,d,e){var f=c.isDefined,g=c.isObject,h=d.createLayer,i={},j=c.errorHeader+" [Controls] ",k=b,l=function(a,b,c){var d=e.getDefaults(c);if(!d.controls.layers.visible)return!1;var h=!1;return g(a)&&Object.keys(a).forEach(function(b){var c=a[b];f(c.layerOptions)&&c.layerOptions.showOnSelector===!1||(h=!0)}),g(b)&&Object.keys(b).forEach(function(a){var c=b[a];f(c.layerParams)&&c.layerParams.showOnSelector===!1||(h=!0)}),h},m=function(a){var b=e.getDefaults(a),c={collapsed:b.controls.layers.collapsed,position:b.controls.layers.position,autoZIndex:!1};angular.extend(c,b.controls.layers.options);var d;return d=b.controls.layers&&f(b.controls.layers.control)?b.controls.layers.control.apply(this,[[],[],c]):new L.control.layers([],[],c)},n={draw:{isPluginLoaded:function(){return angular.isDefined(L.Control.Draw)?!0:(k.error(j+" Draw plugin is not loaded."),!1)},checkValidParams:function(){return!0},createControl:function(a){return new L.Control.Draw(a)}},scale:{isPluginLoaded:function(){return!0},checkValidParams:function(){return!0},createControl:function(a){return new L.control.scale(a)}},fullscreen:{isPluginLoaded:function(){return angular.isDefined(L.Control.Fullscreen)?!0:(k.error(j+" Fullscreen plugin is not loaded."),!1)},checkValidParams:function(){return!0},createControl:function(a){return new L.Control.Fullscreen(a)}},search:{isPluginLoaded:function(){return angular.isDefined(L.Control.Search)?!0:(k.error(j+" Search plugin is not loaded."),!1)},checkValidParams:function(){return!0},createControl:function(a){return new L.Control.Search(a)}},custom:{},minimap:{isPluginLoaded:function(){return angular.isDefined(L.Control.MiniMap)?!0:(k.error(j+" Minimap plugin is not loaded."),!1)},checkValidParams:function(a){return f(a.layer)?!0:(k.warn(j+' minimap "layer" option should be defined.'),!1)},createControl:function(a){var b=h(a.layer);return f(b)?new L.Control.MiniMap(b,a):void k.warn(j+' minimap control "layer" could not be created.')}}};return{layersControlMustBeVisible:l,isValidControlType:function(a){return-1!==Object.keys(n).indexOf(a)},createControl:function(a,b){return n[a].checkValidParams(b)?n[a].createControl(b):void 0},updateLayersControl:function(a,b,c,d,e,g){var h,j=i[b],k=l(d,e,b);if(f(j)&&c){for(h in g.baselayers)j.removeLayer(g.baselayers[h]);for(h in g.overlays)j.removeLayer(g.overlays[h]);a.removeControl(j),delete i[b]}if(k){j=m(b),i[b]=j;for(h in d){var n=f(d[h].layerOptions)&&d[h].layerOptions.showOnSelector===!1;!n&&f(g.baselayers[h])&&j.addBaseLayer(g.baselayers[h],d[h].name)}for(h in e){var o=f(e[h].layerParams)&&e[h].layerParams.showOnSelector===!1;!o&&f(g.overlays[h])&&j.addOverlay(g.overlays[h],e[h].name)}a.addControl(j)}return k}}}]),angular.module("ui-leaflet").service("leafletData",["leafletLogger","$q","leafletHelpers",function(a,b,c){var d=c.getDefer,e=c.getUnresolvedDefer,f=c.setResolvedDefer,g={},h=this,i=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},j=["map","tiles","layers","paths","markers","geoJSON","UTFGrid","decorations","directiveControls"];j.forEach(function(a){g[a]={}}),this.unresolveMap=function(a){var b=c.obtainEffectiveMapId(g.map,a);j.forEach(function(a){g[a][b]=void 0})},j.forEach(function(a){var b=i(a);h["set"+b]=function(b,c){var d=e(g[a],c);d.resolve(b),f(g[a],c)},h["get"+b]=function(b){var c=d(g[a],b);return c.promise}})}]),angular.module("ui-leaflet").service("leafletDirectiveControlsHelpers",["leafletLogger","leafletData","leafletHelpers",function(a,b,c){var d=c.isDefined,e=c.isString,f=c.isObject,g=c.errorHeader,h=a,i=g+"[leafletDirectiveControlsHelpers",j=function(a,c,g,j){var k=i+".extend] ",l={};if(!d(c))return void h.error(k+"thingToAddName cannot be undefined");if(e(c)&&d(g)&&d(j))l[c]={create:g,clean:j};else{if(!f(c)||d(g)||d(j))return void h.error(k+"incorrect arguments");l=c}b.getDirectiveControls().then(function(c){angular.extend(c,l),b.setDirectiveControls(c,a)})};return{extend:j}}]),angular.module("ui-leaflet").service("leafletGeoJsonHelpers",["leafletHelpers","leafletIterators",function(a,b){var c=a,d=b,e=function(a,b){return this.lat=a,this.lng=b,this},f=function(a){return Array.isArray(a)&&2===a.length?a[1]:c.isDefined(a.type)&&"Point"===a.type?+a.coordinates[1]:+a.lat},g=function(a){return Array.isArray(a)&&2===a.length?a[0]:c.isDefined(a.type)&&"Point"===a.type?+a.coordinates[0]:+a.lng},h=function(a){if(c.isUndefined(a))return!1;if(c.isArray(a)){if(2===a.length&&c.isNumber(a[0])&&c.isNumber(a[1]))return!0}else if(c.isDefined(a.type)&&"Point"===a.type&&c.isArray(a.coordinates)&&2===a.coordinates.length&&c.isNumber(a.coordinates[0])&&c.isNumber(a.coordinates[1]))return!0;var b=d.all(["lat","lng"],function(b){return c.isDefined(a[b])&&c.isNumber(a[b])});return b},i=function(a){if(a&&h(a)){var b=null;if(Array.isArray(a)&&2===a.length)b=new e(a[1],a[0]);else{if(!c.isDefined(a.type)||"Point"!==a.type)return a;b=new e(a.coordinates[1],a.coordinates[0])}return angular.extend(a,b)}};return{getLat:f,getLng:g,validateCoords:h,getCoords:i}}]),angular.module("ui-leaflet").service("leafletHelpers",["$q","$log",function(a,b){function c(a,c){var d,f;if(angular.isDefined(c))d=c;else if(0===Object.keys(a).length)d="main";else if(Object.keys(a).length>=1)for(f in a)a.hasOwnProperty(f)&&(d=f);else b.error(e+"- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call");return d}function d(b,d){var e,f=c(b,d);return angular.isDefined(b[f])&&b[f].resolvedDefer!==!0?e=b[f].defer:(e=a.defer(),b[f]={defer:e,resolvedDefer:!1}),e}var e="[AngularJS - Leaflet] ",f=angular.copy,g=f,h=function(a,b){var c;if(a&&angular.isObject(a))return null!==b&&angular.isString(b)?(c=a,b.split(".").forEach(function(a){c&&(c=c[a])}),c):b},i=function(a){return a.split(".").reduce(function(a,b){return a+'["'+b+'"]'})},j=function(a){return a.reduce(function(a,b){return a+"."+b})},k=function(a){return angular.isDefined(a)&&null!==a},l=function(a){return!k(a)},m=/([\:\-\_]+(.))/g,n=/^moz([A-Z])/,o=/^((?:x|data)[\:\-_])/i,p=function(a){return a.replace(m,function(a,b,c,d){return d?c.toUpperCase():c}).replace(n,"Moz$1")},q=function(a){return p(a.replace(o,""))};return{camelCase:p,directiveNormalize:q,copy:f,clone:g,errorHeader:e,getObjectValue:h,getObjectArrayPath:i,getObjectDotPath:j,defaultTo:function(a,b){return k(a)?a:b},isTruthy:function(a){return"true"===a||a===!0},isEmpty:function(a){return 0===Object.keys(a).length},isUndefinedOrEmpty:function(a){return angular.isUndefined(a)||null===a||0===Object.keys(a).length},isDefined:k,isUndefined:l,isNumber:angular.isNumber,isString:angular.isString,isArray:angular.isArray,isObject:angular.isObject,isFunction:angular.isFunction,equals:angular.equals,isValidCenter:function(a){return angular.isDefined(a)&&angular.isNumber(a.lat)&&angular.isNumber(a.lng)&&angular.isNumber(a.zoom)},isValidPoint:function(a){return angular.isDefined(a)?angular.isArray(a)?2===a.length&&angular.isNumber(a[0])&&angular.isNumber(a[1]):angular.isNumber(a.lat)&&angular.isNumber(a.lng):!1},isSameCenterOnMap:function(a,b){var c=b.getCenter(),d=b.getZoom();return a.lat&&a.lng&&c.lat.toFixed(4)===a.lat.toFixed(4)&&c.lng.toFixed(4)===a.lng.toFixed(4)&&d===a.zoom?!0:!1},safeApply:function(a,b){var c=a.$root.$$phase;"$apply"===c||"$digest"===c?a.$eval(b):a.$evalAsync(b)},obtainEffectiveMapId:c,getDefer:function(a,b){var e,f=c(a,b);return e=angular.isDefined(a[f])&&a[f].resolvedDefer!==!1?a[f].defer:d(a,b)},getUnresolvedDefer:d,setResolvedDefer:function(a,b){var d=c(a,b);a[d].resolvedDefer=!0},rangeIsSupported:function(){var a=document.createElement("input");return a.setAttribute("type","range"),"range"===a.type},FullScreenControlPlugin:{isLoaded:function(){return angular.isDefined(L.Control.Fullscreen)}},MiniMapControlPlugin:{isLoaded:function(){return angular.isDefined(L.Control.MiniMap)}},AwesomeMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.AwesomeMarkers)&&angular.isDefined(L.AwesomeMarkers.Icon)},is:function(a){return this.isLoaded()?a instanceof L.AwesomeMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},VectorMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.VectorMarkers)&&angular.isDefined(L.VectorMarkers.Icon)},is:function(a){return this.isLoaded()?a instanceof L.VectorMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},DomMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.DomMarkers)&&angular.isDefined(L.DomMarkers.Icon)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.DomMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},PolylineDecoratorPlugin:{isLoaded:function(){return angular.isDefined(L.PolylineDecorator)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.PolylineDecorator:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},MakiMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.MakiMarkers)&&angular.isDefined(L.MakiMarkers.Icon)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.MakiMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},ExtraMarkersPlugin:{isLoaded:function(){return angular.isDefined(L.ExtraMarkers)&&angular.isDefined(L.ExtraMarkers.Icon)?!0:!1},is:function(a){return this.isLoaded()?a instanceof L.ExtraMarkers.Icon:!1},equal:function(a,b){return this.isLoaded()&&this.is(a)?angular.equals(a,b):!1}},LabelPlugin:{isLoaded:function(){return angular.isDefined(L.Label)},is:function(a){return this.isLoaded()?a instanceof L.MarkerClusterGroup:!1}},MarkerClusterPlugin:{isLoaded:function(){return angular.isDefined(L.MarkerClusterGroup)},is:function(a){return this.isLoaded()?a instanceof L.MarkerClusterGroup:!1}},GoogleLayerPlugin:{isLoaded:function(){return angular.isDefined(L.Google)},is:function(a){return this.isLoaded()?a instanceof L.Google:!1}},LeafletProviderPlugin:{isLoaded:function(){return angular.isDefined(L.TileLayer.Provider)},is:function(a){return this.isLoaded()?a instanceof L.TileLayer.Provider:!1}},ChinaLayerPlugin:{isLoaded:function(){return angular.isDefined(L.tileLayer.chinaProvider)}},HeatLayerPlugin:{isLoaded:function(){return angular.isDefined(L.heatLayer)}},WebGLHeatMapLayerPlugin:{isLoaded:function(){return angular.isDefined(L.TileLayer.WebGLHeatMap)}},BingLayerPlugin:{isLoaded:function(){return angular.isDefined(L.BingLayer)},is:function(a){return this.isLoaded()?a instanceof L.BingLayer:!1}},WFSLayerPlugin:{isLoaded:function(){return void 0!==L.GeoJSON.WFS},is:function(a){return this.isLoaded()?a instanceof L.GeoJSON.WFS:!1}},AGSBaseLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.basemapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.basemapLayer:!1}},AGSLayerPlugin:{isLoaded:function(){return void 0!==lvector&&void 0!==lvector.AGS},is:function(a){return this.isLoaded()?a instanceof lvector.AGS:!1}},AGSFeatureLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.featureLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.featureLayer:!1}},AGSTiledMapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.tiledMapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.tiledMapLayer:!1}},AGSDynamicMapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.dynamicMapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.dynamicMapLayer:!1}},AGSImageMapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.imageMapLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.imageMapLayer:!1}},AGSClusteredLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.clusteredFeatureLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.clusteredFeatureLayer:!1}},AGSHeatmapLayerPlugin:{isLoaded:function(){return void 0!==L.esri&&void 0!==L.esri.heatmapFeatureLayer},is:function(a){return this.isLoaded()?a instanceof L.esri.heatmapFeatureLayer:!1}},YandexLayerPlugin:{isLoaded:function(){return angular.isDefined(L.Yandex)},is:function(a){return this.isLoaded()?a instanceof L.Yandex:!1}},GeoJSONPlugin:{isLoaded:function(){return angular.isDefined(L.TileLayer.GeoJSON)},is:function(a){return this.isLoaded()?a instanceof L.TileLayer.GeoJSON:!1}},UTFGridPlugin:{isLoaded:function(){return angular.isDefined(L.UtfGrid)},is:function(a){return this.isLoaded()?a instanceof L.UtfGrid:(b.error("[AngularJS - Leaflet] No UtfGrid plugin found."),!1)}},CartoDB:{isLoaded:function(){return cartodb},is:function(){return!0}},Leaflet:{DivIcon:{is:function(a){return a instanceof L.DivIcon},equal:function(a,b){return this.is(a)?angular.equals(a,b):!1}},Icon:{is:function(a){return a instanceof L.Icon},equal:function(a,b){return this.is(a)?angular.equals(a,b):!1}}},watchOptions:{type:"watchDeep",individual:{type:"watchDeep"}}}}]),angular.module("ui-leaflet").service("leafletIterators",["leafletLogger","leafletHelpers",function(a,b){var c,d=b,e=b.errorHeader+"leafletIterators: ",f=Object.keys,g=d.isFunction,h=d.isObject,i=a,j=Math.pow(2,53)-1,k=function(a){var b=null!==a&&a.length;return d.isNumber(b)&&b>=0&&j>=b},l=function(a){return a},m=function(a){return function(b){return null===b?void 0:b[a]}},n=function(a,b,c){if(void 0===b)return a;switch(null===c?3:c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)}}return function(){return a.apply(b,arguments)}},o=function(a,b){return function(c){var d=arguments.length;if(2>d||null===c)return c;for(var e=1;d>e;e++)for(var f=arguments[e],g=a(f),h=g.length,i=0;h>i;i++){var j=g[i];b&&void 0!==c[j]||(c[j]=f[j])}return c}},p=null;c=p=o(f);var q,r=function(a,b){var c=f(b),d=c.length;if(null===a)return!d;for(var e=Object(a),g=0;d>g;g++){var h=c[g];if(b[h]!==e[h]||!(h in e))return!1}return!0},s=null;q=s=function(a){return a=c({},a),function(b){return r(b,a)}};var t,u=function(a,b,c){return null===a?l:g(a)?n(a,b,c):h(a)?q(a):m(a)},v=null;t=v=function(a,b,c){b=u(b,c);for(var d=!k(a)&&f(a),e=(d||a).length,g=0;e>g;g++){var h=d?d[g]:g;if(!b(a[h],h,a))return!1}return!0};var w=function(a,b,c,f){return c||d.isDefined(a)&&d.isDefined(b)?d.isFunction(b)?!1:(f=d.defaultTo(b,"cb"),i.error(e+f+" is not a function"),!0):!0},x=function(a,b,c){if(!w(void 0,c,!0,"internalCb")&&!w(a,b))for(var d in a)a.hasOwnProperty(d)&&c(a[d],d)},y=function(a,b){x(a,b,function(a,c){b(a,c)})};return{each:y,forEach:y,every:t,all:v}}]),angular.module("ui-leaflet").factory("leafletLayerHelpers",["$rootScope","$q","leafletLogger","leafletHelpers","leafletIterators",function($rootScope,$q,leafletLogger,leafletHelpers,leafletIterators){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].mustHaveData&&!isDefined(a.data)?($log.error('[AngularJS - Leaflet] The base layer must have a "data" array attribute'),!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):layerTypes[a.type].mustHaveKey&&!isDefined(a.key)?($log.error("[AngularJS - Leaflet] The type of layer "+a.type+" must have key defined"),!1):!0:($log.error("[AngularJS - Leaflet] A layer must have a valid type defined."),!1)}function createLayer(a){if(isValidLayerType(a)){if(!isString(a.name))return void $log.error("[AngularJS - Leaflet] A base layer must have a name");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,data:a.data,options:a.layerOptions,layer:a.layer,icon:a.icon,type:a.layerType,bounds:a.bounds,key:a.key,apiKey:a.apiKey,pluginOptions:a.pluginOptions,user:a.user};return layerTypes[a.type].createLayer(c)}}function safeAddLayer(a,b){b&&"function"==typeof b.addTo?b.addTo(a):a.addLayer(b)}function safeRemoveLayer(a,b,c){if(isDefined(c)&&isDefined(c.loadedDefer))if(angular.isFunction(c.loadedDefer)){var d=c.loadedDefer();$log.debug("Loaded Deferred",d);var e=d.length;if(e>0)for(var f=function(){e--,0===e&&a.removeLayer(b)},g=0;g0&&g(b)},function(a){c.shift(),d.d.reject(a),c.length>0&&g(b)})},h=function(a,b,c,d){if(a.innerHTML="",b.error)a.innerHTML+='
'+b.error.message+"
";else if("arcgis"===c)for(var e=0;e'+f.layerName+"";for(var g=0;g
'+h.label+"
"}}else"image"===c&&(a.innerHTML='')},i=function(a,b,c,d){return function(){var e=L.DomUtil.create("div",b);return L.Browser.touch?L.DomEvent.on(e,"click",L.DomEvent.stopPropagation):(L.DomEvent.disableClickPropagation(e),L.DomEvent.on(e,"mousewheel",L.DomEvent.stopPropagation)),h(e,a,c,d),e}},j=function(a,b){return function(){for(var c=L.DomUtil.create("div",b),d=0;d
'+a.labels[d]+"
";return L.Browser.touch?L.DomEvent.on(c,"click",L.DomEvent.stopPropagation):(L.DomEvent.disableClickPropagation(c),L.DomEvent.on(c,"mousewheel",L.DomEvent.stopPropagation)),c}};return{getOnAddLegend:i,getOnAddArrayLegend:j,updateLegend:h,addLegendURL:function(a,c){var d=b.defer();return f(e[a])||(e[a]=[]),e[a].push({c:c,d:d}),1===e[a].length&&g(a),d.promise}}}]),angular.module("ui-leaflet").factory("leafletMapDefaults",["$q","leafletHelpers",function(a,b){function c(){return{keyboard:!0,dragging:!0,worldCopyJump:!1,doubleClickZoom:!0,scrollWheelZoom:!0,tap:!0,touchZoom:!0,zoomControl:!0,zoomsliderControl:!1,zoomControlPosition:"topleft",attributionControl:!0,controls:{layers:{visible:!0,position:"topright",collapsed:!0}},nominatim:{server:" http://nominatim.openstreetmap.org/search"},crs:L.CRS.EPSG3857,tileLayer:"//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",tileLayerOptions:{attribution:'© OpenStreetMap contributors'},path:{weight:10,opacity:1,color:"#0000ff"},center:{lat:0,lng:0,zoom:1}}}var d=b.isDefined,e=b.isObject,f=b.obtainEffectiveMapId,g={};return{reset:function(){g={}},getDefaults:function(a){var b=f(g,a);return g[b]},getMapCreationDefaults:function(a){var b=f(g,a),c=g[b],e={maxZoom:c.maxZoom,keyboard:c.keyboard,dragging:c.dragging,zoomControl:c.zoomControl,doubleClickZoom:c.doubleClickZoom,scrollWheelZoom:c.scrollWheelZoom,tap:c.tap,touchZoom:c.touchZoom,attributionControl:c.attributionControl,worldCopyJump:c.worldCopyJump,crs:c.crs};if(d(c.minZoom)&&(e.minZoom=c.minZoom),d(c.zoomAnimation)&&(e.zoomAnimation=c.zoomAnimation),d(c.fadeAnimation)&&(e.fadeAnimation=c.fadeAnimation),d(c.markerZoomAnimation)&&(e.markerZoomAnimation=c.markerZoomAnimation),c.map)for(var h in c.map)e[h]=c.map[h];return e},setDefaults:function(a,b){var h=c();d(a)&&(h.doubleClickZoom=d(a.doubleClickZoom)?a.doubleClickZoom:h.doubleClickZoom,h.scrollWheelZoom=d(a.scrollWheelZoom)?a.scrollWheelZoom:h.doubleClickZoom,h.tap=d(a.tap)?a.tap:h.tap,h.touchZoom=d(a.touchZoom)?a.touchZoom:h.doubleClickZoom,h.zoomControl=d(a.zoomControl)?a.zoomControl:h.zoomControl,h.zoomsliderControl=d(a.zoomsliderControl)?a.zoomsliderControl:h.zoomsliderControl,h.attributionControl=d(a.attributionControl)?a.attributionControl:h.attributionControl,h.tileLayer=d(a.tileLayer)?a.tileLayer:h.tileLayer,h.zoomControlPosition=d(a.zoomControlPosition)?a.zoomControlPosition:h.zoomControlPosition,h.keyboard=d(a.keyboard)?a.keyboard:h.keyboard,h.dragging=d(a.dragging)?a.dragging:h.dragging,d(a.controls)&&angular.extend(h.controls,a.controls),e(a.crs)?h.crs=a.crs:d(L.CRS[a.crs])&&(h.crs=L.CRS[a.crs]),d(a.center)&&angular.copy(a.center,h.center),d(a.tileLayerOptions)&&angular.copy(a.tileLayerOptions,h.tileLayerOptions),d(a.maxZoom)&&(h.maxZoom=a.maxZoom),d(a.minZoom)&&(h.minZoom=a.minZoom),d(a.zoomAnimation)&&(h.zoomAnimation=a.zoomAnimation),d(a.fadeAnimation)&&(h.fadeAnimation=a.fadeAnimation),d(a.markerZoomAnimation)&&(h.markerZoomAnimation=a.markerZoomAnimation),d(a.worldCopyJump)&&(h.worldCopyJump=a.worldCopyJump), -d(a.map)&&(h.map=a.map),d(a.path)&&(h.path=a.path));var i=f(g,b);return g[i]=h,h}}}]),angular.module("ui-leaflet").service("leafletMarkersHelpers",["$rootScope","$timeout","leafletHelpers","leafletLogger","$compile","leafletGeoJsonHelpers","leafletWatchHelpers",function(a,b,c,d,e,f,g){var h=c.isDefined,i=c.defaultTo,j=c.MarkerClusterPlugin,k=c.AwesomeMarkersPlugin,l=c.VectorMarkersPlugin,m=c.MakiMarkersPlugin,n=c.ExtraMarkersPlugin,o=c.DomMarkersPlugin,p=c.safeApply,q=c,r=c.isString,s=c.isNumber,t=c.isObject,u={},v=f,w=c.errorHeader,x=g.maybeWatch,y=d,z=function(a){var b="";return["_icon","_latlng","_leaflet_id","_map","_shadow"].forEach(function(c){b+=c+": "+i(a[c],"undefined")+" \n"}),"[leafletMarker] : \n"+b},A=function(a,b){var c=b?console:y;c.debug(z(a))},B=function(b){if(h(b)&&h(b.type)&&"awesomeMarker"===b.type)return k.isLoaded()||y.error(w+" The AwesomeMarkers Plugin is not loaded."),new L.AwesomeMarkers.icon(b);if(h(b)&&h(b.type)&&"vectorMarker"===b.type)return l.isLoaded()||y.error(w+" The VectorMarkers Plugin is not loaded."),new L.VectorMarkers.icon(b);if(h(b)&&h(b.type)&&"makiMarker"===b.type)return m.isLoaded()||y.error(w+"The MakiMarkers Plugin is not loaded."),new L.MakiMarkers.icon(b);if(h(b)&&h(b.type)&&"extraMarker"===b.type)return n.isLoaded()||y.error(w+"The ExtraMarkers Plugin is not loaded."),new L.ExtraMarkers.icon(b);if(h(b)&&h(b.type)&&"div"===b.type)return new L.divIcon(b);if(h(b)&&h(b.type)&&"dom"===b.type){o.isLoaded()||y.error(w+"The DomMarkers Plugin is not loaded.");var c=angular.isFunction(b.getMarkerScope)?b.getMarkerScope():a,d=e(b.template)(c),f=angular.copy(b);return f.element=d[0],new L.DomMarkers.icon(f)}if(h(b)&&h(b.type)&&"icon"===b.type)return b.icon;var g="data:image/png;base64,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",i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAC5ElEQVRYw+2YW4/TMBCF45S0S1luXZCABy5CgLQgwf//S4BYBLTdJLax0fFqmB07nnQfEGqkIydpVH85M+NLjPe++dcPc4Q8Qh4hj5D/AaQJx6H/4TMwB0PeBNwU7EGQAmAtsNfAzoZkgIa0ZgLMa4Aj6CxIAsjhjOCoL5z7Glg1JAOkaicgvQBXuncwJAWjksLtBTWZe04CnYRktUGdilALppZBOgHGZcBzL6OClABvMSVIzyBjazOgrvACf1ydC5mguqAVg6RhdkSWQFj2uxfaq/BrIZOLEWgZdALIDvcMcZLD8ZbLC9de4yR1sYMi4G20S4Q/PWeJYxTOZn5zJXANZHIxAd4JWhPIloTJZhzMQduM89WQ3MUVAE/RnhAXpTycqys3NZALOBbB7kFrgLesQl2h45Fcj8L1tTSohUwuxhy8H/Qg6K7gIs+3kkaigQCOcyEXCHN07wyQazhrmIulvKMQAwMcmLNqyCVyMAI+BuxSMeTk3OPikLY2J1uE+VHQk6ANrhds+tNARqBeaGc72cK550FP4WhXmFmcMGhTwAR1ifOe3EvPqIegFmF+C8gVy0OfAaWQPMR7gF1OQKqGoBjq90HPMP01BUjPOqGFksC4emE48tWQAH0YmvOgF3DST6xieJgHAWxPAHMuNhrImIdvoNOKNWIOcE+UXE0pYAnkX6uhWsgVXDxHdTfCmrEEmMB2zMFimLVOtiiajxiGWrbU52EeCdyOwPEQD8LqyPH9Ti2kgYMf4OhSKB7qYILbBv3CuVTJ11Y80oaseiMWOONc/Y7kJYe0xL2f0BaiFTxknHO5HaMGMublKwxFGzYdWsBF174H/QDknhTHmHHN39iWFnkZx8lPyM8WHfYELmlLKtgWNmFNzQcC1b47gJ4hL19i7o65dhH0Negbca8vONZoP7doIeOC9zXm8RjuL0Gf4d4OYaU5ljo3GYiqzrWQHfJxA6ALhDpVKv9qYeZA8eM3EhfPSCmpuD0AAAAASUVORK5CYII=";return h(b)&&h(b.iconUrl)?new L.Icon(b):new L.Icon.Default({iconUrl:g,shadowUrl:i,iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]})},C=function(a){h(u[a])&&u.splice(a,1)},D=function(){u={}},E=function(a,b,c){if(a.closePopup(),h(c)&&h(c.overlays))for(var d in c.overlays)if((c.overlays[d]instanceof L.LayerGroup||c.overlays[d]instanceof L.FeatureGroup)&&c.overlays[d].hasLayer(a))return void c.overlays[d].removeLayer(a);if(h(u))for(var e in u)u[e].hasLayer(a)&&u[e].removeLayer(a);b.hasLayer(a)&&b.removeLayer(a)},F=function(a,b){var c=a._popup._container.offsetHeight,d=new L.Point(a._popup._containerLeft,-c-a._popup._containerBottom),e=b.layerPointToContainerPoint(d);null!==e&&a._popup._adjustPan()},G=function(a,b){e(a._popup._contentNode)(b)},H=function(a,c,d){var e=a._popup._contentNode.innerText||a._popup._contentNode.textContent;e.length<1&&b(function(){H(a,c,d)});var f=a._popup._contentNode.offsetWidth;return a._popup._updateLayout(),a._popup._updatePosition(),a._popup.options.autoPan&&F(a,d),f},I=function(b,c,d){var e=angular.isFunction(c.getMessageScope)?c.getMessageScope():a,f=h(c.compileMessage)?c.compileMessage:!0;if(f){if(!h(b._popup)||!h(b._popup._contentNode))return y.error(w+"Popup is invalid or does not have any content."),!1;G(b,e),H(b,c,d)}},J=function(b,c){var d=angular.isFunction(c.getMessageScope)?c.getMessageScope():a,f=angular.isFunction(c.getLabelScope)?c.getLabelScope():d,g=h(c.compileMessage)?c.compileMessage:!0;q.LabelPlugin.isLoaded()&&h(c.label)&&(h(c.label.options)&&c.label.options.noHide===!0&&b.showLabel(),g&&h(b.label)&&e(b.label._container)(f))},K=function(a,b,c,d,e,f,g){if(h(b)){if(!v.validateCoords(a))return y.warn("There are problems with lat-lng data, please verify your marker model"),void E(c,g,f);var i=a===b;if(h(a.iconAngle)&&b.iconAngle!==a.iconAngle&&c.setIconAngle(a.iconAngle),r(a.layer)||r(b.layer)&&(h(f.overlays[b.layer])&&f.overlays[b.layer].hasLayer(c)&&(f.overlays[b.layer].removeLayer(c),c.closePopup()),g.hasLayer(c)||g.addLayer(c)),(s(a.opacity)||s(parseFloat(a.opacity)))&&a.opacity!==b.opacity&&c.setOpacity(a.opacity),r(a.layer)&&b.layer!==a.layer){if(r(b.layer)&&h(f.overlays[b.layer])&&f.overlays[b.layer].hasLayer(c)&&f.overlays[b.layer].removeLayer(c),c.closePopup(),g.hasLayer(c)&&g.removeLayer(c),!h(f.overlays[a.layer]))return void y.error(w+"You must use a name of an existing layer");var j=f.overlays[a.layer];if(!(j instanceof L.LayerGroup||j instanceof L.FeatureGroup))return void y.error(w+'A marker can only be added to a layer of type "group" or "featureGroup"');j.addLayer(c),g.hasLayer(c)&&a.focus===!0&&c.openPopup()}if(a.draggable!==!0&&b.draggable===!0&&h(c.dragging)&&c.dragging.disable(),a.draggable===!0&&b.draggable!==!0&&(c.dragging?c.dragging.enable():L.Handler.MarkerDrag&&(c.dragging=new L.Handler.MarkerDrag(c),c.options.draggable=!0,c.dragging.enable())),t(a.icon)||t(b.icon)&&(c.setIcon(B()),c.closePopup(),c.unbindPopup(),r(a.message)&&c.bindPopup(a.message,a.popupOptions)),t(a.icon)&&t(b.icon)&&!angular.equals(a.icon,b.icon)){var k=!1;c.dragging&&(k=c.dragging.enabled()),c.setIcon(B(a.icon)),k&&c.dragging.enable(),c.closePopup(),c.unbindPopup(),r(a.message)&&(c.bindPopup(a.message,a.popupOptions),g.hasLayer(c)&&a.focus===!0&&c.openPopup())}!r(a.message)&&r(b.message)&&(c.closePopup(),c.unbindPopup()),q.LabelPlugin.isLoaded()&&(h(a.label)&&h(a.label.message)?"label"in b&&"message"in b.label&&!angular.equals(a.label.message,b.label.message)?c.updateLabelContent(a.label.message):!angular.isFunction(c.getLabel)||angular.isFunction(c.getLabel)&&!h(c.getLabel())?(c.bindLabel(a.label.message,a.label.options),J(c,a)):J(c,a):(!("label"in a)||"message"in a.label)&&angular.isFunction(c.unbindLabel)&&c.unbindLabel()),r(a.message)&&!r(b.message)&&c.bindPopup(a.message,a.popupOptions),r(a.message)&&r(b.message)&&a.message!==b.message&&c.setPopupContent(a.message);var l=!1;a.focus!==!0&&b.focus===!0&&(c.closePopup(),l=!0),(a.focus===!0&&(!h(b.focus)||b.focus===!1)||i&&a.focus===!0)&&(c.openPopup(),l=!0),b.zIndexOffset!==a.zIndexOffset&&c.setZIndexOffset(a.zIndexOffset);var m=c.getLatLng(),n=r(a.layer)&&q.MarkerClusterPlugin.is(f.overlays[a.layer]);n?l?(a.lat!==b.lat||a.lng!==b.lng)&&(f.overlays[a.layer].removeLayer(c),c.setLatLng([a.lat,a.lng]),f.overlays[a.layer].addLayer(c)):m.lat!==a.lat||m.lng!==a.lng?(f.overlays[a.layer].removeLayer(c),c.setLatLng([a.lat,a.lng]),f.overlays[a.layer].addLayer(c)):a.lat!==b.lat||a.lng!==b.lng?(f.overlays[a.layer].removeLayer(c),c.setLatLng([a.lat,a.lng]),f.overlays[a.layer].addLayer(c)):t(a.icon)&&t(b.icon)&&!angular.equals(a.icon,b.icon)&&(f.overlays[a.layer].removeLayer(c),f.overlays[a.layer].addLayer(c)):(m.lat!==a.lat||m.lng!==a.lng)&&c.setLatLng([a.lat,a.lng])}},M=function(a,b){return h(a)?b?a[b]:a:void 0},N=function(a,b,c){return h(a)?b?c?a[c][b]:a[b]:void y.error(w+"marker id missing in getMarker"):void 0};return{resetMarkerGroup:C,resetMarkerGroups:D,deleteMarker:E,manageOpenPopup:I,manageOpenLabel:J,createMarker:function(a){if(!h(a)||!v.validateCoords(a))return void y.error(w+"The marker definition is not valid.");var b=v.getCoords(a);if(!h(b))return void y.error(w+"Unable to get coordinates from markerData.");var c={icon:B(a.icon),title:h(a.title)?a.title:"",draggable:h(a.draggable)?a.draggable:!1,clickable:h(a.clickable)?a.clickable:!0,riseOnHover:h(a.riseOnHover)?a.riseOnHover:!1,zIndexOffset:h(a.zIndexOffset)?a.zIndexOffset:0,iconAngle:h(a.iconAngle)?a.iconAngle:0};for(var d in a)a.hasOwnProperty(d)&&!c.hasOwnProperty(d)&&(c[d]=a[d]);var e=new L.marker(b,c);return r(a.message)||e.unbindPopup(),e},addMarkerToGroup:function(a,b,c,d){return r(b)?j.isLoaded()?(h(u[b])||(u[b]=new L.MarkerClusterGroup(c),d.addLayer(u[b])),void u[b].addLayer(a)):void y.error(w+"The MarkerCluster plugin is not loaded."):void y.error(w+"The marker group you have specified is invalid.")},listenMarkerEvents:function(a,b,c,d,e){a.on("popupopen",function(){p(c,function(){(h(a._popup)||h(a._popup._contentNode))&&(b.focus=!0,I(a,b,e))})}),a.on("popupclose",function(){p(c,function(){b.focus=!1})}),a.on("add",function(){p(c,function(){"label"in b&&J(a,b)})})},updateMarker:K,addMarkerWatcher:function(a,b,c,d,e,f){var g=q.getObjectArrayPath("markers."+b);x(c,g,f,function(f,g,i){return h(f)?void K(f,g,a,b,c,d,e):(E(a,e,d),void i())})},string:z,log:A,getModelFromModels:N,getLayerModels:M}}]),angular.module("ui-leaflet").factory("leafletPathsHelpers",["$rootScope","leafletLogger","leafletHelpers",function(a,b,c){function d(a){return a.filter(function(a){return k(a)}).map(function(a){return e(a)})}function e(a){return i(a)?new L.LatLng(a[0],a[1]):new L.LatLng(a.lat,a.lng)}function f(a){return a.map(function(a){return d(a)})}function g(a,b){for(var c={},d=0;d0&&e(a[0].boundingbox)?i.resolve(a[0]):i.reject("[Nominatim] Invalid address")}),i.promise}}}]),angular.module("ui-leaflet").directive("bounds",["leafletLogger","$timeout","$http","leafletHelpers","nominatimService","leafletBoundsHelpers",function(a,b,c,d,e,f){var g=a;return{restrict:"A",scope:!1,replace:!1,require:["leaflet"],link:function(a,c,h,i){var j=d.isDefined,k=f.createLeafletBounds,l=i[0].getLeafletScope(),m=i[0],n=d.errorHeader+" [Bounds] ",o=function(a){return 0===a._southWest.lat&&0===a._southWest.lng&&0===a._northEast.lat&&0===a._northEast.lng};m.getMap().then(function(c){l.$on("boundsChanged",function(a){var d=a.currentScope,e=c.getBounds();if(!o(e)&&!d.settingBoundsFromScope){d.settingBoundsFromLeaflet=!0;var f={northEast:{lat:e._northEast.lat,lng:e._northEast.lng},southWest:{lat:e._southWest.lat,lng:e._southWest.lng},options:e.options};angular.equals(d.bounds,f)||(d.bounds=f),b(function(){d.settingBoundsFromLeaflet=!1})}});var d;l.$watch("bounds",function(f){if(!a.settingBoundsFromLeaflet){if(j(f.address)&&f.address!==d)return a.settingBoundsFromScope=!0,e.query(f.address,h.id).then(function(a){var b=a.boundingbox,d=[[b[0],b[2]],[b[1],b[3]]];c.fitBounds(d)},function(a){g.error(n+" "+a+".")}),d=f.address,void b(function(){a.settingBoundsFromScope=!1});var i=k(f);i&&!c.getBounds().equals(i)&&(a.settingBoundsFromScope=!0,c.fitBounds(i,f.options),b(function(){a.settingBoundsFromScope=!1}))}},!0)})}}}]);var centerDirectiveTypes=["center","lfCenter"],centerDirectives={};centerDirectiveTypes.forEach(function(a){centerDirectives[a]=["leafletLogger","$q","$location","$timeout","leafletMapDefaults","leafletHelpers","leafletBoundsHelpers","leafletMapEvents",function(b,c,d,e,f,g,h,i){var j,k=g.isDefined,l=g.isNumber,m=g.isSameCenterOnMap,n=g.safeApply,o=g.isValidCenter,p=h.isValidBounds,q=g.isUndefinedOrEmpty,r=g.errorHeader,s=b,t=function(a,b){return k(a)&&p(a)&&q(b)};return{restrict:"A",scope:!1,replace:!1,require:"leaflet",controller:function(){j=c.defer(),this.getCenter=function(){return j.promise}},link:function(b,c,g,p){var q=p.getLeafletScope(),u=q[a];p.getMap().then(function(b){var c=f.getDefaults(g.id);if(-1!==g[a].search("-"))return s.error(r+' The "center" variable can\'t use a "-" on its key name: "'+g[a]+'".'),void b.setView([c.center.lat,c.center.lng],c.center.zoom);if(t(q.bounds,u))b.fitBounds(h.createLeafletBounds(q.bounds),q.bounds.options),u=b.getCenter(),n(q,function(c){angular.extend(c[a],{lat:b.getCenter().lat,lng:b.getCenter().lng,zoom:b.getZoom(),autoDiscover:!1})}),n(q,function(a){var c=b.getBounds();a.bounds={northEast:{lat:c._northEast.lat,lng:c._northEast.lng},southWest:{lat:c._southWest.lat,lng:c._southWest.lng}}});else{if(!k(u))return s.error(r+' The "center" property is not defined in the main scope'),void b.setView([c.center.lat,c.center.lng],c.center.zoom);k(u.lat)&&k(u.lng)||k(u.autoDiscover)||angular.copy(c.center,u)}var p,v;if("yes"===g.urlHashCenter){var w=function(){var a,b=d.search();if(k(b.c)){var c=b.c.split(":");3===c.length&&(a={lat:parseFloat(c[0]),lng:parseFloat(c[1]),zoom:parseInt(c[2],10)})}return a};p=w(),q.$on("$locationChangeSuccess",function(c){var d=c.currentScope,e=w();k(e)&&!m(e,b)&&angular.extend(d[a],{lat:e.lat,lng:e.lng,zoom:e.zoom})})}q.$watch(a,function(a){return q.settingCenterFromLeaflet?void 0:(k(p)&&(angular.copy(p,a),p=void 0),o(a)||a.autoDiscover===!0?a.autoDiscover===!0?(l(a.zoom)||b.setView([c.center.lat,c.center.lng],c.center.zoom),void(l(a.zoom)&&a.zoom>c.center.zoom?b.locate({setView:!0,maxZoom:a.zoom}):k(c.maxZoom)?b.locate({setView:!0,maxZoom:c.maxZoom}):b.locate({setView:!0}))):void(v&&m(a,b)||(q.settingCenterFromScope=!0,b.setView([a.lat,a.lng],a.zoom),i.notifyCenterChangedToBounds(q,b),e(function(){q.settingCenterFromScope=!1}))):void s.warn(r+" invalid 'center'"))},!0),b.whenReady(function(){v=!0}),b.on("moveend",function(){j.resolve(),i.notifyCenterUrlHashChanged(q,b,g,d.search()),m(u,b)||q.settingCenterFromScope||(q.settingCenterFromLeaflet=!0,n(q,function(c){q.settingCenterFromScope||angular.extend(c[a],{lat:b.getCenter().lat,lng:b.getCenter().lng,zoom:b.getZoom(),autoDiscover:!1}),i.notifyCenterChangedToBounds(q,b),e(function(){q.settingCenterFromLeaflet=!1})}))}),u.autoDiscover===!0&&b.on("locationerror",function(){s.warn(r+" The Geolocation API is unauthorized on this page."),o(u)?(b.setView([u.lat,u.lng],u.zoom),i.notifyCenterChangedToBounds(q,b)):(b.setView([c.center.lat,c.center.lng],c.center.zoom),i.notifyCenterChangedToBounds(q,b))})})}}}]}),centerDirectiveTypes.forEach(function(a){angular.module("ui-leaflet").directive(a,centerDirectives[a])}),angular.module("ui-leaflet").directive("controls",["leafletLogger","leafletHelpers","leafletControlHelpers",function(a,b,c){var d=a;return{restrict:"A",scope:!1,replace:!1,require:"?^leaflet",link:function(a,e,f,g){if(g){var h=c.createControl,i=c.isValidControlType,j=g.getLeafletScope(),k=b.isDefined,l=b.isArray,m={},n=b.errorHeader+" [Controls] ";g.getMap().then(function(a){j.$watchCollection("controls",function(b){for(var c in m)k(b[c])||(a.hasControl(m[c])&&a.removeControl(m[c]),delete m[c]);for(var e in b){var f,g=k(b[e].type)?b[e].type:e;if(!i(g))return void d.error(n+" Invalid control type: "+g+".");if("custom"!==g)f=h(g,b[e]),a.addControl(f),m[e]=f;else{var j=b[e];if(l(j))for(var o in j){var p=j[o];a.addControl(p),m[e]=k(m[e])?m[e].concat([p]):[p]}else a.addControl(j),m[e]=j}}})})}}}}]),angular.module("ui-leaflet").directive("decorations",["leafletLogger","leafletHelpers",function(a,b){var c=a;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,d,e,f){function g(a){return k(a)&&k(a.coordinates)&&(j.isLoaded()||c.error("[AngularJS - Leaflet] The PolylineDecorator Plugin is not loaded.")),L.polylineDecorator(a.coordinates)}function h(a,b){return k(a)&&k(b)&&k(b.coordinates)&&k(b.patterns)?(a.setPaths(b.coordinates),a.setPatterns(b.patterns),a):void 0}var i=f.getLeafletScope(),j=b.PolylineDecoratorPlugin,k=b.isDefined,l={};f.getMap().then(function(a){i.$watch("decorations",function(b){for(var c in l)k(b[c])&&angular.equals(b[c],l)||(a.removeLayer(l[c]),delete l[c]);for(var d in b){var e=b[d],f=g(e);k(f)&&(l[d]=f,a.addLayer(f),h(f,e))}},!0)})}}}]),angular.module("ui-leaflet").directive("eventBroadcast",["leafletLogger","$rootScope","leafletHelpers","leafletMapEvents","leafletIterators",function(a,b,c,d,e){var f=a;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,b,g,h){var i=c.isObject,j=c.isDefined,k=h.getLeafletScope(),l=k.eventBroadcast,m=d.getAvailableMapEvents(),n=d.addEvents;h.getMap().then(function(a){var b=[],c="broadcast";j(l.map)?i(l.map)?("emit"!==l.map.logic&&"broadcast"!==l.map.logic?f.warn("[AngularJS - Leaflet] Available event propagation logic are: 'emit' or 'broadcast'."):c=l.map.logic,i(l.map.enable)&&l.map.enable.length>=0?e.each(l.map.enable,function(a){-1===b.indexOf(a)&&-1!==m.indexOf(a)&&b.push(a)}):f.warn("[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model.")):f.warn("[AngularJS - Leaflet] event-broadcast.map must be an object check your model."):b=m,n(a,b,"eventName",k,c)})}}}]),angular.module("ui-leaflet").directive("geojson",["leafletLogger","$rootScope","leafletData","leafletHelpers","leafletWatchHelpers","leafletDirectiveControlsHelpers","leafletIterators","leafletGeoJsonEvents",function(a,b,c,d,e,f,g,h){var i=e.maybeWatch,j=d.watchOptions,k=f.extend,l=d,m=g;return{restrict:"A",scope:!1,replace:!1,require:"leaflet",link:function(a,b,e,f){var g=d.isDefined,n=f.getLeafletScope(),o={},p=!1;f.getMap().then(function(a){var b;b=n.watchOptions&&n.watchOptions.geojson?n.watchOptions.geojson:j;var f=function(a,b){var c;return c=angular.isFunction(a.onEachFeature)?a.onEachFeature:function(c,f){d.LabelPlugin.isLoaded()&&g(c.properties.description)&&f.bindLabel(c.properties.description),h.bindEvents(e.id,f,null,c,n,b,{resetStyleOnMouseout:a.resetStyleOnMouseout,mapId:e.id})}},q=l.isDefined(e.geojsonNested)&&l.isTruthy(e.geojsonNested),r=function(){if(o){var b=function(b){g(b)&&a.hasLayer(b)&&a.removeLayer(b)};return q?void m.each(o,function(a){b(a)}):void b(o)}},s=function(b,d){var h=angular.copy(b);if(g(h)&&g(h.data)){var i=f(h,d);g(h.options)||(h.options={style:h.style,filter:h.filter,onEachFeature:i,pointToLayer:h.pointToLayer});var j=L.geoJson(h.data,h.options);d&&l.isString(d)?o[d]=j:o=j,j.addTo(a),p||(p=!0,c.setGeoJSON(o,e.id))}},t=function(a){if(r(),q){if(!a||!Object.keys(a).length)return;return void m.each(a,function(a,b){s(a,b)})}s(a)};k(e.id,"geojson",t,r),i(n,"geojson",b,function(a){t(a)})})}}}]),angular.module("ui-leaflet").directive("layercontrol",["$filter","leafletLogger","leafletData","leafletHelpers",function(a,b,c,d){var e=b;return{restrict:"E",scope:{icons:"=?",autoHideOpacity:"=?",showGroups:"=?",title:"@",baseTitle:"@",overlaysTitle:"@"},replace:!0,transclude:!1,require:"^leaflet",controller:["$scope","$element","$sce",function(a,b,f){e.debug("[Angular Directive - Layers] layers",a,b);var g=d.safeApply,h=d.isDefined;angular.extend(a,{baselayer:"",oldGroup:"",layerProperties:{},groupProperties:{},rangeIsSupported:d.rangeIsSupported(),changeBaseLayer:function(b,e){d.safeApply(a,function(d){d.baselayer=b,c.getMap().then(function(e){c.getLayers().then(function(c){if(!e.hasLayer(c.baselayers[b])){for(var f in d.layers.baselayers)d.layers.baselayers[f].icon=d.icons.unradio,e.hasLayer(c.baselayers[f])&&e.removeLayer(c.baselayers[f]);e.addLayer(c.baselayers[b]),d.layers.baselayers[b].icon=a.icons.radio}})})}),e.preventDefault()},moveLayer:function(b,c,d){var e=Object.keys(a.layers.baselayers).length;if(c>=1+e&&c<=a.overlaysArray.length+e){var f;for(var h in a.layers.overlays)if(a.layers.overlays[h].index===c){f=a.layers.overlays[h];break}f&&g(a,function(){f.index=b.index,b.index=c})}d.stopPropagation(),d.preventDefault()},initIndex:function(b,c){var d=Object.keys(a.layers.baselayers).length;b.index=h(b.index)?b.index:c+d+1},initGroup:function(b){a.groupProperties[b]=a.groupProperties[b]?a.groupProperties[b]:{}},toggleOpacity:function(b,c){if(c.visible){if(a.autoHideOpacity&&!a.layerProperties[c.name].opacityControl)for(var d in a.layerProperties)a.layerProperties[d].opacityControl=!1;a.layerProperties[c.name].opacityControl=!a.layerProperties[c.name].opacityControl}b.stopPropagation(),b.preventDefault()},toggleLegend:function(b){a.layerProperties[b.name].showLegend=!a.layerProperties[b.name].showLegend},showLegend:function(b){return b.legend&&a.layerProperties[b.name].showLegend},unsafeHTML:function(a){return f.trustAsHtml(a)},getOpacityIcon:function(b){return b.visible&&a.layerProperties[b.name].opacityControl?a.icons.close:a.icons.open},getGroupIcon:function(b){return b.visible?a.icons.check:a.icons.uncheck},changeOpacity:function(b){var d=a.layerProperties[b.name].opacity;c.getMap().then(function(e){c.getLayers().then(function(c){var f;for(var g in a.layers.overlays)if(a.layers.overlays[g]===b){f=c.overlays[g];break}e.hasLayer(f)&&(f.setOpacity&&f.setOpacity(d/100),f.getLayers&&f.eachLayer&&f.eachLayer(function(a){a.setOpacity&&a.setOpacity(d/100)}))})})},changeGroupVisibility:function(b){if(h(a.groupProperties[b])){var c=a.groupProperties[b].visible;for(var d in a.layers.overlays){var e=a.layers.overlays[d];e.group===b&&(e.visible=c)}}}});var i=b.get(0);L.Browser.touch?L.DomEvent.on(i,"click",L.DomEvent.stopPropagation):(L.DomEvent.disableClickPropagation(i),L.DomEvent.on(i,"mousewheel",L.DomEvent.stopPropagation))}],template:'

{{ title }}

{{ baseTitle }}
{{ overlaysTitle }}
Range is not supported in this browser
',link:function(a,b,e,f){var g=d.isDefined,h=f.getLeafletScope(),i=h.layers;a.$watch("icons",function(){var b={uncheck:"fa fa-square-o",check:"fa fa-check-square-o",radio:"fa fa-dot-circle-o",unradio:"fa fa-circle-o",up:"fa fa-angle-up",down:"fa fa-angle-down",open:"fa fa-angle-double-down",close:"fa fa-angle-double-up",toggleLegend:"fa fa-pencil-square-o"};g(a.icons)?(angular.extend(b,a.icons),angular.extend(a.icons,b)):a.icons=b}),e.order=!g(e.order)||"normal"!==e.order&&"reverse"!==e.order?"normal":e.order,a.order="normal"===e.order,a.orderNumber="normal"===e.order?-1:1,a.layers=i,f.getMap().then(function(b){h.$watch("layers.baselayers",function(d){var e={};c.getLayers().then(function(c){var f;for(f in d){var g=d[f];g.icon=a.icons[b.hasLayer(c.baselayers[f])?"radio":"unradio"],e[f]=g}a.baselayersArray=e})}),h.$watch("layers.overlays",function(b){var d=[],e={};c.getLayers().then(function(c){var f;for(f in b){var h=b[f];h.icon=a.icons[h.visible?"check":"uncheck"],d.push(h),g(a.layerProperties[h.name])||(a.layerProperties[h.name]={opacity:g(h.layerOptions.opacity)?100*h.layerOptions.opacity:100,opacityControl:!1,showLegend:!0}),g(h.group)&&(g(a.groupProperties[h.group])||(a.groupProperties[h.group]={visible:!1}),e[h.group]=g(e[h.group])?e[h.group]:{count:0,visibles:0},e[h.group].count++,h.visible&&e[h.group].visibles++),g(h.index)&&c.overlays[f].setZIndex&&c.overlays[f].setZIndex(b[f].index)}for(f in e)a.groupProperties[f].visible=e[f].visibles===e[f].count;a.overlaysArray=d})},!0)})}}}]),angular.module("ui-leaflet").directive("layers",["leafletLogger","$q","leafletData","leafletHelpers","leafletLayerHelpers","leafletControlHelpers",function(a,b,c,d,e,f){return{restrict:"A",scope:!1,replace:!1,require:"leaflet",controller:["$scope",function(a){a._leafletLayers=b.defer(),this.getLayers=function(){return a._leafletLayers.promise}}],link:function(a,b,g,h){var i=d.isDefined,j={},k=h.getLeafletScope(),l=k.layers,m=e.createLayer,n=e.safeAddLayer,o=e.safeRemoveLayer,p=f.updateLayersControl,q=!1;h.getMap().then(function(b){a._leafletLayers.resolve(j),c.setLayers(j,g.id),j.baselayers={},j.overlays={};var d=g.id,e=!1;for(var f in l.baselayers){var h=m(l.baselayers[f]);i(h)?(j.baselayers[f]=h,l.baselayers[f].top===!0&&(n(b,j.baselayers[f]),e=!0)):delete l.baselayers[f]}!e&&Object.keys(j.baselayers).length>0&&n(b,j.baselayers[Object.keys(l.baselayers)[0]]);for(f in l.overlays){"cartodb"===l.overlays[f].type;var r=m(l.overlays[f]);i(r)?(j.overlays[f]=r,l.overlays[f].visible===!0&&n(b,j.overlays[f])):delete l.overlays[f]}k.$watch("layers.baselayers",function(a,c){if(angular.equals(a,c))return q=p(b,d,q,a,l.overlays,j),!0;for(var e in j.baselayers)(!i(a[e])||a[e].doRefresh)&&(b.hasLayer(j.baselayers[e])&&b.removeLayer(j.baselayers[e]), -delete j.baselayers[e],a[e]&&a[e].doRefresh&&(a[e].doRefresh=!1));for(var f in a)if(i(j.baselayers[f]))a[f].top!==!0||b.hasLayer(j.baselayers[f])?a[f].top===!1&&b.hasLayer(j.baselayers[f])&&b.removeLayer(j.baselayers[f]):n(b,j.baselayers[f]);else{var g=m(a[f]);i(g)&&(j.baselayers[f]=g,a[f].top===!0&&n(b,j.baselayers[f]))}var h=!1;for(var k in j.baselayers)if(b.hasLayer(j.baselayers[k])){h=!0;break}!h&&Object.keys(j.baselayers).length>0&&n(b,j.baselayers[Object.keys(j.baselayers)[0]]),q=p(b,d,q,a,l.overlays,j)},!0),k.$watch("layers.overlays",function(a,c){if(angular.equals(a,c))return q=p(b,d,q,l.baselayers,a,j),!0;for(var e in j.overlays)if(!i(a[e])||a[e].doRefresh){if(b.hasLayer(j.overlays[e])){var f=i(a[e])?a[e].layerOptions:null;o(b,j.overlays[e],f)}delete j.overlays[e],a[e]&&a[e].doRefresh&&(a[e].doRefresh=!1)}for(var g in a){if(i(j.overlays[g]))a[g].visible&&!b.hasLayer(j.overlays[g])?n(b,j.overlays[g]):a[g].visible===!1&&b.hasLayer(j.overlays[g])&&o(b,j.overlays[g],a[g].layerOptions);else{var h=m(a[g]);if(!i(h))continue;j.overlays[g]=h,a[g].visible===!0&&n(b,j.overlays[g])}a[g].visible&&b._loaded&&a[g].data&&"heatmap"===a[g].type&&(j.overlays[g].setData(a[g].data),j.overlays[g].update())}q=p(b,d,q,l.baselayers,a,j)},!0)})}}}]),angular.module("ui-leaflet").directive("legend",["leafletLogger","$http","$timeout","leafletHelpers","leafletLegendHelpers",function(a,b,c,d,e){var f=a,g=d.errorHeader+" [Legend] ";return{restrict:"A",scope:!1,replace:!1,require:"leaflet",transclude:!1,link:function(a,b,c,h){var i,j,k,l,m=d.isArray,n=d.isString,o=d.isDefined,p=d.isFunction,q=h.getLeafletScope(),r=q.legend;q.$watch("legend",function(a){o(a)&&(i=a.legendClass?a.legendClass:"legend",j=a.position||"bottomright",l=a.type||"arcgis")},!0);var s=function(a,b,c){b&&b.layers&&b.layers.length>0&&(o(k)?e.updateLegend(k.getContainer(),b,l,c):(k=L.control({position:j}),k.onAdd=e.getOnAddLegend(b,i,l,c),k.addTo(a)),o(r.loadedData)&&p(r.loadedData)&&r.loadedData())};h.getMap().then(function(a){q.$watch("legend",function(b){return o(b)?o(b.url)||"arcgis"!==l||m(b.colors)&&m(b.labels)&&b.colors.length===b.labels.length?o(b.url)?void f.info(g+" loading legend service."):(o(k)&&(k.removeFrom(a),k=null),k=L.control({position:j}),"arcgis"===l&&(k.onAdd=e.getOnAddArrayLegend(b,i)),void k.addTo(a)):void f.warn(g+" legend.colors and legend.labels must be set."):void(o(k)&&(k.removeFrom(a),k=null))}),q.$watch("legend.url",function(b){if(o(b)){if(!m(b)&&!n(b))return void f.warn(g+" legend.url must be an array or string.");for(var d,h=n(b)?[b]:b,i=function(c,e){return function(i){o(i.data.error)?f.warn(g+"Error loadin legend from: "+e,i.data.error.message):d&&d.layers&&d.layers.length>0?d.layers=d.layers.concat(i.data.layers):d=i.data,c===h.length-1&&s(a,d,b)}},j=function(a){f.warn(g+" legend.url not loaded.",a)},k=0;k
', - controller: function ($scope) { + controller: function controller($scope) { this._leafletMap = $q.defer(); this.getMap = function () { return this._leafletMap.promise; }; - this.getLeafletScope = function() { + this.getLeafletScope = function () { return $scope; }; }, - link: function(scope, element, attrs, ctrl) { + link: function link(scope, element, attrs, ctrl) { var isDefined = leafletHelpers.isDefined, - defaults = leafletMapDefaults.setDefaults(scope.defaults, attrs.id), + defaults = leafletMapDefaults.setDefaults(scope.defaults, attrs.id), mapEvents = leafletMapEvents.getAvailableMapEvents(), addEvents = leafletMapEvents.addEvents; - scope.mapId = attrs.id; + scope.mapId = attrs.id; leafletData.setDirectiveControls({}, attrs.id); // Set width and height utility functions @@ -71,14 +72,12 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', if (isDefined(attrs.width)) { updateWidth(); - scope.$watch( - function () { - return element[0].getAttribute('width'); - }, - function () { - updateWidth(); - map.invalidateSize(); - }); + scope.$watch(function () { + return element[0].getAttribute('width'); + }, function () { + updateWidth(); + map.invalidateSize(); + }); } // If the height attribute defined update css @@ -86,14 +85,12 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', if (isDefined(attrs.height)) { updateHeight(); - scope.$watch( - function () { - return element[0].getAttribute('height'); - }, - function () { - updateHeight(); - map.invalidateSize(); - }); + scope.$watch(function () { + return element[0].getAttribute('height'); + }, function () { + updateHeight(); + map.invalidateSize(); + }); } // Create the Leaflet Map Object with the options @@ -105,30 +102,25 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', } // If no layers nor tiles defined, set the default tileLayer - if (!isDefined(attrs.tiles) && (!isDefined(attrs.layers))) { + if (!isDefined(attrs.tiles) && !isDefined(attrs.layers)) { var tileLayerObj = L.tileLayer(defaults.tileLayer, defaults.tileLayerOptions); tileLayerObj.addTo(map); leafletData.setTiles(tileLayerObj, attrs.id); } // Set zoom control configuration - if (isDefined(map.zoomControl) && - isDefined(defaults.zoomControlPosition)) { + if (isDefined(map.zoomControl) && isDefined(defaults.zoomControlPosition)) { map.zoomControl.setPosition(defaults.zoomControlPosition); } - if (isDefined(map.zoomControl) && - defaults.zoomControl===false) { + if (isDefined(map.zoomControl) && defaults.zoomControl === false) { map.zoomControl.removeFrom(map); } - if (isDefined(map.zoomsliderControl) && - isDefined(defaults.zoomsliderControl) && - defaults.zoomsliderControl===false) { + if (isDefined(map.zoomsliderControl) && isDefined(defaults.zoomsliderControl) && defaults.zoomsliderControl === false) { map.zoomsliderControl.removeFrom(map); } - // if no event-broadcast attribute, all events are broadcasted if (!isDefined(attrs.eventBroadcast)) { var logic = "broadcast"; @@ -136,7 +128,7 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', } // Resolve the map object to the promises - map.whenReady(function() { + map.whenReady(function () { leafletData.setMap(map, attrs.id); }); @@ -149,13 +141,15 @@ angular.module('ui-leaflet', ['nemLogging']).directive('leaflet', //Handle request to invalidate the map size //Up scope using $scope.$emit('invalidateSize') //Down scope using $scope.$broadcast('invalidateSize') - scope.$on('invalidateSize', function() { + scope.$on('invalidateSize', function () { map.invalidateSize(); }); } }; }); +'use strict'; + angular.module('ui-leaflet').factory('leafletBoundsHelpers', function (leafletLogger, leafletHelpers) { var isArray = leafletHelpers.isArray, @@ -165,28 +159,20 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', function (leafletLo $log = leafletLogger; function _isValidBounds(bounds) { - return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) && - angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) && - angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) && - angular.isNumber(bounds.northEast.lng); + return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) && angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) && angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) && angular.isNumber(bounds.northEast.lng); } return { - createLeafletBounds: function(bounds) { + createLeafletBounds: function createLeafletBounds(bounds) { if (_isValidBounds(bounds)) { - return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng], - [bounds.northEast.lat, bounds.northEast.lng ]); + return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng], [bounds.northEast.lat, bounds.northEast.lng]); } }, isValidBounds: _isValidBounds, - createBoundsFromArray: function(boundsArray) { - if (!(isArray(boundsArray) && boundsArray.length === 2 && - isArray(boundsArray[0]) && isArray(boundsArray[1]) && - boundsArray[0].length === 2 && boundsArray[1].length === 2 && - isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) && - isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) { + createBoundsFromArray: function createBoundsFromArray(boundsArray) { + if (!(isArray(boundsArray) && boundsArray.length === 2 && isArray(boundsArray[0]) && isArray(boundsArray[1]) && boundsArray[0].length === 2 && boundsArray[1].length === 2 && isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) && isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) { $log.error("[AngularJS - Leaflet] The bounds array is not valid."); return; } @@ -203,7 +189,7 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', function (leafletLo }; }, - createBoundsFromLeaflet: function(lfBounds) { + createBoundsFromLeaflet: function createBoundsFromLeaflet(lfBounds) { if (!(isDefined(lfBounds) && isFunction(lfBounds.getNorthEast) && isFunction(lfBounds.getSouthWest))) { $log.error("[AngularJS - Leaflet] The leaflet bounds is not valid object."); return; @@ -226,6 +212,8 @@ angular.module('ui-leaflet').factory('leafletBoundsHelpers', function (leafletLo }; }); +'use strict'; + angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootScope, leafletLogger, leafletHelpers, leafletLayerHelpers, leafletMapDefaults) { var isDefined = leafletHelpers.isDefined, isObject = leafletHelpers.isObject, @@ -234,16 +222,16 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco errorHeader = leafletHelpers.errorHeader + ' [Controls] ', $log = leafletLogger; - var _controlLayersMustBeVisible = function(baselayers, overlays, mapId) { + var _controlLayersMustBeVisible = function _controlLayersMustBeVisible(baselayers, overlays, mapId) { var defaults = leafletMapDefaults.getDefaults(mapId); - if(!defaults.controls.layers.visible) { + if (!defaults.controls.layers.visible) { return false; } var atLeastOneControlItemMustBeShown = false; if (isObject(baselayers)) { - Object.keys(baselayers).forEach(function(key) { + Object.keys(baselayers).forEach(function (key) { var layer = baselayers[key]; if (!isDefined(layer.layerOptions) || layer.layerOptions.showOnSelector !== false) { atLeastOneControlItemMustBeShown = true; @@ -252,7 +240,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco } if (isObject(overlays)) { - Object.keys(overlays).forEach(function(key) { + Object.keys(overlays).forEach(function (key) { var layer = overlays[key]; if (!isDefined(layer.layerParams) || layer.layerParams.showOnSelector !== false) { atLeastOneControlItemMustBeShown = true; @@ -263,7 +251,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco return atLeastOneControlItemMustBeShown; }; - var _createLayersControl = function(mapId) { + var _createLayersControl = function _createLayersControl(mapId) { var defaults = leafletMapDefaults.getDefaults(mapId); var controlOptions = { collapsed: defaults.controls.layers.collapsed, @@ -274,75 +262,75 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco angular.extend(controlOptions, defaults.controls.layers.options); var control; - if(defaults.controls.layers && isDefined(defaults.controls.layers.control)) { - control = defaults.controls.layers.control.apply(this, [[], [], controlOptions]); - } else { - control = new L.control.layers([], [], controlOptions); - } + if (defaults.controls.layers && isDefined(defaults.controls.layers.control)) { + control = defaults.controls.layers.control.apply(this, [[], [], controlOptions]); + } else { + control = new L.control.layers([], [], controlOptions); + } return control; }; var controlTypes = { draw: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.Draw)) { $log.error(errorHeader + ' Draw plugin is not loaded.'); return false; } return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.Control.Draw(params); } }, scale: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.control.scale(params); } }, fullscreen: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.Fullscreen)) { $log.error(errorHeader + ' Fullscreen plugin is not loaded.'); return false; } return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.Control.Fullscreen(params); } }, search: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.Search)) { $log.error(errorHeader + ' Search plugin is not loaded.'); return false; } return true; }, - checkValidParams: function(/* params */) { + checkValidParams: function checkValidParams() /* params */{ return true; }, - createControl: function(params) { + createControl: function createControl(params) { return new L.Control.Search(params); } }, custom: {}, minimap: { - isPluginLoaded: function() { + isPluginLoaded: function isPluginLoaded() { if (!angular.isDefined(L.Control.MiniMap)) { $log.error(errorHeader + ' Minimap plugin is not loaded.'); return false; @@ -350,14 +338,14 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco return true; }, - checkValidParams: function(params) { - if(!isDefined(params.layer)) { - $log.warn(errorHeader +' minimap "layer" option should be defined.'); + checkValidParams: function checkValidParams(params) { + if (!isDefined(params.layer)) { + $log.warn(errorHeader + ' minimap "layer" option should be defined.'); return false; } return true; }, - createControl: function(params) { + createControl: function createControl(params) { var layer = createLayer(params.layer); if (!isDefined(layer)) { @@ -373,11 +361,11 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco return { layersControlMustBeVisible: _controlLayersMustBeVisible, - isValidControlType: function(type) { + isValidControlType: function isValidControlType(type) { return Object.keys(controlTypes).indexOf(type) !== -1; }, - createControl: function (type, params) { + createControl: function createControl(type, params) { if (!controlTypes[type].checkValidParams(params)) { return; } @@ -385,7 +373,7 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco return controlTypes[type].createControl(params); }, - updateLayersControl: function(map, mapId, loaded, baselayers, overlays, leafletLayers) { + updateLayersControl: function updateLayersControl(map, mapId, loaded, baselayers, overlays, leafletLayers) { var i; var _layersControl = _controls[mapId]; var mustBeLoaded = _controlLayersMustBeVisible(baselayers, overlays, mapId); @@ -405,15 +393,13 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco _layersControl = _createLayersControl(mapId); _controls[mapId] = _layersControl; for (i in baselayers) { - var hideOnSelector = isDefined(baselayers[i].layerOptions) && - baselayers[i].layerOptions.showOnSelector === false; + var hideOnSelector = isDefined(baselayers[i].layerOptions) && baselayers[i].layerOptions.showOnSelector === false; if (!hideOnSelector && isDefined(leafletLayers.baselayers[i])) { _layersControl.addBaseLayer(leafletLayers.baselayers[i], baselayers[i].name); } } for (i in overlays) { - var hideOverlayOnSelector = isDefined(overlays[i].layerParams) && - overlays[i].layerParams.showOnSelector === false; + var hideOverlayOnSelector = isDefined(overlays[i].layerParams) && overlays[i].layerParams.showOnSelector === false; if (!hideOverlayOnSelector && isDefined(leafletLayers.overlays[i])) { _layersControl.addOverlay(leafletLayers.overlays[i], overlays[i].name); } @@ -426,32 +412,26 @@ angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootSco }; }); +'use strict'; + angular.module('ui-leaflet').service('leafletData', function (leafletLogger, $q, leafletHelpers) { var getDefer = leafletHelpers.getDefer, getUnresolvedDefer = leafletHelpers.getUnresolvedDefer, setResolvedDefer = leafletHelpers.setResolvedDefer; - // $log = leafletLogger; + // $log = leafletLogger; var _private = {}; var self = this; - var upperFirst = function (string) { + var upperFirst = function upperFirst(string) { return string.charAt(0).toUpperCase() + string.slice(1); }; - var _privateItems = [ - 'map', - 'tiles', - 'layers', - 'paths', - 'markers', - 'geoJSON', - 'UTFGrid', //odd ball on naming convention keeping to not break - 'decorations', - 'directiveControls']; + var _privateItems = ['map', 'tiles', 'layers', 'paths', 'markers', 'geoJSON', 'UTFGrid', //odd ball on naming convention keeping to not break + 'decorations', 'directiveControls']; //init - _privateItems.forEach(function(itemName){ + _privateItems.forEach(function (itemName) { _private[itemName] = {}; }); @@ -478,8 +458,9 @@ angular.module('ui-leaflet').service('leafletData', function (leafletLogger, $q, }); }); -angular.module('ui-leaflet') -.service('leafletDirectiveControlsHelpers', function (leafletLogger, leafletData, leafletHelpers) { +'use strict'; + +angular.module('ui-leaflet').service('leafletDirectiveControlsHelpers', function (leafletLogger, leafletData, leafletHelpers) { var _isDefined = leafletHelpers.isDefined, _isString = leafletHelpers.isString, _isObject = leafletHelpers.isObject, @@ -488,30 +469,28 @@ angular.module('ui-leaflet') var _errorHeader = _mainErrorHeader + '[leafletDirectiveControlsHelpers'; - var _extend = function(id, thingToAddName, createFn, cleanFn){ + var _extend = function _extend(id, thingToAddName, createFn, cleanFn) { var _fnHeader = _errorHeader + '.extend] '; var extender = {}; - if(!_isDefined(thingToAddName)){ + if (!_isDefined(thingToAddName)) { $log.error(_fnHeader + 'thingToAddName cannot be undefined'); return; } - if(_isString(thingToAddName) && _isDefined(createFn) && _isDefined(cleanFn)){ + if (_isString(thingToAddName) && _isDefined(createFn) && _isDefined(cleanFn)) { extender[thingToAddName] = { create: createFn, clean: cleanFn }; - } - else if(_isObject(thingToAddName) && !_isDefined(createFn) && !_isDefined(cleanFn)){ + } else if (_isObject(thingToAddName) && !_isDefined(createFn) && !_isDefined(cleanFn)) { extender = thingToAddName; - } - else{ + } else { $log.error(_fnHeader + 'incorrect arguments'); return; } //add external control to create / destroy markers without a watch - leafletData.getDirectiveControls().then(function(controls){ + leafletData.getDirectiveControls().then(function (controls) { angular.extend(controls, extender); leafletData.setDirectiveControls(controls, id); }); @@ -522,17 +501,18 @@ angular.module('ui-leaflet') }; }); -angular.module('ui-leaflet') -.service('leafletGeoJsonHelpers', function (leafletHelpers, leafletIterators) { +'use strict'; + +angular.module('ui-leaflet').service('leafletGeoJsonHelpers', function (leafletHelpers, leafletIterators) { var lHlp = leafletHelpers, - lIt = leafletIterators; - var Point = function(lat,lng){ + lIt = leafletIterators; + var Point = function Point(lat, lng) { this.lat = lat; this.lng = lng; return this; }; - var _getLat = function(value) { + var _getLat = function _getLat(value) { if (Array.isArray(value) && value.length === 2) { return value[1]; } else if (lHlp.isDefined(value.type) && value.type === 'Point') { @@ -542,7 +522,7 @@ angular.module('ui-leaflet') } }; - var _getLng = function(value) { + var _getLng = function _getLng(value) { if (Array.isArray(value) && value.length === 2) { return value[0]; } else if (lHlp.isDefined(value.type) && value.type === 'Point') { @@ -552,7 +532,7 @@ angular.module('ui-leaflet') } }; - var _validateCoords = function(coords) { + var _validateCoords = function _validateCoords(coords) { if (lHlp.isUndefined(coords)) { return false; } @@ -561,54 +541,50 @@ angular.module('ui-leaflet') return true; } } else if (lHlp.isDefined(coords.type)) { - if ( - coords.type === 'Point' && lHlp.isArray(coords.coordinates) && - coords.coordinates.length === 2 && - lHlp.isNumber(coords.coordinates[0]) && - lHlp.isNumber(coords.coordinates[1])) { - return true; - } + if (coords.type === 'Point' && lHlp.isArray(coords.coordinates) && coords.coordinates.length === 2 && lHlp.isNumber(coords.coordinates[0]) && lHlp.isNumber(coords.coordinates[1])) { + return true; } + } - var ret = lIt.all(['lat', 'lng'], function(pos){ - return lHlp.isDefined(coords[pos]) && lHlp.isNumber(coords[pos]); - }); - return ret; - }; + var ret = lIt.all(['lat', 'lng'], function (pos) { + return lHlp.isDefined(coords[pos]) && lHlp.isNumber(coords[pos]); + }); + return ret; + }; - var _getCoords = function(value) { - if (!value || !_validateCoords(value)) { - return; - } - var p = null; - if (Array.isArray(value) && value.length === 2) { - p = new Point(value[1], value[0]); - } else if (lHlp.isDefined(value.type) && value.type === 'Point') { - p = new Point(value.coordinates[1], value.coordinates[0]); - } else { - return value; - } - //note angular.merge is avail in angular 1.4.X we might want to fill it here - return angular.extend(value, p);//tap on lat, lng if it doesnt exist - }; + var _getCoords = function _getCoords(value) { + if (!value || !_validateCoords(value)) { + return; + } + var p = null; + if (Array.isArray(value) && value.length === 2) { + p = new Point(value[1], value[0]); + } else if (lHlp.isDefined(value.type) && value.type === 'Point') { + p = new Point(value.coordinates[1], value.coordinates[0]); + } else { + return value; + } + //note angular.merge is avail in angular 1.4.X we might want to fill it here + return angular.extend(value, p); //tap on lat, lng if it doesnt exist + }; + return { + getLat: _getLat, + getLng: _getLng, + validateCoords: _validateCoords, + getCoords: _getCoords + }; +}); - return { - getLat: _getLat, - getLng: _getLng, - validateCoords: _validateCoords, - getCoords: _getCoords - }; - }); +'use strict'; angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { - var _errorHeader = '[AngularJS - Leaflet] '; + var _errorHeader = '[ui-leaflet] '; var _copy = angular.copy; var _clone = _copy; /* For parsing paths to a field in an object - - Example: + Example: var obj = { bike:{ 1: 'hi' @@ -618,16 +594,15 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { _getObjectValue(obj,"bike.1") returns 'hi' this is getPath in ui-gmap */ - var _getObjectValue = function(object, pathStr) { + var _getObjectValue = function _getObjectValue(object, pathStr) { var obj; - if(!object || !angular.isObject(object)) - return; + if (!object || !angular.isObject(object)) return; //if the key is not a sting then we already have the value - if ((pathStr === null) || !angular.isString(pathStr)) { + if (pathStr === null || !angular.isString(pathStr)) { return pathStr; } obj = object; - pathStr.split('.').forEach(function(value) { + pathStr.split('.').forEach(function (value) { if (obj) { obj = obj[value]; } @@ -641,9 +616,9 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { returns: 'bike["one"]["two"]' */ - var _getObjectArrayPath = function(pathStr){ - return pathStr.split('.').reduce(function(previous, current) { - return previous + '["'+ current + '"]'; + var _getObjectArrayPath = function _getObjectArrayPath(pathStr) { + return pathStr.split('.').reduce(function (previous, current) { + return previous + '["' + current + '"]'; }); }; @@ -652,8 +627,8 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { returns: "bike.one.two" */ - var _getObjectDotPath = function(arrayOfStrings){ - return arrayOfStrings.reduce(function(previous, current) { + var _getObjectDotPath = function _getObjectDotPath(arrayOfStrings) { + return arrayOfStrings.reduce(function (previous, current) { return previous + '.' + current; }); }; @@ -661,15 +636,15 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { function _obtainEffectiveMapId(d, mapId) { var id, i; if (!angular.isDefined(mapId)) { - if (Object.keys(d).length === 0) { - id = "main"; - } else if (Object.keys(d).length >= 1) { - for (i in d) { - if (d.hasOwnProperty(i)) { - id = i; + if (Object.keys(d).length === 0) { + id = "main"; + } else if (Object.keys(d).length >= 1) { + for (i in d) { + if (d.hasOwnProperty(i)) { + id = i; + } } - } - } else { + } else { $log.error(_errorHeader + "- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call"); } } else { @@ -696,10 +671,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { return defer; } - var _isDefined = function(value) { + var _isDefined = function _isDefined(value) { return angular.isDefined(value) && value !== null; }; - var _isUndefined = function(value){ + var _isUndefined = function _isUndefined(value) { return !_isDefined(value); }; @@ -717,24 +692,23 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { @param name Name to normalize */ - var camelCase = function(name) { - return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - if (offset) { - return letter.toUpperCase(); - } else { - return letter; - } - }).replace(MOZ_HACK_REGEXP, "Moz$1"); + var camelCase = function camelCase(name) { + return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) { + if (offset) { + return letter.toUpperCase(); + } else { + return letter; + } + }).replace(MOZ_HACK_REGEXP, "Moz$1"); }; - /** Converts all accepted directives format into proper directive name. @param name Name to normalize */ - var directiveNormalize = function(name) { - return camelCase(name.replace(PREFIX_REGEXP, "")); + var directiveNormalize = function directiveNormalize(name) { + return camelCase(name.replace(PREFIX_REGEXP, "")); }; // END AngularJS port @@ -742,32 +716,32 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { return { camelCase: camelCase, directiveNormalize: directiveNormalize, - copy:_copy, - clone:_clone, + copy: _copy, + clone: _clone, errorHeader: _errorHeader, getObjectValue: _getObjectValue, - getObjectArrayPath:_getObjectArrayPath, + getObjectArrayPath: _getObjectArrayPath, getObjectDotPath: _getObjectDotPath, - defaultTo: function(val, _default){ + defaultTo: function defaultTo(val, _default) { return _isDefined(val) ? val : _default; }, //mainly for checking attributes of directives lets keep this minimal (on what we accept) - isTruthy: function(val){ + isTruthy: function isTruthy(val) { return val === 'true' || val === true; }, //Determine if a reference is {} - isEmpty: function(value) { + isEmpty: function isEmpty(value) { return Object.keys(value).length === 0; }, //Determine if a reference is undefined or {} - isUndefinedOrEmpty: function (value) { - return (angular.isUndefined(value) || value === null) || Object.keys(value).length === 0; + isUndefinedOrEmpty: function isUndefinedOrEmpty(value) { + return angular.isUndefined(value) || value === null || Object.keys(value).length === 0; }, // Determine if a reference is defined isDefined: _isDefined, - isUndefined:_isUndefined, + isUndefined: _isUndefined, isNumber: angular.isNumber, isString: angular.isString, isArray: angular.isArray, @@ -775,12 +749,11 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { isFunction: angular.isFunction, equals: angular.equals, - isValidCenter: function(center) { - return angular.isDefined(center) && angular.isNumber(center.lat) && - angular.isNumber(center.lng) && angular.isNumber(center.zoom); + isValidCenter: function isValidCenter(center) { + return angular.isDefined(center) && angular.isNumber(center.lat) && angular.isNumber(center.lng) && angular.isNumber(center.zoom); }, - isValidPoint: function(point) { + isValidPoint: function isValidPoint(point) { if (!angular.isDefined(point)) { return false; } @@ -790,19 +763,16 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { return angular.isNumber(point.lat) && angular.isNumber(point.lng); }, - isSameCenterOnMap: function(centerModel, map) { + isSameCenterOnMap: function isSameCenterOnMap(centerModel, map) { var mapCenter = map.getCenter(); var zoom = map.getZoom(); - if (centerModel.lat && centerModel.lng && - mapCenter.lat.toFixed(4) === centerModel.lat.toFixed(4) && - mapCenter.lng.toFixed(4) === centerModel.lng.toFixed(4) && - zoom === centerModel.zoom) { - return true; + if (centerModel.lat && centerModel.lng && mapCenter.lat.toFixed(4) === centerModel.lat.toFixed(4) && mapCenter.lng.toFixed(4) === centerModel.lng.toFixed(4) && zoom === centerModel.zoom) { + return true; } return false; }, - safeApply: function($scope, fn) { + safeApply: function safeApply($scope, fn) { var phase = $scope.$root.$$phase; if (phase === '$apply' || phase === '$digest') { $scope.$eval(fn); @@ -813,7 +783,7 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { obtainEffectiveMapId: _obtainEffectiveMapId, - getDefer: function(d, mapId) { + getDefer: function getDefer(d, mapId) { var id = _obtainEffectiveMapId(d, mapId), defer; if (!angular.isDefined(d[id]) || d[id].resolvedDefer === false) { @@ -826,41 +796,41 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { getUnresolvedDefer: _getUnresolvedDefer, - setResolvedDefer: function(d, mapId) { + setResolvedDefer: function setResolvedDefer(d, mapId) { var id = _obtainEffectiveMapId(d, mapId); d[id].resolvedDefer = true; }, - rangeIsSupported: function() { + rangeIsSupported: function rangeIsSupported() { var testrange = document.createElement('input'); testrange.setAttribute('type', 'range'); return testrange.type === 'range'; }, FullScreenControlPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Control.Fullscreen); } }, MiniMapControlPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Control.MiniMap); } }, AwesomeMarkersPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.AwesomeMarkers) && angular.isDefined(L.AwesomeMarkers.Icon); }, - is: function(icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.AwesomeMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -873,17 +843,17 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { }, VectorMarkersPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.VectorMarkers) && angular.isDefined(L.VectorMarkers.Icon); }, - is: function(icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.VectorMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -896,21 +866,21 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { }, DomMarkersPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { if (angular.isDefined(L.DomMarkers) && angular.isDefined(L.DomMarkers.Icon)) { return true; } else { return false; } }, - is: function (icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.DomMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -923,21 +893,21 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { }, PolylineDecoratorPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { if (angular.isDefined(L.PolylineDecorator)) { return true; } else { return false; } }, - is: function(decoration) { + is: function is(decoration) { if (this.isLoaded()) { return decoration instanceof L.PolylineDecorator; } else { return false; } }, - equal: function(decorationA, decorationB) { + equal: function equal(decorationA, decorationB) { if (!this.isLoaded()) { return false; } @@ -950,21 +920,21 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { }, MakiMarkersPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { if (angular.isDefined(L.MakiMarkers) && angular.isDefined(L.MakiMarkers.Icon)) { return true; } else { return false; } }, - is: function(icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.MakiMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -976,21 +946,21 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, ExtraMarkersPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { if (angular.isDefined(L.ExtraMarkers) && angular.isDefined(L.ExtraMarkers.Icon)) { return true; } else { return false; } }, - is: function (icon) { + is: function is(icon) { if (this.isLoaded()) { return icon instanceof L.ExtraMarkers.Icon; } else { return false; } }, - equal: function (iconA, iconB) { + equal: function equal(iconA, iconB) { if (!this.isLoaded()) { return false; } @@ -1002,10 +972,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, LabelPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Label); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.MarkerClusterGroup; } else { @@ -1014,10 +984,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, MarkerClusterPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.MarkerClusterGroup); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.MarkerClusterGroup; } else { @@ -1026,10 +996,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, GoogleLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Google); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.Google; } else { @@ -1038,37 +1008,37 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, LeafletProviderPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.TileLayer.Provider); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.TileLayer.Provider; } else { return false; } } - }, + }, ChinaLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.tileLayer.chinaProvider); } }, HeatLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.heatLayer); } }, WebGLHeatMapLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.TileLayer.WebGLHeatMap); } }, BingLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.BingLayer); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.BingLayer; } else { @@ -1077,10 +1047,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, WFSLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.GeoJSON.WFS !== undefined; }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.GeoJSON.WFS; } else { @@ -1089,10 +1059,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSBaseLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.basemapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.basemapLayer; } else { @@ -1101,10 +1071,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return lvector !== undefined && lvector.AGS !== undefined; }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof lvector.AGS; } else { @@ -1113,10 +1083,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSFeatureLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.featureLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.featureLayer; } else { @@ -1125,10 +1095,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSTiledMapLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.tiledMapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.tiledMapLayer; } else { @@ -1137,10 +1107,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSDynamicMapLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.dynamicMapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.dynamicMapLayer; } else { @@ -1149,10 +1119,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSImageMapLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.imageMapLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.imageMapLayer; } else { @@ -1161,10 +1131,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSClusteredLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.clusteredFeatureLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.clusteredFeatureLayer; } else { @@ -1173,10 +1143,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, AGSHeatmapLayerPlugin: { - isLoaded: function () { + isLoaded: function isLoaded() { return L.esri !== undefined && L.esri.heatmapFeatureLayer !== undefined; }, - is: function (layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.esri.heatmapFeatureLayer; } else { @@ -1185,10 +1155,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, YandexLayerPlugin: { - isLoaded: function() { + isLoaded: function isLoaded() { return angular.isDefined(L.Yandex); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.Yandex; } else { @@ -1197,10 +1167,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, GeoJSONPlugin: { - isLoaded: function(){ + isLoaded: function isLoaded() { return angular.isDefined(L.TileLayer.GeoJSON); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.TileLayer.GeoJSON; } else { @@ -1209,10 +1179,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, UTFGridPlugin: { - isLoaded: function(){ + isLoaded: function isLoaded() { return angular.isDefined(L.UtfGrid); }, - is: function(layer) { + is: function is(layer) { if (this.isLoaded()) { return layer instanceof L.UtfGrid; } else { @@ -1222,10 +1192,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, CartoDB: { - isLoaded: function(){ + isLoaded: function isLoaded() { return cartodb; }, - is: function(/*layer*/) { + is: function is() /*layer*/{ return true; /* if (this.isLoaded()) { @@ -1237,10 +1207,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { }, Leaflet: { DivIcon: { - is: function(icon) { + is: function is(icon) { return icon instanceof L.DivIcon; }, - equal: function(iconA, iconB) { + equal: function equal(iconA, iconB) { if (this.is(iconA)) { return angular.equals(iconA, iconB); } else { @@ -1249,10 +1219,10 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { } }, Icon: { - is: function(icon) { + is: function is(icon) { return icon instanceof L.Icon; }, - equal: function(iconA, iconB) { + equal: function equal(iconA, iconB) { if (this.is(iconA)) { return angular.equals(iconA, iconB); } else { @@ -1271,18 +1241,20 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { */ //legacy defaults watchOptions: { - type:'watchDeep', - individual:{ + type: 'watchDeep', + individual: { type: 'watchDeep' } } }; }); +'use strict'; + angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger, leafletHelpers) { var lHlp = leafletHelpers, - errorHeader = leafletHelpers.errorHeader + 'leafletIterators: '; + errorHeader = leafletHelpers.errorHeader + 'leafletIterators: '; //BEGIN COPY from underscore var _keys = Object.keys; @@ -1295,18 +1267,18 @@ angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; - var _isArrayLike = function(collection) { + var _isArrayLike = function _isArrayLike(collection) { var length = collection !== null && collection.length; - return lHlp.isNumber(length) && length >= 0 && length <= MAX_ARRAY_INDEX; + return lHlp.isNumber(length) && length >= 0 && length <= MAX_ARRAY_INDEX; }; // Keep the identity function around for default iteratees. - var _identity = function(value) { + var _identity = function _identity(value) { return value; }; - var _property = function(key) { - return function(obj) { + var _property = function _property(key) { + return function (obj) { return obj === null ? void 0 : obj[key]; }; }; @@ -1314,30 +1286,34 @@ angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger // Internal function that returns an efficient (for current engines) version // of the passed-in callback, to be repeatedly applied in other Underscore // functions. - var optimizeCb = function(func, context, argCount) { + var optimizeCb = function optimizeCb(func, context, argCount) { if (context === void 0) return func; switch (argCount === null ? 3 : argCount) { - case 1: return function(value) { - return func.call(context, value); - }; - case 2: return function(value, other) { - return func.call(context, value, other); - }; - case 3: return function(value, index, collection) { - return func.call(context, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(context, accumulator, value, index, collection); - }; + case 1: + return function (value) { + return func.call(context, value); + }; + case 2: + return function (value, other) { + return func.call(context, value, other); + }; + case 3: + return function (value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: + return function (accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; } - return function() { + return function () { return func.apply(context, arguments); }; }; // An internal function for creating assigner functions. - var createAssigner = function(keysFunc, undefinedOnly) { - return function(obj) { + var createAssigner = function createAssigner(keysFunc, undefinedOnly) { + return function (obj) { var length = arguments.length; if (length < 2 || obj === null) return obj; for (var index = 1; index < length; index++) { @@ -1355,12 +1331,14 @@ angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger // Assigns a given object with all the own properties in the passed-in object(s) // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) - var _extendOwn, _assign = null; + var _extendOwn, + _assign = null; _extendOwn = _assign = createAssigner(_keys); // Returns whether an object has a given set of `key:value` pairs. - var _isMatch = function(object, attrs) { - var keys = _keys(attrs), length = keys.length; + var _isMatch = function _isMatch(object, attrs) { + var keys = _keys(attrs), + length = keys.length; if (object === null) return !length; var obj = Object(object); for (var i = 0; i < length; i++) { @@ -1372,30 +1350,31 @@ angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger // Returns a predicate for checking whether an object has a given set of // `key:value` pairs. - var _matcher, _matches = null; - _matcher = _matches = function(attrs) { + var _matcher, + _matches = null; + _matcher = _matches = function (attrs) { attrs = _extendOwn({}, attrs); - return function(obj) { + return function (obj) { return _isMatch(obj, attrs); }; }; - // A mostly-internal function to generate callbacks that can be applied // to each element in a collection, returning the desired result — either // identity, an arbitrary callback, a property matcher, or a property accessor. - var cb = function(value, context, argCount) { + var cb = function cb(value, context, argCount) { if (value === null) return _identity; if (_isFunction(value)) return optimizeCb(value, context, argCount); if (_isObject(value)) return _matcher(value); return _property(value); }; - var _every, _all = null; - _every = _all = function(obj, predicate, context) { + var _every, + _all = null; + _every = _all = function (obj, predicate, context) { predicate = cb(predicate, context); var keys = !_isArrayLike(obj) && _keys(obj), - length = (keys || obj).length; + length = (keys || obj).length; for (var index = 0; index < length; index++) { var currentKey = keys ? keys[index] : index; if (!predicate(obj[currentKey], currentKey, obj)) return false; @@ -1405,51 +1384,52 @@ angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger //END COPY fron underscore - var _hasErrors = function(collection, cb, ignoreCollection, cbName){ - if(!ignoreCollection) { + var _hasErrors = function _hasErrors(collection, cb, ignoreCollection, cbName) { + if (!ignoreCollection) { if (!lHlp.isDefined(collection) || !lHlp.isDefined(cb)) { return true; } } - if(!lHlp.isFunction(cb)){ - cbName = lHlp.defaultTo(cb,'cb'); + if (!lHlp.isFunction(cb)) { + cbName = lHlp.defaultTo(cb, 'cb'); $log.error(errorHeader + cbName + ' is not a function'); return true; } return false; }; - var _iterate = function(collection, externalCb, internalCb){ - if(_hasErrors(undefined, internalCb, true, 'internalCb')){ + var _iterate = function _iterate(collection, externalCb, internalCb) { + if (_hasErrors(undefined, internalCb, true, 'internalCb')) { return; } - if(!_hasErrors(collection, externalCb)){ - for(var key in collection){ - if (collection.hasOwnProperty(key)) { - internalCb(collection[key], key); - } + if (!_hasErrors(collection, externalCb)) { + for (var key in collection) { + if (collection.hasOwnProperty(key)) { + internalCb(collection[key], key); + } } } }; //see http://jsperf.com/iterators/3 //utilizing for in is way faster - var _each = function(collection, cb){ - _iterate(collection, cb, function(val, key){ + var _each = function _each(collection, cb) { + _iterate(collection, cb, function (val, key) { cb(val, key); }); }; return { - each:_each, + each: _each, forEach: _each, every: _every, all: _all }; }); -angular.module('ui-leaflet') -.factory('leafletLayerHelpers', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletIterators) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletLayerHelpers', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletIterators) { var Helpers = leafletHelpers; var isString = leafletHelpers.isString; var isObject = leafletHelpers.isObject; @@ -1459,26 +1439,26 @@ angular.module('ui-leaflet') var $it = leafletIterators; var $log = leafletLogger; - var utfGridCreateLayer = function(params) { + var utfGridCreateLayer = function utfGridCreateLayer(params) { if (!Helpers.UTFGridPlugin.isLoaded()) { $log.error('[AngularJS - Leaflet] The UTFGrid plugin is not loaded.'); return; } var utfgrid = new L.UtfGrid(params.url, params.pluginOptions); - utfgrid.on('mouseover', function(e) { + utfgrid.on('mouseover', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseover', e); }); - utfgrid.on('mouseout', function(e) { + utfgrid.on('mouseout', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseout', e); }); - utfgrid.on('click', function(e) { + utfgrid.on('click', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridClick', e); }); - utfgrid.on('mousemove', function(e) { + utfgrid.on('mousemove', function (e) { $rootScope.$broadcast('leafletDirectiveMap.utfgridMousemove', e); }); @@ -1488,26 +1468,24 @@ angular.module('ui-leaflet') var layerTypes = { xyz: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer(params.url, params.options); } }, mapbox: { mustHaveKey: true, - createLayer: function(params) { + createLayer: function createLayer(params) { var version = 3; - if(isDefined(params.options.version) && params.options.version === 4) { + if (isDefined(params.options.version) && params.options.version === 4) { version = params.options.version; } - var url = version === 3? - '//{s}.tiles.mapbox.com/v3/' + params.key + '/{z}/{x}/{y}.png': - '//api.tiles.mapbox.com/v4/' + params.key + '/{z}/{x}/{y}.png?access_token=' + params.apiKey; + var url = version === 3 ? '//{s}.tiles.mapbox.com/v3/' + params.key + '/{z}/{x}/{y}.png' : '//api.tiles.mapbox.com/v4/' + params.key + '/{z}/{x}/{y}.png?access_token=' + params.apiKey; return L.tileLayer(url, params.options); } }, geoJSON: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.GeoJSONPlugin.isLoaded()) { return; } @@ -1516,27 +1494,26 @@ angular.module('ui-leaflet') }, geoJSONShape: { mustHaveUrl: false, - createLayer: function(params) { - return new L.GeoJSON(params.data, - params.options); + createLayer: function createLayer(params) { + return new L.GeoJSON(params.data, params.options); } }, geoJSONAwesomeMarker: { mustHaveUrl: false, - createLayer: function(params) { - return new L.geoJson(params.data, { - pointToLayer: function (feature, latlng) { - return L.marker(latlng, {icon: L.AwesomeMarkers.icon(params.icon)}); + createLayer: function createLayer(params) { + return new L.geoJson(params.data, { + pointToLayer: function pointToLayer(feature, latlng) { + return L.marker(latlng, { icon: L.AwesomeMarkers.icon(params.icon) }); } }); } }, geoJSONVectorMarker: { mustHaveUrl: false, - createLayer: function(params) { - return new L.geoJson(params.data, { - pointToLayer: function (feature, latlng) { - return L.marker(latlng, {icon: L.VectorMarkers.icon(params.icon)}); + createLayer: function createLayer(params) { + return new L.geoJson(params.data, { + pointToLayer: function pointToLayer(feature, latlng) { + return L.marker(latlng, { icon: L.VectorMarkers.icon(params.icon) }); } }); } @@ -1547,23 +1524,23 @@ angular.module('ui-leaflet') }, cartodbTiles: { mustHaveKey: true, - createLayer: function(params) { + createLayer: function createLayer(params) { var url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png'; return L.tileLayer(url, params.options); } }, cartodbUTFGrid: { mustHaveKey: true, - mustHaveLayer : true, - createLayer: function(params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json'; return utfGridCreateLayer(params); } }, cartodbInteractive: { mustHaveKey: true, - mustHaveLayer : true, - createLayer: function(params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { var tilesURL = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png'; var tileLayer = L.tileLayer(tilesURL, params.options); params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json'; @@ -1573,25 +1550,25 @@ angular.module('ui-leaflet') }, wms: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer.wms(params.url, params.options); } }, wmts: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer.wmts(params.url, params.options); } }, wfs: { mustHaveUrl: true, - mustHaveLayer : true, - createLayer: function(params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { if (!Helpers.WFSLayerPlugin.isLoaded()) { return; } var options = angular.copy(params.options); - if(options.crs && 'string' === typeof options.crs) { + if (options.crs && 'string' === typeof options.crs) { /*jshint -W061 */ options.crs = eval(options.crs); } @@ -1600,17 +1577,17 @@ angular.module('ui-leaflet') }, group: { mustHaveUrl: false, - createLayer: function (params) { + createLayer: function createLayer(params) { var lyrs = []; - $it.each(params.options.layers, function(l){ - lyrs.push(createLayer(l)); + $it.each(params.options.layers, function (l) { + lyrs.push(_createLayer(l)); }); - params.options.loadedDefer = function() { + params.options.loadedDefer = function () { var defers = []; - if(isDefined(params.options.layers)) { + if (isDefined(params.options.layers)) { for (var i = 0; i < params.options.layers.length; i++) { var d = params.options.layers[i].layerOptions.loadedDefer; - if(isDefined(d)) { + if (isDefined(d)) { defers.push(d); } } @@ -1622,13 +1599,13 @@ angular.module('ui-leaflet') }, featureGroup: { mustHaveUrl: false, - createLayer: function () { + createLayer: function createLayer() { return L.featureGroup(); } }, google: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { var type = params.type || 'SATELLITE'; if (!Helpers.GoogleLayerPlugin.isLoaded()) { return; @@ -1638,27 +1615,27 @@ angular.module('ui-leaflet') }, here: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { var provider = params.provider || 'HERE.terrainDay'; if (!Helpers.LeafletProviderPlugin.isLoaded()) { return; } return new L.TileLayer.Provider(provider, params.options); } - }, - china:{ - mustHaveUrl:false, - createLayer:function(params){ + }, + china: { + mustHaveUrl: false, + createLayer: function createLayer(params) { var type = params.type || ''; - if(!Helpers.ChinaLayerPlugin.isLoaded()){ + if (!Helpers.ChinaLayerPlugin.isLoaded()) { return; } return L.tileLayer.chinaProvider(type, params.options); } }, agsBase: { - mustHaveLayer : true, - createLayer: function (params) { + mustHaveLayer: true, + createLayer: function createLayer(params) { if (!Helpers.AGSBaseLayerPlugin.isLoaded()) { return; } @@ -1667,7 +1644,7 @@ angular.module('ui-leaflet') }, ags: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSLayerPlugin.isLoaded()) { return; } @@ -1677,10 +1654,10 @@ angular.module('ui-leaflet') url: params.url }); var layer = new lvector.AGS(options); - layer.onAdd = function(map) { + layer.onAdd = function (map) { this.setMap(map); }; - layer.onRemove = function() { + layer.onRemove = function () { this.setMap(null); }; return layer; @@ -1688,7 +1665,7 @@ angular.module('ui-leaflet') }, agsFeature: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSFeatureLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; @@ -1697,12 +1674,12 @@ angular.module('ui-leaflet') params.options.url = params.url; var layer = L.esri.featureLayer(params.options); - var load = function() { - if(isDefined(params.options.loadedDefer)) { + var load = function load() { + if (isDefined(params.options.loadedDefer)) { params.options.loadedDefer.resolve(); } }; - layer.on('loading', function() { + layer.on('loading', function () { params.options.loadedDefer = $q.defer(); layer.off('load', load); layer.on('load', load); @@ -1713,7 +1690,7 @@ angular.module('ui-leaflet') }, agsTiled: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSTiledMapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; @@ -1726,7 +1703,7 @@ angular.module('ui-leaflet') }, agsDynamic: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSDynamicMapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; @@ -1739,25 +1716,25 @@ angular.module('ui-leaflet') }, agsImage: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSImageMapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri plugin is not loaded.'); return; } - params.options.url = params.url; + params.options.url = params.url; return L.esri.imageMapLayer(params.options); } }, agsClustered: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSClusteredLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri clustered layer plugin is not loaded.'); return; } - if(!Helpers.MarkerClusterPlugin.isLoaded()) { + if (!Helpers.MarkerClusterPlugin.isLoaded()) { $log.warn(errorHeader + ' The markercluster plugin is not loaded.'); return; } @@ -1766,13 +1743,13 @@ angular.module('ui-leaflet') }, agsHeatmap: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.AGSHeatmapLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The esri heatmap layer plugin is not loaded.'); return; } - if(!Helpers.HeatLayerPlugin.isLoaded()) { + if (!Helpers.HeatLayerPlugin.isLoaded()) { $log.warn(errorHeader + ' The heatlayer plugin is not loaded.'); return; } @@ -1781,7 +1758,7 @@ angular.module('ui-leaflet') }, markercluster: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.MarkerClusterPlugin.isLoaded()) { $log.warn(errorHeader + ' The markercluster plugin is not loaded.'); return; @@ -1791,7 +1768,7 @@ angular.module('ui-leaflet') }, bing: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.BingLayerPlugin.isLoaded()) { return; } @@ -1801,7 +1778,7 @@ angular.module('ui-leaflet') webGLHeatmap: { mustHaveUrl: false, mustHaveData: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.WebGLHeatMapLayerPlugin.isLoaded()) { return; } @@ -1816,7 +1793,7 @@ angular.module('ui-leaflet') heat: { mustHaveUrl: false, mustHaveData: true, - createLayer: function(params) { + createLayer: function createLayer(params) { if (!Helpers.HeatLayerPlugin.isLoaded()) { return; } @@ -1835,7 +1812,7 @@ angular.module('ui-leaflet') }, yandex: { mustHaveUrl: false, - createLayer: function(params) { + createLayer: function createLayer(params) { var type = params.type || 'map'; if (!Helpers.YandexLayerPlugin.isLoaded()) { return; @@ -1845,14 +1822,14 @@ angular.module('ui-leaflet') }, imageOverlay: { mustHaveUrl: true, - mustHaveBounds : true, - createLayer: function(params) { + mustHaveBounds: true, + createLayer: function createLayer(params) { return L.imageOverlay(params.url, params.bounds, params.options); } }, iip: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return L.tileLayer.iip(params.url, params.options); } }, @@ -1862,18 +1839,17 @@ angular.module('ui-leaflet') // so we let user to define their own layer outside the directive, // and pass it on "createLayer" result for next processes custom: { - createLayer: function (params) { + createLayer: function createLayer(params) { if (params.layer instanceof L.Class) { return angular.copy(params.layer); - } - else { + } else { $log.error('[AngularJS - Leaflet] A custom layer must be a leaflet Class'); } } }, cartodb: { mustHaveUrl: true, - createLayer: function(params) { + createLayer: function createLayer(params) { return cartodb.createLayer(params.map, params.url); } } @@ -1902,24 +1878,24 @@ angular.module('ui-leaflet') return false; } - if(layerTypes[layerDefinition.type].mustHaveLayer && !isDefined(layerDefinition.layer)) { + if (layerTypes[layerDefinition.type].mustHaveLayer && !isDefined(layerDefinition.layer)) { $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have an layer defined'); return false; } if (layerTypes[layerDefinition.type].mustHaveBounds && !isDefined(layerDefinition.bounds)) { $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have bounds defined'); - return false ; + return false; } if (layerTypes[layerDefinition.type].mustHaveKey && !isDefined(layerDefinition.key)) { $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have key defined'); - return false ; + return false; } return true; } - function createLayer(layerDefinition) { + function _createLayer(layerDefinition) { if (!isValidLayerType(layerDefinition)) { return; } @@ -1968,27 +1944,27 @@ angular.module('ui-leaflet') } function safeRemoveLayer(map, layer, layerOptions) { - if(isDefined(layerOptions) && isDefined(layerOptions.loadedDefer)) { - if(angular.isFunction(layerOptions.loadedDefer)) { + if (isDefined(layerOptions) && isDefined(layerOptions.loadedDefer)) { + if (angular.isFunction(layerOptions.loadedDefer)) { var defers = layerOptions.loadedDefer(); $log.debug('Loaded Deferred', defers); var count = defers.length; - if(count > 0) { - var resolve = function() { + if (count > 0) { + var resolve = function resolve() { count--; - if(count === 0) { + if (count === 0) { map.removeLayer(layer); } }; - for(var i = 0; i < defers.length; i++) { + for (var i = 0; i < defers.length; i++) { defers[i].promise.then(resolve); } } else { map.removeLayer(layer); } } else { - layerOptions.loadedDefer.promise.then(function() { + layerOptions.loadedDefer.promise.then(function () { map.removeLayer(layer); }); } @@ -1998,26 +1974,28 @@ angular.module('ui-leaflet') } return { - createLayer: createLayer, + createLayer: _createLayer, safeAddLayer: safeAddLayer, safeRemoveLayer: safeRemoveLayer }; }); +'use strict'; + angular.module("ui-leaflet").factory('leafletLegendHelpers', function ($http, $q, $log, leafletHelpers) { var requestQueue = {}, - isDefined = leafletHelpers.isDefined; + isDefined = leafletHelpers.isDefined; - var _execNext = function(mapId) { + var _execNext = function _execNext(mapId) { var queue = requestQueue[mapId]; var task = queue[0]; - $http(task.c).then(function(data) { + $http(task.c).then(function (data) { queue.shift(); task.d.resolve(data); if (queue.length > 0) { _execNext(mapId); } - }, function(err) { + }, function (err) { queue.shift(); task.d.reject(err); if (queue.length > 0) { @@ -2026,31 +2004,28 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', function ($http, $q }); }; - var _updateLegend = function(div, legendData, type, url) { + var _updateLegend = function _updateLegend(div, legendData, type, url) { div.innerHTML = ''; - if(legendData.error) { + if (legendData.error) { div.innerHTML += '
' + legendData.error.message + '
'; } else { if (type === 'arcgis') { for (var i = 0; i < legendData.layers.length; i++) { var layer = legendData.layers[i]; div.innerHTML += '
' + layer.layerName + '
'; - for(var j = 0; j < layer.legend.length; j++) { + for (var j = 0; j < layer.legend.length; j++) { var leg = layer.legend[j]; - div.innerHTML += - '
' + - '
' + leg.label + '
'; + div.innerHTML += '
' + '
' + leg.label + '
'; } } - } - else if (type === 'image') { + } else if (type === 'image') { div.innerHTML = ''; } } }; - var _getOnAddLegend = function(legendData, legendClass, type, url) { - return function(/*map*/) { + var _getOnAddLegend = function _getOnAddLegend(legendData, legendClass, type, url) { + return function () /*map*/{ var div = L.DomUtil.create('div', legendClass); if (!L.Browser.touch) { @@ -2064,21 +2039,19 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', function ($http, $q }; }; - var _getOnAddArrayLegend = function(legend, legendClass) { - return function(/*map*/) { + var _getOnAddArrayLegend = function _getOnAddArrayLegend(legend, legendClass) { + return function () /*map*/{ var div = L.DomUtil.create('div', legendClass); - for (var i = 0; i < legend.colors.length; i++) { - div.innerHTML += - '
' + - '
' + legend.labels[i] + '
'; - } - if (!L.Browser.touch) { + for (var i = 0; i < legend.colors.length; i++) { + div.innerHTML += '
' + '
' + legend.labels[i] + '
'; + } + if (!L.Browser.touch) { L.DomEvent.disableClickPropagation(div); L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation); } else { L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation); } - return div; + return div; }; }; @@ -2086,12 +2059,12 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', function ($http, $q getOnAddLegend: _getOnAddLegend, getOnAddArrayLegend: _getOnAddArrayLegend, updateLegend: _updateLegend, - addLegendURL: function(mapId, config) { + addLegendURL: function addLegendURL(mapId, config) { var d = $q.defer(); - if(!isDefined(requestQueue[mapId])) { + if (!isDefined(requestQueue[mapId])) { requestQueue[mapId] = []; } - requestQueue[mapId].push({c:config,d:d}); + requestQueue[mapId].push({ c: config, d: d }); if (requestQueue[mapId].length === 1) { _execNext(mapId); } @@ -2100,6 +2073,8 @@ angular.module("ui-leaflet").factory('leafletLegendHelpers', function ($http, $q }; }); +'use strict'; + angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leafletHelpers) { function _getDefaults() { return { @@ -2138,7 +2113,8 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leaflet lat: 0, lng: 0, zoom: 1 - } + }, + trackResize: true }; } @@ -2149,15 +2125,15 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leaflet // Get the _defaults dictionary, and override the properties defined by the user return { - reset: function () { - defaults = {}; + reset: function reset() { + defaults = {}; }, - getDefaults: function (scopeId) { + getDefaults: function getDefaults(scopeId) { var mapId = obtainEffectiveMapId(defaults, scopeId); return defaults[mapId]; }, - getMapCreationDefaults: function (scopeId) { + getMapCreationDefaults: function getMapCreationDefaults(scopeId) { var mapId = obtainEffectiveMapId(defaults, scopeId); var d = defaults[mapId]; @@ -2172,7 +2148,8 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leaflet touchZoom: d.touchZoom, attributionControl: d.attributionControl, worldCopyJump: d.worldCopyJump, - crs: d.crs + crs: d.crs, + trackResize: d.trackResize }; if (isDefined(d.minZoom)) { @@ -2200,7 +2177,7 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leaflet return mapDefaults; }, - setDefaults: function (userDefaults, scopeId) { + setDefaults: function setDefaults(userDefaults, scopeId) { var newDefaults = _getDefaults(); if (isDefined(userDefaults)) { @@ -2215,6 +2192,7 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leaflet newDefaults.zoomControlPosition = isDefined(userDefaults.zoomControlPosition) ? userDefaults.zoomControlPosition : newDefaults.zoomControlPosition; newDefaults.keyboard = isDefined(userDefaults.keyboard) ? userDefaults.keyboard : newDefaults.keyboard; newDefaults.dragging = isDefined(userDefaults.dragging) ? userDefaults.dragging : newDefaults.dragging; + newDefaults.trackResize = isDefined(userDefaults.trackResize) ? userDefaults.trackResize : newDefaults.trackResize; if (isDefined(userDefaults.controls)) { angular.extend(newDefaults.controls, userDefaults.controls); @@ -2274,6 +2252,8 @@ angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leaflet }; }); +'use strict'; + angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootScope, $timeout, leafletHelpers, leafletLogger, $compile, leafletGeoJsonHelpers, leafletWatchHelpers) { var isDefined = leafletHelpers.isDefined, defaultTo = leafletHelpers.defaultTo, @@ -2294,7 +2274,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco maybeWatch = leafletWatchHelpers.maybeWatch, $log = leafletLogger; - var _string = function (marker) { + var _string = function _string(marker) { //this exists since JSON.stringify barfs on cyclic var retStr = ''; ['_icon', '_latlng', '_leaflet_id', '_map', '_shadow'].forEach(function (prop) { @@ -2302,12 +2282,12 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco }); return '[leafletMarker] : \n' + retStr; }; - var _log = function (marker, useConsole) { + var _log = function _log(marker, useConsole) { var logger = useConsole ? console : $log; logger.debug(_string(marker)); }; - var createLeafletIcon = function (iconData) { + var createLeafletIcon = function createLeafletIcon(iconData) { if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'awesomeMarker') { if (!AwesomeMarkersPlugin.isLoaded()) { $log.error(errorHeader + ' The AwesomeMarkers Plugin is not loaded.'); @@ -2376,17 +2356,17 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco return new L.Icon(iconData); }; - var _resetMarkerGroup = function (groupName) { + var _resetMarkerGroup = function _resetMarkerGroup(groupName) { if (isDefined(groups[groupName])) { groups.splice(groupName, 1); } }; - var _resetMarkerGroups = function () { + var _resetMarkerGroups = function _resetMarkerGroups() { groups = {}; }; - var _deleteMarker = function (marker, map, layers) { + var _deleteMarker = function _deleteMarker(marker, map, layers) { marker.closePopup(); // There is no easy way to know if a marker is added to a layer, so we search for it // if there are overlays @@ -2414,7 +2394,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco } }; - var adjustPopupPan = function(marker, map) { + var adjustPopupPan = function adjustPopupPan(marker, map) { var containerHeight = marker._popup._container.offsetHeight, layerPos = new L.Point(marker._popup._containerLeft, -containerHeight - marker._popup._containerBottom), containerPos = map.layerPointToContainerPoint(layerPos); @@ -2423,11 +2403,11 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco } }; - var compilePopup = function(marker, markerScope) { + var compilePopup = function compilePopup(marker, markerScope) { $compile(marker._popup._contentNode)(markerScope); }; - var updatePopup = function (marker, markerScope, map) { + var updatePopup = function updatePopup(marker, markerScope, map) { //The innerText should be more than 1 once angular has compiled. //We need to keep trying until angular has compiled before we _updateLayout and _updatePosition //This should take care of any scenario , eg ngincludes, whatever. @@ -2453,7 +2433,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco return reflow; }; - var _manageOpenPopup = function (marker, markerData, map) { + var _manageOpenPopup = function _manageOpenPopup(marker, markerData, map) { // The marker may provide a scope returning function used to compile the message // default to $rootScope otherwise var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope, @@ -2470,8 +2450,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco } }; - - var _manageOpenLabel = function (marker, markerData) { + var _manageOpenLabel = function _manageOpenLabel(marker, markerData) { var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope, labelScope = angular.isFunction(markerData.getLabelScope) ? markerData.getLabelScope() : markerScope, compileMessage = isDefined(markerData.compileMessage) ? markerData.compileMessage : true; @@ -2486,243 +2465,239 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco } }; - var _updateMarker = function (markerData, oldMarkerData, marker, name, leafletScope, layers, map) { - if (!isDefined(oldMarkerData)) { - return; - } - - // Update the lat-lng property (always present in marker properties) - if (!geoHlp.validateCoords(markerData)) { - $log.warn('There are problems with lat-lng data, please verify your marker model'); - _deleteMarker(marker, map, layers); - return; - } - - // watch is being initialized if old and new object is the same - var isInitializing = markerData === oldMarkerData; + var _updateMarker = function _updateMarker(markerData, oldMarkerData, marker, name, leafletScope, layers, map) { + if (!isDefined(oldMarkerData)) { + return; + } - // Update marker rotation - if (isDefined(markerData.iconAngle) && oldMarkerData.iconAngle !== markerData.iconAngle) { - marker.setIconAngle(markerData.iconAngle); - } + // Update the lat-lng property (always present in marker properties) + if (!geoHlp.validateCoords(markerData)) { + $log.warn('There are problems with lat-lng data, please verify your marker model'); + _deleteMarker(marker, map, layers); + return; + } - // It is possible that the layer has been removed or the layer marker does not exist - // Update the layer group if present or move it to the map if not - if (!isString(markerData.layer)) { - // There is no layer information, we move the marker to the map if it was in a layer group - if (isString(oldMarkerData.layer)) { - // Remove from the layer group that is supposed to be - if (isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { - layers.overlays[oldMarkerData.layer].removeLayer(marker); - marker.closePopup(); - } - // Test if it is not on the map and add it - if (!map.hasLayer(marker)) { - map.addLayer(marker); - } - } - } + // watch is being initialized if old and new object is the same + var isInitializing = markerData === oldMarkerData; - if ((isNumber(markerData.opacity) || isNumber(parseFloat(markerData.opacity))) && markerData.opacity !== oldMarkerData.opacity) { - // There was a different opacity so we update it - marker.setOpacity(markerData.opacity); - } + // Update marker rotation + if (isDefined(markerData.iconAngle) && oldMarkerData.iconAngle !== markerData.iconAngle) { + marker.setIconAngle(markerData.iconAngle); + } - if (isString(markerData.layer) && oldMarkerData.layer !== markerData.layer) { - // If it was on a layer group we have to remove it - if (isString(oldMarkerData.layer) && isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { + // It is possible that the layer has been removed or the layer marker does not exist + // Update the layer group if present or move it to the map if not + if (!isString(markerData.layer)) { + // There is no layer information, we move the marker to the map if it was in a layer group + if (isString(oldMarkerData.layer)) { + // Remove from the layer group that is supposed to be + if (isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { layers.overlays[oldMarkerData.layer].removeLayer(marker); + marker.closePopup(); } - marker.closePopup(); - - // Remove it from the map in case the new layer is hidden or there is an error in the new layer - if (map.hasLayer(marker)) { - map.removeLayer(marker); - } - - // The markerData.layer is defined so we add the marker to the layer if it is different from the old data - if (!isDefined(layers.overlays[markerData.layer])) { - $log.error(errorHeader + 'You must use a name of an existing layer'); - return; - } - // Is a group layer? - var layerGroup = layers.overlays[markerData.layer]; - if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) { - $log.error(errorHeader + 'A marker can only be added to a layer of type "group" or "featureGroup"'); - return; - } - // The marker goes to a correct layer group, so first of all we add it - layerGroup.addLayer(marker); - // The marker is automatically added to the map depending on the visibility - // of the layer, so we only have to open the popup if the marker is in the map - if (map.hasLayer(marker) && markerData.focus === true) { - marker.openPopup(); + // Test if it is not on the map and add it + if (!map.hasLayer(marker)) { + map.addLayer(marker); } } + } + + if ((isNumber(markerData.opacity) || isNumber(parseFloat(markerData.opacity))) && markerData.opacity !== oldMarkerData.opacity) { + // There was a different opacity so we update it + marker.setOpacity(markerData.opacity); + } - // Update the draggable property - if (markerData.draggable !== true && oldMarkerData.draggable === true && (isDefined(marker.dragging))) { - marker.dragging.disable(); + if (isString(markerData.layer) && oldMarkerData.layer !== markerData.layer) { + // If it was on a layer group we have to remove it + if (isString(oldMarkerData.layer) && isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) { + layers.overlays[oldMarkerData.layer].removeLayer(marker); } + marker.closePopup(); - if (markerData.draggable === true && oldMarkerData.draggable !== true) { - // The markerData.draggable property must be true so we update if there wasn't a previous value or it wasn't true - if (marker.dragging) { - marker.dragging.enable(); - } else { - if (L.Handler.MarkerDrag) { - marker.dragging = new L.Handler.MarkerDrag(marker); - marker.options.draggable = true; - marker.dragging.enable(); - } - } + // Remove it from the map in case the new layer is hidden or there is an error in the new layer + if (map.hasLayer(marker)) { + map.removeLayer(marker); } - // Update the icon property - if (!isObject(markerData.icon)) { - // If there is no icon property or it's not an object - if (isObject(oldMarkerData.icon)) { - // If there was an icon before restore to the default - marker.setIcon(createLeafletIcon()); - marker.closePopup(); - marker.unbindPopup(); - if (isString(markerData.message)) { - marker.bindPopup(markerData.message, markerData.popupOptions); - } - } + // The markerData.layer is defined so we add the marker to the layer if it is different from the old data + if (!isDefined(layers.overlays[markerData.layer])) { + $log.error(errorHeader + 'You must use a name of an existing layer'); + return; + } + // Is a group layer? + var layerGroup = layers.overlays[markerData.layer]; + if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) { + $log.error(errorHeader + 'A marker can only be added to a layer of type "group" or "featureGroup"'); + return; + } + // The marker goes to a correct layer group, so first of all we add it + layerGroup.addLayer(marker); + // The marker is automatically added to the map depending on the visibility + // of the layer, so we only have to open the popup if the marker is in the map + if (map.hasLayer(marker) && markerData.focus === true) { + marker.openPopup(); } + } - if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { - var dragG = false; - if (marker.dragging) { - dragG = marker.dragging.enabled(); - } - marker.setIcon(createLeafletIcon(markerData.icon)); - if (dragG) { + // Update the draggable property + if (markerData.draggable !== true && oldMarkerData.draggable === true && isDefined(marker.dragging)) { + marker.dragging.disable(); + } + + if (markerData.draggable === true && oldMarkerData.draggable !== true) { + // The markerData.draggable property must be true so we update if there wasn't a previous value or it wasn't true + if (marker.dragging) { + marker.dragging.enable(); + } else { + if (L.Handler.MarkerDrag) { + marker.dragging = new L.Handler.MarkerDrag(marker); + marker.options.draggable = true; marker.dragging.enable(); } + } + } + + // Update the icon property + if (!isObject(markerData.icon)) { + // If there is no icon property or it's not an object + if (isObject(oldMarkerData.icon)) { + // If there was an icon before restore to the default + marker.setIcon(createLeafletIcon()); marker.closePopup(); marker.unbindPopup(); if (isString(markerData.message)) { marker.bindPopup(markerData.message, markerData.popupOptions); - // if marker has been already focused, reopen popup - if (map.hasLayer(marker) && markerData.focus === true) { - marker.openPopup(); - } } } + } - // Update the Popup message property - if (!isString(markerData.message) && isString(oldMarkerData.message)) { - marker.closePopup(); - marker.unbindPopup(); + if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { + var dragG = false; + if (marker.dragging) { + dragG = marker.dragging.enabled(); } - - // Update the label content or bind a new label if the old one has been removed. - if (Helpers.LabelPlugin.isLoaded()) { - if (isDefined(markerData.label) && isDefined(markerData.label.message)) { - if ('label' in oldMarkerData && 'message' in oldMarkerData.label && !angular.equals(markerData.label.message, oldMarkerData.label.message)) { - marker.updateLabelContent(markerData.label.message); - } else if (!angular.isFunction(marker.getLabel) || angular.isFunction(marker.getLabel) && !isDefined(marker.getLabel())) { - marker.bindLabel(markerData.label.message, markerData.label.options); - _manageOpenLabel(marker, markerData); - } else { - _manageOpenLabel(marker, markerData); - } - } else if (!('label' in markerData && !('message' in markerData.label))) { - if (angular.isFunction(marker.unbindLabel)) { - marker.unbindLabel(); - } - } + marker.setIcon(createLeafletIcon(markerData.icon)); + if (dragG) { + marker.dragging.enable(); } - - // There is some text in the popup, so we must show the text or update existing - if (isString(markerData.message) && !isString(oldMarkerData.message)) { - // There was no message before so we create it + marker.closePopup(); + marker.unbindPopup(); + if (isString(markerData.message)) { marker.bindPopup(markerData.message, markerData.popupOptions); + // if marker has been already focused, reopen popup + if (map.hasLayer(marker) && markerData.focus === true) { + marker.openPopup(); + } } + } - if (isString(markerData.message) && isString(oldMarkerData.message) && markerData.message !== oldMarkerData.message) { - // There was a different previous message so we update it - marker.setPopupContent(markerData.message); - } - - // Update the focus property - var updatedFocus = false; - if (markerData.focus !== true && oldMarkerData.focus === true) { - // If there was a focus property and was true we turn it off - marker.closePopup(); - updatedFocus = true; - } + // Update the Popup message property + if (!isString(markerData.message) && isString(oldMarkerData.message)) { + marker.closePopup(); + marker.unbindPopup(); + } - // The markerData.focus property must be true so we update if there wasn't a previous value or it wasn't true - if (markerData.focus === true && ( !isDefined(oldMarkerData.focus) || oldMarkerData.focus === false) || (isInitializing && markerData.focus === true)) { - // Reopen the popup when focus is still true - marker.openPopup(); - updatedFocus = true; - } - - // zIndexOffset adjustment - if (oldMarkerData.zIndexOffset !== markerData.zIndexOffset) { - marker.setZIndexOffset(markerData.zIndexOffset); - } - - var markerLatLng = marker.getLatLng(); - var isCluster = (isString(markerData.layer) && Helpers.MarkerClusterPlugin.is(layers.overlays[markerData.layer])); - // If the marker is in a cluster it has to be removed and added to the layer when the location is changed - if (isCluster) { - // The focus has changed even by a user click or programatically - if (updatedFocus) { - // We only have to update the location if it was changed programatically, because it was - // changed by a user drag the marker data has already been updated by the internal event - // listened by the directive - if ((markerData.lat !== oldMarkerData.lat) || (markerData.lng !== oldMarkerData.lng)) { - layers.overlays[markerData.layer].removeLayer(marker); - marker.setLatLng([markerData.lat, markerData.lng]); - layers.overlays[markerData.layer].addLayer(marker); - } + // Update the label content or bind a new label if the old one has been removed. + if (Helpers.LabelPlugin.isLoaded()) { + if (isDefined(markerData.label) && isDefined(markerData.label.message)) { + if ('label' in oldMarkerData && 'message' in oldMarkerData.label && !angular.equals(markerData.label.message, oldMarkerData.label.message)) { + marker.updateLabelContent(markerData.label.message); + } else if (!angular.isFunction(marker.getLabel) || angular.isFunction(marker.getLabel) && !isDefined(marker.getLabel())) { + marker.bindLabel(markerData.label.message, markerData.label.options); + _manageOpenLabel(marker, markerData); } else { - // The marker has possibly moved. It can be moved by a user drag (marker location and data are equal but old - // data is diferent) or programatically (marker location and data are diferent) - if ((markerLatLng.lat !== markerData.lat) || (markerLatLng.lng !== markerData.lng)) { - // The marker was moved by a user drag - layers.overlays[markerData.layer].removeLayer(marker); - marker.setLatLng([markerData.lat, markerData.lng]); - layers.overlays[markerData.layer].addLayer(marker); - } else if ((markerData.lat !== oldMarkerData.lat) || (markerData.lng !== oldMarkerData.lng)) { - // The marker was moved programatically - layers.overlays[markerData.layer].removeLayer(marker); - marker.setLatLng([markerData.lat, markerData.lng]); - layers.overlays[markerData.layer].addLayer(marker); - } else if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { - layers.overlays[markerData.layer].removeLayer(marker); - layers.overlays[markerData.layer].addLayer(marker); - } + _manageOpenLabel(marker, markerData); + } + } else if (!('label' in markerData && !('message' in markerData.label))) { + if (angular.isFunction(marker.unbindLabel)) { + marker.unbindLabel(); } - } else if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) { - marker.setLatLng([markerData.lat, markerData.lng]); } - }; + } + + // There is some text in the popup, so we must show the text or update existing + if (isString(markerData.message) && !isString(oldMarkerData.message)) { + // There was no message before so we create it + marker.bindPopup(markerData.message, markerData.popupOptions); + } + + if (isString(markerData.message) && isString(oldMarkerData.message) && markerData.message !== oldMarkerData.message) { + // There was a different previous message so we update it + marker.setPopupContent(markerData.message); + } + + // Update the focus property + var updatedFocus = false; + if (markerData.focus !== true && oldMarkerData.focus === true) { + // If there was a focus property and was true we turn it off + marker.closePopup(); + updatedFocus = true; + } + + // The markerData.focus property must be true so we update if there wasn't a previous value or it wasn't true + if (markerData.focus === true && (!isDefined(oldMarkerData.focus) || oldMarkerData.focus === false) || isInitializing && markerData.focus === true) { + // Reopen the popup when focus is still true + marker.openPopup(); + updatedFocus = true; + } + + // zIndexOffset adjustment + if (oldMarkerData.zIndexOffset !== markerData.zIndexOffset) { + marker.setZIndexOffset(markerData.zIndexOffset); + } + + var markerLatLng = marker.getLatLng(); + var isCluster = isString(markerData.layer) && Helpers.MarkerClusterPlugin.is(layers.overlays[markerData.layer]); + // If the marker is in a cluster it has to be removed and added to the layer when the location is changed + if (isCluster) { + // The focus has changed even by a user click or programatically + if (updatedFocus) { + // We only have to update the location if it was changed programatically, because it was + // changed by a user drag the marker data has already been updated by the internal event + // listened by the directive + if (markerData.lat !== oldMarkerData.lat || markerData.lng !== oldMarkerData.lng) { + layers.overlays[markerData.layer].removeLayer(marker); + marker.setLatLng([markerData.lat, markerData.lng]); + layers.overlays[markerData.layer].addLayer(marker); + } + } else { + // The marker has possibly moved. It can be moved by a user drag (marker location and data are equal but old + // data is diferent) or programatically (marker location and data are diferent) + if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) { + // The marker was moved by a user drag + layers.overlays[markerData.layer].removeLayer(marker); + marker.setLatLng([markerData.lat, markerData.lng]); + layers.overlays[markerData.layer].addLayer(marker); + } else if (markerData.lat !== oldMarkerData.lat || markerData.lng !== oldMarkerData.lng) { + // The marker was moved programatically + layers.overlays[markerData.layer].removeLayer(marker); + marker.setLatLng([markerData.lat, markerData.lng]); + layers.overlays[markerData.layer].addLayer(marker); + } else if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) { + layers.overlays[markerData.layer].removeLayer(marker); + layers.overlays[markerData.layer].addLayer(marker); + } + } + } else if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) { + marker.setLatLng([markerData.lat, markerData.lng]); + } + }; - var _getLayerModels = function (models, layerName){ - if (!isDefined(models)) - return; - if (layerName) - return models[layerName]; - return models; + var _getLayerModels = function _getLayerModels(models, layerName) { + if (!isDefined(models)) return; + if (layerName) return models[layerName]; + return models; }; - var _getModelFromModels = function (models, id, layerName){ - if(!isDefined(models)) - return; - if(!id){ - $log.error(errorHeader + 'marker id missing in getMarker'); - return; - } - if(layerName) - return models[layerName][id]; + var _getModelFromModels = function _getModelFromModels(models, id, layerName) { + if (!isDefined(models)) return; + if (!id) { + $log.error(errorHeader + 'marker id missing in getMarker'); + return; + } + if (layerName) return models[layerName][id]; - return models[id]; + return models[id]; }; return { resetMarkerGroup: _resetMarkerGroup, @@ -2735,7 +2710,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco manageOpenLabel: _manageOpenLabel, - createMarker: function (markerData) { + createMarker: function createMarker(markerData) { if (!isDefined(markerData) || !geoHlp.validateCoords(markerData)) { $log.error(errorHeader + 'The marker definition is not valid.'); return; @@ -2772,7 +2747,7 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco return marker; }, - addMarkerToGroup: function (marker, groupName, groupOptions, map) { + addMarkerToGroup: function addMarkerToGroup(marker, groupName, groupOptions, map) { if (!isString(groupName)) { $log.error(errorHeader + 'The marker group you have specified is invalid.'); return; @@ -2789,34 +2764,33 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco groups[groupName].addLayer(marker); }, - listenMarkerEvents: function (marker, markerData, leafletScope, watchType, map) { - marker.on("popupopen", function (/* event */) { + listenMarkerEvents: function listenMarkerEvents(marker, markerData, leafletScope, watchType, map) { + marker.on("popupopen", function () /* event */{ safeApply(leafletScope, function () { if (isDefined(marker._popup) || isDefined(marker._popup._contentNode)) { markerData.focus = true; - _manageOpenPopup(marker, markerData, map);//needed since markerData is now a copy + _manageOpenPopup(marker, markerData, map); //needed since markerData is now a copy } }); }); - marker.on("popupclose", function (/* event */) { + marker.on("popupclose", function () /* event */{ safeApply(leafletScope, function () { markerData.focus = false; }); }); - marker.on("add", function (/* event */) { + marker.on("add", function () /* event */{ safeApply(leafletScope, function () { - if ('label' in markerData) - _manageOpenLabel(marker, markerData); + if ('label' in markerData) _manageOpenLabel(marker, markerData); }); }); }, updateMarker: _updateMarker, - addMarkerWatcher: function (marker, name, leafletScope, layers, map, watchOptions) { + addMarkerWatcher: function addMarkerWatcher(marker, name, leafletScope, layers, map, watchOptions) { var markerWatchPath = Helpers.getObjectArrayPath("markers." + name); - maybeWatch(leafletScope, markerWatchPath, watchOptions, function(markerData, oldMarkerData, clearWatch){ + maybeWatch(leafletScope, markerWatchPath, watchOptions, function (markerData, oldMarkerData, clearWatch) { if (!isDefined(markerData)) { _deleteMarker(marker, map, layers); clearWatch(); @@ -2827,30 +2801,28 @@ angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootSco }, string: _string, log: _log, - getModelFromModels : _getModelFromModels, - getLayerModels : _getLayerModels + getModelFromModels: _getModelFromModels, + getLayerModels: _getLayerModels }; }); +'use strict'; + angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope, leafletLogger, leafletHelpers) { var isDefined = leafletHelpers.isDefined, isArray = leafletHelpers.isArray, isNumber = leafletHelpers.isNumber, isValidPoint = leafletHelpers.isValidPoint, $log = leafletLogger; - + var availableOptions = [ - // Path options - 'stroke', 'weight', 'color', 'opacity', - 'fill', 'fillColor', 'fillOpacity', - 'dashArray', 'lineCap', 'lineJoin', 'clickable', - 'pointerEvents', 'className', - - // Polyline options - 'smoothFactor', 'noClip' - ]; + // Path options + 'stroke', 'weight', 'color', 'opacity', 'fill', 'fillColor', 'fillOpacity', 'dashArray', 'lineCap', 'lineJoin', 'clickable', 'pointerEvents', 'className', + + // Polyline options + 'smoothFactor', 'noClip']; function _convertToLeafletLatLngs(latlngs) { - return latlngs.filter(function(latlng) { + return latlngs.filter(function (latlng) { return isValidPoint(latlng); }).map(function (latlng) { return _convertToLeafletLatLng(latlng); @@ -2866,7 +2838,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope } function _convertToLeafletMultiLatLngs(paths) { - return paths.map(function(latlngs) { + return paths.map(function (latlngs) { return _convertToLeafletLatLngs(latlngs); }); } @@ -2886,7 +2858,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope return options; } - var _updatePathOptions = function (path, data) { + var _updatePathOptions = function _updatePathOptions(path, data) { var updatedStyle = {}; for (var i = 0; i < availableOptions.length; i++) { var optionName = availableOptions[i]; @@ -2897,7 +2869,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope path.setStyle(data); }; - var _isValidPolyline = function(latlngs) { + var _isValidPolyline = function _isValidPolyline(latlngs) { if (!isArray(latlngs)) { return false; } @@ -2912,21 +2884,21 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope var pathTypes = { polyline: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; return _isValidPolyline(latlngs); }, - createPath: function(options) { + createPath: function createPath(options) { return new L.Polyline([], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } }, multiPolyline: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; if (!isArray(latlngs)) { return false; @@ -2941,31 +2913,31 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope return true; }, - createPath: function(options) { - return new L.multiPolyline([[[0,0],[1,1]]], options); + createPath: function createPath(options) { + return new L.multiPolyline([[[0, 0], [1, 1]]], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } - } , + }, polygon: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; return _isValidPolyline(latlngs); }, - createPath: function(options) { + createPath: function createPath(options) { return new L.Polygon([], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } }, multiPolygon: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; if (!isArray(latlngs)) { @@ -2981,17 +2953,17 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope return true; }, - createPath: function(options) { - return new L.MultiPolygon([[[0,0],[1,1],[0,1]]], options); + createPath: function createPath(options) { + return new L.MultiPolygon([[[0, 0], [1, 1], [0, 1]]], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs)); _updatePathOptions(path, data); return; } }, rectangle: { - isValid: function(pathData) { + isValid: function isValid(pathData) { var latlngs = pathData.latlngs; if (!isArray(latlngs) || latlngs.length !== 2) { @@ -3007,23 +2979,23 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope return true; }, - createPath: function(options) { - return new L.Rectangle([[0,0],[1,1]], options); + createPath: function createPath(options) { + return new L.Rectangle([[0, 0], [1, 1]], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setBounds(new L.LatLngBounds(_convertToLeafletLatLngs(data.latlngs))); _updatePathOptions(path, data); } }, circle: { - isValid: function(pathData) { - var point= pathData.latlngs; + isValid: function isValid(pathData) { + var point = pathData.latlngs; return isValidPoint(point) && isNumber(pathData.radius); }, - createPath: function(options) { - return new L.Circle([0,0], 1, options); + createPath: function createPath(options) { + return new L.Circle([0, 0], 1, options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLng(_convertToLeafletLatLng(data.latlngs)); if (isDefined(data.radius)) { path.setRadius(data.radius); @@ -3032,14 +3004,14 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope } }, circleMarker: { - isValid: function(pathData) { - var point= pathData.latlngs; + isValid: function isValid(pathData) { + var point = pathData.latlngs; return isValidPoint(point) && isNumber(pathData.radius); }, - createPath: function(options) { - return new L.CircleMarker([0,0], options); + createPath: function createPath(options) { + return new L.CircleMarker([0, 0], options); }, - setPath: function(path, data) { + setPath: function setPath(path, data) { path.setLatLng(_convertToLeafletLatLng(data.latlngs)); if (isDefined(data.radius)) { path.setRadius(data.radius); @@ -3049,7 +3021,7 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope } }; - var _getPathData = function(path) { + var _getPathData = function _getPathData(path) { var pathData = {}; if (path.latlngs) { pathData.latlngs = path.latlngs; @@ -3063,14 +3035,14 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope }; return { - setPathOptions: function(leafletPath, pathType, data) { - if(!isDefined(pathType)) { + setPathOptions: function setPathOptions(leafletPath, pathType, data) { + if (!isDefined(pathType)) { pathType = "polyline"; } pathTypes[pathType].setPath(leafletPath, data); }, - createPath: function(name, path, defaults) { - if(!isDefined(path.type)) { + createPath: function createPath(name, path, defaults) { + if (!isDefined(path.type)) { path.type = "polyline"; } var options = _getOptions(path, defaults); @@ -3086,60 +3058,62 @@ angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope }; }); -angular.module('ui-leaflet') -.service('leafletWatchHelpers', function (){ +'use strict'; + +angular.module('ui-leaflet').service('leafletWatchHelpers', function () { - var _maybe = function(scope, watchFunctionName, thingToWatchStr, watchOptions, initCb){ - var unWatch = scope[watchFunctionName](thingToWatchStr, function(newValue, oldValue) { + var _maybe = function _maybe(scope, watchFunctionName, thingToWatchStr, watchOptions, initCb) { + var unWatch = scope[watchFunctionName](thingToWatchStr, function (newValue, oldValue) { //make the unWatch function available to the callback as well. initCb(newValue, oldValue, unWatch); - if(watchOptions.type === null) - unWatch(); + if (watchOptions.type === null) unWatch(); }, watchOptions.type === 'watchDeep'); return unWatch; }; - /* - @name: maybeWatch - @description: Utility to watch something once or forever. - @returns unWatch function - @param watchOptions - This object is used to determine the type of - watch used. - */ - var _maybeWatch = function(scope, thingToWatchStr, watchOptions, initCb){ - var watchMethod; - - if(watchOptions.type === 'watchCollection') { - watchMethod = '$watchCollection'; - } - else { - watchMethod = '$watch'; - } + /* + @name: maybeWatch + @description: Utility to watch something once or forever. + @returns unWatch function + @param watchOptions - This object is used to determine the type of + watch used. + */ + var _maybeWatch = function _maybeWatch(scope, thingToWatchStr, watchOptions, initCb) { + var watchMethod; + if (watchOptions.type === 'watchCollection') { + watchMethod = '$watchCollection'; + } else { + watchMethod = '$watch'; + } - return _maybe(scope, watchMethod, thingToWatchStr, watchOptions, initCb); - }; + return _maybe(scope, watchMethod, thingToWatchStr, watchOptions, initCb); + }; - return { - maybeWatch: _maybeWatch - }; + return { + maybeWatch: _maybeWatch + }; }); -angular.module('ui-leaflet').service('leafletLogger', function(nemSimpleLogger) { +'use strict'; + +angular.module('ui-leaflet').service('leafletLogger', function (nemSimpleLogger) { return nemSimpleLogger.spawn(); }); +'use strict'; + angular.module('ui-leaflet').factory('nominatimService', function ($q, $http, leafletHelpers, leafletMapDefaults) { var isDefined = leafletHelpers.isDefined; return { - query: function(address, mapId) { + query: function query(address, mapId) { var defaults = leafletMapDefaults.getDefaults(mapId); var url = defaults.nominatim.server; var df = $q.defer(); - $http.get(url, { params: { format: 'json', limit: 1, q: address } }).success(function(data) { + $http.get(url, { params: { format: 'json', limit: 1, q: address } }).success(function (data) { if (data.length > 0 && isDefined(data[0].boundingbox)) { df.resolve(data[0]); } else { @@ -3152,24 +3126,25 @@ angular.module('ui-leaflet').factory('nominatimService', function ($q, $http, le }; }); +'use strict'; + angular.module('ui-leaflet').directive('bounds', function (leafletLogger, $timeout, $http, leafletHelpers, nominatimService, leafletBoundsHelpers) { var $log = leafletLogger; return { restrict: "A", scope: false, replace: false, - require: [ 'leaflet' ], + require: ['leaflet'], - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined; var createLeafletBounds = leafletBoundsHelpers.createLeafletBounds; var leafletScope = controller[0].getLeafletScope(); var mapController = controller[0]; var errorHeader = leafletHelpers.errorHeader + ' [Bounds] '; - var emptyBounds = function(bounds) { - return (bounds._southWest.lat === 0 && bounds._southWest.lng === 0 && - bounds._northEast.lat === 0 && bounds._northEast.lng === 0); + var emptyBounds = function emptyBounds(bounds) { + return bounds._southWest.lat === 0 && bounds._southWest.lng === 0 && bounds._northEast.lat === 0 && bounds._northEast.lng === 0; }; mapController.getMap().then(function (map) { @@ -3195,26 +3170,25 @@ angular.module('ui-leaflet').directive('bounds', function (leafletLogger, $timeo if (!angular.equals(scope.bounds, newScopeBounds)) { scope.bounds = newScopeBounds; } - $timeout( function() { + $timeout(function () { scope.settingBoundsFromLeaflet = false; }); }); var lastNominatimQuery; leafletScope.$watch('bounds', function (bounds) { - if (scope.settingBoundsFromLeaflet) - return; + if (scope.settingBoundsFromLeaflet) return; if (isDefined(bounds.address) && bounds.address !== lastNominatimQuery) { scope.settingBoundsFromScope = true; - nominatimService.query(bounds.address, attrs.id).then(function(data) { + nominatimService.query(bounds.address, attrs.id).then(function (data) { var b = data.boundingbox; - var newBounds = [ [ b[0], b[2]], [ b[1], b[3]] ]; + var newBounds = [[b[0], b[2]], [b[1], b[3]]]; map.fitBounds(newBounds); - }, function(errMsg) { + }, function (errMsg) { $log.error(errorHeader + ' ' + errMsg + '.'); }); lastNominatimQuery = bounds.address; - $timeout( function() { + $timeout(function () { scope.settingBoundsFromScope = false; }); return; @@ -3224,7 +3198,7 @@ angular.module('ui-leaflet').directive('bounds', function (leafletLogger, $timeo if (leafletBounds && !map.getBounds().equals(leafletBounds)) { scope.settingBoundsFromScope = true; map.fitBounds(leafletBounds, bounds.options); - $timeout( function() { + $timeout(function () { scope.settingBoundsFromScope = false; }); } @@ -3234,14 +3208,13 @@ angular.module('ui-leaflet').directive('bounds', function (leafletLogger, $timeo }; }); +'use strict'; + var centerDirectiveTypes = ['center', 'lfCenter'], centerDirectives = {}; -centerDirectiveTypes.forEach(function(directiveName) { - centerDirectives[directiveName] = ['leafletLogger', '$q', '$location', '$timeout', 'leafletMapDefaults', 'leafletHelpers', - 'leafletBoundsHelpers', 'leafletMapEvents', - function(leafletLogger, $q, $location, $timeout, leafletMapDefaults, leafletHelpers, - leafletBoundsHelpers, leafletMapEvents) { +centerDirectiveTypes.forEach(function (directiveName) { + centerDirectives[directiveName] = ['leafletLogger', '$q', '$location', '$timeout', 'leafletMapDefaults', 'leafletHelpers', 'leafletBoundsHelpers', 'leafletMapEvents', function (leafletLogger, $q, $location, $timeout, leafletMapDefaults, leafletHelpers, leafletBoundsHelpers, leafletMapEvents) { var isDefined = leafletHelpers.isDefined, isNumber = leafletHelpers.isNumber, @@ -3253,7 +3226,7 @@ centerDirectiveTypes.forEach(function(directiveName) { errorHeader = leafletHelpers.errorHeader, $log = leafletLogger; - var shouldInitializeMapWithBounds = function(bounds, center) { + var shouldInitializeMapWithBounds = function shouldInitializeMapWithBounds(bounds, center) { return isDefined(bounds) && isValidBounds(bounds) && isUndefinedOrEmpty(center); }; @@ -3263,17 +3236,17 @@ centerDirectiveTypes.forEach(function(directiveName) { scope: false, replace: false, require: 'leaflet', - controller: function() { + controller: function controller() { _leafletCenter = $q.defer(); - this.getCenter = function() { + this.getCenter = function () { return _leafletCenter.promise; }; }, - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var leafletScope = controller.getLeafletScope(), centerModel = leafletScope[directiveName]; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var defaults = leafletMapDefaults.getDefaults(attrs.id); if (attrs[directiveName].search("-") !== -1) { @@ -3283,7 +3256,7 @@ centerDirectiveTypes.forEach(function(directiveName) { } else if (shouldInitializeMapWithBounds(leafletScope.bounds, centerModel)) { map.fitBounds(leafletBoundsHelpers.createLeafletBounds(leafletScope.bounds), leafletScope.bounds.options); centerModel = map.getCenter(); - safeApply(leafletScope, function(scope) { + safeApply(leafletScope, function (scope) { angular.extend(scope[directiveName], { lat: map.getCenter().lat, lng: map.getCenter().lng, @@ -3291,7 +3264,7 @@ centerDirectiveTypes.forEach(function(directiveName) { autoDiscover: false }); }); - safeApply(leafletScope, function(scope) { + safeApply(leafletScope, function (scope) { var mapBounds = map.getBounds(); scope.bounds = { northEast: { @@ -3314,7 +3287,7 @@ centerDirectiveTypes.forEach(function(directiveName) { var urlCenterHash, mapReady; if (attrs.urlHashCenter === "yes") { - var extractCenterFromUrl = function() { + var extractCenterFromUrl = function extractCenterFromUrl() { var search = $location.search(); var centerParam; if (isDefined(search.c)) { @@ -3331,7 +3304,7 @@ centerDirectiveTypes.forEach(function(directiveName) { }; urlCenterHash = extractCenterFromUrl(); - leafletScope.$on('$locationChangeSuccess', function(event) { + leafletScope.$on('$locationChangeSuccess', function (event) { var scope = event.currentScope; //$log.debug("updated location..."); var urlCenter = extractCenterFromUrl(); @@ -3346,9 +3319,8 @@ centerDirectiveTypes.forEach(function(directiveName) { }); } - leafletScope.$watch(directiveName, function(center) { - if (leafletScope.settingCenterFromLeaflet) - return; + leafletScope.$watch(directiveName, function (center) { + if (leafletScope.settingCenterFromLeaflet) return; //$log.debug("updated center model..."); // The center from the URL has priority if (isDefined(urlCenterHash)) { @@ -3393,17 +3365,17 @@ centerDirectiveTypes.forEach(function(directiveName) { leafletScope.settingCenterFromScope = true; map.setView([center.lat, center.lng], center.zoom); leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map); - $timeout(function() { + $timeout(function () { leafletScope.settingCenterFromScope = false; //$log.debug("allow center scope updates"); }); }, true); - map.whenReady(function() { + map.whenReady(function () { mapReady = true; }); - map.on('moveend', function( /* event */ ) { + map.on('moveend', function () /* event */{ // Resolve the center after the first map position _leafletCenter.resolve(); leafletMapEvents.notifyCenterUrlHashChanged(leafletScope, map, attrs, $location.search()); @@ -3413,7 +3385,7 @@ centerDirectiveTypes.forEach(function(directiveName) { return; } leafletScope.settingCenterFromLeaflet = true; - safeApply(leafletScope, function(scope) { + safeApply(leafletScope, function (scope) { if (!leafletScope.settingCenterFromScope) { //$log.debug("updating center model...", map.getCenter(), map.getZoom()); angular.extend(scope[directiveName], { @@ -3424,14 +3396,14 @@ centerDirectiveTypes.forEach(function(directiveName) { }); } leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map); - $timeout(function() { + $timeout(function () { leafletScope.settingCenterFromLeaflet = false; }); }); }); if (centerModel.autoDiscover === true) { - map.on('locationerror', function() { + map.on('locationerror', function () { $log.warn(errorHeader + " The Geolocation API is unauthorized on this page."); if (isValidCenter(centerModel)) { map.setView([centerModel.lat, centerModel.lng], centerModel.zoom); @@ -3445,14 +3417,15 @@ centerDirectiveTypes.forEach(function(directiveName) { }); } }; - } - ]; + }]; }); -centerDirectiveTypes.forEach(function(dirType){ - angular.module('ui-leaflet').directive(dirType, centerDirectives[dirType]); +centerDirectiveTypes.forEach(function (dirType) { + angular.module('ui-leaflet').directive(dirType, centerDirectives[dirType]); }); +'use strict'; + angular.module('ui-leaflet').directive('controls', function (leafletLogger, leafletHelpers, leafletControlHelpers) { var $log = leafletLogger; return { @@ -3461,22 +3434,22 @@ angular.module('ui-leaflet').directive('controls', function (leafletLogger, leaf replace: false, require: '?^leaflet', - link: function(scope, element, attrs, controller) { - if(!controller) { + link: function link(scope, element, attrs, controller) { + if (!controller) { return; } var createControl = leafletControlHelpers.createControl; var isValidControlType = leafletControlHelpers.isValidControlType; - var leafletScope = controller.getLeafletScope(); + var leafletScope = controller.getLeafletScope(); var isDefined = leafletHelpers.isDefined; var isArray = leafletHelpers.isArray; var leafletControls = {}; var errorHeader = leafletHelpers.errorHeader + ' [Controls] '; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { - leafletScope.$watchCollection('controls', function(newControls) { + leafletScope.$watchCollection('controls', function (newControls) { // Delete controls from the array for (var name in leafletControls) { @@ -3516,15 +3489,15 @@ angular.module('ui-leaflet').directive('controls', function (leafletLogger, leaf } } } - }); - }); } }; }); -angular.module('ui-leaflet').directive("decorations", function(leafletLogger, leafletHelpers) { +"use strict"; + +angular.module('ui-leaflet').directive("decorations", function (leafletLogger, leafletHelpers) { var $log = leafletLogger; return { restrict: "A", @@ -3532,11 +3505,11 @@ angular.module('ui-leaflet').directive("decorations", function(leafletLogger, le replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var leafletScope = controller.getLeafletScope(), - PolylineDecoratorPlugin = leafletHelpers.PolylineDecoratorPlugin, - isDefined = leafletHelpers.isDefined, - leafletDecorations = {}; + PolylineDecoratorPlugin = leafletHelpers.PolylineDecoratorPlugin, + isDefined = leafletHelpers.isDefined, + leafletDecorations = {}; /* Creates an "empty" decoration with a set of coordinates, but no pattern. */ function createDecoration(options) { @@ -3560,8 +3533,8 @@ angular.module('ui-leaflet').directive("decorations", function(leafletLogger, le } } - controller.getMap().then(function(map) { - leafletScope.$watch("decorations", function(newDecorations) { + controller.getMap().then(function (map) { + leafletScope.$watch("decorations", function (newDecorations) { for (var name in leafletDecorations) { if (!isDefined(newDecorations[name]) || !angular.equals(newDecorations[name], leafletDecorations)) { map.removeLayer(leafletDecorations[name]); @@ -3571,7 +3544,7 @@ angular.module('ui-leaflet').directive("decorations", function(leafletLogger, le for (var newName in newDecorations) { var decorationData = newDecorations[newName], - newDecoration = createDecoration(decorationData); + newDecoration = createDecoration(decorationData); if (isDefined(newDecoration)) { leafletDecorations[newName] = newDecoration; @@ -3585,6 +3558,8 @@ angular.module('ui-leaflet').directive("decorations", function(leafletLogger, le }; }); +'use strict'; + angular.module('ui-leaflet').directive('eventBroadcast', function (leafletLogger, $rootScope, leafletHelpers, leafletMapEvents, leafletIterators) { var $log = leafletLogger; return { @@ -3593,15 +3568,15 @@ angular.module('ui-leaflet').directive('eventBroadcast', function (leafletLogger replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isObject = leafletHelpers.isObject, isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), eventBroadcast = leafletScope.eventBroadcast, availableMapEvents = leafletMapEvents.getAvailableMapEvents(), addEvents = leafletMapEvents.addEvents; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var mapEvents = [], logic = "broadcast"; @@ -3627,14 +3602,13 @@ angular.module('ui-leaflet').directive('eventBroadcast', function (leafletLogger $log.warn("[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model."); } else { // Enable events - leafletIterators.each(eventBroadcast.map.enable, function(eventName) { + leafletIterators.each(eventBroadcast.map.enable, function (eventName) { // Do we have already the event enabled? if (mapEvents.indexOf(eventName) === -1 && availableMapEvents.indexOf(eventName) !== -1) { mapEvents.push(eventName); } }); } - } // as long as the map is removed in the root leaflet directive we // do not need ot clean up the events as leaflet does it itself @@ -3644,15 +3618,15 @@ angular.module('ui-leaflet').directive('eventBroadcast', function (leafletLogger }; }); -angular.module('ui-leaflet') -.directive('geojson', function (leafletLogger, $rootScope, leafletData, leafletHelpers, - leafletWatchHelpers, leafletDirectiveControlsHelpers,leafletIterators, leafletGeoJsonEvents) { +'use strict'; + +angular.module('ui-leaflet').directive('geojson', function (leafletLogger, $rootScope, leafletData, leafletHelpers, leafletWatchHelpers, leafletDirectiveControlsHelpers, leafletIterators, leafletGeoJsonEvents) { var _maybeWatch = leafletWatchHelpers.maybeWatch, _defaultWatchOptions = leafletHelpers.watchOptions, _extendDirectiveControls = leafletDirectiveControlsHelpers.extend, hlp = leafletHelpers, $it = leafletIterators; - // $log = leafletLogger; + // $log = leafletLogger; return { restrict: "A", @@ -3660,54 +3634,49 @@ angular.module('ui-leaflet') replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), leafletGeoJSON = {}, _hasSetLeafletData = false; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var watchOptions; - if(leafletScope.watchOptions && leafletScope.watchOptions.geojson) { + if (leafletScope.watchOptions && leafletScope.watchOptions.geojson) { watchOptions = leafletScope.watchOptions.geojson; - } - else { + } else { watchOptions = _defaultWatchOptions; - } + } - var _hookUpEvents = function(geojson, maybeName){ + var _hookUpEvents = function _hookUpEvents(geojson, maybeName) { var onEachFeature; if (angular.isFunction(geojson.onEachFeature)) { onEachFeature = geojson.onEachFeature; } else { - onEachFeature = function(feature, layer) { + onEachFeature = function (feature, layer) { if (leafletHelpers.LabelPlugin.isLoaded() && isDefined(feature.properties.description)) { layer.bindLabel(feature.properties.description); } - leafletGeoJsonEvents.bindEvents(attrs.id, layer, null, feature, - leafletScope, maybeName, - {resetStyleOnMouseout: geojson.resetStyleOnMouseout, - mapId: attrs.id}); + leafletGeoJsonEvents.bindEvents(attrs.id, layer, null, feature, leafletScope, maybeName, { resetStyleOnMouseout: geojson.resetStyleOnMouseout, + mapId: attrs.id }); }; } return onEachFeature; }; - var isNested = (hlp.isDefined(attrs.geojsonNested) && - hlp.isTruthy(attrs.geojsonNested)); + var isNested = hlp.isDefined(attrs.geojsonNested) && hlp.isTruthy(attrs.geojsonNested); - var _clean = function(){ - if(!leafletGeoJSON) - return; - var _remove = function(lObject) { + var _clean = function _clean() { + if (!leafletGeoJSON) return; + var _remove = function _remove(lObject) { if (isDefined(lObject) && map.hasLayer(lObject)) { map.removeLayer(lObject); } }; - if(isNested) { - $it.each(leafletGeoJSON, function(lObject) { + if (isNested) { + $it.each(leafletGeoJSON, function (lObject) { _remove(lObject); }); return; @@ -3715,7 +3684,7 @@ angular.module('ui-leaflet') _remove(leafletGeoJSON); }; - var _addGeojson = function(model, maybeName){ + var _addGeojson = function _addGeojson(model, maybeName) { var geojson = angular.copy(model); if (!(isDefined(geojson) && isDefined(geojson.data))) { return; @@ -3736,30 +3705,29 @@ angular.module('ui-leaflet') var lObject = L.geoJson(geojson.data, geojson.options); - if(maybeName && hlp.isString(maybeName)){ + if (maybeName && hlp.isString(maybeName)) { leafletGeoJSON[maybeName] = lObject; - } - else{ + } else { leafletGeoJSON = lObject; } lObject.addTo(map); - if(!_hasSetLeafletData){//only do this once and play with the same ref forever + if (!_hasSetLeafletData) { + //only do this once and play with the same ref forever _hasSetLeafletData = true; leafletData.setGeoJSON(leafletGeoJSON, attrs.id); } }; - var _create = function(model){ + var _create = function _create(model) { _clean(); - if(isNested) { - if(!model || !Object.keys(model).length) - return; - $it.each(model, function(m, name) { + if (isNested) { + if (!model || !Object.keys(model).length) return; + $it.each(model, function (m, name) { //name could be layerName and or groupName //for now it is not tied to a layer - _addGeojson(m,name); + _addGeojson(m, name); }); return; } @@ -3768,7 +3736,7 @@ angular.module('ui-leaflet') _extendDirectiveControls(attrs.id, 'geojson', _create, _clean); - _maybeWatch(leafletScope,'geojson', watchOptions, function(geojson){ + _maybeWatch(leafletScope, 'geojson', watchOptions, function (geojson) { _create(geojson); }); }); @@ -3776,6 +3744,8 @@ angular.module('ui-leaflet') }; }); +'use strict'; + angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafletLogger, leafletData, leafletHelpers) { var $log = leafletLogger; return { @@ -3791,27 +3761,27 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle replace: true, transclude: false, require: '^leaflet', - controller: function ($scope, $element, $sce) { + controller: function controller($scope, $element, $sce) { $log.debug('[Angular Directive - Layers] layers', $scope, $element); var safeApply = leafletHelpers.safeApply, - isDefined = leafletHelpers.isDefined; + isDefined = leafletHelpers.isDefined; angular.extend($scope, { baselayer: '', oldGroup: '', layerProperties: {}, groupProperties: {}, rangeIsSupported: leafletHelpers.rangeIsSupported(), - changeBaseLayer: function(key, e) { - leafletHelpers.safeApply($scope, function(scp) { + changeBaseLayer: function changeBaseLayer(key, e) { + leafletHelpers.safeApply($scope, function (scp) { scp.baselayer = key; - leafletData.getMap().then(function(map) { - leafletData.getLayers().then(function(leafletLayers) { - if(map.hasLayer(leafletLayers.baselayers[key])) { + leafletData.getMap().then(function (map) { + leafletData.getLayers().then(function (leafletLayers) { + if (map.hasLayer(leafletLayers.baselayers[key])) { return; } - for(var i in scp.layers.baselayers) { + for (var i in scp.layers.baselayers) { scp.layers.baselayers[i].icon = scp.icons.unradio; - if(map.hasLayer(leafletLayers.baselayers[i])) { + if (map.hasLayer(leafletLayers.baselayers[i])) { map.removeLayer(leafletLayers.baselayers[i]); } } @@ -3822,18 +3792,18 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle }); e.preventDefault(); }, - moveLayer: function(ly, newIndex, e) { + moveLayer: function moveLayer(ly, newIndex, e) { var delta = Object.keys($scope.layers.baselayers).length; - if(newIndex >= (1+delta) && newIndex <= ($scope.overlaysArray.length+delta)) { + if (newIndex >= 1 + delta && newIndex <= $scope.overlaysArray.length + delta) { var oldLy; - for(var key in $scope.layers.overlays) { - if($scope.layers.overlays[key].index === newIndex) { + for (var key in $scope.layers.overlays) { + if ($scope.layers.overlays[key].index === newIndex) { oldLy = $scope.layers.overlays[key]; break; } } - if(oldLy) { - safeApply($scope, function() { + if (oldLy) { + safeApply($scope, function () { oldLy.index = ly.index; ly.index = newIndex; }); @@ -3842,17 +3812,17 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle e.stopPropagation(); e.preventDefault(); }, - initIndex: function(layer, idx) { + initIndex: function initIndex(layer, idx) { var delta = Object.keys($scope.layers.baselayers).length; - layer.index = isDefined(layer.index)? layer.index:idx+delta+1; + layer.index = isDefined(layer.index) ? layer.index : idx + delta + 1; }, - initGroup: function(groupName) { - $scope.groupProperties[groupName] = $scope.groupProperties[groupName]? $scope.groupProperties[groupName]:{}; + initGroup: function initGroup(groupName) { + $scope.groupProperties[groupName] = $scope.groupProperties[groupName] ? $scope.groupProperties[groupName] : {}; }, - toggleOpacity: function(e, layer) { - if(layer.visible) { - if($scope.autoHideOpacity && !$scope.layerProperties[layer.name].opacityControl) { - for(var k in $scope.layerProperties) { + toggleOpacity: function toggleOpacity(e, layer) { + if (layer.visible) { + if ($scope.autoHideOpacity && !$scope.layerProperties[layer.name].opacityControl) { + for (var k in $scope.layerProperties) { $scope.layerProperties[k].opacityControl = false; } } @@ -3861,41 +3831,41 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle e.stopPropagation(); e.preventDefault(); }, - toggleLegend: function(layer) { + toggleLegend: function toggleLegend(layer) { $scope.layerProperties[layer.name].showLegend = !$scope.layerProperties[layer.name].showLegend; }, - showLegend: function(layer) { + showLegend: function showLegend(layer) { return layer.legend && $scope.layerProperties[layer.name].showLegend; }, - unsafeHTML: function(html) { + unsafeHTML: function unsafeHTML(html) { return $sce.trustAsHtml(html); }, - getOpacityIcon: function(layer) { - return layer.visible && $scope.layerProperties[layer.name].opacityControl? $scope.icons.close:$scope.icons.open; + getOpacityIcon: function getOpacityIcon(layer) { + return layer.visible && $scope.layerProperties[layer.name].opacityControl ? $scope.icons.close : $scope.icons.open; }, - getGroupIcon: function(group) { - return group.visible? $scope.icons.check:$scope.icons.uncheck; + getGroupIcon: function getGroupIcon(group) { + return group.visible ? $scope.icons.check : $scope.icons.uncheck; }, - changeOpacity: function(layer) { + changeOpacity: function changeOpacity(layer) { var op = $scope.layerProperties[layer.name].opacity; - leafletData.getMap().then(function(map) { - leafletData.getLayers().then(function(leafletLayers) { + leafletData.getMap().then(function (map) { + leafletData.getLayers().then(function (leafletLayers) { var ly; - for(var k in $scope.layers.overlays) { - if($scope.layers.overlays[k] === layer) { + for (var k in $scope.layers.overlays) { + if ($scope.layers.overlays[k] === layer) { ly = leafletLayers.overlays[k]; break; } } - if(map.hasLayer(ly)) { - if(ly.setOpacity) { - ly.setOpacity(op/100); + if (map.hasLayer(ly)) { + if (ly.setOpacity) { + ly.setOpacity(op / 100); } - if(ly.getLayers && ly.eachLayer) { - ly.eachLayer(function(lay) { - if(lay.setOpacity) { - lay.setOpacity(op/100); + if (ly.getLayers && ly.eachLayer) { + ly.eachLayer(function (lay) { + if (lay.setOpacity) { + lay.setOpacity(op / 100); } }); } @@ -3903,14 +3873,14 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle }); }); }, - changeGroupVisibility: function(groupName) { - if(!isDefined($scope.groupProperties[groupName])) { + changeGroupVisibility: function changeGroupVisibility(groupName) { + if (!isDefined($scope.groupProperties[groupName])) { return; } var visible = $scope.groupProperties[groupName].visible; - for(var k in $scope.layers.overlays) { + for (var k in $scope.layers.overlays) { var layer = $scope.layers.overlays[k]; - if(layer.group === groupName) { + if (layer.group === groupName) { layer.visible = visible; } } @@ -3925,59 +3895,13 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation); } }, - template: - '
' + - '

{{ title }}

' + - '
' + - '
{{ baseTitle }}
' + - '
' + - '' + - '
' + - '
' + - '
' + - '
{{ overlaysTitle }}
' + - '
' + - '
' + - ''+ - ''+ - '
' + - ' ' + - ' ' + - ' ' + - '' + - '
' + - '
' + - '
' + - '' + - '' + - '' + - '
Range is not supported in this browser
' + - '
' + - '
' + - '
' + - '
' + - '
', - link: function(scope, element, attrs, controller) { + template: '
' + '

{{ title }}

' + '
' + '
{{ baseTitle }}
' + '
' + '' + '
' + '
' + '
' + '
{{ overlaysTitle }}
' + '
' + '
' + '' + '' + '
' + ' ' + ' ' + ' ' + '' + '
' + '
' + '
' + '' + '' + '' + '
Range is not supported in this browser
' + '
' + '
' + '
' + '
' + '
', + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), - layers = leafletScope.layers; + leafletScope = controller.getLeafletScope(), + layers = leafletScope.layers; - scope.$watch('icons', function() { + scope.$watch('icons', function () { var defaultIcons = { uncheck: 'fa fa-square-o', check: 'fa fa-check-square-o', @@ -3989,7 +3913,7 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle close: 'fa fa-angle-double-up', toggleLegend: 'fa fa-pencil-square-o' }; - if(isDefined(scope.icons)) { + if (isDefined(scope.icons)) { angular.extend(defaultIcons, scope.icons); angular.extend(scope.icons, defaultIcons); } else { @@ -3998,62 +3922,62 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle }); // Setting layer stack order. - attrs.order = (isDefined(attrs.order) && (attrs.order === 'normal' || attrs.order === 'reverse'))? attrs.order:'normal'; + attrs.order = isDefined(attrs.order) && (attrs.order === 'normal' || attrs.order === 'reverse') ? attrs.order : 'normal'; scope.order = attrs.order === 'normal'; - scope.orderNumber = attrs.order === 'normal'? -1:1; + scope.orderNumber = attrs.order === 'normal' ? -1 : 1; scope.layers = layers; - controller.getMap().then(function(map) { - leafletScope.$watch('layers.baselayers', function(newBaseLayers) { + controller.getMap().then(function (map) { + leafletScope.$watch('layers.baselayers', function (newBaseLayers) { var baselayersArray = {}; - leafletData.getLayers().then(function(leafletLayers) { + leafletData.getLayers().then(function (leafletLayers) { var key; - for(key in newBaseLayers) { + for (key in newBaseLayers) { var layer = newBaseLayers[key]; - layer.icon = scope.icons[map.hasLayer(leafletLayers.baselayers[key])? 'radio':'unradio']; + layer.icon = scope.icons[map.hasLayer(leafletLayers.baselayers[key]) ? 'radio' : 'unradio']; baselayersArray[key] = layer; } scope.baselayersArray = baselayersArray; }); }); - leafletScope.$watch('layers.overlays', function(newOverlayLayers) { + leafletScope.$watch('layers.overlays', function (newOverlayLayers) { var overlaysArray = []; var groupVisibleCount = {}; - leafletData.getLayers().then(function(leafletLayers) { + leafletData.getLayers().then(function (leafletLayers) { var key; - for(key in newOverlayLayers) { + for (key in newOverlayLayers) { var layer = newOverlayLayers[key]; - layer.icon = scope.icons[(layer.visible? 'check':'uncheck')]; + layer.icon = scope.icons[layer.visible ? 'check' : 'uncheck']; overlaysArray.push(layer); - if(!isDefined(scope.layerProperties[layer.name])) { + if (!isDefined(scope.layerProperties[layer.name])) { scope.layerProperties[layer.name] = { - opacity: isDefined(layer.layerOptions.opacity)? layer.layerOptions.opacity*100:100, + opacity: isDefined(layer.layerOptions.opacity) ? layer.layerOptions.opacity * 100 : 100, opacityControl: false, showLegend: true }; } - if(isDefined(layer.group)) { - if(!isDefined(scope.groupProperties[layer.group])) { + if (isDefined(layer.group)) { + if (!isDefined(scope.groupProperties[layer.group])) { scope.groupProperties[layer.group] = { visible: false }; } - groupVisibleCount[layer.group] = isDefined(groupVisibleCount[layer.group])? groupVisibleCount[layer.group]:{ + groupVisibleCount[layer.group] = isDefined(groupVisibleCount[layer.group]) ? groupVisibleCount[layer.group] : { count: 0, visibles: 0 }; groupVisibleCount[layer.group].count++; - if(layer.visible) { + if (layer.visible) { groupVisibleCount[layer.group].visibles++; } } - if(isDefined(layer.index) && leafletLayers.overlays[key].setZIndex) { + if (isDefined(layer.index) && leafletLayers.overlays[key].setZIndex) { leafletLayers.overlays[key].setZIndex(newOverlayLayers[key].index); } } - for(key in groupVisibleCount) { + for (key in groupVisibleCount) { scope.groupProperties[key].visible = groupVisibleCount[key].visibles === groupVisibleCount[key].count; } scope.overlaysArray = overlaysArray; @@ -4064,6 +3988,8 @@ angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafle }; }); +'use strict'; + angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, leafletData, leafletHelpers, leafletLayerHelpers, leafletControlHelpers) { // var $log = leafletLogger; return { @@ -4071,16 +3997,16 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le scope: false, replace: false, require: 'leaflet', - controller: function ($scope) { + controller: function controller($scope) { $scope._leafletLayers = $q.defer(); this.getLayers = function () { return $scope._leafletLayers.promise; }; }, - link: function(scope, element, attrs, controller){ + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, leafletLayers = {}, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), layers = leafletScope.layers, createLayer = leafletLayerHelpers.createLayer, safeAddLayer = leafletLayerHelpers.safeAddLayer, @@ -4088,7 +4014,7 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le updateLayersControl = leafletControlHelpers.updateLayersControl, isLayersControlVisible = false; - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { // We have baselayers to add to the map scope._leafletLayers.resolve(leafletLayers); @@ -4123,9 +4049,7 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le // Setup the Overlays for (layerName in layers.overlays) { - if(layers.overlays[layerName].type === 'cartodb') { - - } + if (layers.overlays[layerName].type === 'cartodb') {} var newOverlayLayer = createLayer(layers.overlays[layerName]); if (!isDefined(newOverlayLayer)) { delete layers.overlays[layerName]; @@ -4139,8 +4063,8 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le } // Watch for the base layers - leafletScope.$watch('layers.baselayers', function(newBaseLayers, oldBaseLayers) { - if(angular.equals(newBaseLayers, oldBaseLayers)) { + leafletScope.$watch('layers.baselayers', function (newBaseLayers, oldBaseLayers) { + if (angular.equals(newBaseLayers, oldBaseLayers)) { isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, newBaseLayers, layers.overlays, leafletLayers); return true; } @@ -4197,8 +4121,8 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le }, true); // Watch for the overlay layers - leafletScope.$watch('layers.overlays', function(newOverlayLayers, oldOverlayLayers) { - if(angular.equals(newOverlayLayers, oldOverlayLayers)) { + leafletScope.$watch('layers.overlays', function (newOverlayLayers, oldOverlayLayers) { + if (angular.equals(newOverlayLayers, oldOverlayLayers)) { isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, layers.baselayers, newOverlayLayers, leafletLayers); return true; } @@ -4209,8 +4133,7 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le // Remove from the map if it's on it if (map.hasLayer(leafletLayers.overlays[name])) { // Safe remove when ArcGIS layers is loading. - var options = isDefined(newOverlayLayers[name])? - newOverlayLayers[name].layerOptions:null; + var options = isDefined(newOverlayLayers[name]) ? newOverlayLayers[name].layerOptions : null; safeRemoveLayer(map, leafletLayers.overlays[name], options); } // TODO: Depending on the layer type we will have to delete what's included on it @@ -4259,154 +4182,154 @@ angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, le }; }); +'use strict'; + angular.module("ui-leaflet").directive('legend', function (leafletLogger, $http, $timeout, leafletHelpers, leafletLegendHelpers) { - var $log = leafletLogger, - errorHeader = leafletHelpers.errorHeader + ' [Legend] '; - return { - restrict: "A", - scope: false, - replace: false, - require: 'leaflet', - transclude: false, - - link: function (scope, element, attrs, controller) { + var $log = leafletLogger, + errorHeader = leafletHelpers.errorHeader + ' [Legend] '; + return { + restrict: "A", + scope: false, + replace: false, + require: 'leaflet', + transclude: false, - var isArray = leafletHelpers.isArray, - isString = leafletHelpers.isString, - isDefined = leafletHelpers.isDefined, - isFunction = leafletHelpers.isFunction, - leafletScope = controller.getLeafletScope(), - legend = leafletScope.legend; + link: function link(scope, element, attrs, controller) { - var legendClass; - var position; - var leafletLegend; - var type; + var isArray = leafletHelpers.isArray, + isString = leafletHelpers.isString, + isDefined = leafletHelpers.isDefined, + isFunction = leafletHelpers.isFunction, + leafletScope = controller.getLeafletScope(), + legend = leafletScope.legend; - leafletScope.$watch('legend', function (newLegend) { + var legendClass; + var position; + var leafletLegend; + var type; - if (isDefined(newLegend)) { - legendClass = newLegend.legendClass ? newLegend.legendClass : "legend"; - position = newLegend.position || 'bottomright'; - // default to arcgis - type = newLegend.type || 'arcgis'; - } - }, true); + leafletScope.$watch('legend', function (newLegend) { - var createLegend = function(map, legendData, newURL) { - if(legendData && legendData.layers && legendData.layers.length > 0) { - if (isDefined(leafletLegend)) { - leafletLegendHelpers.updateLegend(leafletLegend.getContainer(), legendData, type, newURL); - } else { - leafletLegend = L.control({ - position: position - }); - leafletLegend.onAdd = leafletLegendHelpers.getOnAddLegend(legendData, legendClass, type, newURL); - leafletLegend.addTo(map); - } + if (isDefined(newLegend)) { + legendClass = newLegend.legendClass ? newLegend.legendClass : "legend"; + position = newLegend.position || 'bottomright'; + // default to arcgis + type = newLegend.type || 'arcgis'; + } + }, true); - if (isDefined(legend.loadedData) && isFunction(legend.loadedData)) { - legend.loadedData(); - } + var createLegend = function createLegend(map, legendData, newURL) { + if (legendData && legendData.layers && legendData.layers.length > 0) { + if (isDefined(leafletLegend)) { + leafletLegendHelpers.updateLegend(leafletLegend.getContainer(), legendData, type, newURL); + } else { + leafletLegend = L.control({ + position: position + }); + leafletLegend.onAdd = leafletLegendHelpers.getOnAddLegend(legendData, legendClass, type, newURL); + leafletLegend.addTo(map); } - }; - controller.getMap().then(function (map) { - leafletScope.$watch('legend', function (newLegend) { - if (!isDefined(newLegend)) { - if (isDefined(leafletLegend)) { - leafletLegend.removeFrom(map); - leafletLegend= null; - } + if (isDefined(legend.loadedData) && isFunction(legend.loadedData)) { + legend.loadedData(); + } + } + }; - return; + controller.getMap().then(function (map) { + leafletScope.$watch('legend', function (newLegend) { + if (!isDefined(newLegend)) { + if (isDefined(leafletLegend)) { + leafletLegend.removeFrom(map); + leafletLegend = null; } - if (!isDefined(newLegend.url) && (type === 'arcgis') && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) { - $log.warn(errorHeader + " legend.colors and legend.labels must be set."); - return; - } + return; + } - if (isDefined(newLegend.url)) { - $log.info(errorHeader + " loading legend service."); - return; - } + if (!isDefined(newLegend.url) && type === 'arcgis' && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) { + $log.warn(errorHeader + " legend.colors and legend.labels must be set."); + return; + } - if (isDefined(leafletLegend)) { - leafletLegend.removeFrom(map); - leafletLegend= null; - } + if (isDefined(newLegend.url)) { + $log.info(errorHeader + " loading legend service."); + return; + } - leafletLegend = L.control({ - position: position - }); + if (isDefined(leafletLegend)) { + leafletLegend.removeFrom(map); + leafletLegend = null; + } - if (type === 'arcgis') { - leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass); - } - leafletLegend.addTo(map); + leafletLegend = L.control({ + position: position }); - leafletScope.$watch('legend.url', function (newURL) { - if (!isDefined(newURL)) { - return; - } + if (type === 'arcgis') { + leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass); + } + leafletLegend.addTo(map); + }); - if(!isArray(newURL) && !isString(newURL)) { - $log.warn(errorHeader + " legend.url must be an array or string."); - return; - } + leafletScope.$watch('legend.url', function (newURL) { + if (!isDefined(newURL)) { + return; + } - var urls = isString(newURL)? [newURL]:newURL; + if (!isArray(newURL) && !isString(newURL)) { + $log.warn(errorHeader + " legend.url must be an array or string."); + return; + } - var legendData; - var onResult = function(idx, url) { - return function(ld) { - if(isDefined(ld.data.error)) { - $log.warn(errorHeader + 'Error loadin legend from: ' + url, ld.data.error.message); + var urls = isString(newURL) ? [newURL] : newURL; + + var legendData; + var onResult = function onResult(idx, url) { + return function (ld) { + if (isDefined(ld.data.error)) { + $log.warn(errorHeader + 'Error loadin legend from: ' + url, ld.data.error.message); + } else { + if (legendData && legendData.layers && legendData.layers.length > 0) { + legendData.layers = legendData.layers.concat(ld.data.layers); } else { - if(legendData && legendData.layers && legendData.layers.length > 0) { - legendData.layers = legendData.layers.concat(ld.data.layers); - } else { - legendData = ld.data; - } + legendData = ld.data; } + } - if(idx === urls.length-1) { - createLegend(map, legendData, newURL); - } - }; - }; - var onError = function(err) { - $log.warn(errorHeader + ' legend.url not loaded.', err); + if (idx === urls.length - 1) { + createLegend(map, legendData, newURL); + } }; + }; + var onError = function onError(err) { + $log.warn(errorHeader + ' legend.url not loaded.', err); + }; - for(var i = 0; i < urls.length; i++) { - leafletLegendHelpers.addLegendURL(attrs.id, { - url: urls[i], - method: 'GET' - }).then(onResult(i)).catch(onError); - } - }); + for (var i = 0; i < urls.length; i++) { + leafletLegendHelpers.addLegendURL(attrs.id, { + url: urls[i], + method: 'GET' + }).then(onResult(i)).catch(onError); + } + }); - leafletScope.$watch('legend.legendData', function (legendData) { - $log.debug('legendData', legendData); - if(isDefined(leafletScope.legend.url) || !isDefined(legendData)) { - return; - } + leafletScope.$watch('legend.legendData', function (legendData) { + $log.debug('legendData', legendData); + if (isDefined(leafletScope.legend.url) || !isDefined(legendData)) { + return; + } - createLegend(map, legendData); - }, true); - }); + createLegend(map, legendData); + }, true); + }); + } + }; +}); - } - }; - }); +'use strict'; -angular.module('ui-leaflet').directive('markers', - function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers, leafletMapDefaults, - leafletMarkersHelpers, leafletMarkerEvents, leafletIterators, leafletWatchHelpers, - leafletDirectiveControlsHelpers) { +angular.module('ui-leaflet').directive('markers', function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers, leafletMapDefaults, leafletMarkersHelpers, leafletMarkerEvents, leafletIterators, leafletWatchHelpers, leafletDirectiveControlsHelpers) { //less terse vars to helpers var isDefined = leafletHelpers.isDefined, errorHeader = leafletHelpers.errorHeader, @@ -4426,28 +4349,24 @@ angular.module('ui-leaflet').directive('markers', extendDirectiveControls = leafletDirectiveControlsHelpers.extend, $log = leafletLogger; - var _getLMarker = function(leafletMarkers, name, maybeLayerName){ - if(!Object.keys(leafletMarkers).length) return; - if(maybeLayerName && isString(maybeLayerName)){ - if(!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length) - return; + var _getLMarker = function _getLMarker(leafletMarkers, name, maybeLayerName) { + if (!Object.keys(leafletMarkers).length) return; + if (maybeLayerName && isString(maybeLayerName)) { + if (!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length) return; return leafletMarkers[maybeLayerName][name]; } return leafletMarkers[name]; }; - var _setLMarker = function(lObject, leafletMarkers, name, maybeLayerName){ - if(maybeLayerName && isString(maybeLayerName)){ - if(!isDefined(leafletMarkers[maybeLayerName])) - leafletMarkers[maybeLayerName] = {}; + var _setLMarker = function _setLMarker(lObject, leafletMarkers, name, maybeLayerName) { + if (maybeLayerName && isString(maybeLayerName)) { + if (!isDefined(leafletMarkers[maybeLayerName])) leafletMarkers[maybeLayerName] = {}; leafletMarkers[maybeLayerName][name] = lObject; - } - else - leafletMarkers[name] = lObject; + } else leafletMarkers[name] = lObject; return lObject; }; - var _maybeAddMarkerToLayer = function(layerName, layers, model, marker, watchType, map){ + var _maybeAddMarkerToLayer = function _maybeAddMarkerToLayer(layerName, layers, model, marker, watchType, map) { if (!isString(layerName)) { $log.error(errorHeader + ' A layername must be a string'); @@ -4460,7 +4379,7 @@ angular.module('ui-leaflet').directive('markers', } if (!isDefined(layers.overlays) || !isDefined(layers.overlays[layerName])) { - $log.error(errorHeader +' A marker can only be added to a layer of type "group"'); + $log.error(errorHeader + ' A marker can only be added to a layer of type "group"'); return false; } var layerGroup = layers.overlays[layerName]; @@ -4480,11 +4399,9 @@ angular.module('ui-leaflet').directive('markers', return true; }; //TODO: move to leafletMarkersHelpers??? or make a new class/function file (leafletMarkersHelpers is large already) - var _addMarkers = function(mapId, markersToRender, oldModels, map, layers, leafletMarkers, leafletScope, - watchOptions, maybeLayerName, skips){ + var _addMarkers = function _addMarkers(mapId, markersToRender, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, maybeLayerName, skips) { for (var newName in markersToRender) { - if(skips[newName]) - continue; + if (skips[newName]) continue; if (newName.search("-") !== -1) { $log.error('The marker can\'t use a "-" on his key name: "' + newName + '".'); @@ -4492,15 +4409,15 @@ angular.module('ui-leaflet').directive('markers', } var model = Helpers.copy(markersToRender[newName]); - var pathToMarker = Helpers.getObjectDotPath(maybeLayerName? [maybeLayerName, newName]: [newName]); - var maybeLMarker = _getLMarker(leafletMarkers,newName, maybeLayerName); + var pathToMarker = Helpers.getObjectDotPath(maybeLayerName ? [maybeLayerName, newName] : [newName]); + var maybeLMarker = _getLMarker(leafletMarkers, newName, maybeLayerName); if (!isDefined(maybeLMarker)) { //(nmccready) very important to not have model changes when lObject is changed //this might be desirable in some cases but it causes two-way binding to lObject which is not ideal //if it is left as the reference then all changes from oldModel vs newModel are ignored //see _destroy (where modelDiff becomes meaningless if we do not copy here) var marker = createMarker(model); - var layerName = (model? model.layer : undefined) || maybeLayerName; //original way takes pref + var layerName = (model ? model.layer : undefined) || maybeLayerName; //original way takes pref if (!isDefined(marker)) { $log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.'); continue; @@ -4524,80 +4441,69 @@ angular.module('ui-leaflet').directive('markers', } // Check if the marker should be added to a layer - if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))){ + if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))) { - var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, - watchOptions.individual.type, map); - if(!pass) - continue; //something went wrong move on in the loop + var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, watchOptions.individual.type, map); + if (!pass) continue; //something went wrong move on in the loop } else if (!isDefined(model.group)) { - // We do not have a layer attr, so the marker goes to the map layer - map.addLayer(marker); - if (watchOptions.individual.type === null && model.focus === true) { - marker.openPopup(); + // We do not have a layer attr, so the marker goes to the map layer + map.addLayer(marker); + if (watchOptions.individual.type === null && model.focus === true) { + marker.openPopup(); + } } - } if (watchOptions.individual.type !== null) { - addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, - watchOptions.individual); + addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, watchOptions.individual); } listenMarkerEvents(marker, model, leafletScope, watchOptions.individual.type, map); leafletMarkerEvents.bindEvents(mapId, marker, pathToMarker, model, leafletScope, layerName); - } - else { + } else { var oldModel = getModelFromModels(oldModels, newName, maybeLayerName); updateMarker(model, oldModel, maybeLMarker, pathToMarker, leafletScope, layers, map); } } }; - var _seeWhatWeAlreadyHave = function(markerModels, oldMarkerModels, lMarkers, isEqual, cb){ + var _seeWhatWeAlreadyHave = function _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, isEqual, cb) { var hasLogged = false, equals = false, oldMarker, newMarker; - var doCheckOldModel = isDefined(oldMarkerModels); + var doCheckOldModel = isDefined(oldMarkerModels); for (var name in lMarkers) { - if(!hasLogged) { + if (!hasLogged) { $log.debug(errorHeader + "[markers] destroy: "); hasLogged = true; } - if(doCheckOldModel){ + if (doCheckOldModel) { //might want to make the option (in watch options) to disable deep checking //ie the options to only check !== (reference check) instead of angular.equals (slow) newMarker = markerModels[name]; oldMarker = oldMarkerModels[name]; - equals = angular.equals(newMarker,oldMarker) && isEqual; + equals = angular.equals(newMarker, oldMarker) && isEqual; } - if (!isDefined(markerModels) || - !Object.keys(markerModels).length || - !isDefined(markerModels[name]) || - !Object.keys(markerModels[name]).length || - equals) { - if(cb && Helpers.isFunction(cb)) - cb(newMarker, oldMarker, name); + if (!isDefined(markerModels) || !Object.keys(markerModels).length || !isDefined(markerModels[name]) || !Object.keys(markerModels[name]).length || equals) { + if (cb && Helpers.isFunction(cb)) cb(newMarker, oldMarker, name); } } }; - var _destroy = function(markerModels, oldMarkerModels, lMarkers, map, layers){ - _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, false, - function(newMarker, oldMarker, lMarkerName){ - $log.debug(errorHeader + '[marker] is deleting marker: ' + lMarkerName); - deleteMarker(lMarkers[lMarkerName], map, layers); - delete lMarkers[lMarkerName]; - }); + var _destroy = function _destroy(markerModels, oldMarkerModels, lMarkers, map, layers) { + _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, false, function (newMarker, oldMarker, lMarkerName) { + $log.debug(errorHeader + '[marker] is deleting marker: ' + lMarkerName); + deleteMarker(lMarkers[lMarkerName], map, layers); + delete lMarkers[lMarkerName]; + }); }; - var _getNewModelsToSkipp = function(newModels, oldModels, lMarkers){ + var _getNewModelsToSkipp = function _getNewModelsToSkipp(newModels, oldModels, lMarkers) { var skips = {}; - _seeWhatWeAlreadyHave(newModels, oldModels, lMarkers, true, - function(newMarker, oldMarker, lMarkerName){ - $log.debug(errorHeader + '[marker] is already rendered, marker: ' + lMarkerName); - skips[lMarkerName] = newMarker; - }); + _seeWhatWeAlreadyHave(newModels, oldModels, lMarkers, true, function (newMarker, oldMarker, lMarkerName) { + $log.debug(errorHeader + '[marker] is already rendered, marker: ' + lMarkerName); + skips[lMarkerName] = newMarker; + }); return skips; }; @@ -4607,18 +4513,19 @@ angular.module('ui-leaflet').directive('markers', replace: false, require: ['leaflet', '?layers'], - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var mapController = controller[0], - leafletScope = mapController.getLeafletScope(); + leafletScope = mapController.getLeafletScope(); - mapController.getMap().then(function(map) { - var leafletMarkers = {}, getLayers; + mapController.getMap().then(function (map) { + var leafletMarkers = {}, + getLayers; // If the layers attribute is used, we must wait until the layers are created if (isDefined(controller[1])) { getLayers = controller[1].getLayers; } else { - getLayers = function() { + getLayers = function () { var deferred = $q.defer(); deferred.resolve(); return deferred.promise; @@ -4626,20 +4533,19 @@ angular.module('ui-leaflet').directive('markers', } var watchOptions; - if(leafletScope.watchOptions && leafletScope.watchOptions.markers) { + if (leafletScope.watchOptions && leafletScope.watchOptions.markers) { watchOptions = leafletScope.watchOptions.markers; - } - else { + } else { watchOptions = _defaultWatchOptions; - } + } - var isNested = (isDefined(attrs.markersNested) && Helpers.isTruthy(attrs.markersNested)); + var isNested = isDefined(attrs.markersNested) && Helpers.isTruthy(attrs.markersNested); - getLayers().then(function(layers) { - var _clean = function(models, oldModels){ - if(isNested) { - $it.each(models, function(markerToMaybeDel, layerName) { - var oldLayerModels = getLayerModels(oldModels, layerName); + getLayers().then(function (layers) { + var _clean = function _clean(models, oldModels) { + if (isNested) { + $it.each(models, function (markerToMaybeDel, layerName) { + var oldLayerModels = getLayerModels(oldModels, layerName); _destroy(markerToMaybeDel, oldLayerModels, leafletMarkers[layerName], map, layers); }); return; @@ -4647,27 +4553,25 @@ angular.module('ui-leaflet').directive('markers', _destroy(models, oldModels, leafletMarkers, map, layers); }; - var _create = function(models, oldModels){ + var _create = function _create(models, oldModels) { _clean(models, oldModels); var skips = null; - if(isNested) { - $it.each(models, function(markersToAdd, layerName) { + if (isNested) { + $it.each(models, function (markersToAdd, layerName) { var oldLayerModels = getLayerModels(oldModels, layerName); var newlayerModels = getLayerModels(models, layerName); skips = _getNewModelsToSkipp(newlayerModels, oldLayerModels, leafletMarkers[layerName]); - _addMarkers(attrs.id, markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope, - watchOptions, layerName, skips); + _addMarkers(attrs.id, markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, layerName, skips); }); return; } skips = _getNewModelsToSkipp(models, oldModels, leafletMarkers); - _addMarkers(attrs.id, models, oldModels, map, layers, leafletMarkers, leafletScope, - watchOptions, undefined, skips); + _addMarkers(attrs.id, models, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, undefined, skips); }; extendDirectiveControls(attrs.id, 'markers', _create, _clean); leafletData.setMarkers(leafletMarkers, attrs.id); - maybeWatch(leafletScope,'markers', watchOptions, function(newMarkers, oldMarkers){ + maybeWatch(leafletScope, 'markers', watchOptions, function (newMarkers, oldMarkers) { _create(newMarkers, oldMarkers); }); }); @@ -4676,6 +4580,8 @@ angular.module('ui-leaflet').directive('markers', }; }); +'use strict'; + angular.module('ui-leaflet').directive('maxbounds', function (leafletLogger, leafletMapDefaults, leafletBoundsHelpers, leafletHelpers) { // var $log = leafletLogger; return { @@ -4684,13 +4590,12 @@ angular.module('ui-leaflet').directive('maxbounds', function (leafletLogger, lea replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { - var leafletScope = controller.getLeafletScope(), + link: function link(scope, element, attrs, controller) { + var leafletScope = controller.getLeafletScope(), isValidBounds = leafletBoundsHelpers.isValidBounds, isNumber = leafletHelpers.isNumber; - - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { leafletScope.$watch("maxbounds", function (maxbounds) { if (!isValidBounds(maxbounds)) { // Unset any previous maxbounds @@ -4699,8 +4604,8 @@ angular.module('ui-leaflet').directive('maxbounds', function (leafletLogger, lea } var leafletBounds = leafletBoundsHelpers.createLeafletBounds(maxbounds); - if(isNumber(maxbounds.pad)) { - leafletBounds = leafletBounds.pad(maxbounds.pad); + if (isNumber(maxbounds.pad)) { + leafletBounds = leafletBounds.pad(maxbounds.pad); } map.setMaxBounds(leafletBounds); @@ -4713,6 +4618,8 @@ angular.module('ui-leaflet').directive('maxbounds', function (leafletLogger, lea }; }); +'use strict'; + angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, leafletData, leafletMapDefaults, leafletHelpers, leafletPathsHelpers, leafletPathEvents, leafletWatchHelpers) { var $log = leafletLogger; return { @@ -4721,18 +4628,18 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea replace: false, require: ['leaflet', '?layers'], - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var mapController = controller[0], isDefined = leafletHelpers.isDefined, isString = leafletHelpers.isString, - leafletScope = mapController.getLeafletScope(), - paths = leafletScope.paths, + leafletScope = mapController.getLeafletScope(), + paths = leafletScope.paths, createPath = leafletPathsHelpers.createPath, bindPathEvents = leafletPathEvents.bindPathEvents, setPathOptions = leafletPathsHelpers.setPathOptions, maybeWatch = leafletWatchHelpers.maybeWatch; - mapController.getMap().then(function(map) { + mapController.getMap().then(function (map) { var defaults = leafletMapDefaults.getDefaults(attrs.id), getLayers; @@ -4740,7 +4647,7 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea if (isDefined(controller[1])) { getLayers = controller[1].getLayers; } else { - getLayers = function() { + getLayers = function () { var deferred = $q.defer(); deferred.resolve(); return deferred.promise; @@ -4760,23 +4667,22 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea }; var watchOptions; - if(leafletScope.watchOptions && leafletScope.watchOptions.paths) { + if (leafletScope.watchOptions && leafletScope.watchOptions.paths) { watchOptions = leafletScope.watchOptions.paths; - } - else { + } else { watchOptions = _legacyWatchOptions; } - getLayers().then(function(layers) { + getLayers().then(function (layers) { var leafletPaths = {}; leafletData.setPaths(leafletPaths, attrs.id); // Function for listening every single path once created - var watchPathFn = function(leafletPath, name, watchOptions) { - var pathWatchPath = "paths[\""+name+"\"]"; + var watchPathFn = function watchPathFn(leafletPath, name, watchOptions) { + var pathWatchPath = "paths[\"" + name + "\"]"; - maybeWatch(leafletScope, pathWatchPath, watchOptions, function(pathData, old, clearWatch){ + maybeWatch(leafletScope, pathWatchPath, watchOptions, function (pathData, old, clearWatch) { if (!isDefined(pathData)) { if (isDefined(old.layer)) { for (var i in layers.overlays) { @@ -4792,7 +4698,7 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea }); }; - var _clean = function(newPaths){ + var _clean = function _clean(newPaths) { // Delete paths (by name) from the array for (var name in leafletPaths) { if (!isDefined(newPaths[name])) { @@ -4802,7 +4708,7 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea } }; - var _create = function(newPaths){ + var _create = function _create(newPaths) { _clean(newPaths); // Create the new paths for (var newName in newPaths) { @@ -4858,7 +4764,7 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea if (watchOptions.individual.type !== null) { watchPathFn(newPath, newName, watchOptions.individual); } else { - setPathOptions(newPath, pathData.type, pathData); + setPathOptions(newPath, pathData.type, pathData); } } else if (isDefined(newPath)) { // Listen for changes on the new path @@ -4868,7 +4774,7 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea if (watchOptions.individual.type !== null) { watchPathFn(newPath, newName, watchOptions.individual); } else { - setPathOptions(newPath, pathData.type, pathData); + setPathOptions(newPath, pathData.type, pathData); } } @@ -4877,16 +4783,17 @@ angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, lea } }; - maybeWatch(leafletScope,'paths', watchOptions, function(newPaths){ + maybeWatch(leafletScope, 'paths', watchOptions, function (newPaths) { _create(newPaths); }); - }); }); } }; }); +'use strict'; + angular.module('ui-leaflet').directive('tiles', function (leafletLogger, leafletData, leafletMapDefaults, leafletHelpers) { var $log = leafletLogger; return { @@ -4895,20 +4802,20 @@ angular.module('ui-leaflet').directive('tiles', function (leafletLogger, leaflet replace: false, require: 'leaflet', - link: function(scope, element, attrs, controller) { + link: function link(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, - leafletScope = controller.getLeafletScope(), + leafletScope = controller.getLeafletScope(), tiles = leafletScope.tiles; - if (!isDefined(tiles) || !isDefined(tiles.url)) { + if (!isDefined(tiles) || !isDefined(tiles.url)) { $log.warn("[AngularJS - Leaflet] The 'tiles' definition doesn't have the 'url' property."); return; } - controller.getMap().then(function(map) { + controller.getMap().then(function (map) { var defaults = leafletMapDefaults.getDefaults(attrs.id); var tileLayerObj; - leafletScope.$watch("tiles", function(tiles) { + leafletScope.$watch("tiles", function (tiles) { var tileLayerOptions = defaults.tileLayerOptions; var tileLayerUrl = defaults.tileLayer; @@ -4956,245 +4863,232 @@ angular.module('ui-leaflet').directive('tiles', function (leafletLogger, leaflet }; }); -angular.module('ui-leaflet').directive('watchOptions', [ - '$log', '$rootScope', '$q', 'leafletData', 'leafletHelpers', - function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers) { +'use strict'; - var isDefined = leafletHelpers.isDefined, - errorHeader = leafletHelpers.errorHeader, - isObject = leafletHelpers.isObject, - $log = leafletLogger; +angular.module('ui-leaflet').directive('watchOptions', ['$log', '$rootScope', '$q', 'leafletData', 'leafletHelpers', function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers) { - return { - restrict: "A", - scope: false, - replace: false, - require: ['leaflet'], + var isDefined = leafletHelpers.isDefined, + errorHeader = leafletHelpers.errorHeader, + isObject = leafletHelpers.isObject, + $log = leafletLogger; - link: function (scope, element, attrs, controller) { - var mapController = controller[0], - leafletScope = mapController.getLeafletScope(); + return { + restrict: "A", + scope: false, + replace: false, + require: ['leaflet'], - var _isValidWatchType = function(type) { - return type === 'watch' || - type === 'watchCollection' || - type === 'watchDeep' || - type === null; - }; + link: function link(scope, element, attrs, controller) { + var mapController = controller[0], + leafletScope = mapController.getLeafletScope(); - if(isDefined(leafletScope.watchOptions) && isObject(leafletScope.watchOptions)) { - angular.forEach(['markers', 'geojson', 'paths'], function(name) { - if (isDefined(leafletScope.watchOptions[name])) { - if(!_isValidWatchType(leafletScope.watchOptions[name].type)) { - $log.error(errorHeader + ' watchOptions.' + name + '.type is not a valid type.'); - } - if(isDefined(leafletScope.watchOptions[name].individual)) { - if(!_isValidWatchType(leafletScope.watchOptions[name].individual.type)) { - $log.error(errorHeader + ' watchOptions.' + name + '.individual.type is not a valid type.'); - } - } - else { - $log.error(errorHeader + ' watchOptions.' + name + '.type.individual must be defined.'); + var _isValidWatchType = function _isValidWatchType(type) { + return type === 'watch' || type === 'watchCollection' || type === 'watchDeep' || type === null; + }; + + if (isDefined(leafletScope.watchOptions) && isObject(leafletScope.watchOptions)) { + angular.forEach(['markers', 'geojson', 'paths'], function (name) { + if (isDefined(leafletScope.watchOptions[name])) { + if (!_isValidWatchType(leafletScope.watchOptions[name].type)) { + $log.error(errorHeader + ' watchOptions.' + name + '.type is not a valid type.'); + } + if (isDefined(leafletScope.watchOptions[name].individual)) { + if (!_isValidWatchType(leafletScope.watchOptions[name].individual.type)) { + $log.error(errorHeader + ' watchOptions.' + name + '.individual.type is not a valid type.'); } + } else { + $log.error(errorHeader + ' watchOptions.' + name + '.type.individual must be defined.'); } - }); - } + } + }); } - }; + } + }; }]); -angular.module('ui-leaflet') -.factory('leafletEventsHelpersFactory', function ($rootScope, $q, leafletLogger, leafletHelpers) { - var safeApply = leafletHelpers.safeApply, - isDefined = leafletHelpers.isDefined, - isObject = leafletHelpers.isObject, - isArray = leafletHelpers.isArray, - errorHeader = leafletHelpers.errorHeader, - $log = leafletLogger; +'use strict'; - var EventsHelper = function(rootBroadcastName, lObjectType){ - this.rootBroadcastName = rootBroadcastName; - $log.debug("leafletEventsHelpersFactory: lObjectType: " + lObjectType + "rootBroadcastName: " + rootBroadcastName); - //used to path/key out certain properties based on the type , "markers", "geojson" - this.lObjectType = lObjectType; - }; +angular.module('ui-leaflet').factory('leafletEventsHelpersFactory', function ($rootScope, $q, leafletLogger, leafletHelpers) { + var safeApply = leafletHelpers.safeApply, + isDefined = leafletHelpers.isDefined, + isObject = leafletHelpers.isObject, + isArray = leafletHelpers.isArray, + errorHeader = leafletHelpers.errorHeader, + $log = leafletLogger; - EventsHelper.prototype.getAvailableEvents = function(){return [];}; + var EventsHelper = function EventsHelper(rootBroadcastName, lObjectType) { + this.rootBroadcastName = rootBroadcastName; + $log.debug("leafletEventsHelpersFactory: lObjectType: " + lObjectType + "rootBroadcastName: " + rootBroadcastName); + //used to path/key out certain properties based on the type , "markers", "geojson" + this.lObjectType = lObjectType; + }; - /* - argument: name: Note this can be a single string or dot notation - Example: - markerModel : { - m1: { lat:_, lon: _} - } - //would yield name of - name = "m1" - - If nested: - markerModel : { - cars: { - m1: { lat:_, lon: _} - } - } - //would yield name of - name = "cars.m1" - */ - EventsHelper.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { - var _this = this; + EventsHelper.prototype.getAvailableEvents = function () { + return []; + }; + + /* + argument: name: Note this can be a single string or dot notation + Example: + markerModel : { + m1: { lat:_, lon: _} + } + //would yield name of + name = "m1" + If nested: + markerModel : { + cars: { + m1: { lat:_, lon: _} + } + } + //would yield name of + name = "cars.m1" + */ + EventsHelper.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { + var _this = this; - maybeMapId = maybeMapId || ''; - if (maybeMapId) - maybeMapId = '.' + maybeMapId; + maybeMapId = maybeMapId || ''; + if (maybeMapId) maybeMapId = '.' + maybeMapId; - return function (e) { - var broadcastName = _this.rootBroadcastName + maybeMapId + '.' + eventName; - $log.debug(broadcastName); - _this.fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName, extra); - }; + return function (e) { + var broadcastName = _this.rootBroadcastName + maybeMapId + '.' + eventName; + $log.debug(broadcastName); + _this.fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName, extra); }; + }; - EventsHelper.prototype.fire = function(scope, broadcastName, logic, event, lObject, model, modelName, layerName, extra){ - // Safely broadcast the event - safeApply(scope, function(){ - var toSend = { - leafletEvent: event, - leafletObject: lObject, - modelName: modelName, - model: model - }; - if (isDefined(layerName)) - angular.extend(toSend, {layerName: layerName}); + EventsHelper.prototype.fire = function (scope, broadcastName, logic, event, lObject, model, modelName, layerName, extra) { + // Safely broadcast the event + safeApply(scope, function () { + var toSend = { + leafletEvent: event, + leafletObject: lObject, + modelName: modelName, + model: model + }; + if (isDefined(layerName)) angular.extend(toSend, { layerName: layerName }); - if (logic === "emit") { - scope.$emit(broadcastName, toSend); - } else { - $rootScope.$broadcast(broadcastName, toSend); - } - }); - }; + if (logic === "emit") { + scope.$emit(broadcastName, toSend); + } else { + $rootScope.$broadcast(broadcastName, toSend); + } + }); + }; - EventsHelper.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName, extra) { - var events = []; - var logic = 'emit'; - var _this = this; + EventsHelper.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName, extra) { + var events = []; + var logic = 'emit'; + var _this = this; - if (!isDefined(leafletScope.eventBroadcast)) { - // Backward compatibility, if no event-broadcast attribute, all events are broadcasted + if (!isDefined(leafletScope.eventBroadcast)) { + // Backward compatibility, if no event-broadcast attribute, all events are broadcasted + events = this.getAvailableEvents(); + } else if (!isObject(leafletScope.eventBroadcast)) { + // Not a valid object + $log.error(errorHeader + "event-broadcast must be an object check your model."); + } else { + // We have a possible valid object + if (!isDefined(leafletScope.eventBroadcast[_this.lObjectType])) { + // We do not have events enable/disable do we do nothing (all enabled by default) events = this.getAvailableEvents(); - } else if (!isObject(leafletScope.eventBroadcast)) { + } else if (!isObject(leafletScope.eventBroadcast[_this.lObjectType])) { // Not a valid object - $log.error(errorHeader + "event-broadcast must be an object check your model."); + $log.warn(errorHeader + 'event-broadcast.' + [_this.lObjectType] + ' must be an object check your model.'); } else { - // We have a possible valid object - if (!isDefined(leafletScope.eventBroadcast[_this.lObjectType])) { - // We do not have events enable/disable do we do nothing (all enabled by default) - events = this.getAvailableEvents(); - } else if (!isObject(leafletScope.eventBroadcast[_this.lObjectType])) { - // Not a valid object - $log.warn(errorHeader + 'event-broadcast.' + [_this.lObjectType] + ' must be an object check your model.'); - } else { - // We have a possible valid map object - // Event propadation logic - if (isDefined(leafletScope.eventBroadcast[this.lObjectType].logic)) { - // We take care of possible propagation logic - if (leafletScope.eventBroadcast[_this.lObjectType].logic !== "emit" && - leafletScope.eventBroadcast[_this.lObjectType].logic !== "broadcast") - $log.warn(errorHeader + "Available event propagation logic are: 'emit' or 'broadcast'."); - } - // Enable / Disable - var eventsEnable = false, eventsDisable = false; - if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].enable) && - isArray(leafletScope.eventBroadcast[_this.lObjectType].enable)) - eventsEnable = true; - if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].disable) && - isArray(leafletScope.eventBroadcast[_this.lObjectType].disable)) - eventsDisable = true; - - if (eventsEnable && eventsDisable) { - // Both are active, this is an error - $log.warn(errorHeader + "can not enable and disable events at the same time"); - } else if (!eventsEnable && !eventsDisable) { - // Both are inactive, this is an error - $log.warn(errorHeader + "must enable or disable events"); - } else { - // At this point the object is OK, lets enable or disable events - if (eventsEnable) { - // Enable events - leafletScope.eventBroadcast[this.lObjectType].enable.forEach(function(eventName){ - // Do we have already the event enabled? - if (events.indexOf(eventName) !== -1) { - // Repeated event, this is an error - $log.warn(errorHeader + "This event " + eventName + " is already enabled"); - } else { - // Does the event exists? - if (_this.getAvailableEvents().indexOf(eventName) === -1) { - // The event does not exists, this is an error - $log.warn(errorHeader + "This event " + eventName + " does not exist"); - } else { - // All ok enable the event - events.push(eventName); - } - } - }); - } else { - // Disable events - events = this.getAvailableEvents(); - leafletScope.eventBroadcast[_this.lObjectType].disable.forEach(function(eventName) { - var index = events.indexOf(eventName); - if (index === -1) { - // The event does not exist - $log.warn(errorHeader + "This event " + eventName + " does not exist or has been already disabled"); + // We have a possible valid map object + // Event propadation logic + if (isDefined(leafletScope.eventBroadcast[this.lObjectType].logic)) { + // We take care of possible propagation logic + if (leafletScope.eventBroadcast[_this.lObjectType].logic !== "emit" && leafletScope.eventBroadcast[_this.lObjectType].logic !== "broadcast") $log.warn(errorHeader + "Available event propagation logic are: 'emit' or 'broadcast'."); + } + // Enable / Disable + var eventsEnable = false, + eventsDisable = false; + if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].enable) && isArray(leafletScope.eventBroadcast[_this.lObjectType].enable)) eventsEnable = true; + if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].disable) && isArray(leafletScope.eventBroadcast[_this.lObjectType].disable)) eventsDisable = true; + if (eventsEnable && eventsDisable) { + // Both are active, this is an error + $log.warn(errorHeader + "can not enable and disable events at the same time"); + } else if (!eventsEnable && !eventsDisable) { + // Both are inactive, this is an error + $log.warn(errorHeader + "must enable or disable events"); + } else { + // At this point the object is OK, lets enable or disable events + if (eventsEnable) { + // Enable events + leafletScope.eventBroadcast[this.lObjectType].enable.forEach(function (eventName) { + // Do we have already the event enabled? + if (events.indexOf(eventName) !== -1) { + // Repeated event, this is an error + $log.warn(errorHeader + "This event " + eventName + " is already enabled"); + } else { + // Does the event exists? + if (_this.getAvailableEvents().indexOf(eventName) === -1) { + // The event does not exists, this is an error + $log.warn(errorHeader + "This event " + eventName + " does not exist"); } else { - events.splice(index, 1); + // All ok enable the event + events.push(eventName); } - }); - } + } + }); + } else { + // Disable events + events = this.getAvailableEvents(); + leafletScope.eventBroadcast[_this.lObjectType].disable.forEach(function (eventName) { + var index = events.indexOf(eventName); + if (index === -1) { + // The event does not exist + $log.warn(errorHeader + "This event " + eventName + " does not exist or has been already disabled"); + } else { + events.splice(index, 1); + } + }); } } } + } - events.forEach(function(eventName){ - lObject.on(eventName,_this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra)); - }); - return logic; - }; + events.forEach(function (eventName) { + lObject.on(eventName, _this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra)); + }); + return logic; + }; - return EventsHelper; -}) -.service('leafletEventsHelpers', function(leafletEventsHelpersFactory){ + return EventsHelper; +}).service('leafletEventsHelpers', function (leafletEventsHelpersFactory) { return new leafletEventsHelpersFactory(); }); -angular.module('ui-leaflet') -.factory('leafletGeoJsonEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, - leafletEventsHelpersFactory, leafletData) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletGeoJsonEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletData) { var safeApply = leafletHelpers.safeApply, EventsHelper = leafletEventsHelpersFactory; - // $log = leafletLogger; + // $log = leafletLogger; - var GeoJsonEvents = function(){ - EventsHelper.call(this,'leafletDirectiveGeoJson', 'geojson'); + var GeoJsonEvents = function GeoJsonEvents() { + EventsHelper.call(this, 'leafletDirectiveGeoJson', 'geojson'); }; - GeoJsonEvents.prototype = new EventsHelper(); + GeoJsonEvents.prototype = new EventsHelper(); - GeoJsonEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { + GeoJsonEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) { var base = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName), - _this = this; + _this = this; - return function(e){ + return function (e) { if (eventName === 'mouseout') { if (extra.resetStyleOnMouseout) { - leafletData.getGeoJSON(extra.mapId) - .then(function(leafletGeoJSON){ + leafletData.getGeoJSON(extra.mapId).then(function (leafletGeoJSON) { //this is broken on nested needs to traverse or user layerName (nested) - var lobj = layerName? leafletGeoJSON[layerName]: leafletGeoJSON; + var lobj = layerName ? leafletGeoJSON[layerName] : leafletGeoJSON; lobj.resetStyle(e.target); }); - } - safeApply(leafletScope, function() { + safeApply(leafletScope, function () { $rootScope.$broadcast(_this.rootBroadcastName + '.mouseout', e); }); } @@ -5202,118 +5096,61 @@ angular.module('ui-leaflet') }; }; - GeoJsonEvents.prototype.getAvailableEvents = function(){ return [ - 'click', - 'dblclick', - 'mouseover', - 'mouseout', - ]; + GeoJsonEvents.prototype.getAvailableEvents = function () { + return ['click', 'dblclick', 'mouseover', 'mouseout']; }; return new GeoJsonEvents(); }); -angular.module('ui-leaflet') -.factory('leafletLabelEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletLabelEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory) { var Helpers = leafletHelpers, EventsHelper = leafletEventsHelpersFactory; - //$log = leafletLogger; + //$log = leafletLogger; - var LabelEvents = function(){ - EventsHelper.call(this,'leafletDirectiveLabel', 'markers'); - }; - LabelEvents.prototype = new EventsHelper(); + var LabelEvents = function LabelEvents() { + EventsHelper.call(this, 'leafletDirectiveLabel', 'markers'); + }; + LabelEvents.prototype = new EventsHelper(); - LabelEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { - var markerName = name.replace('markers.', ''); - return EventsHelper.prototype - .genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, markerName, model, layerName); - }; + LabelEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var markerName = name.replace('markers.', ''); + return EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, markerName, model, layerName); + }; - LabelEvents.prototype.getAvailableEvents = function(){ - return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseover', - 'mouseout', - 'contextmenu' - ]; - }; + LabelEvents.prototype.getAvailableEvents = function () { + return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu']; + }; - LabelEvents.prototype.genEvents = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { - var _this = this; - var labelEvents = this.getAvailableEvents(); - var scopeWatchName = Helpers.getObjectArrayPath("markers." + name); - labelEvents.forEach(function(eventName) { - lObject.label.on(eventName, _this.genDispatchEvent( - maybeMapId, eventName, logic, leafletScope, lObject.label, scopeWatchName, model, layerName)); - }); - }; + LabelEvents.prototype.genEvents = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var _this = this; + var labelEvents = this.getAvailableEvents(); + var scopeWatchName = Helpers.getObjectArrayPath("markers." + name); + labelEvents.forEach(function (eventName) { + lObject.label.on(eventName, _this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject.label, scopeWatchName, model, layerName)); + }); + }; - LabelEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {}; + LabelEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {}; - return new LabelEvents(); + return new LabelEvents(); }); -angular.module('ui-leaflet') -.factory('leafletMapEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpers, leafletIterators) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletMapEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpers, leafletIterators) { var isDefined = leafletHelpers.isDefined, fire = leafletEventsHelpers.fire; - var _getAvailableMapEvents = function() { - return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseup', - 'mouseover', - 'mouseout', - 'mousemove', - 'contextmenu', - 'focus', - 'blur', - 'preclick', - 'load', - 'unload', - 'viewreset', - 'movestart', - 'move', - 'moveend', - 'dragstart', - 'drag', - 'dragend', - 'zoomstart', - 'zoomanim', - 'zoomend', - 'zoomlevelschange', - 'resize', - 'autopanstart', - 'layeradd', - 'layerremove', - 'baselayerchange', - 'overlayadd', - 'overlayremove', - 'locationfound', - 'locationerror', - 'popupopen', - 'popupclose', - 'draw:created', - 'draw:edited', - 'draw:deleted', - 'draw:drawstart', - 'draw:drawstop', - 'draw:editstart', - 'draw:editstop', - 'draw:deletestart', - 'draw:deletestop' - ]; + var _getAvailableMapEvents = function _getAvailableMapEvents() { + return ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'contextmenu', 'focus', 'blur', 'preclick', 'load', 'unload', 'viewreset', 'movestart', 'move', 'moveend', 'dragstart', 'drag', 'dragend', 'zoomstart', 'zoomanim', 'zoomend', 'zoomlevelschange', 'resize', 'autopanstart', 'layeradd', 'layerremove', 'baselayerchange', 'overlayadd', 'overlayremove', 'locationfound', 'locationerror', 'popupopen', 'popupclose', 'draw:created', 'draw:edited', 'draw:deleted', 'draw:drawstart', 'draw:drawstop', 'draw:editstart', 'draw:editstop', 'draw:deletestart', 'draw:deletestop']; }; - var _genDispatchMapEvent = function(scope, eventName, logic, maybeMapId) { - if (maybeMapId) - maybeMapId = maybeMapId + '.'; - return function(e) { + var _genDispatchMapEvent = function _genDispatchMapEvent(scope, eventName, logic, maybeMapId) { + if (maybeMapId) maybeMapId = maybeMapId + '.'; + return function (e) { // Put together broadcast name var broadcastName = 'leafletDirectiveMap.' + maybeMapId + eventName; leafletLogger.debug(broadcastName); @@ -5322,24 +5159,24 @@ angular.module('ui-leaflet') }; }; - var _notifyCenterChangedToBounds = function(scope) { + var _notifyCenterChangedToBounds = function _notifyCenterChangedToBounds(scope) { scope.$broadcast("boundsChanged"); }; - var _notifyCenterUrlHashChanged = function(scope, map, attrs, search) { + var _notifyCenterUrlHashChanged = function _notifyCenterUrlHashChanged(scope, map, attrs, search) { if (!isDefined(attrs.urlHashCenter)) { return; } var center = map.getCenter(); - var centerUrlHash = (center.lat).toFixed(4) + ":" + (center.lng).toFixed(4) + ":" + map.getZoom(); + var centerUrlHash = center.lat.toFixed(4) + ":" + center.lng.toFixed(4) + ":" + map.getZoom(); if (!isDefined(search.c) || search.c !== centerUrlHash) { //$log.debug("notified new center..."); scope.$emit("centerUrlHash", centerUrlHash); } }; - var _addEvents = function(map, mapEvents, contextName, scope, logic){ - leafletIterators.each(mapEvents, function(eventName) { + var _addEvents = function _addEvents(map, mapEvents, contextName, scope, logic) { + leafletIterators.each(mapEvents, function (eventName) { var context = {}; context[contextName] = eventName; map.on(eventName, _genDispatchMapEvent(scope, eventName, logic, map._container.id || ''), context); @@ -5355,8 +5192,9 @@ angular.module('ui-leaflet') }; }); -angular.module('ui-leaflet') -.factory('leafletMarkerEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletLabelEvents) { +'use strict'; + +angular.module('ui-leaflet').factory('leafletMarkerEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletLabelEvents) { var safeApply = leafletHelpers.safeApply, isDefined = leafletHelpers.isDefined, Helpers = leafletHelpers, @@ -5364,16 +5202,15 @@ angular.module('ui-leaflet') EventsHelper = leafletEventsHelpersFactory, $log = leafletLogger; - var MarkerEvents = function(){ - EventsHelper.call(this,'leafletDirectiveMarker', 'markers'); + var MarkerEvents = function MarkerEvents() { + EventsHelper.call(this, 'leafletDirectiveMarker', 'markers'); }; MarkerEvents.prototype = new EventsHelper(); - MarkerEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { - var handle = EventsHelper.prototype - .genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName); - return function(e){ + MarkerEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var handle = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName); + return function (e) { // Broadcast old marker click name for backwards compatibility if (eventName === "click") { safeApply(leafletScope, function () { @@ -5392,41 +5229,26 @@ angular.module('ui-leaflet') }; }; - MarkerEvents.prototype.getAvailableEvents = function(){ return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseover', - 'mouseout', - 'contextmenu', - 'dragstart', - 'drag', - 'dragend', - 'move', - 'remove', - 'popupopen', - 'popupclose', - 'touchend', - 'touchstart', - 'touchmove', - 'touchcancel', - 'touchleave' - ]; + MarkerEvents.prototype.getAvailableEvents = function () { + return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu', 'dragstart', 'drag', 'dragend', 'move', 'remove', 'popupopen', 'popupclose', 'touchend', 'touchstart', 'touchmove', 'touchcancel', 'touchleave']; }; MarkerEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) { - var logic = EventsHelper.prototype.bindEvents.call(this, maybeMapId, lObject, name, model, leafletScope, layerName); + var logic = EventsHelper.prototype.bindEvents.call(this, maybeMapId, lObject, name, model, leafletScope, layerName); - if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) { - lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model, layerName); - } + if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) { + lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model, layerName); + } }; return new MarkerEvents(); }); -angular.module('ui-leaflet') -.factory('leafletPathEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletLabelEvents, leafletEventsHelpers) { +'use strict'; + +function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; } + +angular.module('ui-leaflet').factory('leafletPathEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletLabelEvents, leafletEventsHelpers) { var isDefined = leafletHelpers.isDefined, isObject = leafletHelpers.isObject, Helpers = leafletHelpers, @@ -5439,11 +5261,10 @@ angular.module('ui-leaflet') TODO (nmccready) This EventsHelper needs to be derrived from leafletEventsHelpers to elminate copy and paste code. */ - var _genDispatchPathEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { + var _genDispatchPathEvent = function _genDispatchPathEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) { maybeMapId = maybeMapId || ''; - if (maybeMapId) - maybeMapId = '.' + maybeMapId; + if (maybeMapId) maybeMapId = '.' + maybeMapId; return function (e) { var broadcastName = 'leafletDirectivePath' + maybeMapId + '.' + eventName; @@ -5452,7 +5273,7 @@ angular.module('ui-leaflet') }; }; - var _bindPathEvents = function (maybeMapId, lObject, name, model, leafletScope) { + var _bindPathEvents = function _bindPathEvents(maybeMapId, lObject, name, model, leafletScope) { var pathEvents = [], i, eventName, @@ -5485,14 +5306,15 @@ angular.module('ui-leaflet') } } // Enable / Disable - var pathEventsEnable = false, pathEventsDisable = false; + var pathEventsEnable = false, + pathEventsDisable = false; if (leafletScope.eventBroadcast.path.enable !== undefined && leafletScope.eventBroadcast.path.enable !== null) { - if (typeof leafletScope.eventBroadcast.path.enable === 'object') { + if (_typeof(leafletScope.eventBroadcast.path.enable) === 'object') { pathEventsEnable = true; } } if (leafletScope.eventBroadcast.path.disable !== undefined && leafletScope.eventBroadcast.path.disable !== null) { - if (typeof leafletScope.eventBroadcast.path.disable === 'object') { + if (_typeof(leafletScope.eventBroadcast.path.disable) === 'object') { pathEventsDisable = true; } } @@ -5532,7 +5354,6 @@ angular.module('ui-leaflet') if (index === -1) { // The event does not exist $log.warn(errorHeader + "This event " + eventName + " does not exist or has been already disabled"); - } else { pathEvents.splice(index, 1); } @@ -5552,19 +5373,8 @@ angular.module('ui-leaflet') } }; - var _getAvailablePathEvents = function () { - return [ - 'click', - 'dblclick', - 'mousedown', - 'mouseover', - 'mouseout', - 'contextmenu', - 'add', - 'remove', - 'popupopen', - 'popupclose' - ]; + var _getAvailablePathEvents = function _getAvailablePathEvents() { + return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu', 'add', 'remove', 'popupopen', 'popupclose']; }; return { diff --git a/dist/ui-leaflet_dev_mapped.js.map b/dist/ui-leaflet_dev_mapped.js.map index 14b3a126..5fcea716 100644 --- a/dist/ui-leaflet_dev_mapped.js.map +++ b/dist/ui-leaflet_dev_mapped.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/directives/leaflet.js","../src/services/leafletBoundsHelpers.js","../src/services/leafletControlHelpers.js","../src/services/leafletData.js","../src/services/leafletDirectiveControlsHelpers.js","../src/services/leafletGeoJsonHelpers.js","../src/services/leafletHelpers.js","../src/services/leafletIterators.js","../src/services/leafletLayerHelpers.js","../src/services/leafletLegendHelpers.js","../src/services/leafletMapDefaults.js","../src/services/leafletMarkersHelpers.js","../src/services/leafletPathsHelpers.js","../src/services/leafletWatchHelpers.js","../src/services/logger.js","../src/services/nominatim.js","../src/directives/bounds.js","../src/directives/center.js","../src/directives/controls.js","../src/directives/decorations.js","../src/directives/eventBroadcast.js","../src/directives/geojson.js","../src/directives/layercontrol.js","../src/directives/layers.js","../src/directives/legend.js","../src/directives/markers.js","../src/directives/maxbounds.js","../src/directives/paths.js","../src/directives/tiles.js","../src/directives/watchOptions.js","../src/services/events/leafletEventsHelpers.js","../src/services/events/leafletGeoJsonEvents.js","../src/services/events/leafletLabelEvents.js","../src/services/events/leafletMapEvents.js","../src/services/events/leafletMarkerEvents.js","../src/services/events/leafletPathEvents.js"],"names":[],"mappings":"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","file":"ui-leaflet_dev_mapped.js","sourcesContent":["angular.module('ui-leaflet', ['nemLogging']).directive('leaflet',\n function ($q, leafletData, leafletMapDefaults, leafletHelpers, leafletMapEvents) {\n return {\n restrict: \"EA\",\n replace: true,\n scope: {\n center : '=',\n lfCenter : '=',\n defaults : '=',\n maxbounds : '=',\n bounds : '=',\n markers : '=',\n legend : '=',\n geojson : '=',\n paths : '=',\n tiles : '=',\n layers : '=',\n controls : '=',\n decorations : '=',\n eventBroadcast : '=',\n watchOptions : '='\n },\n transclude: true,\n template: '
',\n controller: function ($scope) {\n this._leafletMap = $q.defer();\n this.getMap = function () {\n return this._leafletMap.promise;\n };\n\n this.getLeafletScope = function() {\n return $scope;\n };\n },\n\n link: function(scope, element, attrs, ctrl) {\n var isDefined = leafletHelpers.isDefined,\n defaults = leafletMapDefaults.setDefaults(scope.defaults, attrs.id),\n mapEvents = leafletMapEvents.getAvailableMapEvents(),\n addEvents = leafletMapEvents.addEvents;\n\n scope.mapId = attrs.id;\n leafletData.setDirectiveControls({}, attrs.id);\n\n // Set width and height utility functions\n function updateWidth() {\n if (isNaN(attrs.width)) {\n element.css('width', attrs.width);\n } else {\n element.css('width', attrs.width + 'px');\n }\n }\n\n function updateHeight() {\n if (isNaN(attrs.height)) {\n element.css('height', attrs.height);\n } else {\n element.css('height', attrs.height + 'px');\n }\n }\n\n // If the width attribute defined update css\n // Then watch if bound property changes and update css\n if (isDefined(attrs.width)) {\n updateWidth();\n\n scope.$watch(\n function () {\n return element[0].getAttribute('width');\n },\n function () {\n updateWidth();\n map.invalidateSize();\n });\n }\n\n // If the height attribute defined update css\n // Then watch if bound property changes and update css\n if (isDefined(attrs.height)) {\n updateHeight();\n\n scope.$watch(\n function () {\n return element[0].getAttribute('height');\n },\n function () {\n updateHeight();\n map.invalidateSize();\n });\n }\n\n // Create the Leaflet Map Object with the options\n var map = new L.Map(element[0], leafletMapDefaults.getMapCreationDefaults(attrs.id));\n ctrl._leafletMap.resolve(map);\n\n if (!isDefined(attrs.center) && !isDefined(attrs.lfCenter)) {\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n }\n\n // If no layers nor tiles defined, set the default tileLayer\n if (!isDefined(attrs.tiles) && (!isDefined(attrs.layers))) {\n var tileLayerObj = L.tileLayer(defaults.tileLayer, defaults.tileLayerOptions);\n tileLayerObj.addTo(map);\n leafletData.setTiles(tileLayerObj, attrs.id);\n }\n\n // Set zoom control configuration\n if (isDefined(map.zoomControl) &&\n isDefined(defaults.zoomControlPosition)) {\n map.zoomControl.setPosition(defaults.zoomControlPosition);\n }\n\n if (isDefined(map.zoomControl) &&\n defaults.zoomControl===false) {\n map.zoomControl.removeFrom(map);\n }\n\n if (isDefined(map.zoomsliderControl) &&\n isDefined(defaults.zoomsliderControl) &&\n defaults.zoomsliderControl===false) {\n map.zoomsliderControl.removeFrom(map);\n }\n\n\n // if no event-broadcast attribute, all events are broadcasted\n if (!isDefined(attrs.eventBroadcast)) {\n var logic = \"broadcast\";\n addEvents(map, mapEvents, \"eventName\", scope, logic);\n }\n\n // Resolve the map object to the promises\n map.whenReady(function() {\n leafletData.setMap(map, attrs.id);\n });\n\n scope.$on('$destroy', function () {\n leafletMapDefaults.reset();\n map.remove();\n leafletData.unresolveMap(attrs.id);\n });\n\n //Handle request to invalidate the map size\n //Up scope using $scope.$emit('invalidateSize')\n //Down scope using $scope.$broadcast('invalidateSize')\n scope.$on('invalidateSize', function() {\n map.invalidateSize();\n });\n }\n };\n});\n","angular.module('ui-leaflet').factory('leafletBoundsHelpers', function (leafletLogger, leafletHelpers) {\n\n var isArray = leafletHelpers.isArray,\n isNumber = leafletHelpers.isNumber,\n isFunction = leafletHelpers.isFunction,\n isDefined = leafletHelpers.isDefined,\n $log = leafletLogger;\n\n function _isValidBounds(bounds) {\n return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) &&\n angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) &&\n angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) &&\n angular.isNumber(bounds.northEast.lng);\n }\n\n return {\n createLeafletBounds: function(bounds) {\n if (_isValidBounds(bounds)) {\n return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng],\n [bounds.northEast.lat, bounds.northEast.lng ]);\n }\n },\n\n isValidBounds: _isValidBounds,\n\n createBoundsFromArray: function(boundsArray) {\n if (!(isArray(boundsArray) && boundsArray.length === 2 &&\n isArray(boundsArray[0]) && isArray(boundsArray[1]) &&\n boundsArray[0].length === 2 && boundsArray[1].length === 2 &&\n isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) &&\n isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) {\n $log.error(\"[AngularJS - Leaflet] The bounds array is not valid.\");\n return;\n }\n\n return {\n northEast: {\n lat: boundsArray[0][0],\n lng: boundsArray[0][1]\n },\n southWest: {\n lat: boundsArray[1][0],\n lng: boundsArray[1][1]\n }\n };\n },\n\n createBoundsFromLeaflet: function(lfBounds) {\n if (!(isDefined(lfBounds) && isFunction(lfBounds.getNorthEast) && isFunction(lfBounds.getSouthWest))) {\n $log.error(\"[AngularJS - Leaflet] The leaflet bounds is not valid object.\");\n return;\n }\n\n var northEast = lfBounds.getNorthEast(),\n southWest = lfBounds.getSouthWest();\n\n return {\n northEast: {\n lat: northEast.lat,\n lng: northEast.lng\n },\n southWest: {\n lat: southWest.lat,\n lng: southWest.lng\n }\n };\n }\n };\n});\n","angular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootScope, leafletLogger, leafletHelpers, leafletLayerHelpers, leafletMapDefaults) {\n var isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n createLayer = leafletLayerHelpers.createLayer,\n _controls = {},\n errorHeader = leafletHelpers.errorHeader + ' [Controls] ',\n $log = leafletLogger;\n\n var _controlLayersMustBeVisible = function(baselayers, overlays, mapId) {\n var defaults = leafletMapDefaults.getDefaults(mapId);\n if(!defaults.controls.layers.visible) {\n return false;\n }\n\n var atLeastOneControlItemMustBeShown = false;\n\n if (isObject(baselayers)) {\n Object.keys(baselayers).forEach(function(key) {\n var layer = baselayers[key];\n if (!isDefined(layer.layerOptions) || layer.layerOptions.showOnSelector !== false) {\n atLeastOneControlItemMustBeShown = true;\n }\n });\n }\n\n if (isObject(overlays)) {\n Object.keys(overlays).forEach(function(key) {\n var layer = overlays[key];\n if (!isDefined(layer.layerParams) || layer.layerParams.showOnSelector !== false) {\n atLeastOneControlItemMustBeShown = true;\n }\n });\n }\n\n return atLeastOneControlItemMustBeShown;\n };\n\n var _createLayersControl = function(mapId) {\n var defaults = leafletMapDefaults.getDefaults(mapId);\n var controlOptions = {\n collapsed: defaults.controls.layers.collapsed,\n position: defaults.controls.layers.position,\n autoZIndex: false\n };\n\n angular.extend(controlOptions, defaults.controls.layers.options);\n\n var control;\n if(defaults.controls.layers && isDefined(defaults.controls.layers.control)) {\n\t\t\tcontrol = defaults.controls.layers.control.apply(this, [[], [], controlOptions]);\n\t\t} else {\n\t\t\tcontrol = new L.control.layers([], [], controlOptions);\n\t\t}\n\n return control;\n };\n\n var controlTypes = {\n draw: {\n isPluginLoaded: function() {\n if (!angular.isDefined(L.Control.Draw)) {\n $log.error(errorHeader + ' Draw plugin is not loaded.');\n return false;\n }\n return true;\n },\n checkValidParams: function(/* params */) {\n return true;\n },\n createControl: function(params) {\n return new L.Control.Draw(params);\n }\n },\n scale: {\n isPluginLoaded: function() {\n return true;\n },\n checkValidParams: function(/* params */) {\n return true;\n },\n createControl: function(params) {\n return new L.control.scale(params);\n }\n },\n fullscreen: {\n isPluginLoaded: function() {\n if (!angular.isDefined(L.Control.Fullscreen)) {\n $log.error(errorHeader + ' Fullscreen plugin is not loaded.');\n return false;\n }\n return true;\n },\n checkValidParams: function(/* params */) {\n return true;\n },\n createControl: function(params) {\n return new L.Control.Fullscreen(params);\n }\n },\n search: {\n isPluginLoaded: function() {\n if (!angular.isDefined(L.Control.Search)) {\n $log.error(errorHeader + ' Search plugin is not loaded.');\n return false;\n }\n return true;\n },\n checkValidParams: function(/* params */) {\n return true;\n },\n createControl: function(params) {\n return new L.Control.Search(params);\n }\n },\n custom: {},\n minimap: {\n isPluginLoaded: function() {\n if (!angular.isDefined(L.Control.MiniMap)) {\n $log.error(errorHeader + ' Minimap plugin is not loaded.');\n return false;\n }\n\n return true;\n },\n checkValidParams: function(params) {\n if(!isDefined(params.layer)) {\n $log.warn(errorHeader +' minimap \"layer\" option should be defined.');\n return false;\n }\n return true;\n },\n createControl: function(params) {\n var layer = createLayer(params.layer);\n\n if (!isDefined(layer)) {\n $log.warn(errorHeader + ' minimap control \"layer\" could not be created.');\n return;\n }\n\n return new L.Control.MiniMap(layer, params);\n }\n }\n };\n\n return {\n layersControlMustBeVisible: _controlLayersMustBeVisible,\n\n isValidControlType: function(type) {\n return Object.keys(controlTypes).indexOf(type) !== -1;\n },\n\n createControl: function (type, params) {\n if (!controlTypes[type].checkValidParams(params)) {\n return;\n }\n\n return controlTypes[type].createControl(params);\n },\n\n updateLayersControl: function(map, mapId, loaded, baselayers, overlays, leafletLayers) {\n var i;\n var _layersControl = _controls[mapId];\n var mustBeLoaded = _controlLayersMustBeVisible(baselayers, overlays, mapId);\n\n if (isDefined(_layersControl) && loaded) {\n for (i in leafletLayers.baselayers) {\n _layersControl.removeLayer(leafletLayers.baselayers[i]);\n }\n for (i in leafletLayers.overlays) {\n _layersControl.removeLayer(leafletLayers.overlays[i]);\n }\n map.removeControl(_layersControl);\n delete _controls[mapId];\n }\n\n if (mustBeLoaded) {\n _layersControl = _createLayersControl(mapId);\n _controls[mapId] = _layersControl;\n for (i in baselayers) {\n var hideOnSelector = isDefined(baselayers[i].layerOptions) &&\n baselayers[i].layerOptions.showOnSelector === false;\n if (!hideOnSelector && isDefined(leafletLayers.baselayers[i])) {\n _layersControl.addBaseLayer(leafletLayers.baselayers[i], baselayers[i].name);\n }\n }\n for (i in overlays) {\n \tvar hideOverlayOnSelector = isDefined(overlays[i].layerParams) &&\n overlays[i].layerParams.showOnSelector === false;\n if (!hideOverlayOnSelector && isDefined(leafletLayers.overlays[i])) {\n _layersControl.addOverlay(leafletLayers.overlays[i], overlays[i].name);\n }\n }\n\n map.addControl(_layersControl);\n }\n return mustBeLoaded;\n }\n };\n});\n","angular.module('ui-leaflet').service('leafletData', function (leafletLogger, $q, leafletHelpers) {\n var getDefer = leafletHelpers.getDefer,\n getUnresolvedDefer = leafletHelpers.getUnresolvedDefer,\n setResolvedDefer = leafletHelpers.setResolvedDefer;\n // $log = leafletLogger;\n\n var _private = {};\n var self = this;\n\n var upperFirst = function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n };\n\n var _privateItems = [\n 'map',\n 'tiles',\n 'layers',\n 'paths',\n 'markers',\n 'geoJSON',\n 'UTFGrid', //odd ball on naming convention keeping to not break\n 'decorations',\n 'directiveControls'];\n\n //init\n _privateItems.forEach(function(itemName){\n _private[itemName] = {};\n });\n\n this.unresolveMap = function (scopeId) {\n var id = leafletHelpers.obtainEffectiveMapId(_private.map, scopeId);\n _privateItems.forEach(function (itemName) {\n _private[itemName][id] = undefined;\n });\n };\n\n //int repetitive stuff (get and sets)\n _privateItems.forEach(function (itemName) {\n var name = upperFirst(itemName);\n self['set' + name] = function (lObject, scopeId) {\n var defer = getUnresolvedDefer(_private[itemName], scopeId);\n defer.resolve(lObject);\n setResolvedDefer(_private[itemName], scopeId);\n };\n\n self['get' + name] = function (scopeId) {\n var defer = getDefer(_private[itemName], scopeId);\n return defer.promise;\n };\n });\n});\n","angular.module('ui-leaflet')\n.service('leafletDirectiveControlsHelpers', function (leafletLogger, leafletData, leafletHelpers) {\n var _isDefined = leafletHelpers.isDefined,\n _isString = leafletHelpers.isString,\n _isObject = leafletHelpers.isObject,\n _mainErrorHeader = leafletHelpers.errorHeader,\n $log = leafletLogger;\n\n var _errorHeader = _mainErrorHeader + '[leafletDirectiveControlsHelpers';\n\n var _extend = function(id, thingToAddName, createFn, cleanFn){\n var _fnHeader = _errorHeader + '.extend] ';\n var extender = {};\n if(!_isDefined(thingToAddName)){\n $log.error(_fnHeader + 'thingToAddName cannot be undefined');\n return;\n }\n\n if(_isString(thingToAddName) && _isDefined(createFn) && _isDefined(cleanFn)){\n extender[thingToAddName] = {\n create: createFn,\n clean: cleanFn\n };\n }\n else if(_isObject(thingToAddName) && !_isDefined(createFn) && !_isDefined(cleanFn)){\n extender = thingToAddName;\n }\n else{\n $log.error(_fnHeader + 'incorrect arguments');\n return;\n }\n\n //add external control to create / destroy markers without a watch\n leafletData.getDirectiveControls().then(function(controls){\n angular.extend(controls, extender);\n leafletData.setDirectiveControls(controls, id);\n });\n };\n\n return {\n extend: _extend\n };\n});\n","angular.module('ui-leaflet')\n.service('leafletGeoJsonHelpers', function (leafletHelpers, leafletIterators) {\n var lHlp = leafletHelpers,\n lIt = leafletIterators;\n var Point = function(lat,lng){\n this.lat = lat;\n this.lng = lng;\n return this;\n };\n\n var _getLat = function(value) {\n if (Array.isArray(value) && value.length === 2) {\n return value[1];\n } else if (lHlp.isDefined(value.type) && value.type === 'Point') {\n return +value.coordinates[1];\n } else {\n return +value.lat;\n }\n };\n\n var _getLng = function(value) {\n if (Array.isArray(value) && value.length === 2) {\n return value[0];\n } else if (lHlp.isDefined(value.type) && value.type === 'Point') {\n return +value.coordinates[0];\n } else {\n return +value.lng;\n }\n };\n\n var _validateCoords = function(coords) {\n if (lHlp.isUndefined(coords)) {\n return false;\n }\n if (lHlp.isArray(coords)) {\n if (coords.length === 2 && lHlp.isNumber(coords[0]) && lHlp.isNumber(coords[1])) {\n return true;\n }\n } else if (lHlp.isDefined(coords.type)) {\n if (\n coords.type === 'Point' && lHlp.isArray(coords.coordinates) &&\n coords.coordinates.length === 2 &&\n lHlp.isNumber(coords.coordinates[0]) &&\n lHlp.isNumber(coords.coordinates[1])) {\n return true;\n }\n }\n\n var ret = lIt.all(['lat', 'lng'], function(pos){\n return lHlp.isDefined(coords[pos]) && lHlp.isNumber(coords[pos]);\n });\n return ret;\n };\n\n var _getCoords = function(value) {\n if (!value || !_validateCoords(value)) {\n return;\n }\n var p = null;\n if (Array.isArray(value) && value.length === 2) {\n p = new Point(value[1], value[0]);\n } else if (lHlp.isDefined(value.type) && value.type === 'Point') {\n p = new Point(value.coordinates[1], value.coordinates[0]);\n } else {\n return value;\n }\n //note angular.merge is avail in angular 1.4.X we might want to fill it here\n return angular.extend(value, p);//tap on lat, lng if it doesnt exist\n };\n\n\n return {\n getLat: _getLat,\n getLng: _getLng,\n validateCoords: _validateCoords,\n getCoords: _getCoords\n };\n });\n","angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) {\n var _errorHeader = '[AngularJS - Leaflet] ';\n var _copy = angular.copy;\n var _clone = _copy;\n /*\n For parsing paths to a field in an object\n\n Example:\n var obj = {\n bike:{\n 1: 'hi'\n 2: 'foo'\n }\n };\n _getObjectValue(obj,\"bike.1\") returns 'hi'\n this is getPath in ui-gmap\n */\n var _getObjectValue = function(object, pathStr) {\n var obj;\n if(!object || !angular.isObject(object))\n return;\n //if the key is not a sting then we already have the value\n if ((pathStr === null) || !angular.isString(pathStr)) {\n return pathStr;\n }\n obj = object;\n pathStr.split('.').forEach(function(value) {\n if (obj) {\n obj = obj[value];\n }\n });\n return obj;\n };\n\n /*\n Object Array Notation\n _getObjectArrayPath(\"bike.one.two\")\n returns:\n 'bike[\"one\"][\"two\"]'\n */\n var _getObjectArrayPath = function(pathStr){\n return pathStr.split('.').reduce(function(previous, current) {\n return previous + '[\"'+ current + '\"]';\n });\n };\n\n /* Object Dot Notation\n _getObjectPath([\"bike\",\"one\",\"two\"])\n returns:\n \"bike.one.two\"\n */\n var _getObjectDotPath = function(arrayOfStrings){\n return arrayOfStrings.reduce(function(previous, current) {\n return previous + '.' + current;\n });\n };\n\n function _obtainEffectiveMapId(d, mapId) {\n var id, i;\n if (!angular.isDefined(mapId)) {\n if (Object.keys(d).length === 0) {\n id = \"main\";\n } else if (Object.keys(d).length >= 1) {\n for (i in d) {\n if (d.hasOwnProperty(i)) {\n id = i;\n }\n }\n } else {\n $log.error(_errorHeader + \"- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call\");\n }\n } else {\n id = mapId;\n }\n\n return id;\n }\n\n function _getUnresolvedDefer(d, mapId) {\n var id = _obtainEffectiveMapId(d, mapId),\n defer;\n\n if (!angular.isDefined(d[id]) || d[id].resolvedDefer === true) {\n defer = $q.defer();\n d[id] = {\n defer: defer,\n resolvedDefer: false\n };\n } else {\n defer = d[id].defer;\n }\n\n return defer;\n }\n\n var _isDefined = function(value) {\n return angular.isDefined(value) && value !== null;\n };\n var _isUndefined = function(value){\n return !_isDefined(value);\n };\n\n // BEGIN DIRECT PORT FROM AngularJS code base\n\n var SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\n\n var MOZ_HACK_REGEXP = /^moz([A-Z])/;\n\n var PREFIX_REGEXP = /^((?:x|data)[\\:\\-_])/i;\n\n /**\n Converts snake_case to camelCase.\n Also there is special case for Moz prefix starting with upper case letter.\n @param name Name to normalize\n */\n\n var camelCase = function(name) {\n return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {\n if (offset) {\n return letter.toUpperCase();\n } else {\n return letter;\n }\n }).replace(MOZ_HACK_REGEXP, \"Moz$1\");\n };\n\n\n /**\n Converts all accepted directives format into proper directive name.\n @param name Name to normalize\n */\n\n var directiveNormalize = function(name) {\n return camelCase(name.replace(PREFIX_REGEXP, \"\"));\n };\n\n // END AngularJS port\n\n return {\n camelCase: camelCase,\n directiveNormalize: directiveNormalize,\n copy:_copy,\n clone:_clone,\n errorHeader: _errorHeader,\n getObjectValue: _getObjectValue,\n getObjectArrayPath:_getObjectArrayPath,\n getObjectDotPath: _getObjectDotPath,\n defaultTo: function(val, _default){\n return _isDefined(val) ? val : _default;\n },\n //mainly for checking attributes of directives lets keep this minimal (on what we accept)\n isTruthy: function(val){\n return val === 'true' || val === true;\n },\n //Determine if a reference is {}\n isEmpty: function(value) {\n return Object.keys(value).length === 0;\n },\n\n //Determine if a reference is undefined or {}\n isUndefinedOrEmpty: function (value) {\n return (angular.isUndefined(value) || value === null) || Object.keys(value).length === 0;\n },\n\n // Determine if a reference is defined\n isDefined: _isDefined,\n isUndefined:_isUndefined,\n isNumber: angular.isNumber,\n isString: angular.isString,\n isArray: angular.isArray,\n isObject: angular.isObject,\n isFunction: angular.isFunction,\n equals: angular.equals,\n\n isValidCenter: function(center) {\n return angular.isDefined(center) && angular.isNumber(center.lat) &&\n angular.isNumber(center.lng) && angular.isNumber(center.zoom);\n },\n\n isValidPoint: function(point) {\n if (!angular.isDefined(point)) {\n return false;\n }\n if (angular.isArray(point)) {\n return point.length === 2 && angular.isNumber(point[0]) && angular.isNumber(point[1]);\n }\n return angular.isNumber(point.lat) && angular.isNumber(point.lng);\n },\n\n isSameCenterOnMap: function(centerModel, map) {\n var mapCenter = map.getCenter();\n var zoom = map.getZoom();\n if (centerModel.lat && centerModel.lng &&\n mapCenter.lat.toFixed(4) === centerModel.lat.toFixed(4) &&\n mapCenter.lng.toFixed(4) === centerModel.lng.toFixed(4) &&\n zoom === centerModel.zoom) {\n return true;\n }\n return false;\n },\n\n safeApply: function($scope, fn) {\n var phase = $scope.$root.$$phase;\n if (phase === '$apply' || phase === '$digest') {\n $scope.$eval(fn);\n } else {\n $scope.$evalAsync(fn);\n }\n },\n\n obtainEffectiveMapId: _obtainEffectiveMapId,\n\n getDefer: function(d, mapId) {\n var id = _obtainEffectiveMapId(d, mapId),\n defer;\n if (!angular.isDefined(d[id]) || d[id].resolvedDefer === false) {\n defer = _getUnresolvedDefer(d, mapId);\n } else {\n defer = d[id].defer;\n }\n return defer;\n },\n\n getUnresolvedDefer: _getUnresolvedDefer,\n\n setResolvedDefer: function(d, mapId) {\n var id = _obtainEffectiveMapId(d, mapId);\n d[id].resolvedDefer = true;\n },\n\n rangeIsSupported: function() {\n var testrange = document.createElement('input');\n testrange.setAttribute('type', 'range');\n return testrange.type === 'range';\n },\n\n FullScreenControlPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.Control.Fullscreen);\n }\n },\n\n MiniMapControlPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.Control.MiniMap);\n }\n },\n\n AwesomeMarkersPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.AwesomeMarkers) && angular.isDefined(L.AwesomeMarkers.Icon);\n },\n is: function(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.AwesomeMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function (iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n\n VectorMarkersPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.VectorMarkers) && angular.isDefined(L.VectorMarkers.Icon);\n },\n is: function(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.VectorMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function (iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n\n DomMarkersPlugin: {\n isLoaded: function () {\n if (angular.isDefined(L.DomMarkers) && angular.isDefined(L.DomMarkers.Icon)) {\n return true;\n } else {\n return false;\n }\n },\n is: function (icon) {\n if (this.isLoaded()) {\n return icon instanceof L.DomMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function (iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n\n PolylineDecoratorPlugin: {\n isLoaded: function() {\n if (angular.isDefined(L.PolylineDecorator)) {\n return true;\n } else {\n return false;\n }\n },\n is: function(decoration) {\n if (this.isLoaded()) {\n return decoration instanceof L.PolylineDecorator;\n } else {\n return false;\n }\n },\n equal: function(decorationA, decorationB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(decorationA)) {\n return angular.equals(decorationA, decorationB);\n } else {\n return false;\n }\n }\n },\n\n MakiMarkersPlugin: {\n isLoaded: function() {\n if (angular.isDefined(L.MakiMarkers) && angular.isDefined(L.MakiMarkers.Icon)) {\n return true;\n } else {\n return false;\n }\n },\n is: function(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.MakiMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function (iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n ExtraMarkersPlugin: {\n isLoaded: function () {\n if (angular.isDefined(L.ExtraMarkers) && angular.isDefined(L.ExtraMarkers.Icon)) {\n return true;\n } else {\n return false;\n }\n },\n is: function (icon) {\n if (this.isLoaded()) {\n return icon instanceof L.ExtraMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function (iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n LabelPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.Label);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.MarkerClusterGroup;\n } else {\n return false;\n }\n }\n },\n MarkerClusterPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.MarkerClusterGroup);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.MarkerClusterGroup;\n } else {\n return false;\n }\n }\n },\n GoogleLayerPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.Google);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.Google;\n } else {\n return false;\n }\n }\n },\n LeafletProviderPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.TileLayer.Provider);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.TileLayer.Provider;\n } else {\n return false;\n }\n }\n }, \n ChinaLayerPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.tileLayer.chinaProvider);\n }\n },\n HeatLayerPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.heatLayer);\n }\n },\n WebGLHeatMapLayerPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.TileLayer.WebGLHeatMap);\n }\n },\n BingLayerPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.BingLayer);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.BingLayer;\n } else {\n return false;\n }\n }\n },\n WFSLayerPlugin: {\n isLoaded: function() {\n return L.GeoJSON.WFS !== undefined;\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.GeoJSON.WFS;\n } else {\n return false;\n }\n }\n },\n AGSBaseLayerPlugin: {\n isLoaded: function() {\n return L.esri !== undefined && L.esri.basemapLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.basemapLayer;\n } else {\n return false;\n }\n }\n },\n AGSLayerPlugin: {\n isLoaded: function() {\n return lvector !== undefined && lvector.AGS !== undefined;\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof lvector.AGS;\n } else {\n return false;\n }\n }\n },\n AGSFeatureLayerPlugin: {\n isLoaded: function() {\n return L.esri !== undefined && L.esri.featureLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.featureLayer;\n } else {\n return false;\n }\n }\n },\n AGSTiledMapLayerPlugin: {\n isLoaded: function() {\n return L.esri !== undefined && L.esri.tiledMapLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.tiledMapLayer;\n } else {\n return false;\n }\n }\n },\n AGSDynamicMapLayerPlugin: {\n isLoaded: function () {\n return L.esri !== undefined && L.esri.dynamicMapLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.dynamicMapLayer;\n } else {\n return false;\n }\n }\n },\n AGSImageMapLayerPlugin: {\n isLoaded: function () {\n return L.esri !== undefined && L.esri.imageMapLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.imageMapLayer;\n } else {\n return false;\n }\n }\n },\n AGSClusteredLayerPlugin: {\n isLoaded: function () {\n return L.esri !== undefined && L.esri.clusteredFeatureLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.clusteredFeatureLayer;\n } else {\n return false;\n }\n }\n },\n AGSHeatmapLayerPlugin: {\n isLoaded: function () {\n return L.esri !== undefined && L.esri.heatmapFeatureLayer !== undefined;\n },\n is: function (layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.heatmapFeatureLayer;\n } else {\n return false;\n }\n }\n },\n YandexLayerPlugin: {\n isLoaded: function() {\n return angular.isDefined(L.Yandex);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.Yandex;\n } else {\n return false;\n }\n }\n },\n GeoJSONPlugin: {\n isLoaded: function(){\n return angular.isDefined(L.TileLayer.GeoJSON);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.TileLayer.GeoJSON;\n } else {\n return false;\n }\n }\n },\n UTFGridPlugin: {\n isLoaded: function(){\n return angular.isDefined(L.UtfGrid);\n },\n is: function(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.UtfGrid;\n } else {\n $log.error('[AngularJS - Leaflet] No UtfGrid plugin found.');\n return false;\n }\n }\n },\n CartoDB: {\n isLoaded: function(){\n return cartodb;\n },\n is: function(/*layer*/) {\n return true;\n /*\n if (this.isLoaded()) {\n return layer instanceof L.TileLayer.GeoJSON;\n } else {\n return false;\n }*/\n }\n },\n Leaflet: {\n DivIcon: {\n is: function(icon) {\n return icon instanceof L.DivIcon;\n },\n equal: function(iconA, iconB) {\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n Icon: {\n is: function(icon) {\n return icon instanceof L.Icon;\n },\n equal: function(iconA, iconB) {\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n }\n },\n /*\n watchOptions - object to set deep nested watches and turn off watches all together\n (rely on control / functional updates)\n watchOptions - Object\n type: string. //One of ['watch', 'watchCollection', 'watchDeep', null]\n individual\n type: string\n */\n //legacy defaults\n watchOptions: {\n type:'watchDeep',\n individual:{\n type: 'watchDeep'\n }\n }\n };\n});\n","angular.module('ui-leaflet').service('leafletIterators', function (leafletLogger, leafletHelpers) {\n\n var lHlp = leafletHelpers,\n errorHeader = leafletHelpers.errorHeader + 'leafletIterators: ';\n\n //BEGIN COPY from underscore\n var _keys = Object.keys;\n var _isFunction = lHlp.isFunction;\n var _isObject = lHlp.isObject;\n var $log = leafletLogger;\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n var _isArrayLike = function(collection) {\n var length = collection !== null && collection.length;\n return lHlp.isNumber(length) && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Keep the identity function around for default iteratees.\n var _identity = function(value) {\n return value;\n };\n\n var _property = function(key) {\n return function(obj) {\n return obj === null ? void 0 : obj[key];\n };\n };\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount === null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n case 2: return function(value, other) {\n return func.call(context, value, other);\n };\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function(keysFunc, undefinedOnly) {\n return function(obj) {\n var length = arguments.length;\n if (length < 2 || obj === null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var _extendOwn, _assign = null;\n _extendOwn = _assign = createAssigner(_keys);\n\n // Returns whether an object has a given set of `key:value` pairs.\n var _isMatch = function(object, attrs) {\n var keys = _keys(attrs), length = keys.length;\n if (object === null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n var _matcher, _matches = null;\n _matcher = _matches = function(attrs) {\n attrs = _extendOwn({}, attrs);\n return function(obj) {\n return _isMatch(obj, attrs);\n };\n };\n\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function(value, context, argCount) {\n if (value === null) return _identity;\n if (_isFunction(value)) return optimizeCb(value, context, argCount);\n if (_isObject(value)) return _matcher(value);\n return _property(value);\n };\n\n var _every, _all = null;\n _every = _all = function(obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !_isArrayLike(obj) && _keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n //END COPY fron underscore\n\n var _hasErrors = function(collection, cb, ignoreCollection, cbName){\n if(!ignoreCollection) {\n if (!lHlp.isDefined(collection) || !lHlp.isDefined(cb)) {\n return true;\n }\n }\n if(!lHlp.isFunction(cb)){\n cbName = lHlp.defaultTo(cb,'cb');\n $log.error(errorHeader + cbName + ' is not a function');\n return true;\n }\n return false;\n };\n\n var _iterate = function(collection, externalCb, internalCb){\n if(_hasErrors(undefined, internalCb, true, 'internalCb')){\n return;\n }\n if(!_hasErrors(collection, externalCb)){\n for(var key in collection){\n if (collection.hasOwnProperty(key)) {\n internalCb(collection[key], key);\n }\n }\n }\n };\n\n //see http://jsperf.com/iterators/3\n //utilizing for in is way faster\n var _each = function(collection, cb){\n _iterate(collection, cb, function(val, key){\n cb(val, key);\n });\n };\n\n return {\n each:_each,\n forEach: _each,\n every: _every,\n all: _all\n };\n});\n","angular.module('ui-leaflet')\n.factory('leafletLayerHelpers', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletIterators) {\n var Helpers = leafletHelpers;\n var isString = leafletHelpers.isString;\n var isObject = leafletHelpers.isObject;\n var isArray = leafletHelpers.isArray;\n var isDefined = leafletHelpers.isDefined;\n var errorHeader = leafletHelpers.errorHeader;\n var $it = leafletIterators;\n var $log = leafletLogger;\n\n var utfGridCreateLayer = function(params) {\n if (!Helpers.UTFGridPlugin.isLoaded()) {\n $log.error('[AngularJS - Leaflet] The UTFGrid plugin is not loaded.');\n return;\n }\n var utfgrid = new L.UtfGrid(params.url, params.pluginOptions);\n\n utfgrid.on('mouseover', function(e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseover', e);\n });\n\n utfgrid.on('mouseout', function(e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseout', e);\n });\n\n utfgrid.on('click', function(e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridClick', e);\n });\n\n utfgrid.on('mousemove', function(e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridMousemove', e);\n });\n\n return utfgrid;\n };\n\n var layerTypes = {\n xyz: {\n mustHaveUrl: true,\n createLayer: function(params) {\n return L.tileLayer(params.url, params.options);\n }\n },\n mapbox: {\n mustHaveKey: true,\n createLayer: function(params) {\n var version = 3;\n if(isDefined(params.options.version) && params.options.version === 4) {\n version = params.options.version;\n }\n var url = version === 3?\n '//{s}.tiles.mapbox.com/v3/' + params.key + '/{z}/{x}/{y}.png':\n '//api.tiles.mapbox.com/v4/' + params.key + '/{z}/{x}/{y}.png?access_token=' + params.apiKey;\n return L.tileLayer(url, params.options);\n }\n },\n geoJSON: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.GeoJSONPlugin.isLoaded()) {\n return;\n }\n return new L.TileLayer.GeoJSON(params.url, params.pluginOptions, params.options);\n }\n },\n geoJSONShape: {\n mustHaveUrl: false,\n createLayer: function(params) {\n return new L.GeoJSON(params.data,\n params.options);\n }\n },\n geoJSONAwesomeMarker: {\n mustHaveUrl: false,\n createLayer: function(params) {\n return new L.geoJson(params.data, {\n pointToLayer: function (feature, latlng) {\n return L.marker(latlng, {icon: L.AwesomeMarkers.icon(params.icon)});\n }\n });\n }\n },\n geoJSONVectorMarker: {\n mustHaveUrl: false,\n createLayer: function(params) {\n return new L.geoJson(params.data, {\n pointToLayer: function (feature, latlng) {\n return L.marker(latlng, {icon: L.VectorMarkers.icon(params.icon)});\n }\n });\n }\n },\n utfGrid: {\n mustHaveUrl: true,\n createLayer: utfGridCreateLayer\n },\n cartodbTiles: {\n mustHaveKey: true,\n createLayer: function(params) {\n var url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png';\n return L.tileLayer(url, params.options);\n }\n },\n cartodbUTFGrid: {\n mustHaveKey: true,\n mustHaveLayer : true,\n createLayer: function(params) {\n params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json';\n return utfGridCreateLayer(params);\n }\n },\n cartodbInteractive: {\n mustHaveKey: true,\n mustHaveLayer : true,\n createLayer: function(params) {\n var tilesURL = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png';\n var tileLayer = L.tileLayer(tilesURL, params.options);\n params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json';\n var utfLayer = utfGridCreateLayer(params);\n return L.layerGroup([tileLayer, utfLayer]);\n }\n },\n wms: {\n mustHaveUrl: true,\n createLayer: function(params) {\n return L.tileLayer.wms(params.url, params.options);\n }\n },\n wmts: {\n mustHaveUrl: true,\n createLayer: function(params) {\n return L.tileLayer.wmts(params.url, params.options);\n }\n },\n wfs: {\n mustHaveUrl: true,\n mustHaveLayer : true,\n createLayer: function(params) {\n if (!Helpers.WFSLayerPlugin.isLoaded()) {\n return;\n }\n var options = angular.copy(params.options);\n if(options.crs && 'string' === typeof options.crs) {\n /*jshint -W061 */\n options.crs = eval(options.crs);\n }\n return new L.GeoJSON.WFS(params.url, params.layer, options);\n }\n },\n group: {\n mustHaveUrl: false,\n createLayer: function (params) {\n var lyrs = [];\n $it.each(params.options.layers, function(l){\n lyrs.push(createLayer(l));\n });\n params.options.loadedDefer = function() {\n var defers = [];\n if(isDefined(params.options.layers)) {\n for (var i = 0; i < params.options.layers.length; i++) {\n var d = params.options.layers[i].layerOptions.loadedDefer;\n if(isDefined(d)) {\n defers.push(d);\n }\n }\n }\n return defers;\n };\n return L.layerGroup(lyrs);\n }\n },\n featureGroup: {\n mustHaveUrl: false,\n createLayer: function () {\n return L.featureGroup();\n }\n },\n google: {\n mustHaveUrl: false,\n createLayer: function(params) {\n var type = params.type || 'SATELLITE';\n if (!Helpers.GoogleLayerPlugin.isLoaded()) {\n return;\n }\n return new L.Google(type, params.options);\n }\n },\n here: {\n mustHaveUrl: false,\n createLayer: function(params) {\n var provider = params.provider || 'HERE.terrainDay';\n if (!Helpers.LeafletProviderPlugin.isLoaded()) {\n return;\n }\n return new L.TileLayer.Provider(provider, params.options);\n }\n }, \n china:{\n mustHaveUrl:false,\n createLayer:function(params){\n var type = params.type || '';\n if(!Helpers.ChinaLayerPlugin.isLoaded()){\n return;\n }\n return L.tileLayer.chinaProvider(type, params.options);\n }\n },\n agsBase: {\n mustHaveLayer : true,\n createLayer: function (params) {\n if (!Helpers.AGSBaseLayerPlugin.isLoaded()) {\n return;\n }\n return L.esri.basemapLayer(params.layer, params.options);\n }\n },\n ags: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSLayerPlugin.isLoaded()) {\n return;\n }\n\n var options = angular.copy(params.options);\n angular.extend(options, {\n url: params.url\n });\n var layer = new lvector.AGS(options);\n layer.onAdd = function(map) {\n this.setMap(map);\n };\n layer.onRemove = function() {\n this.setMap(null);\n };\n return layer;\n }\n },\n agsFeature: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSFeatureLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n\n params.options.url = params.url;\n\n var layer = L.esri.featureLayer(params.options);\n var load = function() {\n if(isDefined(params.options.loadedDefer)) {\n params.options.loadedDefer.resolve();\n }\n };\n layer.on('loading', function() {\n params.options.loadedDefer = $q.defer();\n layer.off('load', load);\n layer.on('load', load);\n });\n\n return layer;\n }\n },\n agsTiled: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSTiledMapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n\n params.options.url = params.url;\n\n return L.esri.tiledMapLayer(params.options);\n }\n },\n agsDynamic: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSDynamicMapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n\n params.options.url = params.url;\n\n return L.esri.dynamicMapLayer(params.options);\n }\n },\n agsImage: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSImageMapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n params.options.url = params.url;\n\n return L.esri.imageMapLayer(params.options);\n }\n },\n agsClustered: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSClusteredLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri clustered layer plugin is not loaded.');\n return;\n }\n\n if(!Helpers.MarkerClusterPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The markercluster plugin is not loaded.');\n return;\n }\n return L.esri.clusteredFeatureLayer(params.url, params.options);\n }\n },\n agsHeatmap: {\n mustHaveUrl: true,\n createLayer: function(params) {\n if (!Helpers.AGSHeatmapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri heatmap layer plugin is not loaded.');\n return;\n }\n\n if(!Helpers.HeatLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The heatlayer plugin is not loaded.');\n return;\n }\n return L.esri.heatmapFeatureLayer(params.url, params.options);\n }\n },\n markercluster: {\n mustHaveUrl: false,\n createLayer: function(params) {\n if (!Helpers.MarkerClusterPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The markercluster plugin is not loaded.');\n return;\n }\n return new L.MarkerClusterGroup(params.options);\n }\n },\n bing: {\n mustHaveUrl: false,\n createLayer: function(params) {\n if (!Helpers.BingLayerPlugin.isLoaded()) {\n return;\n }\n return new L.BingLayer(params.key, params.options);\n }\n },\n webGLHeatmap: {\n mustHaveUrl: false,\n mustHaveData: true,\n createLayer: function(params) {\n if (!Helpers.WebGLHeatMapLayerPlugin.isLoaded()) {\n return;\n }\n var layer = new L.TileLayer.WebGLHeatMap(params.options);\n if (isDefined(params.data)) {\n layer.setData(params.data);\n }\n\n return layer;\n }\n },\n heat: {\n mustHaveUrl: false,\n mustHaveData: true,\n createLayer: function(params) {\n if (!Helpers.HeatLayerPlugin.isLoaded()) {\n return;\n }\n var layer = new L.heatLayer();\n\n if (isArray(params.data)) {\n layer.setLatLngs(params.data);\n }\n\n if (isObject(params.options)) {\n layer.setOptions(params.options);\n }\n\n return layer;\n }\n },\n yandex: {\n mustHaveUrl: false,\n createLayer: function(params) {\n var type = params.type || 'map';\n if (!Helpers.YandexLayerPlugin.isLoaded()) {\n return;\n }\n return new L.Yandex(type, params.options);\n }\n },\n imageOverlay: {\n mustHaveUrl: true,\n mustHaveBounds : true,\n createLayer: function(params) {\n return L.imageOverlay(params.url, params.bounds, params.options);\n }\n },\n iip: {\n mustHaveUrl: true,\n createLayer: function(params) {\n return L.tileLayer.iip(params.url, params.options);\n }\n },\n\n // This \"custom\" type is used to accept every layer that user want to define himself.\n // We can wrap these custom layers like heatmap or yandex, but it means a lot of work/code to wrap the world,\n // so we let user to define their own layer outside the directive,\n // and pass it on \"createLayer\" result for next processes\n custom: {\n createLayer: function (params) {\n if (params.layer instanceof L.Class) {\n return angular.copy(params.layer);\n }\n else {\n $log.error('[AngularJS - Leaflet] A custom layer must be a leaflet Class');\n }\n }\n },\n cartodb: {\n mustHaveUrl: true,\n createLayer: function(params) {\n return cartodb.createLayer(params.map, params.url);\n }\n }\n };\n\n function isValidLayerType(layerDefinition) {\n // Check if the baselayer has a valid type\n if (!isString(layerDefinition.type)) {\n $log.error('[AngularJS - Leaflet] A layer must have a valid type defined.');\n return false;\n }\n\n if (Object.keys(layerTypes).indexOf(layerDefinition.type) === -1) {\n $log.error('[AngularJS - Leaflet] A layer must have a valid type: ' + Object.keys(layerTypes));\n return false;\n }\n\n // Check if the layer must have an URL\n if (layerTypes[layerDefinition.type].mustHaveUrl && !isString(layerDefinition.url)) {\n $log.error('[AngularJS - Leaflet] A base layer must have an url');\n return false;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveData && !isDefined(layerDefinition.data)) {\n $log.error('[AngularJS - Leaflet] The base layer must have a \"data\" array attribute');\n return false;\n }\n\n if(layerTypes[layerDefinition.type].mustHaveLayer && !isDefined(layerDefinition.layer)) {\n $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have an layer defined');\n return false;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveBounds && !isDefined(layerDefinition.bounds)) {\n $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have bounds defined');\n return false ;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveKey && !isDefined(layerDefinition.key)) {\n $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have key defined');\n return false ;\n }\n return true;\n }\n\n function createLayer(layerDefinition) {\n if (!isValidLayerType(layerDefinition)) {\n return;\n }\n\n if (!isString(layerDefinition.name)) {\n $log.error('[AngularJS - Leaflet] A base layer must have a name');\n return;\n }\n if (!isObject(layerDefinition.layerParams)) {\n layerDefinition.layerParams = {};\n }\n if (!isObject(layerDefinition.layerOptions)) {\n layerDefinition.layerOptions = {};\n }\n\n // Mix the layer specific parameters with the general Leaflet options. Although this is an overhead\n // the definition of a base layers is more 'clean' if the two types of parameters are differentiated\n for (var attrname in layerDefinition.layerParams) {\n layerDefinition.layerOptions[attrname] = layerDefinition.layerParams[attrname];\n }\n\n var params = {\n url: layerDefinition.url,\n data: layerDefinition.data,\n options: layerDefinition.layerOptions,\n layer: layerDefinition.layer,\n icon: layerDefinition.icon,\n type: layerDefinition.layerType,\n bounds: layerDefinition.bounds,\n key: layerDefinition.key,\n apiKey: layerDefinition.apiKey,\n pluginOptions: layerDefinition.pluginOptions,\n user: layerDefinition.user\n };\n\n //TODO Add $watch to the layer properties\n return layerTypes[layerDefinition.type].createLayer(params);\n }\n\n function safeAddLayer(map, layer) {\n if (layer && typeof layer.addTo === 'function') {\n layer.addTo(map);\n } else {\n map.addLayer(layer);\n }\n }\n\n function safeRemoveLayer(map, layer, layerOptions) {\n if(isDefined(layerOptions) && isDefined(layerOptions.loadedDefer)) {\n if(angular.isFunction(layerOptions.loadedDefer)) {\n var defers = layerOptions.loadedDefer();\n $log.debug('Loaded Deferred', defers);\n var count = defers.length;\n if(count > 0) {\n var resolve = function() {\n count--;\n if(count === 0) {\n map.removeLayer(layer);\n }\n };\n\n for(var i = 0; i < defers.length; i++) {\n defers[i].promise.then(resolve);\n }\n } else {\n map.removeLayer(layer);\n }\n } else {\n layerOptions.loadedDefer.promise.then(function() {\n map.removeLayer(layer);\n });\n }\n } else {\n map.removeLayer(layer);\n }\n }\n\n return {\n createLayer: createLayer,\n safeAddLayer: safeAddLayer,\n safeRemoveLayer: safeRemoveLayer\n };\n});\n","angular.module(\"ui-leaflet\").factory('leafletLegendHelpers', function ($http, $q, $log, leafletHelpers) {\n\tvar requestQueue = {},\n\t\tisDefined = leafletHelpers.isDefined;\n\n\tvar _execNext = function(mapId) {\n\t\tvar queue = requestQueue[mapId];\n\t\tvar task = queue[0];\n\t\t$http(task.c).then(function(data) {\n\t\t\tqueue.shift();\n\t\t\ttask.d.resolve(data);\n\t\t\tif (queue.length > 0) {\n\t\t\t\t_execNext(mapId);\n\t\t\t}\n\t\t}, function(err) {\n\t\t\tqueue.shift();\n\t\t\ttask.d.reject(err);\n\t\t\tif (queue.length > 0) {\n\t\t\t\t_execNext(mapId);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar _updateLegend = function(div, legendData, type, url) {\n\t\tdiv.innerHTML = '';\n\t\tif(legendData.error) {\n\t\t\tdiv.innerHTML += '
' + legendData.error.message + '
';\n\t\t} else {\n\t\t\tif (type === 'arcgis') {\n\t\t\t\tfor (var i = 0; i < legendData.layers.length; i++) {\n\t\t\t\t\tvar layer = legendData.layers[i];\n\t\t\t\t\tdiv.innerHTML += '
' + layer.layerName + '
';\n\t\t\t\t\tfor(var j = 0; j < layer.legend.length; j++) {\n\t\t\t\t\t\tvar leg = layer.legend[j];\n\t\t\t\t\t\tdiv.innerHTML +=\n\t\t\t\t\t\t\t'
' +\n\t\t\t\t\t\t\t'
' + leg.label + '
';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (type === 'image') {\n\t\t\t\tdiv.innerHTML = '';\n\t\t\t}\n\t\t}\n\t};\n\n\tvar _getOnAddLegend = function(legendData, legendClass, type, url) {\n\t\treturn function(/*map*/) {\n\t\t\tvar div = L.DomUtil.create('div', legendClass);\n\n\t\t\tif (!L.Browser.touch) {\n\t\t\t\tL.DomEvent.disableClickPropagation(div);\n\t\t\t\tL.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);\n\t\t\t} else {\n\t\t\t\tL.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);\n\t\t\t}\n\t\t\t_updateLegend(div, legendData, type, url);\n\t\t\treturn div;\n\t\t};\n\t};\n\n\tvar _getOnAddArrayLegend = function(legend, legendClass) {\n\t\treturn function(/*map*/) {\n\t\t\tvar div = L.DomUtil.create('div', legendClass);\n for (var i = 0; i < legend.colors.length; i++) {\n div.innerHTML +=\n '
' +\n '
' + legend.labels[i] + '
';\n }\n if (!L.Browser.touch) {\n\t\t\t\tL.DomEvent.disableClickPropagation(div);\n\t\t\t\tL.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);\n\t\t\t} else {\n\t\t\t\tL.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);\n\t\t\t}\n return div;\n\t\t};\n\t};\n\n\treturn {\n\t\tgetOnAddLegend: _getOnAddLegend,\n\t\tgetOnAddArrayLegend: _getOnAddArrayLegend,\n\t\tupdateLegend: _updateLegend,\n\t\taddLegendURL: function(mapId, config) {\n\t\t\tvar d = $q.defer();\n\t\t\tif(!isDefined(requestQueue[mapId])) {\n\t\t\t\trequestQueue[mapId] = [];\n\t\t\t}\n\t\t\trequestQueue[mapId].push({c:config,d:d});\n\t\t\tif (requestQueue[mapId].length === 1) {\n\t\t\t\t_execNext(mapId);\n\t\t\t}\n\t\t\treturn d.promise;\n\t\t}\n\t};\n});\n","angular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leafletHelpers) {\n function _getDefaults() {\n return {\n keyboard: true,\n dragging: true,\n worldCopyJump: false,\n doubleClickZoom: true,\n scrollWheelZoom: true,\n tap: true,\n touchZoom: true,\n zoomControl: true,\n zoomsliderControl: false,\n zoomControlPosition: 'topleft',\n attributionControl: true,\n controls: {\n layers: {\n visible: true,\n position: 'topright',\n collapsed: true\n }\n },\n nominatim: {\n server: ' http://nominatim.openstreetmap.org/search'\n },\n crs: L.CRS.EPSG3857,\n tileLayer: '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n tileLayerOptions: {\n attribution: '© OpenStreetMap contributors'\n },\n path: {\n weight: 10,\n opacity: 1,\n color: '#0000ff'\n },\n center: {\n lat: 0,\n lng: 0,\n zoom: 1\n }\n };\n }\n\n var isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n obtainEffectiveMapId = leafletHelpers.obtainEffectiveMapId,\n defaults = {};\n\n // Get the _defaults dictionary, and override the properties defined by the user\n return {\n reset: function () {\n defaults = {};\n },\n getDefaults: function (scopeId) {\n var mapId = obtainEffectiveMapId(defaults, scopeId);\n return defaults[mapId];\n },\n\n getMapCreationDefaults: function (scopeId) {\n var mapId = obtainEffectiveMapId(defaults, scopeId);\n var d = defaults[mapId];\n\n var mapDefaults = {\n maxZoom: d.maxZoom,\n keyboard: d.keyboard,\n dragging: d.dragging,\n zoomControl: d.zoomControl,\n doubleClickZoom: d.doubleClickZoom,\n scrollWheelZoom: d.scrollWheelZoom,\n tap: d.tap,\n touchZoom: d.touchZoom,\n attributionControl: d.attributionControl,\n worldCopyJump: d.worldCopyJump,\n crs: d.crs\n };\n\n if (isDefined(d.minZoom)) {\n mapDefaults.minZoom = d.minZoom;\n }\n\n if (isDefined(d.zoomAnimation)) {\n mapDefaults.zoomAnimation = d.zoomAnimation;\n }\n\n if (isDefined(d.fadeAnimation)) {\n mapDefaults.fadeAnimation = d.fadeAnimation;\n }\n\n if (isDefined(d.markerZoomAnimation)) {\n mapDefaults.markerZoomAnimation = d.markerZoomAnimation;\n }\n\n if (d.map) {\n for (var option in d.map) {\n mapDefaults[option] = d.map[option];\n }\n }\n\n return mapDefaults;\n },\n\n setDefaults: function (userDefaults, scopeId) {\n var newDefaults = _getDefaults();\n\n if (isDefined(userDefaults)) {\n newDefaults.doubleClickZoom = isDefined(userDefaults.doubleClickZoom) ? userDefaults.doubleClickZoom : newDefaults.doubleClickZoom;\n newDefaults.scrollWheelZoom = isDefined(userDefaults.scrollWheelZoom) ? userDefaults.scrollWheelZoom : newDefaults.doubleClickZoom;\n newDefaults.tap = isDefined(userDefaults.tap) ? userDefaults.tap : newDefaults.tap;\n newDefaults.touchZoom = isDefined(userDefaults.touchZoom) ? userDefaults.touchZoom : newDefaults.doubleClickZoom;\n newDefaults.zoomControl = isDefined(userDefaults.zoomControl) ? userDefaults.zoomControl : newDefaults.zoomControl;\n newDefaults.zoomsliderControl = isDefined(userDefaults.zoomsliderControl) ? userDefaults.zoomsliderControl : newDefaults.zoomsliderControl;\n newDefaults.attributionControl = isDefined(userDefaults.attributionControl) ? userDefaults.attributionControl : newDefaults.attributionControl;\n newDefaults.tileLayer = isDefined(userDefaults.tileLayer) ? userDefaults.tileLayer : newDefaults.tileLayer;\n newDefaults.zoomControlPosition = isDefined(userDefaults.zoomControlPosition) ? userDefaults.zoomControlPosition : newDefaults.zoomControlPosition;\n newDefaults.keyboard = isDefined(userDefaults.keyboard) ? userDefaults.keyboard : newDefaults.keyboard;\n newDefaults.dragging = isDefined(userDefaults.dragging) ? userDefaults.dragging : newDefaults.dragging;\n\n if (isDefined(userDefaults.controls)) {\n angular.extend(newDefaults.controls, userDefaults.controls);\n }\n\n if (isObject(userDefaults.crs)) {\n newDefaults.crs = userDefaults.crs;\n } else if (isDefined(L.CRS[userDefaults.crs])) {\n newDefaults.crs = L.CRS[userDefaults.crs];\n }\n\n if (isDefined(userDefaults.center)) {\n angular.copy(userDefaults.center, newDefaults.center);\n }\n\n if (isDefined(userDefaults.tileLayerOptions)) {\n angular.copy(userDefaults.tileLayerOptions, newDefaults.tileLayerOptions);\n }\n\n if (isDefined(userDefaults.maxZoom)) {\n newDefaults.maxZoom = userDefaults.maxZoom;\n }\n\n if (isDefined(userDefaults.minZoom)) {\n newDefaults.minZoom = userDefaults.minZoom;\n }\n\n if (isDefined(userDefaults.zoomAnimation)) {\n newDefaults.zoomAnimation = userDefaults.zoomAnimation;\n }\n\n if (isDefined(userDefaults.fadeAnimation)) {\n newDefaults.fadeAnimation = userDefaults.fadeAnimation;\n }\n\n if (isDefined(userDefaults.markerZoomAnimation)) {\n newDefaults.markerZoomAnimation = userDefaults.markerZoomAnimation;\n }\n\n if (isDefined(userDefaults.worldCopyJump)) {\n newDefaults.worldCopyJump = userDefaults.worldCopyJump;\n }\n\n if (isDefined(userDefaults.map)) {\n newDefaults.map = userDefaults.map;\n }\n\n if (isDefined(userDefaults.path)) {\n newDefaults.path = userDefaults.path;\n }\n }\n\n var mapId = obtainEffectiveMapId(defaults, scopeId);\n defaults[mapId] = newDefaults;\n return newDefaults;\n }\n };\n});\n","angular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootScope, $timeout, leafletHelpers, leafletLogger, $compile, leafletGeoJsonHelpers, leafletWatchHelpers) {\n var isDefined = leafletHelpers.isDefined,\n defaultTo = leafletHelpers.defaultTo,\n MarkerClusterPlugin = leafletHelpers.MarkerClusterPlugin,\n AwesomeMarkersPlugin = leafletHelpers.AwesomeMarkersPlugin,\n VectorMarkersPlugin = leafletHelpers.VectorMarkersPlugin,\n MakiMarkersPlugin = leafletHelpers.MakiMarkersPlugin,\n ExtraMarkersPlugin = leafletHelpers.ExtraMarkersPlugin,\n DomMarkersPlugin = leafletHelpers.DomMarkersPlugin,\n safeApply = leafletHelpers.safeApply,\n Helpers = leafletHelpers,\n isString = leafletHelpers.isString,\n isNumber = leafletHelpers.isNumber,\n isObject = leafletHelpers.isObject,\n groups = {},\n geoHlp = leafletGeoJsonHelpers,\n errorHeader = leafletHelpers.errorHeader,\n maybeWatch = leafletWatchHelpers.maybeWatch,\n $log = leafletLogger;\n\n var _string = function (marker) {\n //this exists since JSON.stringify barfs on cyclic\n var retStr = '';\n ['_icon', '_latlng', '_leaflet_id', '_map', '_shadow'].forEach(function (prop) {\n retStr += prop + ': ' + defaultTo(marker[prop], 'undefined') + ' \\n';\n });\n return '[leafletMarker] : \\n' + retStr;\n };\n var _log = function (marker, useConsole) {\n var logger = useConsole ? console : $log;\n logger.debug(_string(marker));\n };\n\n var createLeafletIcon = function (iconData) {\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'awesomeMarker') {\n if (!AwesomeMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + ' The AwesomeMarkers Plugin is not loaded.');\n }\n\n return new L.AwesomeMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'vectorMarker') {\n if (!VectorMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + ' The VectorMarkers Plugin is not loaded.');\n }\n\n return new L.VectorMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'makiMarker') {\n if (!MakiMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + 'The MakiMarkers Plugin is not loaded.');\n }\n\n return new L.MakiMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'extraMarker') {\n if (!ExtraMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + 'The ExtraMarkers Plugin is not loaded.');\n }\n return new L.ExtraMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'div') {\n return new L.divIcon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'dom') {\n if (!DomMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + 'The DomMarkers Plugin is not loaded.');\n }\n var markerScope = angular.isFunction(iconData.getMarkerScope) ? iconData.getMarkerScope() : $rootScope,\n template = $compile(iconData.template)(markerScope),\n iconDataCopy = angular.copy(iconData);\n iconDataCopy.element = template[0];\n return new L.DomMarkers.icon(iconDataCopy);\n }\n\n // allow for any custom icon to be used... assumes the icon has already been initialized\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'icon') {\n return iconData.icon;\n }\n\n var base64icon = \"data:image/png;base64,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\";\n var base64shadow = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAC5ElEQVRYw+2YW4/TMBCF45S0S1luXZCABy5CgLQgwf//S4BYBLTdJLax0fFqmB07nnQfEGqkIydpVH85M+NLjPe++dcPc4Q8Qh4hj5D/AaQJx6H/4TMwB0PeBNwU7EGQAmAtsNfAzoZkgIa0ZgLMa4Aj6CxIAsjhjOCoL5z7Glg1JAOkaicgvQBXuncwJAWjksLtBTWZe04CnYRktUGdilALppZBOgHGZcBzL6OClABvMSVIzyBjazOgrvACf1ydC5mguqAVg6RhdkSWQFj2uxfaq/BrIZOLEWgZdALIDvcMcZLD8ZbLC9de4yR1sYMi4G20S4Q/PWeJYxTOZn5zJXANZHIxAd4JWhPIloTJZhzMQduM89WQ3MUVAE/RnhAXpTycqys3NZALOBbB7kFrgLesQl2h45Fcj8L1tTSohUwuxhy8H/Qg6K7gIs+3kkaigQCOcyEXCHN07wyQazhrmIulvKMQAwMcmLNqyCVyMAI+BuxSMeTk3OPikLY2J1uE+VHQk6ANrhds+tNARqBeaGc72cK550FP4WhXmFmcMGhTwAR1ifOe3EvPqIegFmF+C8gVy0OfAaWQPMR7gF1OQKqGoBjq90HPMP01BUjPOqGFksC4emE48tWQAH0YmvOgF3DST6xieJgHAWxPAHMuNhrImIdvoNOKNWIOcE+UXE0pYAnkX6uhWsgVXDxHdTfCmrEEmMB2zMFimLVOtiiajxiGWrbU52EeCdyOwPEQD8LqyPH9Ti2kgYMf4OhSKB7qYILbBv3CuVTJ11Y80oaseiMWOONc/Y7kJYe0xL2f0BaiFTxknHO5HaMGMublKwxFGzYdWsBF174H/QDknhTHmHHN39iWFnkZx8lPyM8WHfYELmlLKtgWNmFNzQcC1b47gJ4hL19i7o65dhH0Negbca8vONZoP7doIeOC9zXm8RjuL0Gf4d4OYaU5ljo3GYiqzrWQHfJxA6ALhDpVKv9qYeZA8eM3EhfPSCmpuD0AAAAASUVORK5CYII=\";\n\n if (!isDefined(iconData) || !isDefined(iconData.iconUrl)) {\n return new L.Icon.Default({\n iconUrl: base64icon,\n shadowUrl: base64shadow,\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n shadowSize: [41, 41]\n });\n }\n\n return new L.Icon(iconData);\n };\n\n var _resetMarkerGroup = function (groupName) {\n if (isDefined(groups[groupName])) {\n groups.splice(groupName, 1);\n }\n };\n\n var _resetMarkerGroups = function () {\n groups = {};\n };\n\n var _deleteMarker = function (marker, map, layers) {\n marker.closePopup();\n // There is no easy way to know if a marker is added to a layer, so we search for it\n // if there are overlays\n if (isDefined(layers) && isDefined(layers.overlays)) {\n for (var key in layers.overlays) {\n if (layers.overlays[key] instanceof L.LayerGroup || layers.overlays[key] instanceof L.FeatureGroup) {\n if (layers.overlays[key].hasLayer(marker)) {\n layers.overlays[key].removeLayer(marker);\n return;\n }\n }\n }\n }\n\n if (isDefined(groups)) {\n for (var groupKey in groups) {\n if (groups[groupKey].hasLayer(marker)) {\n groups[groupKey].removeLayer(marker);\n }\n }\n }\n\n if (map.hasLayer(marker)) {\n map.removeLayer(marker);\n }\n };\n\n var adjustPopupPan = function(marker, map) {\n var containerHeight = marker._popup._container.offsetHeight,\n layerPos = new L.Point(marker._popup._containerLeft, -containerHeight - marker._popup._containerBottom),\n containerPos = map.layerPointToContainerPoint(layerPos);\n if (containerPos !== null) {\n marker._popup._adjustPan();\n }\n };\n\n var compilePopup = function(marker, markerScope) {\n $compile(marker._popup._contentNode)(markerScope);\n };\n\n var updatePopup = function (marker, markerScope, map) {\n //The innerText should be more than 1 once angular has compiled.\n //We need to keep trying until angular has compiled before we _updateLayout and _updatePosition\n //This should take care of any scenario , eg ngincludes, whatever.\n //Is there a better way to check for this?\n var innerText = marker._popup._contentNode.innerText || marker._popup._contentNode.textContent;\n if (innerText.length < 1) {\n $timeout(function () {\n updatePopup(marker, markerScope, map);\n });\n }\n\n //cause a reflow - this is also very important - if we don't do this then the widths are from before $compile\n var reflow = marker._popup._contentNode.offsetWidth;\n\n marker._popup._updateLayout();\n marker._popup._updatePosition();\n\n if (marker._popup.options.autoPan) {\n adjustPopupPan(marker, map);\n }\n\n //using / returning reflow so jshint doesn't moan\n return reflow;\n };\n\n var _manageOpenPopup = function (marker, markerData, map) {\n // The marker may provide a scope returning function used to compile the message\n // default to $rootScope otherwise\n var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope,\n compileMessage = isDefined(markerData.compileMessage) ? markerData.compileMessage : true;\n\n if (compileMessage) {\n if (!isDefined(marker._popup) || !isDefined(marker._popup._contentNode)) {\n $log.error(errorHeader + 'Popup is invalid or does not have any content.');\n return false;\n }\n\n compilePopup(marker, markerScope);\n updatePopup(marker, markerData, map);\n }\n };\n\n\n var _manageOpenLabel = function (marker, markerData) {\n var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope,\n labelScope = angular.isFunction(markerData.getLabelScope) ? markerData.getLabelScope() : markerScope,\n compileMessage = isDefined(markerData.compileMessage) ? markerData.compileMessage : true;\n\n if (Helpers.LabelPlugin.isLoaded() && isDefined(markerData.label)) {\n if (isDefined(markerData.label.options) && markerData.label.options.noHide === true) {\n marker.showLabel();\n }\n if (compileMessage && isDefined(marker.label)) {\n $compile(marker.label._container)(labelScope);\n }\n }\n };\n\n var _updateMarker = function (markerData, oldMarkerData, marker, name, leafletScope, layers, map) {\n if (!isDefined(oldMarkerData)) {\n return;\n }\n\n // Update the lat-lng property (always present in marker properties)\n if (!geoHlp.validateCoords(markerData)) {\n $log.warn('There are problems with lat-lng data, please verify your marker model');\n _deleteMarker(marker, map, layers);\n return;\n }\n\n // watch is being initialized if old and new object is the same\n var isInitializing = markerData === oldMarkerData;\n\n // Update marker rotation\n if (isDefined(markerData.iconAngle) && oldMarkerData.iconAngle !== markerData.iconAngle) {\n marker.setIconAngle(markerData.iconAngle);\n }\n\n // It is possible that the layer has been removed or the layer marker does not exist\n // Update the layer group if present or move it to the map if not\n if (!isString(markerData.layer)) {\n // There is no layer information, we move the marker to the map if it was in a layer group\n if (isString(oldMarkerData.layer)) {\n // Remove from the layer group that is supposed to be\n if (isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) {\n layers.overlays[oldMarkerData.layer].removeLayer(marker);\n marker.closePopup();\n }\n // Test if it is not on the map and add it\n if (!map.hasLayer(marker)) {\n map.addLayer(marker);\n }\n }\n }\n\n if ((isNumber(markerData.opacity) || isNumber(parseFloat(markerData.opacity))) && markerData.opacity !== oldMarkerData.opacity) {\n // There was a different opacity so we update it\n marker.setOpacity(markerData.opacity);\n }\n\n if (isString(markerData.layer) && oldMarkerData.layer !== markerData.layer) {\n // If it was on a layer group we have to remove it\n if (isString(oldMarkerData.layer) && isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) {\n layers.overlays[oldMarkerData.layer].removeLayer(marker);\n }\n marker.closePopup();\n\n // Remove it from the map in case the new layer is hidden or there is an error in the new layer\n if (map.hasLayer(marker)) {\n map.removeLayer(marker);\n }\n\n // The markerData.layer is defined so we add the marker to the layer if it is different from the old data\n if (!isDefined(layers.overlays[markerData.layer])) {\n $log.error(errorHeader + 'You must use a name of an existing layer');\n return;\n }\n // Is a group layer?\n var layerGroup = layers.overlays[markerData.layer];\n if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) {\n $log.error(errorHeader + 'A marker can only be added to a layer of type \"group\" or \"featureGroup\"');\n return;\n }\n // The marker goes to a correct layer group, so first of all we add it\n layerGroup.addLayer(marker);\n // The marker is automatically added to the map depending on the visibility\n // of the layer, so we only have to open the popup if the marker is in the map\n if (map.hasLayer(marker) && markerData.focus === true) {\n marker.openPopup();\n }\n }\n\n // Update the draggable property\n if (markerData.draggable !== true && oldMarkerData.draggable === true && (isDefined(marker.dragging))) {\n marker.dragging.disable();\n }\n\n if (markerData.draggable === true && oldMarkerData.draggable !== true) {\n // The markerData.draggable property must be true so we update if there wasn't a previous value or it wasn't true\n if (marker.dragging) {\n marker.dragging.enable();\n } else {\n if (L.Handler.MarkerDrag) {\n marker.dragging = new L.Handler.MarkerDrag(marker);\n marker.options.draggable = true;\n marker.dragging.enable();\n }\n }\n }\n\n // Update the icon property\n if (!isObject(markerData.icon)) {\n // If there is no icon property or it's not an object\n if (isObject(oldMarkerData.icon)) {\n // If there was an icon before restore to the default\n marker.setIcon(createLeafletIcon());\n marker.closePopup();\n marker.unbindPopup();\n if (isString(markerData.message)) {\n marker.bindPopup(markerData.message, markerData.popupOptions);\n }\n }\n }\n\n if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) {\n var dragG = false;\n if (marker.dragging) {\n dragG = marker.dragging.enabled();\n }\n marker.setIcon(createLeafletIcon(markerData.icon));\n if (dragG) {\n marker.dragging.enable();\n }\n marker.closePopup();\n marker.unbindPopup();\n if (isString(markerData.message)) {\n marker.bindPopup(markerData.message, markerData.popupOptions);\n // if marker has been already focused, reopen popup\n if (map.hasLayer(marker) && markerData.focus === true) {\n marker.openPopup();\n }\n }\n }\n\n // Update the Popup message property\n if (!isString(markerData.message) && isString(oldMarkerData.message)) {\n marker.closePopup();\n marker.unbindPopup();\n }\n\n // Update the label content or bind a new label if the old one has been removed.\n if (Helpers.LabelPlugin.isLoaded()) {\n if (isDefined(markerData.label) && isDefined(markerData.label.message)) {\n if ('label' in oldMarkerData && 'message' in oldMarkerData.label && !angular.equals(markerData.label.message, oldMarkerData.label.message)) {\n marker.updateLabelContent(markerData.label.message);\n } else if (!angular.isFunction(marker.getLabel) || angular.isFunction(marker.getLabel) && !isDefined(marker.getLabel())) {\n marker.bindLabel(markerData.label.message, markerData.label.options);\n _manageOpenLabel(marker, markerData);\n } else {\n _manageOpenLabel(marker, markerData);\n }\n } else if (!('label' in markerData && !('message' in markerData.label))) {\n if (angular.isFunction(marker.unbindLabel)) {\n marker.unbindLabel();\n }\n }\n }\n\n // There is some text in the popup, so we must show the text or update existing\n if (isString(markerData.message) && !isString(oldMarkerData.message)) {\n // There was no message before so we create it\n marker.bindPopup(markerData.message, markerData.popupOptions);\n }\n\n if (isString(markerData.message) && isString(oldMarkerData.message) && markerData.message !== oldMarkerData.message) {\n // There was a different previous message so we update it\n marker.setPopupContent(markerData.message);\n }\n\n // Update the focus property\n var updatedFocus = false;\n if (markerData.focus !== true && oldMarkerData.focus === true) {\n // If there was a focus property and was true we turn it off\n marker.closePopup();\n updatedFocus = true;\n }\n\n // The markerData.focus property must be true so we update if there wasn't a previous value or it wasn't true\n if (markerData.focus === true && ( !isDefined(oldMarkerData.focus) || oldMarkerData.focus === false) || (isInitializing && markerData.focus === true)) {\n // Reopen the popup when focus is still true\n marker.openPopup();\n updatedFocus = true;\n }\n\n // zIndexOffset adjustment\n if (oldMarkerData.zIndexOffset !== markerData.zIndexOffset) {\n marker.setZIndexOffset(markerData.zIndexOffset);\n }\n\n var markerLatLng = marker.getLatLng();\n var isCluster = (isString(markerData.layer) && Helpers.MarkerClusterPlugin.is(layers.overlays[markerData.layer]));\n // If the marker is in a cluster it has to be removed and added to the layer when the location is changed\n if (isCluster) {\n // The focus has changed even by a user click or programatically\n if (updatedFocus) {\n // We only have to update the location if it was changed programatically, because it was\n // changed by a user drag the marker data has already been updated by the internal event\n // listened by the directive\n if ((markerData.lat !== oldMarkerData.lat) || (markerData.lng !== oldMarkerData.lng)) {\n layers.overlays[markerData.layer].removeLayer(marker);\n marker.setLatLng([markerData.lat, markerData.lng]);\n layers.overlays[markerData.layer].addLayer(marker);\n }\n } else {\n // The marker has possibly moved. It can be moved by a user drag (marker location and data are equal but old\n // data is diferent) or programatically (marker location and data are diferent)\n if ((markerLatLng.lat !== markerData.lat) || (markerLatLng.lng !== markerData.lng)) {\n // The marker was moved by a user drag\n layers.overlays[markerData.layer].removeLayer(marker);\n marker.setLatLng([markerData.lat, markerData.lng]);\n layers.overlays[markerData.layer].addLayer(marker);\n } else if ((markerData.lat !== oldMarkerData.lat) || (markerData.lng !== oldMarkerData.lng)) {\n // The marker was moved programatically\n layers.overlays[markerData.layer].removeLayer(marker);\n marker.setLatLng([markerData.lat, markerData.lng]);\n layers.overlays[markerData.layer].addLayer(marker);\n } else if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) {\n layers.overlays[markerData.layer].removeLayer(marker);\n layers.overlays[markerData.layer].addLayer(marker);\n }\n }\n } else if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) {\n marker.setLatLng([markerData.lat, markerData.lng]);\n }\n };\n\n var _getLayerModels = function (models, layerName){\n if (!isDefined(models))\n return;\n if (layerName)\n return models[layerName];\n return models;\n };\n\n var _getModelFromModels = function (models, id, layerName){\n if(!isDefined(models))\n return;\n if(!id){\n $log.error(errorHeader + 'marker id missing in getMarker');\n return;\n }\n if(layerName)\n return models[layerName][id];\n\n return models[id];\n };\n return {\n resetMarkerGroup: _resetMarkerGroup,\n\n resetMarkerGroups: _resetMarkerGroups,\n\n deleteMarker: _deleteMarker,\n\n manageOpenPopup: _manageOpenPopup,\n\n manageOpenLabel: _manageOpenLabel,\n\n createMarker: function (markerData) {\n if (!isDefined(markerData) || !geoHlp.validateCoords(markerData)) {\n $log.error(errorHeader + 'The marker definition is not valid.');\n return;\n }\n var coords = geoHlp.getCoords(markerData);\n\n if (!isDefined(coords)) {\n $log.error(errorHeader + 'Unable to get coordinates from markerData.');\n return;\n }\n\n var markerOptions = {\n icon: createLeafletIcon(markerData.icon),\n title: isDefined(markerData.title) ? markerData.title : '',\n draggable: isDefined(markerData.draggable) ? markerData.draggable : false,\n clickable: isDefined(markerData.clickable) ? markerData.clickable : true,\n riseOnHover: isDefined(markerData.riseOnHover) ? markerData.riseOnHover : false,\n zIndexOffset: isDefined(markerData.zIndexOffset) ? markerData.zIndexOffset : 0,\n iconAngle: isDefined(markerData.iconAngle) ? markerData.iconAngle : 0\n };\n // Add any other options not added above to markerOptions\n for (var markerDatum in markerData) {\n if (markerData.hasOwnProperty(markerDatum) && !markerOptions.hasOwnProperty(markerDatum)) {\n markerOptions[markerDatum] = markerData[markerDatum];\n }\n }\n\n var marker = new L.marker(coords, markerOptions);\n\n if (!isString(markerData.message)) {\n marker.unbindPopup();\n }\n\n return marker;\n },\n\n addMarkerToGroup: function (marker, groupName, groupOptions, map) {\n if (!isString(groupName)) {\n $log.error(errorHeader + 'The marker group you have specified is invalid.');\n return;\n }\n\n if (!MarkerClusterPlugin.isLoaded()) {\n $log.error(errorHeader + \"The MarkerCluster plugin is not loaded.\");\n return;\n }\n if (!isDefined(groups[groupName])) {\n groups[groupName] = new L.MarkerClusterGroup(groupOptions);\n map.addLayer(groups[groupName]);\n }\n groups[groupName].addLayer(marker);\n },\n\n listenMarkerEvents: function (marker, markerData, leafletScope, watchType, map) {\n marker.on(\"popupopen\", function (/* event */) {\n safeApply(leafletScope, function () {\n if (isDefined(marker._popup) || isDefined(marker._popup._contentNode)) {\n markerData.focus = true;\n _manageOpenPopup(marker, markerData, map);//needed since markerData is now a copy\n }\n });\n });\n marker.on(\"popupclose\", function (/* event */) {\n safeApply(leafletScope, function () {\n markerData.focus = false;\n });\n });\n marker.on(\"add\", function (/* event */) {\n safeApply(leafletScope, function () {\n if ('label' in markerData)\n _manageOpenLabel(marker, markerData);\n });\n });\n },\n\n updateMarker: _updateMarker,\n\n addMarkerWatcher: function (marker, name, leafletScope, layers, map, watchOptions) {\n var markerWatchPath = Helpers.getObjectArrayPath(\"markers.\" + name);\n\n maybeWatch(leafletScope, markerWatchPath, watchOptions, function(markerData, oldMarkerData, clearWatch){\n if (!isDefined(markerData)) {\n _deleteMarker(marker, map, layers);\n clearWatch();\n return;\n }\n _updateMarker(markerData, oldMarkerData, marker, name, leafletScope, layers, map);\n });\n },\n string: _string,\n log: _log,\n getModelFromModels : _getModelFromModels,\n getLayerModels : _getLayerModels\n };\n});\n","angular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope, leafletLogger, leafletHelpers) {\n var isDefined = leafletHelpers.isDefined,\n isArray = leafletHelpers.isArray,\n isNumber = leafletHelpers.isNumber,\n isValidPoint = leafletHelpers.isValidPoint,\n $log = leafletLogger;\n \n var availableOptions = [\n // Path options\n 'stroke', 'weight', 'color', 'opacity',\n 'fill', 'fillColor', 'fillOpacity',\n 'dashArray', 'lineCap', 'lineJoin', 'clickable',\n 'pointerEvents', 'className',\n\n // Polyline options\n 'smoothFactor', 'noClip'\n ];\n function _convertToLeafletLatLngs(latlngs) {\n return latlngs.filter(function(latlng) {\n return isValidPoint(latlng);\n }).map(function (latlng) {\n return _convertToLeafletLatLng(latlng);\n });\n }\n\n function _convertToLeafletLatLng(latlng) {\n if (isArray(latlng)) {\n return new L.LatLng(latlng[0], latlng[1]);\n } else {\n return new L.LatLng(latlng.lat, latlng.lng);\n }\n }\n\n function _convertToLeafletMultiLatLngs(paths) {\n return paths.map(function(latlngs) {\n return _convertToLeafletLatLngs(latlngs);\n });\n }\n\n function _getOptions(path, defaults) {\n var options = {};\n for (var i = 0; i < availableOptions.length; i++) {\n var optionName = availableOptions[i];\n\n if (isDefined(path[optionName])) {\n options[optionName] = path[optionName];\n } else if (isDefined(defaults.path[optionName])) {\n options[optionName] = defaults.path[optionName];\n }\n }\n\n return options;\n }\n\n var _updatePathOptions = function (path, data) {\n var updatedStyle = {};\n for (var i = 0; i < availableOptions.length; i++) {\n var optionName = availableOptions[i];\n if (isDefined(data[optionName])) {\n updatedStyle[optionName] = data[optionName];\n }\n }\n path.setStyle(data);\n };\n\n var _isValidPolyline = function(latlngs) {\n if (!isArray(latlngs)) {\n return false;\n }\n for (var i = 0; i < latlngs.length; i++) {\n var point = latlngs[i];\n if (!isValidPoint(point)) {\n return false;\n }\n }\n return true;\n };\n\n var pathTypes = {\n polyline: {\n isValid: function(pathData) {\n var latlngs = pathData.latlngs;\n return _isValidPolyline(latlngs);\n },\n createPath: function(options) {\n return new L.Polyline([], options);\n },\n setPath: function(path, data) {\n path.setLatLngs(_convertToLeafletLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n multiPolyline: {\n isValid: function(pathData) {\n var latlngs = pathData.latlngs;\n if (!isArray(latlngs)) {\n return false;\n }\n\n for (var i in latlngs) {\n var polyline = latlngs[i];\n if (!_isValidPolyline(polyline)) {\n return false;\n }\n }\n\n return true;\n },\n createPath: function(options) {\n return new L.multiPolyline([[[0,0],[1,1]]], options);\n },\n setPath: function(path, data) {\n path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n } ,\n polygon: {\n isValid: function(pathData) {\n var latlngs = pathData.latlngs;\n return _isValidPolyline(latlngs);\n },\n createPath: function(options) {\n return new L.Polygon([], options);\n },\n setPath: function(path, data) {\n path.setLatLngs(_convertToLeafletLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n multiPolygon: {\n isValid: function(pathData) {\n var latlngs = pathData.latlngs;\n\n if (!isArray(latlngs)) {\n return false;\n }\n\n for (var i in latlngs) {\n var polyline = latlngs[i];\n if (!_isValidPolyline(polyline)) {\n return false;\n }\n }\n\n return true;\n },\n createPath: function(options) {\n return new L.MultiPolygon([[[0,0],[1,1],[0,1]]], options);\n },\n setPath: function(path, data) {\n path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n rectangle: {\n isValid: function(pathData) {\n var latlngs = pathData.latlngs;\n\n if (!isArray(latlngs) || latlngs.length !== 2) {\n return false;\n }\n\n for (var i in latlngs) {\n var point = latlngs[i];\n if (!isValidPoint(point)) {\n return false;\n }\n }\n\n return true;\n },\n createPath: function(options) {\n return new L.Rectangle([[0,0],[1,1]], options);\n },\n setPath: function(path, data) {\n path.setBounds(new L.LatLngBounds(_convertToLeafletLatLngs(data.latlngs)));\n _updatePathOptions(path, data);\n }\n },\n circle: {\n isValid: function(pathData) {\n var point= pathData.latlngs;\n return isValidPoint(point) && isNumber(pathData.radius);\n },\n createPath: function(options) {\n return new L.Circle([0,0], 1, options);\n },\n setPath: function(path, data) {\n path.setLatLng(_convertToLeafletLatLng(data.latlngs));\n if (isDefined(data.radius)) {\n path.setRadius(data.radius);\n }\n _updatePathOptions(path, data);\n }\n },\n circleMarker: {\n isValid: function(pathData) {\n var point= pathData.latlngs;\n return isValidPoint(point) && isNumber(pathData.radius);\n },\n createPath: function(options) {\n return new L.CircleMarker([0,0], options);\n },\n setPath: function(path, data) {\n path.setLatLng(_convertToLeafletLatLng(data.latlngs));\n if (isDefined(data.radius)) {\n path.setRadius(data.radius);\n }\n _updatePathOptions(path, data);\n }\n }\n };\n\n var _getPathData = function(path) {\n var pathData = {};\n if (path.latlngs) {\n pathData.latlngs = path.latlngs;\n }\n\n if (path.radius) {\n pathData.radius = path.radius;\n }\n\n return pathData;\n };\n\n return {\n setPathOptions: function(leafletPath, pathType, data) {\n if(!isDefined(pathType)) {\n pathType = \"polyline\";\n }\n pathTypes[pathType].setPath(leafletPath, data);\n },\n createPath: function(name, path, defaults) {\n if(!isDefined(path.type)) {\n path.type = \"polyline\";\n }\n var options = _getOptions(path, defaults);\n var pathData = _getPathData(path);\n\n if (!pathTypes[path.type].isValid(pathData)) {\n $log.error(\"[AngularJS - Leaflet] Invalid data passed to the \" + path.type + \" path\");\n return;\n }\n\n return pathTypes[path.type].createPath(options);\n }\n };\n});\n","angular.module('ui-leaflet')\n.service('leafletWatchHelpers', function (){\n\n var _maybe = function(scope, watchFunctionName, thingToWatchStr, watchOptions, initCb){\n var unWatch = scope[watchFunctionName](thingToWatchStr, function(newValue, oldValue) {\n //make the unWatch function available to the callback as well.\n initCb(newValue, oldValue, unWatch);\n if(watchOptions.type === null)\n unWatch();\n }, watchOptions.type === 'watchDeep');\n\n return unWatch;\n };\n\n /*\n @name: maybeWatch\n @description: Utility to watch something once or forever.\n @returns unWatch function\n @param watchOptions - This object is used to determine the type of\n watch used.\n */\n var _maybeWatch = function(scope, thingToWatchStr, watchOptions, initCb){\n var watchMethod;\n\n if(watchOptions.type === 'watchCollection') {\n watchMethod = '$watchCollection';\n }\n else {\n watchMethod = '$watch';\n }\n\n\n return _maybe(scope, watchMethod, thingToWatchStr, watchOptions, initCb);\n };\n\n return {\n maybeWatch: _maybeWatch\n };\n});\n","angular.module('ui-leaflet').service('leafletLogger', function(nemSimpleLogger) {\n return nemSimpleLogger.spawn();\n});\n","angular.module('ui-leaflet').factory('nominatimService', function ($q, $http, leafletHelpers, leafletMapDefaults) {\n var isDefined = leafletHelpers.isDefined;\n\n return {\n query: function(address, mapId) {\n var defaults = leafletMapDefaults.getDefaults(mapId);\n var url = defaults.nominatim.server;\n var df = $q.defer();\n\n $http.get(url, { params: { format: 'json', limit: 1, q: address } }).success(function(data) {\n if (data.length > 0 && isDefined(data[0].boundingbox)) {\n df.resolve(data[0]);\n } else {\n df.reject('[Nominatim] Invalid address');\n }\n });\n\n return df.promise;\n }\n };\n});\n","angular.module('ui-leaflet').directive('bounds', function (leafletLogger, $timeout, $http, leafletHelpers, nominatimService, leafletBoundsHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: [ 'leaflet' ],\n\n link: function(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined;\n var createLeafletBounds = leafletBoundsHelpers.createLeafletBounds;\n var leafletScope = controller[0].getLeafletScope();\n var mapController = controller[0];\n var errorHeader = leafletHelpers.errorHeader + ' [Bounds] ';\n\n var emptyBounds = function(bounds) {\n return (bounds._southWest.lat === 0 && bounds._southWest.lng === 0 &&\n bounds._northEast.lat === 0 && bounds._northEast.lng === 0);\n };\n\n mapController.getMap().then(function (map) {\n leafletScope.$on('boundsChanged', function (event) {\n var scope = event.currentScope;\n var bounds = map.getBounds();\n\n if (emptyBounds(bounds) || scope.settingBoundsFromScope) {\n return;\n }\n scope.settingBoundsFromLeaflet = true;\n var newScopeBounds = {\n northEast: {\n lat: bounds._northEast.lat,\n lng: bounds._northEast.lng\n },\n southWest: {\n lat: bounds._southWest.lat,\n lng: bounds._southWest.lng\n },\n options: bounds.options\n };\n if (!angular.equals(scope.bounds, newScopeBounds)) {\n scope.bounds = newScopeBounds;\n }\n $timeout( function() {\n scope.settingBoundsFromLeaflet = false;\n });\n });\n\n var lastNominatimQuery;\n leafletScope.$watch('bounds', function (bounds) {\n if (scope.settingBoundsFromLeaflet)\n return;\n if (isDefined(bounds.address) && bounds.address !== lastNominatimQuery) {\n scope.settingBoundsFromScope = true;\n nominatimService.query(bounds.address, attrs.id).then(function(data) {\n var b = data.boundingbox;\n var newBounds = [ [ b[0], b[2]], [ b[1], b[3]] ];\n map.fitBounds(newBounds);\n }, function(errMsg) {\n $log.error(errorHeader + ' ' + errMsg + '.');\n });\n lastNominatimQuery = bounds.address;\n $timeout( function() {\n scope.settingBoundsFromScope = false;\n });\n return;\n }\n\n var leafletBounds = createLeafletBounds(bounds);\n if (leafletBounds && !map.getBounds().equals(leafletBounds)) {\n scope.settingBoundsFromScope = true;\n map.fitBounds(leafletBounds, bounds.options);\n $timeout( function() {\n scope.settingBoundsFromScope = false;\n });\n }\n }, true);\n });\n }\n };\n});\n","var centerDirectiveTypes = ['center', 'lfCenter'],\n centerDirectives = {};\n\ncenterDirectiveTypes.forEach(function(directiveName) {\n centerDirectives[directiveName] = ['leafletLogger', '$q', '$location', '$timeout', 'leafletMapDefaults', 'leafletHelpers',\n 'leafletBoundsHelpers', 'leafletMapEvents',\n function(leafletLogger, $q, $location, $timeout, leafletMapDefaults, leafletHelpers,\n leafletBoundsHelpers, leafletMapEvents) {\n\n var isDefined = leafletHelpers.isDefined,\n isNumber = leafletHelpers.isNumber,\n isSameCenterOnMap = leafletHelpers.isSameCenterOnMap,\n safeApply = leafletHelpers.safeApply,\n isValidCenter = leafletHelpers.isValidCenter,\n isValidBounds = leafletBoundsHelpers.isValidBounds,\n isUndefinedOrEmpty = leafletHelpers.isUndefinedOrEmpty,\n errorHeader = leafletHelpers.errorHeader,\n $log = leafletLogger;\n\n var shouldInitializeMapWithBounds = function(bounds, center) {\n return isDefined(bounds) && isValidBounds(bounds) && isUndefinedOrEmpty(center);\n };\n\n var _leafletCenter;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n controller: function() {\n _leafletCenter = $q.defer();\n this.getCenter = function() {\n return _leafletCenter.promise;\n };\n },\n link: function(scope, element, attrs, controller) {\n var leafletScope = controller.getLeafletScope(),\n centerModel = leafletScope[directiveName];\n\n controller.getMap().then(function(map) {\n var defaults = leafletMapDefaults.getDefaults(attrs.id);\n\n if (attrs[directiveName].search(\"-\") !== -1) {\n $log.error(errorHeader + ' The \"center\" variable can\\'t use a \"-\" on its key name: \"' + attrs[directiveName] + '\".');\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n return;\n } else if (shouldInitializeMapWithBounds(leafletScope.bounds, centerModel)) {\n map.fitBounds(leafletBoundsHelpers.createLeafletBounds(leafletScope.bounds), leafletScope.bounds.options);\n centerModel = map.getCenter();\n safeApply(leafletScope, function(scope) {\n angular.extend(scope[directiveName], {\n lat: map.getCenter().lat,\n lng: map.getCenter().lng,\n zoom: map.getZoom(),\n autoDiscover: false\n });\n });\n safeApply(leafletScope, function(scope) {\n var mapBounds = map.getBounds();\n scope.bounds = {\n northEast: {\n lat: mapBounds._northEast.lat,\n lng: mapBounds._northEast.lng\n },\n southWest: {\n lat: mapBounds._southWest.lat,\n lng: mapBounds._southWest.lng\n }\n };\n });\n } else if (!isDefined(centerModel)) {\n $log.error(errorHeader + ' The \"center\" property is not defined in the main scope');\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n return;\n } else if (!(isDefined(centerModel.lat) && isDefined(centerModel.lng)) && !isDefined(centerModel.autoDiscover)) {\n angular.copy(defaults.center, centerModel);\n }\n\n var urlCenterHash, mapReady;\n if (attrs.urlHashCenter === \"yes\") {\n var extractCenterFromUrl = function() {\n var search = $location.search();\n var centerParam;\n if (isDefined(search.c)) {\n var cParam = search.c.split(\":\");\n if (cParam.length === 3) {\n centerParam = {\n lat: parseFloat(cParam[0]),\n lng: parseFloat(cParam[1]),\n zoom: parseInt(cParam[2], 10)\n };\n }\n }\n return centerParam;\n };\n urlCenterHash = extractCenterFromUrl();\n\n leafletScope.$on('$locationChangeSuccess', function(event) {\n var scope = event.currentScope;\n //$log.debug(\"updated location...\");\n var urlCenter = extractCenterFromUrl();\n if (isDefined(urlCenter) && !isSameCenterOnMap(urlCenter, map)) {\n //$log.debug(\"updating center model...\", urlCenter);\n angular.extend(scope[directiveName], {\n lat: urlCenter.lat,\n lng: urlCenter.lng,\n zoom: urlCenter.zoom\n });\n }\n });\n }\n\n leafletScope.$watch(directiveName, function(center) {\n if (leafletScope.settingCenterFromLeaflet)\n return;\n //$log.debug(\"updated center model...\");\n // The center from the URL has priority\n if (isDefined(urlCenterHash)) {\n angular.copy(urlCenterHash, center);\n urlCenterHash = undefined;\n }\n\n if (!isValidCenter(center) && center.autoDiscover !== true) {\n $log.warn(errorHeader + \" invalid 'center'\");\n //map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n return;\n }\n\n if (center.autoDiscover === true) {\n if (!isNumber(center.zoom)) {\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n }\n if (isNumber(center.zoom) && center.zoom > defaults.center.zoom) {\n map.locate({\n setView: true,\n maxZoom: center.zoom\n });\n } else if (isDefined(defaults.maxZoom)) {\n map.locate({\n setView: true,\n maxZoom: defaults.maxZoom\n });\n } else {\n map.locate({\n setView: true\n });\n }\n return;\n }\n\n if (mapReady && isSameCenterOnMap(center, map)) {\n //$log.debug(\"no need to update map again.\");\n return;\n }\n\n //$log.debug(\"updating map center...\", center);\n leafletScope.settingCenterFromScope = true;\n map.setView([center.lat, center.lng], center.zoom);\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n $timeout(function() {\n leafletScope.settingCenterFromScope = false;\n //$log.debug(\"allow center scope updates\");\n });\n }, true);\n\n map.whenReady(function() {\n mapReady = true;\n });\n\n map.on('moveend', function( /* event */ ) {\n // Resolve the center after the first map position\n _leafletCenter.resolve();\n leafletMapEvents.notifyCenterUrlHashChanged(leafletScope, map, attrs, $location.search());\n //$log.debug(\"updated center on map...\");\n if (isSameCenterOnMap(centerModel, map) || leafletScope.settingCenterFromScope) {\n //$log.debug(\"same center in model, no need to update again.\");\n return;\n }\n leafletScope.settingCenterFromLeaflet = true;\n safeApply(leafletScope, function(scope) {\n if (!leafletScope.settingCenterFromScope) {\n //$log.debug(\"updating center model...\", map.getCenter(), map.getZoom());\n angular.extend(scope[directiveName], {\n lat: map.getCenter().lat,\n lng: map.getCenter().lng,\n zoom: map.getZoom(),\n autoDiscover: false\n });\n }\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n $timeout(function() {\n leafletScope.settingCenterFromLeaflet = false;\n });\n });\n });\n\n if (centerModel.autoDiscover === true) {\n map.on('locationerror', function() {\n $log.warn(errorHeader + \" The Geolocation API is unauthorized on this page.\");\n if (isValidCenter(centerModel)) {\n map.setView([centerModel.lat, centerModel.lng], centerModel.zoom);\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n } else {\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n }\n });\n }\n });\n }\n };\n }\n ];\n});\n\ncenterDirectiveTypes.forEach(function(dirType){\n angular.module('ui-leaflet').directive(dirType, centerDirectives[dirType]);\n});\n","angular.module('ui-leaflet').directive('controls', function (leafletLogger, leafletHelpers, leafletControlHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: '?^leaflet',\n\n link: function(scope, element, attrs, controller) {\n if(!controller) {\n return;\n }\n\n var createControl = leafletControlHelpers.createControl;\n var isValidControlType = leafletControlHelpers.isValidControlType;\n var leafletScope = controller.getLeafletScope();\n var isDefined = leafletHelpers.isDefined;\n var isArray = leafletHelpers.isArray;\n var leafletControls = {};\n var errorHeader = leafletHelpers.errorHeader + ' [Controls] ';\n\n controller.getMap().then(function(map) {\n\n leafletScope.$watchCollection('controls', function(newControls) {\n\n // Delete controls from the array\n for (var name in leafletControls) {\n if (!isDefined(newControls[name])) {\n if (map.hasControl(leafletControls[name])) {\n map.removeControl(leafletControls[name]);\n }\n delete leafletControls[name];\n }\n }\n\n for (var newName in newControls) {\n var control;\n\n var controlType = isDefined(newControls[newName].type) ? newControls[newName].type : newName;\n\n if (!isValidControlType(controlType)) {\n $log.error(errorHeader + ' Invalid control type: ' + controlType + '.');\n return;\n }\n\n if (controlType !== 'custom') {\n control = createControl(controlType, newControls[newName]);\n map.addControl(control);\n leafletControls[newName] = control;\n } else {\n var customControlValue = newControls[newName];\n if (isArray(customControlValue)) {\n for (var i in customControlValue) {\n var customControl = customControlValue[i];\n map.addControl(customControl);\n leafletControls[newName] = !isDefined(leafletControls[newName]) ? [customControl] : leafletControls[newName].concat([customControl]);\n }\n } else {\n map.addControl(customControlValue);\n leafletControls[newName] = customControlValue;\n }\n }\n }\n\n });\n\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive(\"decorations\", function(leafletLogger, leafletHelpers) {\n\tvar $log = leafletLogger;\n\treturn {\n\t\trestrict: \"A\",\n\t\tscope: false,\n\t\treplace: false,\n\t\trequire: 'leaflet',\n\n\t\tlink: function(scope, element, attrs, controller) {\n\t\t\tvar leafletScope = controller.getLeafletScope(),\n\t\t\t\tPolylineDecoratorPlugin = leafletHelpers.PolylineDecoratorPlugin,\n\t\t\t\tisDefined = leafletHelpers.isDefined,\n\t\t\t\tleafletDecorations = {};\n\n\t\t\t/* Creates an \"empty\" decoration with a set of coordinates, but no pattern. */\n\t\t\tfunction createDecoration(options) {\n\t\t\t\tif (isDefined(options) && isDefined(options.coordinates)) {\n\t\t\t\t\tif (!PolylineDecoratorPlugin.isLoaded()) {\n\t\t\t\t\t\t$log.error('[AngularJS - Leaflet] The PolylineDecorator Plugin is not loaded.');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn L.polylineDecorator(options.coordinates);\n\t\t\t}\n\n\t\t\t/* Updates the path and the patterns for the provided decoration, and returns the decoration. */\n\t\t\tfunction setDecorationOptions(decoration, options) {\n\t\t\t\tif (isDefined(decoration) && isDefined(options)) {\n\t\t\t\t\tif (isDefined(options.coordinates) && isDefined(options.patterns)) {\n\t\t\t\t\t\tdecoration.setPaths(options.coordinates);\n\t\t\t\t\t\tdecoration.setPatterns(options.patterns);\n\t\t\t\t\t\treturn decoration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontroller.getMap().then(function(map) {\n\t\t\t\tleafletScope.$watch(\"decorations\", function(newDecorations) {\n\t\t\t\t\tfor (var name in leafletDecorations) {\n\t\t\t\t\t\tif (!isDefined(newDecorations[name]) || !angular.equals(newDecorations[name], leafletDecorations)) {\n\t\t\t\t\t\t\tmap.removeLayer(leafletDecorations[name]);\n\t\t\t\t\t\t\tdelete leafletDecorations[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var newName in newDecorations) {\n\t\t\t\t\t\tvar decorationData = newDecorations[newName],\n\t\t\t\t\t\t\tnewDecoration = createDecoration(decorationData);\n\n\t\t\t\t\t\tif (isDefined(newDecoration)) {\n\t\t\t\t\t\t\tleafletDecorations[newName] = newDecoration;\n\t\t\t\t\t\t\tmap.addLayer(newDecoration);\n\t\t\t\t\t\t\tsetDecorationOptions(newDecoration, decorationData);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t});\n\t\t}\n\t};\n});\n","angular.module('ui-leaflet').directive('eventBroadcast', function (leafletLogger, $rootScope, leafletHelpers, leafletMapEvents, leafletIterators) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function(scope, element, attrs, controller) {\n var isObject = leafletHelpers.isObject,\n isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n eventBroadcast = leafletScope.eventBroadcast,\n availableMapEvents = leafletMapEvents.getAvailableMapEvents(),\n addEvents = leafletMapEvents.addEvents;\n\n controller.getMap().then(function(map) {\n\n var mapEvents = [],\n logic = \"broadcast\";\n\n // We have a possible valid object\n if (!isDefined(eventBroadcast.map)) {\n // We do not have events enable/disable do we do nothing (all enabled by default)\n mapEvents = availableMapEvents;\n } else if (!isObject(eventBroadcast.map)) {\n // Not a valid object\n $log.warn(\"[AngularJS - Leaflet] event-broadcast.map must be an object check your model.\");\n } else {\n // We have a possible valid map object\n // Event propadation logic\n if (eventBroadcast.map.logic !== \"emit\" && eventBroadcast.map.logic !== \"broadcast\") {\n // This is an error\n $log.warn(\"[AngularJS - Leaflet] Available event propagation logic are: 'emit' or 'broadcast'.\");\n } else {\n logic = eventBroadcast.map.logic;\n }\n\n if (!(isObject(eventBroadcast.map.enable) && eventBroadcast.map.enable.length >= 0)) {\n $log.warn(\"[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model.\");\n } else {\n // Enable events\n leafletIterators.each(eventBroadcast.map.enable, function(eventName) {\n // Do we have already the event enabled?\n if (mapEvents.indexOf(eventName) === -1 && availableMapEvents.indexOf(eventName) !== -1) {\n mapEvents.push(eventName);\n }\n });\n }\n\n }\n // as long as the map is removed in the root leaflet directive we\n // do not need ot clean up the events as leaflet does it itself\n addEvents(map, mapEvents, \"eventName\", leafletScope, logic);\n });\n }\n };\n});\n","angular.module('ui-leaflet')\n.directive('geojson', function (leafletLogger, $rootScope, leafletData, leafletHelpers,\n leafletWatchHelpers, leafletDirectiveControlsHelpers,leafletIterators, leafletGeoJsonEvents) {\n var _maybeWatch = leafletWatchHelpers.maybeWatch,\n _defaultWatchOptions = leafletHelpers.watchOptions,\n _extendDirectiveControls = leafletDirectiveControlsHelpers.extend,\n hlp = leafletHelpers,\n $it = leafletIterators;\n // $log = leafletLogger;\n\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n leafletGeoJSON = {},\n _hasSetLeafletData = false;\n\n controller.getMap().then(function(map) {\n var watchOptions;\n if(leafletScope.watchOptions && leafletScope.watchOptions.geojson) {\n watchOptions = leafletScope.watchOptions.geojson;\n }\n else {\n watchOptions = _defaultWatchOptions;\n }\n\n var _hookUpEvents = function(geojson, maybeName){\n var onEachFeature;\n\n if (angular.isFunction(geojson.onEachFeature)) {\n onEachFeature = geojson.onEachFeature;\n } else {\n onEachFeature = function(feature, layer) {\n if (leafletHelpers.LabelPlugin.isLoaded() && isDefined(feature.properties.description)) {\n layer.bindLabel(feature.properties.description);\n }\n\n leafletGeoJsonEvents.bindEvents(attrs.id, layer, null, feature,\n leafletScope, maybeName,\n {resetStyleOnMouseout: geojson.resetStyleOnMouseout,\n mapId: attrs.id});\n };\n }\n return onEachFeature;\n };\n\n var isNested = (hlp.isDefined(attrs.geojsonNested) &&\n hlp.isTruthy(attrs.geojsonNested));\n\n var _clean = function(){\n if(!leafletGeoJSON)\n return;\n var _remove = function(lObject) {\n if (isDefined(lObject) && map.hasLayer(lObject)) {\n map.removeLayer(lObject);\n }\n };\n if(isNested) {\n $it.each(leafletGeoJSON, function(lObject) {\n _remove(lObject);\n });\n return;\n }\n _remove(leafletGeoJSON);\n };\n\n var _addGeojson = function(model, maybeName){\n var geojson = angular.copy(model);\n if (!(isDefined(geojson) && isDefined(geojson.data))) {\n return;\n }\n var onEachFeature = _hookUpEvents(geojson, maybeName);\n\n if (!isDefined(geojson.options)) {\n //right here is why we use a clone / copy (we modify and thus)\n //would kick of a watcher.. we need to be more careful everywhere\n //for stuff like this\n geojson.options = {\n style: geojson.style,\n filter: geojson.filter,\n onEachFeature: onEachFeature,\n pointToLayer: geojson.pointToLayer\n };\n }\n\n var lObject = L.geoJson(geojson.data, geojson.options);\n\n if(maybeName && hlp.isString(maybeName)){\n leafletGeoJSON[maybeName] = lObject;\n }\n else{\n leafletGeoJSON = lObject;\n }\n\n lObject.addTo(map);\n\n if(!_hasSetLeafletData){//only do this once and play with the same ref forever\n _hasSetLeafletData = true;\n leafletData.setGeoJSON(leafletGeoJSON, attrs.id);\n }\n };\n\n var _create = function(model){\n _clean();\n if(isNested) {\n if(!model || !Object.keys(model).length)\n return;\n $it.each(model, function(m, name) {\n //name could be layerName and or groupName\n //for now it is not tied to a layer\n _addGeojson(m,name);\n });\n return;\n }\n _addGeojson(model);\n };\n\n _extendDirectiveControls(attrs.id, 'geojson', _create, _clean);\n\n _maybeWatch(leafletScope,'geojson', watchOptions, function(geojson){\n _create(geojson);\n });\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive('layercontrol', function ($filter, leafletLogger, leafletData, leafletHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"E\",\n scope: {\n icons: '=?',\n autoHideOpacity: '=?', // Hide other opacity controls when one is activated.\n showGroups: '=?', // Hide other opacity controls when one is activated.\n title: '@',\n baseTitle: '@',\n overlaysTitle: '@'\n },\n replace: true,\n transclude: false,\n require: '^leaflet',\n controller: function ($scope, $element, $sce) {\n $log.debug('[Angular Directive - Layers] layers', $scope, $element);\n var safeApply = leafletHelpers.safeApply,\n isDefined = leafletHelpers.isDefined;\n angular.extend($scope, {\n baselayer: '',\n oldGroup: '',\n layerProperties: {},\n groupProperties: {},\n rangeIsSupported: leafletHelpers.rangeIsSupported(),\n changeBaseLayer: function(key, e) {\n leafletHelpers.safeApply($scope, function(scp) {\n scp.baselayer = key;\n leafletData.getMap().then(function(map) {\n leafletData.getLayers().then(function(leafletLayers) {\n if(map.hasLayer(leafletLayers.baselayers[key])) {\n return;\n }\n for(var i in scp.layers.baselayers) {\n scp.layers.baselayers[i].icon = scp.icons.unradio;\n if(map.hasLayer(leafletLayers.baselayers[i])) {\n map.removeLayer(leafletLayers.baselayers[i]);\n }\n }\n map.addLayer(leafletLayers.baselayers[key]);\n scp.layers.baselayers[key].icon = $scope.icons.radio;\n });\n });\n });\n e.preventDefault();\n },\n moveLayer: function(ly, newIndex, e) {\n var delta = Object.keys($scope.layers.baselayers).length;\n if(newIndex >= (1+delta) && newIndex <= ($scope.overlaysArray.length+delta)) {\n var oldLy;\n for(var key in $scope.layers.overlays) {\n if($scope.layers.overlays[key].index === newIndex) {\n oldLy = $scope.layers.overlays[key];\n break;\n }\n }\n if(oldLy) {\n safeApply($scope, function() {\n oldLy.index = ly.index;\n ly.index = newIndex;\n });\n }\n }\n e.stopPropagation();\n e.preventDefault();\n },\n initIndex: function(layer, idx) {\n var delta = Object.keys($scope.layers.baselayers).length;\n layer.index = isDefined(layer.index)? layer.index:idx+delta+1;\n },\n initGroup: function(groupName) {\n $scope.groupProperties[groupName] = $scope.groupProperties[groupName]? $scope.groupProperties[groupName]:{};\n },\n toggleOpacity: function(e, layer) {\n if(layer.visible) {\n if($scope.autoHideOpacity && !$scope.layerProperties[layer.name].opacityControl) {\n for(var k in $scope.layerProperties) {\n $scope.layerProperties[k].opacityControl = false;\n }\n }\n $scope.layerProperties[layer.name].opacityControl = !$scope.layerProperties[layer.name].opacityControl;\n }\n e.stopPropagation();\n e.preventDefault();\n },\n toggleLegend: function(layer) {\n $scope.layerProperties[layer.name].showLegend = !$scope.layerProperties[layer.name].showLegend;\n },\n showLegend: function(layer) {\n return layer.legend && $scope.layerProperties[layer.name].showLegend;\n },\n unsafeHTML: function(html) {\n return $sce.trustAsHtml(html);\n },\n getOpacityIcon: function(layer) {\n return layer.visible && $scope.layerProperties[layer.name].opacityControl? $scope.icons.close:$scope.icons.open;\n },\n getGroupIcon: function(group) {\n return group.visible? $scope.icons.check:$scope.icons.uncheck;\n },\n changeOpacity: function(layer) {\n var op = $scope.layerProperties[layer.name].opacity;\n leafletData.getMap().then(function(map) {\n leafletData.getLayers().then(function(leafletLayers) {\n var ly;\n for(var k in $scope.layers.overlays) {\n if($scope.layers.overlays[k] === layer) {\n ly = leafletLayers.overlays[k];\n break;\n }\n }\n\n if(map.hasLayer(ly)) {\n if(ly.setOpacity) {\n ly.setOpacity(op/100);\n }\n if(ly.getLayers && ly.eachLayer) {\n ly.eachLayer(function(lay) {\n if(lay.setOpacity) {\n lay.setOpacity(op/100);\n }\n });\n }\n }\n });\n });\n },\n changeGroupVisibility: function(groupName) {\n if(!isDefined($scope.groupProperties[groupName])) {\n return;\n }\n var visible = $scope.groupProperties[groupName].visible;\n for(var k in $scope.layers.overlays) {\n var layer = $scope.layers.overlays[k];\n if(layer.group === groupName) {\n layer.visible = visible;\n }\n }\n }\n });\n\n var div = $element.get(0);\n if (!L.Browser.touch) {\n L.DomEvent.disableClickPropagation(div);\n L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);\n } else {\n L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);\n }\n },\n template:\n '
' +\n '

{{ title }}

' +\n '
' +\n '
{{ baseTitle }}
' +\n '
' +\n '' +\n '
' +\n '
' +\n '
' +\n '
{{ overlaysTitle }}
' +\n '
' +\n '
' +\n ''+\n ''+\n '
' +\n ' ' +\n ' ' +\n ' ' +\n '' +\n '
' +\n '
' +\n '
' +\n '' +\n '' +\n '' +\n '
Range is not supported in this browser
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
',\n link: function(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n layers = leafletScope.layers;\n\n scope.$watch('icons', function() {\n var defaultIcons = {\n uncheck: 'fa fa-square-o',\n check: 'fa fa-check-square-o',\n radio: 'fa fa-dot-circle-o',\n unradio: 'fa fa-circle-o',\n up: 'fa fa-angle-up',\n down: 'fa fa-angle-down',\n open: 'fa fa-angle-double-down',\n close: 'fa fa-angle-double-up',\n toggleLegend: 'fa fa-pencil-square-o'\n };\n if(isDefined(scope.icons)) {\n angular.extend(defaultIcons, scope.icons);\n angular.extend(scope.icons, defaultIcons);\n } else {\n scope.icons = defaultIcons;\n }\n });\n\n // Setting layer stack order.\n attrs.order = (isDefined(attrs.order) && (attrs.order === 'normal' || attrs.order === 'reverse'))? attrs.order:'normal';\n scope.order = attrs.order === 'normal';\n scope.orderNumber = attrs.order === 'normal'? -1:1;\n\n scope.layers = layers;\n controller.getMap().then(function(map) {\n leafletScope.$watch('layers.baselayers', function(newBaseLayers) {\n var baselayersArray = {};\n leafletData.getLayers().then(function(leafletLayers) {\n var key;\n for(key in newBaseLayers) {\n var layer = newBaseLayers[key];\n layer.icon = scope.icons[map.hasLayer(leafletLayers.baselayers[key])? 'radio':'unradio'];\n baselayersArray[key] = layer;\n }\n scope.baselayersArray = baselayersArray;\n });\n });\n\n leafletScope.$watch('layers.overlays', function(newOverlayLayers) {\n var overlaysArray = [];\n var groupVisibleCount = {};\n leafletData.getLayers().then(function(leafletLayers) {\n var key;\n for(key in newOverlayLayers) {\n var layer = newOverlayLayers[key];\n layer.icon = scope.icons[(layer.visible? 'check':'uncheck')];\n overlaysArray.push(layer);\n if(!isDefined(scope.layerProperties[layer.name])) {\n scope.layerProperties[layer.name] = {\n opacity: isDefined(layer.layerOptions.opacity)? layer.layerOptions.opacity*100:100,\n opacityControl: false,\n showLegend: true\n };\n }\n if(isDefined(layer.group)) {\n if(!isDefined(scope.groupProperties[layer.group])) {\n scope.groupProperties[layer.group] = {\n visible: false\n };\n }\n groupVisibleCount[layer.group] = isDefined(groupVisibleCount[layer.group])? groupVisibleCount[layer.group]:{\n count: 0,\n visibles: 0\n };\n groupVisibleCount[layer.group].count++;\n if(layer.visible) {\n groupVisibleCount[layer.group].visibles++;\n }\n }\n if(isDefined(layer.index) && leafletLayers.overlays[key].setZIndex) {\n leafletLayers.overlays[key].setZIndex(newOverlayLayers[key].index);\n }\n }\n\n for(key in groupVisibleCount) {\n scope.groupProperties[key].visible = groupVisibleCount[key].visibles === groupVisibleCount[key].count;\n }\n scope.overlaysArray = overlaysArray;\n });\n }, true);\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, leafletData, leafletHelpers, leafletLayerHelpers, leafletControlHelpers) {\n // var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n controller: function ($scope) {\n $scope._leafletLayers = $q.defer();\n this.getLayers = function () {\n return $scope._leafletLayers.promise;\n };\n },\n link: function(scope, element, attrs, controller){\n var isDefined = leafletHelpers.isDefined,\n leafletLayers = {},\n leafletScope = controller.getLeafletScope(),\n layers = leafletScope.layers,\n createLayer = leafletLayerHelpers.createLayer,\n safeAddLayer = leafletLayerHelpers.safeAddLayer,\n safeRemoveLayer = leafletLayerHelpers.safeRemoveLayer,\n updateLayersControl = leafletControlHelpers.updateLayersControl,\n isLayersControlVisible = false;\n\n controller.getMap().then(function(map) {\n\n // We have baselayers to add to the map\n scope._leafletLayers.resolve(leafletLayers);\n leafletData.setLayers(leafletLayers, attrs.id);\n\n leafletLayers.baselayers = {};\n leafletLayers.overlays = {};\n\n var mapId = attrs.id;\n\n // Setup all baselayers definitions\n var oneVisibleLayer = false;\n for (var layerName in layers.baselayers) {\n var newBaseLayer = createLayer(layers.baselayers[layerName]);\n if (!isDefined(newBaseLayer)) {\n delete layers.baselayers[layerName];\n continue;\n }\n leafletLayers.baselayers[layerName] = newBaseLayer;\n // Only add the visible layer to the map, layer control manages the addition to the map\n // of layers in its control\n if (layers.baselayers[layerName].top === true) {\n safeAddLayer(map, leafletLayers.baselayers[layerName]);\n oneVisibleLayer = true;\n }\n }\n\n // If there is no visible layer add first to the map\n if (!oneVisibleLayer && Object.keys(leafletLayers.baselayers).length > 0) {\n safeAddLayer(map, leafletLayers.baselayers[Object.keys(layers.baselayers)[0]]);\n }\n\n // Setup the Overlays\n for (layerName in layers.overlays) {\n if(layers.overlays[layerName].type === 'cartodb') {\n\n }\n var newOverlayLayer = createLayer(layers.overlays[layerName]);\n if (!isDefined(newOverlayLayer)) {\n delete layers.overlays[layerName];\n continue;\n }\n leafletLayers.overlays[layerName] = newOverlayLayer;\n // Only add the visible overlays to the map\n if (layers.overlays[layerName].visible === true) {\n safeAddLayer(map, leafletLayers.overlays[layerName]);\n }\n }\n\n // Watch for the base layers\n leafletScope.$watch('layers.baselayers', function(newBaseLayers, oldBaseLayers) {\n if(angular.equals(newBaseLayers, oldBaseLayers)) {\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, newBaseLayers, layers.overlays, leafletLayers);\n return true;\n }\n // Delete layers from the array\n for (var name in leafletLayers.baselayers) {\n if (!isDefined(newBaseLayers[name]) || newBaseLayers[name].doRefresh) {\n // Remove from the map if it's on it\n if (map.hasLayer(leafletLayers.baselayers[name])) {\n map.removeLayer(leafletLayers.baselayers[name]);\n }\n delete leafletLayers.baselayers[name];\n\n if (newBaseLayers[name] && newBaseLayers[name].doRefresh) {\n newBaseLayers[name].doRefresh = false;\n }\n }\n }\n // add new layers\n for (var newName in newBaseLayers) {\n if (!isDefined(leafletLayers.baselayers[newName])) {\n var testBaseLayer = createLayer(newBaseLayers[newName]);\n if (isDefined(testBaseLayer)) {\n leafletLayers.baselayers[newName] = testBaseLayer;\n // Only add the visible layer to the map\n if (newBaseLayers[newName].top === true) {\n safeAddLayer(map, leafletLayers.baselayers[newName]);\n }\n }\n } else {\n if (newBaseLayers[newName].top === true && !map.hasLayer(leafletLayers.baselayers[newName])) {\n safeAddLayer(map, leafletLayers.baselayers[newName]);\n } else if (newBaseLayers[newName].top === false && map.hasLayer(leafletLayers.baselayers[newName])) {\n map.removeLayer(leafletLayers.baselayers[newName]);\n }\n }\n }\n\n //we have layers, so we need to make, at least, one active\n var found = false;\n // search for an active layer\n for (var key in leafletLayers.baselayers) {\n if (map.hasLayer(leafletLayers.baselayers[key])) {\n found = true;\n break;\n }\n }\n // If there is no active layer make one active\n if (!found && Object.keys(leafletLayers.baselayers).length > 0) {\n safeAddLayer(map, leafletLayers.baselayers[Object.keys(leafletLayers.baselayers)[0]]);\n }\n\n // Only show the layers switch selector control if we have more than one baselayer + overlay\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, newBaseLayers, layers.overlays, leafletLayers);\n }, true);\n\n // Watch for the overlay layers\n leafletScope.$watch('layers.overlays', function(newOverlayLayers, oldOverlayLayers) {\n if(angular.equals(newOverlayLayers, oldOverlayLayers)) {\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, layers.baselayers, newOverlayLayers, leafletLayers);\n return true;\n }\n\n // Delete layers from the array\n for (var name in leafletLayers.overlays) {\n if (!isDefined(newOverlayLayers[name]) || newOverlayLayers[name].doRefresh) {\n // Remove from the map if it's on it\n if (map.hasLayer(leafletLayers.overlays[name])) {\n // Safe remove when ArcGIS layers is loading.\n var options = isDefined(newOverlayLayers[name])?\n newOverlayLayers[name].layerOptions:null;\n safeRemoveLayer(map, leafletLayers.overlays[name], options);\n }\n // TODO: Depending on the layer type we will have to delete what's included on it\n delete leafletLayers.overlays[name];\n\n if (newOverlayLayers[name] && newOverlayLayers[name].doRefresh) {\n newOverlayLayers[name].doRefresh = false;\n }\n }\n }\n\n // add new overlays\n for (var newName in newOverlayLayers) {\n if (!isDefined(leafletLayers.overlays[newName])) {\n var testOverlayLayer = createLayer(newOverlayLayers[newName]);\n if (!isDefined(testOverlayLayer)) {\n // If the layer creation fails, continue to the next overlay\n continue;\n }\n leafletLayers.overlays[newName] = testOverlayLayer;\n if (newOverlayLayers[newName].visible === true) {\n safeAddLayer(map, leafletLayers.overlays[newName]);\n }\n } else {\n // check for the .visible property to hide/show overLayers\n if (newOverlayLayers[newName].visible && !map.hasLayer(leafletLayers.overlays[newName])) {\n safeAddLayer(map, leafletLayers.overlays[newName]);\n } else if (newOverlayLayers[newName].visible === false && map.hasLayer(leafletLayers.overlays[newName])) {\n // Safe remove when ArcGIS layers is loading.\n safeRemoveLayer(map, leafletLayers.overlays[newName], newOverlayLayers[newName].layerOptions);\n }\n }\n\n //refresh heatmap data if present\n if (newOverlayLayers[newName].visible && map._loaded && newOverlayLayers[newName].data && newOverlayLayers[newName].type === \"heatmap\") {\n leafletLayers.overlays[newName].setData(newOverlayLayers[newName].data);\n leafletLayers.overlays[newName].update();\n }\n }\n\n // Only add the layers switch selector control if we have more than one baselayer + overlay\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, layers.baselayers, newOverlayLayers, leafletLayers);\n }, true);\n });\n }\n };\n});\n","angular.module(\"ui-leaflet\").directive('legend', function (leafletLogger, $http, $timeout, leafletHelpers, leafletLegendHelpers) {\n var $log = leafletLogger,\n errorHeader = leafletHelpers.errorHeader + ' [Legend] ';\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n transclude: false,\n\n link: function (scope, element, attrs, controller) {\n\n var isArray = leafletHelpers.isArray,\n isString = leafletHelpers.isString,\n isDefined = leafletHelpers.isDefined,\n isFunction = leafletHelpers.isFunction,\n leafletScope = controller.getLeafletScope(),\n legend = leafletScope.legend;\n\n var legendClass;\n var position;\n var leafletLegend;\n var type;\n\n leafletScope.$watch('legend', function (newLegend) {\n\n if (isDefined(newLegend)) {\n legendClass = newLegend.legendClass ? newLegend.legendClass : \"legend\";\n position = newLegend.position || 'bottomright';\n // default to arcgis\n type = newLegend.type || 'arcgis';\n }\n }, true);\n\n var createLegend = function(map, legendData, newURL) {\n if(legendData && legendData.layers && legendData.layers.length > 0) {\n if (isDefined(leafletLegend)) {\n leafletLegendHelpers.updateLegend(leafletLegend.getContainer(), legendData, type, newURL);\n } else {\n leafletLegend = L.control({\n position: position\n });\n leafletLegend.onAdd = leafletLegendHelpers.getOnAddLegend(legendData, legendClass, type, newURL);\n leafletLegend.addTo(map);\n }\n\n if (isDefined(legend.loadedData) && isFunction(legend.loadedData)) {\n legend.loadedData();\n }\n }\n };\n\n controller.getMap().then(function (map) {\n leafletScope.$watch('legend', function (newLegend) {\n if (!isDefined(newLegend)) {\n if (isDefined(leafletLegend)) {\n leafletLegend.removeFrom(map);\n leafletLegend= null;\n }\n\n return;\n }\n\n if (!isDefined(newLegend.url) && (type === 'arcgis') && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) {\n $log.warn(errorHeader + \" legend.colors and legend.labels must be set.\");\n return;\n }\n\n if (isDefined(newLegend.url)) {\n $log.info(errorHeader + \" loading legend service.\");\n return;\n }\n\n if (isDefined(leafletLegend)) {\n leafletLegend.removeFrom(map);\n leafletLegend= null;\n }\n\n leafletLegend = L.control({\n position: position\n });\n\n if (type === 'arcgis') {\n leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass);\n }\n leafletLegend.addTo(map);\n });\n\n leafletScope.$watch('legend.url', function (newURL) {\n if (!isDefined(newURL)) {\n return;\n }\n\n if(!isArray(newURL) && !isString(newURL)) {\n $log.warn(errorHeader + \" legend.url must be an array or string.\");\n return;\n }\n\n var urls = isString(newURL)? [newURL]:newURL;\n\n var legendData;\n var onResult = function(idx, url) {\n return function(ld) {\n if(isDefined(ld.data.error)) {\n $log.warn(errorHeader + 'Error loadin legend from: ' + url, ld.data.error.message);\n } else {\n if(legendData && legendData.layers && legendData.layers.length > 0) {\n legendData.layers = legendData.layers.concat(ld.data.layers);\n } else {\n legendData = ld.data;\n }\n }\n\n if(idx === urls.length-1) {\n createLegend(map, legendData, newURL);\n }\n };\n };\n var onError = function(err) {\n $log.warn(errorHeader + ' legend.url not loaded.', err);\n };\n\n for(var i = 0; i < urls.length; i++) {\n leafletLegendHelpers.addLegendURL(attrs.id, {\n url: urls[i],\n method: 'GET'\n }).then(onResult(i)).catch(onError);\n }\n });\n\n leafletScope.$watch('legend.legendData', function (legendData) {\n $log.debug('legendData', legendData);\n if(isDefined(leafletScope.legend.url) || !isDefined(legendData)) {\n return;\n }\n\n createLegend(map, legendData);\n }, true);\n });\n\n }\n };\n });\n","angular.module('ui-leaflet').directive('markers',\n function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers, leafletMapDefaults,\n leafletMarkersHelpers, leafletMarkerEvents, leafletIterators, leafletWatchHelpers,\n leafletDirectiveControlsHelpers) {\n //less terse vars to helpers\n var isDefined = leafletHelpers.isDefined,\n errorHeader = leafletHelpers.errorHeader,\n Helpers = leafletHelpers,\n isString = leafletHelpers.isString,\n addMarkerWatcher = leafletMarkersHelpers.addMarkerWatcher,\n updateMarker = leafletMarkersHelpers.updateMarker,\n listenMarkerEvents = leafletMarkersHelpers.listenMarkerEvents,\n addMarkerToGroup = leafletMarkersHelpers.addMarkerToGroup,\n createMarker = leafletMarkersHelpers.createMarker,\n deleteMarker = leafletMarkersHelpers.deleteMarker,\n getModelFromModels = leafletMarkersHelpers.getModelFromModels,\n getLayerModels = leafletMarkersHelpers.getLayerModels,\n $it = leafletIterators,\n _defaultWatchOptions = leafletHelpers.watchOptions,\n maybeWatch = leafletWatchHelpers.maybeWatch,\n extendDirectiveControls = leafletDirectiveControlsHelpers.extend,\n $log = leafletLogger;\n\n var _getLMarker = function(leafletMarkers, name, maybeLayerName){\n if(!Object.keys(leafletMarkers).length) return;\n if(maybeLayerName && isString(maybeLayerName)){\n if(!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length)\n return;\n return leafletMarkers[maybeLayerName][name];\n }\n return leafletMarkers[name];\n };\n\n var _setLMarker = function(lObject, leafletMarkers, name, maybeLayerName){\n if(maybeLayerName && isString(maybeLayerName)){\n if(!isDefined(leafletMarkers[maybeLayerName]))\n leafletMarkers[maybeLayerName] = {};\n leafletMarkers[maybeLayerName][name] = lObject;\n }\n else\n leafletMarkers[name] = lObject;\n return lObject;\n };\n\n var _maybeAddMarkerToLayer = function(layerName, layers, model, marker, watchType, map){\n\n if (!isString(layerName)) {\n $log.error(errorHeader + ' A layername must be a string');\n return false;\n }\n\n if (!isDefined(layers)) {\n $log.error(errorHeader + ' You must add layers to the directive if the markers are going to use this functionality.');\n return false;\n }\n\n if (!isDefined(layers.overlays) || !isDefined(layers.overlays[layerName])) {\n $log.error(errorHeader +' A marker can only be added to a layer of type \"group\"');\n return false;\n }\n var layerGroup = layers.overlays[layerName];\n if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) {\n $log.error(errorHeader + ' Adding a marker to an overlay needs a overlay of the type \"group\" or \"featureGroup\"');\n return false;\n }\n\n // The marker goes to a correct layer group, so first of all we add it\n layerGroup.addLayer(marker);\n\n // The marker is automatically added to the map depending on the visibility\n // of the layer, so we only have to open the popup if the marker is in the map\n if (watchType === null && map.hasLayer(marker) && model.focus === true) {\n marker.openPopup();\n }\n return true;\n };\n //TODO: move to leafletMarkersHelpers??? or make a new class/function file (leafletMarkersHelpers is large already)\n var _addMarkers = function(mapId, markersToRender, oldModels, map, layers, leafletMarkers, leafletScope,\n watchOptions, maybeLayerName, skips){\n for (var newName in markersToRender) {\n if(skips[newName])\n continue;\n\n if (newName.search(\"-\") !== -1) {\n $log.error('The marker can\\'t use a \"-\" on his key name: \"' + newName + '\".');\n continue;\n }\n\n var model = Helpers.copy(markersToRender[newName]);\n var pathToMarker = Helpers.getObjectDotPath(maybeLayerName? [maybeLayerName, newName]: [newName]);\n var maybeLMarker = _getLMarker(leafletMarkers,newName, maybeLayerName);\n if (!isDefined(maybeLMarker)) {\n //(nmccready) very important to not have model changes when lObject is changed\n //this might be desirable in some cases but it causes two-way binding to lObject which is not ideal\n //if it is left as the reference then all changes from oldModel vs newModel are ignored\n //see _destroy (where modelDiff becomes meaningless if we do not copy here)\n var marker = createMarker(model);\n var layerName = (model? model.layer : undefined) || maybeLayerName; //original way takes pref\n if (!isDefined(marker)) {\n $log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.');\n continue;\n }\n _setLMarker(marker, leafletMarkers, newName, maybeLayerName);\n\n // Bind message\n if (isDefined(model.message)) {\n marker.bindPopup(model.message, model.popupOptions);\n }\n\n // Add the marker to a cluster group if needed\n if (isDefined(model.group)) {\n var groupOptions = isDefined(model.groupOption) ? model.groupOption : null;\n addMarkerToGroup(marker, model.group, groupOptions, map);\n }\n\n // Show label if defined\n if (Helpers.LabelPlugin.isLoaded() && isDefined(model.label) && isDefined(model.label.message)) {\n marker.bindLabel(model.label.message, model.label.options);\n }\n\n // Check if the marker should be added to a layer\n if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))){\n\n var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker,\n watchOptions.individual.type, map);\n if(!pass)\n continue; //something went wrong move on in the loop\n } else if (!isDefined(model.group)) {\n // We do not have a layer attr, so the marker goes to the map layer\n map.addLayer(marker);\n if (watchOptions.individual.type === null && model.focus === true) {\n marker.openPopup();\n }\n }\n\n if (watchOptions.individual.type !== null) {\n addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map,\n watchOptions.individual);\n }\n\n listenMarkerEvents(marker, model, leafletScope, watchOptions.individual.type, map);\n leafletMarkerEvents.bindEvents(mapId, marker, pathToMarker, model, leafletScope, layerName);\n }\n else {\n var oldModel = getModelFromModels(oldModels, newName, maybeLayerName);\n updateMarker(model, oldModel, maybeLMarker, pathToMarker, leafletScope, layers, map);\n }\n }\n };\n var _seeWhatWeAlreadyHave = function(markerModels, oldMarkerModels, lMarkers, isEqual, cb){\n var hasLogged = false,\n equals = false,\n oldMarker,\n newMarker;\n\n var doCheckOldModel = isDefined(oldMarkerModels);\n for (var name in lMarkers) {\n if(!hasLogged) {\n $log.debug(errorHeader + \"[markers] destroy: \");\n hasLogged = true;\n }\n\n if(doCheckOldModel){\n //might want to make the option (in watch options) to disable deep checking\n //ie the options to only check !== (reference check) instead of angular.equals (slow)\n newMarker = markerModels[name];\n oldMarker = oldMarkerModels[name];\n equals = angular.equals(newMarker,oldMarker) && isEqual;\n }\n if (!isDefined(markerModels) ||\n !Object.keys(markerModels).length ||\n !isDefined(markerModels[name]) ||\n !Object.keys(markerModels[name]).length ||\n equals) {\n if(cb && Helpers.isFunction(cb))\n cb(newMarker, oldMarker, name);\n }\n }\n };\n var _destroy = function(markerModels, oldMarkerModels, lMarkers, map, layers){\n _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, false,\n function(newMarker, oldMarker, lMarkerName){\n $log.debug(errorHeader + '[marker] is deleting marker: ' + lMarkerName);\n deleteMarker(lMarkers[lMarkerName], map, layers);\n delete lMarkers[lMarkerName];\n });\n };\n\n var _getNewModelsToSkipp = function(newModels, oldModels, lMarkers){\n var skips = {};\n _seeWhatWeAlreadyHave(newModels, oldModels, lMarkers, true,\n function(newMarker, oldMarker, lMarkerName){\n $log.debug(errorHeader + '[marker] is already rendered, marker: ' + lMarkerName);\n skips[lMarkerName] = newMarker;\n });\n return skips;\n };\n\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet', '?layers'],\n\n link: function(scope, element, attrs, controller) {\n var mapController = controller[0],\n leafletScope = mapController.getLeafletScope();\n\n mapController.getMap().then(function(map) {\n var leafletMarkers = {}, getLayers;\n\n // If the layers attribute is used, we must wait until the layers are created\n if (isDefined(controller[1])) {\n getLayers = controller[1].getLayers;\n } else {\n getLayers = function() {\n var deferred = $q.defer();\n deferred.resolve();\n return deferred.promise;\n };\n }\n\n var watchOptions;\n if(leafletScope.watchOptions && leafletScope.watchOptions.markers) {\n watchOptions = leafletScope.watchOptions.markers;\n }\n else {\n watchOptions = _defaultWatchOptions;\n }\n\n var isNested = (isDefined(attrs.markersNested) && Helpers.isTruthy(attrs.markersNested));\n\n getLayers().then(function(layers) {\n var _clean = function(models, oldModels){\n if(isNested) {\n $it.each(models, function(markerToMaybeDel, layerName) {\n var oldLayerModels = getLayerModels(oldModels, layerName);\n _destroy(markerToMaybeDel, oldLayerModels, leafletMarkers[layerName], map, layers);\n });\n return;\n }\n _destroy(models, oldModels, leafletMarkers, map, layers);\n };\n\n var _create = function(models, oldModels){\n _clean(models, oldModels);\n var skips = null;\n if(isNested) {\n $it.each(models, function(markersToAdd, layerName) {\n var oldLayerModels = getLayerModels(oldModels, layerName);\n var newlayerModels = getLayerModels(models, layerName);\n skips = _getNewModelsToSkipp(newlayerModels, oldLayerModels, leafletMarkers[layerName]);\n _addMarkers(attrs.id, markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope,\n watchOptions, layerName, skips);\n });\n return;\n }\n skips = _getNewModelsToSkipp(models, oldModels, leafletMarkers);\n _addMarkers(attrs.id, models, oldModels, map, layers, leafletMarkers, leafletScope,\n watchOptions, undefined, skips);\n };\n extendDirectiveControls(attrs.id, 'markers', _create, _clean);\n leafletData.setMarkers(leafletMarkers, attrs.id);\n\n maybeWatch(leafletScope,'markers', watchOptions, function(newMarkers, oldMarkers){\n _create(newMarkers, oldMarkers);\n });\n });\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive('maxbounds', function (leafletLogger, leafletMapDefaults, leafletBoundsHelpers, leafletHelpers) {\n // var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function(scope, element, attrs, controller) {\n var leafletScope = controller.getLeafletScope(),\n isValidBounds = leafletBoundsHelpers.isValidBounds,\n isNumber = leafletHelpers.isNumber;\n\n\n controller.getMap().then(function(map) {\n leafletScope.$watch(\"maxbounds\", function (maxbounds) {\n if (!isValidBounds(maxbounds)) {\n // Unset any previous maxbounds\n map.setMaxBounds();\n return;\n }\n\n var leafletBounds = leafletBoundsHelpers.createLeafletBounds(maxbounds);\n if(isNumber(maxbounds.pad)) {\n leafletBounds = leafletBounds.pad(maxbounds.pad);\n }\n\n map.setMaxBounds(leafletBounds);\n if (!attrs.center && !attrs.lfCenter) {\n map.fitBounds(leafletBounds);\n }\n });\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, leafletData, leafletMapDefaults, leafletHelpers, leafletPathsHelpers, leafletPathEvents, leafletWatchHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet', '?layers'],\n\n link: function(scope, element, attrs, controller) {\n var mapController = controller[0],\n isDefined = leafletHelpers.isDefined,\n isString = leafletHelpers.isString,\n leafletScope = mapController.getLeafletScope(),\n paths = leafletScope.paths,\n createPath = leafletPathsHelpers.createPath,\n bindPathEvents = leafletPathEvents.bindPathEvents,\n setPathOptions = leafletPathsHelpers.setPathOptions,\n maybeWatch = leafletWatchHelpers.maybeWatch;\n\n mapController.getMap().then(function(map) {\n var defaults = leafletMapDefaults.getDefaults(attrs.id),\n getLayers;\n\n // If the layers attribute is used, we must wait until the layers are created\n if (isDefined(controller[1])) {\n getLayers = controller[1].getLayers;\n } else {\n getLayers = function() {\n var deferred = $q.defer();\n deferred.resolve();\n return deferred.promise;\n };\n }\n\n if (!isDefined(paths)) {\n return;\n }\n\n //legacy behaviour does a watch collection on the paths\n var _legacyWatchOptions = {\n type: 'watchCollection',\n individual: {\n type: 'watchDeep'\n }\n };\n\n var watchOptions;\n if(leafletScope.watchOptions && leafletScope.watchOptions.paths) {\n watchOptions = leafletScope.watchOptions.paths;\n }\n else {\n watchOptions = _legacyWatchOptions;\n }\n\n getLayers().then(function(layers) {\n\n var leafletPaths = {};\n leafletData.setPaths(leafletPaths, attrs.id);\n\n // Function for listening every single path once created\n var watchPathFn = function(leafletPath, name, watchOptions) {\n var pathWatchPath = \"paths[\\\"\"+name+\"\\\"]\";\n\n maybeWatch(leafletScope, pathWatchPath, watchOptions, function(pathData, old, clearWatch){\n if (!isDefined(pathData)) {\n if (isDefined(old.layer)) {\n for (var i in layers.overlays) {\n var overlay = layers.overlays[i];\n overlay.removeLayer(leafletPath);\n }\n }\n map.removeLayer(leafletPath);\n clearWatch();\n return;\n }\n setPathOptions(leafletPath, pathData.type, pathData);\n });\n };\n\n var _clean = function(newPaths){\n // Delete paths (by name) from the array\n for (var name in leafletPaths) {\n if (!isDefined(newPaths[name])) {\n map.removeLayer(leafletPaths[name]);\n delete leafletPaths[name];\n }\n }\n };\n\n var _create = function(newPaths){\n _clean(newPaths);\n // Create the new paths\n for (var newName in newPaths) {\n if (newName.search('\\\\$') === 0) {\n continue;\n }\n if (newName.search(\"-\") !== -1) {\n $log.error('[AngularJS - Leaflet] The path name \"' + newName + '\" is not valid. It must not include \"-\" and a number.');\n continue;\n }\n\n if (!isDefined(leafletPaths[newName])) {\n var pathData = newPaths[newName];\n var newPath = createPath(newName, newPaths[newName], defaults);\n\n // bind popup if defined\n if (isDefined(newPath) && isDefined(pathData.message)) {\n newPath.bindPopup(pathData.message, pathData.popupOptions);\n }\n\n // Show label if defined\n if (leafletHelpers.LabelPlugin.isLoaded() && isDefined(pathData.label) && isDefined(pathData.label.message)) {\n newPath.bindLabel(pathData.label.message, pathData.label.options);\n }\n\n // Check if the marker should be added to a layer\n if (isDefined(pathData) && isDefined(pathData.layer)) {\n\n if (!isString(pathData.layer)) {\n $log.error('[AngularJS - Leaflet] A layername must be a string');\n continue;\n }\n if (!isDefined(layers)) {\n $log.error('[AngularJS - Leaflet] You must add layers to the directive if the markers are going to use this functionality.');\n continue;\n }\n\n if (!isDefined(layers.overlays) || !isDefined(layers.overlays[pathData.layer])) {\n $log.error('[AngularJS - Leaflet] A path can only be added to a layer of type \"group\"');\n continue;\n }\n var layerGroup = layers.overlays[pathData.layer];\n if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) {\n $log.error('[AngularJS - Leaflet] Adding a path to an overlay needs a overlay of the type \"group\" or \"featureGroup\"');\n continue;\n }\n\n // Listen for changes on the new path\n leafletPaths[newName] = newPath;\n // The path goes to a correct layer group, so first of all we add it\n layerGroup.addLayer(newPath);\n\n if (watchOptions.individual.type !== null) {\n watchPathFn(newPath, newName, watchOptions.individual);\n } else {\n setPathOptions(newPath, pathData.type, pathData);\n }\n } else if (isDefined(newPath)) {\n // Listen for changes on the new path\n leafletPaths[newName] = newPath;\n map.addLayer(newPath);\n\n if (watchOptions.individual.type !== null) {\n watchPathFn(newPath, newName, watchOptions.individual);\n } else {\n setPathOptions(newPath, pathData.type, pathData);\n }\n }\n\n bindPathEvents(attrs.id, newPath, newName, pathData, leafletScope);\n }\n }\n };\n\n maybeWatch(leafletScope,'paths', watchOptions, function(newPaths){\n _create(newPaths);\n });\n\n });\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive('tiles', function (leafletLogger, leafletData, leafletMapDefaults, leafletHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n tiles = leafletScope.tiles;\n\n if (!isDefined(tiles) || !isDefined(tiles.url)) {\n $log.warn(\"[AngularJS - Leaflet] The 'tiles' definition doesn't have the 'url' property.\");\n return;\n }\n\n controller.getMap().then(function(map) {\n var defaults = leafletMapDefaults.getDefaults(attrs.id);\n var tileLayerObj;\n leafletScope.$watch(\"tiles\", function(tiles) {\n var tileLayerOptions = defaults.tileLayerOptions;\n var tileLayerUrl = defaults.tileLayer;\n\n // If no valid tiles are in the scope, remove the last layer\n if (!isDefined(tiles.url) && isDefined(tileLayerObj)) {\n map.removeLayer(tileLayerObj);\n return;\n }\n\n // No leafletTiles object defined yet\n if (!isDefined(tileLayerObj)) {\n if (isDefined(tiles.options)) {\n angular.copy(tiles.options, tileLayerOptions);\n }\n\n if (isDefined(tiles.url)) {\n tileLayerUrl = tiles.url;\n }\n\n tileLayerObj = L.tileLayer(tileLayerUrl, tileLayerOptions);\n tileLayerObj.addTo(map);\n leafletData.setTiles(tileLayerObj, attrs.id);\n return;\n }\n\n // If the options of the tilelayer is changed, we need to redraw the layer\n if (isDefined(tiles.url) && isDefined(tiles.options) && !angular.equals(tiles.options, tileLayerOptions)) {\n map.removeLayer(tileLayerObj);\n tileLayerOptions = defaults.tileLayerOptions;\n angular.copy(tiles.options, tileLayerOptions);\n tileLayerUrl = tiles.url;\n tileLayerObj = L.tileLayer(tileLayerUrl, tileLayerOptions);\n tileLayerObj.addTo(map);\n leafletData.setTiles(tileLayerObj, attrs.id);\n return;\n }\n\n // Only the URL of the layer is changed, update the tiles object\n if (isDefined(tiles.url)) {\n tileLayerObj.setUrl(tiles.url);\n }\n }, true);\n });\n }\n };\n});\n","angular.module('ui-leaflet').directive('watchOptions', [\n '$log', '$rootScope', '$q', 'leafletData', 'leafletHelpers',\n function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers) {\n\n var isDefined = leafletHelpers.isDefined,\n errorHeader = leafletHelpers.errorHeader,\n isObject = leafletHelpers.isObject,\n $log = leafletLogger;\n\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet'],\n\n link: function (scope, element, attrs, controller) {\n var mapController = controller[0],\n leafletScope = mapController.getLeafletScope();\n\n var _isValidWatchType = function(type) {\n return type === 'watch' ||\n type === 'watchCollection' ||\n type === 'watchDeep' ||\n type === null;\n };\n\n if(isDefined(leafletScope.watchOptions) && isObject(leafletScope.watchOptions)) {\n angular.forEach(['markers', 'geojson', 'paths'], function(name) {\n if (isDefined(leafletScope.watchOptions[name])) {\n if(!_isValidWatchType(leafletScope.watchOptions[name].type)) {\n $log.error(errorHeader + ' watchOptions.' + name + '.type is not a valid type.');\n }\n if(isDefined(leafletScope.watchOptions[name].individual)) {\n if(!_isValidWatchType(leafletScope.watchOptions[name].individual.type)) {\n $log.error(errorHeader + ' watchOptions.' + name + '.individual.type is not a valid type.');\n }\n }\n else {\n $log.error(errorHeader + ' watchOptions.' + name + '.type.individual must be defined.');\n }\n }\n });\n }\n }\n };\n}]);\n","angular.module('ui-leaflet')\n.factory('leafletEventsHelpersFactory', function ($rootScope, $q, leafletLogger, leafletHelpers) {\n var safeApply = leafletHelpers.safeApply,\n isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n isArray = leafletHelpers.isArray,\n errorHeader = leafletHelpers.errorHeader,\n $log = leafletLogger;\n\n var EventsHelper = function(rootBroadcastName, lObjectType){\n this.rootBroadcastName = rootBroadcastName;\n $log.debug(\"leafletEventsHelpersFactory: lObjectType: \" + lObjectType + \"rootBroadcastName: \" + rootBroadcastName);\n //used to path/key out certain properties based on the type , \"markers\", \"geojson\"\n this.lObjectType = lObjectType;\n };\n\n EventsHelper.prototype.getAvailableEvents = function(){return [];};\n\n /*\n argument: name: Note this can be a single string or dot notation\n Example:\n markerModel : {\n m1: { lat:_, lon: _}\n }\n //would yield name of\n name = \"m1\"\n\n If nested:\n markerModel : {\n cars: {\n m1: { lat:_, lon: _}\n }\n }\n //would yield name of\n name = \"cars.m1\"\n */\n EventsHelper.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) {\n var _this = this;\n\n maybeMapId = maybeMapId || '';\n if (maybeMapId)\n maybeMapId = '.' + maybeMapId;\n\n return function (e) {\n var broadcastName = _this.rootBroadcastName + maybeMapId + '.' + eventName;\n $log.debug(broadcastName);\n _this.fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName, extra);\n };\n };\n\n EventsHelper.prototype.fire = function(scope, broadcastName, logic, event, lObject, model, modelName, layerName, extra){\n // Safely broadcast the event\n safeApply(scope, function(){\n var toSend = {\n leafletEvent: event,\n leafletObject: lObject,\n modelName: modelName,\n model: model\n };\n if (isDefined(layerName))\n angular.extend(toSend, {layerName: layerName});\n\n if (logic === \"emit\") {\n scope.$emit(broadcastName, toSend);\n } else {\n $rootScope.$broadcast(broadcastName, toSend);\n }\n });\n };\n\n EventsHelper.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName, extra) {\n var events = [];\n var logic = 'emit';\n var _this = this;\n\n if (!isDefined(leafletScope.eventBroadcast)) {\n // Backward compatibility, if no event-broadcast attribute, all events are broadcasted\n events = this.getAvailableEvents();\n } else if (!isObject(leafletScope.eventBroadcast)) {\n // Not a valid object\n $log.error(errorHeader + \"event-broadcast must be an object check your model.\");\n } else {\n // We have a possible valid object\n if (!isDefined(leafletScope.eventBroadcast[_this.lObjectType])) {\n // We do not have events enable/disable do we do nothing (all enabled by default)\n events = this.getAvailableEvents();\n } else if (!isObject(leafletScope.eventBroadcast[_this.lObjectType])) {\n // Not a valid object\n $log.warn(errorHeader + 'event-broadcast.' + [_this.lObjectType] + ' must be an object check your model.');\n } else {\n // We have a possible valid map object\n // Event propadation logic\n if (isDefined(leafletScope.eventBroadcast[this.lObjectType].logic)) {\n // We take care of possible propagation logic\n if (leafletScope.eventBroadcast[_this.lObjectType].logic !== \"emit\" &&\n leafletScope.eventBroadcast[_this.lObjectType].logic !== \"broadcast\")\n $log.warn(errorHeader + \"Available event propagation logic are: 'emit' or 'broadcast'.\");\n }\n // Enable / Disable\n var eventsEnable = false, eventsDisable = false;\n if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].enable) &&\n isArray(leafletScope.eventBroadcast[_this.lObjectType].enable))\n eventsEnable = true;\n if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].disable) &&\n isArray(leafletScope.eventBroadcast[_this.lObjectType].disable))\n eventsDisable = true;\n\n if (eventsEnable && eventsDisable) {\n // Both are active, this is an error\n $log.warn(errorHeader + \"can not enable and disable events at the same time\");\n } else if (!eventsEnable && !eventsDisable) {\n // Both are inactive, this is an error\n $log.warn(errorHeader + \"must enable or disable events\");\n } else {\n // At this point the object is OK, lets enable or disable events\n if (eventsEnable) {\n // Enable events\n leafletScope.eventBroadcast[this.lObjectType].enable.forEach(function(eventName){\n // Do we have already the event enabled?\n if (events.indexOf(eventName) !== -1) {\n // Repeated event, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" is already enabled\");\n } else {\n // Does the event exists?\n if (_this.getAvailableEvents().indexOf(eventName) === -1) {\n // The event does not exists, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist\");\n } else {\n // All ok enable the event\n events.push(eventName);\n }\n }\n });\n } else {\n // Disable events\n events = this.getAvailableEvents();\n leafletScope.eventBroadcast[_this.lObjectType].disable.forEach(function(eventName) {\n var index = events.indexOf(eventName);\n if (index === -1) {\n // The event does not exist\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist or has been already disabled\");\n\n } else {\n events.splice(index, 1);\n }\n });\n }\n }\n }\n }\n\n events.forEach(function(eventName){\n lObject.on(eventName,_this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra));\n });\n return logic;\n };\n\n return EventsHelper;\n})\n.service('leafletEventsHelpers', function(leafletEventsHelpersFactory){\n return new leafletEventsHelpersFactory();\n});\n","angular.module('ui-leaflet')\n.factory('leafletGeoJsonEvents', function ($rootScope, $q, leafletLogger, leafletHelpers,\n leafletEventsHelpersFactory, leafletData) {\n var safeApply = leafletHelpers.safeApply,\n EventsHelper = leafletEventsHelpersFactory;\n // $log = leafletLogger;\n\n var GeoJsonEvents = function(){\n EventsHelper.call(this,'leafletDirectiveGeoJson', 'geojson');\n };\n\n GeoJsonEvents.prototype = new EventsHelper();\n\n GeoJsonEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) {\n var base = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName),\n _this = this;\n\n return function(e){\n if (eventName === 'mouseout') {\n if (extra.resetStyleOnMouseout) {\n leafletData.getGeoJSON(extra.mapId)\n .then(function(leafletGeoJSON){\n //this is broken on nested needs to traverse or user layerName (nested)\n var lobj = layerName? leafletGeoJSON[layerName]: leafletGeoJSON;\n lobj.resetStyle(e.target);\n });\n\n }\n safeApply(leafletScope, function() {\n $rootScope.$broadcast(_this.rootBroadcastName + '.mouseout', e);\n });\n }\n base(e); //common\n };\n };\n\n GeoJsonEvents.prototype.getAvailableEvents = function(){ return [\n 'click',\n 'dblclick',\n 'mouseover',\n 'mouseout',\n ];\n };\n\n return new GeoJsonEvents();\n});\n","angular.module('ui-leaflet')\n.factory('leafletLabelEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory) {\n var Helpers = leafletHelpers,\n EventsHelper = leafletEventsHelpersFactory;\n //$log = leafletLogger;\n\n var LabelEvents = function(){\n EventsHelper.call(this,'leafletDirectiveLabel', 'markers');\n };\n LabelEvents.prototype = new EventsHelper();\n\n LabelEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n var markerName = name.replace('markers.', '');\n return EventsHelper.prototype\n .genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, markerName, model, layerName);\n };\n\n LabelEvents.prototype.getAvailableEvents = function(){\n return [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'contextmenu'\n ];\n };\n\n LabelEvents.prototype.genEvents = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n var _this = this;\n var labelEvents = this.getAvailableEvents();\n var scopeWatchName = Helpers.getObjectArrayPath(\"markers.\" + name);\n labelEvents.forEach(function(eventName) {\n lObject.label.on(eventName, _this.genDispatchEvent(\n maybeMapId, eventName, logic, leafletScope, lObject.label, scopeWatchName, model, layerName));\n });\n };\n\n LabelEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {};\n\n return new LabelEvents();\n});\n","angular.module('ui-leaflet')\n.factory('leafletMapEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpers, leafletIterators) {\n var isDefined = leafletHelpers.isDefined,\n fire = leafletEventsHelpers.fire;\n\n var _getAvailableMapEvents = function() {\n return [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'contextmenu',\n 'focus',\n 'blur',\n 'preclick',\n 'load',\n 'unload',\n 'viewreset',\n 'movestart',\n 'move',\n 'moveend',\n 'dragstart',\n 'drag',\n 'dragend',\n 'zoomstart',\n 'zoomanim',\n 'zoomend',\n 'zoomlevelschange',\n 'resize',\n 'autopanstart',\n 'layeradd',\n 'layerremove',\n 'baselayerchange',\n 'overlayadd',\n 'overlayremove',\n 'locationfound',\n 'locationerror',\n 'popupopen',\n 'popupclose',\n 'draw:created',\n 'draw:edited',\n 'draw:deleted',\n 'draw:drawstart',\n 'draw:drawstop',\n 'draw:editstart',\n 'draw:editstop',\n 'draw:deletestart',\n 'draw:deletestop'\n ];\n };\n\n var _genDispatchMapEvent = function(scope, eventName, logic, maybeMapId) {\n if (maybeMapId)\n maybeMapId = maybeMapId + '.';\n return function(e) {\n // Put together broadcast name\n var broadcastName = 'leafletDirectiveMap.' + maybeMapId + eventName;\n leafletLogger.debug(broadcastName);\n // Safely broadcast the event\n fire(scope, broadcastName, logic, e, e.target, scope);\n };\n };\n\n var _notifyCenterChangedToBounds = function(scope) {\n scope.$broadcast(\"boundsChanged\");\n };\n\n var _notifyCenterUrlHashChanged = function(scope, map, attrs, search) {\n if (!isDefined(attrs.urlHashCenter)) {\n return;\n }\n var center = map.getCenter();\n var centerUrlHash = (center.lat).toFixed(4) + \":\" + (center.lng).toFixed(4) + \":\" + map.getZoom();\n if (!isDefined(search.c) || search.c !== centerUrlHash) {\n //$log.debug(\"notified new center...\");\n scope.$emit(\"centerUrlHash\", centerUrlHash);\n }\n };\n\n var _addEvents = function(map, mapEvents, contextName, scope, logic){\n leafletIterators.each(mapEvents, function(eventName) {\n var context = {};\n context[contextName] = eventName;\n map.on(eventName, _genDispatchMapEvent(scope, eventName, logic, map._container.id || ''), context);\n });\n };\n\n return {\n getAvailableMapEvents: _getAvailableMapEvents,\n genDispatchMapEvent: _genDispatchMapEvent,\n notifyCenterChangedToBounds: _notifyCenterChangedToBounds,\n notifyCenterUrlHashChanged: _notifyCenterUrlHashChanged,\n addEvents: _addEvents\n };\n});\n","angular.module('ui-leaflet')\n.factory('leafletMarkerEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletLabelEvents) {\n var safeApply = leafletHelpers.safeApply,\n isDefined = leafletHelpers.isDefined,\n Helpers = leafletHelpers,\n lblHelp = leafletLabelEvents,\n EventsHelper = leafletEventsHelpersFactory,\n $log = leafletLogger;\n\n var MarkerEvents = function(){\n EventsHelper.call(this,'leafletDirectiveMarker', 'markers');\n };\n\n MarkerEvents.prototype = new EventsHelper();\n\n MarkerEvents.prototype.genDispatchEvent = function(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n var handle = EventsHelper.prototype\n .genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName);\n return function(e){\n // Broadcast old marker click name for backwards compatibility\n if (eventName === \"click\") {\n safeApply(leafletScope, function () {\n $rootScope.$broadcast('leafletDirectiveMarkersClick', name);\n });\n } else if (eventName === 'dragend') {\n safeApply(leafletScope, function () {\n model.lat = lObject.getLatLng().lat;\n model.lng = lObject.getLatLng().lng;\n });\n if (model.message && model.focus === true) {\n lObject.openPopup();\n }\n }\n handle(e); //common\n };\n };\n\n MarkerEvents.prototype.getAvailableEvents = function(){ return [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'contextmenu',\n 'dragstart',\n 'drag',\n 'dragend',\n 'move',\n 'remove',\n 'popupopen',\n 'popupclose',\n 'touchend',\n 'touchstart',\n 'touchmove',\n 'touchcancel',\n 'touchleave'\n ];\n };\n\n MarkerEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {\n var logic = EventsHelper.prototype.bindEvents.call(this, maybeMapId, lObject, name, model, leafletScope, layerName);\n\n if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) {\n lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model, layerName);\n }\n };\n\n return new MarkerEvents();\n});\n","angular.module('ui-leaflet')\n.factory('leafletPathEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletLabelEvents, leafletEventsHelpers) {\n var isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n Helpers = leafletHelpers,\n errorHeader = leafletHelpers.errorHeader,\n lblHelp = leafletLabelEvents,\n fire = leafletEventsHelpers.fire,\n $log = leafletLogger;\n\n /*\n TODO (nmccready) This EventsHelper needs to be derrived from leafletEventsHelpers to elminate copy and paste code.\n */\n\n var _genDispatchPathEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n maybeMapId = maybeMapId || '';\n\n if (maybeMapId)\n maybeMapId = '.' + maybeMapId;\n\n return function (e) {\n var broadcastName = 'leafletDirectivePath' + maybeMapId + '.' + eventName;\n $log.debug(broadcastName);\n fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName);\n };\n };\n\n var _bindPathEvents = function (maybeMapId, lObject, name, model, leafletScope) {\n var pathEvents = [],\n i,\n eventName,\n logic = \"broadcast\";\n\n if (!isDefined(leafletScope.eventBroadcast)) {\n // Backward compatibility, if no event-broadcast attribute, all events are broadcasted\n pathEvents = _getAvailablePathEvents();\n } else if (!isObject(leafletScope.eventBroadcast)) {\n // Not a valid object\n $log.error(errorHeader + \"event-broadcast must be an object check your model.\");\n } else {\n // We have a possible valid object\n if (!isDefined(leafletScope.eventBroadcast.path)) {\n // We do not have events enable/disable do we do nothing (all enabled by default)\n pathEvents = _getAvailablePathEvents();\n } else if (isObject(leafletScope.eventBroadcast.paths)) {\n // Not a valid object\n $log.warn(errorHeader + \"event-broadcast.path must be an object check your model.\");\n } else {\n // We have a possible valid map object\n // Event propadation logic\n if (leafletScope.eventBroadcast.path.logic !== undefined && leafletScope.eventBroadcast.path.logic !== null) {\n // We take care of possible propagation logic\n if (leafletScope.eventBroadcast.path.logic !== \"emit\" && leafletScope.eventBroadcast.path.logic !== \"broadcast\") {\n // This is an error\n $log.warn(errorHeader + \"Available event propagation logic are: 'emit' or 'broadcast'.\");\n } else if (leafletScope.eventBroadcast.path.logic === \"emit\") {\n logic = \"emit\";\n }\n }\n // Enable / Disable\n var pathEventsEnable = false, pathEventsDisable = false;\n if (leafletScope.eventBroadcast.path.enable !== undefined && leafletScope.eventBroadcast.path.enable !== null) {\n if (typeof leafletScope.eventBroadcast.path.enable === 'object') {\n pathEventsEnable = true;\n }\n }\n if (leafletScope.eventBroadcast.path.disable !== undefined && leafletScope.eventBroadcast.path.disable !== null) {\n if (typeof leafletScope.eventBroadcast.path.disable === 'object') {\n pathEventsDisable = true;\n }\n }\n if (pathEventsEnable && pathEventsDisable) {\n // Both are active, this is an error\n $log.warn(errorHeader + \"can not enable and disable events at the same time\");\n } else if (!pathEventsEnable && !pathEventsDisable) {\n // Both are inactive, this is an error\n $log.warn(errorHeader + \"must enable or disable events\");\n } else {\n // At this point the path object is OK, lets enable or disable events\n if (pathEventsEnable) {\n // Enable events\n for (i = 0; i < leafletScope.eventBroadcast.path.enable.length; i++) {\n eventName = leafletScope.eventBroadcast.path.enable[i];\n // Do we have already the event enabled?\n if (pathEvents.indexOf(eventName) !== -1) {\n // Repeated event, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" is already enabled\");\n } else {\n // Does the event exists?\n if (_getAvailablePathEvents().indexOf(eventName) === -1) {\n // The event does not exists, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist\");\n } else {\n // All ok enable the event\n pathEvents.push(eventName);\n }\n }\n }\n } else {\n // Disable events\n pathEvents = _getAvailablePathEvents();\n for (i = 0; i < leafletScope.eventBroadcast.path.disable.length; i++) {\n eventName = leafletScope.eventBroadcast.path.disable[i];\n var index = pathEvents.indexOf(eventName);\n if (index === -1) {\n // The event does not exist\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist or has been already disabled\");\n\n } else {\n pathEvents.splice(index, 1);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < pathEvents.length; i++) {\n eventName = pathEvents[i];\n lObject.on(eventName, _genDispatchPathEvent(maybeMapId, eventName, logic, leafletScope, pathEvents, name));\n }\n\n if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) {\n lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model);\n }\n };\n\n var _getAvailablePathEvents = function () {\n return [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'contextmenu',\n 'add',\n 'remove',\n 'popupopen',\n 'popupclose'\n ];\n };\n\n return {\n getAvailablePathEvents: _getAvailablePathEvents,\n bindPathEvents: _bindPathEvents\n };\n});\n"]} \ No newline at end of file +{"version":3,"sources":["src/directives/leaflet.js","src/services/leafletBoundsHelpers.js","src/services/leafletControlHelpers.js","src/services/leafletData.js","src/services/leafletDirectiveControlsHelpers.js","src/services/leafletGeoJsonHelpers.js","src/services/leafletHelpers.js","src/services/leafletIterators.js","src/services/leafletLayerHelpers.js","src/services/leafletLegendHelpers.js","src/services/leafletMapDefaults.js","src/services/leafletMarkersHelpers.js","src/services/leafletPathsHelpers.js","src/services/leafletWatchHelpers.js","src/services/logger.js","src/services/nominatim.js","src/directives/bounds.js","src/directives/center.js","src/directives/controls.js","src/directives/decorations.js","src/directives/eventBroadcast.js","src/directives/geojson.js","src/directives/layercontrol.js","src/directives/layers.js","src/directives/legend.js","src/directives/markers.js","src/directives/maxbounds.js","src/directives/paths.js","src/directives/tiles.js","src/directives/watchOptions.js","src/services/events/leafletEventsHelpers.js","src/services/events/leafletGeoJsonEvents.js","src/services/events/leafletLabelEvents.js","src/services/events/leafletMapEvents.js","src/services/events/leafletMarkerEvents.js","src/services/events/leafletPathEvents.js"],"names":[],"mappings":"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","file":"ui-leaflet_dev_mapped.js","sourcesContent":["'use strict';\n\nangular.module('ui-leaflet', ['nemLogging']).directive('leaflet', function ($q, leafletData, leafletMapDefaults, leafletHelpers, leafletMapEvents) {\n return {\n restrict: \"EA\",\n replace: true,\n scope: {\n center: '=',\n lfCenter: '=',\n defaults: '=',\n maxbounds: '=',\n bounds: '=',\n markers: '=',\n legend: '=',\n geojson: '=',\n paths: '=',\n tiles: '=',\n layers: '=',\n controls: '=',\n decorations: '=',\n eventBroadcast: '=',\n watchOptions: '='\n },\n transclude: true,\n template: '
',\n controller: function controller($scope) {\n this._leafletMap = $q.defer();\n this.getMap = function () {\n return this._leafletMap.promise;\n };\n\n this.getLeafletScope = function () {\n return $scope;\n };\n },\n\n link: function link(scope, element, attrs, ctrl) {\n var isDefined = leafletHelpers.isDefined,\n defaults = leafletMapDefaults.setDefaults(scope.defaults, attrs.id),\n mapEvents = leafletMapEvents.getAvailableMapEvents(),\n addEvents = leafletMapEvents.addEvents;\n\n scope.mapId = attrs.id;\n leafletData.setDirectiveControls({}, attrs.id);\n\n // Set width and height utility functions\n function updateWidth() {\n if (isNaN(attrs.width)) {\n element.css('width', attrs.width);\n } else {\n element.css('width', attrs.width + 'px');\n }\n }\n\n function updateHeight() {\n if (isNaN(attrs.height)) {\n element.css('height', attrs.height);\n } else {\n element.css('height', attrs.height + 'px');\n }\n }\n\n // If the width attribute defined update css\n // Then watch if bound property changes and update css\n if (isDefined(attrs.width)) {\n updateWidth();\n\n scope.$watch(function () {\n return element[0].getAttribute('width');\n }, function () {\n updateWidth();\n map.invalidateSize();\n });\n }\n\n // If the height attribute defined update css\n // Then watch if bound property changes and update css\n if (isDefined(attrs.height)) {\n updateHeight();\n\n scope.$watch(function () {\n return element[0].getAttribute('height');\n }, function () {\n updateHeight();\n map.invalidateSize();\n });\n }\n\n // Create the Leaflet Map Object with the options\n var map = new L.Map(element[0], leafletMapDefaults.getMapCreationDefaults(attrs.id));\n ctrl._leafletMap.resolve(map);\n\n if (!isDefined(attrs.center) && !isDefined(attrs.lfCenter)) {\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n }\n\n // If no layers nor tiles defined, set the default tileLayer\n if (!isDefined(attrs.tiles) && !isDefined(attrs.layers)) {\n var tileLayerObj = L.tileLayer(defaults.tileLayer, defaults.tileLayerOptions);\n tileLayerObj.addTo(map);\n leafletData.setTiles(tileLayerObj, attrs.id);\n }\n\n // Set zoom control configuration\n if (isDefined(map.zoomControl) && isDefined(defaults.zoomControlPosition)) {\n map.zoomControl.setPosition(defaults.zoomControlPosition);\n }\n\n if (isDefined(map.zoomControl) && defaults.zoomControl === false) {\n map.zoomControl.removeFrom(map);\n }\n\n if (isDefined(map.zoomsliderControl) && isDefined(defaults.zoomsliderControl) && defaults.zoomsliderControl === false) {\n map.zoomsliderControl.removeFrom(map);\n }\n\n // if no event-broadcast attribute, all events are broadcasted\n if (!isDefined(attrs.eventBroadcast)) {\n var logic = \"broadcast\";\n addEvents(map, mapEvents, \"eventName\", scope, logic);\n }\n\n // Resolve the map object to the promises\n map.whenReady(function () {\n leafletData.setMap(map, attrs.id);\n });\n\n scope.$on('$destroy', function () {\n leafletMapDefaults.reset();\n map.remove();\n leafletData.unresolveMap(attrs.id);\n });\n\n //Handle request to invalidate the map size\n //Up scope using $scope.$emit('invalidateSize')\n //Down scope using $scope.$broadcast('invalidateSize')\n scope.$on('invalidateSize', function () {\n map.invalidateSize();\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletBoundsHelpers', function (leafletLogger, leafletHelpers) {\n\n var isArray = leafletHelpers.isArray,\n isNumber = leafletHelpers.isNumber,\n isFunction = leafletHelpers.isFunction,\n isDefined = leafletHelpers.isDefined,\n $log = leafletLogger;\n\n function _isValidBounds(bounds) {\n return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) && angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) && angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) && angular.isNumber(bounds.northEast.lng);\n }\n\n return {\n createLeafletBounds: function createLeafletBounds(bounds) {\n if (_isValidBounds(bounds)) {\n return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng], [bounds.northEast.lat, bounds.northEast.lng]);\n }\n },\n\n isValidBounds: _isValidBounds,\n\n createBoundsFromArray: function createBoundsFromArray(boundsArray) {\n if (!(isArray(boundsArray) && boundsArray.length === 2 && isArray(boundsArray[0]) && isArray(boundsArray[1]) && boundsArray[0].length === 2 && boundsArray[1].length === 2 && isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) && isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) {\n $log.error(\"[AngularJS - Leaflet] The bounds array is not valid.\");\n return;\n }\n\n return {\n northEast: {\n lat: boundsArray[0][0],\n lng: boundsArray[0][1]\n },\n southWest: {\n lat: boundsArray[1][0],\n lng: boundsArray[1][1]\n }\n };\n },\n\n createBoundsFromLeaflet: function createBoundsFromLeaflet(lfBounds) {\n if (!(isDefined(lfBounds) && isFunction(lfBounds.getNorthEast) && isFunction(lfBounds.getSouthWest))) {\n $log.error(\"[AngularJS - Leaflet] The leaflet bounds is not valid object.\");\n return;\n }\n\n var northEast = lfBounds.getNorthEast(),\n southWest = lfBounds.getSouthWest();\n\n return {\n northEast: {\n lat: northEast.lat,\n lng: northEast.lng\n },\n southWest: {\n lat: southWest.lat,\n lng: southWest.lng\n }\n };\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletControlHelpers', function ($rootScope, leafletLogger, leafletHelpers, leafletLayerHelpers, leafletMapDefaults) {\n var isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n createLayer = leafletLayerHelpers.createLayer,\n _controls = {},\n errorHeader = leafletHelpers.errorHeader + ' [Controls] ',\n $log = leafletLogger;\n\n var _controlLayersMustBeVisible = function _controlLayersMustBeVisible(baselayers, overlays, mapId) {\n var defaults = leafletMapDefaults.getDefaults(mapId);\n if (!defaults.controls.layers.visible) {\n return false;\n }\n\n var atLeastOneControlItemMustBeShown = false;\n\n if (isObject(baselayers)) {\n Object.keys(baselayers).forEach(function (key) {\n var layer = baselayers[key];\n if (!isDefined(layer.layerOptions) || layer.layerOptions.showOnSelector !== false) {\n atLeastOneControlItemMustBeShown = true;\n }\n });\n }\n\n if (isObject(overlays)) {\n Object.keys(overlays).forEach(function (key) {\n var layer = overlays[key];\n if (!isDefined(layer.layerParams) || layer.layerParams.showOnSelector !== false) {\n atLeastOneControlItemMustBeShown = true;\n }\n });\n }\n\n return atLeastOneControlItemMustBeShown;\n };\n\n var _createLayersControl = function _createLayersControl(mapId) {\n var defaults = leafletMapDefaults.getDefaults(mapId);\n var controlOptions = {\n collapsed: defaults.controls.layers.collapsed,\n position: defaults.controls.layers.position,\n autoZIndex: false\n };\n\n angular.extend(controlOptions, defaults.controls.layers.options);\n\n var control;\n if (defaults.controls.layers && isDefined(defaults.controls.layers.control)) {\n control = defaults.controls.layers.control.apply(this, [[], [], controlOptions]);\n } else {\n control = new L.control.layers([], [], controlOptions);\n }\n\n return control;\n };\n\n var controlTypes = {\n draw: {\n isPluginLoaded: function isPluginLoaded() {\n if (!angular.isDefined(L.Control.Draw)) {\n $log.error(errorHeader + ' Draw plugin is not loaded.');\n return false;\n }\n return true;\n },\n checkValidParams: function checkValidParams() /* params */{\n return true;\n },\n createControl: function createControl(params) {\n return new L.Control.Draw(params);\n }\n },\n scale: {\n isPluginLoaded: function isPluginLoaded() {\n return true;\n },\n checkValidParams: function checkValidParams() /* params */{\n return true;\n },\n createControl: function createControl(params) {\n return new L.control.scale(params);\n }\n },\n fullscreen: {\n isPluginLoaded: function isPluginLoaded() {\n if (!angular.isDefined(L.Control.Fullscreen)) {\n $log.error(errorHeader + ' Fullscreen plugin is not loaded.');\n return false;\n }\n return true;\n },\n checkValidParams: function checkValidParams() /* params */{\n return true;\n },\n createControl: function createControl(params) {\n return new L.Control.Fullscreen(params);\n }\n },\n search: {\n isPluginLoaded: function isPluginLoaded() {\n if (!angular.isDefined(L.Control.Search)) {\n $log.error(errorHeader + ' Search plugin is not loaded.');\n return false;\n }\n return true;\n },\n checkValidParams: function checkValidParams() /* params */{\n return true;\n },\n createControl: function createControl(params) {\n return new L.Control.Search(params);\n }\n },\n custom: {},\n minimap: {\n isPluginLoaded: function isPluginLoaded() {\n if (!angular.isDefined(L.Control.MiniMap)) {\n $log.error(errorHeader + ' Minimap plugin is not loaded.');\n return false;\n }\n\n return true;\n },\n checkValidParams: function checkValidParams(params) {\n if (!isDefined(params.layer)) {\n $log.warn(errorHeader + ' minimap \"layer\" option should be defined.');\n return false;\n }\n return true;\n },\n createControl: function createControl(params) {\n var layer = createLayer(params.layer);\n\n if (!isDefined(layer)) {\n $log.warn(errorHeader + ' minimap control \"layer\" could not be created.');\n return;\n }\n\n return new L.Control.MiniMap(layer, params);\n }\n }\n };\n\n return {\n layersControlMustBeVisible: _controlLayersMustBeVisible,\n\n isValidControlType: function isValidControlType(type) {\n return Object.keys(controlTypes).indexOf(type) !== -1;\n },\n\n createControl: function createControl(type, params) {\n if (!controlTypes[type].checkValidParams(params)) {\n return;\n }\n\n return controlTypes[type].createControl(params);\n },\n\n updateLayersControl: function updateLayersControl(map, mapId, loaded, baselayers, overlays, leafletLayers) {\n var i;\n var _layersControl = _controls[mapId];\n var mustBeLoaded = _controlLayersMustBeVisible(baselayers, overlays, mapId);\n\n if (isDefined(_layersControl) && loaded) {\n for (i in leafletLayers.baselayers) {\n _layersControl.removeLayer(leafletLayers.baselayers[i]);\n }\n for (i in leafletLayers.overlays) {\n _layersControl.removeLayer(leafletLayers.overlays[i]);\n }\n map.removeControl(_layersControl);\n delete _controls[mapId];\n }\n\n if (mustBeLoaded) {\n _layersControl = _createLayersControl(mapId);\n _controls[mapId] = _layersControl;\n for (i in baselayers) {\n var hideOnSelector = isDefined(baselayers[i].layerOptions) && baselayers[i].layerOptions.showOnSelector === false;\n if (!hideOnSelector && isDefined(leafletLayers.baselayers[i])) {\n _layersControl.addBaseLayer(leafletLayers.baselayers[i], baselayers[i].name);\n }\n }\n for (i in overlays) {\n var hideOverlayOnSelector = isDefined(overlays[i].layerParams) && overlays[i].layerParams.showOnSelector === false;\n if (!hideOverlayOnSelector && isDefined(leafletLayers.overlays[i])) {\n _layersControl.addOverlay(leafletLayers.overlays[i], overlays[i].name);\n }\n }\n\n map.addControl(_layersControl);\n }\n return mustBeLoaded;\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletData', function (leafletLogger, $q, leafletHelpers) {\n var getDefer = leafletHelpers.getDefer,\n getUnresolvedDefer = leafletHelpers.getUnresolvedDefer,\n setResolvedDefer = leafletHelpers.setResolvedDefer;\n // $log = leafletLogger;\n\n var _private = {};\n var self = this;\n\n var upperFirst = function upperFirst(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n };\n\n var _privateItems = ['map', 'tiles', 'layers', 'paths', 'markers', 'geoJSON', 'UTFGrid', //odd ball on naming convention keeping to not break\n 'decorations', 'directiveControls'];\n\n //init\n _privateItems.forEach(function (itemName) {\n _private[itemName] = {};\n });\n\n this.unresolveMap = function (scopeId) {\n var id = leafletHelpers.obtainEffectiveMapId(_private.map, scopeId);\n _privateItems.forEach(function (itemName) {\n _private[itemName][id] = undefined;\n });\n };\n\n //int repetitive stuff (get and sets)\n _privateItems.forEach(function (itemName) {\n var name = upperFirst(itemName);\n self['set' + name] = function (lObject, scopeId) {\n var defer = getUnresolvedDefer(_private[itemName], scopeId);\n defer.resolve(lObject);\n setResolvedDefer(_private[itemName], scopeId);\n };\n\n self['get' + name] = function (scopeId) {\n var defer = getDefer(_private[itemName], scopeId);\n return defer.promise;\n };\n });\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletDirectiveControlsHelpers', function (leafletLogger, leafletData, leafletHelpers) {\n var _isDefined = leafletHelpers.isDefined,\n _isString = leafletHelpers.isString,\n _isObject = leafletHelpers.isObject,\n _mainErrorHeader = leafletHelpers.errorHeader,\n $log = leafletLogger;\n\n var _errorHeader = _mainErrorHeader + '[leafletDirectiveControlsHelpers';\n\n var _extend = function _extend(id, thingToAddName, createFn, cleanFn) {\n var _fnHeader = _errorHeader + '.extend] ';\n var extender = {};\n if (!_isDefined(thingToAddName)) {\n $log.error(_fnHeader + 'thingToAddName cannot be undefined');\n return;\n }\n\n if (_isString(thingToAddName) && _isDefined(createFn) && _isDefined(cleanFn)) {\n extender[thingToAddName] = {\n create: createFn,\n clean: cleanFn\n };\n } else if (_isObject(thingToAddName) && !_isDefined(createFn) && !_isDefined(cleanFn)) {\n extender = thingToAddName;\n } else {\n $log.error(_fnHeader + 'incorrect arguments');\n return;\n }\n\n //add external control to create / destroy markers without a watch\n leafletData.getDirectiveControls().then(function (controls) {\n angular.extend(controls, extender);\n leafletData.setDirectiveControls(controls, id);\n });\n };\n\n return {\n extend: _extend\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletGeoJsonHelpers', function (leafletHelpers, leafletIterators) {\n var lHlp = leafletHelpers,\n lIt = leafletIterators;\n var Point = function Point(lat, lng) {\n this.lat = lat;\n this.lng = lng;\n return this;\n };\n\n var _getLat = function _getLat(value) {\n if (Array.isArray(value) && value.length === 2) {\n return value[1];\n } else if (lHlp.isDefined(value.type) && value.type === 'Point') {\n return +value.coordinates[1];\n } else {\n return +value.lat;\n }\n };\n\n var _getLng = function _getLng(value) {\n if (Array.isArray(value) && value.length === 2) {\n return value[0];\n } else if (lHlp.isDefined(value.type) && value.type === 'Point') {\n return +value.coordinates[0];\n } else {\n return +value.lng;\n }\n };\n\n var _validateCoords = function _validateCoords(coords) {\n if (lHlp.isUndefined(coords)) {\n return false;\n }\n if (lHlp.isArray(coords)) {\n if (coords.length === 2 && lHlp.isNumber(coords[0]) && lHlp.isNumber(coords[1])) {\n return true;\n }\n } else if (lHlp.isDefined(coords.type)) {\n if (coords.type === 'Point' && lHlp.isArray(coords.coordinates) && coords.coordinates.length === 2 && lHlp.isNumber(coords.coordinates[0]) && lHlp.isNumber(coords.coordinates[1])) {\n return true;\n }\n }\n\n var ret = lIt.all(['lat', 'lng'], function (pos) {\n return lHlp.isDefined(coords[pos]) && lHlp.isNumber(coords[pos]);\n });\n return ret;\n };\n\n var _getCoords = function _getCoords(value) {\n if (!value || !_validateCoords(value)) {\n return;\n }\n var p = null;\n if (Array.isArray(value) && value.length === 2) {\n p = new Point(value[1], value[0]);\n } else if (lHlp.isDefined(value.type) && value.type === 'Point') {\n p = new Point(value.coordinates[1], value.coordinates[0]);\n } else {\n return value;\n }\n //note angular.merge is avail in angular 1.4.X we might want to fill it here\n return angular.extend(value, p); //tap on lat, lng if it doesnt exist\n };\n\n return {\n getLat: _getLat,\n getLng: _getLng,\n validateCoords: _validateCoords,\n getCoords: _getCoords\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) {\n var _errorHeader = '[ui-leaflet] ';\n var _copy = angular.copy;\n var _clone = _copy;\n /*\n For parsing paths to a field in an object\n Example:\n var obj = {\n bike:{\n 1: 'hi'\n 2: 'foo'\n }\n };\n _getObjectValue(obj,\"bike.1\") returns 'hi'\n this is getPath in ui-gmap\n */\n var _getObjectValue = function _getObjectValue(object, pathStr) {\n var obj;\n if (!object || !angular.isObject(object)) return;\n //if the key is not a sting then we already have the value\n if (pathStr === null || !angular.isString(pathStr)) {\n return pathStr;\n }\n obj = object;\n pathStr.split('.').forEach(function (value) {\n if (obj) {\n obj = obj[value];\n }\n });\n return obj;\n };\n\n /*\n Object Array Notation\n _getObjectArrayPath(\"bike.one.two\")\n returns:\n 'bike[\"one\"][\"two\"]'\n */\n var _getObjectArrayPath = function _getObjectArrayPath(pathStr) {\n return pathStr.split('.').reduce(function (previous, current) {\n return previous + '[\"' + current + '\"]';\n });\n };\n\n /* Object Dot Notation\n _getObjectPath([\"bike\",\"one\",\"two\"])\n returns:\n \"bike.one.two\"\n */\n var _getObjectDotPath = function _getObjectDotPath(arrayOfStrings) {\n return arrayOfStrings.reduce(function (previous, current) {\n return previous + '.' + current;\n });\n };\n\n function _obtainEffectiveMapId(d, mapId) {\n var id, i;\n if (!angular.isDefined(mapId)) {\n if (Object.keys(d).length === 0) {\n id = \"main\";\n } else if (Object.keys(d).length >= 1) {\n for (i in d) {\n if (d.hasOwnProperty(i)) {\n id = i;\n }\n }\n } else {\n $log.error(_errorHeader + \"- You have more than 1 map on the DOM, you must provide the map ID to the leafletData.getXXX call\");\n }\n } else {\n id = mapId;\n }\n\n return id;\n }\n\n function _getUnresolvedDefer(d, mapId) {\n var id = _obtainEffectiveMapId(d, mapId),\n defer;\n\n if (!angular.isDefined(d[id]) || d[id].resolvedDefer === true) {\n defer = $q.defer();\n d[id] = {\n defer: defer,\n resolvedDefer: false\n };\n } else {\n defer = d[id].defer;\n }\n\n return defer;\n }\n\n var _isDefined = function _isDefined(value) {\n return angular.isDefined(value) && value !== null;\n };\n var _isUndefined = function _isUndefined(value) {\n return !_isDefined(value);\n };\n\n // BEGIN DIRECT PORT FROM AngularJS code base\n\n var SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\n\n var MOZ_HACK_REGEXP = /^moz([A-Z])/;\n\n var PREFIX_REGEXP = /^((?:x|data)[\\:\\-_])/i;\n\n /**\n Converts snake_case to camelCase.\n Also there is special case for Moz prefix starting with upper case letter.\n @param name Name to normalize\n */\n\n var camelCase = function camelCase(name) {\n return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) {\n if (offset) {\n return letter.toUpperCase();\n } else {\n return letter;\n }\n }).replace(MOZ_HACK_REGEXP, \"Moz$1\");\n };\n\n /**\n Converts all accepted directives format into proper directive name.\n @param name Name to normalize\n */\n\n var directiveNormalize = function directiveNormalize(name) {\n return camelCase(name.replace(PREFIX_REGEXP, \"\"));\n };\n\n // END AngularJS port\n\n return {\n camelCase: camelCase,\n directiveNormalize: directiveNormalize,\n copy: _copy,\n clone: _clone,\n errorHeader: _errorHeader,\n getObjectValue: _getObjectValue,\n getObjectArrayPath: _getObjectArrayPath,\n getObjectDotPath: _getObjectDotPath,\n defaultTo: function defaultTo(val, _default) {\n return _isDefined(val) ? val : _default;\n },\n //mainly for checking attributes of directives lets keep this minimal (on what we accept)\n isTruthy: function isTruthy(val) {\n return val === 'true' || val === true;\n },\n //Determine if a reference is {}\n isEmpty: function isEmpty(value) {\n return Object.keys(value).length === 0;\n },\n\n //Determine if a reference is undefined or {}\n isUndefinedOrEmpty: function isUndefinedOrEmpty(value) {\n return angular.isUndefined(value) || value === null || Object.keys(value).length === 0;\n },\n\n // Determine if a reference is defined\n isDefined: _isDefined,\n isUndefined: _isUndefined,\n isNumber: angular.isNumber,\n isString: angular.isString,\n isArray: angular.isArray,\n isObject: angular.isObject,\n isFunction: angular.isFunction,\n equals: angular.equals,\n\n isValidCenter: function isValidCenter(center) {\n return angular.isDefined(center) && angular.isNumber(center.lat) && angular.isNumber(center.lng) && angular.isNumber(center.zoom);\n },\n\n isValidPoint: function isValidPoint(point) {\n if (!angular.isDefined(point)) {\n return false;\n }\n if (angular.isArray(point)) {\n return point.length === 2 && angular.isNumber(point[0]) && angular.isNumber(point[1]);\n }\n return angular.isNumber(point.lat) && angular.isNumber(point.lng);\n },\n\n isSameCenterOnMap: function isSameCenterOnMap(centerModel, map) {\n var mapCenter = map.getCenter();\n var zoom = map.getZoom();\n if (centerModel.lat && centerModel.lng && mapCenter.lat.toFixed(4) === centerModel.lat.toFixed(4) && mapCenter.lng.toFixed(4) === centerModel.lng.toFixed(4) && zoom === centerModel.zoom) {\n return true;\n }\n return false;\n },\n\n safeApply: function safeApply($scope, fn) {\n var phase = $scope.$root.$$phase;\n if (phase === '$apply' || phase === '$digest') {\n $scope.$eval(fn);\n } else {\n $scope.$evalAsync(fn);\n }\n },\n\n obtainEffectiveMapId: _obtainEffectiveMapId,\n\n getDefer: function getDefer(d, mapId) {\n var id = _obtainEffectiveMapId(d, mapId),\n defer;\n if (!angular.isDefined(d[id]) || d[id].resolvedDefer === false) {\n defer = _getUnresolvedDefer(d, mapId);\n } else {\n defer = d[id].defer;\n }\n return defer;\n },\n\n getUnresolvedDefer: _getUnresolvedDefer,\n\n setResolvedDefer: function setResolvedDefer(d, mapId) {\n var id = _obtainEffectiveMapId(d, mapId);\n d[id].resolvedDefer = true;\n },\n\n rangeIsSupported: function rangeIsSupported() {\n var testrange = document.createElement('input');\n testrange.setAttribute('type', 'range');\n return testrange.type === 'range';\n },\n\n FullScreenControlPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.Control.Fullscreen);\n }\n },\n\n MiniMapControlPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.Control.MiniMap);\n }\n },\n\n AwesomeMarkersPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.AwesomeMarkers) && angular.isDefined(L.AwesomeMarkers.Icon);\n },\n is: function is(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.AwesomeMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function equal(iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n\n VectorMarkersPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.VectorMarkers) && angular.isDefined(L.VectorMarkers.Icon);\n },\n is: function is(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.VectorMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function equal(iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n\n DomMarkersPlugin: {\n isLoaded: function isLoaded() {\n if (angular.isDefined(L.DomMarkers) && angular.isDefined(L.DomMarkers.Icon)) {\n return true;\n } else {\n return false;\n }\n },\n is: function is(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.DomMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function equal(iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n\n PolylineDecoratorPlugin: {\n isLoaded: function isLoaded() {\n if (angular.isDefined(L.PolylineDecorator)) {\n return true;\n } else {\n return false;\n }\n },\n is: function is(decoration) {\n if (this.isLoaded()) {\n return decoration instanceof L.PolylineDecorator;\n } else {\n return false;\n }\n },\n equal: function equal(decorationA, decorationB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(decorationA)) {\n return angular.equals(decorationA, decorationB);\n } else {\n return false;\n }\n }\n },\n\n MakiMarkersPlugin: {\n isLoaded: function isLoaded() {\n if (angular.isDefined(L.MakiMarkers) && angular.isDefined(L.MakiMarkers.Icon)) {\n return true;\n } else {\n return false;\n }\n },\n is: function is(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.MakiMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function equal(iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n ExtraMarkersPlugin: {\n isLoaded: function isLoaded() {\n if (angular.isDefined(L.ExtraMarkers) && angular.isDefined(L.ExtraMarkers.Icon)) {\n return true;\n } else {\n return false;\n }\n },\n is: function is(icon) {\n if (this.isLoaded()) {\n return icon instanceof L.ExtraMarkers.Icon;\n } else {\n return false;\n }\n },\n equal: function equal(iconA, iconB) {\n if (!this.isLoaded()) {\n return false;\n }\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n LabelPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.Label);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.MarkerClusterGroup;\n } else {\n return false;\n }\n }\n },\n MarkerClusterPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.MarkerClusterGroup);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.MarkerClusterGroup;\n } else {\n return false;\n }\n }\n },\n GoogleLayerPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.Google);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.Google;\n } else {\n return false;\n }\n }\n },\n LeafletProviderPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.TileLayer.Provider);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.TileLayer.Provider;\n } else {\n return false;\n }\n }\n },\n ChinaLayerPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.tileLayer.chinaProvider);\n }\n },\n HeatLayerPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.heatLayer);\n }\n },\n WebGLHeatMapLayerPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.TileLayer.WebGLHeatMap);\n }\n },\n BingLayerPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.BingLayer);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.BingLayer;\n } else {\n return false;\n }\n }\n },\n WFSLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.GeoJSON.WFS !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.GeoJSON.WFS;\n } else {\n return false;\n }\n }\n },\n AGSBaseLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.basemapLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.basemapLayer;\n } else {\n return false;\n }\n }\n },\n AGSLayerPlugin: {\n isLoaded: function isLoaded() {\n return lvector !== undefined && lvector.AGS !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof lvector.AGS;\n } else {\n return false;\n }\n }\n },\n AGSFeatureLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.featureLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.featureLayer;\n } else {\n return false;\n }\n }\n },\n AGSTiledMapLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.tiledMapLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.tiledMapLayer;\n } else {\n return false;\n }\n }\n },\n AGSDynamicMapLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.dynamicMapLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.dynamicMapLayer;\n } else {\n return false;\n }\n }\n },\n AGSImageMapLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.imageMapLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.imageMapLayer;\n } else {\n return false;\n }\n }\n },\n AGSClusteredLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.clusteredFeatureLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.clusteredFeatureLayer;\n } else {\n return false;\n }\n }\n },\n AGSHeatmapLayerPlugin: {\n isLoaded: function isLoaded() {\n return L.esri !== undefined && L.esri.heatmapFeatureLayer !== undefined;\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.esri.heatmapFeatureLayer;\n } else {\n return false;\n }\n }\n },\n YandexLayerPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.Yandex);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.Yandex;\n } else {\n return false;\n }\n }\n },\n GeoJSONPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.TileLayer.GeoJSON);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.TileLayer.GeoJSON;\n } else {\n return false;\n }\n }\n },\n UTFGridPlugin: {\n isLoaded: function isLoaded() {\n return angular.isDefined(L.UtfGrid);\n },\n is: function is(layer) {\n if (this.isLoaded()) {\n return layer instanceof L.UtfGrid;\n } else {\n $log.error('[AngularJS - Leaflet] No UtfGrid plugin found.');\n return false;\n }\n }\n },\n CartoDB: {\n isLoaded: function isLoaded() {\n return cartodb;\n },\n is: function is() /*layer*/{\n return true;\n /*\n if (this.isLoaded()) {\n return layer instanceof L.TileLayer.GeoJSON;\n } else {\n return false;\n }*/\n }\n },\n Leaflet: {\n DivIcon: {\n is: function is(icon) {\n return icon instanceof L.DivIcon;\n },\n equal: function equal(iconA, iconB) {\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n },\n Icon: {\n is: function is(icon) {\n return icon instanceof L.Icon;\n },\n equal: function equal(iconA, iconB) {\n if (this.is(iconA)) {\n return angular.equals(iconA, iconB);\n } else {\n return false;\n }\n }\n }\n },\n /*\n watchOptions - object to set deep nested watches and turn off watches all together\n (rely on control / functional updates)\n watchOptions - Object\n type: string. //One of ['watch', 'watchCollection', 'watchDeep', null]\n individual\n type: string\n */\n //legacy defaults\n watchOptions: {\n type: 'watchDeep',\n individual: {\n type: 'watchDeep'\n }\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletIterators', function (leafletLogger, leafletHelpers) {\n\n var lHlp = leafletHelpers,\n errorHeader = leafletHelpers.errorHeader + 'leafletIterators: ';\n\n //BEGIN COPY from underscore\n var _keys = Object.keys;\n var _isFunction = lHlp.isFunction;\n var _isObject = lHlp.isObject;\n var $log = leafletLogger;\n\n // Helper for collection methods to determine whether a collection\n // should be iterated as an array or as an object\n // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n\n var _isArrayLike = function _isArrayLike(collection) {\n var length = collection !== null && collection.length;\n return lHlp.isNumber(length) && length >= 0 && length <= MAX_ARRAY_INDEX;\n };\n\n // Keep the identity function around for default iteratees.\n var _identity = function _identity(value) {\n return value;\n };\n\n var _property = function _property(key) {\n return function (obj) {\n return obj === null ? void 0 : obj[key];\n };\n };\n\n // Internal function that returns an efficient (for current engines) version\n // of the passed-in callback, to be repeatedly applied in other Underscore\n // functions.\n var optimizeCb = function optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount === null ? 3 : argCount) {\n case 1:\n return function (value) {\n return func.call(context, value);\n };\n case 2:\n return function (value, other) {\n return func.call(context, value, other);\n };\n case 3:\n return function (value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4:\n return function (accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function () {\n return func.apply(context, arguments);\n };\n };\n\n // An internal function for creating assigner functions.\n var createAssigner = function createAssigner(keysFunc, undefinedOnly) {\n return function (obj) {\n var length = arguments.length;\n if (length < 2 || obj === null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n keys = keysFunc(source),\n l = keys.length;\n for (var i = 0; i < l; i++) {\n var key = keys[i];\n if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n };\n\n // Assigns a given object with all the own properties in the passed-in object(s)\n // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n var _extendOwn,\n _assign = null;\n _extendOwn = _assign = createAssigner(_keys);\n\n // Returns whether an object has a given set of `key:value` pairs.\n var _isMatch = function _isMatch(object, attrs) {\n var keys = _keys(attrs),\n length = keys.length;\n if (object === null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n };\n\n // Returns a predicate for checking whether an object has a given set of\n // `key:value` pairs.\n var _matcher,\n _matches = null;\n _matcher = _matches = function (attrs) {\n attrs = _extendOwn({}, attrs);\n return function (obj) {\n return _isMatch(obj, attrs);\n };\n };\n\n // A mostly-internal function to generate callbacks that can be applied\n // to each element in a collection, returning the desired result — either\n // identity, an arbitrary callback, a property matcher, or a property accessor.\n var cb = function cb(value, context, argCount) {\n if (value === null) return _identity;\n if (_isFunction(value)) return optimizeCb(value, context, argCount);\n if (_isObject(value)) return _matcher(value);\n return _property(value);\n };\n\n var _every,\n _all = null;\n _every = _all = function (obj, predicate, context) {\n predicate = cb(predicate, context);\n var keys = !_isArrayLike(obj) && _keys(obj),\n length = (keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = keys ? keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n };\n\n //END COPY fron underscore\n\n var _hasErrors = function _hasErrors(collection, cb, ignoreCollection, cbName) {\n if (!ignoreCollection) {\n if (!lHlp.isDefined(collection) || !lHlp.isDefined(cb)) {\n return true;\n }\n }\n if (!lHlp.isFunction(cb)) {\n cbName = lHlp.defaultTo(cb, 'cb');\n $log.error(errorHeader + cbName + ' is not a function');\n return true;\n }\n return false;\n };\n\n var _iterate = function _iterate(collection, externalCb, internalCb) {\n if (_hasErrors(undefined, internalCb, true, 'internalCb')) {\n return;\n }\n if (!_hasErrors(collection, externalCb)) {\n for (var key in collection) {\n if (collection.hasOwnProperty(key)) {\n internalCb(collection[key], key);\n }\n }\n }\n };\n\n //see http://jsperf.com/iterators/3\n //utilizing for in is way faster\n var _each = function _each(collection, cb) {\n _iterate(collection, cb, function (val, key) {\n cb(val, key);\n });\n };\n\n return {\n each: _each,\n forEach: _each,\n every: _every,\n all: _all\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletLayerHelpers', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletIterators) {\n var Helpers = leafletHelpers;\n var isString = leafletHelpers.isString;\n var isObject = leafletHelpers.isObject;\n var isArray = leafletHelpers.isArray;\n var isDefined = leafletHelpers.isDefined;\n var errorHeader = leafletHelpers.errorHeader;\n var $it = leafletIterators;\n var $log = leafletLogger;\n\n var utfGridCreateLayer = function utfGridCreateLayer(params) {\n if (!Helpers.UTFGridPlugin.isLoaded()) {\n $log.error('[AngularJS - Leaflet] The UTFGrid plugin is not loaded.');\n return;\n }\n var utfgrid = new L.UtfGrid(params.url, params.pluginOptions);\n\n utfgrid.on('mouseover', function (e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseover', e);\n });\n\n utfgrid.on('mouseout', function (e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridMouseout', e);\n });\n\n utfgrid.on('click', function (e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridClick', e);\n });\n\n utfgrid.on('mousemove', function (e) {\n $rootScope.$broadcast('leafletDirectiveMap.utfgridMousemove', e);\n });\n\n return utfgrid;\n };\n\n var layerTypes = {\n xyz: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n return L.tileLayer(params.url, params.options);\n }\n },\n mapbox: {\n mustHaveKey: true,\n createLayer: function createLayer(params) {\n var version = 3;\n if (isDefined(params.options.version) && params.options.version === 4) {\n version = params.options.version;\n }\n var url = version === 3 ? '//{s}.tiles.mapbox.com/v3/' + params.key + '/{z}/{x}/{y}.png' : '//api.tiles.mapbox.com/v4/' + params.key + '/{z}/{x}/{y}.png?access_token=' + params.apiKey;\n return L.tileLayer(url, params.options);\n }\n },\n geoJSON: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.GeoJSONPlugin.isLoaded()) {\n return;\n }\n return new L.TileLayer.GeoJSON(params.url, params.pluginOptions, params.options);\n }\n },\n geoJSONShape: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n return new L.GeoJSON(params.data, params.options);\n }\n },\n geoJSONAwesomeMarker: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n return new L.geoJson(params.data, {\n pointToLayer: function pointToLayer(feature, latlng) {\n return L.marker(latlng, { icon: L.AwesomeMarkers.icon(params.icon) });\n }\n });\n }\n },\n geoJSONVectorMarker: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n return new L.geoJson(params.data, {\n pointToLayer: function pointToLayer(feature, latlng) {\n return L.marker(latlng, { icon: L.VectorMarkers.icon(params.icon) });\n }\n });\n }\n },\n utfGrid: {\n mustHaveUrl: true,\n createLayer: utfGridCreateLayer\n },\n cartodbTiles: {\n mustHaveKey: true,\n createLayer: function createLayer(params) {\n var url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png';\n return L.tileLayer(url, params.options);\n }\n },\n cartodbUTFGrid: {\n mustHaveKey: true,\n mustHaveLayer: true,\n createLayer: function createLayer(params) {\n params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json';\n return utfGridCreateLayer(params);\n }\n },\n cartodbInteractive: {\n mustHaveKey: true,\n mustHaveLayer: true,\n createLayer: function createLayer(params) {\n var tilesURL = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/{z}/{x}/{y}.png';\n var tileLayer = L.tileLayer(tilesURL, params.options);\n params.url = '//' + params.user + '.cartodb.com/api/v1/map/' + params.key + '/' + params.layer + '/{z}/{x}/{y}.grid.json';\n var utfLayer = utfGridCreateLayer(params);\n return L.layerGroup([tileLayer, utfLayer]);\n }\n },\n wms: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n return L.tileLayer.wms(params.url, params.options);\n }\n },\n wmts: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n return L.tileLayer.wmts(params.url, params.options);\n }\n },\n wfs: {\n mustHaveUrl: true,\n mustHaveLayer: true,\n createLayer: function createLayer(params) {\n if (!Helpers.WFSLayerPlugin.isLoaded()) {\n return;\n }\n var options = angular.copy(params.options);\n if (options.crs && 'string' === typeof options.crs) {\n /*jshint -W061 */\n options.crs = eval(options.crs);\n }\n return new L.GeoJSON.WFS(params.url, params.layer, options);\n }\n },\n group: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n var lyrs = [];\n $it.each(params.options.layers, function (l) {\n lyrs.push(_createLayer(l));\n });\n params.options.loadedDefer = function () {\n var defers = [];\n if (isDefined(params.options.layers)) {\n for (var i = 0; i < params.options.layers.length; i++) {\n var d = params.options.layers[i].layerOptions.loadedDefer;\n if (isDefined(d)) {\n defers.push(d);\n }\n }\n }\n return defers;\n };\n return L.layerGroup(lyrs);\n }\n },\n featureGroup: {\n mustHaveUrl: false,\n createLayer: function createLayer() {\n return L.featureGroup();\n }\n },\n google: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n var type = params.type || 'SATELLITE';\n if (!Helpers.GoogleLayerPlugin.isLoaded()) {\n return;\n }\n return new L.Google(type, params.options);\n }\n },\n here: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n var provider = params.provider || 'HERE.terrainDay';\n if (!Helpers.LeafletProviderPlugin.isLoaded()) {\n return;\n }\n return new L.TileLayer.Provider(provider, params.options);\n }\n },\n china: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n var type = params.type || '';\n if (!Helpers.ChinaLayerPlugin.isLoaded()) {\n return;\n }\n return L.tileLayer.chinaProvider(type, params.options);\n }\n },\n agsBase: {\n mustHaveLayer: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSBaseLayerPlugin.isLoaded()) {\n return;\n }\n return L.esri.basemapLayer(params.layer, params.options);\n }\n },\n ags: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSLayerPlugin.isLoaded()) {\n return;\n }\n\n var options = angular.copy(params.options);\n angular.extend(options, {\n url: params.url\n });\n var layer = new lvector.AGS(options);\n layer.onAdd = function (map) {\n this.setMap(map);\n };\n layer.onRemove = function () {\n this.setMap(null);\n };\n return layer;\n }\n },\n agsFeature: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSFeatureLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n\n params.options.url = params.url;\n\n var layer = L.esri.featureLayer(params.options);\n var load = function load() {\n if (isDefined(params.options.loadedDefer)) {\n params.options.loadedDefer.resolve();\n }\n };\n layer.on('loading', function () {\n params.options.loadedDefer = $q.defer();\n layer.off('load', load);\n layer.on('load', load);\n });\n\n return layer;\n }\n },\n agsTiled: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSTiledMapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n\n params.options.url = params.url;\n\n return L.esri.tiledMapLayer(params.options);\n }\n },\n agsDynamic: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSDynamicMapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n\n params.options.url = params.url;\n\n return L.esri.dynamicMapLayer(params.options);\n }\n },\n agsImage: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSImageMapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri plugin is not loaded.');\n return;\n }\n params.options.url = params.url;\n\n return L.esri.imageMapLayer(params.options);\n }\n },\n agsClustered: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSClusteredLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri clustered layer plugin is not loaded.');\n return;\n }\n\n if (!Helpers.MarkerClusterPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The markercluster plugin is not loaded.');\n return;\n }\n return L.esri.clusteredFeatureLayer(params.url, params.options);\n }\n },\n agsHeatmap: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n if (!Helpers.AGSHeatmapLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The esri heatmap layer plugin is not loaded.');\n return;\n }\n\n if (!Helpers.HeatLayerPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The heatlayer plugin is not loaded.');\n return;\n }\n return L.esri.heatmapFeatureLayer(params.url, params.options);\n }\n },\n markercluster: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n if (!Helpers.MarkerClusterPlugin.isLoaded()) {\n $log.warn(errorHeader + ' The markercluster plugin is not loaded.');\n return;\n }\n return new L.MarkerClusterGroup(params.options);\n }\n },\n bing: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n if (!Helpers.BingLayerPlugin.isLoaded()) {\n return;\n }\n return new L.BingLayer(params.key, params.options);\n }\n },\n webGLHeatmap: {\n mustHaveUrl: false,\n mustHaveData: true,\n createLayer: function createLayer(params) {\n if (!Helpers.WebGLHeatMapLayerPlugin.isLoaded()) {\n return;\n }\n var layer = new L.TileLayer.WebGLHeatMap(params.options);\n if (isDefined(params.data)) {\n layer.setData(params.data);\n }\n\n return layer;\n }\n },\n heat: {\n mustHaveUrl: false,\n mustHaveData: true,\n createLayer: function createLayer(params) {\n if (!Helpers.HeatLayerPlugin.isLoaded()) {\n return;\n }\n var layer = new L.heatLayer();\n\n if (isArray(params.data)) {\n layer.setLatLngs(params.data);\n }\n\n if (isObject(params.options)) {\n layer.setOptions(params.options);\n }\n\n return layer;\n }\n },\n yandex: {\n mustHaveUrl: false,\n createLayer: function createLayer(params) {\n var type = params.type || 'map';\n if (!Helpers.YandexLayerPlugin.isLoaded()) {\n return;\n }\n return new L.Yandex(type, params.options);\n }\n },\n imageOverlay: {\n mustHaveUrl: true,\n mustHaveBounds: true,\n createLayer: function createLayer(params) {\n return L.imageOverlay(params.url, params.bounds, params.options);\n }\n },\n iip: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n return L.tileLayer.iip(params.url, params.options);\n }\n },\n\n // This \"custom\" type is used to accept every layer that user want to define himself.\n // We can wrap these custom layers like heatmap or yandex, but it means a lot of work/code to wrap the world,\n // so we let user to define their own layer outside the directive,\n // and pass it on \"createLayer\" result for next processes\n custom: {\n createLayer: function createLayer(params) {\n if (params.layer instanceof L.Class) {\n return angular.copy(params.layer);\n } else {\n $log.error('[AngularJS - Leaflet] A custom layer must be a leaflet Class');\n }\n }\n },\n cartodb: {\n mustHaveUrl: true,\n createLayer: function createLayer(params) {\n return cartodb.createLayer(params.map, params.url);\n }\n }\n };\n\n function isValidLayerType(layerDefinition) {\n // Check if the baselayer has a valid type\n if (!isString(layerDefinition.type)) {\n $log.error('[AngularJS - Leaflet] A layer must have a valid type defined.');\n return false;\n }\n\n if (Object.keys(layerTypes).indexOf(layerDefinition.type) === -1) {\n $log.error('[AngularJS - Leaflet] A layer must have a valid type: ' + Object.keys(layerTypes));\n return false;\n }\n\n // Check if the layer must have an URL\n if (layerTypes[layerDefinition.type].mustHaveUrl && !isString(layerDefinition.url)) {\n $log.error('[AngularJS - Leaflet] A base layer must have an url');\n return false;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveData && !isDefined(layerDefinition.data)) {\n $log.error('[AngularJS - Leaflet] The base layer must have a \"data\" array attribute');\n return false;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveLayer && !isDefined(layerDefinition.layer)) {\n $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have an layer defined');\n return false;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveBounds && !isDefined(layerDefinition.bounds)) {\n $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have bounds defined');\n return false;\n }\n\n if (layerTypes[layerDefinition.type].mustHaveKey && !isDefined(layerDefinition.key)) {\n $log.error('[AngularJS - Leaflet] The type of layer ' + layerDefinition.type + ' must have key defined');\n return false;\n }\n return true;\n }\n\n function _createLayer(layerDefinition) {\n if (!isValidLayerType(layerDefinition)) {\n return;\n }\n\n if (!isString(layerDefinition.name)) {\n $log.error('[AngularJS - Leaflet] A base layer must have a name');\n return;\n }\n if (!isObject(layerDefinition.layerParams)) {\n layerDefinition.layerParams = {};\n }\n if (!isObject(layerDefinition.layerOptions)) {\n layerDefinition.layerOptions = {};\n }\n\n // Mix the layer specific parameters with the general Leaflet options. Although this is an overhead\n // the definition of a base layers is more 'clean' if the two types of parameters are differentiated\n for (var attrname in layerDefinition.layerParams) {\n layerDefinition.layerOptions[attrname] = layerDefinition.layerParams[attrname];\n }\n\n var params = {\n url: layerDefinition.url,\n data: layerDefinition.data,\n options: layerDefinition.layerOptions,\n layer: layerDefinition.layer,\n icon: layerDefinition.icon,\n type: layerDefinition.layerType,\n bounds: layerDefinition.bounds,\n key: layerDefinition.key,\n apiKey: layerDefinition.apiKey,\n pluginOptions: layerDefinition.pluginOptions,\n user: layerDefinition.user\n };\n\n //TODO Add $watch to the layer properties\n return layerTypes[layerDefinition.type].createLayer(params);\n }\n\n function safeAddLayer(map, layer) {\n if (layer && typeof layer.addTo === 'function') {\n layer.addTo(map);\n } else {\n map.addLayer(layer);\n }\n }\n\n function safeRemoveLayer(map, layer, layerOptions) {\n if (isDefined(layerOptions) && isDefined(layerOptions.loadedDefer)) {\n if (angular.isFunction(layerOptions.loadedDefer)) {\n var defers = layerOptions.loadedDefer();\n $log.debug('Loaded Deferred', defers);\n var count = defers.length;\n if (count > 0) {\n var resolve = function resolve() {\n count--;\n if (count === 0) {\n map.removeLayer(layer);\n }\n };\n\n for (var i = 0; i < defers.length; i++) {\n defers[i].promise.then(resolve);\n }\n } else {\n map.removeLayer(layer);\n }\n } else {\n layerOptions.loadedDefer.promise.then(function () {\n map.removeLayer(layer);\n });\n }\n } else {\n map.removeLayer(layer);\n }\n }\n\n return {\n createLayer: _createLayer,\n safeAddLayer: safeAddLayer,\n safeRemoveLayer: safeRemoveLayer\n };\n});\n","'use strict';\n\nangular.module(\"ui-leaflet\").factory('leafletLegendHelpers', function ($http, $q, $log, leafletHelpers) {\n\tvar requestQueue = {},\n\t isDefined = leafletHelpers.isDefined;\n\n\tvar _execNext = function _execNext(mapId) {\n\t\tvar queue = requestQueue[mapId];\n\t\tvar task = queue[0];\n\t\t$http(task.c).then(function (data) {\n\t\t\tqueue.shift();\n\t\t\ttask.d.resolve(data);\n\t\t\tif (queue.length > 0) {\n\t\t\t\t_execNext(mapId);\n\t\t\t}\n\t\t}, function (err) {\n\t\t\tqueue.shift();\n\t\t\ttask.d.reject(err);\n\t\t\tif (queue.length > 0) {\n\t\t\t\t_execNext(mapId);\n\t\t\t}\n\t\t});\n\t};\n\n\tvar _updateLegend = function _updateLegend(div, legendData, type, url) {\n\t\tdiv.innerHTML = '';\n\t\tif (legendData.error) {\n\t\t\tdiv.innerHTML += '
' + legendData.error.message + '
';\n\t\t} else {\n\t\t\tif (type === 'arcgis') {\n\t\t\t\tfor (var i = 0; i < legendData.layers.length; i++) {\n\t\t\t\t\tvar layer = legendData.layers[i];\n\t\t\t\t\tdiv.innerHTML += '
' + layer.layerName + '
';\n\t\t\t\t\tfor (var j = 0; j < layer.legend.length; j++) {\n\t\t\t\t\t\tvar leg = layer.legend[j];\n\t\t\t\t\t\tdiv.innerHTML += '
' + '
' + leg.label + '
';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'image') {\n\t\t\t\tdiv.innerHTML = '';\n\t\t\t}\n\t\t}\n\t};\n\n\tvar _getOnAddLegend = function _getOnAddLegend(legendData, legendClass, type, url) {\n\t\treturn function () /*map*/{\n\t\t\tvar div = L.DomUtil.create('div', legendClass);\n\n\t\t\tif (!L.Browser.touch) {\n\t\t\t\tL.DomEvent.disableClickPropagation(div);\n\t\t\t\tL.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);\n\t\t\t} else {\n\t\t\t\tL.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);\n\t\t\t}\n\t\t\t_updateLegend(div, legendData, type, url);\n\t\t\treturn div;\n\t\t};\n\t};\n\n\tvar _getOnAddArrayLegend = function _getOnAddArrayLegend(legend, legendClass) {\n\t\treturn function () /*map*/{\n\t\t\tvar div = L.DomUtil.create('div', legendClass);\n\t\t\tfor (var i = 0; i < legend.colors.length; i++) {\n\t\t\t\tdiv.innerHTML += '
' + '
' + legend.labels[i] + '
';\n\t\t\t}\n\t\t\tif (!L.Browser.touch) {\n\t\t\t\tL.DomEvent.disableClickPropagation(div);\n\t\t\t\tL.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);\n\t\t\t} else {\n\t\t\t\tL.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);\n\t\t\t}\n\t\t\treturn div;\n\t\t};\n\t};\n\n\treturn {\n\t\tgetOnAddLegend: _getOnAddLegend,\n\t\tgetOnAddArrayLegend: _getOnAddArrayLegend,\n\t\tupdateLegend: _updateLegend,\n\t\taddLegendURL: function addLegendURL(mapId, config) {\n\t\t\tvar d = $q.defer();\n\t\t\tif (!isDefined(requestQueue[mapId])) {\n\t\t\t\trequestQueue[mapId] = [];\n\t\t\t}\n\t\t\trequestQueue[mapId].push({ c: config, d: d });\n\t\t\tif (requestQueue[mapId].length === 1) {\n\t\t\t\t_execNext(mapId);\n\t\t\t}\n\t\t\treturn d.promise;\n\t\t}\n\t};\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletMapDefaults', function ($q, leafletHelpers) {\n function _getDefaults() {\n return {\n keyboard: true,\n dragging: true,\n worldCopyJump: false,\n doubleClickZoom: true,\n scrollWheelZoom: true,\n tap: true,\n touchZoom: true,\n zoomControl: true,\n zoomsliderControl: false,\n zoomControlPosition: 'topleft',\n attributionControl: true,\n controls: {\n layers: {\n visible: true,\n position: 'topright',\n collapsed: true\n }\n },\n nominatim: {\n server: ' http://nominatim.openstreetmap.org/search'\n },\n crs: L.CRS.EPSG3857,\n tileLayer: '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n tileLayerOptions: {\n attribution: '© OpenStreetMap contributors'\n },\n path: {\n weight: 10,\n opacity: 1,\n color: '#0000ff'\n },\n center: {\n lat: 0,\n lng: 0,\n zoom: 1\n },\n trackResize: true\n };\n }\n\n var isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n obtainEffectiveMapId = leafletHelpers.obtainEffectiveMapId,\n defaults = {};\n\n // Get the _defaults dictionary, and override the properties defined by the user\n return {\n reset: function reset() {\n defaults = {};\n },\n getDefaults: function getDefaults(scopeId) {\n var mapId = obtainEffectiveMapId(defaults, scopeId);\n return defaults[mapId];\n },\n\n getMapCreationDefaults: function getMapCreationDefaults(scopeId) {\n var mapId = obtainEffectiveMapId(defaults, scopeId);\n var d = defaults[mapId];\n\n var mapDefaults = {\n maxZoom: d.maxZoom,\n keyboard: d.keyboard,\n dragging: d.dragging,\n zoomControl: d.zoomControl,\n doubleClickZoom: d.doubleClickZoom,\n scrollWheelZoom: d.scrollWheelZoom,\n tap: d.tap,\n touchZoom: d.touchZoom,\n attributionControl: d.attributionControl,\n worldCopyJump: d.worldCopyJump,\n crs: d.crs,\n trackResize: d.trackResize\n };\n\n if (isDefined(d.minZoom)) {\n mapDefaults.minZoom = d.minZoom;\n }\n\n if (isDefined(d.zoomAnimation)) {\n mapDefaults.zoomAnimation = d.zoomAnimation;\n }\n\n if (isDefined(d.fadeAnimation)) {\n mapDefaults.fadeAnimation = d.fadeAnimation;\n }\n\n if (isDefined(d.markerZoomAnimation)) {\n mapDefaults.markerZoomAnimation = d.markerZoomAnimation;\n }\n\n if (d.map) {\n for (var option in d.map) {\n mapDefaults[option] = d.map[option];\n }\n }\n\n return mapDefaults;\n },\n\n setDefaults: function setDefaults(userDefaults, scopeId) {\n var newDefaults = _getDefaults();\n\n if (isDefined(userDefaults)) {\n newDefaults.doubleClickZoom = isDefined(userDefaults.doubleClickZoom) ? userDefaults.doubleClickZoom : newDefaults.doubleClickZoom;\n newDefaults.scrollWheelZoom = isDefined(userDefaults.scrollWheelZoom) ? userDefaults.scrollWheelZoom : newDefaults.doubleClickZoom;\n newDefaults.tap = isDefined(userDefaults.tap) ? userDefaults.tap : newDefaults.tap;\n newDefaults.touchZoom = isDefined(userDefaults.touchZoom) ? userDefaults.touchZoom : newDefaults.doubleClickZoom;\n newDefaults.zoomControl = isDefined(userDefaults.zoomControl) ? userDefaults.zoomControl : newDefaults.zoomControl;\n newDefaults.zoomsliderControl = isDefined(userDefaults.zoomsliderControl) ? userDefaults.zoomsliderControl : newDefaults.zoomsliderControl;\n newDefaults.attributionControl = isDefined(userDefaults.attributionControl) ? userDefaults.attributionControl : newDefaults.attributionControl;\n newDefaults.tileLayer = isDefined(userDefaults.tileLayer) ? userDefaults.tileLayer : newDefaults.tileLayer;\n newDefaults.zoomControlPosition = isDefined(userDefaults.zoomControlPosition) ? userDefaults.zoomControlPosition : newDefaults.zoomControlPosition;\n newDefaults.keyboard = isDefined(userDefaults.keyboard) ? userDefaults.keyboard : newDefaults.keyboard;\n newDefaults.dragging = isDefined(userDefaults.dragging) ? userDefaults.dragging : newDefaults.dragging;\n newDefaults.trackResize = isDefined(userDefaults.trackResize) ? userDefaults.trackResize : newDefaults.trackResize;\n\n if (isDefined(userDefaults.controls)) {\n angular.extend(newDefaults.controls, userDefaults.controls);\n }\n\n if (isObject(userDefaults.crs)) {\n newDefaults.crs = userDefaults.crs;\n } else if (isDefined(L.CRS[userDefaults.crs])) {\n newDefaults.crs = L.CRS[userDefaults.crs];\n }\n\n if (isDefined(userDefaults.center)) {\n angular.copy(userDefaults.center, newDefaults.center);\n }\n\n if (isDefined(userDefaults.tileLayerOptions)) {\n angular.copy(userDefaults.tileLayerOptions, newDefaults.tileLayerOptions);\n }\n\n if (isDefined(userDefaults.maxZoom)) {\n newDefaults.maxZoom = userDefaults.maxZoom;\n }\n\n if (isDefined(userDefaults.minZoom)) {\n newDefaults.minZoom = userDefaults.minZoom;\n }\n\n if (isDefined(userDefaults.zoomAnimation)) {\n newDefaults.zoomAnimation = userDefaults.zoomAnimation;\n }\n\n if (isDefined(userDefaults.fadeAnimation)) {\n newDefaults.fadeAnimation = userDefaults.fadeAnimation;\n }\n\n if (isDefined(userDefaults.markerZoomAnimation)) {\n newDefaults.markerZoomAnimation = userDefaults.markerZoomAnimation;\n }\n\n if (isDefined(userDefaults.worldCopyJump)) {\n newDefaults.worldCopyJump = userDefaults.worldCopyJump;\n }\n\n if (isDefined(userDefaults.map)) {\n newDefaults.map = userDefaults.map;\n }\n\n if (isDefined(userDefaults.path)) {\n newDefaults.path = userDefaults.path;\n }\n }\n\n var mapId = obtainEffectiveMapId(defaults, scopeId);\n defaults[mapId] = newDefaults;\n return newDefaults;\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletMarkersHelpers', function ($rootScope, $timeout, leafletHelpers, leafletLogger, $compile, leafletGeoJsonHelpers, leafletWatchHelpers) {\n var isDefined = leafletHelpers.isDefined,\n defaultTo = leafletHelpers.defaultTo,\n MarkerClusterPlugin = leafletHelpers.MarkerClusterPlugin,\n AwesomeMarkersPlugin = leafletHelpers.AwesomeMarkersPlugin,\n VectorMarkersPlugin = leafletHelpers.VectorMarkersPlugin,\n MakiMarkersPlugin = leafletHelpers.MakiMarkersPlugin,\n ExtraMarkersPlugin = leafletHelpers.ExtraMarkersPlugin,\n DomMarkersPlugin = leafletHelpers.DomMarkersPlugin,\n safeApply = leafletHelpers.safeApply,\n Helpers = leafletHelpers,\n isString = leafletHelpers.isString,\n isNumber = leafletHelpers.isNumber,\n isObject = leafletHelpers.isObject,\n groups = {},\n geoHlp = leafletGeoJsonHelpers,\n errorHeader = leafletHelpers.errorHeader,\n maybeWatch = leafletWatchHelpers.maybeWatch,\n $log = leafletLogger;\n\n var _string = function _string(marker) {\n //this exists since JSON.stringify barfs on cyclic\n var retStr = '';\n ['_icon', '_latlng', '_leaflet_id', '_map', '_shadow'].forEach(function (prop) {\n retStr += prop + ': ' + defaultTo(marker[prop], 'undefined') + ' \\n';\n });\n return '[leafletMarker] : \\n' + retStr;\n };\n var _log = function _log(marker, useConsole) {\n var logger = useConsole ? console : $log;\n logger.debug(_string(marker));\n };\n\n var createLeafletIcon = function createLeafletIcon(iconData) {\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'awesomeMarker') {\n if (!AwesomeMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + ' The AwesomeMarkers Plugin is not loaded.');\n }\n\n return new L.AwesomeMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'vectorMarker') {\n if (!VectorMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + ' The VectorMarkers Plugin is not loaded.');\n }\n\n return new L.VectorMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'makiMarker') {\n if (!MakiMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + 'The MakiMarkers Plugin is not loaded.');\n }\n\n return new L.MakiMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'extraMarker') {\n if (!ExtraMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + 'The ExtraMarkers Plugin is not loaded.');\n }\n return new L.ExtraMarkers.icon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'div') {\n return new L.divIcon(iconData);\n }\n\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'dom') {\n if (!DomMarkersPlugin.isLoaded()) {\n $log.error(errorHeader + 'The DomMarkers Plugin is not loaded.');\n }\n var markerScope = angular.isFunction(iconData.getMarkerScope) ? iconData.getMarkerScope() : $rootScope,\n template = $compile(iconData.template)(markerScope),\n iconDataCopy = angular.copy(iconData);\n iconDataCopy.element = template[0];\n return new L.DomMarkers.icon(iconDataCopy);\n }\n\n // allow for any custom icon to be used... assumes the icon has already been initialized\n if (isDefined(iconData) && isDefined(iconData.type) && iconData.type === 'icon') {\n return iconData.icon;\n }\n\n var base64icon = \"data:image/png;base64,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\";\n var base64shadow = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAAC5ElEQVRYw+2YW4/TMBCF45S0S1luXZCABy5CgLQgwf//S4BYBLTdJLax0fFqmB07nnQfEGqkIydpVH85M+NLjPe++dcPc4Q8Qh4hj5D/AaQJx6H/4TMwB0PeBNwU7EGQAmAtsNfAzoZkgIa0ZgLMa4Aj6CxIAsjhjOCoL5z7Glg1JAOkaicgvQBXuncwJAWjksLtBTWZe04CnYRktUGdilALppZBOgHGZcBzL6OClABvMSVIzyBjazOgrvACf1ydC5mguqAVg6RhdkSWQFj2uxfaq/BrIZOLEWgZdALIDvcMcZLD8ZbLC9de4yR1sYMi4G20S4Q/PWeJYxTOZn5zJXANZHIxAd4JWhPIloTJZhzMQduM89WQ3MUVAE/RnhAXpTycqys3NZALOBbB7kFrgLesQl2h45Fcj8L1tTSohUwuxhy8H/Qg6K7gIs+3kkaigQCOcyEXCHN07wyQazhrmIulvKMQAwMcmLNqyCVyMAI+BuxSMeTk3OPikLY2J1uE+VHQk6ANrhds+tNARqBeaGc72cK550FP4WhXmFmcMGhTwAR1ifOe3EvPqIegFmF+C8gVy0OfAaWQPMR7gF1OQKqGoBjq90HPMP01BUjPOqGFksC4emE48tWQAH0YmvOgF3DST6xieJgHAWxPAHMuNhrImIdvoNOKNWIOcE+UXE0pYAnkX6uhWsgVXDxHdTfCmrEEmMB2zMFimLVOtiiajxiGWrbU52EeCdyOwPEQD8LqyPH9Ti2kgYMf4OhSKB7qYILbBv3CuVTJ11Y80oaseiMWOONc/Y7kJYe0xL2f0BaiFTxknHO5HaMGMublKwxFGzYdWsBF174H/QDknhTHmHHN39iWFnkZx8lPyM8WHfYELmlLKtgWNmFNzQcC1b47gJ4hL19i7o65dhH0Negbca8vONZoP7doIeOC9zXm8RjuL0Gf4d4OYaU5ljo3GYiqzrWQHfJxA6ALhDpVKv9qYeZA8eM3EhfPSCmpuD0AAAAASUVORK5CYII=\";\n\n if (!isDefined(iconData) || !isDefined(iconData.iconUrl)) {\n return new L.Icon.Default({\n iconUrl: base64icon,\n shadowUrl: base64shadow,\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n shadowSize: [41, 41]\n });\n }\n\n return new L.Icon(iconData);\n };\n\n var _resetMarkerGroup = function _resetMarkerGroup(groupName) {\n if (isDefined(groups[groupName])) {\n groups.splice(groupName, 1);\n }\n };\n\n var _resetMarkerGroups = function _resetMarkerGroups() {\n groups = {};\n };\n\n var _deleteMarker = function _deleteMarker(marker, map, layers) {\n marker.closePopup();\n // There is no easy way to know if a marker is added to a layer, so we search for it\n // if there are overlays\n if (isDefined(layers) && isDefined(layers.overlays)) {\n for (var key in layers.overlays) {\n if (layers.overlays[key] instanceof L.LayerGroup || layers.overlays[key] instanceof L.FeatureGroup) {\n if (layers.overlays[key].hasLayer(marker)) {\n layers.overlays[key].removeLayer(marker);\n return;\n }\n }\n }\n }\n\n if (isDefined(groups)) {\n for (var groupKey in groups) {\n if (groups[groupKey].hasLayer(marker)) {\n groups[groupKey].removeLayer(marker);\n }\n }\n }\n\n if (map.hasLayer(marker)) {\n map.removeLayer(marker);\n }\n };\n\n var adjustPopupPan = function adjustPopupPan(marker, map) {\n var containerHeight = marker._popup._container.offsetHeight,\n layerPos = new L.Point(marker._popup._containerLeft, -containerHeight - marker._popup._containerBottom),\n containerPos = map.layerPointToContainerPoint(layerPos);\n if (containerPos !== null) {\n marker._popup._adjustPan();\n }\n };\n\n var compilePopup = function compilePopup(marker, markerScope) {\n $compile(marker._popup._contentNode)(markerScope);\n };\n\n var updatePopup = function updatePopup(marker, markerScope, map) {\n //The innerText should be more than 1 once angular has compiled.\n //We need to keep trying until angular has compiled before we _updateLayout and _updatePosition\n //This should take care of any scenario , eg ngincludes, whatever.\n //Is there a better way to check for this?\n var innerText = marker._popup._contentNode.innerText || marker._popup._contentNode.textContent;\n if (innerText.length < 1) {\n $timeout(function () {\n updatePopup(marker, markerScope, map);\n });\n }\n\n //cause a reflow - this is also very important - if we don't do this then the widths are from before $compile\n var reflow = marker._popup._contentNode.offsetWidth;\n\n marker._popup._updateLayout();\n marker._popup._updatePosition();\n\n if (marker._popup.options.autoPan) {\n adjustPopupPan(marker, map);\n }\n\n //using / returning reflow so jshint doesn't moan\n return reflow;\n };\n\n var _manageOpenPopup = function _manageOpenPopup(marker, markerData, map) {\n // The marker may provide a scope returning function used to compile the message\n // default to $rootScope otherwise\n var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope,\n compileMessage = isDefined(markerData.compileMessage) ? markerData.compileMessage : true;\n\n if (compileMessage) {\n if (!isDefined(marker._popup) || !isDefined(marker._popup._contentNode)) {\n $log.error(errorHeader + 'Popup is invalid or does not have any content.');\n return false;\n }\n\n compilePopup(marker, markerScope);\n updatePopup(marker, markerData, map);\n }\n };\n\n var _manageOpenLabel = function _manageOpenLabel(marker, markerData) {\n var markerScope = angular.isFunction(markerData.getMessageScope) ? markerData.getMessageScope() : $rootScope,\n labelScope = angular.isFunction(markerData.getLabelScope) ? markerData.getLabelScope() : markerScope,\n compileMessage = isDefined(markerData.compileMessage) ? markerData.compileMessage : true;\n\n if (Helpers.LabelPlugin.isLoaded() && isDefined(markerData.label)) {\n if (isDefined(markerData.label.options) && markerData.label.options.noHide === true) {\n marker.showLabel();\n }\n if (compileMessage && isDefined(marker.label)) {\n $compile(marker.label._container)(labelScope);\n }\n }\n };\n\n var _updateMarker = function _updateMarker(markerData, oldMarkerData, marker, name, leafletScope, layers, map) {\n if (!isDefined(oldMarkerData)) {\n return;\n }\n\n // Update the lat-lng property (always present in marker properties)\n if (!geoHlp.validateCoords(markerData)) {\n $log.warn('There are problems with lat-lng data, please verify your marker model');\n _deleteMarker(marker, map, layers);\n return;\n }\n\n // watch is being initialized if old and new object is the same\n var isInitializing = markerData === oldMarkerData;\n\n // Update marker rotation\n if (isDefined(markerData.iconAngle) && oldMarkerData.iconAngle !== markerData.iconAngle) {\n marker.setIconAngle(markerData.iconAngle);\n }\n\n // It is possible that the layer has been removed or the layer marker does not exist\n // Update the layer group if present or move it to the map if not\n if (!isString(markerData.layer)) {\n // There is no layer information, we move the marker to the map if it was in a layer group\n if (isString(oldMarkerData.layer)) {\n // Remove from the layer group that is supposed to be\n if (isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) {\n layers.overlays[oldMarkerData.layer].removeLayer(marker);\n marker.closePopup();\n }\n // Test if it is not on the map and add it\n if (!map.hasLayer(marker)) {\n map.addLayer(marker);\n }\n }\n }\n\n if ((isNumber(markerData.opacity) || isNumber(parseFloat(markerData.opacity))) && markerData.opacity !== oldMarkerData.opacity) {\n // There was a different opacity so we update it\n marker.setOpacity(markerData.opacity);\n }\n\n if (isString(markerData.layer) && oldMarkerData.layer !== markerData.layer) {\n // If it was on a layer group we have to remove it\n if (isString(oldMarkerData.layer) && isDefined(layers.overlays[oldMarkerData.layer]) && layers.overlays[oldMarkerData.layer].hasLayer(marker)) {\n layers.overlays[oldMarkerData.layer].removeLayer(marker);\n }\n marker.closePopup();\n\n // Remove it from the map in case the new layer is hidden or there is an error in the new layer\n if (map.hasLayer(marker)) {\n map.removeLayer(marker);\n }\n\n // The markerData.layer is defined so we add the marker to the layer if it is different from the old data\n if (!isDefined(layers.overlays[markerData.layer])) {\n $log.error(errorHeader + 'You must use a name of an existing layer');\n return;\n }\n // Is a group layer?\n var layerGroup = layers.overlays[markerData.layer];\n if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) {\n $log.error(errorHeader + 'A marker can only be added to a layer of type \"group\" or \"featureGroup\"');\n return;\n }\n // The marker goes to a correct layer group, so first of all we add it\n layerGroup.addLayer(marker);\n // The marker is automatically added to the map depending on the visibility\n // of the layer, so we only have to open the popup if the marker is in the map\n if (map.hasLayer(marker) && markerData.focus === true) {\n marker.openPopup();\n }\n }\n\n // Update the draggable property\n if (markerData.draggable !== true && oldMarkerData.draggable === true && isDefined(marker.dragging)) {\n marker.dragging.disable();\n }\n\n if (markerData.draggable === true && oldMarkerData.draggable !== true) {\n // The markerData.draggable property must be true so we update if there wasn't a previous value or it wasn't true\n if (marker.dragging) {\n marker.dragging.enable();\n } else {\n if (L.Handler.MarkerDrag) {\n marker.dragging = new L.Handler.MarkerDrag(marker);\n marker.options.draggable = true;\n marker.dragging.enable();\n }\n }\n }\n\n // Update the icon property\n if (!isObject(markerData.icon)) {\n // If there is no icon property or it's not an object\n if (isObject(oldMarkerData.icon)) {\n // If there was an icon before restore to the default\n marker.setIcon(createLeafletIcon());\n marker.closePopup();\n marker.unbindPopup();\n if (isString(markerData.message)) {\n marker.bindPopup(markerData.message, markerData.popupOptions);\n }\n }\n }\n\n if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) {\n var dragG = false;\n if (marker.dragging) {\n dragG = marker.dragging.enabled();\n }\n marker.setIcon(createLeafletIcon(markerData.icon));\n if (dragG) {\n marker.dragging.enable();\n }\n marker.closePopup();\n marker.unbindPopup();\n if (isString(markerData.message)) {\n marker.bindPopup(markerData.message, markerData.popupOptions);\n // if marker has been already focused, reopen popup\n if (map.hasLayer(marker) && markerData.focus === true) {\n marker.openPopup();\n }\n }\n }\n\n // Update the Popup message property\n if (!isString(markerData.message) && isString(oldMarkerData.message)) {\n marker.closePopup();\n marker.unbindPopup();\n }\n\n // Update the label content or bind a new label if the old one has been removed.\n if (Helpers.LabelPlugin.isLoaded()) {\n if (isDefined(markerData.label) && isDefined(markerData.label.message)) {\n if ('label' in oldMarkerData && 'message' in oldMarkerData.label && !angular.equals(markerData.label.message, oldMarkerData.label.message)) {\n marker.updateLabelContent(markerData.label.message);\n } else if (!angular.isFunction(marker.getLabel) || angular.isFunction(marker.getLabel) && !isDefined(marker.getLabel())) {\n marker.bindLabel(markerData.label.message, markerData.label.options);\n _manageOpenLabel(marker, markerData);\n } else {\n _manageOpenLabel(marker, markerData);\n }\n } else if (!('label' in markerData && !('message' in markerData.label))) {\n if (angular.isFunction(marker.unbindLabel)) {\n marker.unbindLabel();\n }\n }\n }\n\n // There is some text in the popup, so we must show the text or update existing\n if (isString(markerData.message) && !isString(oldMarkerData.message)) {\n // There was no message before so we create it\n marker.bindPopup(markerData.message, markerData.popupOptions);\n }\n\n if (isString(markerData.message) && isString(oldMarkerData.message) && markerData.message !== oldMarkerData.message) {\n // There was a different previous message so we update it\n marker.setPopupContent(markerData.message);\n }\n\n // Update the focus property\n var updatedFocus = false;\n if (markerData.focus !== true && oldMarkerData.focus === true) {\n // If there was a focus property and was true we turn it off\n marker.closePopup();\n updatedFocus = true;\n }\n\n // The markerData.focus property must be true so we update if there wasn't a previous value or it wasn't true\n if (markerData.focus === true && (!isDefined(oldMarkerData.focus) || oldMarkerData.focus === false) || isInitializing && markerData.focus === true) {\n // Reopen the popup when focus is still true\n marker.openPopup();\n updatedFocus = true;\n }\n\n // zIndexOffset adjustment\n if (oldMarkerData.zIndexOffset !== markerData.zIndexOffset) {\n marker.setZIndexOffset(markerData.zIndexOffset);\n }\n\n var markerLatLng = marker.getLatLng();\n var isCluster = isString(markerData.layer) && Helpers.MarkerClusterPlugin.is(layers.overlays[markerData.layer]);\n // If the marker is in a cluster it has to be removed and added to the layer when the location is changed\n if (isCluster) {\n // The focus has changed even by a user click or programatically\n if (updatedFocus) {\n // We only have to update the location if it was changed programatically, because it was\n // changed by a user drag the marker data has already been updated by the internal event\n // listened by the directive\n if (markerData.lat !== oldMarkerData.lat || markerData.lng !== oldMarkerData.lng) {\n layers.overlays[markerData.layer].removeLayer(marker);\n marker.setLatLng([markerData.lat, markerData.lng]);\n layers.overlays[markerData.layer].addLayer(marker);\n }\n } else {\n // The marker has possibly moved. It can be moved by a user drag (marker location and data are equal but old\n // data is diferent) or programatically (marker location and data are diferent)\n if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) {\n // The marker was moved by a user drag\n layers.overlays[markerData.layer].removeLayer(marker);\n marker.setLatLng([markerData.lat, markerData.lng]);\n layers.overlays[markerData.layer].addLayer(marker);\n } else if (markerData.lat !== oldMarkerData.lat || markerData.lng !== oldMarkerData.lng) {\n // The marker was moved programatically\n layers.overlays[markerData.layer].removeLayer(marker);\n marker.setLatLng([markerData.lat, markerData.lng]);\n layers.overlays[markerData.layer].addLayer(marker);\n } else if (isObject(markerData.icon) && isObject(oldMarkerData.icon) && !angular.equals(markerData.icon, oldMarkerData.icon)) {\n layers.overlays[markerData.layer].removeLayer(marker);\n layers.overlays[markerData.layer].addLayer(marker);\n }\n }\n } else if (markerLatLng.lat !== markerData.lat || markerLatLng.lng !== markerData.lng) {\n marker.setLatLng([markerData.lat, markerData.lng]);\n }\n };\n\n var _getLayerModels = function _getLayerModels(models, layerName) {\n if (!isDefined(models)) return;\n if (layerName) return models[layerName];\n return models;\n };\n\n var _getModelFromModels = function _getModelFromModels(models, id, layerName) {\n if (!isDefined(models)) return;\n if (!id) {\n $log.error(errorHeader + 'marker id missing in getMarker');\n return;\n }\n if (layerName) return models[layerName][id];\n\n return models[id];\n };\n return {\n resetMarkerGroup: _resetMarkerGroup,\n\n resetMarkerGroups: _resetMarkerGroups,\n\n deleteMarker: _deleteMarker,\n\n manageOpenPopup: _manageOpenPopup,\n\n manageOpenLabel: _manageOpenLabel,\n\n createMarker: function createMarker(markerData) {\n if (!isDefined(markerData) || !geoHlp.validateCoords(markerData)) {\n $log.error(errorHeader + 'The marker definition is not valid.');\n return;\n }\n var coords = geoHlp.getCoords(markerData);\n\n if (!isDefined(coords)) {\n $log.error(errorHeader + 'Unable to get coordinates from markerData.');\n return;\n }\n\n var markerOptions = {\n icon: createLeafletIcon(markerData.icon),\n title: isDefined(markerData.title) ? markerData.title : '',\n draggable: isDefined(markerData.draggable) ? markerData.draggable : false,\n clickable: isDefined(markerData.clickable) ? markerData.clickable : true,\n riseOnHover: isDefined(markerData.riseOnHover) ? markerData.riseOnHover : false,\n zIndexOffset: isDefined(markerData.zIndexOffset) ? markerData.zIndexOffset : 0,\n iconAngle: isDefined(markerData.iconAngle) ? markerData.iconAngle : 0\n };\n // Add any other options not added above to markerOptions\n for (var markerDatum in markerData) {\n if (markerData.hasOwnProperty(markerDatum) && !markerOptions.hasOwnProperty(markerDatum)) {\n markerOptions[markerDatum] = markerData[markerDatum];\n }\n }\n\n var marker = new L.marker(coords, markerOptions);\n\n if (!isString(markerData.message)) {\n marker.unbindPopup();\n }\n\n return marker;\n },\n\n addMarkerToGroup: function addMarkerToGroup(marker, groupName, groupOptions, map) {\n if (!isString(groupName)) {\n $log.error(errorHeader + 'The marker group you have specified is invalid.');\n return;\n }\n\n if (!MarkerClusterPlugin.isLoaded()) {\n $log.error(errorHeader + \"The MarkerCluster plugin is not loaded.\");\n return;\n }\n if (!isDefined(groups[groupName])) {\n groups[groupName] = new L.MarkerClusterGroup(groupOptions);\n map.addLayer(groups[groupName]);\n }\n groups[groupName].addLayer(marker);\n },\n\n listenMarkerEvents: function listenMarkerEvents(marker, markerData, leafletScope, watchType, map) {\n marker.on(\"popupopen\", function () /* event */{\n safeApply(leafletScope, function () {\n if (isDefined(marker._popup) || isDefined(marker._popup._contentNode)) {\n markerData.focus = true;\n _manageOpenPopup(marker, markerData, map); //needed since markerData is now a copy\n }\n });\n });\n marker.on(\"popupclose\", function () /* event */{\n safeApply(leafletScope, function () {\n markerData.focus = false;\n });\n });\n marker.on(\"add\", function () /* event */{\n safeApply(leafletScope, function () {\n if ('label' in markerData) _manageOpenLabel(marker, markerData);\n });\n });\n },\n\n updateMarker: _updateMarker,\n\n addMarkerWatcher: function addMarkerWatcher(marker, name, leafletScope, layers, map, watchOptions) {\n var markerWatchPath = Helpers.getObjectArrayPath(\"markers.\" + name);\n\n maybeWatch(leafletScope, markerWatchPath, watchOptions, function (markerData, oldMarkerData, clearWatch) {\n if (!isDefined(markerData)) {\n _deleteMarker(marker, map, layers);\n clearWatch();\n return;\n }\n _updateMarker(markerData, oldMarkerData, marker, name, leafletScope, layers, map);\n });\n },\n string: _string,\n log: _log,\n getModelFromModels: _getModelFromModels,\n getLayerModels: _getLayerModels\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletPathsHelpers', function ($rootScope, leafletLogger, leafletHelpers) {\n var isDefined = leafletHelpers.isDefined,\n isArray = leafletHelpers.isArray,\n isNumber = leafletHelpers.isNumber,\n isValidPoint = leafletHelpers.isValidPoint,\n $log = leafletLogger;\n\n var availableOptions = [\n // Path options\n 'stroke', 'weight', 'color', 'opacity', 'fill', 'fillColor', 'fillOpacity', 'dashArray', 'lineCap', 'lineJoin', 'clickable', 'pointerEvents', 'className',\n\n // Polyline options\n 'smoothFactor', 'noClip'];\n function _convertToLeafletLatLngs(latlngs) {\n return latlngs.filter(function (latlng) {\n return isValidPoint(latlng);\n }).map(function (latlng) {\n return _convertToLeafletLatLng(latlng);\n });\n }\n\n function _convertToLeafletLatLng(latlng) {\n if (isArray(latlng)) {\n return new L.LatLng(latlng[0], latlng[1]);\n } else {\n return new L.LatLng(latlng.lat, latlng.lng);\n }\n }\n\n function _convertToLeafletMultiLatLngs(paths) {\n return paths.map(function (latlngs) {\n return _convertToLeafletLatLngs(latlngs);\n });\n }\n\n function _getOptions(path, defaults) {\n var options = {};\n for (var i = 0; i < availableOptions.length; i++) {\n var optionName = availableOptions[i];\n\n if (isDefined(path[optionName])) {\n options[optionName] = path[optionName];\n } else if (isDefined(defaults.path[optionName])) {\n options[optionName] = defaults.path[optionName];\n }\n }\n\n return options;\n }\n\n var _updatePathOptions = function _updatePathOptions(path, data) {\n var updatedStyle = {};\n for (var i = 0; i < availableOptions.length; i++) {\n var optionName = availableOptions[i];\n if (isDefined(data[optionName])) {\n updatedStyle[optionName] = data[optionName];\n }\n }\n path.setStyle(data);\n };\n\n var _isValidPolyline = function _isValidPolyline(latlngs) {\n if (!isArray(latlngs)) {\n return false;\n }\n for (var i = 0; i < latlngs.length; i++) {\n var point = latlngs[i];\n if (!isValidPoint(point)) {\n return false;\n }\n }\n return true;\n };\n\n var pathTypes = {\n polyline: {\n isValid: function isValid(pathData) {\n var latlngs = pathData.latlngs;\n return _isValidPolyline(latlngs);\n },\n createPath: function createPath(options) {\n return new L.Polyline([], options);\n },\n setPath: function setPath(path, data) {\n path.setLatLngs(_convertToLeafletLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n multiPolyline: {\n isValid: function isValid(pathData) {\n var latlngs = pathData.latlngs;\n if (!isArray(latlngs)) {\n return false;\n }\n\n for (var i in latlngs) {\n var polyline = latlngs[i];\n if (!_isValidPolyline(polyline)) {\n return false;\n }\n }\n\n return true;\n },\n createPath: function createPath(options) {\n return new L.multiPolyline([[[0, 0], [1, 1]]], options);\n },\n setPath: function setPath(path, data) {\n path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n polygon: {\n isValid: function isValid(pathData) {\n var latlngs = pathData.latlngs;\n return _isValidPolyline(latlngs);\n },\n createPath: function createPath(options) {\n return new L.Polygon([], options);\n },\n setPath: function setPath(path, data) {\n path.setLatLngs(_convertToLeafletLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n multiPolygon: {\n isValid: function isValid(pathData) {\n var latlngs = pathData.latlngs;\n\n if (!isArray(latlngs)) {\n return false;\n }\n\n for (var i in latlngs) {\n var polyline = latlngs[i];\n if (!_isValidPolyline(polyline)) {\n return false;\n }\n }\n\n return true;\n },\n createPath: function createPath(options) {\n return new L.MultiPolygon([[[0, 0], [1, 1], [0, 1]]], options);\n },\n setPath: function setPath(path, data) {\n path.setLatLngs(_convertToLeafletMultiLatLngs(data.latlngs));\n _updatePathOptions(path, data);\n return;\n }\n },\n rectangle: {\n isValid: function isValid(pathData) {\n var latlngs = pathData.latlngs;\n\n if (!isArray(latlngs) || latlngs.length !== 2) {\n return false;\n }\n\n for (var i in latlngs) {\n var point = latlngs[i];\n if (!isValidPoint(point)) {\n return false;\n }\n }\n\n return true;\n },\n createPath: function createPath(options) {\n return new L.Rectangle([[0, 0], [1, 1]], options);\n },\n setPath: function setPath(path, data) {\n path.setBounds(new L.LatLngBounds(_convertToLeafletLatLngs(data.latlngs)));\n _updatePathOptions(path, data);\n }\n },\n circle: {\n isValid: function isValid(pathData) {\n var point = pathData.latlngs;\n return isValidPoint(point) && isNumber(pathData.radius);\n },\n createPath: function createPath(options) {\n return new L.Circle([0, 0], 1, options);\n },\n setPath: function setPath(path, data) {\n path.setLatLng(_convertToLeafletLatLng(data.latlngs));\n if (isDefined(data.radius)) {\n path.setRadius(data.radius);\n }\n _updatePathOptions(path, data);\n }\n },\n circleMarker: {\n isValid: function isValid(pathData) {\n var point = pathData.latlngs;\n return isValidPoint(point) && isNumber(pathData.radius);\n },\n createPath: function createPath(options) {\n return new L.CircleMarker([0, 0], options);\n },\n setPath: function setPath(path, data) {\n path.setLatLng(_convertToLeafletLatLng(data.latlngs));\n if (isDefined(data.radius)) {\n path.setRadius(data.radius);\n }\n _updatePathOptions(path, data);\n }\n }\n };\n\n var _getPathData = function _getPathData(path) {\n var pathData = {};\n if (path.latlngs) {\n pathData.latlngs = path.latlngs;\n }\n\n if (path.radius) {\n pathData.radius = path.radius;\n }\n\n return pathData;\n };\n\n return {\n setPathOptions: function setPathOptions(leafletPath, pathType, data) {\n if (!isDefined(pathType)) {\n pathType = \"polyline\";\n }\n pathTypes[pathType].setPath(leafletPath, data);\n },\n createPath: function createPath(name, path, defaults) {\n if (!isDefined(path.type)) {\n path.type = \"polyline\";\n }\n var options = _getOptions(path, defaults);\n var pathData = _getPathData(path);\n\n if (!pathTypes[path.type].isValid(pathData)) {\n $log.error(\"[AngularJS - Leaflet] Invalid data passed to the \" + path.type + \" path\");\n return;\n }\n\n return pathTypes[path.type].createPath(options);\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletWatchHelpers', function () {\n\n var _maybe = function _maybe(scope, watchFunctionName, thingToWatchStr, watchOptions, initCb) {\n var unWatch = scope[watchFunctionName](thingToWatchStr, function (newValue, oldValue) {\n //make the unWatch function available to the callback as well.\n initCb(newValue, oldValue, unWatch);\n if (watchOptions.type === null) unWatch();\n }, watchOptions.type === 'watchDeep');\n\n return unWatch;\n };\n\n /*\n @name: maybeWatch\n @description: Utility to watch something once or forever.\n @returns unWatch function\n @param watchOptions - This object is used to determine the type of\n watch used.\n */\n var _maybeWatch = function _maybeWatch(scope, thingToWatchStr, watchOptions, initCb) {\n var watchMethod;\n\n if (watchOptions.type === 'watchCollection') {\n watchMethod = '$watchCollection';\n } else {\n watchMethod = '$watch';\n }\n\n return _maybe(scope, watchMethod, thingToWatchStr, watchOptions, initCb);\n };\n\n return {\n maybeWatch: _maybeWatch\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').service('leafletLogger', function (nemSimpleLogger) {\n return nemSimpleLogger.spawn();\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('nominatimService', function ($q, $http, leafletHelpers, leafletMapDefaults) {\n var isDefined = leafletHelpers.isDefined;\n\n return {\n query: function query(address, mapId) {\n var defaults = leafletMapDefaults.getDefaults(mapId);\n var url = defaults.nominatim.server;\n var df = $q.defer();\n\n $http.get(url, { params: { format: 'json', limit: 1, q: address } }).success(function (data) {\n if (data.length > 0 && isDefined(data[0].boundingbox)) {\n df.resolve(data[0]);\n } else {\n df.reject('[Nominatim] Invalid address');\n }\n });\n\n return df.promise;\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('bounds', function (leafletLogger, $timeout, $http, leafletHelpers, nominatimService, leafletBoundsHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet'],\n\n link: function link(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined;\n var createLeafletBounds = leafletBoundsHelpers.createLeafletBounds;\n var leafletScope = controller[0].getLeafletScope();\n var mapController = controller[0];\n var errorHeader = leafletHelpers.errorHeader + ' [Bounds] ';\n\n var emptyBounds = function emptyBounds(bounds) {\n return bounds._southWest.lat === 0 && bounds._southWest.lng === 0 && bounds._northEast.lat === 0 && bounds._northEast.lng === 0;\n };\n\n mapController.getMap().then(function (map) {\n leafletScope.$on('boundsChanged', function (event) {\n var scope = event.currentScope;\n var bounds = map.getBounds();\n\n if (emptyBounds(bounds) || scope.settingBoundsFromScope) {\n return;\n }\n scope.settingBoundsFromLeaflet = true;\n var newScopeBounds = {\n northEast: {\n lat: bounds._northEast.lat,\n lng: bounds._northEast.lng\n },\n southWest: {\n lat: bounds._southWest.lat,\n lng: bounds._southWest.lng\n },\n options: bounds.options\n };\n if (!angular.equals(scope.bounds, newScopeBounds)) {\n scope.bounds = newScopeBounds;\n }\n $timeout(function () {\n scope.settingBoundsFromLeaflet = false;\n });\n });\n\n var lastNominatimQuery;\n leafletScope.$watch('bounds', function (bounds) {\n if (scope.settingBoundsFromLeaflet) return;\n if (isDefined(bounds.address) && bounds.address !== lastNominatimQuery) {\n scope.settingBoundsFromScope = true;\n nominatimService.query(bounds.address, attrs.id).then(function (data) {\n var b = data.boundingbox;\n var newBounds = [[b[0], b[2]], [b[1], b[3]]];\n map.fitBounds(newBounds);\n }, function (errMsg) {\n $log.error(errorHeader + ' ' + errMsg + '.');\n });\n lastNominatimQuery = bounds.address;\n $timeout(function () {\n scope.settingBoundsFromScope = false;\n });\n return;\n }\n\n var leafletBounds = createLeafletBounds(bounds);\n if (leafletBounds && !map.getBounds().equals(leafletBounds)) {\n scope.settingBoundsFromScope = true;\n map.fitBounds(leafletBounds, bounds.options);\n $timeout(function () {\n scope.settingBoundsFromScope = false;\n });\n }\n }, true);\n });\n }\n };\n});\n","'use strict';\n\nvar centerDirectiveTypes = ['center', 'lfCenter'],\n centerDirectives = {};\n\ncenterDirectiveTypes.forEach(function (directiveName) {\n centerDirectives[directiveName] = ['leafletLogger', '$q', '$location', '$timeout', 'leafletMapDefaults', 'leafletHelpers', 'leafletBoundsHelpers', 'leafletMapEvents', function (leafletLogger, $q, $location, $timeout, leafletMapDefaults, leafletHelpers, leafletBoundsHelpers, leafletMapEvents) {\n\n var isDefined = leafletHelpers.isDefined,\n isNumber = leafletHelpers.isNumber,\n isSameCenterOnMap = leafletHelpers.isSameCenterOnMap,\n safeApply = leafletHelpers.safeApply,\n isValidCenter = leafletHelpers.isValidCenter,\n isValidBounds = leafletBoundsHelpers.isValidBounds,\n isUndefinedOrEmpty = leafletHelpers.isUndefinedOrEmpty,\n errorHeader = leafletHelpers.errorHeader,\n $log = leafletLogger;\n\n var shouldInitializeMapWithBounds = function shouldInitializeMapWithBounds(bounds, center) {\n return isDefined(bounds) && isValidBounds(bounds) && isUndefinedOrEmpty(center);\n };\n\n var _leafletCenter;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n controller: function controller() {\n _leafletCenter = $q.defer();\n this.getCenter = function () {\n return _leafletCenter.promise;\n };\n },\n link: function link(scope, element, attrs, controller) {\n var leafletScope = controller.getLeafletScope(),\n centerModel = leafletScope[directiveName];\n\n controller.getMap().then(function (map) {\n var defaults = leafletMapDefaults.getDefaults(attrs.id);\n\n if (attrs[directiveName].search(\"-\") !== -1) {\n $log.error(errorHeader + ' The \"center\" variable can\\'t use a \"-\" on its key name: \"' + attrs[directiveName] + '\".');\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n return;\n } else if (shouldInitializeMapWithBounds(leafletScope.bounds, centerModel)) {\n map.fitBounds(leafletBoundsHelpers.createLeafletBounds(leafletScope.bounds), leafletScope.bounds.options);\n centerModel = map.getCenter();\n safeApply(leafletScope, function (scope) {\n angular.extend(scope[directiveName], {\n lat: map.getCenter().lat,\n lng: map.getCenter().lng,\n zoom: map.getZoom(),\n autoDiscover: false\n });\n });\n safeApply(leafletScope, function (scope) {\n var mapBounds = map.getBounds();\n scope.bounds = {\n northEast: {\n lat: mapBounds._northEast.lat,\n lng: mapBounds._northEast.lng\n },\n southWest: {\n lat: mapBounds._southWest.lat,\n lng: mapBounds._southWest.lng\n }\n };\n });\n } else if (!isDefined(centerModel)) {\n $log.error(errorHeader + ' The \"center\" property is not defined in the main scope');\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n return;\n } else if (!(isDefined(centerModel.lat) && isDefined(centerModel.lng)) && !isDefined(centerModel.autoDiscover)) {\n angular.copy(defaults.center, centerModel);\n }\n\n var urlCenterHash, mapReady;\n if (attrs.urlHashCenter === \"yes\") {\n var extractCenterFromUrl = function extractCenterFromUrl() {\n var search = $location.search();\n var centerParam;\n if (isDefined(search.c)) {\n var cParam = search.c.split(\":\");\n if (cParam.length === 3) {\n centerParam = {\n lat: parseFloat(cParam[0]),\n lng: parseFloat(cParam[1]),\n zoom: parseInt(cParam[2], 10)\n };\n }\n }\n return centerParam;\n };\n urlCenterHash = extractCenterFromUrl();\n\n leafletScope.$on('$locationChangeSuccess', function (event) {\n var scope = event.currentScope;\n //$log.debug(\"updated location...\");\n var urlCenter = extractCenterFromUrl();\n if (isDefined(urlCenter) && !isSameCenterOnMap(urlCenter, map)) {\n //$log.debug(\"updating center model...\", urlCenter);\n angular.extend(scope[directiveName], {\n lat: urlCenter.lat,\n lng: urlCenter.lng,\n zoom: urlCenter.zoom\n });\n }\n });\n }\n\n leafletScope.$watch(directiveName, function (center) {\n if (leafletScope.settingCenterFromLeaflet) return;\n //$log.debug(\"updated center model...\");\n // The center from the URL has priority\n if (isDefined(urlCenterHash)) {\n angular.copy(urlCenterHash, center);\n urlCenterHash = undefined;\n }\n\n if (!isValidCenter(center) && center.autoDiscover !== true) {\n $log.warn(errorHeader + \" invalid 'center'\");\n //map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n return;\n }\n\n if (center.autoDiscover === true) {\n if (!isNumber(center.zoom)) {\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n }\n if (isNumber(center.zoom) && center.zoom > defaults.center.zoom) {\n map.locate({\n setView: true,\n maxZoom: center.zoom\n });\n } else if (isDefined(defaults.maxZoom)) {\n map.locate({\n setView: true,\n maxZoom: defaults.maxZoom\n });\n } else {\n map.locate({\n setView: true\n });\n }\n return;\n }\n\n if (mapReady && isSameCenterOnMap(center, map)) {\n //$log.debug(\"no need to update map again.\");\n return;\n }\n\n //$log.debug(\"updating map center...\", center);\n leafletScope.settingCenterFromScope = true;\n map.setView([center.lat, center.lng], center.zoom);\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n $timeout(function () {\n leafletScope.settingCenterFromScope = false;\n //$log.debug(\"allow center scope updates\");\n });\n }, true);\n\n map.whenReady(function () {\n mapReady = true;\n });\n\n map.on('moveend', function () /* event */{\n // Resolve the center after the first map position\n _leafletCenter.resolve();\n leafletMapEvents.notifyCenterUrlHashChanged(leafletScope, map, attrs, $location.search());\n //$log.debug(\"updated center on map...\");\n if (isSameCenterOnMap(centerModel, map) || leafletScope.settingCenterFromScope) {\n //$log.debug(\"same center in model, no need to update again.\");\n return;\n }\n leafletScope.settingCenterFromLeaflet = true;\n safeApply(leafletScope, function (scope) {\n if (!leafletScope.settingCenterFromScope) {\n //$log.debug(\"updating center model...\", map.getCenter(), map.getZoom());\n angular.extend(scope[directiveName], {\n lat: map.getCenter().lat,\n lng: map.getCenter().lng,\n zoom: map.getZoom(),\n autoDiscover: false\n });\n }\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n $timeout(function () {\n leafletScope.settingCenterFromLeaflet = false;\n });\n });\n });\n\n if (centerModel.autoDiscover === true) {\n map.on('locationerror', function () {\n $log.warn(errorHeader + \" The Geolocation API is unauthorized on this page.\");\n if (isValidCenter(centerModel)) {\n map.setView([centerModel.lat, centerModel.lng], centerModel.zoom);\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n } else {\n map.setView([defaults.center.lat, defaults.center.lng], defaults.center.zoom);\n leafletMapEvents.notifyCenterChangedToBounds(leafletScope, map);\n }\n });\n }\n });\n }\n };\n }];\n});\n\ncenterDirectiveTypes.forEach(function (dirType) {\n angular.module('ui-leaflet').directive(dirType, centerDirectives[dirType]);\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('controls', function (leafletLogger, leafletHelpers, leafletControlHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: '?^leaflet',\n\n link: function link(scope, element, attrs, controller) {\n if (!controller) {\n return;\n }\n\n var createControl = leafletControlHelpers.createControl;\n var isValidControlType = leafletControlHelpers.isValidControlType;\n var leafletScope = controller.getLeafletScope();\n var isDefined = leafletHelpers.isDefined;\n var isArray = leafletHelpers.isArray;\n var leafletControls = {};\n var errorHeader = leafletHelpers.errorHeader + ' [Controls] ';\n\n controller.getMap().then(function (map) {\n\n leafletScope.$watchCollection('controls', function (newControls) {\n\n // Delete controls from the array\n for (var name in leafletControls) {\n if (!isDefined(newControls[name])) {\n if (map.hasControl(leafletControls[name])) {\n map.removeControl(leafletControls[name]);\n }\n delete leafletControls[name];\n }\n }\n\n for (var newName in newControls) {\n var control;\n\n var controlType = isDefined(newControls[newName].type) ? newControls[newName].type : newName;\n\n if (!isValidControlType(controlType)) {\n $log.error(errorHeader + ' Invalid control type: ' + controlType + '.');\n return;\n }\n\n if (controlType !== 'custom') {\n control = createControl(controlType, newControls[newName]);\n map.addControl(control);\n leafletControls[newName] = control;\n } else {\n var customControlValue = newControls[newName];\n if (isArray(customControlValue)) {\n for (var i in customControlValue) {\n var customControl = customControlValue[i];\n map.addControl(customControl);\n leafletControls[newName] = !isDefined(leafletControls[newName]) ? [customControl] : leafletControls[newName].concat([customControl]);\n }\n } else {\n map.addControl(customControlValue);\n leafletControls[newName] = customControlValue;\n }\n }\n }\n });\n });\n }\n };\n});\n","\"use strict\";\n\nangular.module('ui-leaflet').directive(\"decorations\", function (leafletLogger, leafletHelpers) {\n\tvar $log = leafletLogger;\n\treturn {\n\t\trestrict: \"A\",\n\t\tscope: false,\n\t\treplace: false,\n\t\trequire: 'leaflet',\n\n\t\tlink: function link(scope, element, attrs, controller) {\n\t\t\tvar leafletScope = controller.getLeafletScope(),\n\t\t\t PolylineDecoratorPlugin = leafletHelpers.PolylineDecoratorPlugin,\n\t\t\t isDefined = leafletHelpers.isDefined,\n\t\t\t leafletDecorations = {};\n\n\t\t\t/* Creates an \"empty\" decoration with a set of coordinates, but no pattern. */\n\t\t\tfunction createDecoration(options) {\n\t\t\t\tif (isDefined(options) && isDefined(options.coordinates)) {\n\t\t\t\t\tif (!PolylineDecoratorPlugin.isLoaded()) {\n\t\t\t\t\t\t$log.error('[AngularJS - Leaflet] The PolylineDecorator Plugin is not loaded.');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn L.polylineDecorator(options.coordinates);\n\t\t\t}\n\n\t\t\t/* Updates the path and the patterns for the provided decoration, and returns the decoration. */\n\t\t\tfunction setDecorationOptions(decoration, options) {\n\t\t\t\tif (isDefined(decoration) && isDefined(options)) {\n\t\t\t\t\tif (isDefined(options.coordinates) && isDefined(options.patterns)) {\n\t\t\t\t\t\tdecoration.setPaths(options.coordinates);\n\t\t\t\t\t\tdecoration.setPatterns(options.patterns);\n\t\t\t\t\t\treturn decoration;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontroller.getMap().then(function (map) {\n\t\t\t\tleafletScope.$watch(\"decorations\", function (newDecorations) {\n\t\t\t\t\tfor (var name in leafletDecorations) {\n\t\t\t\t\t\tif (!isDefined(newDecorations[name]) || !angular.equals(newDecorations[name], leafletDecorations)) {\n\t\t\t\t\t\t\tmap.removeLayer(leafletDecorations[name]);\n\t\t\t\t\t\t\tdelete leafletDecorations[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (var newName in newDecorations) {\n\t\t\t\t\t\tvar decorationData = newDecorations[newName],\n\t\t\t\t\t\t newDecoration = createDecoration(decorationData);\n\n\t\t\t\t\t\tif (isDefined(newDecoration)) {\n\t\t\t\t\t\t\tleafletDecorations[newName] = newDecoration;\n\t\t\t\t\t\t\tmap.addLayer(newDecoration);\n\t\t\t\t\t\t\tsetDecorationOptions(newDecoration, decorationData);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, true);\n\t\t\t});\n\t\t}\n\t};\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('eventBroadcast', function (leafletLogger, $rootScope, leafletHelpers, leafletMapEvents, leafletIterators) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function link(scope, element, attrs, controller) {\n var isObject = leafletHelpers.isObject,\n isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n eventBroadcast = leafletScope.eventBroadcast,\n availableMapEvents = leafletMapEvents.getAvailableMapEvents(),\n addEvents = leafletMapEvents.addEvents;\n\n controller.getMap().then(function (map) {\n\n var mapEvents = [],\n logic = \"broadcast\";\n\n // We have a possible valid object\n if (!isDefined(eventBroadcast.map)) {\n // We do not have events enable/disable do we do nothing (all enabled by default)\n mapEvents = availableMapEvents;\n } else if (!isObject(eventBroadcast.map)) {\n // Not a valid object\n $log.warn(\"[AngularJS - Leaflet] event-broadcast.map must be an object check your model.\");\n } else {\n // We have a possible valid map object\n // Event propadation logic\n if (eventBroadcast.map.logic !== \"emit\" && eventBroadcast.map.logic !== \"broadcast\") {\n // This is an error\n $log.warn(\"[AngularJS - Leaflet] Available event propagation logic are: 'emit' or 'broadcast'.\");\n } else {\n logic = eventBroadcast.map.logic;\n }\n\n if (!(isObject(eventBroadcast.map.enable) && eventBroadcast.map.enable.length >= 0)) {\n $log.warn(\"[AngularJS - Leaflet] event-broadcast.map.enable must be an object check your model.\");\n } else {\n // Enable events\n leafletIterators.each(eventBroadcast.map.enable, function (eventName) {\n // Do we have already the event enabled?\n if (mapEvents.indexOf(eventName) === -1 && availableMapEvents.indexOf(eventName) !== -1) {\n mapEvents.push(eventName);\n }\n });\n }\n }\n // as long as the map is removed in the root leaflet directive we\n // do not need ot clean up the events as leaflet does it itself\n addEvents(map, mapEvents, \"eventName\", leafletScope, logic);\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('geojson', function (leafletLogger, $rootScope, leafletData, leafletHelpers, leafletWatchHelpers, leafletDirectiveControlsHelpers, leafletIterators, leafletGeoJsonEvents) {\n var _maybeWatch = leafletWatchHelpers.maybeWatch,\n _defaultWatchOptions = leafletHelpers.watchOptions,\n _extendDirectiveControls = leafletDirectiveControlsHelpers.extend,\n hlp = leafletHelpers,\n $it = leafletIterators;\n // $log = leafletLogger;\n\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function link(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n leafletGeoJSON = {},\n _hasSetLeafletData = false;\n\n controller.getMap().then(function (map) {\n var watchOptions;\n if (leafletScope.watchOptions && leafletScope.watchOptions.geojson) {\n watchOptions = leafletScope.watchOptions.geojson;\n } else {\n watchOptions = _defaultWatchOptions;\n }\n\n var _hookUpEvents = function _hookUpEvents(geojson, maybeName) {\n var onEachFeature;\n\n if (angular.isFunction(geojson.onEachFeature)) {\n onEachFeature = geojson.onEachFeature;\n } else {\n onEachFeature = function (feature, layer) {\n if (leafletHelpers.LabelPlugin.isLoaded() && isDefined(feature.properties.description)) {\n layer.bindLabel(feature.properties.description);\n }\n\n leafletGeoJsonEvents.bindEvents(attrs.id, layer, null, feature, leafletScope, maybeName, { resetStyleOnMouseout: geojson.resetStyleOnMouseout,\n mapId: attrs.id });\n };\n }\n return onEachFeature;\n };\n\n var isNested = hlp.isDefined(attrs.geojsonNested) && hlp.isTruthy(attrs.geojsonNested);\n\n var _clean = function _clean() {\n if (!leafletGeoJSON) return;\n var _remove = function _remove(lObject) {\n if (isDefined(lObject) && map.hasLayer(lObject)) {\n map.removeLayer(lObject);\n }\n };\n if (isNested) {\n $it.each(leafletGeoJSON, function (lObject) {\n _remove(lObject);\n });\n return;\n }\n _remove(leafletGeoJSON);\n };\n\n var _addGeojson = function _addGeojson(model, maybeName) {\n var geojson = angular.copy(model);\n if (!(isDefined(geojson) && isDefined(geojson.data))) {\n return;\n }\n var onEachFeature = _hookUpEvents(geojson, maybeName);\n\n if (!isDefined(geojson.options)) {\n //right here is why we use a clone / copy (we modify and thus)\n //would kick of a watcher.. we need to be more careful everywhere\n //for stuff like this\n geojson.options = {\n style: geojson.style,\n filter: geojson.filter,\n onEachFeature: onEachFeature,\n pointToLayer: geojson.pointToLayer\n };\n }\n\n var lObject = L.geoJson(geojson.data, geojson.options);\n\n if (maybeName && hlp.isString(maybeName)) {\n leafletGeoJSON[maybeName] = lObject;\n } else {\n leafletGeoJSON = lObject;\n }\n\n lObject.addTo(map);\n\n if (!_hasSetLeafletData) {\n //only do this once and play with the same ref forever\n _hasSetLeafletData = true;\n leafletData.setGeoJSON(leafletGeoJSON, attrs.id);\n }\n };\n\n var _create = function _create(model) {\n _clean();\n if (isNested) {\n if (!model || !Object.keys(model).length) return;\n $it.each(model, function (m, name) {\n //name could be layerName and or groupName\n //for now it is not tied to a layer\n _addGeojson(m, name);\n });\n return;\n }\n _addGeojson(model);\n };\n\n _extendDirectiveControls(attrs.id, 'geojson', _create, _clean);\n\n _maybeWatch(leafletScope, 'geojson', watchOptions, function (geojson) {\n _create(geojson);\n });\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('layercontrol', function ($filter, leafletLogger, leafletData, leafletHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"E\",\n scope: {\n icons: '=?',\n autoHideOpacity: '=?', // Hide other opacity controls when one is activated.\n showGroups: '=?', // Hide other opacity controls when one is activated.\n title: '@',\n baseTitle: '@',\n overlaysTitle: '@'\n },\n replace: true,\n transclude: false,\n require: '^leaflet',\n controller: function controller($scope, $element, $sce) {\n $log.debug('[Angular Directive - Layers] layers', $scope, $element);\n var safeApply = leafletHelpers.safeApply,\n isDefined = leafletHelpers.isDefined;\n angular.extend($scope, {\n baselayer: '',\n oldGroup: '',\n layerProperties: {},\n groupProperties: {},\n rangeIsSupported: leafletHelpers.rangeIsSupported(),\n changeBaseLayer: function changeBaseLayer(key, e) {\n leafletHelpers.safeApply($scope, function (scp) {\n scp.baselayer = key;\n leafletData.getMap().then(function (map) {\n leafletData.getLayers().then(function (leafletLayers) {\n if (map.hasLayer(leafletLayers.baselayers[key])) {\n return;\n }\n for (var i in scp.layers.baselayers) {\n scp.layers.baselayers[i].icon = scp.icons.unradio;\n if (map.hasLayer(leafletLayers.baselayers[i])) {\n map.removeLayer(leafletLayers.baselayers[i]);\n }\n }\n map.addLayer(leafletLayers.baselayers[key]);\n scp.layers.baselayers[key].icon = $scope.icons.radio;\n });\n });\n });\n e.preventDefault();\n },\n moveLayer: function moveLayer(ly, newIndex, e) {\n var delta = Object.keys($scope.layers.baselayers).length;\n if (newIndex >= 1 + delta && newIndex <= $scope.overlaysArray.length + delta) {\n var oldLy;\n for (var key in $scope.layers.overlays) {\n if ($scope.layers.overlays[key].index === newIndex) {\n oldLy = $scope.layers.overlays[key];\n break;\n }\n }\n if (oldLy) {\n safeApply($scope, function () {\n oldLy.index = ly.index;\n ly.index = newIndex;\n });\n }\n }\n e.stopPropagation();\n e.preventDefault();\n },\n initIndex: function initIndex(layer, idx) {\n var delta = Object.keys($scope.layers.baselayers).length;\n layer.index = isDefined(layer.index) ? layer.index : idx + delta + 1;\n },\n initGroup: function initGroup(groupName) {\n $scope.groupProperties[groupName] = $scope.groupProperties[groupName] ? $scope.groupProperties[groupName] : {};\n },\n toggleOpacity: function toggleOpacity(e, layer) {\n if (layer.visible) {\n if ($scope.autoHideOpacity && !$scope.layerProperties[layer.name].opacityControl) {\n for (var k in $scope.layerProperties) {\n $scope.layerProperties[k].opacityControl = false;\n }\n }\n $scope.layerProperties[layer.name].opacityControl = !$scope.layerProperties[layer.name].opacityControl;\n }\n e.stopPropagation();\n e.preventDefault();\n },\n toggleLegend: function toggleLegend(layer) {\n $scope.layerProperties[layer.name].showLegend = !$scope.layerProperties[layer.name].showLegend;\n },\n showLegend: function showLegend(layer) {\n return layer.legend && $scope.layerProperties[layer.name].showLegend;\n },\n unsafeHTML: function unsafeHTML(html) {\n return $sce.trustAsHtml(html);\n },\n getOpacityIcon: function getOpacityIcon(layer) {\n return layer.visible && $scope.layerProperties[layer.name].opacityControl ? $scope.icons.close : $scope.icons.open;\n },\n getGroupIcon: function getGroupIcon(group) {\n return group.visible ? $scope.icons.check : $scope.icons.uncheck;\n },\n changeOpacity: function changeOpacity(layer) {\n var op = $scope.layerProperties[layer.name].opacity;\n leafletData.getMap().then(function (map) {\n leafletData.getLayers().then(function (leafletLayers) {\n var ly;\n for (var k in $scope.layers.overlays) {\n if ($scope.layers.overlays[k] === layer) {\n ly = leafletLayers.overlays[k];\n break;\n }\n }\n\n if (map.hasLayer(ly)) {\n if (ly.setOpacity) {\n ly.setOpacity(op / 100);\n }\n if (ly.getLayers && ly.eachLayer) {\n ly.eachLayer(function (lay) {\n if (lay.setOpacity) {\n lay.setOpacity(op / 100);\n }\n });\n }\n }\n });\n });\n },\n changeGroupVisibility: function changeGroupVisibility(groupName) {\n if (!isDefined($scope.groupProperties[groupName])) {\n return;\n }\n var visible = $scope.groupProperties[groupName].visible;\n for (var k in $scope.layers.overlays) {\n var layer = $scope.layers.overlays[k];\n if (layer.group === groupName) {\n layer.visible = visible;\n }\n }\n }\n });\n\n var div = $element.get(0);\n if (!L.Browser.touch) {\n L.DomEvent.disableClickPropagation(div);\n L.DomEvent.on(div, 'mousewheel', L.DomEvent.stopPropagation);\n } else {\n L.DomEvent.on(div, 'click', L.DomEvent.stopPropagation);\n }\n },\n template: '
' + '

{{ title }}

' + '
' + '
{{ baseTitle }}
' + '
' + '' + '
' + '
' + '
' + '
{{ overlaysTitle }}
' + '
' + '
' + '' + '' + '
' + ' ' + ' ' + ' ' + '' + '
' + '
' + '
' + '' + '' + '' + '
Range is not supported in this browser
' + '
' + '
' + '
' + '
' + '
',\n link: function link(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n layers = leafletScope.layers;\n\n scope.$watch('icons', function () {\n var defaultIcons = {\n uncheck: 'fa fa-square-o',\n check: 'fa fa-check-square-o',\n radio: 'fa fa-dot-circle-o',\n unradio: 'fa fa-circle-o',\n up: 'fa fa-angle-up',\n down: 'fa fa-angle-down',\n open: 'fa fa-angle-double-down',\n close: 'fa fa-angle-double-up',\n toggleLegend: 'fa fa-pencil-square-o'\n };\n if (isDefined(scope.icons)) {\n angular.extend(defaultIcons, scope.icons);\n angular.extend(scope.icons, defaultIcons);\n } else {\n scope.icons = defaultIcons;\n }\n });\n\n // Setting layer stack order.\n attrs.order = isDefined(attrs.order) && (attrs.order === 'normal' || attrs.order === 'reverse') ? attrs.order : 'normal';\n scope.order = attrs.order === 'normal';\n scope.orderNumber = attrs.order === 'normal' ? -1 : 1;\n\n scope.layers = layers;\n controller.getMap().then(function (map) {\n leafletScope.$watch('layers.baselayers', function (newBaseLayers) {\n var baselayersArray = {};\n leafletData.getLayers().then(function (leafletLayers) {\n var key;\n for (key in newBaseLayers) {\n var layer = newBaseLayers[key];\n layer.icon = scope.icons[map.hasLayer(leafletLayers.baselayers[key]) ? 'radio' : 'unradio'];\n baselayersArray[key] = layer;\n }\n scope.baselayersArray = baselayersArray;\n });\n });\n\n leafletScope.$watch('layers.overlays', function (newOverlayLayers) {\n var overlaysArray = [];\n var groupVisibleCount = {};\n leafletData.getLayers().then(function (leafletLayers) {\n var key;\n for (key in newOverlayLayers) {\n var layer = newOverlayLayers[key];\n layer.icon = scope.icons[layer.visible ? 'check' : 'uncheck'];\n overlaysArray.push(layer);\n if (!isDefined(scope.layerProperties[layer.name])) {\n scope.layerProperties[layer.name] = {\n opacity: isDefined(layer.layerOptions.opacity) ? layer.layerOptions.opacity * 100 : 100,\n opacityControl: false,\n showLegend: true\n };\n }\n if (isDefined(layer.group)) {\n if (!isDefined(scope.groupProperties[layer.group])) {\n scope.groupProperties[layer.group] = {\n visible: false\n };\n }\n groupVisibleCount[layer.group] = isDefined(groupVisibleCount[layer.group]) ? groupVisibleCount[layer.group] : {\n count: 0,\n visibles: 0\n };\n groupVisibleCount[layer.group].count++;\n if (layer.visible) {\n groupVisibleCount[layer.group].visibles++;\n }\n }\n if (isDefined(layer.index) && leafletLayers.overlays[key].setZIndex) {\n leafletLayers.overlays[key].setZIndex(newOverlayLayers[key].index);\n }\n }\n\n for (key in groupVisibleCount) {\n scope.groupProperties[key].visible = groupVisibleCount[key].visibles === groupVisibleCount[key].count;\n }\n scope.overlaysArray = overlaysArray;\n });\n }, true);\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('layers', function (leafletLogger, $q, leafletData, leafletHelpers, leafletLayerHelpers, leafletControlHelpers) {\n // var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n controller: function controller($scope) {\n $scope._leafletLayers = $q.defer();\n this.getLayers = function () {\n return $scope._leafletLayers.promise;\n };\n },\n link: function link(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletLayers = {},\n leafletScope = controller.getLeafletScope(),\n layers = leafletScope.layers,\n createLayer = leafletLayerHelpers.createLayer,\n safeAddLayer = leafletLayerHelpers.safeAddLayer,\n safeRemoveLayer = leafletLayerHelpers.safeRemoveLayer,\n updateLayersControl = leafletControlHelpers.updateLayersControl,\n isLayersControlVisible = false;\n\n controller.getMap().then(function (map) {\n\n // We have baselayers to add to the map\n scope._leafletLayers.resolve(leafletLayers);\n leafletData.setLayers(leafletLayers, attrs.id);\n\n leafletLayers.baselayers = {};\n leafletLayers.overlays = {};\n\n var mapId = attrs.id;\n\n // Setup all baselayers definitions\n var oneVisibleLayer = false;\n for (var layerName in layers.baselayers) {\n var newBaseLayer = createLayer(layers.baselayers[layerName]);\n if (!isDefined(newBaseLayer)) {\n delete layers.baselayers[layerName];\n continue;\n }\n leafletLayers.baselayers[layerName] = newBaseLayer;\n // Only add the visible layer to the map, layer control manages the addition to the map\n // of layers in its control\n if (layers.baselayers[layerName].top === true) {\n safeAddLayer(map, leafletLayers.baselayers[layerName]);\n oneVisibleLayer = true;\n }\n }\n\n // If there is no visible layer add first to the map\n if (!oneVisibleLayer && Object.keys(leafletLayers.baselayers).length > 0) {\n safeAddLayer(map, leafletLayers.baselayers[Object.keys(layers.baselayers)[0]]);\n }\n\n // Setup the Overlays\n for (layerName in layers.overlays) {\n if (layers.overlays[layerName].type === 'cartodb') {}\n var newOverlayLayer = createLayer(layers.overlays[layerName]);\n if (!isDefined(newOverlayLayer)) {\n delete layers.overlays[layerName];\n continue;\n }\n leafletLayers.overlays[layerName] = newOverlayLayer;\n // Only add the visible overlays to the map\n if (layers.overlays[layerName].visible === true) {\n safeAddLayer(map, leafletLayers.overlays[layerName]);\n }\n }\n\n // Watch for the base layers\n leafletScope.$watch('layers.baselayers', function (newBaseLayers, oldBaseLayers) {\n if (angular.equals(newBaseLayers, oldBaseLayers)) {\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, newBaseLayers, layers.overlays, leafletLayers);\n return true;\n }\n // Delete layers from the array\n for (var name in leafletLayers.baselayers) {\n if (!isDefined(newBaseLayers[name]) || newBaseLayers[name].doRefresh) {\n // Remove from the map if it's on it\n if (map.hasLayer(leafletLayers.baselayers[name])) {\n map.removeLayer(leafletLayers.baselayers[name]);\n }\n delete leafletLayers.baselayers[name];\n\n if (newBaseLayers[name] && newBaseLayers[name].doRefresh) {\n newBaseLayers[name].doRefresh = false;\n }\n }\n }\n // add new layers\n for (var newName in newBaseLayers) {\n if (!isDefined(leafletLayers.baselayers[newName])) {\n var testBaseLayer = createLayer(newBaseLayers[newName]);\n if (isDefined(testBaseLayer)) {\n leafletLayers.baselayers[newName] = testBaseLayer;\n // Only add the visible layer to the map\n if (newBaseLayers[newName].top === true) {\n safeAddLayer(map, leafletLayers.baselayers[newName]);\n }\n }\n } else {\n if (newBaseLayers[newName].top === true && !map.hasLayer(leafletLayers.baselayers[newName])) {\n safeAddLayer(map, leafletLayers.baselayers[newName]);\n } else if (newBaseLayers[newName].top === false && map.hasLayer(leafletLayers.baselayers[newName])) {\n map.removeLayer(leafletLayers.baselayers[newName]);\n }\n }\n }\n\n //we have layers, so we need to make, at least, one active\n var found = false;\n // search for an active layer\n for (var key in leafletLayers.baselayers) {\n if (map.hasLayer(leafletLayers.baselayers[key])) {\n found = true;\n break;\n }\n }\n // If there is no active layer make one active\n if (!found && Object.keys(leafletLayers.baselayers).length > 0) {\n safeAddLayer(map, leafletLayers.baselayers[Object.keys(leafletLayers.baselayers)[0]]);\n }\n\n // Only show the layers switch selector control if we have more than one baselayer + overlay\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, newBaseLayers, layers.overlays, leafletLayers);\n }, true);\n\n // Watch for the overlay layers\n leafletScope.$watch('layers.overlays', function (newOverlayLayers, oldOverlayLayers) {\n if (angular.equals(newOverlayLayers, oldOverlayLayers)) {\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, layers.baselayers, newOverlayLayers, leafletLayers);\n return true;\n }\n\n // Delete layers from the array\n for (var name in leafletLayers.overlays) {\n if (!isDefined(newOverlayLayers[name]) || newOverlayLayers[name].doRefresh) {\n // Remove from the map if it's on it\n if (map.hasLayer(leafletLayers.overlays[name])) {\n // Safe remove when ArcGIS layers is loading.\n var options = isDefined(newOverlayLayers[name]) ? newOverlayLayers[name].layerOptions : null;\n safeRemoveLayer(map, leafletLayers.overlays[name], options);\n }\n // TODO: Depending on the layer type we will have to delete what's included on it\n delete leafletLayers.overlays[name];\n\n if (newOverlayLayers[name] && newOverlayLayers[name].doRefresh) {\n newOverlayLayers[name].doRefresh = false;\n }\n }\n }\n\n // add new overlays\n for (var newName in newOverlayLayers) {\n if (!isDefined(leafletLayers.overlays[newName])) {\n var testOverlayLayer = createLayer(newOverlayLayers[newName]);\n if (!isDefined(testOverlayLayer)) {\n // If the layer creation fails, continue to the next overlay\n continue;\n }\n leafletLayers.overlays[newName] = testOverlayLayer;\n if (newOverlayLayers[newName].visible === true) {\n safeAddLayer(map, leafletLayers.overlays[newName]);\n }\n } else {\n // check for the .visible property to hide/show overLayers\n if (newOverlayLayers[newName].visible && !map.hasLayer(leafletLayers.overlays[newName])) {\n safeAddLayer(map, leafletLayers.overlays[newName]);\n } else if (newOverlayLayers[newName].visible === false && map.hasLayer(leafletLayers.overlays[newName])) {\n // Safe remove when ArcGIS layers is loading.\n safeRemoveLayer(map, leafletLayers.overlays[newName], newOverlayLayers[newName].layerOptions);\n }\n }\n\n //refresh heatmap data if present\n if (newOverlayLayers[newName].visible && map._loaded && newOverlayLayers[newName].data && newOverlayLayers[newName].type === \"heatmap\") {\n leafletLayers.overlays[newName].setData(newOverlayLayers[newName].data);\n leafletLayers.overlays[newName].update();\n }\n }\n\n // Only add the layers switch selector control if we have more than one baselayer + overlay\n isLayersControlVisible = updateLayersControl(map, mapId, isLayersControlVisible, layers.baselayers, newOverlayLayers, leafletLayers);\n }, true);\n });\n }\n };\n});\n","'use strict';\n\nangular.module(\"ui-leaflet\").directive('legend', function (leafletLogger, $http, $timeout, leafletHelpers, leafletLegendHelpers) {\n var $log = leafletLogger,\n errorHeader = leafletHelpers.errorHeader + ' [Legend] ';\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n transclude: false,\n\n link: function link(scope, element, attrs, controller) {\n\n var isArray = leafletHelpers.isArray,\n isString = leafletHelpers.isString,\n isDefined = leafletHelpers.isDefined,\n isFunction = leafletHelpers.isFunction,\n leafletScope = controller.getLeafletScope(),\n legend = leafletScope.legend;\n\n var legendClass;\n var position;\n var leafletLegend;\n var type;\n\n leafletScope.$watch('legend', function (newLegend) {\n\n if (isDefined(newLegend)) {\n legendClass = newLegend.legendClass ? newLegend.legendClass : \"legend\";\n position = newLegend.position || 'bottomright';\n // default to arcgis\n type = newLegend.type || 'arcgis';\n }\n }, true);\n\n var createLegend = function createLegend(map, legendData, newURL) {\n if (legendData && legendData.layers && legendData.layers.length > 0) {\n if (isDefined(leafletLegend)) {\n leafletLegendHelpers.updateLegend(leafletLegend.getContainer(), legendData, type, newURL);\n } else {\n leafletLegend = L.control({\n position: position\n });\n leafletLegend.onAdd = leafletLegendHelpers.getOnAddLegend(legendData, legendClass, type, newURL);\n leafletLegend.addTo(map);\n }\n\n if (isDefined(legend.loadedData) && isFunction(legend.loadedData)) {\n legend.loadedData();\n }\n }\n };\n\n controller.getMap().then(function (map) {\n leafletScope.$watch('legend', function (newLegend) {\n if (!isDefined(newLegend)) {\n if (isDefined(leafletLegend)) {\n leafletLegend.removeFrom(map);\n leafletLegend = null;\n }\n\n return;\n }\n\n if (!isDefined(newLegend.url) && type === 'arcgis' && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) {\n $log.warn(errorHeader + \" legend.colors and legend.labels must be set.\");\n return;\n }\n\n if (isDefined(newLegend.url)) {\n $log.info(errorHeader + \" loading legend service.\");\n return;\n }\n\n if (isDefined(leafletLegend)) {\n leafletLegend.removeFrom(map);\n leafletLegend = null;\n }\n\n leafletLegend = L.control({\n position: position\n });\n\n if (type === 'arcgis') {\n leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass);\n }\n leafletLegend.addTo(map);\n });\n\n leafletScope.$watch('legend.url', function (newURL) {\n if (!isDefined(newURL)) {\n return;\n }\n\n if (!isArray(newURL) && !isString(newURL)) {\n $log.warn(errorHeader + \" legend.url must be an array or string.\");\n return;\n }\n\n var urls = isString(newURL) ? [newURL] : newURL;\n\n var legendData;\n var onResult = function onResult(idx, url) {\n return function (ld) {\n if (isDefined(ld.data.error)) {\n $log.warn(errorHeader + 'Error loadin legend from: ' + url, ld.data.error.message);\n } else {\n if (legendData && legendData.layers && legendData.layers.length > 0) {\n legendData.layers = legendData.layers.concat(ld.data.layers);\n } else {\n legendData = ld.data;\n }\n }\n\n if (idx === urls.length - 1) {\n createLegend(map, legendData, newURL);\n }\n };\n };\n var onError = function onError(err) {\n $log.warn(errorHeader + ' legend.url not loaded.', err);\n };\n\n for (var i = 0; i < urls.length; i++) {\n leafletLegendHelpers.addLegendURL(attrs.id, {\n url: urls[i],\n method: 'GET'\n }).then(onResult(i)).catch(onError);\n }\n });\n\n leafletScope.$watch('legend.legendData', function (legendData) {\n $log.debug('legendData', legendData);\n if (isDefined(leafletScope.legend.url) || !isDefined(legendData)) {\n return;\n }\n\n createLegend(map, legendData);\n }, true);\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('markers', function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers, leafletMapDefaults, leafletMarkersHelpers, leafletMarkerEvents, leafletIterators, leafletWatchHelpers, leafletDirectiveControlsHelpers) {\n //less terse vars to helpers\n var isDefined = leafletHelpers.isDefined,\n errorHeader = leafletHelpers.errorHeader,\n Helpers = leafletHelpers,\n isString = leafletHelpers.isString,\n addMarkerWatcher = leafletMarkersHelpers.addMarkerWatcher,\n updateMarker = leafletMarkersHelpers.updateMarker,\n listenMarkerEvents = leafletMarkersHelpers.listenMarkerEvents,\n addMarkerToGroup = leafletMarkersHelpers.addMarkerToGroup,\n createMarker = leafletMarkersHelpers.createMarker,\n deleteMarker = leafletMarkersHelpers.deleteMarker,\n getModelFromModels = leafletMarkersHelpers.getModelFromModels,\n getLayerModels = leafletMarkersHelpers.getLayerModels,\n $it = leafletIterators,\n _defaultWatchOptions = leafletHelpers.watchOptions,\n maybeWatch = leafletWatchHelpers.maybeWatch,\n extendDirectiveControls = leafletDirectiveControlsHelpers.extend,\n $log = leafletLogger;\n\n var _getLMarker = function _getLMarker(leafletMarkers, name, maybeLayerName) {\n if (!Object.keys(leafletMarkers).length) return;\n if (maybeLayerName && isString(maybeLayerName)) {\n if (!leafletMarkers[maybeLayerName] || !Object.keys(leafletMarkers[maybeLayerName]).length) return;\n return leafletMarkers[maybeLayerName][name];\n }\n return leafletMarkers[name];\n };\n\n var _setLMarker = function _setLMarker(lObject, leafletMarkers, name, maybeLayerName) {\n if (maybeLayerName && isString(maybeLayerName)) {\n if (!isDefined(leafletMarkers[maybeLayerName])) leafletMarkers[maybeLayerName] = {};\n leafletMarkers[maybeLayerName][name] = lObject;\n } else leafletMarkers[name] = lObject;\n return lObject;\n };\n\n var _maybeAddMarkerToLayer = function _maybeAddMarkerToLayer(layerName, layers, model, marker, watchType, map) {\n\n if (!isString(layerName)) {\n $log.error(errorHeader + ' A layername must be a string');\n return false;\n }\n\n if (!isDefined(layers)) {\n $log.error(errorHeader + ' You must add layers to the directive if the markers are going to use this functionality.');\n return false;\n }\n\n if (!isDefined(layers.overlays) || !isDefined(layers.overlays[layerName])) {\n $log.error(errorHeader + ' A marker can only be added to a layer of type \"group\"');\n return false;\n }\n var layerGroup = layers.overlays[layerName];\n if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) {\n $log.error(errorHeader + ' Adding a marker to an overlay needs a overlay of the type \"group\" or \"featureGroup\"');\n return false;\n }\n\n // The marker goes to a correct layer group, so first of all we add it\n layerGroup.addLayer(marker);\n\n // The marker is automatically added to the map depending on the visibility\n // of the layer, so we only have to open the popup if the marker is in the map\n if (watchType === null && map.hasLayer(marker) && model.focus === true) {\n marker.openPopup();\n }\n return true;\n };\n //TODO: move to leafletMarkersHelpers??? or make a new class/function file (leafletMarkersHelpers is large already)\n var _addMarkers = function _addMarkers(mapId, markersToRender, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, maybeLayerName, skips) {\n for (var newName in markersToRender) {\n if (skips[newName]) continue;\n\n if (newName.search(\"-\") !== -1) {\n $log.error('The marker can\\'t use a \"-\" on his key name: \"' + newName + '\".');\n continue;\n }\n\n var model = Helpers.copy(markersToRender[newName]);\n var pathToMarker = Helpers.getObjectDotPath(maybeLayerName ? [maybeLayerName, newName] : [newName]);\n var maybeLMarker = _getLMarker(leafletMarkers, newName, maybeLayerName);\n if (!isDefined(maybeLMarker)) {\n //(nmccready) very important to not have model changes when lObject is changed\n //this might be desirable in some cases but it causes two-way binding to lObject which is not ideal\n //if it is left as the reference then all changes from oldModel vs newModel are ignored\n //see _destroy (where modelDiff becomes meaningless if we do not copy here)\n var marker = createMarker(model);\n var layerName = (model ? model.layer : undefined) || maybeLayerName; //original way takes pref\n if (!isDefined(marker)) {\n $log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.');\n continue;\n }\n _setLMarker(marker, leafletMarkers, newName, maybeLayerName);\n\n // Bind message\n if (isDefined(model.message)) {\n marker.bindPopup(model.message, model.popupOptions);\n }\n\n // Add the marker to a cluster group if needed\n if (isDefined(model.group)) {\n var groupOptions = isDefined(model.groupOption) ? model.groupOption : null;\n addMarkerToGroup(marker, model.group, groupOptions, map);\n }\n\n // Show label if defined\n if (Helpers.LabelPlugin.isLoaded() && isDefined(model.label) && isDefined(model.label.message)) {\n marker.bindLabel(model.label.message, model.label.options);\n }\n\n // Check if the marker should be added to a layer\n if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))) {\n\n var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, watchOptions.individual.type, map);\n if (!pass) continue; //something went wrong move on in the loop\n } else if (!isDefined(model.group)) {\n // We do not have a layer attr, so the marker goes to the map layer\n map.addLayer(marker);\n if (watchOptions.individual.type === null && model.focus === true) {\n marker.openPopup();\n }\n }\n\n if (watchOptions.individual.type !== null) {\n addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, watchOptions.individual);\n }\n\n listenMarkerEvents(marker, model, leafletScope, watchOptions.individual.type, map);\n leafletMarkerEvents.bindEvents(mapId, marker, pathToMarker, model, leafletScope, layerName);\n } else {\n var oldModel = getModelFromModels(oldModels, newName, maybeLayerName);\n updateMarker(model, oldModel, maybeLMarker, pathToMarker, leafletScope, layers, map);\n }\n }\n };\n var _seeWhatWeAlreadyHave = function _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, isEqual, cb) {\n var hasLogged = false,\n equals = false,\n oldMarker,\n newMarker;\n\n var doCheckOldModel = isDefined(oldMarkerModels);\n for (var name in lMarkers) {\n if (!hasLogged) {\n $log.debug(errorHeader + \"[markers] destroy: \");\n hasLogged = true;\n }\n\n if (doCheckOldModel) {\n //might want to make the option (in watch options) to disable deep checking\n //ie the options to only check !== (reference check) instead of angular.equals (slow)\n newMarker = markerModels[name];\n oldMarker = oldMarkerModels[name];\n equals = angular.equals(newMarker, oldMarker) && isEqual;\n }\n if (!isDefined(markerModels) || !Object.keys(markerModels).length || !isDefined(markerModels[name]) || !Object.keys(markerModels[name]).length || equals) {\n if (cb && Helpers.isFunction(cb)) cb(newMarker, oldMarker, name);\n }\n }\n };\n var _destroy = function _destroy(markerModels, oldMarkerModels, lMarkers, map, layers) {\n _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, false, function (newMarker, oldMarker, lMarkerName) {\n $log.debug(errorHeader + '[marker] is deleting marker: ' + lMarkerName);\n deleteMarker(lMarkers[lMarkerName], map, layers);\n delete lMarkers[lMarkerName];\n });\n };\n\n var _getNewModelsToSkipp = function _getNewModelsToSkipp(newModels, oldModels, lMarkers) {\n var skips = {};\n _seeWhatWeAlreadyHave(newModels, oldModels, lMarkers, true, function (newMarker, oldMarker, lMarkerName) {\n $log.debug(errorHeader + '[marker] is already rendered, marker: ' + lMarkerName);\n skips[lMarkerName] = newMarker;\n });\n return skips;\n };\n\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet', '?layers'],\n\n link: function link(scope, element, attrs, controller) {\n var mapController = controller[0],\n leafletScope = mapController.getLeafletScope();\n\n mapController.getMap().then(function (map) {\n var leafletMarkers = {},\n getLayers;\n\n // If the layers attribute is used, we must wait until the layers are created\n if (isDefined(controller[1])) {\n getLayers = controller[1].getLayers;\n } else {\n getLayers = function () {\n var deferred = $q.defer();\n deferred.resolve();\n return deferred.promise;\n };\n }\n\n var watchOptions;\n if (leafletScope.watchOptions && leafletScope.watchOptions.markers) {\n watchOptions = leafletScope.watchOptions.markers;\n } else {\n watchOptions = _defaultWatchOptions;\n }\n\n var isNested = isDefined(attrs.markersNested) && Helpers.isTruthy(attrs.markersNested);\n\n getLayers().then(function (layers) {\n var _clean = function _clean(models, oldModels) {\n if (isNested) {\n $it.each(models, function (markerToMaybeDel, layerName) {\n var oldLayerModels = getLayerModels(oldModels, layerName);\n _destroy(markerToMaybeDel, oldLayerModels, leafletMarkers[layerName], map, layers);\n });\n return;\n }\n _destroy(models, oldModels, leafletMarkers, map, layers);\n };\n\n var _create = function _create(models, oldModels) {\n _clean(models, oldModels);\n var skips = null;\n if (isNested) {\n $it.each(models, function (markersToAdd, layerName) {\n var oldLayerModels = getLayerModels(oldModels, layerName);\n var newlayerModels = getLayerModels(models, layerName);\n skips = _getNewModelsToSkipp(newlayerModels, oldLayerModels, leafletMarkers[layerName]);\n _addMarkers(attrs.id, markersToAdd, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, layerName, skips);\n });\n return;\n }\n skips = _getNewModelsToSkipp(models, oldModels, leafletMarkers);\n _addMarkers(attrs.id, models, oldModels, map, layers, leafletMarkers, leafletScope, watchOptions, undefined, skips);\n };\n extendDirectiveControls(attrs.id, 'markers', _create, _clean);\n leafletData.setMarkers(leafletMarkers, attrs.id);\n\n maybeWatch(leafletScope, 'markers', watchOptions, function (newMarkers, oldMarkers) {\n _create(newMarkers, oldMarkers);\n });\n });\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('maxbounds', function (leafletLogger, leafletMapDefaults, leafletBoundsHelpers, leafletHelpers) {\n // var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function link(scope, element, attrs, controller) {\n var leafletScope = controller.getLeafletScope(),\n isValidBounds = leafletBoundsHelpers.isValidBounds,\n isNumber = leafletHelpers.isNumber;\n\n controller.getMap().then(function (map) {\n leafletScope.$watch(\"maxbounds\", function (maxbounds) {\n if (!isValidBounds(maxbounds)) {\n // Unset any previous maxbounds\n map.setMaxBounds();\n return;\n }\n\n var leafletBounds = leafletBoundsHelpers.createLeafletBounds(maxbounds);\n if (isNumber(maxbounds.pad)) {\n leafletBounds = leafletBounds.pad(maxbounds.pad);\n }\n\n map.setMaxBounds(leafletBounds);\n if (!attrs.center && !attrs.lfCenter) {\n map.fitBounds(leafletBounds);\n }\n });\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('paths', function (leafletLogger, $q, leafletData, leafletMapDefaults, leafletHelpers, leafletPathsHelpers, leafletPathEvents, leafletWatchHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet', '?layers'],\n\n link: function link(scope, element, attrs, controller) {\n var mapController = controller[0],\n isDefined = leafletHelpers.isDefined,\n isString = leafletHelpers.isString,\n leafletScope = mapController.getLeafletScope(),\n paths = leafletScope.paths,\n createPath = leafletPathsHelpers.createPath,\n bindPathEvents = leafletPathEvents.bindPathEvents,\n setPathOptions = leafletPathsHelpers.setPathOptions,\n maybeWatch = leafletWatchHelpers.maybeWatch;\n\n mapController.getMap().then(function (map) {\n var defaults = leafletMapDefaults.getDefaults(attrs.id),\n getLayers;\n\n // If the layers attribute is used, we must wait until the layers are created\n if (isDefined(controller[1])) {\n getLayers = controller[1].getLayers;\n } else {\n getLayers = function () {\n var deferred = $q.defer();\n deferred.resolve();\n return deferred.promise;\n };\n }\n\n if (!isDefined(paths)) {\n return;\n }\n\n //legacy behaviour does a watch collection on the paths\n var _legacyWatchOptions = {\n type: 'watchCollection',\n individual: {\n type: 'watchDeep'\n }\n };\n\n var watchOptions;\n if (leafletScope.watchOptions && leafletScope.watchOptions.paths) {\n watchOptions = leafletScope.watchOptions.paths;\n } else {\n watchOptions = _legacyWatchOptions;\n }\n\n getLayers().then(function (layers) {\n\n var leafletPaths = {};\n leafletData.setPaths(leafletPaths, attrs.id);\n\n // Function for listening every single path once created\n var watchPathFn = function watchPathFn(leafletPath, name, watchOptions) {\n var pathWatchPath = \"paths[\\\"\" + name + \"\\\"]\";\n\n maybeWatch(leafletScope, pathWatchPath, watchOptions, function (pathData, old, clearWatch) {\n if (!isDefined(pathData)) {\n if (isDefined(old.layer)) {\n for (var i in layers.overlays) {\n var overlay = layers.overlays[i];\n overlay.removeLayer(leafletPath);\n }\n }\n map.removeLayer(leafletPath);\n clearWatch();\n return;\n }\n setPathOptions(leafletPath, pathData.type, pathData);\n });\n };\n\n var _clean = function _clean(newPaths) {\n // Delete paths (by name) from the array\n for (var name in leafletPaths) {\n if (!isDefined(newPaths[name])) {\n map.removeLayer(leafletPaths[name]);\n delete leafletPaths[name];\n }\n }\n };\n\n var _create = function _create(newPaths) {\n _clean(newPaths);\n // Create the new paths\n for (var newName in newPaths) {\n if (newName.search('\\\\$') === 0) {\n continue;\n }\n if (newName.search(\"-\") !== -1) {\n $log.error('[AngularJS - Leaflet] The path name \"' + newName + '\" is not valid. It must not include \"-\" and a number.');\n continue;\n }\n\n if (!isDefined(leafletPaths[newName])) {\n var pathData = newPaths[newName];\n var newPath = createPath(newName, newPaths[newName], defaults);\n\n // bind popup if defined\n if (isDefined(newPath) && isDefined(pathData.message)) {\n newPath.bindPopup(pathData.message, pathData.popupOptions);\n }\n\n // Show label if defined\n if (leafletHelpers.LabelPlugin.isLoaded() && isDefined(pathData.label) && isDefined(pathData.label.message)) {\n newPath.bindLabel(pathData.label.message, pathData.label.options);\n }\n\n // Check if the marker should be added to a layer\n if (isDefined(pathData) && isDefined(pathData.layer)) {\n\n if (!isString(pathData.layer)) {\n $log.error('[AngularJS - Leaflet] A layername must be a string');\n continue;\n }\n if (!isDefined(layers)) {\n $log.error('[AngularJS - Leaflet] You must add layers to the directive if the markers are going to use this functionality.');\n continue;\n }\n\n if (!isDefined(layers.overlays) || !isDefined(layers.overlays[pathData.layer])) {\n $log.error('[AngularJS - Leaflet] A path can only be added to a layer of type \"group\"');\n continue;\n }\n var layerGroup = layers.overlays[pathData.layer];\n if (!(layerGroup instanceof L.LayerGroup || layerGroup instanceof L.FeatureGroup)) {\n $log.error('[AngularJS - Leaflet] Adding a path to an overlay needs a overlay of the type \"group\" or \"featureGroup\"');\n continue;\n }\n\n // Listen for changes on the new path\n leafletPaths[newName] = newPath;\n // The path goes to a correct layer group, so first of all we add it\n layerGroup.addLayer(newPath);\n\n if (watchOptions.individual.type !== null) {\n watchPathFn(newPath, newName, watchOptions.individual);\n } else {\n setPathOptions(newPath, pathData.type, pathData);\n }\n } else if (isDefined(newPath)) {\n // Listen for changes on the new path\n leafletPaths[newName] = newPath;\n map.addLayer(newPath);\n\n if (watchOptions.individual.type !== null) {\n watchPathFn(newPath, newName, watchOptions.individual);\n } else {\n setPathOptions(newPath, pathData.type, pathData);\n }\n }\n\n bindPathEvents(attrs.id, newPath, newName, pathData, leafletScope);\n }\n }\n };\n\n maybeWatch(leafletScope, 'paths', watchOptions, function (newPaths) {\n _create(newPaths);\n });\n });\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('tiles', function (leafletLogger, leafletData, leafletMapDefaults, leafletHelpers) {\n var $log = leafletLogger;\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: 'leaflet',\n\n link: function link(scope, element, attrs, controller) {\n var isDefined = leafletHelpers.isDefined,\n leafletScope = controller.getLeafletScope(),\n tiles = leafletScope.tiles;\n\n if (!isDefined(tiles) || !isDefined(tiles.url)) {\n $log.warn(\"[AngularJS - Leaflet] The 'tiles' definition doesn't have the 'url' property.\");\n return;\n }\n\n controller.getMap().then(function (map) {\n var defaults = leafletMapDefaults.getDefaults(attrs.id);\n var tileLayerObj;\n leafletScope.$watch(\"tiles\", function (tiles) {\n var tileLayerOptions = defaults.tileLayerOptions;\n var tileLayerUrl = defaults.tileLayer;\n\n // If no valid tiles are in the scope, remove the last layer\n if (!isDefined(tiles.url) && isDefined(tileLayerObj)) {\n map.removeLayer(tileLayerObj);\n return;\n }\n\n // No leafletTiles object defined yet\n if (!isDefined(tileLayerObj)) {\n if (isDefined(tiles.options)) {\n angular.copy(tiles.options, tileLayerOptions);\n }\n\n if (isDefined(tiles.url)) {\n tileLayerUrl = tiles.url;\n }\n\n tileLayerObj = L.tileLayer(tileLayerUrl, tileLayerOptions);\n tileLayerObj.addTo(map);\n leafletData.setTiles(tileLayerObj, attrs.id);\n return;\n }\n\n // If the options of the tilelayer is changed, we need to redraw the layer\n if (isDefined(tiles.url) && isDefined(tiles.options) && !angular.equals(tiles.options, tileLayerOptions)) {\n map.removeLayer(tileLayerObj);\n tileLayerOptions = defaults.tileLayerOptions;\n angular.copy(tiles.options, tileLayerOptions);\n tileLayerUrl = tiles.url;\n tileLayerObj = L.tileLayer(tileLayerUrl, tileLayerOptions);\n tileLayerObj.addTo(map);\n leafletData.setTiles(tileLayerObj, attrs.id);\n return;\n }\n\n // Only the URL of the layer is changed, update the tiles object\n if (isDefined(tiles.url)) {\n tileLayerObj.setUrl(tiles.url);\n }\n }, true);\n });\n }\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').directive('watchOptions', ['$log', '$rootScope', '$q', 'leafletData', 'leafletHelpers', function (leafletLogger, $rootScope, $q, leafletData, leafletHelpers) {\n\n var isDefined = leafletHelpers.isDefined,\n errorHeader = leafletHelpers.errorHeader,\n isObject = leafletHelpers.isObject,\n $log = leafletLogger;\n\n return {\n restrict: \"A\",\n scope: false,\n replace: false,\n require: ['leaflet'],\n\n link: function link(scope, element, attrs, controller) {\n var mapController = controller[0],\n leafletScope = mapController.getLeafletScope();\n\n var _isValidWatchType = function _isValidWatchType(type) {\n return type === 'watch' || type === 'watchCollection' || type === 'watchDeep' || type === null;\n };\n\n if (isDefined(leafletScope.watchOptions) && isObject(leafletScope.watchOptions)) {\n angular.forEach(['markers', 'geojson', 'paths'], function (name) {\n if (isDefined(leafletScope.watchOptions[name])) {\n if (!_isValidWatchType(leafletScope.watchOptions[name].type)) {\n $log.error(errorHeader + ' watchOptions.' + name + '.type is not a valid type.');\n }\n if (isDefined(leafletScope.watchOptions[name].individual)) {\n if (!_isValidWatchType(leafletScope.watchOptions[name].individual.type)) {\n $log.error(errorHeader + ' watchOptions.' + name + '.individual.type is not a valid type.');\n }\n } else {\n $log.error(errorHeader + ' watchOptions.' + name + '.type.individual must be defined.');\n }\n }\n });\n }\n }\n };\n}]);\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletEventsHelpersFactory', function ($rootScope, $q, leafletLogger, leafletHelpers) {\n var safeApply = leafletHelpers.safeApply,\n isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n isArray = leafletHelpers.isArray,\n errorHeader = leafletHelpers.errorHeader,\n $log = leafletLogger;\n\n var EventsHelper = function EventsHelper(rootBroadcastName, lObjectType) {\n this.rootBroadcastName = rootBroadcastName;\n $log.debug(\"leafletEventsHelpersFactory: lObjectType: \" + lObjectType + \"rootBroadcastName: \" + rootBroadcastName);\n //used to path/key out certain properties based on the type , \"markers\", \"geojson\"\n this.lObjectType = lObjectType;\n };\n\n EventsHelper.prototype.getAvailableEvents = function () {\n return [];\n };\n\n /*\n argument: name: Note this can be a single string or dot notation\n Example:\n markerModel : {\n m1: { lat:_, lon: _}\n }\n //would yield name of\n name = \"m1\"\n If nested:\n markerModel : {\n cars: {\n m1: { lat:_, lon: _}\n }\n }\n //would yield name of\n name = \"cars.m1\"\n */\n EventsHelper.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) {\n var _this = this;\n\n maybeMapId = maybeMapId || '';\n if (maybeMapId) maybeMapId = '.' + maybeMapId;\n\n return function (e) {\n var broadcastName = _this.rootBroadcastName + maybeMapId + '.' + eventName;\n $log.debug(broadcastName);\n _this.fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName, extra);\n };\n };\n\n EventsHelper.prototype.fire = function (scope, broadcastName, logic, event, lObject, model, modelName, layerName, extra) {\n // Safely broadcast the event\n safeApply(scope, function () {\n var toSend = {\n leafletEvent: event,\n leafletObject: lObject,\n modelName: modelName,\n model: model\n };\n if (isDefined(layerName)) angular.extend(toSend, { layerName: layerName });\n\n if (logic === \"emit\") {\n scope.$emit(broadcastName, toSend);\n } else {\n $rootScope.$broadcast(broadcastName, toSend);\n }\n });\n };\n\n EventsHelper.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName, extra) {\n var events = [];\n var logic = 'emit';\n var _this = this;\n\n if (!isDefined(leafletScope.eventBroadcast)) {\n // Backward compatibility, if no event-broadcast attribute, all events are broadcasted\n events = this.getAvailableEvents();\n } else if (!isObject(leafletScope.eventBroadcast)) {\n // Not a valid object\n $log.error(errorHeader + \"event-broadcast must be an object check your model.\");\n } else {\n // We have a possible valid object\n if (!isDefined(leafletScope.eventBroadcast[_this.lObjectType])) {\n // We do not have events enable/disable do we do nothing (all enabled by default)\n events = this.getAvailableEvents();\n } else if (!isObject(leafletScope.eventBroadcast[_this.lObjectType])) {\n // Not a valid object\n $log.warn(errorHeader + 'event-broadcast.' + [_this.lObjectType] + ' must be an object check your model.');\n } else {\n // We have a possible valid map object\n // Event propadation logic\n if (isDefined(leafletScope.eventBroadcast[this.lObjectType].logic)) {\n // We take care of possible propagation logic\n if (leafletScope.eventBroadcast[_this.lObjectType].logic !== \"emit\" && leafletScope.eventBroadcast[_this.lObjectType].logic !== \"broadcast\") $log.warn(errorHeader + \"Available event propagation logic are: 'emit' or 'broadcast'.\");\n }\n // Enable / Disable\n var eventsEnable = false,\n eventsDisable = false;\n if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].enable) && isArray(leafletScope.eventBroadcast[_this.lObjectType].enable)) eventsEnable = true;\n if (isDefined(leafletScope.eventBroadcast[_this.lObjectType].disable) && isArray(leafletScope.eventBroadcast[_this.lObjectType].disable)) eventsDisable = true;\n\n if (eventsEnable && eventsDisable) {\n // Both are active, this is an error\n $log.warn(errorHeader + \"can not enable and disable events at the same time\");\n } else if (!eventsEnable && !eventsDisable) {\n // Both are inactive, this is an error\n $log.warn(errorHeader + \"must enable or disable events\");\n } else {\n // At this point the object is OK, lets enable or disable events\n if (eventsEnable) {\n // Enable events\n leafletScope.eventBroadcast[this.lObjectType].enable.forEach(function (eventName) {\n // Do we have already the event enabled?\n if (events.indexOf(eventName) !== -1) {\n // Repeated event, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" is already enabled\");\n } else {\n // Does the event exists?\n if (_this.getAvailableEvents().indexOf(eventName) === -1) {\n // The event does not exists, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist\");\n } else {\n // All ok enable the event\n events.push(eventName);\n }\n }\n });\n } else {\n // Disable events\n events = this.getAvailableEvents();\n leafletScope.eventBroadcast[_this.lObjectType].disable.forEach(function (eventName) {\n var index = events.indexOf(eventName);\n if (index === -1) {\n // The event does not exist\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist or has been already disabled\");\n } else {\n events.splice(index, 1);\n }\n });\n }\n }\n }\n }\n\n events.forEach(function (eventName) {\n lObject.on(eventName, _this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra));\n });\n return logic;\n };\n\n return EventsHelper;\n}).service('leafletEventsHelpers', function (leafletEventsHelpersFactory) {\n return new leafletEventsHelpersFactory();\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletGeoJsonEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletData) {\n var safeApply = leafletHelpers.safeApply,\n EventsHelper = leafletEventsHelpersFactory;\n // $log = leafletLogger;\n\n var GeoJsonEvents = function GeoJsonEvents() {\n EventsHelper.call(this, 'leafletDirectiveGeoJson', 'geojson');\n };\n\n GeoJsonEvents.prototype = new EventsHelper();\n\n GeoJsonEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName, extra) {\n var base = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName),\n _this = this;\n\n return function (e) {\n if (eventName === 'mouseout') {\n if (extra.resetStyleOnMouseout) {\n leafletData.getGeoJSON(extra.mapId).then(function (leafletGeoJSON) {\n //this is broken on nested needs to traverse or user layerName (nested)\n var lobj = layerName ? leafletGeoJSON[layerName] : leafletGeoJSON;\n lobj.resetStyle(e.target);\n });\n }\n safeApply(leafletScope, function () {\n $rootScope.$broadcast(_this.rootBroadcastName + '.mouseout', e);\n });\n }\n base(e); //common\n };\n };\n\n GeoJsonEvents.prototype.getAvailableEvents = function () {\n return ['click', 'dblclick', 'mouseover', 'mouseout'];\n };\n\n return new GeoJsonEvents();\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletLabelEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory) {\n var Helpers = leafletHelpers,\n EventsHelper = leafletEventsHelpersFactory;\n //$log = leafletLogger;\n\n var LabelEvents = function LabelEvents() {\n EventsHelper.call(this, 'leafletDirectiveLabel', 'markers');\n };\n LabelEvents.prototype = new EventsHelper();\n\n LabelEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n var markerName = name.replace('markers.', '');\n return EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, markerName, model, layerName);\n };\n\n LabelEvents.prototype.getAvailableEvents = function () {\n return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu'];\n };\n\n LabelEvents.prototype.genEvents = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n var _this = this;\n var labelEvents = this.getAvailableEvents();\n var scopeWatchName = Helpers.getObjectArrayPath(\"markers.\" + name);\n labelEvents.forEach(function (eventName) {\n lObject.label.on(eventName, _this.genDispatchEvent(maybeMapId, eventName, logic, leafletScope, lObject.label, scopeWatchName, model, layerName));\n });\n };\n\n LabelEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {};\n\n return new LabelEvents();\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletMapEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpers, leafletIterators) {\n var isDefined = leafletHelpers.isDefined,\n fire = leafletEventsHelpers.fire;\n\n var _getAvailableMapEvents = function _getAvailableMapEvents() {\n return ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'contextmenu', 'focus', 'blur', 'preclick', 'load', 'unload', 'viewreset', 'movestart', 'move', 'moveend', 'dragstart', 'drag', 'dragend', 'zoomstart', 'zoomanim', 'zoomend', 'zoomlevelschange', 'resize', 'autopanstart', 'layeradd', 'layerremove', 'baselayerchange', 'overlayadd', 'overlayremove', 'locationfound', 'locationerror', 'popupopen', 'popupclose', 'draw:created', 'draw:edited', 'draw:deleted', 'draw:drawstart', 'draw:drawstop', 'draw:editstart', 'draw:editstop', 'draw:deletestart', 'draw:deletestop'];\n };\n\n var _genDispatchMapEvent = function _genDispatchMapEvent(scope, eventName, logic, maybeMapId) {\n if (maybeMapId) maybeMapId = maybeMapId + '.';\n return function (e) {\n // Put together broadcast name\n var broadcastName = 'leafletDirectiveMap.' + maybeMapId + eventName;\n leafletLogger.debug(broadcastName);\n // Safely broadcast the event\n fire(scope, broadcastName, logic, e, e.target, scope);\n };\n };\n\n var _notifyCenterChangedToBounds = function _notifyCenterChangedToBounds(scope) {\n scope.$broadcast(\"boundsChanged\");\n };\n\n var _notifyCenterUrlHashChanged = function _notifyCenterUrlHashChanged(scope, map, attrs, search) {\n if (!isDefined(attrs.urlHashCenter)) {\n return;\n }\n var center = map.getCenter();\n var centerUrlHash = center.lat.toFixed(4) + \":\" + center.lng.toFixed(4) + \":\" + map.getZoom();\n if (!isDefined(search.c) || search.c !== centerUrlHash) {\n //$log.debug(\"notified new center...\");\n scope.$emit(\"centerUrlHash\", centerUrlHash);\n }\n };\n\n var _addEvents = function _addEvents(map, mapEvents, contextName, scope, logic) {\n leafletIterators.each(mapEvents, function (eventName) {\n var context = {};\n context[contextName] = eventName;\n map.on(eventName, _genDispatchMapEvent(scope, eventName, logic, map._container.id || ''), context);\n });\n };\n\n return {\n getAvailableMapEvents: _getAvailableMapEvents,\n genDispatchMapEvent: _genDispatchMapEvent,\n notifyCenterChangedToBounds: _notifyCenterChangedToBounds,\n notifyCenterUrlHashChanged: _notifyCenterUrlHashChanged,\n addEvents: _addEvents\n };\n});\n","'use strict';\n\nangular.module('ui-leaflet').factory('leafletMarkerEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletEventsHelpersFactory, leafletLabelEvents) {\n var safeApply = leafletHelpers.safeApply,\n isDefined = leafletHelpers.isDefined,\n Helpers = leafletHelpers,\n lblHelp = leafletLabelEvents,\n EventsHelper = leafletEventsHelpersFactory,\n $log = leafletLogger;\n\n var MarkerEvents = function MarkerEvents() {\n EventsHelper.call(this, 'leafletDirectiveMarker', 'markers');\n };\n\n MarkerEvents.prototype = new EventsHelper();\n\n MarkerEvents.prototype.genDispatchEvent = function (maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n var handle = EventsHelper.prototype.genDispatchEvent.call(this, maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName);\n return function (e) {\n // Broadcast old marker click name for backwards compatibility\n if (eventName === \"click\") {\n safeApply(leafletScope, function () {\n $rootScope.$broadcast('leafletDirectiveMarkersClick', name);\n });\n } else if (eventName === 'dragend') {\n safeApply(leafletScope, function () {\n model.lat = lObject.getLatLng().lat;\n model.lng = lObject.getLatLng().lng;\n });\n if (model.message && model.focus === true) {\n lObject.openPopup();\n }\n }\n handle(e); //common\n };\n };\n\n MarkerEvents.prototype.getAvailableEvents = function () {\n return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu', 'dragstart', 'drag', 'dragend', 'move', 'remove', 'popupopen', 'popupclose', 'touchend', 'touchstart', 'touchmove', 'touchcancel', 'touchleave'];\n };\n\n MarkerEvents.prototype.bindEvents = function (maybeMapId, lObject, name, model, leafletScope, layerName) {\n var logic = EventsHelper.prototype.bindEvents.call(this, maybeMapId, lObject, name, model, leafletScope, layerName);\n\n if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) {\n lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model, layerName);\n }\n };\n\n return new MarkerEvents();\n});\n","'use strict';\n\nfunction _typeof(obj) { return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; }\n\nangular.module('ui-leaflet').factory('leafletPathEvents', function ($rootScope, $q, leafletLogger, leafletHelpers, leafletLabelEvents, leafletEventsHelpers) {\n var isDefined = leafletHelpers.isDefined,\n isObject = leafletHelpers.isObject,\n Helpers = leafletHelpers,\n errorHeader = leafletHelpers.errorHeader,\n lblHelp = leafletLabelEvents,\n fire = leafletEventsHelpers.fire,\n $log = leafletLogger;\n\n /*\n TODO (nmccready) This EventsHelper needs to be derrived from leafletEventsHelpers to elminate copy and paste code.\n */\n\n var _genDispatchPathEvent = function _genDispatchPathEvent(maybeMapId, eventName, logic, leafletScope, lObject, name, model, layerName) {\n maybeMapId = maybeMapId || '';\n\n if (maybeMapId) maybeMapId = '.' + maybeMapId;\n\n return function (e) {\n var broadcastName = 'leafletDirectivePath' + maybeMapId + '.' + eventName;\n $log.debug(broadcastName);\n fire(leafletScope, broadcastName, logic, e, e.target || lObject, model, name, layerName);\n };\n };\n\n var _bindPathEvents = function _bindPathEvents(maybeMapId, lObject, name, model, leafletScope) {\n var pathEvents = [],\n i,\n eventName,\n logic = \"broadcast\";\n\n if (!isDefined(leafletScope.eventBroadcast)) {\n // Backward compatibility, if no event-broadcast attribute, all events are broadcasted\n pathEvents = _getAvailablePathEvents();\n } else if (!isObject(leafletScope.eventBroadcast)) {\n // Not a valid object\n $log.error(errorHeader + \"event-broadcast must be an object check your model.\");\n } else {\n // We have a possible valid object\n if (!isDefined(leafletScope.eventBroadcast.path)) {\n // We do not have events enable/disable do we do nothing (all enabled by default)\n pathEvents = _getAvailablePathEvents();\n } else if (isObject(leafletScope.eventBroadcast.paths)) {\n // Not a valid object\n $log.warn(errorHeader + \"event-broadcast.path must be an object check your model.\");\n } else {\n // We have a possible valid map object\n // Event propadation logic\n if (leafletScope.eventBroadcast.path.logic !== undefined && leafletScope.eventBroadcast.path.logic !== null) {\n // We take care of possible propagation logic\n if (leafletScope.eventBroadcast.path.logic !== \"emit\" && leafletScope.eventBroadcast.path.logic !== \"broadcast\") {\n // This is an error\n $log.warn(errorHeader + \"Available event propagation logic are: 'emit' or 'broadcast'.\");\n } else if (leafletScope.eventBroadcast.path.logic === \"emit\") {\n logic = \"emit\";\n }\n }\n // Enable / Disable\n var pathEventsEnable = false,\n pathEventsDisable = false;\n if (leafletScope.eventBroadcast.path.enable !== undefined && leafletScope.eventBroadcast.path.enable !== null) {\n if (_typeof(leafletScope.eventBroadcast.path.enable) === 'object') {\n pathEventsEnable = true;\n }\n }\n if (leafletScope.eventBroadcast.path.disable !== undefined && leafletScope.eventBroadcast.path.disable !== null) {\n if (_typeof(leafletScope.eventBroadcast.path.disable) === 'object') {\n pathEventsDisable = true;\n }\n }\n if (pathEventsEnable && pathEventsDisable) {\n // Both are active, this is an error\n $log.warn(errorHeader + \"can not enable and disable events at the same time\");\n } else if (!pathEventsEnable && !pathEventsDisable) {\n // Both are inactive, this is an error\n $log.warn(errorHeader + \"must enable or disable events\");\n } else {\n // At this point the path object is OK, lets enable or disable events\n if (pathEventsEnable) {\n // Enable events\n for (i = 0; i < leafletScope.eventBroadcast.path.enable.length; i++) {\n eventName = leafletScope.eventBroadcast.path.enable[i];\n // Do we have already the event enabled?\n if (pathEvents.indexOf(eventName) !== -1) {\n // Repeated event, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" is already enabled\");\n } else {\n // Does the event exists?\n if (_getAvailablePathEvents().indexOf(eventName) === -1) {\n // The event does not exists, this is an error\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist\");\n } else {\n // All ok enable the event\n pathEvents.push(eventName);\n }\n }\n }\n } else {\n // Disable events\n pathEvents = _getAvailablePathEvents();\n for (i = 0; i < leafletScope.eventBroadcast.path.disable.length; i++) {\n eventName = leafletScope.eventBroadcast.path.disable[i];\n var index = pathEvents.indexOf(eventName);\n if (index === -1) {\n // The event does not exist\n $log.warn(errorHeader + \"This event \" + eventName + \" does not exist or has been already disabled\");\n } else {\n pathEvents.splice(index, 1);\n }\n }\n }\n }\n }\n }\n\n for (i = 0; i < pathEvents.length; i++) {\n eventName = pathEvents[i];\n lObject.on(eventName, _genDispatchPathEvent(maybeMapId, eventName, logic, leafletScope, pathEvents, name));\n }\n\n if (Helpers.LabelPlugin.isLoaded() && isDefined(lObject.label)) {\n lblHelp.genEvents(maybeMapId, name, logic, leafletScope, lObject, model);\n }\n };\n\n var _getAvailablePathEvents = function _getAvailablePathEvents() {\n return ['click', 'dblclick', 'mousedown', 'mouseover', 'mouseout', 'contextmenu', 'add', 'remove', 'popupopen', 'popupclose'];\n };\n\n return {\n getAvailablePathEvents: _getAvailablePathEvents,\n bindPathEvents: _bindPathEvents\n };\n});\n"]} \ No newline at end of file diff --git a/grunt/aliases.coffee b/grunt/aliases.coffee new file mode 100644 index 00000000..8fbd3079 --- /dev/null +++ b/grunt/aliases.coffee @@ -0,0 +1,49 @@ +module.exports = + test:[ 'jshint', 'testunit', 'teste2e'] + + testunit: ['karma'] + + teste2e:[ 'shell:protractor_update', 'connect:testserver', 'protractor:run'] + + teste2efirefox:[ 'shell:protractor_update', 'connect:testserver', 'protractor:firefox'] + + testcoverage: ['karma'] + + coverage:['karma', 'open:coverage', 'connect:coverage'] + + install:[ 'shell:npm_install','bower:install','shell:protractor_update'] + + default:['build'] + + # cause zsh always puts me in grunt folder + d:['default'] + + dev:['connect:devserver', 'open:devserver', 'watch:source' ] + + #continuos running specs + spec: [ 'fastbuild', 'concurrent:unit' ] + + serve:['concurrent:watchServe'] + + s:['serve'] + + fastbuild:[ 'clean:dist', 'jshint' ,'babel', 'concat:dist', 'concat:distMapped', 'ngAnnotate'] + + dwatch:[ 'fastbuild', 'concurrent:unit' ] + + build:[ 'fastbuild', 'uglify', 'testunit', 'concat:license', 'clean:pre' ] + + travis:[ 'fastbuild', 'bower:install', 'testunit' ] + + + 'bump@':[ 'bumponly', 'default', 'graph', 'bumpcommit' ] + + 'bump@minor':[ 'bumponly:minor', 'default', 'graph', 'bumpcommit' ] + + 'bump@major':[ 'bumponly:major', 'default', 'graph', 'bumpcommit' ] + #To Update examples for Viewer + examples:[ 'shell:examples', 'concat:examples' ] + + graph:['angular_architecture_graph'] + + website:['concurrent:website'] diff --git a/grunt/aliases.yaml b/grunt/aliases.yaml deleted file mode 100644 index ae758f8b..00000000 --- a/grunt/aliases.yaml +++ /dev/null @@ -1,116 +0,0 @@ -test: - - 'jshint' - - 'test-unit' - - 'test-e2e' - -test-unit: - - 'karma:unit' - -test-unit-chrome: - - 'karma:unit-chrome' - -test-e2e: - - 'shell:protractor_update' - - 'connect:testserver' - - 'protractor:run' - -test-e2e-firefox: - - 'shell:protractor_update' - - 'connect:testserver' - - 'protractor:firefox' - -test-coverage: - - 'karma:unit_coverage' - -coverage: - - 'karma:unit_coverage' - - 'open:coverage' - - 'connect:coverage' - -install: - - 'shell:npm_install' - - 'bower:install' - - 'shell:protractor_update' - -default: - - 'build' - -# cause zsh always puts me in grunt folder -d: -- 'default' - -dev: - - 'connect:devserver' - - 'open:devserver' - - 'watch:source' - -dev-chrome: - - 'connect:devserver' - - 'open:devserver' - - 'watch:chrome' - -spec: #continuos running specs - - 'fast-build' - - 'concurrent:unit-mocha' - -spec-chrome: - - 'fast-build' - - 'concurrent:chrome' - -serve: - - 'concurrent:watchServe' - -s: - - 'serve' - -fast-build: - - 'clean:dist' - - 'jshint' - - 'concat:dist' - - 'concat:distMapped' - - 'ngAnnotate' - -d-watch: - - 'fast-build' - - 'concurrent:unit' - -build: - - 'fast-build' - - 'uglify' - - 'test-unit' - - 'concat:license' - - 'clean:pre' - -travis: - - 'fast-build' - - 'bower:install' - - 'test-unit' - -bump-@: - - 'bump-only' - - 'default' - - 'graph' - - 'bump-commit' - -bump-@-minor: - - 'bump-only:minor' - - 'default' - - 'graph' - - 'bump-commit' - -bump-@-major: - - 'bump-only:major' - - 'default' - - 'graph' - - 'bump-commit' - -#To Update examples for Viewer -examples: - - 'shell:examples' - - 'concat:examples' - -graph: - - 'angular_architecture_graph' - -website: - - 'concurrent:website' diff --git a/grunt/angular_architecture_graph.js b/grunt/angular_architecture_graph.js index fac65467..b4e54426 100644 --- a/grunt/angular_architecture_graph.js +++ b/grunt/angular_architecture_graph.js @@ -4,7 +4,7 @@ module.exports = function (grunt, options) { return { diagram: { files: { - "dist/architecture": ["dist/<%= pkg.name %>.js"] + "dist/architecture": ["dist/<%= pkg.name %>.js"] } } }; diff --git a/grunt/babel.js b/grunt/babel.js new file mode 100644 index 00000000..2eb7786c --- /dev/null +++ b/grunt/babel.js @@ -0,0 +1,20 @@ +'use strict'; + +module.exports = function (grunt, options) { + return { + options: { + sourceMap: false, + compact: false, + presets: ['es2015'] + }, + dist: { + files: [{ + expand: true, + cwd: 'src', + src: ['**/*.js'], + dest: 'dist/src', + ext: '.js' + }] + } + }; +}; diff --git a/grunt/bower.js b/grunt/bower.js index a23e3483..059baaf2 100644 --- a/grunt/bower.js +++ b/grunt/bower.js @@ -3,10 +3,10 @@ module.exports = function (grunt, options) { return { install: { - // options: { - // targetDir: './bower_components', - // cleanup: true - // } + // options: { + // targetDir: './bower_components', + // cleanup: true + // } } }; }; diff --git a/grunt/changelog.js b/grunt/changelog.js index 0cd19677..92365aa7 100644 --- a/grunt/changelog.js +++ b/grunt/changelog.js @@ -1,25 +1,25 @@ 'use strict'; var _ = require('lodash'), - _pkg = require('../package.json'), - last = _.last(_pkg.version.split('.')), - next = Number(last) + 1, - argv = require('yargs').argv; +_pkg = require('../package.json'), +last = _.last(_pkg.version.split('.')), +next = Number(last) + 1, +argv = require('yargs').argv; /* -_pkg.nextVersion only works for patch updates + _pkg.nextVersion only works for patch updates -Using changelog in the workflow is not really recommended right now as changelog is not really able to be modified until -a new tag is released. + Using changelog in the workflow is not really recommended right now as changelog is not really able to be modified until + a new tag is released. -Using Yargs as a workaround which grunt should be used in this way: + Using Yargs as a workaround which grunt should be used in this way: -`grunt changelog --ui_leaflet_ver SOME_TAG_NUMBER` -*/ + `grunt changelog --ui_leaflet_ver SOME_TAG_NUMBER` + */ _pkg.nextVersion = _pkg.version.replace(last, String(next)); module.exports = function (grunt, options) { return { - options:{ + options: { version: argv.ui_leaflet_ver || _pkg.nextVersion } }; diff --git a/grunt/concat.js b/grunt/concat.js index 370bacc4..96cdf127 100644 --- a/grunt/concat.js +++ b/grunt/concat.js @@ -8,9 +8,9 @@ concatDist = { footer: '\n}(angular));' }, src: [ - 'src/directives/leaflet.js', - 'src/services/*.js', - 'src/**/*.js' + 'dist/src/directives/leaflet.js', + 'dist/src/services/*.js', + 'dist/src/**/*.js' ], dest: 'dist/<%= pkg.name %>.pre.js' @@ -22,8 +22,7 @@ concatDistMapped.options.sourceMapName = "dist/<%= pkg.name %>_dev_mapped.js.map concatDistMapped.dest = "dist/<%= pkg.name %>_dev_mapped.js"; - -module.exports = function(grunt, options) { +module.exports = function (grunt, options) { return { dist: concatDist, distMapped: concatDistMapped, @@ -42,14 +41,14 @@ module.exports = function(grunt, options) { src: ['examples/js/controllers/*.js'], dest: 'examples/js/controllers.js' }, - website:{ - options: { - //separator: ';', - banner: '(function (angular) {\n', - footer: '})(window.angular);' - }, - src: ['website/src/js/app.js', 'website/src/js/**/*.js'], - dest: 'website/dist/js/<%= pkg.name %>-webpage.js', + website: { + options: { + //separator: ';', + banner: '(function (angular) {\n', + footer: '})(window.angular);' + }, + src: ['website/src/js/app.js', 'website/src/js/**/*.js'], + dest: 'website/dist/js/<%= pkg.name %>-webpage.js', } }; }; diff --git a/grunt/concurrent.js b/grunt/concurrent.js index 9da42dc6..91e565e0 100644 --- a/grunt/concurrent.js +++ b/grunt/concurrent.js @@ -8,20 +8,8 @@ module.exports = function (grunt, options) { logConcurrentOutput: true } }, - chrome: { - tasks: ['karma:unit-chrome', 'watch:chrome'], - options: { - logConcurrentOutput: true - } - }, unit: { - tasks: ['karma:unit', 'watch:unit'], - options: { - logConcurrentOutput: true - } - }, - 'unit-mocha': { - tasks: ['karma:unit-mocha', 'watch:unit-mocha'], + tasks: ['karma', 'watch:unit'], options: { logConcurrentOutput: true } diff --git a/grunt/jshint.js b/grunt/jshint.js index 7cc65b7f..f8493bb4 100644 --- a/grunt/jshint.js +++ b/grunt/jshint.js @@ -1,5 +1,5 @@ 'use strict'; -var fs = require('fs'); +var fs = require('fs'); module.exports = function (grunt, options) { return { diff --git a/grunt/karma.js b/grunt/karma.js deleted file mode 100644 index b0380d7c..00000000 --- a/grunt/karma.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - - -module.exports = function (grunt, options) { - return { - unit: { - configFile: 'test/karma-unit.conf.js', - autoWatch: false, - singleRun: true, - reporters: ['dots', 'coverage'], - preprocessors: { - 'test/**/**/*.coffee': ['coffee'], - 'dist/<%= pkg.name %>.js': ['coverage'] - }, - coverageReporter: { - reporters:[ - { type : 'html', dir : 'dist/coverage/', subdir: "lib" }, - {type: 'text-summary', dir:'dist/coverage/', subdir:'lib'} - ] - } - }, - 'unit-mocha': { - configFile: 'test/karma-unit.conf.js', - autoWatch: false, - singleRun: true, - reporters: ['mocha'] - }, - 'unit-dots': { - configFile: 'test/karma-unit.conf.js', - autoWatch: false, - singleRun: true, - reporters: ['dots'] - }, - 'unit-chrome': { - configFile: 'test/karma-unit.conf.js', - browsers: ['Chrome'], - autoWatch: true, - singleRun: false - }, - 'unit-chrome-mocha': { - configFile: 'test/karma-unit.conf.js', - browsers: ['Chrome'], - autoWatch: true, - singleRun: false, - reporters: ['mocha'] - }, - 'unit-chrome-once': { - configFile: 'test/karma-unit.conf.js', - browsers: ['Chrome'], - autoWatch: true, - singleRun: true - } - }; -}; diff --git a/grunt/ngAnnotate.js b/grunt/ngAnnotate.js index 678c39e1..ab009344 100644 --- a/grunt/ngAnnotate.js +++ b/grunt/ngAnnotate.js @@ -1,12 +1,12 @@ - 'use strict'; +'use strict'; - module.exports = function ngAnnotate(grunt, options) { - return { - options: {}, - dist: { - files: { - 'dist/<%= pkg.name %>.js': [ 'dist/<%= pkg.name %>.pre.js' ] - } - } - }; +module.exports = function ngAnnotate(grunt, options) { + return { + options: {}, + dist: { + files: { + 'dist/<%= pkg.name %>.js': ['dist/<%= pkg.name %>.pre.js'] + } + } + }; }; diff --git a/grunt/pkg.js b/grunt/pkg.js index 439f310d..c17a8c16 100644 --- a/grunt/pkg.js +++ b/grunt/pkg.js @@ -1,7 +1,7 @@ 'use strict'; module.exports = function (grunt, options) { - var pkgFunction = function(){ + var pkgFunction = function () { return grunt.file.readJSON('package.json') }; //THIS extension forces the banner or whatever uses pkgFunction to always get the latest version diff --git a/grunt/protractor.js b/grunt/protractor.js index 28ea838c..280c1511 100644 --- a/grunt/protractor.js +++ b/grunt/protractor.js @@ -6,7 +6,7 @@ module.exports = function (grunt, options) { keepAlive: false, configFile: 'test/protractor.conf.js', args: { - specs: [ 'test/e2e/*.js' ] + specs: ['test/e2e/*.js'] } }, run: {}, diff --git a/grunt/shell.js b/grunt/shell.js index 2f11722f..bd86bb28 100644 --- a/grunt/shell.js +++ b/grunt/shell.js @@ -1,6 +1,6 @@ 'use strict'; -module.exports = function(grunt, options) { +module.exports = function (grunt, options) { return { options: { stdout: true diff --git a/grunt/utils/getAvailPort.js b/grunt/utils/getAvailPort.js index 844237c6..44dbd0a9 100644 --- a/grunt/utils/getAvailPort.js +++ b/grunt/utils/getAvailPort.js @@ -1,21 +1,23 @@ -var exec = require('shelljs').exec; +var exec = require('shelljs').exec; var isWin = /^win/.test(process.platform); -var isPortOpen = function(port){ - var cmd; - if(isWin) - cmd = 'netstat -an | find /i ":' + port + '" | find /i "listening"'; - else - cmd = 'lsof -i:' + port + " | tail -n 1 | awk '{print $2}'"; - var portResponse = exec(cmd, {silent:true}).output; - return portResponse? false: true; +var isPortOpen = function (port) { + var cmd; + if (isWin) + cmd = 'netstat -an | find /i ":' + port + '" | find /i "listening"'; + else + cmd = 'lsof -i:' + port + " | tail -n 1 | awk '{print $2}'"; + var portResponse = exec(cmd, { + silent: true + }).output; + return portResponse ? false : true; } -module.exports = function(startPort){ - while (!isPortOpen(startPort)){ - startPort += 1; - } +module.exports = function (startPort) { + while (!isPortOpen(startPort)) { + startPort += 1; + } - return startPort; + return startPort; } diff --git a/grunt/utils/karma.js b/grunt/utils/karma.js new file mode 100644 index 00000000..7affa6ab --- /dev/null +++ b/grunt/utils/karma.js @@ -0,0 +1,33 @@ +const karmaLib = require('karma'); +//<=0.12 || //^0.13 +const twelveKarma = karmaLib.server ? karmaLib.server.start : undefined; +const thirteenKarma = karmaLib.Server || undefined; +const Karma = thirteenKarma || twelveKarma; + +// console.log(Karma,true); +module.exports = (pathToKarmaFile, grunt) => { + var log; + log = grunt.log.oklns; + return (done, karmaConf) => { + var e, server; + if (karmaConf == null) { + karmaConf = require.resolve(pathToKarmaFile); + } + log('-- Karma Setup --'); + try { + server = new Karma({ + configFile: karmaConf, + singleRun: true + }, (code) => { + log("Karma Callback Code: " + code); + done(!code ? void 0 : false); + }); + if (server.start) + server.start(); //^0.13 + } catch (_error) { + e = _error; + log("KARMA ERROR: " + e); + return done(false); + } + }; +}; diff --git a/grunt/watch.js b/grunt/watch.js index 11eb63c9..8abe4110 100644 --- a/grunt/watch.js +++ b/grunt/watch.js @@ -2,10 +2,11 @@ var getAvailPort = require('./utils/getAvailPort'); var port = getAvailPort(7777); -var _files = ['src/**/*.js', 'test/unit/**.js', 'test/unit/**.coffee', 'test/e2e/**.js', -'test/unit/**/**.js', 'test/unit/**/**.coffee', 'test/e2e/**/**.js']; +var _files = ['src/**/*.js']; +var _testFiles = ['test/unit/**.js', 'test/unit/**.coffee', + 'test/e2e/**.js', 'test/unit/**/**.js', 'test/unit/**/**.coffee', 'test/e2e/**/**.js']; -module.exports = function(grunt, options) { +module.exports = function (grunt, options) { return { options: { livereload: port @@ -13,7 +14,7 @@ module.exports = function(grunt, options) { fast: { files: _files, tasks: [ - 'fast-build', + 'fastbuild', 'uglify', 'concat:license' ] @@ -21,31 +22,17 @@ module.exports = function(grunt, options) { source: { files: _files, tasks: [ - 'fast-build', + 'fastbuild', 'uglify', 'test-unit', 'concat:license' ] }, unit: { - files: _files, - tasks: [ - 'fast-build', - 'karma:unit' - ] - }, - 'unit-mocha': { - files: _files, - tasks: [ - 'fast-build', - 'karma:unit-mocha' - ] - }, - chrome: { - files: _files, + files: _testFiles, tasks: [ - 'fast-build', - 'karma:unit-chrome' + 'fastbuild', + 'karma' ] }, examples: { @@ -55,8 +42,8 @@ module.exports = function(grunt, options) { ] }, website: { - files: ['website/src/js/app.js', 'website/src/js/**/*.js'], - tasks: ['jshint', 'concat:website', 'uglify'] //'ngmin' + files: ['website/src/js/app.js', 'website/src/js/**/*.js'], + tasks: ['jshint', 'concat:website', 'uglify'] //'ngmin' } }; }; diff --git a/package.json b/package.json index 952c4db9..d7871932 100644 --- a/package.json +++ b/package.json @@ -1,77 +1,76 @@ { - "org": "angular-ui", - "author": "https://github.com/angular-ui/ui-leaflet/graphs/contributors", - "name": "ui-leaflet", - "description": "ui-leaflet - An AngularJS directive to easily interact with Leaflet maps", - "version": "1.0.0", - "homepage": "http://angular-ui.github.io/ui-leaflet/", - "repository": { - "type": "git", - "url": "https://github.com/angular-ui/ui-leaflet" - }, - "keywords": [ - "angularjs", - "javascript", - "directive", - "leaflet", - "angular-ui", - "cli" - ], - "license": "MIT", - "devDependencies": { - "grunt": "^0.4.5", - "grunt-angular-architecture-graph": "^0.2.6", - "grunt-bower-task": "^0.4.0", - "grunt-bump": "^0.6.0", - "grunt-concurrent": "^2.0.3", - "grunt-contrib-clean": "^0.6.0", - "grunt-contrib-concat": "^0.5.1", - "grunt-contrib-connect": "^0.11.2", - "grunt-contrib-jshint": "^0.11.2", - "grunt-contrib-uglify": "^0.10.0", - "grunt-contrib-watch": "^0.6.1", - "grunt-conventional-changelog": "^1.2.2", - "grunt-graphviz": "^0.1.1", - "grunt-karma": "^0.10.1", - "grunt-karma-coveralls": "^2.5.3", - "grunt-ng-annotate": "^1.0.1", - "grunt-open": "^0.2.3", - "grunt-protractor-runner": "^2.0.0", - "grunt-shell": "^1.1.2", - "grunt-shell-spawn": "^0.3.2", - "jasmine-core": "^2.2.0", - "jsdom": ">= 0.1.23 < 4.0.0", - "karma": "0.12.32", - "karma-chrome-launcher": "^0.1.8", - "karma-coffee-preprocessor": "^0.3.0", - "karma-coverage": "^0.5.3", - "karma-firefox-launcher": "^0.1.4", - "karma-html2js-preprocessor": "^0.1.0", - "karma-jasmine": "^0.3.6", - "karma-mocha-reporter": "1.0.2", - "karma-phantomjs-launcher": "^0.1.4", - "karma-requirejs": "^0.2.2", - "karma-script-launcher": "^0.1.0", - "load-grunt-config": "^0.17.0", - "lodash": "^3.7.0", - "matchdep": "^1.0.0", - "mkdirp": "^0.5.0", - "protractor": "^2.0.0", - "q": "^1.2.0", - "requirejs": "^2.1.20", - "shelljs": "^0.5.3", - "yargs": "^3.29.0" - }, - "scripts": { - "test": "grunt travis --verbose", - "karmaChrome": "grunt test-unit-chrome", - "karmaChromeOnce": "grunt karma:unit-chrome-once" - }, - "main": "dist/ui-leaflet.js", - "dependencies": { - "angular": "1.x", - "angular-simple-logger": "~0.1.4", - "karma-coverage": "^0.5.3", - "leaflet": "0.7.x" - } + "org": "angular-ui", + "author": "https://github.com/angular-ui/ui-leaflet/graphs/contributors", + "name": "ui-leaflet", + "description": "ui-leaflet - An AngularJS directive to easily interact with Leaflet maps", + "version": "1.0.0", + "homepage": "http://angular-ui.github.io/ui-leaflet/", + "repository": { + "type": "git", + "url": "https://github.com/angular-ui/ui-leaflet" + }, + "scripts": { + "test": "grunt travis --verbose", + "karma": "karma start ./test/karma.conf.js" + }, + "main": "dist/ui-leaflet.js", + "keywords": [ + "angularjs", + "javascript", + "directive", + "leaflet", + "angular-ui", + "cli" + ], + "license": "MIT", + "devDependencies": { + "babel-preset-es2015": "^6.1.2", + "grunt": "^0.4.5", + "grunt-angular-architecture-graph": "^0.2.6", + "grunt-babel": "^6.0.0", + "grunt-bower-task": "^0.4.0", + "grunt-bump": "^0.6.0", + "grunt-concurrent": "2.x", + "grunt-contrib-clean": "^0.6.0", + "grunt-contrib-concat": "^0.5.1", + "grunt-contrib-connect": "^0.11.2", + "grunt-contrib-jshint": "0.x", + "grunt-contrib-uglify": "^0.10.0", + "grunt-contrib-watch": "^0.6.1", + "grunt-conventional-changelog": "^1.2.2", + "grunt-graphviz": "^0.1.1", + "grunt-karma-coveralls": "2.x", + "grunt-ng-annotate": "^1.0.1", + "grunt-open": "^0.2.3", + "grunt-protractor-runner": "2.x", + "grunt-shell": "^1.1.2", + "grunt-shell-spawn": "0.x", + "jasmine-core": "2.x", + "jsdom": "7.x", + "karma": "0.13.x", + "karma-chrome-launcher": "^0.x", + "karma-coffee-preprocessor": "^0.3.0", + "karma-coverage": "^0.5.3", + "karma-firefox-launcher": "0.x", + "karma-html2js-preprocessor": "^0.1.0", + "karma-jasmine": "^0.3.6", + "karma-mocha-reporter": "1.x", + "karma-phantomjs-launcher": "0.x", + "karma-requirejs": "^0.2.2", + "karma-script-launcher": "^0.1.0", + "load-grunt-config": "^0.x", + "lodash": "3.x", + "matchdep": "^1.0.0", + "mkdirp": "0.x", + "protractor": "2.x", + "q": "1.x", + "requirejs": "^2.1.20", + "shelljs": "^0.5.3", + "yargs": "^3.29.0" + }, + "dependencies": { + "angular": "1.x", + "angular-simple-logger": "0.1.x", + "leaflet": "0.7.x" + } } diff --git a/src/services/leafletHelpers.js b/src/services/leafletHelpers.js index 52495247..8a000391 100644 --- a/src/services/leafletHelpers.js +++ b/src/services/leafletHelpers.js @@ -1,5 +1,5 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { - var _errorHeader = '[AngularJS - Leaflet] '; + var _errorHeader = '[ui-leaflet] '; var _copy = angular.copy; var _clone = _copy; /* @@ -445,7 +445,7 @@ angular.module('ui-leaflet').service('leafletHelpers', function ($q, $log) { return false; } } - }, + }, ChinaLayerPlugin: { isLoaded: function() { return angular.isDefined(L.tileLayer.chinaProvider); diff --git a/test/karma-unit.conf.js b/test/karma.conf.js similarity index 56% rename from test/karma-unit.conf.js rename to test/karma.conf.js index 73a32825..1af051fe 100644 --- a/test/karma-unit.conf.js +++ b/test/karma.conf.js @@ -1,20 +1,33 @@ -const pkg = require('../package.json'); -const mainLib = 'dist/' + pkg.name +'.js'; - -module.exports = function(karma) { +module.exports = (karma) => { karma.set({ - // base path, that will be used to resolve files and exclude basePath: '../', + frameworks: ['jasmine'], + preprocessors: { 'test/**/**/*.coffee': ['coffee'], + 'dist/src/**/*.js': ['coverage'] + }, + coverageReporter: { + reporters: [{ + type: 'html', + dir: 'dist/coverage/', + subdir: "lib" + }, { + type: 'text-summary', + dir: 'dist/coverage/', + subdir: 'lib' + }] }, + + reporters: ['dots', 'coverage'], + coffeePreprocessor: { options: { bare: true, sourceMap: false }, - transformPath: function(path) { + transformPath: (path) => { return path.replace(/\.js$/, '.coffee'); } }, @@ -23,45 +36,31 @@ module.exports = function(karma) { 'bower_components/leaflet/dist/leaflet-src.js', 'bower_components/angular/angular.js', 'bower_components/angular-mocks/angular-mocks.js', - 'bower_components/angular-simple-logger/dist/angular-simple-logger.js',//THIS IS BROWSER version + 'bower_components/angular-simple-logger/dist/angular-simple-logger.js', //THIS IS BROWSER version 'bower_components/leaflet.markercluster/dist/leaflet.markercluster.js', 'bower_components/leaflet.vector-markers/dist/Leaflet.vector-markers.js', - mainLib, + //source + 'dist/src/directives/leaflet.js', + 'dist/src/services/*.js', + 'dist/src/**/*.js', + //tests 'test/unit/bootstrap.coffee', 'test/unit/*.js', 'test/unit/**/*.js', 'test/unit/**/*.coffee', - 'bower_components/Leaflet.PolylineDecorator/leaflet.polylineDecorator.js', - //do not include those specs for jasmine html runner by karma kama_jasmine_runner.html - {pattern:'**/**/**/*.coffee', included: false}, - {pattern: '**/*.js.map', included: false} + 'bower_components/Leaflet.PolylineDecorator/leaflet.polylineDecorator.js', { + pattern: 'test/**/*.coffee', + included: false + }, { + pattern: 'dist/*.js.map', + included: false + } ], - // Frameworks - frameworks: ["jasmine"], // list of files to exclude exclude: [], - // Start these browsers, currently available: - // - Chrome - // - ChromeCanary - // - Firefox - // - Opera - // - Safari - // - PhantomJS - browsers: [ - 'PhantomJS' - ], - - // test results reporter to use - // possible values: dots || progress - reporters: ['dots'], - - // web server port - port: 9018, - - // cli runner port - runnerPort: 9100, + browsers: ['PhantomJS'], // enable / disable colors in the output (reporters and logs) colors: true, @@ -73,8 +72,6 @@ module.exports = function(karma) { // enable / disable watching file and executing tests whenever any file changes autoWatch: false, - // Continuous Integration mode - // if true, it capture browsers, run tests and exit singleRun: true }); }; diff --git a/test/protractor.conf.js b/test/protractor.conf.js index 947bd16a..7062420d 100644 --- a/test/protractor.conf.js +++ b/test/protractor.conf.js @@ -1,114 +1,114 @@ // A reference configuration file. exports.config = { - // ----- How to setup Selenium ----- - // - // There are three ways to specify how to use Selenium. Specify one of the - // following: - // - // 1. seleniumServerJar - to start Selenium Standalone locally. - // 2. seleniumAddress - to connect to a Selenium server which is already - // running. - // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs. - // - // If the chromeOnly option is specified, no Selenium server will be started, - // and chromeDriver will be used directly (from the location specified in - // chromeDriver) + // ----- How to setup Selenium ----- + // + // There are three ways to specify how to use Selenium. Specify one of the + // following: + // + // 1. seleniumServerJar - to start Selenium Standalone locally. + // 2. seleniumAddress - to connect to a Selenium server which is already + // running. + // 3. sauceUser/sauceKey - to use remote Selenium servers via SauceLabs. + // + // If the chromeOnly option is specified, no Selenium server will be started, + // and chromeDriver will be used directly (from the location specified in + // chromeDriver) - // The location of the selenium standalone server .jar file. - seleniumServerJar: '../node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar', - // The port to start the selenium server on, or null if the server should - // find its own unused port. - seleniumPort: null, - // Chromedriver location is used to help the selenium standalone server - // find chromedriver. This will be passed to the selenium jar as - // the system property webdriver.chrome.driver. If null, selenium will - // attempt to find chromedriver using PATH. - chromeDriver: '../node_modules/protractor/selenium/chromedriver', - // If true, only chromedriver will be started, not a standalone selenium. - // Tests for browsers other than chrome will not run. - chromeOnly: false, - // Additional command line options to pass to selenium. For example, - // if you need to change the browser timeout, use - // seleniumArgs: ['-browserTimeout=60'], - seleniumArgs: [], + // The location of the selenium standalone server .jar file. + seleniumServerJar: '../node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar', + // The port to start the selenium server on, or null if the server should + // find its own unused port. + seleniumPort: null, + // Chromedriver location is used to help the selenium standalone server + // find chromedriver. This will be passed to the selenium jar as + // the system property webdriver.chrome.driver. If null, selenium will + // attempt to find chromedriver using PATH. + chromeDriver: '../node_modules/protractor/selenium/chromedriver', + // If true, only chromedriver will be started, not a standalone selenium. + // Tests for browsers other than chrome will not run. + chromeOnly: false, + // Additional command line options to pass to selenium. For example, + // if you need to change the browser timeout, use + // seleniumArgs: ['-browserTimeout=60'], + seleniumArgs: [], - // If sauceUser and sauceKey are specified, seleniumServerJar will be ignored. - // The tests will be run remotely using SauceLabs. - sauceUser: null, - sauceKey: null, + // If sauceUser and sauceKey are specified, seleniumServerJar will be ignored. + // The tests will be run remotely using SauceLabs. + sauceUser: null, + sauceKey: null, - // The address of a running selenium server. If specified, Protractor will - // connect to an already running instance of selenium. This usually looks like - // seleniumAddress: 'http://localhost:4444/wd/hub' - //seleniumAddress: 'http://localhost:4444/wd/hub', + // The address of a running selenium server. If specified, Protractor will + // connect to an already running instance of selenium. This usually looks like + // seleniumAddress: 'http://localhost:4444/wd/hub' + //seleniumAddress: 'http://localhost:4444/wd/hub', - // The timeout for each script run on the browser. This should be longer - // than the maximum time your application needs to stabilize between tasks. - allScriptsTimeout: 11000, + // The timeout for each script run on the browser. This should be longer + // than the maximum time your application needs to stabilize between tasks. + allScriptsTimeout: 11000, - // ----- What tests to run ----- - // - // Spec patterns are relative to the location of this config. - specs: [ - 'e2e/*.js', - ], + // ----- What tests to run ----- + // + // Spec patterns are relative to the location of this config. + specs: [ + 'e2e/*.js', + ], - // ----- Capabilities to be passed to the webdriver instance ---- - // - // For a full list of available capabilities, see - // https://code.google.com/p/selenium/wiki/DesiredCapabilities - // and - // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js - capabilities: { - 'browserName': 'chrome' - }, + // ----- Capabilities to be passed to the webdriver instance ---- + // + // For a full list of available capabilities, see + // https://code.google.com/p/selenium/wiki/DesiredCapabilities + // and + // https://code.google.com/p/selenium/source/browse/javascript/webdriver/capabilities.js + capabilities: { + 'browserName': 'chrome' + }, - // ----- More information for your tests ---- - // - // A base URL for your application under test. Calls to protractor.get() - // with relative paths will be prepended with this. - baseUrl: 'http://localhost:9999/examples/', + // ----- More information for your tests ---- + // + // A base URL for your application under test. Calls to protractor.get() + // with relative paths will be prepended with this. + baseUrl: 'http://localhost:9999/examples/', - // Selector for the element housing the angular app - this defaults to - // body, but is necessary if ng-app is on a descendant of - rootElement: 'body', + // Selector for the element housing the angular app - this defaults to + // body, but is necessary if ng-app is on a descendant of + rootElement: 'body', - // A callback function called once protractor is ready and available, and - // before the specs are executed - // You can specify a file containing code to run by setting onPrepare to - // the filename string. - onPrepare: function() { - // At this point, global 'protractor' object will be set up, and jasmine - // will be available. For example, you can add a Jasmine reporter with: - // jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter( - // 'outputdir/', true, true)); - }, + // A callback function called once protractor is ready and available, and + // before the specs are executed + // You can specify a file containing code to run by setting onPrepare to + // the filename string. + onPrepare: function() { + // At this point, global 'protractor' object will be set up, and jasmine + // will be available. For example, you can add a Jasmine reporter with: + // jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter( + // 'outputdir/', true, true)); + }, - // The params object will be passed directly to the protractor instance, - // and can be accessed from your test. It is an arbitrary object and can - // contain anything you my need in your test. - // This can be changed via the command line as: - // --params.login.user 'Joe' - params: { - login: { - user: 'Jane', - password: '1234' - } - }, + // The params object will be passed directly to the protractor instance, + // and can be accessed from your test. It is an arbitrary object and can + // contain anything you my need in your test. + // This can be changed via the command line as: + // --params.login.user 'Joe' + params: { + login: { + user: 'Jane', + password: '1234' + } + }, - // ----- Options to be passed to minijasminenode ----- - // - // See the full list at https://github.com/juliemr/minijasminenode - jasmineNodeOpts: { - // onComplete will be called just before the driver quits. - onComplete: null, - // If true, display spec names. - isVerbose: true, - // If true, print colors to the terminal. - showColors: true, - // If true, include stack traces in failures. - includeStackTrace: true, - // Default time to wait in ms before a test fails. - defaultTimeoutInterval: 30000 - } + // ----- Options to be passed to minijasminenode ----- + // + // See the full list at https://github.com/juliemr/minijasminenode + jasmineNodeOpts: { + // onComplete will be called just before the driver quits. + onComplete: null, + // If true, display spec names. + isVerbose: true, + // If true, print colors to the terminal. + showColors: true, + // If true, include stack traces in failures. + includeStackTrace: true, + // Default time to wait in ms before a test fails. + defaultTimeoutInterval: 30000 + } }; diff --git a/test/unit/bootstrap.coffee b/test/unit/bootstrap.coffee index 9751a892..ead9b4e0 100644 --- a/test/unit/bootstrap.coffee +++ b/test/unit/bootstrap.coffee @@ -1,10 +1,14 @@ window.ngLeafLetTestGlobals = {} +afterEach -> + window.doTestLog = false + beforeEach -> angular.module('ui-leaflet') .config ($provide) -> - $provide.value('$log', console) + if window.doTestLog + $provide.value('$log', console) $provide.decorator '$timeout', ($delegate, $browser) -> $delegate.hasPendingTasks = -> $browser.deferredFns.length > 0 diff --git a/test/unit/geojsonDirectiveSpec.coffee b/test/unit/geojsonDirectiveSpec.coffee index fb4196c9..61b3955b 100755 --- a/test/unit/geojsonDirectiveSpec.coffee +++ b/test/unit/geojsonDirectiveSpec.coffee @@ -105,7 +105,7 @@ describe 'Directive: geojson', -> scope.$digest() scope.$digest() - # console.log leafletGeoJSON + expect(leafletMap.hasLayer(leafletGeoJSON)).toBe true scope.geojson = {} scope.$digest() diff --git a/test/unit/layersDirective/layersDirective.overlays.markersSpec.coffee b/test/unit/layersDirective/layersDirective.overlays.markersSpec.coffee index d5176909..ac86035f 100755 --- a/test/unit/layersDirective/layersDirective.overlays.markersSpec.coffee +++ b/test/unit/layersDirective/layersDirective.overlays.markersSpec.coffee @@ -64,9 +64,6 @@ describe 'Directive: leaflet: layers.overlays.markers', -> .then (promiseArray) -> [map, markers, layers] = promiseArray - # console.debug("TESTTTTTT!!!") - # leafletMarkersHelper.log markers.m1, true - expect(Object.keys(markers).length).toEqual 1 expect(Object.keys(markers.cars).length).toEqual 2 markerToCheck = markers.cars.m1 diff --git a/test/unit/leafletData/leafletDataSpec.coffee b/test/unit/leafletData/leafletDataSpec.coffee index 55012ec3..eac84fe4 100644 --- a/test/unit/leafletData/leafletDataSpec.coffee +++ b/test/unit/leafletData/leafletDataSpec.coffee @@ -24,7 +24,7 @@ describe 'leafletData', -> _geoJSON = null _markers = null _allGet = null - console.log $q + @digest $rootScope, => @setPromise.then -> _allGet = $q.all [ @@ -50,7 +50,7 @@ describe 'leafletData', -> #this proves you do not need to call set[Whatever] multiple times. @knownMarkers.push 4 @knownGeoJSON.push "4" - console.log $q + @digest $rootScope, => @setPromise.then -> _allGet = $q.all [ diff --git a/test/unit/markersDirectiveSpec.coffee b/test/unit/markersDirectiveSpec.coffee index 774284ab..82a28f6f 100755 --- a/test/unit/markersDirectiveSpec.coffee +++ b/test/unit/markersDirectiveSpec.coffee @@ -112,7 +112,7 @@ describe 'Directive: leaflet', -> element = $compile(element)($rootScope) $rootScope.$digest() leafletData.getMarkers().then (leafletMarkers) -> - # console.log leafletMarkers + leafletMainMarker = leafletMarkers.layer1.main_marker if postRunnerCb postRunnerCb main_marker, leafletMainMarker diff --git a/test/unit/services/leafletHelpersSpec.coffee b/test/unit/services/leafletHelpersSpec.coffee index f630468f..4a2e92cb 100644 --- a/test/unit/services/leafletHelpersSpec.coffee +++ b/test/unit/services/leafletHelpersSpec.coffee @@ -47,7 +47,7 @@ describe 'leafletHelpers', -> describe 'Object Helpers', -> it 'should correctly fetch object values using dot-notation', -> - object = { foo: { sea: 'hawks' }} - expect(@subject.getObjectValue(object, 'foo.sea')).toEqual('hawks') - expect(@subject.getObjectValue(object, 'foo.sea.birds')).toEqual(undefined) - expect(@subject.getObjectValue(object, 'boo.hoo')).toEqual(undefined) + object = { foo: { sea: 'hawks' }} + expect(@subject.getObjectValue(object, 'foo.sea')).toEqual('hawks') + expect(@subject.getObjectValue(object, 'foo.sea.birds')).toEqual(undefined) + expect(@subject.getObjectValue(object, 'boo.hoo')).toEqual(undefined)