fix several y-xml bugs
This commit is contained in:
parent
0ba97d78f8
commit
445dd3e0da
@ -87,16 +87,18 @@ export default class Item {
|
|||||||
return this._right
|
return this._right
|
||||||
}
|
}
|
||||||
_delete (y, createDelete = true) {
|
_delete (y, createDelete = true) {
|
||||||
this._deleted = true
|
if (!this._deleted) {
|
||||||
y.ds.markDeleted(this._id, this._length)
|
this._deleted = true
|
||||||
if (createDelete) {
|
y.ds.markDeleted(this._id, this._length)
|
||||||
let del = new Delete()
|
if (createDelete) {
|
||||||
del._targetID = this._id
|
let del = new Delete()
|
||||||
del._length = this._length
|
del._targetID = this._id
|
||||||
del._integrate(y, true)
|
del._length = this._length
|
||||||
|
del._integrate(y, true)
|
||||||
|
}
|
||||||
|
transactionTypeChanged(y, this._parent, this._parentSub)
|
||||||
|
y._transaction.deletedStructs.add(this)
|
||||||
}
|
}
|
||||||
transactionTypeChanged(y, this._parent, this._parentSub)
|
|
||||||
y._transaction.deletedStructs.add(this)
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* This is called right before this struct receives any children.
|
* This is called right before this struct receives any children.
|
||||||
|
@ -56,7 +56,7 @@ export default class YMap extends Type {
|
|||||||
this._transact(y => {
|
this._transact(y => {
|
||||||
const old = this._map.get(key) || null
|
const old = this._map.get(key) || null
|
||||||
if (old !== null) {
|
if (old !== null) {
|
||||||
if (old instanceof ItemJSON && old._content[0] === value) {
|
if (old.constructor === ItemJSON && !old._deleted && old._content[0] === value) {
|
||||||
// Trying to overwrite with same value
|
// Trying to overwrite with same value
|
||||||
// break here
|
// break here
|
||||||
return value
|
return value
|
||||||
|
@ -47,6 +47,11 @@ export default class YXmlElement extends YXmlFragment {
|
|||||||
return dom
|
return dom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_bindToDom (dom, _document) {
|
||||||
|
_document = _document || document
|
||||||
|
this._dom = dom
|
||||||
|
dom._yxml = this
|
||||||
|
}
|
||||||
_fromBinary (y, decoder) {
|
_fromBinary (y, decoder) {
|
||||||
const missing = super._fromBinary(y, decoder)
|
const missing = super._fromBinary(y, decoder)
|
||||||
this.nodeName = decoder.readVarString()
|
this.nodeName = decoder.readVarString()
|
||||||
|
@ -101,9 +101,11 @@ export default class YXmlFragment extends YArray {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
if (this._domObserver !== null) {
|
if (this._domObserver !== null) {
|
||||||
this._domObserver.takeRecords()
|
this._domObserver.takeRecords()
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
token = true
|
token = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -216,9 +218,7 @@ export default class YXmlFragment extends YArray {
|
|||||||
_document = _document || document
|
_document = _document || document
|
||||||
this._dom = dom
|
this._dom = dom
|
||||||
dom._yxml = this
|
dom._yxml = this
|
||||||
// TODO: refine this..
|
if (this._parent === null) {
|
||||||
if ((this.constructor !== YXmlFragment && this._parent !== this._y) || this._parent === null) {
|
|
||||||
// TODO: only top level YXmlFragment can bind. Also allow YXmlElements..
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this._y.on('beforeTransaction', beforeTransactionSelectionFixer)
|
this._y.on('beforeTransaction', beforeTransactionSelectionFixer)
|
||||||
@ -320,6 +320,9 @@ export default class YXmlFragment extends YArray {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
for (let dom of diffChildren) {
|
for (let dom of diffChildren) {
|
||||||
|
if (dom.yOnChildrenChanged !== undefined) {
|
||||||
|
dom.yOnChildrenChanged()
|
||||||
|
}
|
||||||
if (dom._yxml != null && dom._yxml !== false) {
|
if (dom._yxml != null && dom._yxml !== false) {
|
||||||
applyChangesFromDom(dom)
|
applyChangesFromDom(dom)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user