Skip to content

Instantly share code, notes, and snippets.

@alfonsogarciacaro
Created April 21, 2015 10:16
Show Gist options
  • Save alfonsogarciacaro/83df0cd2cdd8e6f3a0e6 to your computer and use it in GitHub Desktop.
Save alfonsogarciacaro/83df0cd2cdd8e6f3a0e6 to your computer and use it in GitHub Desktop.
Ractive TodoMVC sample generated with FunScript fNext
(function(){
var ns={};
ns.Program = {};
ns.Program.main = (function() {
var patternInput = ns.Program.init();
var ractive = patternInput[0];
var data = patternInput[1];
ns.Program.todosProcess(ractive, data['items']);
ns.Program.toggleProcess(ractive, data['items']);
return ns.Program.filterProcess(ractive)
});
ns.Program.init = (function() {
ns.FSDic.Add(((Ractive).events), 'enter', ns.RactiveExt['RactiveStatic.makeCustomKeyEvent']((Ractive), 13.0), 'string', 'function');
ns.FSDic.Add(((Ractive).events), 'escape', ns.RactiveExt['RactiveStatic.makeCustomKeyEvent']((Ractive), 27.0), 'string', 'function');
var filters = ns.Program.add('active', (function(t) {
return !t.completed
}), ns.Program.add('completed', (function(t) {
return t.completed
}), ns.Program.add('all', (function(t) {
return true
}), new ns.FSDic('string', 'function'), 'string', 'function'), 'string', 'function'), 'string', 'function');
var data = ns.Program.add('filters', filters, ns.Program.add('currentFilter', 'all', ns.Program.add('items', (function() {
var matchValue = ns.Storage.load(ns.ResizeArray);
if(matchValue === null) {
return new ns.ResizeArray('object')
}
else {
var v = matchValue;
return v
}
})(), new ns.FSDic('string', 'object'), 'string', 'object'), 'string', 'object'), 'string', 'object');
var options = {};
(options.el)='#todoapp';
(options.template)='#main';
(options.data)=data;
(options.twoway)=false;
var ractive = (new (Ractive)(options));
return [ractive, data]
});
ns.Program.add = (function(key, value, dic, $a, $b) {
ns.FSDic.Add(dic, key, value, $a, $b);
return dic
});
ns.Program.todosProcess = (function(ractive, todos) {
var editingLoop = (function(tupledArg) {
var r = tupledArg[0];
var todos1 = tupledArg[1];
return ns.AsyncBuilder.Delay(ns.AsyncModule.async, (function() {
var patternInput = ns.RactiveExt.onStream2(r, 'submit', 'cancel');
var ev2 = patternInput[1];
var ev1 = patternInput[0];
return ns.AsyncBuilder.Bind(ns.AsyncModule.async, ns.Async.AwaitObservable2(ev1, ev2, 'Array', 'Array'), (function(_arg1) {
var choice = _arg1;
if(choice.Tag === 1) {
undefined;
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
else {
var ev = choice.Item[0];
var arg = choice.Item[1];
var index = (ev.index)['i'];
var oldTodo = (ev.context);
var input = (ev.node);
if((input.value).length > 1) {
todos1.splice(index, 1, new ns.Todo((input.value), oldTodo.completed));
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
else {
todos1.splice(index, 1);
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
}
}), ns.FSharpChoice, 'undefined')
}), 'undefined')
});
var waitingLoop = (function(tupledArg) {
var r = tupledArg[0];
var todos1 = tupledArg[1];
return ns.AsyncBuilder.Delay(ns.AsyncModule.async, (function() {
var patternInput = ns.RactiveExt.onStream4(r, 'newTodo', 'remove', 'clearCompleted', 'edit');
var ev4 = patternInput[3];
var ev3 = patternInput[2];
var ev2 = patternInput[1];
var ev1 = patternInput[0];
return ns.AsyncBuilder.Bind(ns.AsyncModule.async, ns.Async.AwaitObservable4(ev1, ev2, ev3, ev4, 'Array', 'Array', 'Array', 'Array'), (function(_arg2) {
var choice = _arg2;
return ns.AsyncBuilder.Combine(ns.AsyncModule.async, (function() {
if(choice.Tag === 1) {
var ev = choice.Item[0];
var arg = choice.Item[1];
var index = (ev.index)['i'];
todos1.splice(index, 1);
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
else if(choice.Tag === 2) {
return ns.AsyncBuilder.For(ns.AsyncModule.async, ns.Range.customStep((todos1.length - 1), -1, 0), (function(_arg3) {
var i = _arg3;
if(todos1[i].completed) {
todos1.splice(i, 1);
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
else {
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
}), 'number')
}
else if(choice.Tag === 3) {
var ev = choice.Item[0];
var arg = choice.Item[1];
var li = (((ev.node).parentElement).parentElement);
var input = (li.querySelector('#edit'));
((li.classList).add('editing'));
(input.value)=(ev.context).description;
(input.focus());
return ns.AsyncBuilder.Bind(ns.AsyncModule.async, editingLoop([r, todos1]), (function() {
((li.classList).remove('editing'));
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}), 'undefined', 'undefined')
}
else {
var ev = choice.Item[0];
var arg = choice.Item[1];
var input = (ev.node);
todos1.push(new ns.Todo((input.value), false));
(input.value)='';
return ns.AsyncBuilder.Zero(ns.AsyncModule.async)
}
})(), ns.AsyncBuilder.Delay(ns.AsyncModule.async, (function() {
ns.Storage.save(todos1, ns.ResizeArray);
return ns.AsyncBuilder.ReturnFrom(ns.AsyncModule.async, waitingLoop([r, todos1]), 'undefined')
}), 'undefined'), 'undefined')
}), ns.FSharpChoice1, 'undefined')
}), 'undefined')
});
return ns.Async.StartImmediate(waitingLoop([ractive, todos]), null)
});
ns.Program.toggleProcess = (function(ractive, todos) {
ns.Observable.Add((function(tupledArg) {
var ev = tupledArg[0];
var arg = tupledArg[1];
var index = (ev.index)['i'];
var isDone = ((ev.node).checked);
todos.splice(index, 1, (function() {
var inputRecord = todos[index];
return new ns.Todo(inputRecord.description, isDone)
})());
return ns.Storage.save(todos, ns.ResizeArray)
}), ns.RactiveExt.onStream1(ractive, 'toggle'), 'Array');
return ns.Observable.Add((function(tupledArg) {
var ev = tupledArg[0];
var arg = tupledArg[1];
var isDone = ((ev.node).checked);
for(var i=0;i<=(todos.length - 1);i++) {
if(todos[i].completed !== isDone) {
todos.splice(i, 1, (function() {
var inputRecord = todos[i];
return new ns.Todo(inputRecord.description, isDone)
})())
}
};
return ns.Storage.save(todos, ns.ResizeArray)
}), ns.RactiveExt.onStream1(ractive, 'toggleAll'), 'Array')
});
ns.Program.filterProcess = (function(ractive) {
return ns.Observable.Add((function(ev) {
var matchValue = (((window).location).hash).substr(2);
if(matchValue === 'active') {
return (ractive.set('currentFilter', 'active'))
}
else if(matchValue === 'completed') {
return (ractive.set('currentFilter', 'completed'))
}
else {
(((window).location).hash)='';
return (ractive.set('currentFilter', 'all'))
}
}), ns.ObservableExt['Window.get_onhashchangeStream']((window)), 'Event')
});
ns.RactiveExt = {};
ns.RactiveExt['RactiveStatic.makeCustomKeyEvent'] = (function(x, keyCode) {
var plugin = (function(node) {
return (function(fire) {
var keydownHandler = (function(ev) {
if((ev.which) === keyCode) {
var f = {};
(f.node)=node;
(f.original)=ev;
return fire(f)
}
else {
return undefined
}
});
(node.addEventListener('keydown', keydownHandler, false));
var t = {};
(t.teardown)=(function(unitVar0) {
return (node.removeEventListener('keydown', keydownHandler, false))
});
return t
})
});
return (function(delegateArg, delegateArg1) {
return plugin(delegateArg)(delegateArg1)
})
});
ns.RactiveExt.onStream2 = (function(x, eventName1, eventName2) {
return [new ns.RactiveEventStream(x, eventName1), new ns.RactiveEventStream(x, eventName2)]
});
ns.RactiveExt.onStream4 = (function(x, eventName1, eventName2, eventName3, eventName4) {
return [new ns.RactiveEventStream(x, eventName1), new ns.RactiveEventStream(x, eventName2), new ns.RactiveEventStream(x, eventName3), new ns.RactiveEventStream(x, eventName4)]
});
ns.RactiveExt.onStream1 = (function(x, eventName) {
return new ns.RactiveEventStream(x, eventName)
});
ns.FSDic = (function($k, $v) {});
ns.FSDic.Add = (function(_this, key, value) {
if (_this[key] === undefined) { _this[key] = value } else { throw 'Key already exists' }
});
ns.ResizeArray = (function($T) {
this.constructor=ns.ResizeArray
});
;
ns.ResizeArray.prototype = Array.prototype;
ns.Storage = {};
ns.Storage.load = (function($a) {
var attempt = ((localStorage).getItem(ns.Storage.key));
if(attempt === null) {
return null
}
else {
return ((JSON).parse(attempt, null))
}
});
ns.Storage.save = (function(data, $a) {
return ((localStorage).setItem(ns.Storage.key, ((JSON).stringify(data))))
});
ns.AsyncModule = {};
;
ns.AsyncModule.async = (function() {
return new ns.AsyncBuilder()
});
ns.AsyncModule.protectedCont = (function(f, $a) {
return ns.Async1.Cont((function(args) {
ns.CancellationToken.ThrowIfCancellationRequested(args.Aux.CancellationToken);
ns.Operators.incr(args.Aux.StackCounter);
if(ns.Operators.op_Dereference(args.Aux.StackCounter, 'number') > 1000) {
ns.Operators.op_ColonEquals(args.Aux.StackCounter, 0, 'number');
return setTimeout((function() {
try {
return f(args)
}
catch(ex) {
return args.Aux.ExceptionCont(ex)
}
}), 1.0)
}
else {
try {
return f(args)
}
catch(ex) {
return args.Aux.ExceptionCont(ex)
}
}
}))
});
ns.AsyncModule.invokeCont = (function(k, value, $a) {
return k.Cont(value)
});
ns.AsyncBuilder = (function() {});
ns.AsyncBuilder.Zero = (function(x) {
return ns.AsyncModule.protectedCont((function(k) {
return ns.AsyncModule.invokeCont(k, undefined, 'undefined')
}), 'undefined')
});
ns.AsyncBuilder.Bind = (function(x, _arg1, f, $T, $R) {
var v = _arg1.Item;
return ns.AsyncModule.protectedCont((function(k) {
var cont = (function(a) {
var patternInput = f(a);
var r = patternInput.Item;
return r(k)
});
return v(new ns.AsyncParams(cont, k.Aux))
}), $R)
});
ns.AsyncBuilder.Delay = (function(x, f, $c) {
return ns.AsyncModule.protectedCont((function(k) {
var patternInput = f();
var r = patternInput.Item;
return r(k)
}), $c)
});
ns.AsyncBuilder.For = (function(x, seq, body, $a) {
var enumerator = seq.constructor.IEnumerable.GetEnumerator(seq, $a);
return ns.AsyncBuilder.While(x, (function() {
return enumerator.constructor.IEnumerator.MoveNext(enumerator)
}), ns.AsyncBuilder.Delay(x, (function() {
return body(enumerator.constructor.IEnumerator1.get_Current(enumerator, $a))
}), 'undefined'))
});
ns.AsyncBuilder.While = (function(x, cond, body) {
if(cond()) {
return ns.AsyncBuilder.Bind(x, body, (function() {
return ns.AsyncBuilder.While(x, cond, body)
}), 'undefined', 'undefined')
}
else {
return ns.AsyncBuilder.Return(x, 'undefined')
}
});
ns.AsyncBuilder.Return = (function(x, v, $T) {
return ns.AsyncModule.protectedCont((function(k) {
return ns.AsyncModule.invokeCont(k, v, $T)
}), $T)
});
ns.AsyncBuilder.ReturnFrom = (function(x, w, $T) {
return w
});
ns.AsyncBuilder.Combine = (function(x, work1, work2, $b) {
return ns.AsyncBuilder.Bind(x, work1, (function() {
return work2
}), 'undefined', $b)
});
ns.RactiveEventStream = (function(ractive, eventName) {
this.ractive = ractive;
this.eventName = eventName
});
ns.RactiveEventStream.IObservable = {};
ns.RactiveEventStream.IObservable.Subscribe = (function(x, observer) {
var remover = (x.ractive.on(x.eventName, (function(ev, arg) {
return observer.constructor.IObserver.OnNext(observer, [ev, arg], 'Array')
})));
return new ns.ActionDisposable((function() {
return (remover.cancel())
}))
});
ns.ActionDisposable = (function(f) {
this.f = f
});
ns.ActionDisposable.IDisposable = {};
ns.ActionDisposable.IDisposable.Dispose = (function(_this) {
return _this.f()
});
ns.Async = {};
ns.Async.AwaitObservable2 = (function(ev1, ev2, $h, $i) {
var ev11 = ns.Observable.Map((function(arg0) {
return ns.FSharpChoice.Choice1Of2(arg0)
}), ev1, $h, ns.FSharpChoice);
var ev21 = ns.Observable.Map((function(arg0) {
return ns.FSharpChoice.Choice2Of2(arg0)
}), ev2, $i, ns.FSharpChoice);
return ns.Async.AwaitObservable1(ns.Observable.Merge(ev11, ev21, ns.FSharpChoice), ns.FSharpChoice)
});
ns.Async.AwaitObservable1 = (function(w1, $T) {
return ns.AsyncModule.protectedCont((function(k) {
var remover = ns.Operators.ref(null, 'IDisposable');
var observer = ns.ActionObserver['.ctor']((function(value) {
ns.Operators.op_Dereference(remover, 'IDisposable').constructor.IDisposable.Dispose(ns.Operators.op_Dereference(remover, 'IDisposable'));
ns.CancellationToken.ThrowIfCancellationRequested(k.Aux.CancellationToken);
return k.Cont(value)
}), $T);
return ns.Operators.op_ColonEquals(remover, w1.constructor.IObservable.Subscribe(w1, observer, $T), 'IDisposable')
}), $T)
});
ns.Async.StartImmediate = (function(workflow, cancellationToken) {
var token = (cancellationToken===null?new ns.CancellationToken(null):cancellationToken);
var f = workflow.Item;
var aux = new ns.AsyncParamsAux(ns.Operators.ref(0, 'number'), (function(x) {
return x
}), (function(x) {
return x
}), token);
return f(new ns.AsyncParams((function(x) {
return x
}), aux))
});
ns.Async.AwaitObservable4 = (function(ev1, ev2, ev3, ev4, $a, $b, $c, $d) {
var ev11 = ns.Observable.Map((function(arg0) {
return ns.FSharpChoice1.Choice1Of4(arg0)
}), ev1, $a, ns.FSharpChoice1);
var ev21 = ns.Observable.Map((function(arg0) {
return ns.FSharpChoice1.Choice2Of4(arg0)
}), ev2, $b, ns.FSharpChoice1);
var ev31 = ns.Observable.Map((function(arg0) {
return ns.FSharpChoice1.Choice3Of4(arg0)
}), ev3, $c, ns.FSharpChoice1);
var ev41 = ns.Observable.Map((function(arg0) {
return ns.FSharpChoice1.Choice4Of4(arg0)
}), ev4, $d, ns.FSharpChoice1);
return ns.Async.AwaitObservable1(ns.Observable.Merge(ev41, ns.Observable.Merge(ev31, ns.Observable.Merge(ev11, ev21, ns.FSharpChoice1), ns.FSharpChoice1), ns.FSharpChoice1), ns.FSharpChoice1)
});
ns.FSharpChoice = (function() {});
ns.FSharpChoice.Choice1Of2 = (function(a0) {
var _this = new ns.FSharpChoice();
_this.Tag = 0;
_this.Item = a0;
return _this
});
ns.FSharpChoice.Choice2Of2 = (function(a0) {
var _this = new ns.FSharpChoice();
_this.Tag = 1;
_this.Item = a0;
return _this
});
ns.Observable = {};
ns.Observable.Map = (function(f, w, $T, $a) {
return new ns.MapObservable(f, w, $T, $a)
});
ns.Observable.protect = (function(f, succeed, fail, $a, $b) {
var matchValue = (function() {
try {
return ns.FSharpChoice.Choice1Of2(f())
}
catch(e) {
return ns.FSharpChoice.Choice2Of2(e)
}
})();
if(matchValue.Tag === 1) {
var e = matchValue.Item;
return fail(e)
}
else {
var x = matchValue.Item;
return succeed(x)
}
});
ns.Observable.Merge = (function(w1, w2, $T) {
return new ns.MergeObservable(w1, w2, $T)
});
ns.Observable.Add = (function(f, w, $T) {
return w.constructor.IObservable.Subscribe(w, ns.ActionObserver['.ctor'](f, $T), $T)
});
ns.MapObservable = (function(f, w, $T, $U) {
this.f = f;
this.w = w
});
ns.MapObservable.IObservable = {};
ns.MapObservable.IObservable.Subscribe = (function(x, observer, $T, $U) {
var newObserver = new ns.ActionObserver((function(v) {
return ns.Observable.protect((function() {
return x.f(v)
}), (function(arg00) {
return observer.constructor.IObserver.OnNext(observer, arg00, $U)
}), (function(arg00) {
return observer.constructor.IObserver.OnError(observer, arg00, $U)
}), $U, 'undefined')
}), (function(e) {
return observer.constructor.IObserver.OnError(observer, e, $U)
}), (function() {
return observer.constructor.IObserver.OnCompleted(observer, $U)
}), $T);
return x.w.constructor.IObservable.Subscribe(x.w, newObserver, $T)
});
ns.ActionObserver = (function(onNext, onError, onCompleted, $T) {
this.onNext = onNext;
this.onError = onError;
this.onCompleted = onCompleted
});
ns.ActionObserver['.ctor'] = (function(onNext, $T) {
return new ns.ActionObserver(onNext, (function(e) {
return undefined
}), (function() {
return undefined
}), $T)
});
ns.ActionObserver.IObserver = {};
ns.ActionObserver.IObserver.OnNext = (function(_this, v, $T) {
return _this.onNext(v)
});
ns.ActionObserver.IObserver.OnError = (function(_this, e, $T) {
return _this.onError(e)
});
ns.ActionObserver.IObserver.OnCompleted = (function(_this, $T) {
return _this.onCompleted()
});
ns.MergeObservable = (function(w1, w2, $T) {
this.w1 = w1;
this.w2 = w2
});
ns.MergeObservable.IObservable = {};
ns.MergeObservable.IObservable.Subscribe = (function(x, observer, $T) {
var stopped = ns.Operators.ref(false, 'boolean');
var completed1 = ns.Operators.ref(false, 'boolean');
var completed2 = ns.Operators.ref(false, 'boolean');
var observer1 = new ns.ActionObserver((function(v) {
if(!ns.Operators.op_Dereference(stopped, 'boolean')) {
return observer.constructor.IObserver.OnNext(observer, v, $T)
}
else {
return undefined
}
}), (function(e) {
if(!ns.Operators.op_Dereference(stopped, 'boolean')) {
ns.Operators.op_ColonEquals(stopped, true, 'boolean');
return observer.constructor.IObserver.OnError(observer, e, $T)
}
else {
return undefined
}
}), (function() {
if(!ns.Operators.op_Dereference(stopped, 'boolean')) {
ns.Operators.op_ColonEquals(completed1, true, 'boolean');
if(ns.Operators.op_Dereference(completed1, 'boolean') && ns.Operators.op_Dereference(completed2, 'boolean')) {
ns.Operators.op_ColonEquals(stopped, true, 'boolean');
return observer.constructor.IObserver.OnCompleted(observer, $T)
}
else {
return undefined
}
}
else {
return undefined
}
}), $T);
var observer2 = new ns.ActionObserver((function(v) {
if(!ns.Operators.op_Dereference(stopped, 'boolean')) {
return observer.constructor.IObserver.OnNext(observer, v, $T)
}
else {
return undefined
}
}), (function(e) {
if(!ns.Operators.op_Dereference(stopped, 'boolean')) {
ns.Operators.op_ColonEquals(stopped, true, 'boolean');
return observer.constructor.IObserver.OnError(observer, e, $T)
}
else {
return undefined
}
}), (function() {
if(!ns.Operators.op_Dereference(stopped, 'boolean')) {
ns.Operators.op_ColonEquals(completed2, true, 'boolean');
if(ns.Operators.op_Dereference(completed1, 'boolean') && ns.Operators.op_Dereference(completed2, 'boolean')) {
ns.Operators.op_ColonEquals(stopped, true, 'boolean');
return observer.constructor.IObserver.OnCompleted(observer, $T)
}
else {
return undefined
}
}
else {
return undefined
}
}), $T);
var h1 = x.w1.constructor.IObservable.Subscribe(x.w1, observer1, $T);
var h2 = x.w2.constructor.IObservable.Subscribe(x.w2, observer2, $T);
return new ns.ActionDisposable((function() {
h1.constructor.IDisposable.Dispose(h1);
return h2.constructor.IDisposable.Dispose(h2)
}))
});
ns.Operators = {};
ns.Operators.ref = (function(x, $a) {
return new ns.FSharpRef(x)
});
ns.Operators.op_Dereference = (function(r, $a) {
return r.contents
});
ns.Operators.op_ColonEquals = (function(r, v, $a) {
r.contents = v
});
ns.Operators.failwith = (function(msg, $a) {
throw(ns.Operators.exn(msg))
});
ns.Operators.exn = (function(msg) {
return new ns.FSException(msg)
});
ns.Operators.incr = (function(x) {
return ns.Operators.op_ColonEquals(x, (ns.Operators.op_Dereference(x, 'number') + 1), 'number')
});
ns.FSharpRef = (function(a0) {
this.contents = a0
});
ns.CancellationToken = (function(a0) {
this.Cell = a0
});
ns.CancellationToken.ThrowIfCancellationRequested = (function(x) {
var matchValue = x.Cell;
if(matchValue !== null) {
if((function() {
var cell = matchValue;
return ns.Operators.op_Dereference(cell, 'boolean')
})()) {
var cell = matchValue;
return ns.Operators.failwith('OperationCancelledException', 'undefined')
}
else {
return undefined
}
}
else {
return undefined
}
});
ns.FSException = (function(message) {
this.message = message
});
ns.Async1 = (function() {});
ns.Async1.Cont = (function(a0) {
var _this = new ns.Async1();
_this.Tag = 0;
_this.Item = a0;
return _this
});
ns.Todo = (function(a0, a1) {
this.description = a0;
this.completed = a1
});
ns.AsyncParams = (function(a0, a1) {
this.Cont = a0;
this.Aux = a1
});
ns.AsyncParamsAux = (function(a0, a1, a2, a3) {
this.StackCounter = a0;
this.ExceptionCont = a1;
this.CancelledCont = a2;
this.CancellationToken = a3
});
ns.FSharpChoice1 = (function() {});
ns.FSharpChoice1.Choice1Of4 = (function(a0) {
var _this = new ns.FSharpChoice1();
_this.Tag = 0;
_this.Item = a0;
return _this
});
ns.FSharpChoice1.Choice2Of4 = (function(a0) {
var _this = new ns.FSharpChoice1();
_this.Tag = 1;
_this.Item = a0;
return _this
});
ns.FSharpChoice1.Choice3Of4 = (function(a0) {
var _this = new ns.FSharpChoice1();
_this.Tag = 2;
_this.Item = a0;
return _this
});
ns.FSharpChoice1.Choice4Of4 = (function(a0) {
var _this = new ns.FSharpChoice1();
_this.Tag = 3;
_this.Item = a0;
return _this
});
ns.Range = {};
ns.Range.customStep = (function(first, stepping, last, $a, $b) {
var zero = 0;
return ns.SeqModule.unfold((function(x) {
if(((stepping > zero) && (x <= last)) || ((stepping < zero) && (x >= last))) {
return [x, (x + stepping)]
}
else {
return null
}
}), first, $a, $a)
});
ns.SeqModule = {};
ns.SeqModule.unfold = (function(f, seed, $acc, $a) {
return ns.SeqModule.fromFactory((function() {
return new ns.UnfoldEnumerator(seed, f, $acc, $a)
}), $a)
});
ns.SeqModule.fromFactory = (function(f, $a) {
return new ns.CreateEnumerable(f, $a)
});
ns.UnfoldEnumerator = (function(seed, unfold, $acc, $a) {
this.seed = seed;
this.unfold = unfold;
this.acc = this.seed;
this.current = null
});
ns.UnfoldEnumerator.IEnumerator1 = {};
ns.UnfoldEnumerator.IEnumerator1.get_Current = (function(__, $acc, $a) {
return __.current
});
ns.UnfoldEnumerator.IDisposable = {};
ns.UnfoldEnumerator.IDisposable.Dispose = (function(__, $acc, $a) {
return undefined
});
ns.UnfoldEnumerator.IEnumerator = {};
ns.UnfoldEnumerator.IEnumerator.MoveNext = (function(__, $acc, $a) {
var matchValue = __.acc;
return ((matchValue !== null) && (function() {
var currAcc = matchValue;
var matchValue1 = __.unfold(currAcc);
if(matchValue1 !== null) {
var value = matchValue1[0];
var nextAcc = matchValue1[1];
__.acc = nextAcc;
__.current = value;
return true
}
else {
__.acc = null;
__.current = null;
return false
}
})())
});
ns.UnfoldEnumerator.IEnumerator.get_Current = (function(__, $acc, $a) {
return __.current
});
ns.UnfoldEnumerator.IEnumerator.Reset = (function(__, $acc, $a) {
__.acc = __.seed;
__.current = null
});
ns.CreateEnumerable = (function(factory, $a) {
this.factory = factory
});
ns.CreateEnumerable.IEnumerable = {};
ns.CreateEnumerable.IEnumerable.GetEnumerator = (function(__, $a) {
return __.factory()
});
ns.CreateEnumerable.IEnumerable1 = {};
ns.CreateEnumerable.IEnumerable1.GetEnumerator = (function(__, $a) {
return __.factory()
});
ns.HTMLEventStream = (function(el, ev, $T) {
this.el = el;
this.ev = ev
});
ns.HTMLEventStream.IObservable = {};
ns.HTMLEventStream.IObservable.Subscribe = (function(x, observer, $T) {
var listener = (function(ev) {
return observer.constructor.IObserver.OnNext(observer, ev, $T)
});
(x.el.addEventListener(x.ev, listener, false));
return new ns.ActionDisposable((function() {
return (x.el.removeEventListener(x.ev, listener, false))
}))
});
ns.ObservableExt = {};
ns.ObservableExt['Window.get_onhashchangeStream'] = (function(__) {
return new ns.HTMLEventStream(__, 'hashchange', 'Event')
});
return ns.Program.main()
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment