-
Notifications
You must be signed in to change notification settings - Fork 4
/
jnoid.min.js
1 lines (1 loc) · 15 KB
/
jnoid.min.js
1
(function(){var Bad,Box,BoxDispatcher,Error,Event,Fire,Jnoid,Just,Maybe,Nothing,Observable,Reply,Stop,Stream,StreamDispatcher,Wrong,all,any,append,copyArray,empty,fail,foldl,head,id,isFunction,map,method,name,nop,remove,tail,tap,toArray,toError,toEvent,toMaybe,uncurry,value,_ref,_ref1,_ref2,_ref3,_ref4,__hasProp={}.hasOwnProperty,__extends=function(child,parent){for(var key in parent){if(__hasProp.call(parent,key))child[key]=parent[key]}function ctor(){this.constructor=child}ctor.prototype=parent.prototype;child.prototype=new ctor;child.__super__=parent.prototype;return child},__slice=[].slice;Jnoid={VERSION:"0.0.1"};Maybe=function(){function Maybe(){}return Maybe}();Just=function(_super){__extends(Just,_super);function Just(value){this.value=value}Just.prototype.getOrElse=function(){return this.value};Just.prototype.filter=function(f){if(this.test(f)){return this}else{return Nothing}};Just.prototype.test=function(f){return f(this.value)};Just.prototype.map=function(f){return new Just(f(this.value))};Just.prototype.isEmpty=function(){return false};Just.prototype.inspect=function(){return"Just "+this.value};return Just}(Maybe);Bad=function(_super){__extends(Bad,_super);function Bad(){_ref=Bad.__super__.constructor.apply(this,arguments);return _ref}Bad.prototype.getOrElse=function(some){return some};Bad.prototype.filter=function(f){return this};Bad.prototype.test=function(f){return true};Bad.prototype.map=function(f){return this};Bad.prototype.isEmpty=function(){return true};return Bad}(Maybe);Wrong=function(_super){__extends(Wrong,_super);function Wrong(error){this.error=error}Wrong.prototype.inspect=function(){return"Wrong "+this.error};return Wrong}(Bad);Nothing=new(function(_super){__extends(_Class,_super);function _Class(){}_Class.prototype.inspect=function(){return"Nothing"};return _Class}(Bad));_ref1=[Maybe,Just,Wrong,Nothing],Event=_ref1[0],Fire=_ref1[1],Error=_ref1[2],Stop=_ref1[3];toEvent=function(x){if(x instanceof Event){return x}else{return new Fire(x)}};toError=function(x){if(x instanceof Event){return x}else{return new Error(x)}};Observable=function(){function Observable(subscribe){this.subscribe=this.dispatched(subscribe)}Observable.prototype.dispatched=fail;Observable.prototype.onValue=function(f){return this.subscribe(function(event){return event.map(function(v){return f(v)}).getOrElse(Reply.more)})};Observable.prototype.onError=function(f){return this.subscribe(function(event){if(event instanceof Error){return f(event.error)}else{return Reply.more}})};Observable.prototype.withHandler=function(handler){return new this.constructor(this.dispatched(this.subscribe,handler))};Observable.prototype.map=function(f){return this.withHandler(function(event){return this.push(event.map(f))})};Observable.prototype.filter=function(f){return this.withHandler(function(event){if(event.test(f)){return this.push(event)}else{return Reply.more}})};Observable.prototype.recover=function(f){return this.withHandler(function(event){if(event instanceof Error){return this.push(new Fire(f(event.error)))}else{return this.push(event)}})};Observable.prototype.flatMapGeneric=function(f,lastOnly){var root;root=this;return new this.constructor(function(sink){var checkStop,children,rootStop,spawner,unbind,unsubChildren,unsubRoot;children=[];rootStop=false;unsubRoot=function(){};unsubChildren=function(){var unsubChild,_i,_len;for(_i=0,_len=children.length;_i<_len;_i++){unsubChild=children[_i];unsubChild()}return children=[]};unbind=function(){unsubChildren();return unsubRoot()};checkStop=function(){if(rootStop&&children.length===0){return sink(Stop)}};spawner=function(event){var child,childStopped,handler,removeChild,unsubChild;if(event===Stop){rootStop=true;return checkStop()}else{if(lastOnly){unsubChildren()}if(event instanceof Error){return sink(event)}else{child=f(event.value);unsubChild=void 0;childStopped=false;removeChild=function(){if(unsubChild!=null){remove(unsubChild,children)}return checkStop()};handler=function(event){if(event===Stop){removeChild();childStopped=true;return Reply.stop}else{return tap(sink(event),function(reply){if(reply===Reply.stop){return unbind()}})}};unsubChild=child.subscribe(handler);if(!childStopped){return children.push(unsubChild)}}}};unsubRoot=root.subscribe(spawner);return unbind})};Observable.prototype.flatMapAll=function(f){return this.flatMapGeneric(f,false)};Observable.prototype.flatMapLast=function(f){return this.flatMapGeneric(f,true)};Observable.prototype.withStateMachine=function(initState,f){var state;state=initState;return this.withHandler(function(event){var newState,outputs,stopped,_ref2,_this=this;_ref2=f(state,event),newState=_ref2[0],outputs=_ref2[1];state=newState;stopped=any(outputs,function(output){return _this.push(output)===Reply.stop});if(stopped){return Reply.stop}else{return Reply.more}})};Observable.prototype.skipDuplicates=function(isEqual){if(isEqual==null){isEqual=function(a,b){return a===b}}return this.withStateMachine(Nothing,function(prev,event){return event.map(function(v){if(prev===Nothing||!prev.test(function(p){return isEqual(v,p)})){return[new Just(v),[event]]}else{return[prev,[]]}}).getOrElse([prev,[event]])})};Observable.prototype.scan=function(initState,f){return this.withStateMachine(initState,function(acc,event){var newAcc;newAcc=event.map(function(v){return f(acc,v)}).getOrElse(acc);return[newAcc,[toEvent(newAcc)]]})};Observable.prototype.debounce=function(delay){var _this=this;return this.flatMapLast(function(value){return _this.constructor.later(delay,value)})};Observable.prototype.take=function(n){if(n<=0){return this.constructor.nothing()}return this.withHandler(function(event){if(!(event instanceof Fire)){return this.push(event)}else{n--;if(n>0){return this.push(event)}else{if(n===0){this.push(event)}this.push(Stop);return Reply.stop}}})};Observable.prototype.takeWhile=function(f){return this.withHandler(function(event){if(event.test(f)){return this.push(event)}else{this.push(Stop);return Reply.stop}})};Observable.prototype.takeUntil=function(other){var source,stopper;source=this;stopper=other.changes();return new this.constructor(function(sink){var transport,unbind,unsubSource,unsubStopper,watcher;unsubSource=function(){};unsubStopper=function(){};unbind=function(){unsubSource();return unsubStopper()};transport=function(event){sink(event);if(event===Stop){return unbind()}};watcher=function(event){sink(Stop);return unbind()};unsubSource=source.subscribe(transport);unsubStopper=stopper.subscribe(watcher);return unbind})};Observable.prototype.not=function(){return this.map(function(x){return!x})};Observable.fromList=function(values,wrapper){if(wrapper==null){wrapper=toEvent}return new this(function(sink){var event,_i,_len,_ref2;_ref2=map(wrapper,values);for(_i=0,_len=_ref2.length;_i<_len;_i++){event=_ref2[_i];sink(event)}return sink(Stop)})};Observable.nothing=function(){return this.fromList([])};Observable.unit=function(value){return this.fromList([value])};Observable.error=function(value){return this.fromList([value],toError)};Observable.fromBinder=function(binder,transform){if(transform==null){transform=id}return new this(function(sink){var unbinder;return unbinder=binder(function(){var args,event,events,_i,_len,_ref2,_results;args=1<=arguments.length?__slice.call(arguments,0):[];events=toArray(transform.apply(null,args));_ref2=map(toEvent,events);_results=[];for(_i=0,_len=_ref2.length;_i<_len;_i++){event=_ref2[_i];_results.push(tap(sink(event),function(reply){if(event===Stop||reply===Reply.stop){return unbinder()}}))}return _results})})};Observable.poll=function(delay,poll){return this.fromBinder(function(handler){var i;i=setInterval(handler,delay);return function(){return clearInterval(i)}},poll)};Observable.interval=function(delay,list){var index;index=0;return this.poll(delay,function(){var value;value=list[index++];if(index<list.length){return value}else if(index===list.length){return[value,Stop]}else{return Stop}})};Observable.later=function(delay,value){return this.interval(delay,[value])};Observable.fromPromise=function(promise){return this.fromBinder(function(handler){promise.then(handler,function(e){return handler(new Error(e))});return function(){return typeof promise.abort==="function"?promise.abort():void 0}},function(value){return[value,Stop]})};Observable.fromDOM=function(element,event,selector,transform){var _ref2,_this=this;if(isFunction(selector)){_ref2=[selector,null],transform=_ref2[0],selector=_ref2[1]}return this.fromBinder(function(handler){element.on(event,selector,handler);return function(){return element.off(event,selector,handler)}},transform)};return Observable}();StreamDispatcher=function(){function StreamDispatcher(subscribe,handler){var sinks,_this=this;if(subscribe==null){subscribe=function(event){}}sinks=[];this.push=function(event){var sink,_i,_results;_results=[];for(_i=sinks.length-1;_i>=0;_i+=-1){sink=sinks[_i];_results.push(tap(sink(event),function(reply){if(reply===Reply.stop){return remove(sink,sinks)}}))}return _results};if(handler==null){handler=function(event){return this.push(event)}}this.handler=function(event){return handler.apply(_this,[event])};this.subscribe=function(sink){var unsubSelf;sinks.push(sink);if(sinks.length===1){unsubSelf=subscribe(_this.handler)}return function(){remove(sink,sinks);if(!any(sinks)){return typeof unsubSelf==="function"?unsubSelf():void 0}}}}return StreamDispatcher}();Stream=function(_super){__extends(Stream,_super);function Stream(){_ref2=Stream.__super__.constructor.apply(this,arguments);return _ref2}Stream.prototype.dispatched=function(subscribe,handler){return new StreamDispatcher(subscribe,handler).subscribe};Stream.prototype.flatMap=function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];return this.flatMapAll.apply(this,args)};Stream.prototype.merge=function(){var others;others=1<=arguments.length?__slice.call(arguments,0):[];return Stream.fromList(map(method("changes"),[this].concat(__slice.call(others)))).flatten()};Stream.prototype.flatten=function(){return this.flatMap(id)};Stream.prototype.box=function(initial){var _this=this;if(initial==null){initial=Nothing}initial=toMaybe(initial);return new Box(function(sink){if(!initial.isEmpty()){sink(initial)}return _this.subscribe(function(event){return sink(event)})})};Stream.prototype.changes=function(){return this};Stream.prototype.zipWith=function(){var f,others,_i,_ref3;others=2<=arguments.length?__slice.call(arguments,0,_i=arguments.length-1):(_i=0,[]),f=arguments[_i++];return(_ref3=this.box()).zipWith.apply(_ref3,__slice.call(others).concat([f]))};Stream.prototype.and=function(){var others,_ref3;others=1<=arguments.length?__slice.call(arguments,0):[];return(_ref3=this.box()).and.apply(_ref3,others)};Stream.prototype.or=function(){var others,_ref3;others=1<=arguments.length?__slice.call(arguments,0):[];return(_ref3=this.box()).or.apply(_ref3,others)};Stream.prototype.not=function(){return this.box().not()};return Stream}(Observable);BoxDispatcher=function(_super){__extends(BoxDispatcher,_super);function BoxDispatcher(subscribe,handler){var current,push,stopped,_this=this;BoxDispatcher.__super__.constructor.call(this,subscribe,handler);current=Nothing;push=this.push;subscribe=this.subscribe;stopped=false;this.push=function(event){event.map(function(x){return current=new Just(x)});if(event===Stop){stopped=true}return push.apply(_this,[event])};this.subscribe=function(sink){var reply;reply=current.map(function(v){return sink(new Fire(v))});if(reply.getOrElse(Reply.more)===Reply.stop){return nop}else if(stopped){sink(Stop);return nop}else{return subscribe.apply(_this,[sink])}}}return BoxDispatcher}(StreamDispatcher);Box=function(_super){__extends(Box,_super);function Box(){_ref3=Box.__super__.constructor.apply(this,arguments);return _ref3}Box.prototype.dispatched=function(subscribe,handler){return new BoxDispatcher(subscribe,handler).subscribe};Box.prototype.flatMap=function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];return this.flatMapLast.apply(this,args)};Box.prototype.map2=function(other,f){return this.flatMap(function(x){return other.box().map(function(y){return f(x,y)})})};Box.sequence=function(boxes){return foldl(boxes,this.unit([]),function(acc,box){return acc.map2(box,function(memo,value){return append(memo,value)})})};Box.zipWith=function(boxes,f){return this.sequence(boxes).map(uncurry(f))};Box.prototype.zipWith=function(){var f,others,_i;others=2<=arguments.length?__slice.call(arguments,0,_i=arguments.length-1):(_i=0,[]),f=arguments[_i++];return Box.zipWith([this].concat(__slice.call(others)),f)};Box.prototype.zip=function(){var boxes;boxes=1<=arguments.length?__slice.call(arguments,0):[];return Box.sequence([this].concat(__slice.call(boxes)))};Box.prototype.and=function(){var others;others=1<=arguments.length?__slice.call(arguments,0):[];return this.zipWith.apply(this,__slice.call(others).concat([function(a,b){return a&&b}]))};Box.prototype.or=function(){var others;others=1<=arguments.length?__slice.call(arguments,0):[];return this.zipWith.apply(this,__slice.call(others).concat([function(a,b){return a||b}]))};Box.prototype.sampledBy=function(sampler){var _this=this;return sampler.flatMap(function(){return _this.take(1)}).changes()};Box.prototype.changes=function(){var _this=this;return new Stream(function(sink){return _this.subscribe(function(event){return sink(event)})})};Box.prototype.box=function(){return this};Box.prototype.merge=function(){var others,_ref4;others=1<=arguments.length?__slice.call(arguments,0):[];return(_ref4=this.changes()).merge.apply(_ref4,others)};return Box}(Observable);Reply={stop:"<stop>",more:"<more>"};empty=function(xs){return xs.length===0};method=function(meth){return function(obj){return obj[meth]()}};nop=function(){};id=function(x){return x};fail=function(){throw"method not implemented"};head=function(xs){return xs[0]};tail=function(xs){return xs.slice(1,xs.length)};uncurry=function(f){return function(args){return f.apply(null,args)}};map=function(f,xs){var x,_i,_len,_results;_results=[];for(_i=0,_len=xs.length;_i<_len;_i++){x=xs[_i];_results.push(f(x))}return _results};foldl=function(xs,seed,f){var x,_i,_len;for(_i=0,_len=xs.length;_i<_len;_i++){x=xs[_i];seed=f(seed,x)}return seed};tap=function(x,f){f(x);return x};remove=function(x,xs){var i;i=xs.indexOf(x);if(i>=0){return xs.splice(i,1)}};all=function(xs,f){var x,_i,_len;if(f==null){f=id}for(_i=0,_len=xs.length;_i<_len;_i++){x=xs[_i];if(!f(x)){return false}}return true};any=function(xs,f){var x,_i,_len;if(f==null){f=id}for(_i=0,_len=xs.length;_i<_len;_i++){x=xs[_i];if(f(x)){return true}}return false};copyArray=function(xs){return xs.slice()};append=function(xs,x){return tap(copyArray(xs),function(copy){return copy.push(x)})};isFunction=function(f){return typeof f==="function"};toArray=function(x){if(x instanceof Array){return x}else{return[x]}};toMaybe=function(x){if(x instanceof Maybe){return x}else{return new Just(x)}};_ref4={Stream:Stream,Box:Box,Event:Event,Fire:Fire,Error:Error,Stop:Stop,Maybe:Maybe,Just:Just,Wrong:Wrong,Nothing:Nothing};for(name in _ref4){value=_ref4[name];Jnoid[name]=value}if(typeof define!=="undefined"&&define!==null?define.amd:void 0){define([],function(){return Jnoid})}else if(typeof module!=="undefined"&&module!==null?module.exports:void 0){module.exports=Jnoid}else{this.Jnoid=Jnoid}}).call(this);