-
Notifications
You must be signed in to change notification settings - Fork 16
/
layermanager.js
76 lines (63 loc) · 1.89 KB
/
layermanager.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
import lux from './index.js';
import Control from 'ol/control/Control';
import {listen} from 'ol/events';
import CollectionEventType from 'ol/CollectionEventType';
export default class LayerManager extends Control {
/**
* @constructor
* @param {olx.control.ControlOptions} options Layer manager options.
* @export
*/
constructor(options) {
var element = document.createElement('UL');
element.classList.add('lux-layer-manager');
super({
element: element,
target: options.target
});
}
/**
* @inheritDoc
*/
setMap(map) {
super.setMap(map);
if (map) {
var layers = map.getLayers();
this.listenerKeys.push(
listen(layers, CollectionEventType.ADD, this.update, this),
listen(layers, CollectionEventType.REMOVE, this.update, this)
);
this.update();
}
}
/**
* Update the component adequately.
*/
update() {
while (this.element.firstChild) {
this.element.removeChild(this.element.firstChild);
}
// get the layers list in reverse order and with background excluded
var layers = this.getMap().getLayers().getArray().slice(1).reverse();
layers.forEach(function (layer) {
var li = document.createElement('li');
var label = document.createElement('label');
var name = /** @type {string} */ (layer.get('name'));
if (lux.lang in lux.languages &&
lux.languages[lux.lang][name] !== undefined) {
label.innerHTML = lux.languages[lux.lang][name];
} else {
label.innerHTML = name;
}
li.appendChild(label);
var input = document.createElement('input');
input.type = 'checkbox';
input.checked = layer.get('visible');
input.onchange = function (e) {
layer.set('visible', e.target.checked);
};
label.insertBefore(input, label.firstChild);
this.element.appendChild(li);
}, this);
}
}