72 lines
2.8 KiB
JavaScript
72 lines
2.8 KiB
JavaScript
|
// Copyright (c) Microsoft, All rights reserved. See License.txt in the project root for license information.
|
||
|
|
||
|
;(function (factory) {
|
||
|
var objectTypes = {
|
||
|
'function': true,
|
||
|
'object': true
|
||
|
};
|
||
|
|
||
|
function checkGlobal(value) {
|
||
|
return (value && value.Object === Object) ? value : null;
|
||
|
}
|
||
|
|
||
|
var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null;
|
||
|
var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null;
|
||
|
var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global);
|
||
|
var freeSelf = checkGlobal(objectTypes[typeof self] && self);
|
||
|
var freeWindow = checkGlobal(objectTypes[typeof window] && window);
|
||
|
var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null;
|
||
|
var thisGlobal = checkGlobal(objectTypes[typeof this] && this);
|
||
|
var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')();
|
||
|
|
||
|
// Because of build optimizers
|
||
|
if (typeof define === 'function' && define.amd) {
|
||
|
define(['./rx'], function (Rx, exports) {
|
||
|
return factory(root, exports, Rx);
|
||
|
});
|
||
|
} else if (typeof module === 'object' && module && module.exports === freeExports) {
|
||
|
module.exports = factory(root, module.exports, require('./rx'));
|
||
|
} else {
|
||
|
root.Rx = factory(root, {}, root.Rx);
|
||
|
}
|
||
|
}.call(this, function (root, exp, Rx, undefined) {
|
||
|
|
||
|
var Observable = Rx.Observable,
|
||
|
observableProto = Observable.prototype,
|
||
|
AnonymousObservable = Rx.AnonymousObservable,
|
||
|
observableNever = Observable.never,
|
||
|
isEqual = Rx.internals.isEqual,
|
||
|
defaultSubComparer = Rx.helpers.defaultSubComparer;
|
||
|
|
||
|
/**
|
||
|
* jortSort checks if your inputs are sorted. Note that this is only for a sequence with an end.
|
||
|
* See http://jort.technology/ for full details.
|
||
|
* @returns {Observable} An observable which has a single value of true if sorted, else false.
|
||
|
*/
|
||
|
observableProto.jortSort = function () {
|
||
|
return this.jortSortUntil(observableNever());
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* jortSort checks if your inputs are sorted until another Observable sequence fires.
|
||
|
* See http://jort.technology/ for full details.
|
||
|
* @returns {Observable} An observable which has a single value of true if sorted, else false.
|
||
|
*/
|
||
|
observableProto.jortSortUntil = function (other) {
|
||
|
var source = this;
|
||
|
return new AnonymousObservable(function (observer) {
|
||
|
var arr = [];
|
||
|
return source.takeUntil(other).subscribe(
|
||
|
arr.push.bind(arr),
|
||
|
observer.onError.bind(observer),
|
||
|
function () {
|
||
|
var sorted = arr.slice(0).sort(defaultSubComparer);
|
||
|
observer.onNext(isEqual(arr, sorted));
|
||
|
observer.onCompleted();
|
||
|
});
|
||
|
}, source);
|
||
|
};
|
||
|
|
||
|
return Rx;
|
||
|
}));
|