fix ie8 empty-text-node-in-input issue

This commit is contained in:
Leo Horie 2014-08-11 20:54:35 -04:00
parent 60939592f7
commit e60a9542b2
2 changed files with 17 additions and 3 deletions

View file

@ -55,7 +55,7 @@ Mithril = m = new function app(window, undefined) {
var end = offset + (dataType == "[object Array]" ? data : cached.nodes).length var end = offset + (dataType == "[object Array]" ? data : cached.nodes).length
clear(parentCache.nodes.slice(offset, end), parentCache.slice(offset, end)) clear(parentCache.nodes.slice(offset, end), parentCache.slice(offset, end))
} }
else clear(cached.nodes, cached) else if (cached.nodes) clear(cached.nodes, cached)
} }
cached = new data.constructor cached = new data.constructor
cached.nodes = [] cached.nodes = []
@ -164,7 +164,7 @@ Mithril = m = new function app(window, undefined) {
cached = { cached = {
tag: data.tag, tag: data.tag,
//process children before attrs so that select.value works correctly //process children before attrs so that select.value works correctly
children: data.children !== undefined ? build(node, data.tag, undefined, undefined, data.children, cached.children, true, 0, data.attrs.contenteditable ? node : editable, namespace, configs) : undefined, children: data.children !== undefined ? build(node, data.tag, undefined, undefined, data.children, cached.children, true, 0, data.attrs.contenteditable ? node : editable, namespace, configs) : [],
attrs: setAttributes(node, data.tag, data.attrs, {}, namespace), attrs: setAttributes(node, data.tag, data.attrs, {}, namespace),
nodes: [node] nodes: [node]
} }
@ -173,7 +173,7 @@ Mithril = m = new function app(window, undefined) {
else { else {
node = cached.nodes[0] node = cached.nodes[0]
setAttributes(node, data.tag, data.attrs, cached.attrs, namespace) setAttributes(node, data.tag, data.attrs, cached.attrs, namespace)
cached.children = build(node, data.tag, undefined, undefined, data.children, cached.children, false, 0, data.attrs.contenteditable ? node : editable, namespace, configs) cached.children = data.children !== undefined ? build(node, data.tag, undefined, undefined, data.children, cached.children, false, 0, data.attrs.contenteditable ? node : editable, namespace, configs) : []
cached.nodes.intact = true cached.nodes.intact = true
if (shouldReattach === true && node !== null) parentElement.insertBefore(node, parentElement.childNodes[index] || null) if (shouldReattach === true && node !== null) parentElement.insertBefore(node, parentElement.childNodes[index] || null)
} }

View file

@ -685,6 +685,20 @@ function testMithril(mock) {
m.render(root, m("ul", [m("li", {key: 0}), m("li", {key: 1}), m("li", {key: 2}), m("li", {key: 3}), m("li", {key: 4}), m("li", {key: 5})])) m.render(root, m("ul", [m("li", {key: 0}), m("li", {key: 1}), m("li", {key: 2}), m("li", {key: 3}), m("li", {key: 4}), m("li", {key: 5})]))
return root.childNodes[0].childNodes.map(function(n) {return n.key}).join("") == "012345" return root.childNodes[0].childNodes.map(function(n) {return n.key}).join("") == "012345"
}) })
test(function() {
//https://github.com/lhorie/mithril.js/issues/157
var root = mock.document.createElement("div")
m.render(root, m("input", {value: "a"}))
m.render(root, m("input", {value: "aa"}))
return root.childNodes[0].childNodes.length == 0
})
test(function() {
//https://github.com/lhorie/mithril.js/issues/157
var root = mock.document.createElement("div")
m.render(root, m("br", {class: "a"}))
m.render(root, m("br", {class: "aa"}))
return root.childNodes[0].childNodes.length == 0
})
//end m.render //end m.render
//m.redraw //m.redraw