jsbus 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/jsbus/version.rb +1 -1
- data/vendor/assets/javascripts/jsbus.js +31 -43
- metadata +1 -1
data/lib/jsbus/version.rb
CHANGED
@@ -1,50 +1,50 @@
|
|
1
|
-
(function(window) {
|
1
|
+
(function (window) {
|
2
2
|
"use strict";
|
3
3
|
|
4
|
-
var eventCounter = 0;
|
5
|
-
|
6
4
|
function isFunction(obj) {
|
7
5
|
return !!(obj && obj.constructor && obj.call && obj.apply);
|
8
6
|
}
|
9
7
|
|
10
|
-
|
8
|
+
function log(message) {
|
9
|
+
if (window && window.eventBus && window.eventBus.debug && window.console && window.console.log) {
|
10
|
+
window.console.log(message);
|
11
|
+
}
|
12
|
+
}
|
13
|
+
|
14
|
+
var EventBus = function () {
|
11
15
|
var self = this;
|
12
16
|
|
13
17
|
// If true, logging to console is enabled.
|
14
18
|
self.debug = false;
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
/*
|
19
|
-
Publish an event to the event bus.
|
20
|
+
// Array of subscribers.
|
21
|
+
self.subscribers = [];
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
self.publish = function(eventType, data, callback) {
|
26
|
-
var eventTypes;
|
23
|
+
// Publish an event to the event bus.
|
24
|
+
// eventType: string or string array
|
25
|
+
// data: data associated with the event
|
26
|
+
// callback: fired at the completion of the event
|
27
|
+
self.publish = function (eventType, data, callback) {
|
28
|
+
var eventTypes = [].concat(eventType);
|
27
29
|
if (isFunction(data)) {
|
28
30
|
log("Given callback but no data. Assigning data to callback.");
|
29
31
|
callback = data;
|
30
32
|
data = {};
|
31
33
|
}
|
32
|
-
|
33
|
-
eventTypes = [].concat(eventType);
|
34
34
|
createAndPublishEvent(eventTypes, data, callback);
|
35
35
|
};
|
36
36
|
|
37
37
|
// Reset the event bus by removing all subscribers. This is useful
|
38
38
|
// (and necessary) in testing scenarios.
|
39
39
|
self.reset = function() {
|
40
|
-
|
40
|
+
self.debug = false;
|
41
41
|
self.subscribers = [];
|
42
42
|
};
|
43
43
|
|
44
|
-
// Subscribe to one or more events.
|
44
|
+
// Subscribe to one or more events. If eventType is an array, the given callback
|
45
|
+
// will be bound to multiple events.
|
45
46
|
self.subscribe = function(eventType, callback) {
|
46
|
-
var eventTypes;
|
47
|
-
eventTypes = [].concat(eventType);
|
47
|
+
var eventTypes = [].concat(eventType);
|
48
48
|
subscribeToEventTypes(eventTypes, callback);
|
49
49
|
};
|
50
50
|
|
@@ -58,12 +58,6 @@
|
|
58
58
|
}
|
59
59
|
}
|
60
60
|
|
61
|
-
function log(message) {
|
62
|
-
if (self.debug && window.console && window.console.log) {
|
63
|
-
window.console.log(message);
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
61
|
function pushEventToSubscribers(event, eventType, callback) {
|
68
62
|
var i, subscriber;
|
69
63
|
for (i = self.subscribers.length - 1; i >= 0; i--) {
|
@@ -82,41 +76,35 @@
|
|
82
76
|
self.subscribers.push(subscriber);
|
83
77
|
}
|
84
78
|
}
|
85
|
-
};
|
79
|
+
}; // Closes EventBus definition
|
86
80
|
|
87
|
-
|
88
|
-
Subscriber object. A holder for an event type and a callback.
|
89
|
-
*/
|
81
|
+
// Subscriber object. A holder for an event type and a callback.
|
90
82
|
var Subscriber = function(eventType, callback) {
|
91
83
|
var self = this;
|
92
84
|
self.eventType = eventType;
|
93
85
|
self.callback = callback;
|
94
86
|
};
|
95
87
|
|
96
|
-
|
97
|
-
Event object.
|
98
|
-
*/
|
88
|
+
// Event object.
|
99
89
|
var Event = function(eventType, data) {
|
100
90
|
var self = this;
|
101
|
-
self.eventCounter = nextEventCounter();
|
102
91
|
self.eventType = eventType;
|
103
92
|
self.data = data || {};
|
104
93
|
|
94
|
+
// Push the event to the given subscriber.
|
105
95
|
self.push = function(subscriber, callback) {
|
106
|
-
subscriber.
|
96
|
+
// Invoke the subscriber's callback function. Save the response, if any.
|
97
|
+
var response = subscriber.callback(self) || { };
|
98
|
+
|
99
|
+
// If the publisher has a callback, invoke, passing the subscriber's response.
|
107
100
|
if (callback && isFunction(callback)) {
|
108
|
-
callback();
|
101
|
+
callback(response);
|
109
102
|
}
|
110
103
|
};
|
111
104
|
|
112
105
|
self.toString = function() {
|
113
|
-
return "Event
|
106
|
+
return "Event Type: " + self.eventType;
|
114
107
|
};
|
115
|
-
|
116
|
-
function nextEventCounter() {
|
117
|
-
eventCounter += 1;
|
118
|
-
return eventCounter;
|
119
|
-
}
|
120
108
|
};
|
121
109
|
|
122
110
|
// Do not define an eventBus is one has already been created.
|
@@ -124,4 +112,4 @@
|
|
124
112
|
return;
|
125
113
|
}
|
126
114
|
window.eventBus = new EventBus();
|
127
|
-
}
|
115
|
+
}(window));
|