Files
backend/public/weather_notice/js/Permalink.Overlay.js
2024-02-01 09:53:53 +00:00

73 lines
1.8 KiB
JavaScript

/**
* This file is licensed under Creative Commons Zero (CC0)
* http://creativecommons.org/publicdomain/zero/1.0/
* Author: http://www.openstreetmap.org/user/Zartbitter
*/
L.Control.Permalink.include({
initialize_overlay: function() {
this.on('update', this._set_overlays, this);
this.on('add', this._onadd_overlay, this);
},
_onadd_overlay: function(e) {
this._map.on('overlayadd', this._update_overlay, this);
this._map.on('overlayremove', this._update_overlay, this);
this._update_overlay();
},
_update_overlay: function() {
if (!this.options.layers) return;
var overlayflags = this.options.layers.overlayFlags();
if (overlayflags && overlayflags != '') {
this._update({overlays: overlayflags});
}
},
_set_overlays: function(e) {
var p = e.params;
if (!this.options.layers || !p.overlays) return;
this.options.layers.setOverlays(p.overlays);
}
});
L.Control.Layers.include({
setOverlays: function(overlayflags) {
var layer, obj, idx=0;
for (var i in this._layers) {
if (!this._layers.hasOwnProperty(i)) continue;
obj = this._layers[i];
if (obj.overlay) {
// visible if not specified or flag==T
var visible = (idx >= overlayflags.length || overlayflags[idx] == 'T');
idx++;
if (!visible && this._map.hasLayer(obj.layer)) {
this._map.removeLayer(obj.layer)
} else if (visible && !this._map.hasLayer(obj.layer)) {
this._map.addLayer(obj.layer)
}
}
}
},
overlayFlags: function() {
var flags = '';
for (var i in this._layers) {
if (!this._layers.hasOwnProperty(i))
continue;
var obj = this._layers[i];
if (!obj.overlay) continue;
if (obj.overlay) {
if (this._map.hasLayer(obj.layer)) {
flags += 'T';
} else {
flags += 'F';
}
}
}
return flags;
}
});