vis.js is a dynamic, browser-based visualization library
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.

107 lines
5.1 KiB

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