Marionette JS Client

API Docs for: 1.7.1
Show:

File: lib/marionette/multi-actions.js

(function(module, ns) {

  /**
   * For a multifinger gesture, we can use MultiActions.
   * For example, one finger to hold down
   * while the other finger moves from one element to another.
   *
   * @class Marionette.MultiActions
   * @param {Marionette.Client} context of a client.
   */
  function MultiActions(client) {
    this.client = client;
    this.multiActions = [];
    this.maxLength = 0;
  }

  MultiActions.prototype = {

    /**
     * Adds a action chain for execution.
     *
     * @method add
     * @param {Object} action {{#crossLink "Marionette.Actions"}}{{/crossLink}}.
     *
     * @return {Object} self.
     */
    add: function add(action) {
      this.multiActions.push(action.actionChain);
      if (action.actionChain.length > this.maxLength) {
        this.maxLength = action.actionChain.length;
      }
      return this;
    },

    /**
     * Send multiple action chains that have been added
     * to the server side for execution.
     *
     * @method perform
     * @param {Function} callback callback when the perform completes.
     */
    perform: function perform(callback) {
      var cmd = {
        type: 'multiAction',
        value: this.multiActions,
        max_length: this.maxLength
      };

      this.client._sendCommand(cmd, 'ok', callback);
      this.multiActions = [];
      return this;
    }
  };

  module.exports = MultiActions;

}.apply(
  this,
  (this.Marionette) ?
    [Marionette('multi-actions'), Marionette] :
    [module, require('../../lib/marionette/marionette')]
));