101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
L.Control.Liveupdate = L.Control.extend({
|
|
|
|
timer: false,
|
|
|
|
options: {
|
|
position: 'topleft',
|
|
title: {
|
|
'false': 'Start live updates',
|
|
'true': 'Stop live updates'
|
|
},
|
|
is_updating: true,
|
|
update_map: false, // callback function
|
|
interval: 10000
|
|
},
|
|
|
|
onAdd: function (map) {
|
|
this.container = L.DomUtil.create('div', 'leaflet-control-liveupdate leaflet-bar leaflet-control');
|
|
|
|
this.link = L.DomUtil.create('a', 'leaflet-control-liveupdate-button leaflet-bar-part', this.container);
|
|
this.link.href = '#';
|
|
|
|
this._map = map;
|
|
this._setUpdating(this.options.is_updating);
|
|
map.liveUpdateControl = this;
|
|
|
|
L.DomEvent.on(this.link, 'click', this._click, this);
|
|
return this.container;
|
|
},
|
|
|
|
_click: function (e) {
|
|
L.DomEvent.stopPropagation(e);
|
|
L.DomEvent.preventDefault(e);
|
|
this.toggleUpdating();
|
|
},
|
|
|
|
_toggleTitle: function() {
|
|
this.link.title = this.options.title[this.isUpdating()];
|
|
},
|
|
|
|
isUpdating: function () {
|
|
return this._isUpdating || false;
|
|
},
|
|
|
|
_setUpdating: function (updating) {
|
|
this._isUpdating = updating;
|
|
if (updating) {
|
|
L.DomUtil.addClass(this.container, 'leaflet-liveupdate-on');
|
|
} else {
|
|
L.DomUtil.removeClass(this.container, 'leaflet-liveupdate-on');
|
|
}
|
|
this._toggleTitle();
|
|
},
|
|
|
|
toggleUpdating: function () {
|
|
if (this.isUpdating ()) {
|
|
this.stopUpdating ();
|
|
a = 'stopped';
|
|
}
|
|
else {
|
|
this.startUpdating ();
|
|
a = 'started';
|
|
}
|
|
if (this._map.messagebox) {
|
|
this._map.messagebox.show('Live updates ' + a);
|
|
}
|
|
return this;
|
|
},
|
|
|
|
startUpdating: function () {
|
|
|
|
var map = this._map;
|
|
var update_map = this.options.update_map;
|
|
var _this = this;
|
|
|
|
this._setUpdating(true);
|
|
update_map(this);
|
|
this.timer = setInterval(function() {
|
|
update_map(_this);
|
|
}, this.options.interval);
|
|
return this;
|
|
},
|
|
|
|
stopUpdating: function () {
|
|
this._setUpdating(false);
|
|
clearInterval(this.timer);
|
|
this.timer = false;
|
|
return this;
|
|
},
|
|
|
|
updateNow: function () {
|
|
var update_map = this.options.update_map;
|
|
update_map(this);
|
|
return this;
|
|
}
|
|
|
|
});
|
|
|
|
L.control.liveupdate = function (options) {
|
|
return new L.Control.Liveupdate(options);
|
|
};
|