|
var util = require('../util');
|
|
|
|
/**
|
|
* @class Groups
|
|
* This class can store groups and properties specific for groups.
|
|
*/
|
|
function Groups() {
|
|
this.clear();
|
|
this.defaultIndex = 0;
|
|
this.groupsArray = [];
|
|
this.groupIndex = 0;
|
|
this.useDefaultGroups = true;
|
|
}
|
|
|
|
|
|
/**
|
|
* default constants for group colors
|
|
*/
|
|
Groups.DEFAULT = [
|
|
{border: "#2B7CE9", background: "#97C2FC", highlight: {border: "#2B7CE9", background: "#D2E5FF"}, hover: {border: "#2B7CE9", background: "#D2E5FF"}}, // 0: blue
|
|
{border: "#FFA500", background: "#FFFF00", highlight: {border: "#FFA500", background: "#FFFFA3"}, hover: {border: "#FFA500", background: "#FFFFA3"}}, // 1: yellow
|
|
{border: "#FA0A10", background: "#FB7E81", highlight: {border: "#FA0A10", background: "#FFAFB1"}, hover: {border: "#FA0A10", background: "#FFAFB1"}}, // 2: red
|
|
{border: "#41A906", background: "#7BE141", highlight: {border: "#41A906", background: "#A1EC76"}, hover: {border: "#41A906", background: "#A1EC76"}}, // 3: green
|
|
{border: "#E129F0", background: "#EB7DF4", highlight: {border: "#E129F0", background: "#F0B3F5"}, hover: {border: "#E129F0", background: "#F0B3F5"}}, // 4: magenta
|
|
{border: "#7C29F0", background: "#AD85E4", highlight: {border: "#7C29F0", background: "#D3BDF0"}, hover: {border: "#7C29F0", background: "#D3BDF0"}}, // 5: purple
|
|
{border: "#C37F00", background: "#FFA807", highlight: {border: "#C37F00", background: "#FFCA66"}, hover: {border: "#C37F00", background: "#FFCA66"}}, // 6: orange
|
|
{border: "#4220FB", background: "#6E6EFD", highlight: {border: "#4220FB", background: "#9B9BFD"}, hover: {border: "#4220FB", background: "#9B9BFD"}}, // 7: darkblue
|
|
{border: "#FD5A77", background: "#FFC0CB", highlight: {border: "#FD5A77", background: "#FFD1D9"}, hover: {border: "#FD5A77", background: "#FFD1D9"}}, // 8: pink
|
|
{border: "#4AD63A", background: "#C2FABC", highlight: {border: "#4AD63A", background: "#E6FFE3"}, hover: {border: "#4AD63A", background: "#E6FFE3"}}, // 9: mint
|
|
|
|
{border: "#990000", background: "#EE0000", highlight: {border: "#BB0000", background: "#FF3333"}, hover: {border: "#BB0000", background: "#FF3333"}}, // 10:bright red
|
|
{border: "#01AA01", background: "#22FF22", highlight: {border: "#33DD33", background: "#AAFFAA"}, hover: {border: "#22FF22", background: "#66FF66"}}, // 11:bright GREEN
|
|
|
|
{border: "#97C2FC", background: "#2B7CE9", highlight: {border: "#D2E5FF", background: "#2B7CE9"}, hover: {border: "#D2E5FF", background: "#2B7CE9"}}, // 12: blue
|
|
{border: "#FFFF00", background: "#FFA500", highlight: {border: "#FFFFA3", background: "#FFA500"}, hover: {border: "#FFFFA3", background: "#FFA500"}}, // 13: yellow
|
|
//{border: "#FB7E81", background: "#FA0A10", highlight: {border: "#FFAFB1", background: "#FA0A10"}, hover: {border: "#FFAFB1", background: "#FA0A10"}}, // 14: red
|
|
{border: "#7BE141", background: "#41A906", highlight: {border: "#A1EC76", background: "#41A906"}, hover: {border: "#A1EC76", background: "#41A906"}}, // 15: green
|
|
{border: "#EB7DF4", background: "#E129F0", highlight: {border: "#F0B3F5", background: "#E129F0"}, hover: {border: "#F0B3F5", background: "#E129F0"}}, // 16: magenta
|
|
{border: "#AD85E4", background: "#7C29F0", highlight: {border: "#D3BDF0", background: "#7C29F0"}, hover: {border: "#D3BDF0", background: "#7C29F0"}}, // 17: purple
|
|
{border: "#FFA807", background: "#C37F00", highlight: {border: "#FFCA66", background: "#C37F00"}, hover: {border: "#FFCA66", background: "#C37F00"}}, // 18: orange
|
|
{border: "#6E6EFD", background: "#4220FB", highlight: {border: "#9B9BFD", background: "#4220FB"}, hover: {border: "#9B9BFD", background: "#4220FB"}}, // 19: darkblue
|
|
{border: "#FFC0CB", background: "#FD5A77", highlight: {border: "#FFD1D9", background: "#FD5A77"}, hover: {border: "#FFD1D9", background: "#FD5A77"}}, // 20: pink
|
|
{border: "#C2FABC", background: "#4AD63A", highlight: {border: "#E6FFE3", background: "#4AD63A"}, hover: {border: "#E6FFE3", background: "#4AD63A"}}, // 21:mint
|
|
|
|
{border: "#EE0000", background: "#990000", highlight: {border: "#FF3333", background: "#BB0000"}, hover: {border: "#FF3333", background: "#BB0000"}}, // 22:bright red
|
|
{border: "#22FF22", background: "#01AA01", highlight: {border: "#AAFFAA", background: "#33DD33"}, hover: {border: "#66FF66", background: "#22FF22"}}, // 23:bright GREEN
|
|
];
|
|
|
|
|
|
/**
|
|
* Clear all groups
|
|
*/
|
|
Groups.prototype.clear = function () {
|
|
this.groups = {};
|
|
this.groups.length = function()
|
|
{
|
|
var i = 0;
|
|
for ( var p in this ) {
|
|
if (this.hasOwnProperty(p)) {
|
|
i++;
|
|
}
|
|
}
|
|
return i;
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* get group properties of a groupname. If groupname is not found, a new group
|
|
* is added.
|
|
* @param {*} groupname Can be a number, string, Date, etc.
|
|
* @return {Object} group The created group, containing all group properties
|
|
*/
|
|
Groups.prototype.get = function (groupname) {
|
|
var group = this.groups[groupname];
|
|
if (group == undefined) {
|
|
if (this.useDefaultGroups === false && this.groupsArray.length > 0) {
|
|
// create new group
|
|
var index = this.groupIndex % this.groupsArray.length;
|
|
this.groupIndex++;
|
|
group = {};
|
|
group.color = this.groups[this.groupsArray[index]];
|
|
this.groups[groupname] = group;
|
|
}
|
|
else {
|
|
// create new group
|
|
var index = this.defaultIndex % Groups.DEFAULT.length;
|
|
this.defaultIndex++;
|
|
group = {};
|
|
group.color = Groups.DEFAULT[index];
|
|
this.groups[groupname] = group;
|
|
}
|
|
}
|
|
|
|
return group;
|
|
};
|
|
|
|
/**
|
|
* Add a custom group style
|
|
* @param {String} groupName
|
|
* @param {Object} style An object containing borderColor,
|
|
* backgroundColor, etc.
|
|
* @return {Object} group The created group object
|
|
*/
|
|
Groups.prototype.add = function (groupName, style) {
|
|
this.groups[groupName] = style;
|
|
this.groupsArray.push(groupName);
|
|
return style;
|
|
};
|
|
|
|
module.exports = Groups;
|