mohsen-angular-leaflet-directive
Version:
angular-leaflet-directive - An AngularJS directive to easily interact with Leaflet maps
101 lines (76 loc) • 3 kB
JavaScript
angular.module('leaflet-directive').directive('lfLegend', function(leafletLogger, $http, leafletHelpers, leafletLegendHelpers) {
return {
restrict: 'A',
scope: false,
replace: false,
require: 'leaflet',
link: function(scope, element, attrs, controller) {
var isArray = leafletHelpers.isArray;
var isDefined = leafletHelpers.isDefined;
var isFunction = leafletHelpers.isFunction;
var leafletScope = controller.getLeafletScope();
var legend = leafletScope.legend;
var legendClass;
var position;
var leafletLegend;
var type;
leafletScope.$watch('legend', function(newLegend) {
if (isDefined(newLegend)) {
legendClass = newLegend.legendClass ? newLegend.legendClass : 'legend';
position = newLegend.position || 'bottomright';
// default to arcgis
type = newLegend.type || 'arcgis';
}
}, true);
controller.getMap().then(function(map) {
leafletScope.$watch('legend', function(newLegend) {
if (!isDefined(newLegend)) {
if (isDefined(leafletLegend)) {
leafletLegend.removeFrom(map);
leafletLegend = null;
}
return;
}
if (!isDefined(newLegend.url) && (type === 'arcgis') && (!isArray(newLegend.colors) || !isArray(newLegend.labels) || newLegend.colors.length !== newLegend.labels.length)) {
leafletLogger.warn('legend.colors and legend.labels must be set.', 'legend');
return;
}
if (isDefined(newLegend.url)) {
leafletLogger.info('loading legend service.', 'legend');
return;
}
if (isDefined(leafletLegend)) {
leafletLegend.removeFrom(map);
leafletLegend = null;
}
leafletLegend = L.control({
position: position,
});
if (type === 'arcgis') {
leafletLegend.onAdd = leafletLegendHelpers.getOnAddArrayLegend(newLegend, legendClass);
}
leafletLegend.addTo(map);
});
leafletScope.$watch('legend.url', function(newURL) {
if (!isDefined(newURL)) {
return;
}
$http.get(newURL).success(function(legendData) {
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(legend.loadedData) && isFunction(legend.loadedData)) {
legend.loadedData();
}
}).error(function() {
leafletLogger.warn('legend.url not loaded.', 'legend');
});
});
});
},
};
});