common.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /**
  2. * @fileOverview Utility for F2
  3. * @author dxq613@gmail.com
  4. */
  5. var DomUtil = require('./dom');
  6. var Util = {
  7. upperFirst: require('@antv/util/lib/string/upper-first'),
  8. lowerFirst: require('@antv/util/lib/string/lower-first'),
  9. isString: require('@antv/util/lib/type/is-string'),
  10. isNumber: require('@antv/util/lib/type/is-number'),
  11. isBoolean: require('@antv/util/lib/type/is-boolean'),
  12. isFunction: require('@antv/util/lib/type/is-function'),
  13. isDate: require('@antv/util/lib/type/is-date'),
  14. isArray: require('@antv/util/lib/type/is-array'),
  15. isNil: require('@antv/util/lib/type/is-nil'),
  16. isObject: require('@antv/util/lib/type/is-object'),
  17. isPlainObject: require('@antv/util/lib/type/is-plain-object'),
  18. deepMix: require('@antv/util/lib/deep-mix'),
  19. mix: require('@antv/util/lib/mix'),
  20. each: require('@antv/util/lib/each'),
  21. isObjectValueEqual: function isObjectValueEqual(a, b) {
  22. // for vue.js
  23. a = Object.assign({}, a);
  24. b = Object.assign({}, b);
  25. var aProps = Object.getOwnPropertyNames(a);
  26. var bProps = Object.getOwnPropertyNames(b);
  27. if (aProps.length !== bProps.length) {
  28. return false;
  29. }
  30. for (var i = 0, len = aProps.length; i < len; i++) {
  31. var propName = aProps[i];
  32. if (a[propName] !== b[propName]) {
  33. return false;
  34. }
  35. }
  36. return true;
  37. },
  38. wrapBehavior: function wrapBehavior(obj, action) {
  39. if (obj['_wrap_' + action]) {
  40. return obj['_wrap_' + action];
  41. }
  42. var method = function method(e) {
  43. obj[action](e);
  44. };
  45. obj['_wrap_' + action] = method;
  46. return method;
  47. },
  48. getWrapBehavior: function getWrapBehavior(obj, action) {
  49. return obj['_wrap_' + action];
  50. },
  51. parsePadding: function parsePadding(padding) {
  52. var top;
  53. var right;
  54. var bottom;
  55. var left;
  56. if (Util.isNumber(padding) || Util.isString(padding)) {
  57. top = bottom = left = right = padding;
  58. } else if (Util.isArray(padding)) {
  59. top = padding[0];
  60. right = !Util.isNil(padding[1]) ? padding[1] : padding[0];
  61. bottom = !Util.isNil(padding[2]) ? padding[2] : padding[0];
  62. left = !Util.isNil(padding[3]) ? padding[3] : right;
  63. }
  64. return [top, right, bottom, left];
  65. },
  66. directionEnabled: function directionEnabled(mode, dir) {
  67. if (mode === undefined) {
  68. return true;
  69. } else if (typeof mode === 'string') {
  70. return mode.indexOf(dir) !== -1;
  71. }
  72. return false;
  73. }
  74. };
  75. Util.Array = {
  76. merge: function merge(dataArray) {
  77. var rst = [];
  78. for (var i = 0, len = dataArray.length; i < len; i++) {
  79. rst = rst.concat(dataArray[i]);
  80. }
  81. return rst;
  82. },
  83. values: function values(data, name) {
  84. var rst = [];
  85. var tmpMap = {};
  86. for (var i = 0, len = data.length; i < len; i++) {
  87. var obj = data[i];
  88. var value = obj[name];
  89. if (!Util.isNil(value)) {
  90. if (!Util.isArray(value)) {
  91. if (!tmpMap[value]) {
  92. rst.push(value);
  93. tmpMap[value] = true;
  94. }
  95. } else {
  96. Util.each(value, function (val) {
  97. if (!tmpMap[val]) {
  98. rst.push(val);
  99. tmpMap[val] = true;
  100. }
  101. });
  102. }
  103. }
  104. }
  105. return rst;
  106. },
  107. firstValue: function firstValue(data, name) {
  108. var rst = null;
  109. for (var i = 0, len = data.length; i < len; i++) {
  110. var obj = data[i];
  111. var value = obj[name];
  112. if (!Util.isNil(value)) {
  113. if (Util.isArray(value)) {
  114. rst = value[0];
  115. } else {
  116. rst = value;
  117. }
  118. break;
  119. }
  120. }
  121. return rst;
  122. },
  123. group: function group(data, fields, appendConditions) {
  124. if (appendConditions === void 0) {
  125. appendConditions = {};
  126. }
  127. if (!fields) {
  128. return [data];
  129. }
  130. var groups = Util.Array.groupToMap(data, fields);
  131. var array = [];
  132. if (fields.length === 1 && appendConditions[fields[0]]) {
  133. var values = appendConditions[fields[0]];
  134. Util.each(values, function (value) {
  135. value = '_' + value;
  136. array.push(groups[value]);
  137. });
  138. } else {
  139. for (var i in groups) {
  140. array.push(groups[i]);
  141. }
  142. }
  143. return array;
  144. },
  145. groupToMap: function groupToMap(data, fields) {
  146. if (!fields) {
  147. return {
  148. 0: data
  149. };
  150. }
  151. var callback = function callback(row) {
  152. var unique = '_';
  153. for (var i = 0, l = fields.length; i < l; i++) {
  154. unique += row[fields[i]] && row[fields[i]].toString();
  155. }
  156. return unique;
  157. };
  158. var groups = {};
  159. for (var i = 0, len = data.length; i < len; i++) {
  160. var row = data[i];
  161. var key = callback(row);
  162. if (groups[key]) {
  163. groups[key].push(row);
  164. } else {
  165. groups[key] = [row];
  166. }
  167. }
  168. return groups;
  169. },
  170. remove: function remove(arr, obj) {
  171. if (!arr) {
  172. return;
  173. }
  174. var index = arr.indexOf(obj);
  175. if (index !== -1) {
  176. arr.splice(index, 1);
  177. }
  178. },
  179. getRange: function getRange(values) {
  180. if (!values.length) {
  181. return {
  182. min: 0,
  183. max: 0
  184. };
  185. }
  186. var max = Math.max.apply(null, values);
  187. var min = Math.min.apply(null, values);
  188. return {
  189. min: min,
  190. max: max
  191. };
  192. }
  193. };
  194. Util.mix(Util, DomUtil);
  195. module.exports = Util;