Example #1
0
 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);
   }
 }
Example #2
0
  /**
   * @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);
      });
    });
  }
Example #3
0
 _isLocked() {
   return this._lock.isLocked();
 }