mustache_templates-8.x-1.0-beta4/js/bind/form.js

js/bind/form.js
/**
 * @file
 * Form binding in Mustache templates.
 */

(function (sync) {
  var internals = sync.___internals.item;
  var init = internals.init;
  var ready = internals.ready;
  var update = internals.update;
  var prepare = internals.prepare;
  internals.init = function () {
    this.form = this.form || null;
    if (typeof this.form === 'string') {
      this.form = {selector: this.form, el: null, values: {}};
    }
    return init.call(this);
  };
  internals.ready = function () {
    if (this.form && this.form.selector && !this.form.el) {
      this.form.el = document.querySelector(this.form.selector);
      if (!this.form.el) {
        return false;
      }
    }
    return ready.call(this);
  };
  internals.update = function (period, force_fetch, no_repeat) {
    var size = 0;
    var elements;
    var element;
    var values;
    var value;
    var i;

    if (this.form && this.form.selector) {
      this.form.el = document.querySelector(this.form.selector);
      if (this.form.el && this.form.el.elements) {
        size = this.form.el.length;
        elements = this.form.el.elements;
        values = {};
        for (i = 0; i < size; i++) {
          element = elements[i];
          if (typeof element.name !== 'undefined' && typeof element.value !== 'undefined' && !element.disabled && element.name !== 'form_build_id') {
            if (typeof element.type !== 'undefined' && (element.type === 'checkbox' || element.type === 'radio') && !element.checked) {
              this.form.values[element.name] = false;
            }
            else {
              this.form.values[element.name] = element.value;
            }
            value = this.form.values[element.name];
            if (!(typeof value === 'string')) {
              value = JSON.stringify(value);
            }
            value = encodeURIComponent(value);
            values[element.name] = value;
          }
        }
      }

      if (size && this.provider) {
        this.provider = this.provider.rebuild(values);
      }
    }

    return update.call(this, period, force_fetch, no_repeat);
  };
  internals.prepare = function (rendered, buffer) {
    if (typeof buffer.data === 'object') {
      if (this.form && this.form.values) {
        buffer.data.form = Object.assign({}, this.form.values);
      }
    }
    return prepare.call(this, rendered, buffer);
  };
}(mustacheSync));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc