foodcoops/foodsoft

View on GitHub
app/assets/javascripts/list.delay.js

Summary

Maintainability
A
1 hr
Test Coverage
// for use with listjs 0.2.0
// https://github.com/javve/list.js

(function(window, undefined) {

window.List.prototype.plugins.delay = function(locals, options) {
  var list = this;
  
  this.searchTimeout = undefined;
  
  var init = {
    start: function(options) {
      this.defaults(options);
      this.callbacks(options);
      this.onload(options);
    },
    defaults: function(options) {
      options.delayedSearchClass = options.delayedSearchClass || 'delayed-search';
      options.delayedSearchTime = options.delayedSearchTime || 500;
    },
    callbacks: function(options) {
      $('.' + options.delayedSearchClass, list.listContainer).keyup(list.searchDelayStart);
    },
    onload: function(options) {
      var initialSearchTerm = $('.' + options.delayedSearchClass, list.listContainer).val();
      if('' != initialSearchTerm) {
        list.search(initialSearchTerm);
      }
    }
  };
  
  this.searchDelayStart = function(searchString, columns) {
    // TODO: if keycode corresponds to 'ENTER' ? skip delay
    clearTimeout(list.searchTimeout);
    list.searchTimeout = window.setTimeout(
      function() {list.searchDelayEnd(searchString, columns)},
      options.delayedSearchTime
    );
    
    $(list.listContainer).trigger('updateComing');
  };
  
  this.searchDelayEnd = function(searchString, columns) {
    list.search(searchString, columns);
  };
  
  init.start(options);
}

})(window);