diff --git a/docs/change-log.md b/docs/change-log.md index 3715279c..a6b93ab2 100644 --- a/docs/change-log.md +++ b/docs/change-log.md @@ -30,6 +30,7 @@ - render: remove some redundancy within the component initialization code ([#2213](https://github.com/MithrilJS/mithril.js/pull/2213)) - render: Align custom elements to work like normal elements, minus all the HTML-specific magic. ([#2221](https://github.com/MithrilJS/mithril.js/pull/2221)) - render: simplify component removal ([#2214](https://github.com/MithrilJS/mithril.js/pull/2214)) +- cast className using toString ([#2309](https://github.com/MithrilJS/mithril.js/pull/2309)) #### News diff --git a/render/hyperscript.js b/render/hyperscript.js index 36eabbc5..dce92e45 100644 --- a/render/hyperscript.js +++ b/render/hyperscript.js @@ -54,7 +54,7 @@ function execSelector(state, attrs, children) { if (className != null || state.attrs.className != null) attrs.className = className != null ? state.attrs.className != null - ? state.attrs.className + " " + className + ? String(state.attrs.className) + " " + String(className) : className : state.attrs.className != null ? state.attrs.className diff --git a/render/tests/test-hyperscript.js b/render/tests/test-hyperscript.js index bb4a0f62..c2b6c98d 100644 --- a/render/tests/test-hyperscript.js +++ b/render/tests/test-hyperscript.js @@ -358,6 +358,15 @@ o.spec("hyperscript", function() { o(vnode.attrs.className).equals("a") }) + o("casts className using toString like browsers", function() { + const className = { + valueOf: () => ".valueOf", + toString: () => "toString" + } + var vnode = m("custom-element" + className, {className: className}) + + o(vnode.attrs.className).equals("valueOf toString") + }) }) o.spec("children", function() { o("handles string single child", function() {