Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

aui-debounce.js 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. AUI.add('aui-debounce', function(A) {
  2. var Lang = A.Lang;
  3. var AArray = A.Array;
  4. var isArray = Lang.isArray;
  5. var isString = Lang.isString;
  6. var isUndefined = Lang.isUndefined;
  7. var DEFAULT_ARGS = [];
  8. var toArray = function(arr, fallback, index, arrayLike) {
  9. return !isUndefined(arr) ? AArray(arr, index || 0, (arrayLike !== false)) : fallback;
  10. };
  11. A.debounce = function(fn, delay, context, args) {
  12. var id;
  13. var tempArgs;
  14. if (isString(fn) && context) {
  15. fn = A.bind(fn, context);
  16. }
  17. delay = delay || 0;
  18. args = toArray(arguments, DEFAULT_ARGS, 3);
  19. var clearFn = function() {
  20. clearInterval(id);
  21. id = null;
  22. };
  23. var base = function() {
  24. clearFn();
  25. var result = fn.apply(context, tempArgs || args || DEFAULT_ARGS);
  26. tempArgs = null;
  27. return result;
  28. };
  29. var delayFn = function(delayTime, newArgs, newContext, newFn) {
  30. wrapped.cancel();
  31. delayTime = !isUndefined(delayTime) ? delayTime : delay;
  32. fn = newFn || fn;
  33. context = newContext || context;
  34. if (newArgs != args) {
  35. tempArgs = toArray(newArgs, DEFAULT_ARGS, 0, false).concat(args);
  36. }
  37. if (delayTime > 0) {
  38. id = setInterval(base, delayTime);
  39. }
  40. else {
  41. return base();
  42. }
  43. };
  44. var cancelFn = function() {
  45. if (id) {
  46. clearFn();
  47. }
  48. };
  49. var setDelay = function(delay) {
  50. cancelFn();
  51. delay = delay || 0;
  52. };
  53. var wrapped = function() {
  54. var currentArgs = arguments.length ? arguments : args;
  55. return wrapped.delay(delay, currentArgs, context || this);
  56. };
  57. wrapped.cancel = cancelFn;
  58. wrapped.delay = delayFn;
  59. wrapped.setDelay = setDelay;
  60. return wrapped;
  61. };
  62. }, '@VERSION@' ,{skinnable:false});