1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/rocketchat_ynh.git synced 2024-09-03 20:16:25 +02:00
rocketchat_ynh/sources/programs/server/packages/raix_eventstate.js
2016-04-29 16:32:48 +02:00

132 lines
8.4 KiB
JavaScript

(function () {
/* Imports */
var Meteor = Package.meteor.Meteor;
var _ = Package.underscore._;
var EventEmitter = Package['raix:eventemitter'].EventEmitter;
/* Package-scope variables */
var EventState;
(function(){
/////////////////////////////////////////////////////////////////////////////
// //
// packages/raix_eventstate/packages/raix_eventstate.js //
// //
/////////////////////////////////////////////////////////////////////////////
//
(function () { // 1
// 2
/////////////////////////////////////////////////////////////////////// // 3
// // // 4
// packages/raix:eventstate/eventstate.common.js // // 5
// // // 6
/////////////////////////////////////////////////////////////////////// // 7
// // 8
EventState = function(map) { // 1 // 9
var self = this; // 2 // 10
// 3 // 11
// Make sure we return an instance of EventState // 4 // 12
if (!(self instanceof EventState)) { // 5 // 13
return new EventState(map); // 6 // 14
} // 7 // 15
// 8 // 16
// Extend with Event emitter // 9 // 17
EventEmitter.call(self); // 10
// 11
// Map of state values // 12
self.map = map || {}; // 13
_.each(self.map, function(val, key) { // 14
// Make sure they are all arrays of arguments _.mapObject // 15
self.map[key] = _.isArray(val) ? val : [val]; // 16
}); // 17
}; // 18
// 19
// Extend the EventState prototype with EventEmitter // 20
EventState.prototype = Object.create(EventEmitter.prototype); // 21
// 22
EventState.prototype.emitState = function(name /* arguments */) { // 23
var self = this; // 24
// 25
var args = _.toArray(arguments); // 26
// 27
// Set value // 28
self.map[name] = _.clone(_.rest(args)); // 29
// 30
// Emit change event // 31
EventEmitter.prototype.emit.apply(self, args); // 32
// 33
// Return EventState instance // 34
return self; // 35
}; // 36
// 37
EventState.prototype.on = function(name, listener) { // 38
var self = this; // 39
// 40
// Add the listener // 41
EventEmitter.prototype.on.call(self, name, listener); // 42
// Check if state got a value // 43
if (self.map.hasOwnProperty(name)) { // 44
// Return the current value // 45
listener.apply(self, self.map[name]); // 46
} // 47
// 48
// Return EventState instance // 49
return self; // 50
}; // 51
// 52
EventState.prototype.once = function(name, listener) { // 53
var self = this; // 54
// 55
// Check if state got a value // 56
if (self.map.hasOwnProperty(name)) { // 57
// Return the value // 58
listener.apply(self, self.map[name]); // 59
} else { // 60
// Add the listener // 61
EventEmitter.prototype.once.call(self, name, listener); // 62
} // 63
// 64
// Return EventState instance // 65
return self; // 66
}; // 67
// 68
// 69
EventState.prototype.clearState = function(name) { // 70
var self = this; // 71
// 72
if (name) { // 73
// Remove the named state // 74
self.map = _.omit(self.map, name); // 75
} else { // 76
// Clear the whole map // 77
self.map = {}; // 78
} // 79
}; // 80
// 81
// 82
// Add api helpers // 83
EventState.prototype.addListener = EventState.prototype.on; // 84
// 85
// Add jquery like helpers // 86
EventState.prototype.one = EventState.prototype.once; // 87
// 88
/////////////////////////////////////////////////////////////////////// // 97
// 98
}).call(this); // 99
// 100
/////////////////////////////////////////////////////////////////////////////
}).call(this);
/* Exports */
if (typeof Package === 'undefined') Package = {};
Package['raix:eventstate'] = {
EventState: EventState
};
})();
//# sourceMappingURL=raix_eventstate.js.map