Compare commits

..

1 Commits

Author SHA1 Message Date
Kevin Jahns
b4f06e8f62 v13.0.0-29 -- distribution files 2017-11-10 18:46:20 -08:00
21 changed files with 110 additions and 149 deletions

View File

@@ -1,15 +1,4 @@
/* global Y, HTMLElement, customElements */ /* global Y */
class MagicTable extends HTMLElement {
constructor () {
super()
var shadow = this.attachShadow({mode: 'open'})
setTimeout(() => {
shadow.append(this.childNodes[0])
}, 1000)
}
}
customElements.define('magic-table', MagicTable)
// initialize a shared object. This function call returns a promise! // initialize a shared object. This function call returns a promise!
let y = new Y({ let y = new Y({
@@ -28,14 +17,17 @@ window.onload = function () {
window.yXmlType.bindToDom(document.body) window.yXmlType.bindToDom(document.body)
} }
window.undoManager = new Y.utils.UndoManager(window.yXmlType, { window.undoManager = new Y.utils.UndoManager(window.yXmlType, {
captureTimeout: 500 captureTimeout: 0
}) })
document.onkeydown = function interceptUndoRedo (e) { document.onkeydown = function interceptUndoRedo (e) {
if (e.keyCode === 90 && e.metaKey) { if (e.keyCode === 90 && e.metaKey) {
console.log('uidtaren')
if (!e.shiftKey) { if (!e.shiftKey) {
console.info('Undo!')
window.undoManager.undo() window.undoManager.undo()
} else { } else {
console.info('Redo!')
window.undoManager.redo() window.undoManager.redo()
} }
e.preventDefault() e.preventDefault()

2
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "yjs", "name": "yjs",
"version": "13.0.0-30", "version": "13.0.0-29",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "yjs", "name": "yjs",
"version": "13.0.0-30", "version": "13.0.0-29",
"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",

View File

@@ -5,13 +5,9 @@ import commonjs from 'rollup-plugin-commonjs'
var pkg = require('./package.json') var pkg = require('./package.json')
export default { export default {
input: 'src/Y.js', entry: 'src/Y.js',
name: 'Y', moduleName: 'Y',
sourcemap: true, format: 'umd',
output: {
file: 'y.js',
format: 'umd'
},
plugins: [ plugins: [
nodeResolve({ nodeResolve({
main: true, main: true,
@@ -36,6 +32,8 @@ export default {
} }
}) })
], ],
dest: 'y.js',
sourceMap: true,
banner: ` banner: `
/** /**
* ${pkg.name} - ${pkg.description} * ${pkg.name} - ${pkg.description}

View File

@@ -3,13 +3,9 @@ import commonjs from 'rollup-plugin-commonjs'
var pkg = require('./package.json') var pkg = require('./package.json')
export default { export default {
input: 'src/y-dist.cjs.js', entry: 'src/y-dist.cjs.js',
nameame: 'Y', moduleName: 'Y',
sourcemap: true, format: 'cjs',
output: {
file: 'y.node.js',
format: 'cjs'
},
plugins: [ plugins: [
nodeResolve({ nodeResolve({
main: true, main: true,
@@ -18,6 +14,8 @@ export default {
}), }),
commonjs() commonjs()
], ],
dest: 'y.node.js',
sourceMap: true,
banner: ` banner: `
/** /**
* ${pkg.name} - ${pkg.description} * ${pkg.name} - ${pkg.description}

View File

@@ -3,13 +3,9 @@ import commonjs from 'rollup-plugin-commonjs'
import multiEntry from 'rollup-plugin-multi-entry' import multiEntry from 'rollup-plugin-multi-entry'
export default { export default {
input: 'test/y-xml.tests.js', entry: 'test/y-xml.tests.js',
name: 'y-tests', moduleName: 'y-tests',
sourcemap: true, format: 'umd',
output: {
file: 'y.test.js',
format: 'umd'
},
plugins: [ plugins: [
nodeResolve({ nodeResolve({
main: true, main: true,
@@ -18,5 +14,7 @@ export default {
}), }),
commonjs(), commonjs(),
multiEntry() multiEntry()
] ],
dest: 'y.test.js',
sourceMap: true
} }

View File

@@ -65,9 +65,9 @@ export default class Type extends Item {
} }
return path return path
} }
_callEventHandler (transaction, event) { _callEventHandler (event) {
const changedParentTypes = transaction.changedParentTypes const changedParentTypes = this._y._transaction.changedParentTypes
this._eventHandler.callEventListeners(transaction, event) this._eventHandler.callEventListeners(event)
let type = this let type = this
while (type !== this._y) { while (type !== this._y) {
let events = changedParentTypes.get(type) let events = changedParentTypes.get(type)

View File

@@ -12,8 +12,8 @@ class YArrayEvent extends YEvent {
} }
export default class YArray extends Type { export default class YArray extends Type {
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YArrayEvent(this, remote)) this._callEventHandler(new YArrayEvent(this, remote))
} }
get (pos) { get (pos) {
let n = this._start let n = this._start

View File

@@ -13,8 +13,8 @@ class YMapEvent extends YEvent {
} }
export default class YMap extends Type { export default class YMap extends Type {
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YMapEvent(this, parentSubs, remote)) this._callEventHandler(new YMapEvent(this, parentSubs, remote))
} }
toJSON () { toJSON () {
const map = {} const map = {}

View File

@@ -142,8 +142,8 @@ export default class YXmlFragment extends YArray {
xml.setDomFilter(f) xml.setDomFilter(f)
}) })
} }
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YXmlEvent(this, parentSubs, remote)) this._callEventHandler(new YXmlEvent(this, parentSubs, remote))
} }
toString () { toString () {
return this.map(xml => xml.toString()).join('') return this.map(xml => xml.toString()).join('')

View File

@@ -7,7 +7,7 @@ let relativeSelection = null
export let beforeTransactionSelectionFixer export let beforeTransactionSelectionFixer
if (typeof getSelection !== 'undefined') { if (typeof getSelection !== 'undefined') {
beforeTransactionSelectionFixer = function _beforeTransactionSelectionFixer (y, transaction, remote) { beforeTransactionSelectionFixer = function _beforeTransactionSelectionFixer (y, remote) {
if (!remote) { if (!remote) {
return return
} }
@@ -30,7 +30,7 @@ if (typeof getSelection !== 'undefined') {
beforeTransactionSelectionFixer = function _fakeBeforeTransactionSelectionFixer () {} beforeTransactionSelectionFixer = function _fakeBeforeTransactionSelectionFixer () {}
} }
export function afterTransactionSelectionFixer (y, transaction, remote) { export function afterTransactionSelectionFixer (y, remote) {
if (relativeSelection === null || !remote) { if (relativeSelection === null || !remote) {
return return
} }

View File

@@ -141,16 +141,12 @@ export function reflectChangesOnDom (events) {
/* /*
events.forEach(event => { events.forEach(event => {
const target = event.target const target = event.target
if (event.attributesChanged === undefined) { const keys = this._domFilter(target.nodeName, Array.from(event.keysChanged))
// event.target is Y.XmlText
return
}
const keys = this._domFilter(target.nodeName, Array.from(event.attributesChanged))
if (keys === null) { if (keys === null) {
target._delete() target._delete()
} else { } else {
const removeKeys = new Set() // is a copy of event.attributesChanged const removeKeys = new Set() // is a copy of event.keysChanged
event.attributesChanged.forEach(key => { removeKeys.add(key) }) event.keysChanged.forEach(key => { removeKeys.add(key) })
keys.forEach(key => { keys.forEach(key => {
// remove all accepted keys from removeKeys // remove all accepted keys from removeKeys
removeKeys.delete(key) removeKeys.delete(key)

View File

@@ -17,7 +17,7 @@ export default class EventHandler {
removeAllEventListeners () { removeAllEventListeners () {
this.eventListeners = [] this.eventListeners = []
} }
callEventListeners (transaction, event) { callEventListeners (event) {
for (var i = 0; i < this.eventListeners.length; i++) { for (var i = 0; i < this.eventListeners.length; i++) {
try { try {
const f = this.eventListeners[i] const f = this.eventListeners[i]

View File

@@ -1,16 +1,16 @@
import ID from './ID.js' import ID from './ID.js'
class ReverseOperation { class ReverseOperation {
constructor (y, transaction) { constructor (y) {
this.created = new Date() this.created = new Date()
const beforeState = transaction.beforeState const beforeState = y._transaction.beforeState
this.toState = new ID(y.userID, y.ss.getState(y.userID) - 1) this.toState = new ID(y.userID, y.ss.getState(y.userID) - 1)
if (beforeState.has(y.userID)) { if (beforeState.has(y.userID)) {
this.fromState = new ID(y.userID, beforeState.get(y.userID)) this.fromState = new ID(y.userID, beforeState.get(y.userID))
} else { } else {
this.fromState = this.toState this.fromState = this.toState
} }
this.deletedStructs = transaction.deletedStructs this.deletedStructs = y._transaction.deletedStructs
} }
} }
@@ -70,9 +70,9 @@ export default class UndoManager {
this._redoing = false this._redoing = 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, remote) => {
if (!remote && transaction.changedParentTypes.has(scope)) { if (!remote && y._transaction.changedParentTypes.has(scope)) {
let reverseOperation = new ReverseOperation(y, transaction) let reverseOperation = new ReverseOperation(y)
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 (lastUndoOp !== null && reverseOperation.created - lastUndoOp.created <= options.captureTimeout) {

View File

@@ -15,7 +15,6 @@ import YMap from './Type/YMap.js'
import YText from './Type/YText.js' import YText from './Type/YText.js'
import { YXmlFragment, YXmlElement, YXmlText } from './Type/y-xml/y-xml.js' import { YXmlFragment, YXmlElement, YXmlText } from './Type/y-xml/y-xml.js'
import BinaryDecoder from './Binary/Decoder.js' import BinaryDecoder from './Binary/Decoder.js'
import { getRelativePosition, fromRelativePosition } from './Util/relativePosition.js'
import debug from 'debug' import debug from 'debug'
import Transaction from './Transaction.js' import Transaction from './Transaction.js'
@@ -45,8 +44,8 @@ export default class Y extends NamedEventHandler {
transact (f, remote = false) { transact (f, remote = false) {
let initialCall = this._transaction === null let initialCall = this._transaction === null
if (initialCall) { if (initialCall) {
this.emit('beforeTransaction', this, remote)
this._transaction = new Transaction(this) this._transaction = new Transaction(this)
this.emit('beforeTransaction', this, this._transaction, remote)
} }
try { try {
f(this) f(this)
@@ -54,15 +53,13 @@ export default class Y extends NamedEventHandler {
console.error(e) console.error(e)
} }
if (initialCall) { if (initialCall) {
const transaction = this._transaction
this._transaction = null
// emit change events on changed types // emit change events on changed types
transaction.changedTypes.forEach(function (subs, type) { this._transaction.changedTypes.forEach(function (subs, type) {
if (!type._deleted) { if (!type._deleted) {
type._callObserver(transaction, subs, remote) type._callObserver(subs, remote)
} }
}) })
transaction.changedParentTypes.forEach(function (events, type) { this._transaction.changedParentTypes.forEach(function (events, type) {
if (!type._deleted) { if (!type._deleted) {
events = events events = events
.filter(event => .filter(event =>
@@ -74,11 +71,12 @@ export default class Y extends NamedEventHandler {
}) })
// we don't have to check for events.length // we don't have to check for events.length
// because there is no way events is empty.. // because there is no way events is empty..
type._deepEventHandler.callEventListeners(transaction, events) type._deepEventHandler.callEventListeners(events)
} }
}) })
// when all changes & events are processed, emit afterTransaction event // when all changes & events are processed, emit afterTransaction event
this.emit('afterTransaction', this, transaction, remote) this.emit('afterTransaction', this, remote)
this._transaction = null
} }
} }
// fake _start for root properties (y.set('name', type)) // fake _start for root properties (y.set('name', type))
@@ -170,9 +168,7 @@ Y.XmlText = YXmlText
Y.utils = { Y.utils = {
BinaryDecoder, BinaryDecoder,
UndoManager, UndoManager
getRelativePosition,
fromRelativePosition
} }
Y.debug = debug Y.debug = debug

8
y.js

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
/** /**
* yjs - A framework for real-time p2p shared editing on any data * yjs - A framework for real-time p2p shared editing on any data
* @version v13.0.0-30 * @version v13.0.0-29
* @license MIT * @license MIT
*/ */
@@ -1899,7 +1899,7 @@ class EventHandler {
removeAllEventListeners () { removeAllEventListeners () {
this.eventListeners = []; this.eventListeners = [];
} }
callEventListeners (transaction, event) { callEventListeners (event) {
for (var i = 0; i < this.eventListeners.length; i++) { for (var i = 0; i < this.eventListeners.length; i++) {
try { try {
const f = this.eventListeners[i]; const f = this.eventListeners[i];
@@ -1966,9 +1966,9 @@ class Type extends Item {
} }
return path return path
} }
_callEventHandler (transaction, event) { _callEventHandler (event) {
const changedParentTypes = transaction.changedParentTypes; const changedParentTypes = this._y._transaction.changedParentTypes;
this._eventHandler.callEventListeners(transaction, event); this._eventHandler.callEventListeners(event);
let type = this; let type = this;
while (type !== this._y) { while (type !== this._y) {
let events = changedParentTypes.get(type); let events = changedParentTypes.get(type);
@@ -2211,8 +2211,8 @@ class YArrayEvent extends YEvent {
} }
class YArray extends Type { class YArray extends Type {
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YArrayEvent(this, remote)); this._callEventHandler(new YArrayEvent(this, remote));
} }
get (pos) { get (pos) {
let n = this._start; let n = this._start;
@@ -2429,8 +2429,8 @@ class YMapEvent extends YEvent {
} }
class YMap extends Type { class YMap extends Type {
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YMapEvent(this, parentSubs, remote)); this._callEventHandler(new YMapEvent(this, parentSubs, remote));
} }
toJSON () { toJSON () {
const map = {}; const map = {};
@@ -2782,16 +2782,12 @@ function reflectChangesOnDom (events) {
/* /*
events.forEach(event => { events.forEach(event => {
const target = event.target const target = event.target
if (event.attributesChanged === undefined) { const keys = this._domFilter(target.nodeName, Array.from(event.keysChanged))
// event.target is Y.XmlText
return
}
const keys = this._domFilter(target.nodeName, Array.from(event.attributesChanged))
if (keys === null) { if (keys === null) {
target._delete() target._delete()
} else { } else {
const removeKeys = new Set() // is a copy of event.attributesChanged const removeKeys = new Set() // is a copy of event.keysChanged
event.attributesChanged.forEach(key => { removeKeys.add(key) }) event.keysChanged.forEach(key => { removeKeys.add(key) })
keys.forEach(key => { keys.forEach(key => {
// remove all accepted keys from removeKeys // remove all accepted keys from removeKeys
removeKeys.delete(key) removeKeys.delete(key)
@@ -2956,7 +2952,7 @@ let relativeSelection = null;
let beforeTransactionSelectionFixer; let beforeTransactionSelectionFixer;
if (typeof getSelection !== 'undefined') { if (typeof getSelection !== 'undefined') {
beforeTransactionSelectionFixer = function _beforeTransactionSelectionFixer (y, transaction, remote) { beforeTransactionSelectionFixer = function _beforeTransactionSelectionFixer (y, remote) {
if (!remote) { if (!remote) {
return return
} }
@@ -2979,7 +2975,7 @@ if (typeof getSelection !== 'undefined') {
beforeTransactionSelectionFixer = function _fakeBeforeTransactionSelectionFixer () {}; beforeTransactionSelectionFixer = function _fakeBeforeTransactionSelectionFixer () {};
} }
function afterTransactionSelectionFixer (y, transaction, remote) { function afterTransactionSelectionFixer (y, remote) {
if (relativeSelection === null || !remote) { if (relativeSelection === null || !remote) {
return return
} }
@@ -3911,8 +3907,8 @@ class YXmlFragment extends YArray {
xml.setDomFilter(f); xml.setDomFilter(f);
}); });
} }
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YXmlEvent(this, parentSubs, remote)); this._callEventHandler(new YXmlEvent(this, parentSubs, remote));
} }
toString () { toString () {
return this.map(xml => xml.toString()).join('') return this.map(xml => xml.toString()).join('')
@@ -4409,16 +4405,16 @@ class NamedEventHandler {
} }
class ReverseOperation { class ReverseOperation {
constructor (y, transaction) { constructor (y) {
this.created = new Date(); this.created = new Date();
const beforeState = transaction.beforeState; const beforeState = y._transaction.beforeState;
this.toState = new ID(y.userID, y.ss.getState(y.userID) - 1); this.toState = new ID(y.userID, y.ss.getState(y.userID) - 1);
if (beforeState.has(y.userID)) { if (beforeState.has(y.userID)) {
this.fromState = new ID(y.userID, beforeState.get(y.userID)); this.fromState = new ID(y.userID, beforeState.get(y.userID));
} else { } else {
this.fromState = this.toState; this.fromState = this.toState;
} }
this.deletedStructs = transaction.deletedStructs; this.deletedStructs = y._transaction.deletedStructs;
} }
} }
@@ -4478,9 +4474,9 @@ class UndoManager {
this._redoing = false; this._redoing = 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, remote) => {
if (!remote && transaction.changedParentTypes.has(scope)) { if (!remote && y._transaction.changedParentTypes.has(scope)) {
let reverseOperation = new ReverseOperation(y, transaction); let reverseOperation = new ReverseOperation(y);
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 (lastUndoOp !== null && reverseOperation.created - lastUndoOp.created <= options.captureTimeout) {
@@ -5436,8 +5432,8 @@ class Y$1 extends NamedEventHandler {
transact (f, remote = false) { transact (f, remote = false) {
let initialCall = this._transaction === null; let initialCall = this._transaction === null;
if (initialCall) { if (initialCall) {
this.emit('beforeTransaction', this, remote);
this._transaction = new Transaction(this); this._transaction = new Transaction(this);
this.emit('beforeTransaction', this, this._transaction, remote);
} }
try { try {
f(this); f(this);
@@ -5445,15 +5441,13 @@ class Y$1 extends NamedEventHandler {
console.error(e); console.error(e);
} }
if (initialCall) { if (initialCall) {
const transaction = this._transaction;
this._transaction = null;
// emit change events on changed types // emit change events on changed types
transaction.changedTypes.forEach(function (subs, type) { this._transaction.changedTypes.forEach(function (subs, type) {
if (!type._deleted) { if (!type._deleted) {
type._callObserver(transaction, subs, remote); type._callObserver(subs, remote);
} }
}); });
transaction.changedParentTypes.forEach(function (events, type) { this._transaction.changedParentTypes.forEach(function (events, type) {
if (!type._deleted) { if (!type._deleted) {
events = events events = events
.filter(event => .filter(event =>
@@ -5465,11 +5459,12 @@ class Y$1 extends NamedEventHandler {
}); });
// we don't have to check for events.length // we don't have to check for events.length
// because there is no way events is empty.. // because there is no way events is empty..
type._deepEventHandler.callEventListeners(transaction, events); type._deepEventHandler.callEventListeners(events);
} }
}); });
// when all changes & events are processed, emit afterTransaction event // when all changes & events are processed, emit afterTransaction event
this.emit('afterTransaction', this, transaction, remote); this.emit('afterTransaction', this, remote);
this._transaction = null;
} }
} }
// fake _start for root properties (y.set('name', type)) // fake _start for root properties (y.set('name', type))
@@ -5561,9 +5556,7 @@ Y$1.XmlText = YXmlText;
Y$1.utils = { Y$1.utils = {
BinaryDecoder, BinaryDecoder,
UndoManager, UndoManager
getRelativePosition,
fromRelativePosition
}; };
Y$1.debug = browser; Y$1.debug = browser;

File diff suppressed because one or more lines are too long

View File

@@ -1896,7 +1896,7 @@ class EventHandler {
removeAllEventListeners () { removeAllEventListeners () {
this.eventListeners = []; this.eventListeners = [];
} }
callEventListeners (transaction, event) { callEventListeners (event) {
for (var i = 0; i < this.eventListeners.length; i++) { for (var i = 0; i < this.eventListeners.length; i++) {
try { try {
const f = this.eventListeners[i]; const f = this.eventListeners[i];
@@ -1963,9 +1963,9 @@ class Type extends Item {
} }
return path return path
} }
_callEventHandler (transaction, event) { _callEventHandler (event) {
const changedParentTypes = transaction.changedParentTypes; const changedParentTypes = this._y._transaction.changedParentTypes;
this._eventHandler.callEventListeners(transaction, event); this._eventHandler.callEventListeners(event);
let type = this; let type = this;
while (type !== this._y) { while (type !== this._y) {
let events = changedParentTypes.get(type); let events = changedParentTypes.get(type);
@@ -2208,8 +2208,8 @@ class YArrayEvent extends YEvent {
} }
class YArray extends Type { class YArray extends Type {
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YArrayEvent(this, remote)); this._callEventHandler(new YArrayEvent(this, remote));
} }
get (pos) { get (pos) {
let n = this._start; let n = this._start;
@@ -2426,8 +2426,8 @@ class YMapEvent extends YEvent {
} }
class YMap extends Type { class YMap extends Type {
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YMapEvent(this, parentSubs, remote)); this._callEventHandler(new YMapEvent(this, parentSubs, remote));
} }
toJSON () { toJSON () {
const map = {}; const map = {};
@@ -2779,16 +2779,12 @@ function reflectChangesOnDom (events) {
/* /*
events.forEach(event => { events.forEach(event => {
const target = event.target const target = event.target
if (event.attributesChanged === undefined) { const keys = this._domFilter(target.nodeName, Array.from(event.keysChanged))
// event.target is Y.XmlText
return
}
const keys = this._domFilter(target.nodeName, Array.from(event.attributesChanged))
if (keys === null) { if (keys === null) {
target._delete() target._delete()
} else { } else {
const removeKeys = new Set() // is a copy of event.attributesChanged const removeKeys = new Set() // is a copy of event.keysChanged
event.attributesChanged.forEach(key => { removeKeys.add(key) }) event.keysChanged.forEach(key => { removeKeys.add(key) })
keys.forEach(key => { keys.forEach(key => {
// remove all accepted keys from removeKeys // remove all accepted keys from removeKeys
removeKeys.delete(key) removeKeys.delete(key)
@@ -3908,8 +3904,8 @@ class YXmlFragment extends YArray {
xml.setDomFilter(f); xml.setDomFilter(f);
}); });
} }
_callObserver (transaction, parentSubs, remote) { _callObserver (parentSubs, remote) {
this._callEventHandler(transaction, new YXmlEvent(this, parentSubs, remote)); this._callEventHandler(new YXmlEvent(this, parentSubs, remote));
} }
toString () { toString () {
return this.map(xml => xml.toString()).join('') return this.map(xml => xml.toString()).join('')
@@ -5442,15 +5438,13 @@ class Y$2 extends NamedEventHandler {
console.error(e); console.error(e);
} }
if (initialCall) { if (initialCall) {
const transaction = this._transaction;
this._transaction = null;
// emit change events on changed types // emit change events on changed types
transaction.changedTypes.forEach(function (subs, type) { this._transaction.changedTypes.forEach(function (subs, type) {
if (!type._deleted) { if (!type._deleted) {
type._callObserver(transaction, subs, remote); type._callObserver(subs, remote);
} }
}); });
transaction.changedParentTypes.forEach(function (events, type) { this._transaction.changedParentTypes.forEach(function (events, type) {
if (!type._deleted) { if (!type._deleted) {
events = events events = events
.filter(event => .filter(event =>
@@ -5462,14 +5456,12 @@ class Y$2 extends NamedEventHandler {
}); });
// we don't have to check for events.length // we don't have to check for events.length
// because there is no way events is empty.. // because there is no way events is empty..
type._deepEventHandler.callEventListeners(transaction, events); type._deepEventHandler.callEventListeners(events);
} }
}); });
if (this._transaction === null) { // when all changes & events are processed, emit afterTransaction event
// when all changes & events are processed, emit afterTransaction event this.emit('afterTransaction', this, remote);
// only when there are no more transactions this._transaction = null;
this.emit('afterTransaction', this, remote);
}
} }
} }
// fake _start for root properties (y.set('name', type)) // fake _start for root properties (y.set('name', type))
@@ -5561,9 +5553,7 @@ Y$2.XmlText = YXmlText;
Y$2.utils = { Y$2.utils = {
BinaryDecoder, BinaryDecoder,
UndoManager, UndoManager
getRelativePosition,
fromRelativePosition
}; };
Y$2.debug = browser; Y$2.debug = browser;

File diff suppressed because one or more lines are too long