Sha256: e3c5306edd8359fcfa2a39fa61bd1d7726fd10dfb8f3660532620b57436342ab

Contents?: true

Size: 1.75 KB

Versions: 11

Compression:

Stored size: 1.75 KB

Contents

pageflow.EditLockContainer = Backbone.Model.extend({
  initialize: function() {
    this.storageKey = 'pageflow.edit_lock.' + pageflow.entry.id;
  },

  aquire: function(options) {
    options = options || {};
    var container = this;

    var lock = new pageflow.EditLock({
      id: options.force ? null : sessionStorage[this.storageKey],
      force: options.force
    });

    lock.save(null, {
      polling: !!options.polling,
      success: function(lock) {
        sessionStorage[container.storageKey] = lock.id;

        container.lock = lock;
        container.trigger('aquired');

        container.startPolling();
      }
    });
  },

  startPolling: function() {
    if (!this.pollingInteval) {
      this.pollingInteval = setInterval(_.bind(function() {
        this.aquire({polling: true});
      }, this), 2000);
    }
  },

  stopPolling: function() {
    if (this.pollingInteval) {
      clearInterval(this.pollingInteval);
      this.pollingInteval = null;
    }
  },

  watchForErrors: function() {
    var container = this;

    $(document).ajaxSend(function(event, xhr) {
      if (container.lock) {
        xhr.setRequestHeader("X-Edit-Lock", container.lock.id);
      }
    });

    $(document).ajaxError(function(event, xhr, settings) {
      if (xhr.status === 409) {
        container.lock = null;
        container.trigger('locked',
                          xhr.responseJSON || {},
                          {
                            context: (settings.url.match(/\/edit_lock/) && !settings.polling) ? 'aquire' : 'other'
                          });

        container.stopPolling();
      }
    });
  },

  release: function() {
    if (this.lock) {
      var promise = this.lock.destroy();
      this.lock = null;
      return promise;
    }
  }
});

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
pageflow-0.5.0 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.4.0 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.3.0 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.2.1 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.2.0 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.1.0 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.0.5 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.0.4 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.0.3 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.0.2 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js
pageflow-0.0.1 app/assets/javascripts/pageflow/editor/models/edit_lock_container.js