Skip to content

Instantly share code, notes, and snippets.

@Nek
Created July 17, 2014 12:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Nek/8d1c1a41af98c4a13081 to your computer and use it in GitHub Desktop.
Save Nek/8d1c1a41af98c4a13081 to your computer and use it in GitHub Desktop.
requirebin sketch
// example using the raf module from npm. try changing some values!
var requestAnimationFrame = require("raf")
var Bacon = require("baconjs")
var canvas = document.createElement("canvas")
canvas.width = 500
canvas.height = 100
document.body.appendChild(canvas)
var box = document.createElement("div")
document.body.appendChild(box)
function oval(context, x, y, w, h)
{
context.save();
context.beginPath();
context.translate(x, y);
context.scale(w/2, h/2);
context.arc(1, 1, 1, 0, 2*Math.PI, false);
context.closePath();
context.restore();
}
var context = canvas.getContext("2d")
oval(context, 87.5, 75.5, 11, 11);
context.fillStyle = 'rgba(0, 0, 0, 1)'
context.fill()
var a = new Bacon.Bus()
a.doAction(function(e){
context.clearRect(0, 0, canvas.width, canvas.height)
console.log(e.timestamp)
}).log()
a.push(1)
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.once=noop;process.off=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],"5kejYY":[function(require,module,exports){var now=require("performance-now"),global=typeof window==="undefined"?{}:window,vendors=["moz","webkit"],suffix="AnimationFrame",raf=global["request"+suffix],caf=global["cancel"+suffix]||global["cancelRequest"+suffix];for(var i=0;i<vendors.length&&!raf;i++){raf=global[vendors[i]+"Request"+suffix];caf=global[vendors[i]+"Cancel"+suffix]||global[vendors[i]+"CancelRequest"+suffix]}if(!raf||!caf){var last=0,id=0,queue=[],frameDuration=1e3/60;raf=function(callback){if(queue.length===0){var _now=now(),next=Math.max(0,frameDuration-(_now-last));last=next+_now;setTimeout(function(){var cp=queue.slice(0);queue.length=0;for(var i=0;i<cp.length;i++){if(!cp[i].cancelled){cp[i].callback(last)}}},next)}queue.push({handle:++id,callback:callback,cancelled:false});return id};caf=function(handle){for(var i=0;i<queue.length;i++){if(queue[i].handle===handle){queue[i].cancelled=true}}}}module.exports=function(){return raf.apply(global,arguments)};module.exports.cancel=function(){caf.apply(global,arguments)}},{"performance-now":4}],raf:[function(require,module,exports){module.exports=require("5kejYY")},{}],4:[function(require,module,exports){(function(process){(function(){var getNanoSeconds,hrtime,loadTime;if(typeof performance!=="undefined"&&performance!==null&&performance.now){module.exports=function(){return performance.now()}}else if(typeof process!=="undefined"&&process!==null&&process.hrtime){module.exports=function(){return(getNanoSeconds()-loadTime)/1e6};hrtime=process.hrtime;getNanoSeconds=function(){var hr;hr=hrtime();return hr[0]*1e9+hr[1]};loadTime=getNanoSeconds()}else if(Date.now){module.exports=function(){return Date.now()-loadTime};loadTime=Date.now()}else{module.exports=function(){return(new Date).getTime()-loadTime};loadTime=(new Date).getTime()}}).call(this)}).call(this,require("/home/admin/browserify-cdn/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"))},{"/home/admin/browserify-cdn/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":1}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({"wY/X68":[function(require,module,exports){(function(){var Bacon,BufferingSource,Bus,CompositeUnsubscribe,ConsumingSource,DepCache,Desc,Dispatcher,End,Error,Event,EventStream,Initial,Next,None,Observable,Property,PropertyDispatcher,Some,Source,UpdateBarrier,addPropertyInitValueToStream,assert,assertArray,assertEventStream,assertFunction,assertNoArguments,assertString,cloneArray,compositeUnsubscribe,containsDuplicateDeps,convertArgsToFunction,describe,end,eventIdCounter,findDeps,flatMap_,former,idCounter,initial,isArray,isFieldKey,isFunction,isObservable,latterF,liftCallback,makeFunction,makeFunctionArgs,makeFunction_,makeObservable,makeSpawner,next,nop,partiallyApplied,recursionDepth,registerObs,spys,toCombinator,toEvent,toFieldExtractor,toFieldKey,toOption,toSimpleExtractor,withDescription,withMethodCallSupport,_,_ref,__slice=[].slice,__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},__bind=function(fn,me){return function(){return fn.apply(me,arguments)}};Bacon={toString:function(){return"Bacon"}};Bacon.version="0.7.18";Bacon.fromBinder=function(binder,eventTransformer){if(eventTransformer==null){eventTransformer=_.id}return new EventStream(describe(Bacon,"fromBinder",binder,eventTransformer),function(sink){var unbind,unbinder,unbound;unbound=false;unbind=function(){if(typeof unbinder!=="undefined"&&unbinder!==null){if(!unbound){unbinder()}return unbound=true}};unbinder=binder(function(){var args,event,reply,value,_i,_len;args=1<=arguments.length?__slice.call(arguments,0):[];value=eventTransformer.apply(null,args);if(!(isArray(value)&&_.last(value)instanceof Event)){value=[value]}reply=Bacon.more;for(_i=0,_len=value.length;_i<_len;_i++){event=value[_i];reply=sink(event=toEvent(event));if(reply===Bacon.noMore||event.isEnd()){if(unbinder!=null){unbind()}else{Bacon.scheduler.setTimeout(unbind,0)}return reply}}return reply});return unbind})};Bacon.$={asEventStream:function(eventName,selector,eventTransformer){var _ref;if(isFunction(selector)){_ref=[selector,null],eventTransformer=_ref[0],selector=_ref[1]}return withDescription(this.selector||this,"asEventStream",eventName,Bacon.fromBinder(function(_this){return function(handler){_this.on(eventName,selector,handler);return function(){return _this.off(eventName,selector,handler)}}}(this),eventTransformer))}};if((_ref=typeof jQuery!=="undefined"&&jQuery!==null?jQuery:typeof Zepto!=="undefined"&&Zepto!==null?Zepto:null)!=null){_ref.fn.asEventStream=Bacon.$.asEventStream}Bacon.fromEventTarget=function(target,eventName,eventTransformer){var sub,unsub,_ref1,_ref2,_ref3,_ref4;sub=(_ref1=target.addEventListener)!=null?_ref1:(_ref2=target.addListener)!=null?_ref2:target.bind;unsub=(_ref3=target.removeEventListener)!=null?_ref3:(_ref4=target.removeListener)!=null?_ref4:target.unbind;return withDescription(Bacon,"fromEventTarget",target,eventName,Bacon.fromBinder(function(handler){sub.call(target,eventName,handler);return function(){return unsub.call(target,eventName,handler)}},eventTransformer))};Bacon.fromPromise=function(promise,abort){return withDescription(Bacon,"fromPromise",promise,Bacon.fromBinder(function(handler){promise.then(handler,function(e){return handler(new Error(e))});return function(){if(abort){return typeof promise.abort==="function"?promise.abort():void 0}}},function(value){return[value,end()]}))};Bacon.noMore=["<no-more>"];Bacon.more=["<more>"];Bacon.later=function(delay,value){return withDescription(Bacon,"later",delay,value,Bacon.sequentially(delay,[value]))};Bacon.sequentially=function(delay,values){var index;index=0;return withDescription(Bacon,"sequentially",delay,values,Bacon.fromPoll(delay,function(){var value;value=values[index++];if(index<values.length){return value}else if(index===values.length){return[value,end()]}else{return end()}}))};Bacon.repeatedly=function(delay,values){var index;index=0;return withDescription(Bacon,"repeatedly",delay,values,Bacon.fromPoll(delay,function(){return values[index++%values.length]}))};Bacon.spy=function(spy){return spys.push(spy)};spys=[];registerObs=function(obs){var spy,_i,_len,_results;if(spys.length){if(!registerObs.running){try{registerObs.running=true;_results=[];for(_i=0,_len=spys.length;_i<_len;_i++){spy=spys[_i];_results.push(spy(obs))}return _results}finally{delete registerObs.running}}}};withMethodCallSupport=function(wrapped){return function(){var args,context,f,methodName;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];if(typeof f==="object"&&args.length){context=f;methodName=args[0];f=function(){return context[methodName].apply(context,arguments)};args=args.slice(1)}return wrapped.apply(null,[f].concat(__slice.call(args)))}};liftCallback=function(desc,wrapped){return withMethodCallSupport(function(){var args,f,stream;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];stream=partiallyApplied(wrapped,[function(values,callback){return f.apply(null,__slice.call(values).concat([callback]))}]);return withDescription.apply(null,[Bacon,desc,f].concat(__slice.call(args),[Bacon.combineAsArray(args).flatMap(stream)]))})};Bacon.fromCallback=liftCallback("fromCallback",function(){var args,f;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];return Bacon.fromBinder(function(handler){makeFunction(f,args)(handler);return nop},function(value){return[value,end()]})});Bacon.fromNodeCallback=liftCallback("fromNodeCallback",function(){var args,f;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];return Bacon.fromBinder(function(handler){makeFunction(f,args)(handler);return nop},function(error,value){if(error){return[new Error(error),end()]}return[value,end()]})});Bacon.fromPoll=function(delay,poll){return withDescription(Bacon,"fromPoll",delay,poll,Bacon.fromBinder(function(handler){var id;id=Bacon.scheduler.setInterval(handler,delay);return function(){return Bacon.scheduler.clearInterval(id)}},poll))};Bacon.interval=function(delay,value){if(value==null){value={}}return withDescription(Bacon,"interval",delay,value,Bacon.fromPoll(delay,function(){return next(value)}))};Bacon.constant=function(value){return new Property(describe(Bacon,"constant",value),function(sink){sink(initial(value));sink(end());return nop})};Bacon.never=function(){return withDescription(Bacon,"never",Bacon.fromArray([]))};Bacon.once=function(value){return withDescription(Bacon,"once",value,Bacon.fromArray([value]))};Bacon.fromArray=function(values){assertArray(values);values=cloneArray(values);return new EventStream(describe(Bacon,"fromArray",values),function(sink){var reply,unsubd,value;unsubd=false;reply=Bacon.more;while(reply!==Bacon.noMore&&!unsubd){if(_.empty(values)){sink(end());reply=Bacon.noMore}else{value=values.splice(0,1)[0];reply=sink(toEvent(value))}}return function(){return unsubd=true}})};Bacon.mergeAll=function(){var streams;streams=1<=arguments.length?__slice.call(arguments,0):[];if(isArray(streams[0])){streams=streams[0]}if(streams.length){return new EventStream(describe.apply(null,[Bacon,"mergeAll"].concat(__slice.call(streams))),function(sink){var ends,sinks,smartSink;ends=0;smartSink=function(obs){return function(unsubBoth){return obs.subscribeInternal(function(event){var reply;if(event.isEnd()){ends++;if(ends===streams.length){return sink(end())}else{return Bacon.more}}else{reply=sink(event);if(reply===Bacon.noMore){unsubBoth()}return reply}})}};sinks=_.map(smartSink,streams);return compositeUnsubscribe.apply(null,sinks)})}else{return Bacon.never()}};Bacon.zipAsArray=function(){var streams;streams=1<=arguments.length?__slice.call(arguments,0):[];if(isArray(streams[0])){streams=streams[0]}return withDescription.apply(null,[Bacon,"zipAsArray"].concat(__slice.call(streams),[Bacon.zipWith(streams,function(){var xs;xs=1<=arguments.length?__slice.call(arguments,0):[];return xs})]))};Bacon.zipWith=function(){var f,streams,_ref1;f=arguments[0],streams=2<=arguments.length?__slice.call(arguments,1):[];if(!isFunction(f)){_ref1=[f,streams[0]],streams=_ref1[0],f=_ref1[1]}streams=_.map(function(s){return s.toEventStream()},streams);return withDescription.apply(null,[Bacon,"zipWith",f].concat(__slice.call(streams),[Bacon.when(streams,f)]))};Bacon.groupSimultaneous=function(){var s,sources,streams;streams=1<=arguments.length?__slice.call(arguments,0):[];if(streams.length===1&&isArray(streams[0])){streams=streams[0]}sources=function(){var _i,_len,_results;_results=[];for(_i=0,_len=streams.length;_i<_len;_i++){s=streams[_i];_results.push(new BufferingSource(s))}return _results}();return withDescription.apply(null,[Bacon,"groupSimultaneous"].concat(__slice.call(streams),[Bacon.when(sources,function(){var xs;xs=1<=arguments.length?__slice.call(arguments,0):[];return xs})]))};Bacon.combineAsArray=function(){var index,s,sources,stream,streams,_i,_len;streams=1<=arguments.length?__slice.call(arguments,0):[];if(streams.length===1&&isArray(streams[0])){streams=streams[0]}for(index=_i=0,_len=streams.length;_i<_len;index=++_i){stream=streams[index];if(!isObservable(stream)){streams[index]=Bacon.constant(stream)}}if(streams.length){sources=function(){var _j,_len1,_results;_results=[];for(_j=0,_len1=streams.length;_j<_len1;_j++){s=streams[_j];_results.push(new Source(s,true,s.subscribeInternal))}return _results}();return withDescription.apply(null,[Bacon,"combineAsArray"].concat(__slice.call(streams),[Bacon.when(sources,function(){var xs;xs=1<=arguments.length?__slice.call(arguments,0):[];return xs}).toProperty()]))}else{return Bacon.constant([])}};Bacon.onValues=function(){var f,streams,_i;streams=2<=arguments.length?__slice.call(arguments,0,_i=arguments.length-1):(_i=0,[]),f=arguments[_i++];return Bacon.combineAsArray(streams).onValues(f)};Bacon.combineWith=function(){var f,streams;f=arguments[0],streams=2<=arguments.length?__slice.call(arguments,1):[];return withDescription.apply(null,[Bacon,"combineWith",f].concat(__slice.call(streams),[Bacon.combineAsArray(streams).map(function(values){return f.apply(null,values)})]))};Bacon.combineTemplate=function(template){var applyStreamValue,combinator,compile,compileTemplate,constantValue,current,funcs,mkContext,setValue,streams;funcs=[];streams=[];current=function(ctxStack){return ctxStack[ctxStack.length-1]};setValue=function(ctxStack,key,value){return current(ctxStack)[key]=value};applyStreamValue=function(key,index){return function(ctxStack,values){return setValue(ctxStack,key,values[index])}};constantValue=function(key,value){return function(ctxStack){return setValue(ctxStack,key,value)}};mkContext=function(template){if(isArray(template)){return[]}else{return{}}};compile=function(key,value){var popContext,pushContext;if(isObservable(value)){streams.push(value);return funcs.push(applyStreamValue(key,streams.length-1))}else if(value===Object(value)&&typeof value!=="function"&&!(value instanceof RegExp)&&!(value instanceof Date)){pushContext=function(key){return function(ctxStack){var newContext;newContext=mkContext(value);setValue(ctxStack,key,newContext);return ctxStack.push(newContext)}};popContext=function(ctxStack){return ctxStack.pop()};funcs.push(pushContext(key));compileTemplate(value);return funcs.push(popContext)}else{return funcs.push(constantValue(key,value))}};compileTemplate=function(template){return _.each(template,compile)};compileTemplate(template);combinator=function(values){var ctxStack,f,rootContext,_i,_len;rootContext=mkContext(template);ctxStack=[rootContext];for(_i=0,_len=funcs.length;_i<_len;_i++){f=funcs[_i];f(ctxStack,values)}return rootContext};return withDescription(Bacon,"combineTemplate",template,Bacon.combineAsArray(streams).map(combinator))};Bacon.retry=function(options){var delay,isRetryable,maxRetries,retries,retry,source;if(!isFunction(options.source)){throw"'source' option has to be a function"}source=options.source;retries=options.retries||0;maxRetries=options.maxRetries||retries;delay=options.delay||function(){return 0};isRetryable=options.isRetryable||function(){return true};retry=function(context){var delayedRetry,nextAttemptOptions;nextAttemptOptions={source:source,retries:retries-1,maxRetries:maxRetries,delay:delay,isRetryable:isRetryable};delayedRetry=function(){return Bacon.retry(nextAttemptOptions)};return Bacon.later(delay(context)).filter(false).concat(Bacon.once().flatMap(delayedRetry))};return withDescription(Bacon,"retry",options,source().flatMapError(function(e){if(isRetryable(e)&&retries>0){return retry({error:e,retriesDone:maxRetries-retries})}else{return Bacon.once(new Bacon.Error(e))}}))};eventIdCounter=0;Event=function(){function Event(){this.id=++eventIdCounter}Event.prototype.isEvent=function(){return true};Event.prototype.isEnd=function(){return false};Event.prototype.isInitial=function(){return false};Event.prototype.isNext=function(){return false};Event.prototype.isError=function(){return false};Event.prototype.hasValue=function(){return false};Event.prototype.filter=function(){return true};Event.prototype.inspect=function(){return this.toString()};Event.prototype.log=function(){return this.toString()};return Event}();Next=function(_super){__extends(Next,_super);function Next(valueF){Next.__super__.constructor.call(this);if(isFunction(valueF)){this.value=_.cached(valueF)}else{this.value=_.always(valueF)}}Next.prototype.isNext=function(){return true};Next.prototype.hasValue=function(){return true};Next.prototype.fmap=function(f){var value;value=this.value;return this.apply(function(){return f(value())})};Next.prototype.apply=function(value){return new Next(value)};Next.prototype.filter=function(f){return f(this.value())};Next.prototype.toString=function(){return _.toString(this.value())};Next.prototype.log=function(){return this.value()};return Next}(Event);Initial=function(_super){__extends(Initial,_super);function Initial(){return Initial.__super__.constructor.apply(this,arguments)}Initial.prototype.isInitial=function(){return true};Initial.prototype.isNext=function(){return false};Initial.prototype.apply=function(value){return new Initial(value)};Initial.prototype.toNext=function(){return new Next(this.value)};return Initial}(Next);End=function(_super){__extends(End,_super);function End(){return End.__super__.constructor.apply(this,arguments)}End.prototype.isEnd=function(){return true};End.prototype.fmap=function(){return this};End.prototype.apply=function(){return this};End.prototype.toString=function(){return"<end>"};return End}(Event);Error=function(_super){__extends(Error,_super);function Error(error){this.error=error}Error.prototype.isError=function(){return true};Error.prototype.fmap=function(){return this};Error.prototype.apply=function(){return this};Error.prototype.toString=function(){return"<error> "+_.toString(this.error)};return Error}(Event);idCounter=0;Observable=function(){function Observable(desc){this.flatMapError=__bind(this.flatMapError,this);this.id=++idCounter;withDescription(desc,this)}Observable.prototype.onValue=function(){var f;f=makeFunctionArgs(arguments);return this.subscribe(function(event){if(event.hasValue()){return f(event.value())}})};Observable.prototype.onValues=function(f){return this.onValue(function(args){return f.apply(null,args)})};Observable.prototype.onError=function(){var f;f=makeFunctionArgs(arguments);return this.subscribe(function(event){if(event.isError()){return f(event.error)}})};Observable.prototype.onEnd=function(){var f;f=makeFunctionArgs(arguments);return this.subscribe(function(event){if(event.isEnd()){return f()}})};Observable.prototype.errors=function(){return withDescription(this,"errors",this.filter(function(){return false}))};Observable.prototype.filter=function(){var args,f;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];return convertArgsToFunction(this,f,args,function(f){return withDescription(this,"filter",f,this.withHandler(function(event){if(event.filter(f)){return this.push(event)}else{return Bacon.more}}))})};Observable.prototype.takeWhile=function(){var args,f;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];return convertArgsToFunction(this,f,args,function(f){return withDescription(this,"takeWhile",f,this.withHandler(function(event){if(event.filter(f)){return this.push(event)}else{this.push(end());return Bacon.noMore}}))})};Observable.prototype.endOnError=function(){var args,f;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];if(f==null){f=true}return convertArgsToFunction(this,f,args,function(f){return withDescription(this,"endOnError",this.withHandler(function(event){if(event.isError()&&f(event.error)){this.push(event);return this.push(end())}else{return this.push(event)}}))})};Observable.prototype.take=function(count){if(count<=0){return Bacon.never()}return withDescription(this,"take",count,this.withHandler(function(event){if(!event.hasValue()){return this.push(event)}else{count--;if(count>0){return this.push(event)}else{if(count===0){this.push(event)}this.push(end());return Bacon.noMore}}}))};Observable.prototype.map=function(){var args,p;p=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];if(p instanceof Property){return p.sampledBy(this,former)}else{return convertArgsToFunction(this,p,args,function(f){return withDescription(this,"map",f,this.withHandler(function(event){return this.push(event.fmap(f))}))})}};Observable.prototype.mapError=function(){var f;f=makeFunctionArgs(arguments);return withDescription(this,"mapError",f,this.withHandler(function(event){if(event.isError()){return this.push(next(f(event.error)))}else{return this.push(event)}}))};Observable.prototype.mapEnd=function(){var f;f=makeFunctionArgs(arguments);return withDescription(this,"mapEnd",f,this.withHandler(function(event){if(event.isEnd()){this.push(next(f(event)));this.push(end());return Bacon.noMore}else{return this.push(event)}}))};Observable.prototype.doAction=function(){var f;f=makeFunctionArgs(arguments);return withDescription(this,"doAction",f,this.withHandler(function(event){if(event.hasValue()){f(event.value())}return this.push(event)}))};Observable.prototype.skip=function(count){return withDescription(this,"skip",count,this.withHandler(function(event){if(!event.hasValue()){return this.push(event)}else if(count>0){count--;return Bacon.more}else{return this.push(event)}}))};Observable.prototype.skipDuplicates=function(isEqual){if(isEqual==null){isEqual=function(a,b){return a===b}}return withDescription(this,"skipDuplicates",this.withStateMachine(None,function(prev,event){if(!event.hasValue()){return[prev,[event]]}else if(event.isInitial()||prev===None||!isEqual(prev.get(),event.value())){return[new Some(event.value()),[event]]}else{return[prev,[]]}}))};Observable.prototype.skipErrors=function(){return withDescription(this,"skipErrors",this.withHandler(function(event){if(event.isError()){return Bacon.more}else{return this.push(event)}}))};Observable.prototype.withStateMachine=function(initState,f){var state;state=initState;return withDescription(this,"withStateMachine",initState,f,this.withHandler(function(event){var fromF,newState,output,outputs,reply,_i,_len;fromF=f(state,event);newState=fromF[0],outputs=fromF[1];state=newState;reply=Bacon.more;for(_i=0,_len=outputs.length;_i<_len;_i++){output=outputs[_i];reply=this.push(output);if(reply===Bacon.noMore){return reply}}return reply}))};Observable.prototype.scan=function(seed,f,options){var acc,f_,resultProperty,subscribe;if(options==null){options={}}f_=toCombinator(f);f=options.lazyF?f_:function(x,y){return f_(x(),y())};acc=toOption(seed).map(function(x){return _.always(x)});subscribe=function(_this){return function(sink){var initSent,reply,sendInit,unsub;initSent=false;unsub=nop;reply=Bacon.more;sendInit=function(){if(!initSent){return acc.forEach(function(valueF){initSent=true;reply=sink(new Initial(valueF));if(reply===Bacon.noMore){unsub();return unsub=nop}})}};unsub=_this.subscribeInternal(function(event){var next,prev;if(event.hasValue()){if(initSent&&event.isInitial()){return Bacon.more}else{if(!event.isInitial()){sendInit()}initSent=true;prev=acc.getOrElse(function(){return void 0});next=_.cached(function(){return f(prev,event.value)});acc=new Some(next);if(options.eager){next()}return sink(event.apply(next))}}else{if(event.isEnd()){reply=sendInit()}if(reply!==Bacon.noMore){return sink(event)}}});UpdateBarrier.whenDoneWith(resultProperty,sendInit);return unsub}}(this);return resultProperty=new Property(describe(this,"scan",seed,f),subscribe)};Observable.prototype.fold=function(seed,f,options){return withDescription(this,"fold",seed,f,this.scan(seed,f,options).sampledBy(this.filter(false).mapEnd().toProperty()))};Observable.prototype.zip=function(other,f){if(f==null){f=Array}return withDescription(this,"zip",other,Bacon.zipWith([this,other],f))};Observable.prototype.diff=function(start,f){f=toCombinator(f);return withDescription(this,"diff",start,f,this.scan([start],function(prevTuple,next){return[next,f(prevTuple[0],next)]}).filter(function(tuple){return tuple.length===2}).map(function(tuple){return tuple[1]}))};Observable.prototype.flatMap=function(){return flatMap_(this,makeSpawner(arguments))};Observable.prototype.flatMapFirst=function(){return flatMap_(this,makeSpawner(arguments),true)};Observable.prototype.flatMapWithConcurrencyLimit=function(){var args,limit;limit=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];return withDescription.apply(null,[this,"flatMapWithConcurrencyLimit",limit].concat(__slice.call(args),[flatMap_(this,makeSpawner(args),false,limit)]))};Observable.prototype.flatMapLatest=function(){var f,stream;f=makeSpawner(arguments);stream=this.toEventStream();return withDescription(this,"flatMapLatest",f,stream.flatMap(function(value){return makeObservable(f(value)).takeUntil(stream)}))};Observable.prototype.flatMapError=function(fn){return withDescription(this,"flatMapError",fn,this.mapError(function(err){return new Bacon.Error(err)}).flatMap(function(x){if(x instanceof Bacon.Error){return fn(x.error)}else{return Bacon.once(x)}}))};Observable.prototype.flatMapConcat=function(){return withDescription.apply(null,[this,"flatMapConcat"].concat(__slice.call(arguments),[this.flatMapWithConcurrencyLimit.apply(this,[1].concat(__slice.call(arguments)))]))};Observable.prototype.bufferingThrottle=function(minimumInterval){return withDescription(this,"bufferingThrottle",minimumInterval,this.flatMapConcat(function(x){return Bacon.once(x).concat(Bacon.later(minimumInterval).filter(false))}))};Observable.prototype.not=function(){return withDescription(this,"not",this.map(function(x){return!x}))};Observable.prototype.log=function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];this.subscribe(function(event){return typeof console!=="undefined"&&console!==null?typeof console.log==="function"?console.log.apply(console,__slice.call(args).concat([event.log()])):void 0:void 0});return this};Observable.prototype.slidingWindow=function(n,minValues){if(minValues==null){minValues=0}return withDescription(this,"slidingWindow",n,minValues,this.scan([],function(window,value){return window.concat([value]).slice(-n)}).filter(function(values){return values.length>=minValues}))};Observable.prototype.combine=function(other,f){var combinator;combinator=toCombinator(f);return withDescription(this,"combine",other,f,Bacon.combineAsArray(this,other).map(function(values){return combinator(values[0],values[1])}))};Observable.prototype.decode=function(cases){return withDescription(this,"decode",cases,this.combine(Bacon.combineTemplate(cases),function(key,values){return values[key]}))};Observable.prototype.awaiting=function(other){return withDescription(this,"awaiting",other,Bacon.groupSimultaneous(this,other).map(function(_arg){var myValues,otherValues;myValues=_arg[0],otherValues=_arg[1];return otherValues.length===0}).toProperty(false).skipDuplicates())};Observable.prototype.name=function(name){this.toString=function(){return name};return this};Observable.prototype.withDescription=function(){return describe.apply(null,arguments).apply(this)};return Observable}();Observable.prototype.reduce=Observable.prototype.fold;Observable.prototype.assign=Observable.prototype.onValue;flatMap_=function(root,f,firstOnly,limit){var deps,result;deps=[root];result=new EventStream(describe(root,"flatMap"+(firstOnly?"First":""),f),function(sink){var checkEnd,checkQueue,composite,queue,spawn;composite=new CompositeUnsubscribe;queue=[];spawn=function(event){var child;child=makeObservable(f(event.value()));deps.push(child);DepCache.invalidate();return composite.add(function(unsubAll,unsubMe){return child.subscribeInternal(function(event){var reply;if(event.isEnd()){_.remove(child,deps);DepCache.invalidate();checkQueue();checkEnd(unsubMe);return Bacon.noMore}else{if(event instanceof Initial){event=event.toNext()}reply=sink(event);if(reply===Bacon.noMore){unsubAll()}return reply}})})};checkQueue=function(){var event;event=queue.splice(0,1)[0];if(event){return spawn(event)}};checkEnd=function(unsub){unsub();if(composite.empty()){return sink(end())}};composite.add(function(__,unsubRoot){return root.subscribeInternal(function(event){if(event.isEnd()){return checkEnd(unsubRoot)}else if(event.isError()){return sink(event)}else if(firstOnly&&composite.count()>1){return Bacon.more}else{if(composite.unsubscribed){return Bacon.noMore}if(limit&&composite.count()>limit){return queue.push(event)}else{return spawn(event)}}})});return composite.unsubscribe});result.internalDeps=function(){return deps};return result};EventStream=function(_super){__extends(EventStream,_super);function EventStream(desc,subscribe){var dispatcher;if(isFunction(desc)){subscribe=desc;desc=[]}EventStream.__super__.constructor.call(this,desc);assertFunction(subscribe);dispatcher=new Dispatcher(subscribe);this.subscribeInternal=dispatcher.subscribe;this.subscribe=UpdateBarrier.wrappedSubscribe(this);this.hasSubscribers=dispatcher.hasSubscribers;registerObs(this)}EventStream.prototype.delay=function(delay){return withDescription(this,"delay",delay,this.flatMap(function(value){return Bacon.later(delay,value)}))};EventStream.prototype.debounce=function(delay){return withDescription(this,"debounce",delay,this.flatMapLatest(function(value){return Bacon.later(delay,value)}))};EventStream.prototype.debounceImmediate=function(delay){return withDescription(this,"debounceImmediate",delay,this.flatMapFirst(function(value){return Bacon.once(value).concat(Bacon.later(delay).filter(false))}))};EventStream.prototype.throttle=function(delay){return withDescription(this,"throttle",delay,this.bufferWithTime(delay).map(function(values){return values[values.length-1]}))};EventStream.prototype.bufferWithTime=function(delay){return withDescription(this,"bufferWithTime",delay,this.bufferWithTimeOrCount(delay,Number.MAX_VALUE))};EventStream.prototype.bufferWithCount=function(count){return withDescription(this,"bufferWithCount",count,this.bufferWithTimeOrCount(void 0,count))};EventStream.prototype.bufferWithTimeOrCount=function(delay,count){var flushOrSchedule;flushOrSchedule=function(buffer){if(buffer.values.length===count){return buffer.flush()}else if(delay!==void 0){return buffer.schedule()}};return withDescription(this,"bufferWithTimeOrCount",delay,count,this.buffer(delay,flushOrSchedule,flushOrSchedule))};EventStream.prototype.buffer=function(delay,onInput,onFlush){var buffer,delayMs,reply;if(onInput==null){onInput=function(){}}if(onFlush==null){onFlush=function(){}}buffer={scheduled:false,end:null,values:[],flush:function(){var reply;this.scheduled=false;if(this.values.length>0){reply=this.push(next(this.values));this.values=[];if(this.end!=null){return this.push(this.end)}else if(reply!==Bacon.noMore){return onFlush(this)}}else{if(this.end!=null){return this.push(this.end)}}},schedule:function(){if(!this.scheduled){this.scheduled=true;return delay(function(_this){return function(){return _this.flush()
}}(this))}}};reply=Bacon.more;if(!isFunction(delay)){delayMs=delay;delay=function(f){return Bacon.scheduler.setTimeout(f,delayMs)}}return withDescription(this,"buffer",this.withHandler(function(event){buffer.push=this.push;if(event.isError()){reply=this.push(event)}else if(event.isEnd()){buffer.end=event;if(!buffer.scheduled){buffer.flush()}}else{buffer.values.push(event.value());onInput(buffer)}return reply}))};EventStream.prototype.merge=function(right){var left;assertEventStream(right);left=this;return withDescription(left,"merge",right,Bacon.mergeAll(this,right))};EventStream.prototype.toProperty=function(initValue){if(arguments.length===0){initValue=None}return withDescription(this,"toProperty",initValue,this.scan(initValue,latterF,{lazyF:true}))};EventStream.prototype.toEventStream=function(){return this};EventStream.prototype.sampledBy=function(sampler,combinator){return withDescription(this,"sampledBy",sampler,combinator,this.toProperty().sampledBy(sampler,combinator))};EventStream.prototype.concat=function(right){var left;left=this;return new EventStream(describe(left,"concat",right),function(sink){var unsubLeft,unsubRight;unsubRight=nop;unsubLeft=left.subscribeInternal(function(e){if(e.isEnd()){return unsubRight=right.subscribeInternal(sink)}else{return sink(e)}});return function(){unsubLeft();return unsubRight()}})};EventStream.prototype.takeUntil=function(stopper){var endMarker;endMarker={};return withDescription(this,"takeUntil",stopper,Bacon.groupSimultaneous(this.mapEnd(endMarker),stopper.skipErrors()).withHandler(function(event){var data,reply,value,_i,_len,_ref1;if(!event.hasValue()){return this.push(event)}else{_ref1=event.value(),data=_ref1[0],stopper=_ref1[1];if(stopper.length){return this.push(end())}else{reply=Bacon.more;for(_i=0,_len=data.length;_i<_len;_i++){value=data[_i];if(value===endMarker){reply=this.push(end())}else{reply=this.push(next(value))}}return reply}}}))};EventStream.prototype.skipUntil=function(starter){var started;started=starter.take(1).map(true).toProperty(false);return withDescription(this,"skipUntil",starter,this.filter(started))};EventStream.prototype.skipWhile=function(){var args,f,ok;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];ok=false;return convertArgsToFunction(this,f,args,function(f){return withDescription(this,"skipWhile",f,this.withHandler(function(event){if(ok||!event.hasValue()||!f(event.value())){if(event.hasValue()){ok=true}return this.push(event)}else{return Bacon.more}}))})};EventStream.prototype.holdWhen=function(valve){var putToHold,releaseHold,valve_;valve_=valve.startWith(false);releaseHold=valve_.filter(function(x){return!x});putToHold=valve_.filter(_.id);return withDescription(this,"holdWhen",valve,this.filter(false).merge(valve_.flatMapConcat(function(_this){return function(shouldHold){if(!shouldHold){return _this.takeUntil(putToHold)}else{return _this.scan([],function(xs,x){return xs.concat(x)},{eager:true}).sampledBy(releaseHold).take(1).flatMap(Bacon.fromArray)}}}(this))))};EventStream.prototype.startWith=function(seed){return withDescription(this,"startWith",seed,Bacon.once(seed).concat(this))};EventStream.prototype.withHandler=function(handler){var dispatcher;dispatcher=new Dispatcher(this.subscribeInternal,handler);return new EventStream(describe(this,"withHandler",handler),dispatcher.subscribe)};return EventStream}(Observable);Property=function(_super){__extends(Property,_super);function Property(desc,subscribe,handler){if(isFunction(desc)){handler=subscribe;subscribe=desc;desc=[]}Property.__super__.constructor.call(this,desc);assertFunction(subscribe);if(handler===true){this.subscribeInternal=subscribe}else{this.subscribeInternal=new PropertyDispatcher(this,subscribe,handler).subscribe}this.subscribe=UpdateBarrier.wrappedSubscribe(this);registerObs(this)}Property.prototype.sampledBy=function(sampler,combinator){var lazy,result,samplerSource,stream,thisSource;if(combinator!=null){combinator=toCombinator(combinator)}else{lazy=true;combinator=function(f){return f()}}thisSource=new Source(this,false,this.subscribeInternal,lazy);samplerSource=new Source(sampler,true,sampler.subscribeInternal,lazy);stream=Bacon.when([thisSource,samplerSource],combinator);result=sampler instanceof Property?stream.toProperty():stream;return withDescription(this,"sampledBy",sampler,combinator,result)};Property.prototype.sample=function(interval){return withDescription(this,"sample",interval,this.sampledBy(Bacon.interval(interval,{})))};Property.prototype.changes=function(){return new EventStream(describe(this,"changes"),function(_this){return function(sink){return _this.subscribeInternal(function(event){if(!event.isInitial()){return sink(event)}})}}(this))};Property.prototype.withHandler=function(handler){return new Property(describe(this,"withHandler",handler),this.subscribeInternal,handler)};Property.prototype.toProperty=function(){assertNoArguments(arguments);return this};Property.prototype.toEventStream=function(){return new EventStream(describe(this,"toEventStream"),function(_this){return function(sink){return _this.subscribeInternal(function(event){if(event.isInitial()){event=event.toNext()}return sink(event)})}}(this))};Property.prototype.and=function(other){return withDescription(this,"and",other,this.combine(other,function(x,y){return x&&y}))};Property.prototype.or=function(other){return withDescription(this,"or",other,this.combine(other,function(x,y){return x||y}))};Property.prototype.delay=function(delay){return this.delayChanges("delay",delay,function(changes){return changes.delay(delay)})};Property.prototype.debounce=function(delay){return this.delayChanges("debounce",delay,function(changes){return changes.debounce(delay)})};Property.prototype.throttle=function(delay){return this.delayChanges("throttle",delay,function(changes){return changes.throttle(delay)})};Property.prototype.delayChanges=function(){var desc,f,_i;desc=2<=arguments.length?__slice.call(arguments,0,_i=arguments.length-1):(_i=0,[]),f=arguments[_i++];return withDescription.apply(null,[this].concat(__slice.call(desc),[addPropertyInitValueToStream(this,f(this.changes()))]))};Property.prototype.takeUntil=function(stopper){var changes;changes=this.changes().takeUntil(stopper);return withDescription(this,"takeUntil",stopper,addPropertyInitValueToStream(this,changes))};Property.prototype.startWith=function(value){return withDescription(this,"startWith",value,this.scan(value,function(prev,next){return next}))};Property.prototype.bufferingThrottle=function(){var _ref1;return(_ref1=Property.__super__.bufferingThrottle.apply(this,arguments)).bufferingThrottle.apply(_ref1,arguments).toProperty()};return Property}(Observable);convertArgsToFunction=function(obs,f,args,method){var sampled;if(f instanceof Property){sampled=f.sampledBy(obs,function(p,s){return[p,s]});return method.apply(sampled,[function(_arg){var p,s;p=_arg[0],s=_arg[1];return p}]).map(function(_arg){var p,s;p=_arg[0],s=_arg[1];return s})}else{f=makeFunction(f,args);return method.apply(obs,[f])}};addPropertyInitValueToStream=function(property,stream){var justInitValue;justInitValue=new EventStream(describe(property,"justInitValue"),function(sink){var unsub,value;value=null;unsub=property.subscribeInternal(function(event){if(event.hasValue()){value=event}return Bacon.noMore});UpdateBarrier.whenDoneWith(justInitValue,function(){if(value!=null){sink(value)}return sink(end())});return unsub});return justInitValue.concat(stream).toProperty()};Dispatcher=function(){function Dispatcher(subscribe,handleEvent){var done,ended,prevError,pushIt,pushing,queue,removeSub,subscriptions,unsubscribeFromSource,waiters;if(subscribe==null){subscribe=function(){return nop}}subscriptions=[];queue=[];pushing=false;ended=false;this.hasSubscribers=function(){return subscriptions.length>0};prevError=null;unsubscribeFromSource=nop;removeSub=function(subscription){return subscriptions=_.without(subscription,subscriptions)};waiters=null;done=function(){var w,ws,_i,_len,_results;if(waiters!=null){ws=waiters;waiters=null;_results=[];for(_i=0,_len=ws.length;_i<_len;_i++){w=ws[_i];_results.push(w())}return _results}};pushIt=function(event){var reply,sub,success,tmp,_i,_len;if(!pushing){if(event===prevError){return}if(event.isError()){prevError=event}success=false;try{pushing=true;tmp=subscriptions;for(_i=0,_len=tmp.length;_i<_len;_i++){sub=tmp[_i];reply=sub.sink(event);if(reply===Bacon.noMore||event.isEnd()){removeSub(sub)}}success=true}finally{pushing=false;if(!success){queue=[]}}success=true;while(queue.length){event=queue.shift();this.push(event)}done(event);if(this.hasSubscribers()){return Bacon.more}else{unsubscribeFromSource();return Bacon.noMore}}else{queue.push(event);return Bacon.more}};this.push=function(_this){return function(event){return UpdateBarrier.inTransaction(event,_this,pushIt,[event])}}(this);if(handleEvent==null){handleEvent=function(event){return this.push(event)}}this.handleEvent=function(_this){return function(event){if(event.isEnd()){ended=true}return handleEvent.apply(_this,[event])}}(this);this.subscribe=function(_this){return function(sink){var subscription,unsubSrc;if(ended){sink(end());return nop}else{assertFunction(sink);subscription={sink:sink};subscriptions.push(subscription);if(subscriptions.length===1){unsubSrc=subscribe(_this.handleEvent);unsubscribeFromSource=function(){unsubSrc();return unsubscribeFromSource=nop}}assertFunction(unsubscribeFromSource);return function(){removeSub(subscription);if(!_this.hasSubscribers()){return unsubscribeFromSource()}}}}}(this)}return Dispatcher}();PropertyDispatcher=function(_super){__extends(PropertyDispatcher,_super);function PropertyDispatcher(p,subscribe,handleEvent){var current,currentValueRootId,ended,push;PropertyDispatcher.__super__.constructor.call(this,subscribe,handleEvent);current=None;currentValueRootId=void 0;push=this.push;subscribe=this.subscribe;ended=false;this.push=function(_this){return function(event){if(event.isEnd()){ended=true}if(event.hasValue()){current=new Some(event);currentValueRootId=UpdateBarrier.currentEventId()}return push.apply(_this,[event])}}(this);this.subscribe=function(_this){return function(sink){var dispatchingId,initSent,maybeSubSource,reply,valId;initSent=false;reply=Bacon.more;maybeSubSource=function(){if(reply===Bacon.noMore){return nop}else if(ended){sink(end());return nop}else{return subscribe.apply(this,[sink])}};if(current.isDefined&&(_this.hasSubscribers()||ended)){dispatchingId=UpdateBarrier.currentEventId();valId=currentValueRootId;if(!ended&&valId&&dispatchingId&&dispatchingId!==valId){UpdateBarrier.whenDoneWith(p,function(){if(currentValueRootId===valId){return sink(initial(current.get().value()))}});return maybeSubSource()}else{UpdateBarrier.inTransaction(void 0,_this,function(){return reply=sink(initial(current.get().value()))},[]);return maybeSubSource()}}else{return maybeSubSource()}}}(this)}return PropertyDispatcher}(Dispatcher);Bus=function(_super){__extends(Bus,_super);function Bus(){var ended,guardedSink,sink,subscribeAll,subscribeInput,subscriptions,unsubAll,unsubscribeInput;sink=void 0;subscriptions=[];ended=false;guardedSink=function(_this){return function(input){return function(event){if(event.isEnd()){unsubscribeInput(input);return Bacon.noMore}else{return sink(event)}}}}(this);unsubAll=function(){var sub,_i,_len,_results;_results=[];for(_i=0,_len=subscriptions.length;_i<_len;_i++){sub=subscriptions[_i];_results.push(typeof sub.unsub==="function"?sub.unsub():void 0)}return _results};subscribeInput=function(subscription){return subscription.unsub=subscription.input.subscribeInternal(guardedSink(subscription.input))};unsubscribeInput=function(input){var i,sub,_i,_len;for(i=_i=0,_len=subscriptions.length;_i<_len;i=++_i){sub=subscriptions[i];if(sub.input===input){if(typeof sub.unsub==="function"){sub.unsub()}subscriptions.splice(i,1);return}}};subscribeAll=function(_this){return function(newSink){var subscription,_i,_len,_ref1;sink=newSink;_ref1=cloneArray(subscriptions);for(_i=0,_len=_ref1.length;_i<_len;_i++){subscription=_ref1[_i];subscribeInput(subscription)}return unsubAll}}(this);Bus.__super__.constructor.call(this,describe(Bacon,"Bus"),subscribeAll);this.plug=function(_this){return function(input){var sub;if(ended){return}sub={input:input};subscriptions.push(sub);if(sink!=null){subscribeInput(sub)}return function(){return unsubscribeInput(input)}}}(this);this.push=function(_this){return function(value){return typeof sink==="function"?sink(next(value)):void 0}}(this);this.error=function(_this){return function(error){return typeof sink==="function"?sink(new Error(error)):void 0}}(this);this.end=function(_this){return function(){ended=true;unsubAll();return typeof sink==="function"?sink(end()):void 0}}(this)}return Bus}(EventStream);Source=function(){function Source(obs,sync,subscribe,lazy){this.obs=obs;this.sync=sync;this.subscribe=subscribe;this.lazy=lazy!=null?lazy:false;this.queue=[];if(this.subscribe==null){this.subscribe=this.obs.subscribeInternal}this.toString=this.obs.toString}Source.prototype.markEnded=function(){return this.ended=true};Source.prototype.consume=function(){if(this.lazy){return _.always(this.queue[0])}else{return this.queue[0]}};Source.prototype.push=function(x){return this.queue=[x]};Source.prototype.mayHave=function(){return true};Source.prototype.hasAtLeast=function(){return this.queue.length};Source.prototype.flatten=true;return Source}();ConsumingSource=function(_super){__extends(ConsumingSource,_super);function ConsumingSource(){return ConsumingSource.__super__.constructor.apply(this,arguments)}ConsumingSource.prototype.consume=function(){return this.queue.shift()};ConsumingSource.prototype.push=function(x){return this.queue.push(x)};ConsumingSource.prototype.mayHave=function(c){return!this.ended||this.queue.length>=c};ConsumingSource.prototype.hasAtLeast=function(c){return this.queue.length>=c};ConsumingSource.prototype.flatten=false;return ConsumingSource}(Source);BufferingSource=function(_super){__extends(BufferingSource,_super);function BufferingSource(obs){this.obs=obs;BufferingSource.__super__.constructor.call(this,this.obs,true,this.obs.subscribeInternal)}BufferingSource.prototype.consume=function(){var values;values=this.queue;this.queue=[];return function(){return values}};BufferingSource.prototype.push=function(x){return this.queue.push(x())};BufferingSource.prototype.hasAtLeast=function(){return true};return BufferingSource}(Source);Source.isTrigger=function(s){if(s instanceof Source){return s.sync}else{return s instanceof EventStream}};Source.fromObservable=function(s){if(s instanceof Source){return s}else if(s instanceof Property){return new Source(s,false)}else{return new ConsumingSource(s,true)}};describe=function(){var args,context,method;context=arguments[0],method=arguments[1],args=3<=arguments.length?__slice.call(arguments,2):[];if((context||method)instanceof Desc){return context||method}else{return new Desc(context,method,args)}};findDeps=function(x){if(isArray(x)){return _.flatMap(findDeps,x)}else if(isObservable(x)){return[x]}else if(x instanceof Source){return[x.obs]}else{return[]}};Desc=function(){function Desc(context,method,args){this.context=context;this.method=method;this.args=args}Desc.prototype.apply=function(obs){var deps,that;that=this;deps=_.cached(function(){return findDeps([that.context].concat(that.args))});obs.internalDeps=obs.internalDeps||deps;obs.dependsOn=DepCache.dependsOn;obs.deps=deps;obs.toString=function(){return _.toString(that.context)+"."+_.toString(that.method)+"("+_.map(_.toString,that.args)+")"};obs.inspect=function(){return obs.toString()};obs.desc=function(){return{context:that.context,method:that.method,args:that.args}};return obs};return Desc}();withDescription=function(){var desc,obs,_i;desc=2<=arguments.length?__slice.call(arguments,0,_i=arguments.length-1):(_i=0,[]),obs=arguments[_i++];return describe.apply(null,desc).apply(obs)};Bacon.when=function(){var f,i,index,ix,len,needsBarrier,pat,patSources,pats,patterns,resultStream,s,sources,triggerFound,usage,_i,_j,_len,_len1,_ref1;patterns=1<=arguments.length?__slice.call(arguments,0):[];if(patterns.length===0){return Bacon.never()}len=patterns.length;usage="when: expecting arguments in the form (Observable+,function)+";assert(usage,len%2===0);sources=[];pats=[];i=0;while(i<len){patSources=_.toArray(patterns[i]);f=patterns[i+1];pat={f:isFunction(f)?f:function(){return f},ixs:[]};triggerFound=false;for(_i=0,_len=patSources.length;_i<_len;_i++){s=patSources[_i];index=_.indexOf(sources,s);if(!triggerFound){triggerFound=Source.isTrigger(s)}if(index<0){sources.push(s);index=sources.length-1}_ref1=pat.ixs;for(_j=0,_len1=_ref1.length;_j<_len1;_j++){ix=_ref1[_j];if(ix.index===index){ix.count++}}pat.ixs.push({index:index,count:1})}assert("At least one EventStream required",triggerFound||!patSources.length);if(patSources.length>0){pats.push(pat)}i=i+2}if(!sources.length){return Bacon.never()}sources=_.map(Source.fromObservable,sources);needsBarrier=_.any(sources,function(s){return s.flatten})&&containsDuplicateDeps(_.map(function(s){return s.obs},sources));return resultStream=new EventStream(describe.apply(null,[Bacon,"when"].concat(__slice.call(patterns))),function(sink){var cannotMatch,cannotSync,ends,match,nonFlattened,part,triggers;triggers=[];ends=false;match=function(p){var _k,_len2,_ref2;_ref2=p.ixs;for(_k=0,_len2=_ref2.length;_k<_len2;_k++){i=_ref2[_k];if(!sources[i.index].hasAtLeast(i.count)){return false}}return true};cannotSync=function(source){return!source.sync||source.ended};cannotMatch=function(p){var _k,_len2,_ref2;_ref2=p.ixs;for(_k=0,_len2=_ref2.length;_k<_len2;_k++){i=_ref2[_k];if(!sources[i.index].mayHave(i.count)){return true}}};nonFlattened=function(trigger){return!trigger.source.flatten};part=function(source){return function(unsubAll){var flush,flushLater,flushWhileTriggers;flushLater=function(){return UpdateBarrier.whenDoneWith(resultStream,flush)};flushWhileTriggers=function(){var functions,p,reply,trigger,_k,_len2;if(triggers.length>0){reply=Bacon.more;trigger=triggers.pop();for(_k=0,_len2=pats.length;_k<_len2;_k++){p=pats[_k];if(match(p)){functions=function(){var _l,_len3,_ref2,_results;_ref2=p.ixs;_results=[];for(_l=0,_len3=_ref2.length;_l<_len3;_l++){i=_ref2[_l];_results.push(sources[i.index].consume())}return _results}();reply=sink(trigger.e.apply(function(){var fun,values;values=function(){var _l,_len3,_results;_results=[];for(_l=0,_len3=functions.length;_l<_len3;_l++){fun=functions[_l];_results.push(fun())}return _results}();return p.f.apply(p,values)}));if(triggers.length&&needsBarrier){triggers=_.filter(nonFlattened,triggers)}if(reply===Bacon.noMore){return reply}else{return flushWhileTriggers()}}}}else{return Bacon.more}};flush=function(){var reply;reply=flushWhileTriggers();if(ends){ends=false;if(_.all(sources,cannotSync)||_.all(pats,cannotMatch)){reply=Bacon.noMore;sink(end())}}if(reply===Bacon.noMore){unsubAll()}return reply};return source.subscribe(function(e){var reply;if(e.isEnd()){ends=true;source.markEnded();flushLater()}else if(e.isError()){reply=sink(e)}else{source.push(e.value);if(source.sync){triggers.push({source:source,e:e});if(needsBarrier||UpdateBarrier.hasWaiters()){flushLater()}else{flush()}}}if(reply===Bacon.noMore){unsubAll()}return reply||Bacon.more})}};return compositeUnsubscribe.apply(null,function(){var _k,_len2,_results;_results=[];for(_k=0,_len2=sources.length;_k<_len2;_k++){s=sources[_k];_results.push(part(s))}return _results}())})};containsDuplicateDeps=function(observables,state){var checkObservable;if(state==null){state=[]}checkObservable=function(obs){var deps;if(Bacon._.contains(state,obs)){return true}else{deps=obs.internalDeps();if(deps.length){state.push(obs);return Bacon._.any(deps,checkObservable)}else{state.push(obs);return false}}};return Bacon._.any(observables,checkObservable)};Bacon.update=function(){var i,initial,lateBindFirst,patterns;initial=arguments[0],patterns=2<=arguments.length?__slice.call(arguments,1):[];lateBindFirst=function(f){return function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];return function(i){return f.apply(null,[i].concat(args))}}};i=patterns.length-1;while(i>0){if(!(patterns[i]instanceof Function)){patterns[i]=function(x){return function(){return x}}(patterns[i])}patterns[i]=lateBindFirst(patterns[i]);i=i-2}return withDescription.apply(null,[Bacon,"update",initial].concat(__slice.call(patterns),[Bacon.when.apply(Bacon,patterns).scan(initial,function(x,f){return f(x)})]))};compositeUnsubscribe=function(){var ss;ss=1<=arguments.length?__slice.call(arguments,0):[];return new CompositeUnsubscribe(ss).unsubscribe};CompositeUnsubscribe=function(){function CompositeUnsubscribe(ss){var s,_i,_len;if(ss==null){ss=[]}this.unsubscribe=__bind(this.unsubscribe,this);this.unsubscribed=false;this.subscriptions=[];this.starting=[];for(_i=0,_len=ss.length;_i<_len;_i++){s=ss[_i];this.add(s)}}CompositeUnsubscribe.prototype.add=function(subscription){var ended,unsub,unsubMe;if(this.unsubscribed){return}ended=false;unsub=nop;this.starting.push(subscription);unsubMe=function(_this){return function(){if(_this.unsubscribed){return}ended=true;_this.remove(unsub);return _.remove(subscription,_this.starting)}}(this);unsub=subscription(this.unsubscribe,unsubMe);if(!(this.unsubscribed||ended)){this.subscriptions.push(unsub)}_.remove(subscription,this.starting);return unsub};CompositeUnsubscribe.prototype.remove=function(unsub){if(this.unsubscribed){return}if(_.remove(unsub,this.subscriptions)!==void 0){return unsub()}};CompositeUnsubscribe.prototype.unsubscribe=function(){var s,_i,_len,_ref1;if(this.unsubscribed){return}this.unsubscribed=true;_ref1=this.subscriptions;for(_i=0,_len=_ref1.length;_i<_len;_i++){s=_ref1[_i];s()}this.subscriptions=[];return this.starting=[]};CompositeUnsubscribe.prototype.count=function(){if(this.unsubscribed){return 0}return this.subscriptions.length+this.starting.length};CompositeUnsubscribe.prototype.empty=function(){return this.count()===0};return CompositeUnsubscribe}();Bacon.CompositeUnsubscribe=CompositeUnsubscribe;Some=function(){function Some(value){this.value=value}Some.prototype.getOrElse=function(){return this.value};Some.prototype.get=function(){return this.value};Some.prototype.filter=function(f){if(f(this.value)){return new Some(this.value)}else{return None}};Some.prototype.map=function(f){return new Some(f(this.value))};Some.prototype.forEach=function(f){return f(this.value)};Some.prototype.isDefined=true;Some.prototype.toArray=function(){return[this.value]};Some.prototype.inspect=function(){return"Some("+this.value+")"};Some.prototype.toString=function(){return this.inspect()};return Some}();None={getOrElse:function(value){return value},filter:function(){return None},map:function(){return None},forEach:function(){},isDefined:false,toArray:function(){return[]},inspect:function(){return"None"},toString:function(){return this.inspect()}};DepCache=function(){var collectDeps,dependsOn,flatDeps,invalidate;flatDeps={};dependsOn=function(b){var myDeps;myDeps=flatDeps[this.id];if(!myDeps){myDeps=flatDeps[this.id]={};collectDeps(this,this)}return myDeps[b.id]};collectDeps=function(orig,o){var dep,_i,_len,_ref1,_results;_ref1=o.internalDeps();_results=[];for(_i=0,_len=_ref1.length;_i<_len;_i++){dep=_ref1[_i];flatDeps[orig.id][dep.id]=true;_results.push(collectDeps(orig,dep))}return _results};invalidate=function(){return flatDeps={}};return{invalidate:invalidate,dependsOn:dependsOn}}();UpdateBarrier=function(){var afterTransaction,afters,currentEventId,findIndependent,flush,hasWaiters,inTransaction,independent,invalidateDeps,rootEvent,waiters,whenDoneWith,wrappedSubscribe;rootEvent=void 0;waiters=[];afters=[];afterTransaction=function(f){if(rootEvent){return afters.push(f)}else{return f()}};independent=function(waiter){return!_.any(waiters,function(other){return waiter.obs.dependsOn(other.obs)})};whenDoneWith=function(obs,f){if(rootEvent){return waiters.push({obs:obs,f:f})}else{return f()}};findIndependent=function(){while(!independent(waiters[0])){waiters.push(waiters.splice(0,1)[0])}return waiters.splice(0,1)[0]};flush=function(){var _results;_results=[];while(waiters.length){_results.push(findIndependent().f())}return _results};invalidateDeps=DepCache.invalidate;inTransaction=function(event,context,f,args){var result;if(rootEvent){return f.apply(context,args)}else{rootEvent=event;try{result=f.apply(context,args);flush()}finally{rootEvent=void 0;while(afters.length){f=afters.splice(0,1)[0];f()}invalidateDeps()}return result}};currentEventId=function(){if(rootEvent){return rootEvent.id}else{return void 0}};wrappedSubscribe=function(obs){return function(sink){var doUnsub,unsub,unsubd;unsubd=false;doUnsub=function(){};unsub=function(){unsubd=true;return doUnsub()};doUnsub=obs.subscribeInternal(function(event){return afterTransaction(function(){var reply;if(!unsubd){reply=sink(event);if(reply===Bacon.noMore){return unsub()}}})});return unsub}};hasWaiters=function(){return waiters.length>0};return{whenDoneWith:whenDoneWith,hasWaiters:hasWaiters,inTransaction:inTransaction,currentEventId:currentEventId,wrappedSubscribe:wrappedSubscribe}}();Bacon.EventStream=EventStream;Bacon.Property=Property;Bacon.Observable=Observable;Bacon.Bus=Bus;Bacon.Initial=Initial;Bacon.Next=Next;Bacon.End=End;Bacon.Error=Error;nop=function(){};latterF=function(_,x){return x()};former=function(x,_){return x};initial=function(value){return new Initial(_.always(value))};next=function(value){return new Next(_.always(value))};end=function(){return new End};toEvent=function(x){if(x instanceof Event){return x}else{return next(x)}};cloneArray=function(xs){return xs.slice(0)};assert=function(message,condition){if(!condition){throw message}};assertEventStream=function(event){if(!(event instanceof EventStream)){throw"not an EventStream : "+event}};assertFunction=function(f){return assert("not a function : "+f,isFunction(f))};isFunction=function(f){return typeof f==="function"};isArray=function(xs){return xs instanceof Array};isObservable=function(x){return x instanceof Observable};assertArray=function(xs){if(!isArray(xs)){throw"not an array : "+xs}};assertNoArguments=function(args){return assert("no arguments supported",args.length===0)};assertString=function(x){if(typeof x!=="string"){throw"not a string : "+x}};partiallyApplied=function(f,applied){return function(){var args;args=1<=arguments.length?__slice.call(arguments,0):[];return f.apply(null,applied.concat(args))}};makeSpawner=function(args){if(args.length===1&&isObservable(args[0])){return _.always(args[0])}else{return makeFunctionArgs(args)}};makeFunctionArgs=function(args){args=Array.prototype.slice.call(args);return makeFunction_.apply(null,args)};makeFunction_=withMethodCallSupport(function(){var args,f;f=arguments[0],args=2<=arguments.length?__slice.call(arguments,1):[];if(isFunction(f)){if(args.length){return partiallyApplied(f,args)}else{return f}}else if(isFieldKey(f)){return toFieldExtractor(f,args)}else{return _.always(f)}});makeFunction=function(f,args){return makeFunction_.apply(null,[f].concat(__slice.call(args)))};makeObservable=function(x){if(isObservable(x)){return x}else{return Bacon.once(x)}};isFieldKey=function(f){return typeof f==="string"&&f.length>1&&f.charAt(0)==="."};Bacon.isFieldKey=isFieldKey;toFieldExtractor=function(f,args){var partFuncs,parts;parts=f.slice(1).split(".");partFuncs=_.map(toSimpleExtractor(args),parts);return function(value){var _i,_len;for(_i=0,_len=partFuncs.length;_i<_len;_i++){f=partFuncs[_i];value=f(value)}return value}};toSimpleExtractor=function(args){return function(key){return function(value){var fieldValue;if(value==null){return void 0}else{fieldValue=value[key];if(isFunction(fieldValue)){return fieldValue.apply(value,args)}else{return fieldValue}}}}};toFieldKey=function(f){return f.slice(1)};toCombinator=function(f){var key;if(isFunction(f)){return f}else if(isFieldKey(f)){key=toFieldKey(f);return function(left,right){return left[key](right)}}else{return assert("not a function or a field key: "+f,false)}};toOption=function(v){if(v instanceof Some||v===None){return v}else{return new Some(v)}};_={indexOf:Array.prototype.indexOf?function(xs,x){return xs.indexOf(x)}:function(xs,x){var i,y,_i,_len;for(i=_i=0,_len=xs.length;_i<_len;i=++_i){y=xs[i];if(x===y){return i}}return-1},indexWhere:function(xs,f){var i,y,_i,_len;for(i=_i=0,_len=xs.length;_i<_len;i=++_i){y=xs[i];if(f(y)){return i}}return-1},head:function(xs){return xs[0]},always:function(x){return function(){return x}},negate:function(f){return function(x){return!f(x)}},empty:function(xs){return xs.length===0},tail:function(xs){return xs.slice(1,xs.length)},filter:function(f,xs){var filtered,x,_i,_len;filtered=[];for(_i=0,_len=xs.length;_i<_len;_i++){x=xs[_i];if(f(x)){filtered.push(x)}}return filtered},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},each:function(xs,f){var key,value,_results;_results=[];for(key in xs){value=xs[key];_results.push(f(key,value))}return _results},toArray:function(xs){if(isArray(xs)){return xs}else{return[xs]}},contains:function(xs,x){return _.indexOf(xs,x)!==-1},id:function(x){return x},last:function(xs){return xs[xs.length-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},without:function(x,xs){return _.filter(function(y){return y!==x},xs)},remove:function(x,xs){var i;i=_.indexOf(xs,x);if(i>=0){return xs.splice(i,1)}},fold: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},flatMap:function(f,xs){return _.fold(xs,[],function(ys,x){return ys.concat(f(x))})},cached:function(f){var value;value=None;return function(){if(value===None){value=f();f=null}return value}},toString:function(obj){var ex,internals,key,value;try{recursionDepth++;if(obj==null){return"undefined"}else if(isFunction(obj)){return"function"}else if(isArray(obj)){if(recursionDepth>5){return"[..]"}return"["+_.map(_.toString,obj).toString()+"]"}else if((obj!=null?obj.toString:void 0)!=null&&obj.toString!==Object.prototype.toString){return obj.toString()}else if(typeof obj==="object"){if(recursionDepth>5){return"{..}"}internals=function(){var _results;_results=[];for(key in obj){if(!__hasProp.call(obj,key))continue;value=function(){try{return obj[key]}catch(_error){ex=_error;return ex}}();_results.push(_.toString(key)+":"+_.toString(value))}return _results}();return"{"+internals+"}"}else{return obj}}finally{recursionDepth--}}};recursionDepth=0;Bacon._=_;Bacon.scheduler={setTimeout:function(f,d){return setTimeout(f,d)},setInterval:function(f,i){return setInterval(f,i)},clearInterval:function(id){return clearInterval(id)},now:function(){return(new Date).getTime()}};if(typeof define!=="undefined"&&define!==null&&define.amd!=null){define([],function(){return Bacon});this.Bacon=Bacon}else if(typeof module!=="undefined"&&module!==null){module.exports=Bacon;Bacon.Bacon=Bacon}else{this.Bacon=Bacon}}).call(this)},{}],baconjs:[function(require,module,exports){module.exports=require("wY/X68")},{}]},{},[]);var requestAnimationFrame=require("raf");var Bacon=require("baconjs");var canvas=document.createElement("canvas");canvas.width=500;canvas.height=100;document.body.appendChild(canvas);var box=document.createElement("div");document.body.appendChild(box);function oval(context,x,y,w,h){context.save();context.beginPath();context.translate(x,y);context.scale(w/2,h/2);context.arc(1,1,1,0,2*Math.PI,false);context.closePath();context.restore()}var context=canvas.getContext("2d");oval(context,87.5,75.5,11,11);context.fillStyle="rgba(0, 0, 0, 1)";context.fill();var a=new Bacon.Bus;a.doAction(function(e){context.clearRect(0,0,canvas.width,canvas.height);console.log(e.timestamp)
}).log();a.push(1);
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"raf": "2.0.1",
"baconjs": "0.7.18"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment