support undefined as an attribute value
This commit is contained in:
parent
c51e8b46c2
commit
290d3c8ffe
@ -20,7 +20,13 @@ export default class ItemJSON extends Item {
|
|||||||
this._content = new Array(len)
|
this._content = new Array(len)
|
||||||
for (let i = 0; i < len; i++) {
|
for (let i = 0; i < len; i++) {
|
||||||
const ctnt = decoder.readVarString()
|
const ctnt = decoder.readVarString()
|
||||||
this._content[i] = JSON.parse(ctnt)
|
let parsed
|
||||||
|
if (ctnt === 'undefined') {
|
||||||
|
parsed = undefined
|
||||||
|
} else {
|
||||||
|
parsed = JSON.parse(ctnt)
|
||||||
|
}
|
||||||
|
this._content[i] = parsed
|
||||||
}
|
}
|
||||||
return missing
|
return missing
|
||||||
}
|
}
|
||||||
@ -29,7 +35,14 @@ export default class ItemJSON extends Item {
|
|||||||
let len = this._content.length
|
let len = this._content.length
|
||||||
encoder.writeVarUint(len)
|
encoder.writeVarUint(len)
|
||||||
for (let i = 0; i < len; i++) {
|
for (let i = 0; i < len; i++) {
|
||||||
encoder.writeVarString(JSON.stringify(this._content[i]))
|
let encoded
|
||||||
|
let content = this._content[i]
|
||||||
|
if (content === undefined) {
|
||||||
|
encoded = 'undefined'
|
||||||
|
} else {
|
||||||
|
encoded = JSON.stringify(content)
|
||||||
|
}
|
||||||
|
encoder.writeVarString(encoded)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_logString () {
|
_logString () {
|
||||||
|
@ -136,6 +136,26 @@ export function applyChangesFromDom (dom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function reflectChangesOnDom (events) {
|
export function reflectChangesOnDom (events) {
|
||||||
|
// Make sure that no filtered attributes are applied to the structure
|
||||||
|
// if they were, delete them
|
||||||
|
events.forEach(event => {
|
||||||
|
const target = event.target
|
||||||
|
const keys = this._domFilter(target.nodeName, Array.from(event.keysChanged))
|
||||||
|
if (keys === null) {
|
||||||
|
target._delete()
|
||||||
|
} else {
|
||||||
|
const removeKeys = new Set() // is a copy of event.keysChanged
|
||||||
|
event.keysChanged.forEach(key => { removeKeys.add(key) })
|
||||||
|
keys.forEach(key => {
|
||||||
|
// remove all accepted keys from removeKeys
|
||||||
|
removeKeys.delete(key)
|
||||||
|
})
|
||||||
|
// remove the filtered attribute
|
||||||
|
removeKeys.forEach(key => {
|
||||||
|
target.removeAttribute(key)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
this._mutualExclude(() => {
|
this._mutualExclude(() => {
|
||||||
events.forEach(event => {
|
events.forEach(event => {
|
||||||
const yxml = event.target
|
const yxml = event.target
|
||||||
|
@ -41,6 +41,8 @@ test('basic map tests', async function map0 (t) {
|
|||||||
test('Basic get&set of Map property (converge via sync)', async function map1 (t) {
|
test('Basic get&set of Map property (converge via sync)', async function map1 (t) {
|
||||||
let { users, map0 } = await initArrays(t, { users: 2 })
|
let { users, map0 } = await initArrays(t, { users: 2 })
|
||||||
map0.set('stuff', 'stuffy')
|
map0.set('stuff', 'stuffy')
|
||||||
|
map0.set('undefined', undefined)
|
||||||
|
map0.set('null', null)
|
||||||
t.compare(map0.get('stuff'), 'stuffy')
|
t.compare(map0.get('stuff'), 'stuffy')
|
||||||
|
|
||||||
await flushAll(t, users)
|
await flushAll(t, users)
|
||||||
@ -48,6 +50,8 @@ test('Basic get&set of Map property (converge via sync)', async function map1 (t
|
|||||||
for (let user of users) {
|
for (let user of users) {
|
||||||
var u = user.get('map', Y.Map)
|
var u = user.get('map', Y.Map)
|
||||||
t.compare(u.get('stuff'), 'stuffy')
|
t.compare(u.get('stuff'), 'stuffy')
|
||||||
|
t.assert(u.get('undefined') === undefined, 'undefined')
|
||||||
|
t.compare(u.get('null'), null, 'null')
|
||||||
}
|
}
|
||||||
await compareUsers(t, users)
|
await compareUsers(t, users)
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user