UNPKG

litejs

Version:

Single-page application framework

86 lines (68 loc) 1.57 kB
/* litejs.com/MIT-LICENSE.txt */ El.bindings.list = function(node, list, extra, val) { var child = node._child , data = this , extraLen = 0 if (!child) { child = node._child = node.removeChild(node.firstChild) } if (!list || node._list == list) return if (node._list) clear() node._list = data.list = list El.on(node, "kill", clear) El.cls(node, "loading") if (extra) { extra.each(clone) extraLen = extra.length } list .each(clone) .on("add", clone).on("remove", remove) .on("startLoading", function(){ El.cls(node, "loading") }) .on("endLoading", function(){ El.cls(node, "loading", 0) }) .then(function() { if (val !== void 0 && El.val(node) !== val) { if (!this.get(val)) { clone({id:val,name:val}, extraLen) extraLen++ } El.val(node, val) } El.cls(node, "loading", 0) }) // Do not render childs when list initialized return true function clone(item, pos) { var clone = child.cloneNode(true) , scope = El.scope(clone, data) scope.item = item.data || item || {id:item,name:item} scope.model = item scope.pos = pos function up() { El.render(clone, scope) } if (item.on) { item.on("change", up) El.on(clone, "kill", function(){ item.off("change", up) }) } El.append(node, clone, extraLen + pos) return El.render(clone, scope) } function remove(item, pos) { El.kill(node.childNodes[extraLen + pos]) } function clear() { var list = node._list El.empty(node) if (list) { node._list = null list.off("add", clone).off("remove", remove) } } }