Exemple #1
0
	constructor(editor) {
		this.editor = editor;
		this.type = editor.type;

		this._lastObjectId = 0;

		this.proxyRef = {};
		this.factories = {};

		this.cache = new HLRU(1000);
		this.refs = new Map();

		this.events = new EventEmitter();

		editor.addEventListener('change', change => {
			if(! change.local) {
				change.operation.apply(this._changeHandler);
			}

			this.events.emit('change', change);
		});

		this._changeHandler = {
			update: (id, type, change) => {
				const ref = this._findRef(id);
				if(ref) {
					this.remote = true;
					ref.editor.apply({
						operation: change,
						local: false,
						remote: true
					});
				}
			}
		};

		editor.addEventListener('state', e => this.events.emit('state', e));

		this.registerType('map', e => new SharedMap(e));
		this.registerType('list', e => new SharedList(e));
		this.registerType('string', e => new SharedString(e));

		this.root = this._getObject('root', 'map');
		this.refs.set(this.cache.get('root'));
		this.root.on('valueChanged', data => this.events.emit('valueChanged', data));
		this.root.on('valueRemoved', data => this.events.emit('valueRemove', data));
	}
Exemple #2
0
	_findRef(id) {
		return this.refs.get(id) || this.cache.get(id);
	}