improve backwards-compatibility

This commit is contained in:
Kevin Jahns 2017-11-07 18:31:04 -08:00
parent 0208d83f91
commit d29b83a457
7 changed files with 47 additions and 12 deletions

View File

@ -132,6 +132,7 @@ export default class AbstractConnector {
f()
}
this.whenSyncedListeners = []
this.y.emit('synced')
}
}

View File

@ -34,6 +34,9 @@ export default class YMap extends Type {
}
return map
}
keys () {
return this._map.keys()
}
delete (key) {
this._transact((y) => {
let c = this._map.get(key)
@ -58,6 +61,7 @@ export default class YMap extends Type {
let v
if (typeof value === 'function') {
v = new value() // eslint-disable-line new-cap
value = v
} else if (value instanceof Item) {
v = value
} else {

View File

@ -11,7 +11,7 @@ export default class YXmlElement extends YXmlFragment {
this._scrollElement = null
if (typeof arg1 === 'string') {
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._setDom(arg1)
} else {

View File

@ -17,9 +17,9 @@ function domToYXml (parent, doms) {
}
if (parent._domFilter(d, []) !== null) {
let type
if (d.nodeType === document.TEXT_NODE) {
if (d.nodeType === d.TEXT_NODE) {
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)
} else {
throw new Error('Unsupported node!')

View File

@ -5,7 +5,7 @@ export default class YXmlText extends YText {
let dom = null
let initialText = null
if (arg1 != null) {
if (arg1.nodeType === document.TEXT_NODE) {
if (arg1.nodeType != null && arg1.nodeType === arg1.TEXT_NODE) {
dom = arg1
initialText = dom.nodeValue
} else if (typeof arg1 === 'string') {

View File

@ -2,13 +2,24 @@ export default class NamedEventHandler {
constructor () {
this._eventListener = new Map()
}
on (name, f) {
let fSet = this._eventListener.get(name)
if (fSet === undefined) {
fSet = new Set()
this._eventListener.set(name, fSet)
_getListener (name) {
let listeners = this._eventListener.get(name)
if (listeners === undefined) {
listeners = {
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) {
if (name == null || f == null) {
@ -22,7 +33,9 @@ export default class NamedEventHandler {
emit (name, ...args) {
const listener = this._eventListener.get(name)
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') {
console.error(args[0])
}

View File

@ -24,6 +24,7 @@ export default class Y extends NamedEventHandler {
super()
this._opts = opts
this.userID = opts._userID != null ? opts._userID : generateUserID()
this.share = {}
this.ds = new DeleteStore(this)
this.os = new OperationStore(this)
this.ss = new StateStore(this)
@ -71,7 +72,7 @@ export default class Y extends NamedEventHandler {
get room () {
return this._opts.connector.room
}
get (name, TypeConstructor) {
define (name, TypeConstructor) {
let id = new RootID(name, TypeConstructor)
let type = this.os.get(id)
if (type === null) {
@ -79,9 +80,18 @@ export default class Y extends NamedEventHandler {
type._id = id
type._parent = 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
}
get (name) {
return this.share[name]
}
disconnect () {
if (this.connected) {
this.connected = false
@ -109,6 +119,13 @@ export default class Y extends NamedEventHandler {
this.ds = null
this.ss = null
}
whenSynced () {
return new Promise(resolve => {
this.once('synced', () => {
resolve()
})
})
}
}
Y.extend = function extendYjs () {