Collection.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. Ext.define('saas.override.util.Collection', {
  2. override: 'Ext.util.Collection',
  3. _aggregators: {
  4. average: function (items, begin, end, property, root) {
  5. var n = end - begin;
  6. return n &&
  7. this._aggregators.sum.call(this, items, begin, end, property, root) / n;
  8. },
  9. bounds: function (items, begin, end, property, root) {
  10. for (var value, max, min, i = begin; i < end; ++i) {
  11. value = items[i];
  12. value = (root ? value[root] : value)[property];
  13. // First pass max and min are undefined and since nothing is less than
  14. // or greater than undefined we always evaluate these "if" statements as
  15. // true to pick up the first value as both max and min.
  16. if (!(value < max)) { // jshint ignore:line
  17. max = value;
  18. }
  19. if (!(value > min)) { // jshint ignore:line
  20. min = value;
  21. }
  22. }
  23. return [min, max];
  24. },
  25. count: function(items) {
  26. return items.length;
  27. },
  28. extremes: function (items, begin, end, property, root) {
  29. var most = null,
  30. least = null,
  31. i, item, max, min, value;
  32. for (i = begin; i < end; ++i) {
  33. item = items[i];
  34. value = (root ? item[root] : item)[property];
  35. // Same trick as "bounds"
  36. if (!(value < max)) { // jshint ignore:line
  37. max = value;
  38. most = item;
  39. }
  40. if (!(value > min)) { // jshint ignore:line
  41. min = value;
  42. least = item;
  43. }
  44. }
  45. return [least, most];
  46. },
  47. max: function (items, begin, end, property, root) {
  48. var b = this._aggregators.bounds.call(this, items, begin, end, property, root);
  49. return b[1];
  50. },
  51. maxItem: function (items, begin, end, property, root) {
  52. var b = this._aggregators.extremes.call(this, items, begin, end, property, root);
  53. return b[1];
  54. },
  55. min: function (items, begin, end, property, root) {
  56. var b = this._aggregators.bounds.call(this, items, begin, end, property, root);
  57. return b[0];
  58. },
  59. minItem: function (items, begin, end, property, root) {
  60. var b = this._aggregators.extremes.call(this, items, begin, end, property, root);
  61. return b[0];
  62. },
  63. // override
  64. sum: function (items, begin, end, property, root) {
  65. for (var value, sum = 0, i = begin; i < end; ++i) {
  66. value = items[i];
  67. value = (root ? value[root] : value)[property];
  68. var num1 = sum + '';
  69. var num2 = value + '';
  70. var baseNum, baseNum1, baseNum2;
  71. try {
  72. baseNum1 = num1.split(".")[1].length;
  73. } catch (e) {
  74. baseNum1 = 0;
  75. }
  76. try {
  77. baseNum2 = num2.split(".")[1].length;
  78. } catch (e) {
  79. baseNum2 = 0;
  80. }
  81. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  82. sum = (num1 * baseNum + num2 * baseNum) / baseNum;
  83. }
  84. return sum;
  85. }
  86. },
  87. });