MultipleSearchAjax.js 1.79 KB
// multiple search ajax input

var defaultAjaxChosenOptions = {
  minTermLength : 1,
  type: 'GET',
  dataType: 'json',
  url: '',
  jsonTermKey: 'query'
};


var defaultMultipleSearchAjaxOptions = {
  // options that cannot be overwritten

  get       : function(optionName) { return optionsUtils.get(this, optionName) },
  mergeWith : function(options) {
    options                   = optionsUtils.merge(this, options);
    options.ajaxChosenOptions = optionsUtils.merge(defaultAjaxChosenOptions, options.ajaxChosenOptions);

    return options;
  },

  // options that must be overwritten
  objectName    : undefined,
  attrName      : undefined,
  searchPath    : undefined
};


var multipleSearchAjax = {
  handleSearch : function(dataResponse) {
    var results = [];

    $j.each(dataResponse.result, function (value, label) {
      results.push({ value: value, text: label });
    });

    return results;
  },

  setup : function(options) {
    options = defaultMultipleSearchAjaxOptions.mergeWith(options);
    options.ajaxChosenOptions.url = options.get('searchPath');

    var attrName = options.get('attrName');
    if (attrName) { attrName = '_' + attrName; }

    var $input  = $j(buildId(options.get('objectName') + attrName));

    // fixups for chosen
    //$input.css('width', '430px');
    $input.attr('multiple', '');

    $input.ajaxChosen(options.get('ajaxChosenOptions'), multipleSearchAjax.handleSearch);
  }
};

var multipleSearchAjaxHelper = {
  setup : function(objectName, attrName, searchPath, searchResourceOptions) {
    var defaultOptions = {
      searchPath : searchPath,
      objectName : objectName,
      attrName   : attrName
    };

    var options = optionsUtils.merge(defaultOptions, searchResourceOptions);
    multipleSearchAjax.setup(options);
  }
};

// # TODO implementar 'load' options