PageRenderTime 45ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/ajax/libs/rxjs-jquery/0.0.2/rx.jquery.js

https://gitlab.com/Blueprint-Marketing/cdnjs
JavaScript | 426 lines | 324 code | 98 blank | 4 comment | 23 complexity | 9d0720ea378bf042f5f9c21e28e8ffb1 MD5 | raw file
  1. // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
  2. (function (root, factory) {
  3. var freeExports = typeof exports == 'object' && exports &&
  4. (typeof root == 'object' && root && root == root.global && (window = root), exports);
  5. // Because of build optimizers
  6. if (typeof define === 'function' && define.amd) {
  7. define(['rx', 'jQuery', 'exports'], function (Rx, jQuery, exports) {
  8. root.Rx = factory(root, exports, Rx, jQuery);
  9. return root.Rx;
  10. });
  11. } else if (typeof module == 'object' && module && module.exports == freeExports) {
  12. module.exports = factory(root, module.exports, require('./rx'), require('./jQuery'));
  13. } else {
  14. root.Rx = factory(root, {}, root.Rx, jQuery);
  15. }
  16. }(this, function (global, exp, root, $, undefined) {
  17. // Headers
  18. var root = global.Rx,
  19. observable = root.Observable,
  20. observableProto = observable.prototype,
  21. AsyncSubject = root.AsyncSubject,
  22. observableCreate = observable.create,
  23. observableCreateWithDisposable = observable.createWithDisposable,
  24. disposableEmpty = root.Disposable.empty,
  25. slice = Array.prototype.slice,
  26. proto = $.fn;
  27. $.Deferred.prototype.toObservable = function () {
  28. var subject = new AsyncSubject();
  29. this.done(function () {
  30. subject.onNext(slice.call(arguments));
  31. subject.onCompleted();
  32. }).fail(function () {
  33. subject.onError(slice.call(arguments));
  34. });
  35. return subject;
  36. };
  37. observableProto.toDeferred = function () {
  38. var deferred = $.Deferred();
  39. this.subscribe(function (value) {
  40. deferred.resolve(value);
  41. }, function (e) {
  42. deferred.reject(e);
  43. });
  44. return deferred;
  45. };
  46. //in order to support jQuery 1.6.*
  47. if ($.Callbacks) {
  48. $.Callbacks.prototype.toObservable = function () {
  49. var parent = this;
  50. return observableCreate(function (observer) {
  51. function handler(values) {
  52. observer.onNext(values);
  53. }
  54. parent.add(handler.bind(parent));
  55. return function () {
  56. parent.remove(handler);
  57. };
  58. });
  59. };
  60. }
  61. proto.onAsObservable = function () {
  62. var parent = this, args = slice.call(arguments, 0);
  63. return observableCreate(function(observer) {
  64. function handler(eventObject) {
  65. eventObject.additionalArguments = slice.call(arguments, 1);
  66. observer.onNext(eventObject);
  67. }
  68. args.push(handler.bind(parent));
  69. parent.on.apply(parent, args);
  70. return function() {
  71. parent.off.apply(parent, args);
  72. };
  73. });
  74. };
  75. proto.bindAsObservable = function(eventType, eventData) {
  76. var parent = this;
  77. return observableCreate(function(observer) {
  78. function handler(eventObject) {
  79. eventObject.additionalArguments = slice.call(arguments, 1);
  80. observer.onNext(eventObject);
  81. }
  82. parent.bind(eventType, eventData, handler.bind(parent));
  83. return function() {
  84. parent.unbind(eventType, handler);
  85. };
  86. });
  87. };
  88. proto.delegateAsObservable = function(selector, eventType, eventData) {
  89. var parent = this;
  90. return observableCreate(function(observer) {
  91. function handler(eventObject) {
  92. eventObject.additionalArguments = slice.call(arguments, 1);
  93. observer.onNext(eventObject);
  94. }
  95. parent.delegate(selector, eventType, eventData, handler.bind(parent));
  96. return function() {
  97. parent.undelegate(selector, eventType, handler);
  98. };
  99. });
  100. };
  101. proto.liveAsObservable = function(eventType, eventData) {
  102. var parent = this;
  103. return observableCreate(function(observer) {
  104. function handler(eventObject) {
  105. eventObject.additionalArguments = slice.call(arguments, 1);
  106. observer.onNext(eventObject);
  107. }
  108. parent.live(eventType, eventData, handler.bind(parent));
  109. return function() {
  110. parent.die(eventType, handler);
  111. };
  112. });
  113. };
  114. proto.changeAsObservable = function (eventData) {
  115. return this.bindAsObservable('change', eventData);
  116. };
  117. proto.clickAsObservable = function (eventData) {
  118. return this.bindAsObservable('click', eventData);
  119. };
  120. proto.dblclickAsObservable = function (eventData) {
  121. return this.bindAsObservable('dblclick', eventData);
  122. };
  123. proto.focusAsObservable = function(eventData) {
  124. return this.bindAsObservable('focus', eventData);
  125. };
  126. proto.focusinAsObservable = function(eventData) {
  127. return this.bindAsObservable('focusin', eventData);
  128. };
  129. proto.focusoutAsObservable = function(eventData) {
  130. return this.bindAsObservable('focusout', eventData);
  131. };
  132. proto.keydownAsObservable = function(eventData) {
  133. return this.bindAsObservable('keydown', eventData);
  134. };
  135. proto.keyupAsObservable = function(eventData) {
  136. return this.bindAsObservable('keyup', eventData);
  137. };
  138. proto.loadAsObservable = function(eventData) {
  139. return this.bindAsObservable('load', eventData);
  140. };
  141. proto.mousedownAsObservable = function(eventData) {
  142. return this.bindAsObservable('mousedown', eventData);
  143. };
  144. proto.mouseenterAsObservable = function(eventData) {
  145. return this.bindAsObservable('mouseenter', eventData);
  146. };
  147. proto.mouseleaveAsObservable = function(eventData) {
  148. return this.bindAsObservable('mouseleave', eventData);
  149. };
  150. proto.mousemoveAsObservable = function(eventData) {
  151. return this.bindAsObservable('mousemove', eventData);
  152. };
  153. proto.mouseoutAsObservable = function(eventData) {
  154. return this.bindAsObservable('mouseout', eventData);
  155. };
  156. proto.mouseoverAsObservable = function(eventData) {
  157. return this.bindAsObservable('mouseover', eventData);
  158. };
  159. proto.mouseupAsObservable = function(eventData) {
  160. return this.bindAsObservable('mouseup', eventData);
  161. };
  162. proto.resizeAsObservable = function(eventData) {
  163. return this.bindAsObservable('resize', eventData);
  164. };
  165. proto.scrollAsObservable = function(eventData) {
  166. return this.bindAsObservable('scroll', eventData);
  167. };
  168. proto.selectAsObservable = function(eventData) {
  169. return this.bindAsObservable('select', eventData);
  170. };
  171. proto.submitAsObservable = function(eventData) {
  172. return this.bindAsObservable('submit', eventData);
  173. };
  174. proto.unloadAsObservable = function(eventData) {
  175. return this.bindAsObservable('unload', eventData);
  176. };
  177. proto.oneAsObservable = function(types, selector, data) {
  178. var parent = this;
  179. return observableCreateWithDisposable(function(observer) {
  180. function handler (eventObject) {
  181. eventObject.additionalArguments = slice.call(arguments, 1);
  182. parent.off(types, selector, data, handler);
  183. observer.onNext(eventObject);
  184. observer.onCompleted();
  185. }
  186. parent.on(types, selector, data, handler.bind(parent));
  187. return disposableEmpty;
  188. });
  189. };
  190. proto.readyAsObservable = function() {
  191. var parent = this;
  192. return observableCreateWithDisposable(function(observer) {
  193. function handler(eventObject) {
  194. observer.onNext(eventObject);
  195. }
  196. parent.ready(handler.bind(parent));
  197. return disposableEmpty;
  198. });
  199. };
  200. proto.hideAsObservable = function (options) {
  201. if (typeof options === 'number') {
  202. options = { duration: options };
  203. } else if (!options) {
  204. options = {};
  205. }
  206. var subject = new AsyncSubject();
  207. options.complete = function() {
  208. subject.onNext(this);
  209. subject.onCompleted();
  210. };
  211. this.hide(options);
  212. return subject;
  213. };
  214. proto.showAsObservable = function(options) {
  215. if (typeof options === 'number') {
  216. options = { duration: options };
  217. } else if (!options) {
  218. options = {};
  219. }
  220. var subject = new AsyncSubject();
  221. options.complete = function() {
  222. subject.onNext(this);
  223. subject.onCompleted();
  224. };
  225. this.show(options);
  226. return subject;
  227. };
  228. proto.animateAsObservable = function(properties, duration, easing) {
  229. var subject = new AsyncSubject();
  230. this.animate(properties, duration, easing, function() {
  231. subject.onNext(this);
  232. subject.onCompleted();
  233. });
  234. return subject;
  235. };
  236. proto.fadeInAsObservable = function(duration, easing) {
  237. var subject = new AsyncSubject();
  238. this.fadeIn(duration, easing, function() {
  239. subject.onNext(this);
  240. subject.onCompleted();
  241. });
  242. return subject;
  243. };
  244. proto.fadeToAsObservable = function(duration, opacity, easing) {
  245. var subject = new AsyncSubject();
  246. this.fadeTo(duration, opacity, easing, function() {
  247. subject.onNext(this);
  248. subject.onCompleted();
  249. });
  250. return subject;
  251. };
  252. proto.fadeOutAsObservable = function(duration, easing) {
  253. var subject = new AsyncSubject();
  254. this.fadeOut(duration, easing, function() {
  255. subject.onNext(this);
  256. subject.onCompleted();
  257. });
  258. return subject;
  259. };
  260. proto.fadeToggleAsObservable = function(duration, easing) {
  261. var subject = new AsyncSubject();
  262. this.fadeToggle(duration, easing, function() {
  263. subject.onNext(this);
  264. subject.onCompleted();
  265. });
  266. return subject;
  267. };
  268. proto.slideDownAsObservable = function(duration) {
  269. var subject = new AsyncSubject();
  270. this.slideDown(duration, function() {
  271. subject.onNext(this);
  272. subject.onCompleted();
  273. });
  274. return subject;
  275. };
  276. proto.slideUpAsObservable = function(duration) {
  277. var subject = new AsyncSubject();
  278. this.slideUp(duration, function() {
  279. subject.onNext(this);
  280. subject.onCompleted();
  281. });
  282. return subject;
  283. };
  284. proto.slideToggleAsObservable = function(duration) {
  285. var subject = new AsyncSubject();
  286. this.slideToggle(duration, function() {
  287. subject.onNext(this);
  288. subject.onCompleted();
  289. });
  290. return subject;
  291. };
  292. proto.toggleAsObservable = function(duration, easing) {
  293. var subject = new AsyncSubject();
  294. this.toggle(duration, easing, function() {
  295. subject.onNext(this);
  296. subject.onCompleted();
  297. });
  298. return subject;
  299. };
  300. var ajaxAsObservable = $.ajaxAsObservable = function(settings) {
  301. var subject = new AsyncSubject();
  302. var internalSettings = {
  303. success: function(data, textStatus, jqXHR) {
  304. subject.onNext({ data: data, textStatus: textStatus, jqXHR: jqXHR });
  305. subject.onCompleted();
  306. },
  307. error: function(jqXHR, textStatus, errorThrown) {
  308. subject.onError({ jqXHR: jqXHR, textStatus: textStatus, errorThrown: errorThrown });
  309. }
  310. };
  311. $.extend(true, internalSettings, settings);
  312. $.ajax(internalSettings);
  313. return subject;
  314. };
  315. $.getAsObservable = function(url, data, dataType) {
  316. return ajaxAsObservable({ url: url, dataType: dataType, data: data });
  317. };
  318. $.getJSONAsObservable = function(url, data) {
  319. return ajaxAsObservable({ url: url, dataType: 'json', data: data });
  320. };
  321. $.getScriptAsObservable = function(url) {
  322. return ajaxAsObservable({ url: url, dataType: 'script'});
  323. };
  324. $.postAsObservable = function(url, data, dataType) {
  325. return ajaxAsObservable({ url: url, dataType: dataType, data: data, type: 'POST'});
  326. };
  327. return root;
  328. }));