handleGesture(e) { if (!this._active || this._lock.isLocked() || this._isOpenOtherSideMenu()) { return; } if (e.type === 'dragstart') { this._onDragStart(e); } else if (!this._ignoreDrag) { e.type === 'dragend' ? this._onDragEnd(e) : this._onDrag(e); } }
/** * @param {String} name - 'open' or 'close' * @param {Object} [options] * @param {Function} [options.callback] * @param {Boolean} [options.withoutAnimation] * @return {Promise} Resolves to the splitter side element or false if not in collapse mode */ executeAction(name, options = {}) { const FINAL_STATE = name === 'open' ? OPEN_STATE : CLOSED_STATE; if (!this._active) { return Promise.resolve(false); } if (this._state === FINAL_STATE) { return Promise.resolve(this._element); } if (this._lock.isLocked()) { return Promise.reject('Splitter side is locked.'); } if (name === 'open' && this._isOpenOtherSideMenu()) { return Promise.reject('Another menu is already open.'); } if (this._element._emitEvent(`pre${name}`)) { return Promise.reject(`Canceled in pre${name} event.`); } const callback = options.callback; const unlock = this._lock.lock(); const done = () => { this._state = FINAL_STATE; this.layout(); unlock(); this._element._emitEvent(`post${name}`); callback && callback(); }; if (options.withoutAnimation) { done(); return Promise.resolve(this._element); } this._state = CHANGING_STATE; return new Promise(resolve => { this._animator[name](() => { done(); resolve(this._element); }); }); }
_isLocked() { return this._lock.isLocked(); }