virtual-dom
virtual-dom copied to clipboard
Elm uses invalid value in `domNode.insertBefore`
This Elm bug is seen when compiling (with --debug and Elm 0.19.1) the default counter-example of Ellie locally, and then running it with IE 10. IE 10 gives error "Invalid argument" at main.js, line 3710, character 5
The error happens on domNode.insertBefore line in following code:
case 7:
var data = patch.s;
var kids = data.e;
var i = data.v;
var theEnd = domNode.childNodes[i];
for (; i < kids.length; i++)
{
domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd);
}
return domNode;
Changing that line to following fixes this error:
domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd || null);
This confirms that Elm is using invalid value of theEnd, because only valid node or null is allowed there. So this is not a bug in IE 10, but a bug in Elm which is just seen in IE 10.
MDN documentation of insertBefore says:
referenceNode is not an optional parameter -- you must explicitly pass a Node or null. Failing to provide it or passing invalid values may behave differently in different browser versions.
Exact files used (just new project with elm init and direct copy from Ellie example). txt extension added as GitHub doesn't allow these otherwise.
elm.json.txt index.html.txt Main.elm.txt
ps. I don't have access to IE 10 for long enough to create better minimal example.
Testing with Firefox 68.2.0esr shows that just before the for-loop theEnd is undefined.
(So invalid value of theEnd is not limited to IE 10, it just doesn't cause problems e.g. in Firefox).
I'm also running into this issue where some implementations will prepend an element to the childNodes, or just throw an error, when given undefined as a value for the referenceNode.