Merge branch 'next' into components

This commit is contained in:
Leo Horie 2015-03-13 23:23:16 -04:00
commit c52060a670
2 changed files with 42 additions and 2 deletions

View file

@ -169,6 +169,7 @@ var m = (function app(window, undefined) {
for (var prop in existing) actions.push(existing[prop])
var changes = actions.sort(sortChanges);
var newCached = new Array(cached.length)
newCached.nodes = []
for (var i = 0, change; change = changes[i]; i++) {
if (change.action === DELETION) {
@ -180,6 +181,7 @@ var m = (function app(window, undefined) {
dummy.key = data[change.index].attrs.key;
parentElement.insertBefore(dummy, parentElement.childNodes[change.index] || null);
newCached.splice(change.index, 0, {attrs: {key: data[change.index].attrs.key}, nodes: [dummy]})
newCached.nodes[change.index] = dummy
}
if (change.action === MOVE) {
@ -187,16 +189,16 @@ var m = (function app(window, undefined) {
parentElement.insertBefore(change.element, parentElement.childNodes[change.index] || null)
}
newCached[change.index] = cached[change.from]
newCached.nodes[change.index] = change.element
}
}
for (var i = 0, len = unkeyed.length; i < len; i++) {
var change = unkeyed[i];
parentElement.insertBefore(change.element, parentElement.childNodes[change.index] || null);
newCached[change.index] = cached[change.index]
newCached.nodes[change.index] = change.element
}
cached = newCached;
cached.nodes = new Array(parentElement.childNodes.length);
for (var i = 0, child; child = parentElement.childNodes[i]; i++) cached.nodes[i] = child
}
}
//end key algorithm

View file

@ -554,6 +554,44 @@ function testMithril(mock) {
return initCount == 1
})
test(function() {
var root = mock.document.createElement("div")
var dom = mock.document.createElement("div")
var show = true
var module = {
view: function() {
return [
m(".foo", {key: 1, config: test, onclick: function() {show = !show}}),
show ? m(".bar", {key: 2}) : null
]
}
}
function test(el, init) {
if (!init) {
root.appendChild(dom)
}
}
m.module(root, module)
mock.requestAnimationFrame.$resolve()
show = false
m.redraw()
mock.requestAnimationFrame.$resolve()
show = true
m.redraw()
mock.requestAnimationFrame.$resolve()
return root.childNodes.length == 3
})
m.redraw.strategy(undefined) //teardown for m.module tests
//m.withAttr