FitTrackee/static/vendor/leaflet/js/leaflet-liveupdate.js
2017-04-02 20:12:15 +02:00

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);
};