This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.4 KiB
89 lines
2.4 KiB
/* |
|
* Copyright (c) Facebook, Inc. and its affiliates. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
*/ |
|
'use strict'; |
|
|
|
var GLOBAL = typeof window === 'undefined' ? global : window; |
|
|
|
var setter = function(_setter, _clearer, array) { |
|
return function(callback, delta) { |
|
var id = _setter(function() { |
|
_clearer.call(this, id); |
|
callback.apply(this, arguments); |
|
}.bind(this), delta); |
|
|
|
if (!this[array]) { |
|
this[array] = [id]; |
|
} else { |
|
this[array].push(id); |
|
} |
|
return id; |
|
}; |
|
}; |
|
|
|
var clearer = function(_clearer, array) { |
|
return function(id) { |
|
if (this[array]) { |
|
var index = this[array].indexOf(id); |
|
if (index !== -1) { |
|
this[array].splice(index, 1); |
|
} |
|
} |
|
_clearer(id); |
|
}; |
|
}; |
|
|
|
var _timeouts = 'TimerMixin_timeouts'; |
|
var _clearTimeout = clearer(GLOBAL.clearTimeout, _timeouts); |
|
var _setTimeout = setter(GLOBAL.setTimeout, _clearTimeout, _timeouts); |
|
|
|
var _intervals = 'TimerMixin_intervals'; |
|
var _clearInterval = clearer(GLOBAL.clearInterval, _intervals); |
|
var _setInterval = setter(GLOBAL.setInterval, function() {/* noop */}, _intervals); |
|
|
|
var _immediates = 'TimerMixin_immediates'; |
|
var _clearImmediate = clearer(GLOBAL.clearImmediate, _immediates); |
|
var _setImmediate = setter(GLOBAL.setImmediate, _clearImmediate, _immediates); |
|
|
|
var _rafs = 'TimerMixin_rafs'; |
|
var _cancelAnimationFrame = clearer(GLOBAL.cancelAnimationFrame, _rafs); |
|
var _requestAnimationFrame = setter(GLOBAL.requestAnimationFrame, _cancelAnimationFrame, _rafs); |
|
|
|
var TimerMixin = { |
|
componentWillUnmount: function() { |
|
this[_timeouts] && this[_timeouts].forEach(function(id) { |
|
GLOBAL.clearTimeout(id); |
|
}); |
|
this[_timeouts] = null; |
|
this[_intervals] && this[_intervals].forEach(function(id) { |
|
GLOBAL.clearInterval(id); |
|
}); |
|
this[_intervals] = null; |
|
this[_immediates] && this[_immediates].forEach(function(id) { |
|
GLOBAL.clearImmediate(id); |
|
}); |
|
this[_immediates] = null; |
|
this[_rafs] && this[_rafs].forEach(function(id) { |
|
GLOBAL.cancelAnimationFrame(id); |
|
}); |
|
this[_rafs] = null; |
|
}, |
|
|
|
setTimeout: _setTimeout, |
|
clearTimeout: _clearTimeout, |
|
|
|
setInterval: _setInterval, |
|
clearInterval: _clearInterval, |
|
|
|
setImmediate: _setImmediate, |
|
clearImmediate: _clearImmediate, |
|
|
|
requestAnimationFrame: _requestAnimationFrame, |
|
cancelAnimationFrame: _cancelAnimationFrame, |
|
}; |
|
|
|
module.exports = TimerMixin;
|
|
|