Merge pull request #1942 from s-ilya/hypertext-shared-attrs
Handle shared attributes object in hyperscript
This commit is contained in:
commit
c9629ffcbc
3 changed files with 35 additions and 0 deletions
|
|
@ -36,6 +36,7 @@
|
|||
#### Bug fixes:
|
||||
|
||||
- core: don't call `onremove` on the children of components that return null from the view [#1921](https://github.com/MithrilJS/mithril.js/issues/1921) [octavore](https://github.com/octavore) ([#1922](https://github.com/MithrilJS/mithril.js/pull/1922))
|
||||
- hypertext: correct handling of shared attributes object passed to `m()`. Will copy attributes when it's necessary [#1941](https://github.com/MithrilJS/mithril.js/issues/1941) [s-ilya](https://github.com/s-ilya) ([#1942](https://github.com/MithrilJS/mithril.js/pull/1942))
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@ var selectorParser = /(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["
|
|||
var selectorCache = {}
|
||||
var hasOwn = {}.hasOwnProperty
|
||||
|
||||
function isEmpty(object) {
|
||||
for (var key in object) if (hasOwn.call(object, key)) return false
|
||||
return true
|
||||
}
|
||||
|
||||
function compileSelector(selector) {
|
||||
var match, tag = "div", classes = [], attrs = {}
|
||||
while (match = selectorParser.exec(selector)) {
|
||||
|
|
@ -28,6 +33,18 @@ function execSelector(state, attrs, children) {
|
|||
var hasAttrs = false, childList, text
|
||||
var className = attrs.className || attrs.class
|
||||
|
||||
if (!isEmpty(state.attrs) && !isEmpty(attrs)) {
|
||||
var newAttrs = {}
|
||||
|
||||
for(var key in attrs) {
|
||||
if (hasOwn.call(attrs, key)) {
|
||||
newAttrs[key] = attrs[key]
|
||||
}
|
||||
}
|
||||
|
||||
attrs = newAttrs
|
||||
}
|
||||
|
||||
for (var key in state.attrs) {
|
||||
if (hasOwn.call(state.attrs, key)) {
|
||||
attrs[key] = state.attrs[key]
|
||||
|
|
|
|||
|
|
@ -507,6 +507,23 @@ o.spec("hyperscript", function() {
|
|||
o(vnode.children[0].tag).equals("i")
|
||||
o(vnode.children[1].tag).equals("s")
|
||||
})
|
||||
o("handles shared attrs", function() {
|
||||
var attrs = {a: "b"}
|
||||
|
||||
var nodeA = m(".a", attrs)
|
||||
var nodeB = m(".b", attrs)
|
||||
|
||||
o(nodeA.attrs.className).equals("a")
|
||||
o(nodeA.attrs.a).equals("b")
|
||||
|
||||
o(nodeB.attrs.className).equals("b")
|
||||
o(nodeB.attrs.a).equals("b")
|
||||
})
|
||||
o("doesnt modify passed attributes object", function() {
|
||||
var attrs = {a: "b"}
|
||||
m(".a", attrs)
|
||||
o(attrs).deepEquals({a: "b"})
|
||||
})
|
||||
o("handles fragment children without attr unwrapped", function() {
|
||||
var vnode = m("div", [m("i")], [m("s")])
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue