‘use strict’;

angular.module(‘mgcrea.ngStrap.helpers.debounce’, [])

// @source jashkenas/underscore // @url github.com/jashkenas/underscore/blob/1.5.2/underscore.js#L693 .factory(‘debounce’, function($timeout) {

return function(func, wait, immediate) {
  var timeout = null;
  return function() {
    var context = this,
      args = arguments,
      callNow = immediate && !timeout;
    if(timeout) {
      $timeout.cancel(timeout);
    }
    timeout = $timeout(function later() {
      timeout = null;
      if(!immediate) {
        func.apply(context, args);
      }
    }, wait, false);
    if(callNow) {
      func.apply(context, args);
    }
    return timeout;
  };
};

})

// @source jashkenas/underscore // @url github.com/jashkenas/underscore/blob/1.5.2/underscore.js#L661 .factory(‘throttle’, function($timeout) {

return function(func, wait, options) {
  var timeout = null;
  options || (options = {});
  return function() {
    var context = this,
      args = arguments;
    if(!timeout) {
      if(options.leading !== false) {
        func.apply(context, args);
      }
      timeout = $timeout(function later() {
        timeout = null;
        if(options.trailing !== false) {
          func.apply(context, args);
        }
      }, wait, false);
    }
  };
};

});