-
Notifications
You must be signed in to change notification settings - Fork 20
/
legend.component.js
99 lines (89 loc) · 3.44 KB
/
legend.component.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
export default {
template: require('components/legend/partials/legend.html'),
controller: ['$scope', 'hs.map.service', '$rootScope', 'hs.legend.service', function ($scope, OlMap, $rootScope, service) {
var map;
angular.extend($scope, {
layerDescriptors: [],
/**
* Add selected layer to the list of layers in legend (with event listener
* to display/hide legend item when layer visibility change)
* @memberof hs.legend.controller
* @function addLayerToLegends
* @param {object} layer Layer to add legend for
*/
addLayerToLegends: function (layer) {
var descriptor = service.getLayerLegendDescriptor(layer);
if (descriptor) {
$scope.layerDescriptors.push(descriptor);
layer.on('change:visible', layerVisibilityChanged);
}
},
/**
* Check if there is any visible layer
* @memberof hs.legend.controller
* @function noLayerExists
*/
noLayerExists: function () {
var visibleLayers = $scope.layerDescriptors.filter(function(check){
return check.visible == true;
});
console.log(visibleLayers);
return (visibleLayers.length == 0)
},
/**
* Remove selected layer from legend items
* @memberof hs.legend.controller
* @function removeLayerFromLegends
* @param {Ol.layer} layer Layer to remove from legend
*/
removeLayerFromLegends: function (layer) {
for (var i = 0; i < $scope.layerDescriptors.length; i++) {
if ($scope.layerDescriptors[i].lyr == layer) {
$scope.layerDescriptors.splice(i, 1);
break;
}
}
},
/**
* Refresh event listeners UNUSED
* @memberof hs.legend.controller
* @function refresh
*/
refresh: function () {
if (!$scope.$$phase) $scope.$digest();
},
isLegendable: service.isLegendable
});
function init() {
map = OlMap.map;
map.getLayers().on("add", layerAdded);
map.getLayers().on("remove", function (e) {
$scope.removeLayerFromLegends(e.element);
});
map.getLayers().forEach(function (lyr) {
layerAdded({
element: lyr
});
})
}
/**
* (PRIVATE) Callback function for adding layer to map, add layers legend
* @memberof hs.legend.controller
* @function layerAdded
* @param {Object} e Event object, should have element property
*/
function layerAdded(e) {
$scope.addLayerToLegends(e.element);
};
function layerVisibilityChanged(e) {
for (var i = 0; i < $scope.layerDescriptors.length; i++) {
if ($scope.layerDescriptors[i].layer == e.target) {
$scope.layerDescriptors[i].visible = e.target.getVisible();
break;
}
}
}
OlMap.loaded().then(init);
$scope.$emit('scope_loaded', "Legend");
}]
}