mutant
Version:
Create observables and map them to DOM elements. Massively inspired by hyperscript and observ-*. No virtual dom, just direct observable bindings. Unnecessary garbage collection is avoided by using mutable objects instead of blasting immutable junk all ove
30 lines (25 loc) • 711 B
JavaScript
var computed = require('./computed')
var isObservable = require('./is-observable')
module.exports = When
function When (obs, ifTrue, ifFalse) {
ifTrue = handleInnerValues(ifTrue)
ifFalse = handleInnerValues(ifFalse)
return computed([obs, ifTrue, ifFalse], lambda)
}
function lambda (value, ifTrue, ifFalse) {
return value ? ifTrue : ifFalse
}
function handleInnerValues (obs) {
if (Array.isArray(obs) && obs.some(isObservable)) {
// HACK: resolve inner observs
var inner = []
return computed(obs, function () {
for (var i = 0; i < arguments.length; i++) {
inner[i] = arguments[i]
}
inner.length = arguments.length
return inner
})
}
return obs
}