Groups.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. let util = require('../../util');
  2. /**
  3. * This class can store groups and options specific for groups.
  4. */
  5. class Groups {
  6. /**
  7. * @ignore
  8. */
  9. constructor() {
  10. this.clear();
  11. this.defaultIndex = 0;
  12. this.groupsArray = [];
  13. this.groupIndex = 0;
  14. this.defaultGroups = [
  15. {border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // 0: blue
  16. {border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // 1: yellow
  17. {border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // 2: red
  18. {border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // 3: green
  19. {border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // 4: magenta
  20. {border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // 5: purple
  21. {border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // 6: orange
  22. {border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // 7: darkblue
  23. {border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // 8: pink
  24. {border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}}, // 9: mint
  25. {border: "#990000", background: "#EE0000", highlight: {border: "#BB0000", background: "#FF3333"}, hover: {border: "#BB0000", background: "#FF3333"}}, // 10:bright red
  26. {border: "#FF6000", background: "#FF6000", highlight: {border: "#FF6000", background: "#FF6000"}, hover: {border: "#FF6000", background: "#FF6000"}}, // 12: real orange
  27. {border: "#97C2FC", background: "#2B7CE9", highlight: {border: "#D2E5FF", background: "#2B7CE9"}, hover: {border: "#D2E5FF", background: "#2B7CE9"}}, // 13: blue
  28. {border: "#399605", background: "#255C03", highlight: {border: "#399605", background: "#255C03"}, hover: {border: "#399605", background: "#255C03"}}, // 14: green
  29. {border: "#B70054", background: "#FF007E", highlight: {border: "#B70054", background: "#FF007E"}, hover: {border: "#B70054", background: "#FF007E"}}, // 15: magenta
  30. {border: "#AD85E4", background: "#7C29F0", highlight: {border: "#D3BDF0", background: "#7C29F0"}, hover: {border: "#D3BDF0", background: "#7C29F0"}}, // 16: purple
  31. {border: "#4557FA", background: "#000EA1", highlight: {border: "#6E6EFD", background: "#000EA1"}, hover: {border: "#6E6EFD", background: "#000EA1"}}, // 17: darkblue
  32. {border: "#FFC0CB", background: "#FD5A77", highlight: {border: "#FFD1D9", background: "#FD5A77"}, hover: {border: "#FFD1D9", background: "#FD5A77"}}, // 18: pink
  33. {border: "#C2FABC", background: "#74D66A", highlight: {border: "#E6FFE3", background: "#74D66A"}, hover: {border: "#E6FFE3", background: "#74D66A"}}, // 19: mint
  34. {border: "#EE0000", background: "#990000", highlight: {border: "#FF3333", background: "#BB0000"}, hover: {border: "#FF3333", background: "#BB0000"}} // 20:bright red
  35. ];
  36. this.options = {};
  37. this.defaultOptions = {
  38. useDefaultGroups: true
  39. };
  40. util.extend(this.options, this.defaultOptions);
  41. }
  42. /**
  43. *
  44. * @param {Object} options
  45. */
  46. setOptions(options) {
  47. let optionFields = ['useDefaultGroups'];
  48. if (options !== undefined) {
  49. for (let groupName in options) {
  50. if (options.hasOwnProperty(groupName)) {
  51. if (optionFields.indexOf(groupName) === -1) {
  52. let group = options[groupName];
  53. this.add(groupName, group);
  54. }
  55. }
  56. }
  57. }
  58. }
  59. /**
  60. * Clear all groups
  61. */
  62. clear() {
  63. this.groups = {};
  64. this.groupsArray = [];
  65. }
  66. /**
  67. * Get group options of a groupname.
  68. * If groupname is not found, a new group may be created.
  69. *
  70. * @param {*} groupname Can be a number, string, Date, etc.
  71. * @param {boolean} [shouldCreate=true] If true, create a new group
  72. * @return {Object} The found or created group
  73. */
  74. get(groupname, shouldCreate = true) {
  75. let group = this.groups[groupname];
  76. if (group === undefined && shouldCreate) {
  77. if (this.options.useDefaultGroups === false && this.groupsArray.length > 0) {
  78. // create new group
  79. let index = this.groupIndex % this.groupsArray.length;
  80. this.groupIndex++;
  81. group = {};
  82. group.color = this.groups[this.groupsArray[index]];
  83. this.groups[groupname] = group;
  84. }
  85. else {
  86. // create new group
  87. let index = this.defaultIndex % this.defaultGroups.length;
  88. this.defaultIndex++;
  89. group = {};
  90. group.color = this.defaultGroups[index];
  91. this.groups[groupname] = group;
  92. }
  93. }
  94. return group;
  95. }
  96. /**
  97. * Add a custom group style
  98. * @param {string} groupName
  99. * @param {Object} style An object containing borderColor,
  100. * backgroundColor, etc.
  101. * @return {Object} group The created group object
  102. */
  103. add(groupName, style) {
  104. this.groups[groupName] = style;
  105. this.groupsArray.push(groupName);
  106. return style;
  107. }
  108. }
  109. export default Groups;