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
29 lines (26 loc) • 680 B
JavaScript
module.exports = MutantChannel
function MutantChannel () {
var listeners = []
return {
listen (listener) {
if (typeof listener !== 'function') {
throw new Error('Listeners must be functions.')
}
listeners.push(listener)
return function remove () {
for (var i = 0, len = listeners.length; i < len; i++) {
if (listeners[i] === listener) {
listeners.splice(i, 1)
break
}
}
}
},
broadcast (value) {
var cachedListeners = listeners.slice(0)
for (var i = 0, len = cachedListeners.length; i < len; i++) {
cachedListeners[i](value)
}
}
}
}