code: function show() {
      var _this3 = this;
  
      if (this[_show]) return this[_show];
      var originalDisplay = this.attr('__originalDisplay') || '';
      var originalState = this.attr('__originalState') || 'default';
      var states = this.attr('states');
  
      if (states.show) {
        var _st = ['show', originalState];
  
        if (states.beforeShow) {
          _st.unshift('beforeShow');
        }
  
        var deferred = this.resolveStates(_st, function () {
          var state = _this3.attr('state');
  
          if (state === 'hide') {
            _this3.once('state-from-hide', function () {
              _this3.attr('display', originalDisplay);
            });
          }
        });
        deferred.promise = deferred.promise.then(function () {
          if (!_this3[_hide]) {
            delete _this3.__attr.__originalDisplay;
            delete _this3.__attr.__originalState;
  
            if (states.show.__default) {
              delete states.show;
  
              _this3.attr('states', states);
            }
          }
  
          delete _this3[_show];
        });
        this[_show] = deferred;
        return deferred;
      }
  
      var rs = this[_resolveState];
  
      if (rs) {
        rs.resolve();
        rs.promise.then(function () {
          _this3.attr('state', originalState);
  
          _this3.attr('display', originalDisplay);
        });
        return rs;
      }
  
      this.attr('state', originalState);
      this.attr('display', originalDisplay);
      return this;
    }
docs: state: original -> show -> hide -> show -> original