Created
April 21, 2015 10:16
-
-
Save alfonsogarciacaro/83df0cd2cdd8e6f3a0e6 to your computer and use it in GitHub Desktop.
Ractive TodoMVC sample generated with FunScript fNext
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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