Skip to content

Commit 6f3d9c0

Browse files
Initial commit
0 parents  commit 6f3d9c0

File tree

3 files changed

+269
-0
lines changed

3 files changed

+269
-0
lines changed

lib/rx.jquery.js

Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// This code is licensed by Microsoft Corporation under the terms
3+
// of the MICROSOFT REACTIVE EXTENSIONS FOR JAVASCRIPT AND .NET LIBRARIES License.
4+
// See http://go.microsoft.com/fwlink/?LinkId=186234.
5+
6+
(function()
7+
{
8+
var _jQuery, proto, global, root, observable, asyncSubject, observableCreate, disposableEmpty, slice;
9+
_jQuery = jQuery;
10+
proto = _jQuery.fn;
11+
global = this;
12+
slice = [].slice;
13+
if (typeof ProvideCustomRxRootObject == "undefined") {
14+
root = global.Rx;
15+
} else {
16+
root = ProvideCustomRxRootObject();
17+
}
18+
observable = root.Observable;
19+
asyncSubject = root.AsyncSubject;
20+
observableCreate = observable.Create;
21+
disposableEmpty = root.Disposable.Empty;
22+
23+
proto.bindAsObservable = function(eventType, eventData) {
24+
var parent;
25+
parent = this;
26+
return observableCreate(function(observer) {
27+
var handler;
28+
handler = function(eventObject) {
29+
observer.OnNext(eventObject);
30+
};
31+
parent.bind(eventType, eventData, handler);
32+
return function() {
33+
parent.unbind(eventType, handler);
34+
};
35+
});
36+
};
37+
proto.delegateAsObservable = function(selector, eventType) {
38+
var parent, args;
39+
parent = this;
40+
args = slice.call(arguments);
41+
return observableCreate(function(observer) {
42+
var handler;
43+
handler = function(eventObject) {
44+
observer.OnNext(eventObject);
45+
};
46+
args.push(handler);
47+
parent.delegate.apply(this, args);
48+
return function() {
49+
parent.undelegate(selector, eventType, handler);
50+
};
51+
});
52+
};
53+
proto.liveAsObservable = function(eventType, eventData) {
54+
var parent;
55+
parent = this;
56+
return observableCreate(function(observer) {
57+
var handler;
58+
handler = function(eventObject) {
59+
observer.OnNext(eventObject);
60+
};
61+
parent.live(eventType, eventData, handler);
62+
return function() {
63+
parent.die(eventType, handler);
64+
};
65+
});
66+
};
67+
proto.focusAsObservable = function(eventData) {
68+
return this.bindAsObservable('focus', eventData);
69+
};
70+
proto.focusinAsObservable = function(eventData) {
71+
return this.bindAsObservable('focusin', eventData);
72+
};
73+
proto.focusoutAsObservable = function(eventData) {
74+
return this.bindAsObservable('focusout', eventData);
75+
};
76+
proto.keydownAsObservable = function(eventData) {
77+
return this.bindAsObservable('keydown', eventData);
78+
};
79+
proto.keyupAsObservable = function(eventData) {
80+
return this.bindAsObservable('keyup', eventData);
81+
};
82+
proto.loadAsObservable = function(eventData) {
83+
return this.bindAsObservable('load', eventData);
84+
};
85+
proto.mousedownAsObservable = function(eventData) {
86+
return this.bindAsObservable('mousedown', eventData);
87+
};
88+
proto.mouseenterAsObservable = function(eventData) {
89+
return this.bindAsObservable('mouseenter', eventData);
90+
};
91+
proto.mouseleaveAsObservable = function(eventData) {
92+
return this.bindAsObservable('mouseleave', eventData);
93+
};
94+
proto.mousemoveAsObservable = function(eventData) {
95+
return this.bindAsObservable('mousemove', eventData);
96+
};
97+
proto.mouseoverAsObservable = function(eventData) {
98+
return this.bindAsObservable('mouseover', eventData);
99+
};
100+
proto.mouseupAsObservable = function(eventData) {
101+
return this.bindAsObservable('mouseup', eventData);
102+
};
103+
proto.resizeAsObservable = function(eventData) {
104+
return this.bindAsObservable('resize', eventData);
105+
};
106+
proto.scrollAsObservable = function(eventData) {
107+
return this.bindAsObservable('scroll', eventData);
108+
};
109+
proto.selectAsObservable = function(eventData) {
110+
return this.bindAsObservable('select', eventData);
111+
};
112+
proto.submitAsObservable = function(eventData) {
113+
return this.bindAsObservable('submit', eventData);
114+
};
115+
proto.unloadAsObservable = function(eventData) {
116+
return this.bindAsObservable('unload', eventData);
117+
};
118+
proto.oneAsObservable = function(eventType, eventData) {
119+
var parent;
120+
parent = this;
121+
return observableCreate(function(observer) {
122+
var handler;
123+
handler = function(eventObject) {
124+
parent.unbind(eventType, handler);
125+
observer.OnNext(eventObject);
126+
observer.OnCompleted();
127+
};
128+
parent.bind(eventType, eventData, handler);
129+
return function() { };
130+
});
131+
};
132+
proto.readyAsObservable = function() {
133+
var parent;
134+
parent = this;
135+
return observableCreate(function(observer) {
136+
var handler;
137+
handler = function(eventObject) {
138+
observer.OnNext(eventObject);
139+
};
140+
parent.ready(handler);
141+
return function() {};
142+
});
143+
};
144+
proto.hideAsObservable = function(duration) {
145+
var subject;
146+
subject = new asyncSubject();
147+
this.hide(duration, function() {
148+
subject.OnNext(this);
149+
subject.OnCompleted();
150+
});
151+
return subject;
152+
};
153+
proto.showAsObservable = function(duration) {
154+
var subject;
155+
subject = new asyncSubject();
156+
this.show(duration, function() {
157+
subject.OnNext(this);
158+
subject.OnCompleted();
159+
});
160+
return subject;
161+
};
162+
proto.animateAsObservable = function(properties, duration, easing) {
163+
var subject;
164+
subject = new asyncSubject();
165+
this.animate(properties, duration, easing, function() {
166+
subject.OnNext(this);
167+
subject.OnCompleted();
168+
});
169+
return subject;
170+
};
171+
proto.fadeInAsObservable = function(duration) {
172+
var subject;
173+
subject = new asyncSubject();
174+
this.fadeIn(duration, function() {
175+
subject.OnNext(this);
176+
subject.OnCompleted();
177+
});
178+
return subject;
179+
};
180+
proto.fadeToAsObservable = function(duration, opacity) {
181+
var subject;
182+
subject = new asyncSubject();
183+
this.fadeTo(duration, opacity, function() {
184+
subject.OnNext(this);
185+
subject.OnCompleted();
186+
});
187+
return subject;
188+
};
189+
proto.fadeOutAsObservable = function(duration) {
190+
var subject;
191+
subject = new asyncSubject();
192+
this.fadeOut(duration, function() {
193+
subject.OnNext(this);
194+
subject.OnCompleted();
195+
});
196+
return subject;
197+
};
198+
proto.slideDownAsObservable = function(duration) {
199+
var subject;
200+
subject = new asyncSubject();
201+
this.slideDown(duration, function() {
202+
subject.OnNext(this);
203+
subject.OnCompleted();
204+
});
205+
return subject;
206+
};
207+
proto.slideUpAsObservable = function(duration) {
208+
var subject;
209+
subject = new asyncSubject();
210+
this.slideUp(duration, function() {
211+
subject.OnNext(this);
212+
subject.OnCompleted();
213+
});
214+
return subject;
215+
};
216+
proto.slideToggleAsObservable = function(duration) {
217+
var subject;
218+
subject = new asyncSubject();
219+
this.slideToggle(duration, function()
220+
{
221+
subject.OnNext(this);
222+
subject.OnCompleted();
223+
});
224+
return subject;
225+
};
226+
var ajaxAsObservable = _jQuery.ajaxAsObservable = function(settings) {
227+
var subject, internalSettings, k;
228+
internalSettings = {};
229+
for (k in settings) {
230+
internalSettings[k] = settings[k];
231+
}
232+
subject = new asyncSubject();
233+
internalSettings.success = function(data, textStatus, jqXHR) {
234+
subject.OnNext({ data: data, textStatus: textStatus, jqXHR: jqXHR });
235+
subject.OnCompleted();
236+
};
237+
internalSettings.error = function(jqXHR, textStatus, errorThrown) {
238+
subject.OnError({ jqXHR: jqXHR, textStatus: textStatus, errorThrown: errorThrown });
239+
};
240+
_jQuery.ajax(internalSettings);
241+
return subject;
242+
};
243+
_jQuery.getAsObservable = function(url, data, dataType) {
244+
return ajaxAsObservable({ url: url, dataType: dataType, data: data });
245+
};
246+
_jQuery.getJSONAsObservable = function(url, data) {
247+
return ajaxAsObservable({ url: url, dataType: 'json', data: data });
248+
};
249+
_jQuery.getScriptAsObservable = function(url) {
250+
return ajaxAsObservable({ url: url, dataType: 'script'});
251+
};
252+
_jQuery.postAsObservable = function(url, data, dataType) {
253+
return ajaxAsObservable({ url: url, dataType: dataType, data: data, type: 'POST'});
254+
};
255+
})();

package.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name" : "rxjs-jquery",
3+
"description" : "Reactive Extensions for JavaScript bindings for jQuery",
4+
"licenses" : [ { "type": "Apache", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ],
5+
"url" : "http://github.com/reactive-extensions/l2o-js",
6+
"keywords" : ["RxJS", "jQuery"],
7+
"author" : "Matthew Podwysocki <[email protected]>",
8+
"contributors" : [],
9+
"dependencies" : [],
10+
"lib" : ".",
11+
"main" : "./lib/rx.jquery.js",
12+
"version" : "0.0.1"
13+
}

readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This project provides Reactive Extensions for JavaScript (RxJS) bindings for jQuery to abstract over the event binding, Ajax and Deferreds. The Reactive Extensions are not included with this release and must be installed separately.

0 commit comments

Comments
 (0)