Source: components/forms/Form.js

// Generated by github.com/steida/coffee2closure 0.1.12
goog.provide('spark.components.Form');
goog.require('spark.core.View');
goog.require('spark.components.FieldFactory');
goog.require('spark.components.LabeledInput');

/**
  Form component.
 */

/**
  @constructor
  @export
  @param   {Object=} options Class options.
  @param   {*=} data Class data
  @extends {spark.core.View}
 */
spark.components.Form = function(options, data) {
  var buttons, inputs;
  if (options == null) {
    options = {};
  }
  this.getCssClass(options, 'form');
  spark.components.Form.superClass_.constructor.call(this, options, data);
  this.inputs = [];
  this.buttons = [];
  this.inputsByName = {};
  inputs = options.inputs || options['inputs'];
  buttons = options.buttons || options['buttons'];
  this.createContainers_();
  if (inputs) {
    inputs.forEach((function(_this) {
      return function(options) {
        return _this.createInput(options);
      };
    })(this));
  }
  if (buttons) {
    buttons.forEach((function(_this) {
      return function(options) {
        return _this.createButton(options);
      };
    })(this));
  }
  this.setData(data);
}
goog.inherits(spark.components.Form, spark.core.View);

/**
  Creates DOM element to hold input and button elements.

  @private
 */
spark.components.Form.prototype.createContainers_ = function() {
  this.inputsContainer = new spark.core.View({
    cssClass: 'input-container'
  });
  this.buttonsContainer = new spark.core.View({
    cssClass: 'buttons-container'
  });
  this.appendView(this.inputsContainer);
  return this.appendView(this.buttonsContainer);
};

/**
  Creates field component from passed option using FieldFactory.
  FIXME: Creating LabeledInput should be handled in FieldFactory.

  @export
  @param {!Object} options Field options to create a field component.
 */
spark.components.Form.prototype.createInput = function(options) {
  var allOptions, data, input, inputOptions, key, label, labelOptions, labeledInput, name, type, value;
  name = options.name, label = options.label, type = options.type;
  if (type === 'combobox') {
    data = options.items;
  }
  if (label) {
    labelOptions = {};
    inputOptions = {};
    for (key in options) {
      value = options[key];
      inputOptions[key] = value;
      labelOptions[key] = value;
    }
    allOptions = {
      labelOptions: labelOptions,
      inputOptions: inputOptions
    };
    if (type === 'checkbox' || type === 'radio') {
      allOptions.inputFirst = true;
    }
    labeledInput = new spark.components.LabeledInput(allOptions, data);
    this.inputsContainer.appendView(labeledInput);
    this.inputs.push(input = labeledInput.input);
  } else {
    input = spark.components.FieldFactory(options, data);
    this.inputsContainer.appendView(input);
    this.inputs.push(input);
  }
  if (name) {
    return this.inputsByName[name] = input;
  }
};

/**
  Creates button with the options.

  @export
  @param {!Object} options Options to create a button component.
 */
spark.components.Form.prototype.createButton = function(options) {
  var button;
  button = new spark.components.Button(options);
  this.buttons.push(button);
  return this.buttonsContainer.appendView(button);
};

/**
  Sets form data and update fields with the data.
  Data should be an object and keys should match field names in this form.
  Values should be string.
  @export
 */
spark.components.Form.prototype.setData = function(data) {
  var input, name, value;
  if (this.inputsByName) {
    for (name in data) {
      value = data[name];
      input = this.inputsByName[name];
      if (input) {
        input.setValue(value);
      }
    }
  }
  return spark.components.Form.superClass_.setData.apply(this, arguments);
};

/**
  Returns form data from DOM elements.
  This method may be useful for serializing the form data.
  @export
 */
spark.components.Form.prototype.getData = function() {
  var dataSet, input, _i, _len, _ref;
  dataSet = {};
  _ref = this.inputs;
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    input = _ref[_i];
    dataSet[input.getName()] = input.getValue();
  }
  return dataSet;
};

/**
  Returns input container
  @export
  @return {spark.core.View}
 */
spark.components.Form.prototype.getInputsContainer = function() {
  return this.inputsContainer;
};

/**
  Returns buttons container
  @export
  @return {spark.core.View}
 */
spark.components.Form.prototype.getButtonsContainer = function() {
  return this.buttonsContainer;
};

/**
  Returns inputs
  @export
  @return {Array.<spark.components.Field>}
 */
spark.components.Form.prototype.getInputs = function() {
  return this.inputs;
};

/**
  Returns inputs
  @export
  @return {Array.<spark.components.Button>}
 */
spark.components.Form.prototype.getButtons = function() {
  return this.buttons;
};

/**
  Returns a field by name.
  @export
  @param {string} name Field name.
  @return {Array.<spark.components.Field>|null}
 */
spark.components.Form.prototype.getInputByName = function(name) {
  return this.inputsByName[name] || null;
};
Spark Framework by Fatih Acet
Copyright © 2014 - Fatih Acet
Documentation generated by JSDoc 3.2.2 on 2015-07-19T22:09:29+00:00 using the DocStrap template.