VulpesOS/gaia/apps/calendar/js/pending_manager.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

59 lines
1.3 KiB
JavaScript
Executable file

define(function(require, exports, module) {
'use strict';
var nextTick = require('common/next_tick');
function PendingManager() {
this.objects = [];
this.pending = 0;
this.onstart = this.onstart.bind(this);
this.onend = this.onend.bind(this);
}
module.exports = PendingManager;
PendingManager.prototype = {
register: function(object) {
object.on(object.startEvent, this.onstart);
object.on(object.completeEvent, this.onend);
if (!this.isPending() && object.pending) {
// Registering this object will make us pending.
nextTick(() => this.onpending && this.onpending());
}
this.objects.push(object);
},
/**
* Unregister an object.
* Note it is intended that objects that
* are unregistered are never in a state
* where we are waiting for their pending
* status to complete. If an incomplete
* object is removed it will break .pending.
*/
unregister: function(object) {
this.objects = this.objects.filter(el => el !== object);
},
isPending: function() {
return this.objects.some(object => object.pending);
},
onstart: function() {
if (!this.pending) {
this.onpending && this.onpending();
}
this.pending++;
},
onend: function() {
this.pending--;
if (!this.pending) {
this.oncomplete && this.oncomplete();
}
}
};
});