fix undo-redo
This commit is contained in:
parent
a81a2cd553
commit
5d3922cb64
@ -55,14 +55,16 @@ export default class Item {
|
||||
/**
|
||||
* Copy the effect of struct
|
||||
*/
|
||||
_copy () {
|
||||
_copy (undeleteChildren, copyPosition) {
|
||||
let struct = new this.constructor()
|
||||
struct._origin = this._left
|
||||
struct._left = this._left
|
||||
struct._right = this
|
||||
struct._right_origin = this
|
||||
struct._parent = this._parent
|
||||
struct._parentSub = this._parentSub
|
||||
if (copyPosition) {
|
||||
struct._origin = this._left
|
||||
struct._left = this._left
|
||||
struct._right = this
|
||||
struct._right_origin = this
|
||||
struct._parent = this._parent
|
||||
struct._parentSub = this._parentSub
|
||||
}
|
||||
return struct
|
||||
}
|
||||
get _lastId () {
|
||||
|
@ -6,8 +6,8 @@ export default class ItemJSON extends Item {
|
||||
super()
|
||||
this._content = null
|
||||
}
|
||||
_copy () {
|
||||
let struct = super._copy()
|
||||
_copy (undeleteChildren, copyPosition) {
|
||||
let struct = super._copy(undeleteChildren, copyPosition)
|
||||
struct._content = this._content
|
||||
return struct
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ export default class ItemString extends Item {
|
||||
super()
|
||||
this._content = null
|
||||
}
|
||||
_copy () {
|
||||
let struct = super._copy()
|
||||
_copy (undeleteChildren, copyPosition) {
|
||||
let struct = super._copy(undeleteChildren, copyPosition)
|
||||
struct._content = this._content
|
||||
return struct
|
||||
}
|
||||
|
@ -79,15 +79,16 @@ export default class Type extends Item {
|
||||
type = type._parent
|
||||
}
|
||||
}
|
||||
_copy (undeleteChildren) {
|
||||
let copy = super._copy()
|
||||
_copy (undeleteChildren, copyPosition) {
|
||||
let copy = super._copy(undeleteChildren, copyPosition)
|
||||
let map = new Map()
|
||||
copy._map = map
|
||||
for (let [key, value] of this._map) {
|
||||
if (undeleteChildren.has(value) || !value.deleted) {
|
||||
let _item = value._copy(undeleteChildren)
|
||||
let _item = value._copy(undeleteChildren, false)
|
||||
_item._parent = copy
|
||||
map.set(key, value._copy(undeleteChildren))
|
||||
_item._parentSub = key
|
||||
map.set(key, _item)
|
||||
}
|
||||
}
|
||||
let prevUndeleted = null
|
||||
@ -95,7 +96,7 @@ export default class Type extends Item {
|
||||
let item = this._start
|
||||
while (item !== null) {
|
||||
if (undeleteChildren.has(item) || !item.deleted) {
|
||||
let _item = item._copy(undeleteChildren)
|
||||
let _item = item._copy(undeleteChildren, false)
|
||||
_item._left = prevUndeleted
|
||||
_item._origin = prevUndeleted
|
||||
_item._right = null
|
||||
|
@ -20,8 +20,8 @@ export default class YXmlElement extends YXmlFragment {
|
||||
this._domFilter = arg2
|
||||
}
|
||||
}
|
||||
_copy (undeleteChildren) {
|
||||
let struct = super._copy(undeleteChildren)
|
||||
_copy (undeleteChildren, copyPosition) {
|
||||
let struct = super._copy(undeleteChildren, copyPosition)
|
||||
struct.nodeName = this.nodeName
|
||||
return struct
|
||||
}
|
||||
|
@ -152,18 +152,20 @@ export default class YXmlFragment extends YArray {
|
||||
attributes.set(key, attrs[key])
|
||||
}
|
||||
}
|
||||
let result = this._domFilter(this.nodeName, new Map(attributes))
|
||||
if (result === null) {
|
||||
this._delete(this._y)
|
||||
} else {
|
||||
attributes.forEach((value, key) => {
|
||||
if (!result.has(key)) {
|
||||
this.removeAttribute(key)
|
||||
}
|
||||
this._y.transact(() => {
|
||||
let result = this._domFilter(this.nodeName, new Map(attributes))
|
||||
if (result === null) {
|
||||
this._delete(this._y)
|
||||
} else {
|
||||
attributes.forEach((value, key) => {
|
||||
if (!result.has(key)) {
|
||||
this.removeAttribute(key)
|
||||
}
|
||||
})
|
||||
}
|
||||
this.forEach(xml => {
|
||||
xml.setDomFilter(f)
|
||||
})
|
||||
}
|
||||
this.forEach(xml => {
|
||||
xml.setDomFilter(f)
|
||||
})
|
||||
}
|
||||
_callObserver (transaction, parentSubs, remote) {
|
||||
|
@ -14,6 +14,11 @@ export default class YXmlHook extends YMap {
|
||||
getHook(hookName).fillType(dom, this)
|
||||
}
|
||||
}
|
||||
_copy (undeleteChildren, copyPosition) {
|
||||
const struct = super._copy(undeleteChildren, copyPosition)
|
||||
struct.hookName = this.hookName
|
||||
return struct
|
||||
}
|
||||
getDom (_document) {
|
||||
_document = _document || document
|
||||
if (this._dom === null) {
|
||||
|
@ -50,7 +50,7 @@ function applyReverseOperation (y, scope, reverseBuffer) {
|
||||
)
|
||||
) {
|
||||
performedUndo = true
|
||||
op = op._copy(undoOp.deletedStructs)
|
||||
op = op._copy(undoOp.deletedStructs, true)
|
||||
op._integrate(y)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user