rx.sorting.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright (c) Microsoft, All rights reserved. See License.txt in the project root for license information.
  2. ;(function (factory) {
  3. var objectTypes = {
  4. 'function': true,
  5. 'object': true
  6. };
  7. function checkGlobal(value) {
  8. return (value && value.Object === Object) ? value : null;
  9. }
  10. var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null;
  11. var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null;
  12. var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global);
  13. var freeSelf = checkGlobal(objectTypes[typeof self] && self);
  14. var freeWindow = checkGlobal(objectTypes[typeof window] && window);
  15. var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null;
  16. var thisGlobal = checkGlobal(objectTypes[typeof this] && this);
  17. var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')();
  18. // Because of build optimizers
  19. if (typeof define === 'function' && define.amd) {
  20. define(['./rx'], function (Rx, exports) {
  21. return factory(root, exports, Rx);
  22. });
  23. } else if (typeof module === 'object' && module && module.exports === freeExports) {
  24. module.exports = factory(root, module.exports, require('./rx'));
  25. } else {
  26. root.Rx = factory(root, {}, root.Rx);
  27. }
  28. }.call(this, function (root, exp, Rx, undefined) {
  29. var Observable = Rx.Observable,
  30. observableProto = Observable.prototype,
  31. AnonymousObservable = Rx.AnonymousObservable,
  32. observableNever = Observable.never,
  33. isEqual = Rx.internals.isEqual,
  34. defaultSubComparer = Rx.helpers.defaultSubComparer;
  35. /**
  36. * jortSort checks if your inputs are sorted. Note that this is only for a sequence with an end.
  37. * See http://jort.technology/ for full details.
  38. * @returns {Observable} An observable which has a single value of true if sorted, else false.
  39. */
  40. observableProto.jortSort = function () {
  41. return this.jortSortUntil(observableNever());
  42. };
  43. /**
  44. * jortSort checks if your inputs are sorted until another Observable sequence fires.
  45. * See http://jort.technology/ for full details.
  46. * @returns {Observable} An observable which has a single value of true if sorted, else false.
  47. */
  48. observableProto.jortSortUntil = function (other) {
  49. var source = this;
  50. return new AnonymousObservable(function (observer) {
  51. var arr = [];
  52. return source.takeUntil(other).subscribe(
  53. arr.push.bind(arr),
  54. observer.onError.bind(observer),
  55. function () {
  56. var sorted = arr.slice(0).sort(defaultSubComparer);
  57. observer.onNext(isEqual(arr, sorted));
  58. observer.onCompleted();
  59. });
  60. }, source);
  61. };
  62. return Rx;
  63. }));