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()
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    fSet.add(f)
 | 
					      this._eventListener.set(name, listeners)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    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