Compare commits
8 Commits
v13.0.0-52
...
v13.0.0-55
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29760cfe53 | ||
|
|
941a22b257 | ||
|
|
4aa41b98a9 | ||
|
|
079de07eff | ||
|
|
54453e87fa | ||
|
|
1b0e3659c3 | ||
|
|
641f426339 | ||
|
|
fcbca65d8f |
2
package-lock.json
generated
2
package-lock.json
generated
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "yjs",
|
"name": "yjs",
|
||||||
"version": "13.0.0-52",
|
"version": "13.0.0-55",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "yjs",
|
"name": "yjs",
|
||||||
"version": "13.0.0-52",
|
"version": "13.0.0-55",
|
||||||
"description": "A framework for real-time p2p shared editing on any data",
|
"description": "A framework for real-time p2p shared editing on any data",
|
||||||
"main": "./y.node.js",
|
"main": "./y.node.js",
|
||||||
"browser": "./y.js",
|
"browser": "./y.js",
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import { readDeleteSet, writeDeleteSet } from './deleteSet.js'
|
|||||||
import BinaryEncoder from '../Binary/Encoder.js'
|
import BinaryEncoder from '../Binary/Encoder.js'
|
||||||
|
|
||||||
export function fromBinary (y, decoder) {
|
export function fromBinary (y, decoder) {
|
||||||
integrateRemoteStructs(y, decoder)
|
y.transact(function () {
|
||||||
readDeleteSet(y, decoder)
|
integrateRemoteStructs(y, decoder)
|
||||||
|
readDeleteSet(y, decoder)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function toBinary (y) {
|
export function toBinary (y) {
|
||||||
|
|||||||
@@ -77,18 +77,19 @@ export default class Item {
|
|||||||
if (parent._redone !== null) {
|
if (parent._redone !== null) {
|
||||||
parent = parent._redone
|
parent = parent._redone
|
||||||
// find next cloned items
|
// find next cloned items
|
||||||
while (left !== null && left._redone === null) {
|
while (left !== null) {
|
||||||
|
if (left._redone !== null && left._redone._parent === parent) {
|
||||||
|
left = left._redone
|
||||||
|
break
|
||||||
|
}
|
||||||
left = left._left
|
left = left._left
|
||||||
}
|
}
|
||||||
if (left !== null) {
|
while (right !== null) {
|
||||||
left = left._redone
|
if (right._redone !== null && right._redone._parent === parent) {
|
||||||
}
|
right = right._redone
|
||||||
while (right !== null && right._redone === null) {
|
}
|
||||||
right = right._right
|
right = right._right
|
||||||
}
|
}
|
||||||
if (right !== null) {
|
|
||||||
right = right._redone
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
struct._origin = left
|
struct._origin = left
|
||||||
struct._left = left
|
struct._left = left
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ export default class YXmlElement extends YXmlFragment {
|
|||||||
super()
|
super()
|
||||||
this.nodeName = null
|
this.nodeName = null
|
||||||
this._scrollElement = null
|
this._scrollElement = null
|
||||||
|
if (typeof arg2 === 'function') {
|
||||||
|
this._domFilter = arg2
|
||||||
|
}
|
||||||
if (typeof arg1 === 'string') {
|
if (typeof arg1 === 'string') {
|
||||||
this.nodeName = arg1.toUpperCase()
|
this.nodeName = arg1.toUpperCase()
|
||||||
} else if (arg1 != null && arg1.nodeType != null && arg1.nodeType === arg1.ELEMENT_NODE) {
|
} else if (arg1 != null && arg1.nodeType != null && arg1.nodeType === arg1.ELEMENT_NODE) {
|
||||||
@@ -16,9 +19,6 @@ export default class YXmlElement extends YXmlFragment {
|
|||||||
} else {
|
} else {
|
||||||
this.nodeName = 'UNDEFINED'
|
this.nodeName = 'UNDEFINED'
|
||||||
}
|
}
|
||||||
if (typeof arg2 === 'function') {
|
|
||||||
this._domFilter = arg2
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
_copy () {
|
_copy () {
|
||||||
let struct = super._copy()
|
let struct = super._copy()
|
||||||
@@ -39,7 +39,7 @@ export default class YXmlElement extends YXmlFragment {
|
|||||||
// get attribute via getAttribute for custom element support (some write something different in attr.value)
|
// get attribute via getAttribute for custom element support (some write something different in attr.value)
|
||||||
attributes.set(attr.name, dom.getAttribute(attr.name))
|
attributes.set(attr.name, dom.getAttribute(attr.name))
|
||||||
}
|
}
|
||||||
attributes = this._domFilter(dom, attributes)
|
attributes = this._domFilter(dom.nodeName, attributes)
|
||||||
attributes.forEach((value, name) => {
|
attributes.forEach((value, name) => {
|
||||||
this.setAttribute(name, value)
|
this.setAttribute(name, value)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ export default class UndoManager {
|
|||||||
this._scope = scope
|
this._scope = scope
|
||||||
this._undoing = false
|
this._undoing = false
|
||||||
this._redoing = false
|
this._redoing = false
|
||||||
|
this._lastTransactionWasUndo = false
|
||||||
const y = scope._y
|
const y = scope._y
|
||||||
this.y = y
|
this.y = y
|
||||||
y.on('afterTransaction', (y, transaction, remote) => {
|
y.on('afterTransaction', (y, transaction, remote) => {
|
||||||
@@ -80,7 +81,12 @@ export default class UndoManager {
|
|||||||
let reverseOperation = new ReverseOperation(y, transaction)
|
let reverseOperation = new ReverseOperation(y, transaction)
|
||||||
if (!this._undoing) {
|
if (!this._undoing) {
|
||||||
let lastUndoOp = this._undoBuffer.length > 0 ? this._undoBuffer[this._undoBuffer.length - 1] : null
|
let lastUndoOp = this._undoBuffer.length > 0 ? this._undoBuffer[this._undoBuffer.length - 1] : null
|
||||||
if (lastUndoOp !== null && reverseOperation.created - lastUndoOp.created <= options.captureTimeout) {
|
if (
|
||||||
|
this._redoing === false &&
|
||||||
|
this._lastTransactionWasUndo === false &&
|
||||||
|
lastUndoOp !== null &&
|
||||||
|
reverseOperation.created - lastUndoOp.created <= options.captureTimeout
|
||||||
|
) {
|
||||||
lastUndoOp.created = reverseOperation.created
|
lastUndoOp.created = reverseOperation.created
|
||||||
if (reverseOperation.toState !== null) {
|
if (reverseOperation.toState !== null) {
|
||||||
lastUndoOp.toState = reverseOperation.toState
|
lastUndoOp.toState = reverseOperation.toState
|
||||||
@@ -90,12 +96,14 @@ export default class UndoManager {
|
|||||||
}
|
}
|
||||||
reverseOperation.deletedStructs.forEach(lastUndoOp.deletedStructs.add, lastUndoOp.deletedStructs)
|
reverseOperation.deletedStructs.forEach(lastUndoOp.deletedStructs.add, lastUndoOp.deletedStructs)
|
||||||
} else {
|
} else {
|
||||||
|
this._lastTransactionWasUndo = false
|
||||||
this._undoBuffer.push(reverseOperation)
|
this._undoBuffer.push(reverseOperation)
|
||||||
}
|
}
|
||||||
if (!this._redoing) {
|
if (!this._redoing) {
|
||||||
this._redoBuffer = []
|
this._redoBuffer = []
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
this._lastTransactionWasUndo = true
|
||||||
this._redoBuffer.push(reverseOperation)
|
this._redoBuffer.push(reverseOperation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
y.node.js.map
Normal file
1
y.node.js.map
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user