UNPKG

ui.leaflet.webpack

Version:

Webpack version of ui-leaflet (https://github.com/angular-ui/ui-leaflet)

72 lines (62 loc) 3.1 kB
//angular.module('ui-leaflet').directive('tiles', /** @ngInject */ module.exports = ['leafletLogger', 'leafletData', 'leafletMapDefaults', 'leafletHelpers', 'L', function (leafletLogger, leafletData, leafletMapDefaults, leafletHelpers, L) { var $log = leafletLogger; return { restrict: "A", scope: false, replace: false, require: 'leaflet', link: function(scope, element, attrs, controller) { var isDefined = leafletHelpers.isDefined, leafletScope = controller.getLeafletScope(), tiles = leafletScope.tiles; 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) { var defaults = leafletMapDefaults.getDefaults(attrs.id); var tileLayerObj; leafletScope.$watch("tiles", function(tiles) { var tileLayerOptions = defaults.tileLayerOptions; var tileLayerUrl = defaults.tileLayer; // If no valid tiles are in the scope, remove the last layer if (!isDefined(tiles.url) && isDefined(tileLayerObj)) { map.removeLayer(tileLayerObj); return; } // No leafletTiles object defined yet if (!isDefined(tileLayerObj)) { if (isDefined(tiles.options)) { angular.copy(tiles.options, tileLayerOptions); } if (isDefined(tiles.url)) { tileLayerUrl = tiles.url; } tileLayerObj = L.tileLayer(tileLayerUrl, tileLayerOptions); tileLayerObj.addTo(map); leafletData.setTiles(tileLayerObj, attrs.id); return; } // If the options of the tilelayer is changed, we need to redraw the layer if (isDefined(tiles.url) && isDefined(tiles.options) && !angular.equals(tiles.options, tileLayerOptions)) { map.removeLayer(tileLayerObj); tileLayerOptions = defaults.tileLayerOptions; angular.copy(tiles.options, tileLayerOptions); tileLayerUrl = tiles.url; tileLayerObj = L.tileLayer(tileLayerUrl, tileLayerOptions); tileLayerObj.addTo(map); leafletData.setTiles(tileLayerObj, attrs.id); return; } // Only the URL of the layer is changed, update the tiles object if (isDefined(tiles.url)) { tileLayerObj.setUrl(tiles.url); } }, true); }); } }; }];