improve backwards-compatibility
This commit is contained in:
parent
0208d83f91
commit
d29b83a457
@ -132,6 +132,7 @@ export default class AbstractConnector {
|
|||||||
f()
|
f()
|
||||||
}
|
}
|
||||||
this.whenSyncedListeners = []
|
this.whenSyncedListeners = []
|
||||||
|
this.y.emit('synced')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,9 @@ export default class YMap extends Type {
|
|||||||
}
|
}
|
||||||
return map
|
return map
|
||||||
}
|
}
|
||||||
|
keys () {
|
||||||
|
return this._map.keys()
|
||||||
|
}
|
||||||
delete (key) {
|
delete (key) {
|
||||||
this._transact((y) => {
|
this._transact((y) => {
|
||||||
let c = this._map.get(key)
|
let c = this._map.get(key)
|
||||||
@ -58,6 +61,7 @@ export default class YMap extends Type {
|
|||||||
let v
|
let v
|
||||||
if (typeof value === 'function') {
|
if (typeof value === 'function') {
|
||||||
v = new value() // eslint-disable-line new-cap
|
v = new value() // eslint-disable-line new-cap
|
||||||
|
value = v
|
||||||
} else if (value instanceof Item) {
|
} else if (value instanceof Item) {
|
||||||
v = value
|
v = value
|
||||||
} else {
|
} else {
|
||||||
|
@ -11,7 +11,7 @@ export default class YXmlElement extends YXmlFragment {
|
|||||||
this._scrollElement = null
|
this._scrollElement = null
|
||||||
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 === document.ELEMENT_NODE) {
|
} else if (arg1 != null && arg1.nodeType != null && arg1.nodeType === arg1.ELEMENT_NODE) {
|
||||||
this.nodeName = arg1.nodeName
|
this.nodeName = arg1.nodeName
|
||||||
this._setDom(arg1)
|
this._setDom(arg1)
|
||||||
} else {
|
} else {
|
||||||
|
@ -17,9 +17,9 @@ function domToYXml (parent, doms) {
|
|||||||
}
|
}
|
||||||
if (parent._domFilter(d, []) !== null) {
|
if (parent._domFilter(d, []) !== null) {
|
||||||
let type
|
let type
|
||||||
if (d.nodeType === document.TEXT_NODE) {
|
if (d.nodeType === d.TEXT_NODE) {
|
||||||
type = new YXmlText(d)
|
type = new YXmlText(d)
|
||||||
} else if (d.nodeType === document.ELEMENT_NODE) {
|
} else if (d.nodeType === d.ELEMENT_NODE) {
|
||||||
type = new YXmlFragment._YXmlElement(d, parent._domFilter)
|
type = new YXmlFragment._YXmlElement(d, parent._domFilter)
|
||||||
} else {
|
} else {
|
||||||
throw new Error('Unsupported node!')
|
throw new Error('Unsupported node!')
|
||||||
|
@ -5,7 +5,7 @@ export default class YXmlText extends YText {
|
|||||||
let dom = null
|
let dom = null
|
||||||
let initialText = null
|
let initialText = null
|
||||||
if (arg1 != null) {
|
if (arg1 != null) {
|
||||||
if (arg1.nodeType === document.TEXT_NODE) {
|
if (arg1.nodeType != null && arg1.nodeType === arg1.TEXT_NODE) {
|
||||||
dom = arg1
|
dom = arg1
|
||||||
initialText = dom.nodeValue
|
initialText = dom.nodeValue
|
||||||
} else if (typeof arg1 === 'string') {
|
} else if (typeof arg1 === 'string') {
|
||||||
|
@ -2,13 +2,24 @@ export default class NamedEventHandler {
|
|||||||
constructor () {
|
constructor () {
|
||||||
this._eventListener = new Map()
|
this._eventListener = new Map()
|
||||||
}
|
}
|
||||||
on (name, f) {
|
_getListener (name) {
|
||||||
let fSet = this._eventListener.get(name)
|
let listeners = this._eventListener.get(name)
|
||||||
if (fSet === undefined) {
|
if (listeners === undefined) {
|
||||||
fSet = new Set()
|
listeners = {
|
||||||
this._eventListener.set(name, fSet)
|
once: new Set(),
|
||||||
|
on: new Set()
|
||||||
|
}
|
||||||
|
this._eventListener.set(name, listeners)
|
||||||
}
|
}
|
||||||
fSet.add(f)
|
return listeners
|
||||||
|
}
|
||||||
|
once (name, f) {
|
||||||
|
let listeners = this._getListener(name)
|
||||||
|
listeners.once.add(f)
|
||||||
|
}
|
||||||
|
on (name, f) {
|
||||||
|
let listeners = this._getListener(name)
|
||||||
|
listeners.on.add(f)
|
||||||
}
|
}
|
||||||
off (name, f) {
|
off (name, f) {
|
||||||
if (name == null || f == null) {
|
if (name == null || f == null) {
|
||||||
@ -22,7 +33,9 @@ export default class NamedEventHandler {
|
|||||||
emit (name, ...args) {
|
emit (name, ...args) {
|
||||||
const listener = this._eventListener.get(name)
|
const listener = this._eventListener.get(name)
|
||||||
if (listener !== undefined) {
|
if (listener !== undefined) {
|
||||||
listener.forEach(f => f.apply(null, args))
|
listener.on.forEach(f => f.apply(null, args))
|
||||||
|
listener.once.forEach(f => f.apply(null, args))
|
||||||
|
listener.once = new Set()
|
||||||
} else if (name === 'error') {
|
} else if (name === 'error') {
|
||||||
console.error(args[0])
|
console.error(args[0])
|
||||||
}
|
}
|
||||||
|
19
src/Y.js
19
src/Y.js
@ -24,6 +24,7 @@ export default class Y extends NamedEventHandler {
|
|||||||
super()
|
super()
|
||||||
this._opts = opts
|
this._opts = opts
|
||||||
this.userID = opts._userID != null ? opts._userID : generateUserID()
|
this.userID = opts._userID != null ? opts._userID : generateUserID()
|
||||||
|
this.share = {}
|
||||||
this.ds = new DeleteStore(this)
|
this.ds = new DeleteStore(this)
|
||||||
this.os = new OperationStore(this)
|
this.os = new OperationStore(this)
|
||||||
this.ss = new StateStore(this)
|
this.ss = new StateStore(this)
|
||||||
@ -71,7 +72,7 @@ export default class Y extends NamedEventHandler {
|
|||||||
get room () {
|
get room () {
|
||||||
return this._opts.connector.room
|
return this._opts.connector.room
|
||||||
}
|
}
|
||||||
get (name, TypeConstructor) {
|
define (name, TypeConstructor) {
|
||||||
let id = new RootID(name, TypeConstructor)
|
let id = new RootID(name, TypeConstructor)
|
||||||
let type = this.os.get(id)
|
let type = this.os.get(id)
|
||||||
if (type === null) {
|
if (type === null) {
|
||||||
@ -79,9 +80,18 @@ export default class Y extends NamedEventHandler {
|
|||||||
type._id = id
|
type._id = id
|
||||||
type._parent = this
|
type._parent = this
|
||||||
type._integrate(this)
|
type._integrate(this)
|
||||||
|
if (this.share[name] !== undefined) {
|
||||||
|
throw new Error('Type is already defined with a different constructor!')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.share[name] === undefined) {
|
||||||
|
this.share[name] = type
|
||||||
}
|
}
|
||||||
return type
|
return type
|
||||||
}
|
}
|
||||||
|
get (name) {
|
||||||
|
return this.share[name]
|
||||||
|
}
|
||||||
disconnect () {
|
disconnect () {
|
||||||
if (this.connected) {
|
if (this.connected) {
|
||||||
this.connected = false
|
this.connected = false
|
||||||
@ -109,6 +119,13 @@ export default class Y extends NamedEventHandler {
|
|||||||
this.ds = null
|
this.ds = null
|
||||||
this.ss = null
|
this.ss = null
|
||||||
}
|
}
|
||||||
|
whenSynced () {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
this.once('synced', () => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Y.extend = function extendYjs () {
|
Y.extend = function extendYjs () {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user