|
|
@ -67,6 +67,7 @@ function ItemSet(backgroundPanel, axisPanel, labelPanel, options) { |
|
|
|
|
|
|
|
this.groups = {}; // Group object for every group
|
|
|
|
this.groupIds = []; |
|
|
|
this.ungrouped = null; // Group holding all ungrouped items (yeah, funny right?), used when there are no groups
|
|
|
|
|
|
|
|
this.visibleItems = []; // visible, ordered items
|
|
|
|
this.selection = []; // list with the ids of all selected nodes
|
|
|
@ -383,7 +384,6 @@ ItemSet.prototype.repaint = function repaint() { |
|
|
|
options = this.options, |
|
|
|
orientation = this.getOption('orientation'), |
|
|
|
frame = this.frame, |
|
|
|
initialPosByStart, |
|
|
|
i, ii; |
|
|
|
|
|
|
|
// update className
|
|
|
@ -507,6 +507,36 @@ ItemSet.prototype._updateVisibleItems = function _updateVisibleItems(orderedItem |
|
|
|
return newVisibleItems; |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Create or delete the group holding all ungrouped items. This group is used when |
|
|
|
* there are no groups specified. |
|
|
|
* @protected |
|
|
|
*/ |
|
|
|
ItemSet.prototype._updateUngrouped = function _updateUngrouped() { |
|
|
|
if (this.groupsData) { |
|
|
|
// remove the group holding all (unfiltered) items
|
|
|
|
if (this.ungrouped) { |
|
|
|
this.ungrouped.hide(); |
|
|
|
this.ungrouped = null; |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
// create a group holding all (unfiltered) items
|
|
|
|
if (!this.ungrouped) { |
|
|
|
var id = null; |
|
|
|
this.ungrouped = new Group(id, this, this.dom.background, this.dom.axis, this.labelPanel.frame); |
|
|
|
|
|
|
|
for (var itemId in this.items) { |
|
|
|
if (this.items.hasOwnProperty(itemId)) { |
|
|
|
this.ungrouped.add(this.items[itemId]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
this.ungrouped.show(); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Get the foreground container element |
|
|
|
* @return {HTMLElement} foreground |
|
|
@ -577,9 +607,12 @@ ItemSet.prototype.setItems = function setItems(items) { |
|
|
|
me.itemsData.on(event, callback, id); |
|
|
|
}); |
|
|
|
|
|
|
|
// draw all new items
|
|
|
|
// add all new items
|
|
|
|
ids = this.itemsData.getIds(); |
|
|
|
this._onAdd(ids); |
|
|
|
|
|
|
|
// update the group holding all ungrouped items
|
|
|
|
this._updateUngrouped(); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
@ -633,6 +666,9 @@ ItemSet.prototype.setGroups = function setGroups(groups) { |
|
|
|
this._onAddGroups(ids); |
|
|
|
} |
|
|
|
|
|
|
|
// update the group holding all ungrouped items
|
|
|
|
this._updateUngrouped(); |
|
|
|
|
|
|
|
this.emit('change'); |
|
|
|
}; |
|
|
|
|
|
|
@ -667,7 +703,7 @@ ItemSet.prototype.removeItem = function removeItem (id) { |
|
|
|
/** |
|
|
|
* Handle updated items |
|
|
|
* @param {Number[]} ids |
|
|
|
* @private |
|
|
|
* @protected |
|
|
|
*/ |
|
|
|
ItemSet.prototype._onUpdate = function _onUpdate(ids) { |
|
|
|
var me = this, |
|
|
@ -721,14 +757,14 @@ ItemSet.prototype._onUpdate = function _onUpdate(ids) { |
|
|
|
/** |
|
|
|
* Handle added items |
|
|
|
* @param {Number[]} ids |
|
|
|
* @private |
|
|
|
* @protected |
|
|
|
*/ |
|
|
|
ItemSet.prototype._onAdd = ItemSet.prototype._onUpdate; |
|
|
|
|
|
|
|
/** |
|
|
|
* Handle removed items |
|
|
|
* @param {Number[]} ids |
|
|
|
* @private |
|
|
|
* @protected |
|
|
|
*/ |
|
|
|
ItemSet.prototype._onRemove = function _onRemove(ids) { |
|
|
|
var count = 0; |
|
|
@ -822,15 +858,6 @@ ItemSet.prototype._updateGroupIds = function () { |
|
|
|
this.groupIds = this.groupsData.getIds({ |
|
|
|
order: this.options.groupOrder |
|
|
|
}); |
|
|
|
|
|
|
|
/* TODO |
|
|
|
// hide the groups now, they will be shown again in the next repaint
|
|
|
|
// in correct order
|
|
|
|
var groups = this.groups; |
|
|
|
this.groupIds.forEach(function (id) { |
|
|
|
groups[id].hide(); |
|
|
|
}); |
|
|
|
*/ |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
@ -841,8 +868,11 @@ ItemSet.prototype._updateGroupIds = function () { |
|
|
|
ItemSet.prototype._addItem = function _addItem(item) { |
|
|
|
this.items[item.id] = item; |
|
|
|
|
|
|
|
// add to group (if any)
|
|
|
|
if ('group' in item.data) { |
|
|
|
// add to group
|
|
|
|
if (this.ungrouped) { |
|
|
|
this.ungrouped.add(item); |
|
|
|
} |
|
|
|
else { |
|
|
|
var group = this.groups[item.data.group]; |
|
|
|
if (group) group.add(item); |
|
|
|
} |
|
|
@ -868,7 +898,10 @@ ItemSet.prototype._updateItem = function _updateItem(item, itemData) { |
|
|
|
if (group) group.remove(item); |
|
|
|
} |
|
|
|
|
|
|
|
if ('group' in item.data) { |
|
|
|
if (this.ungrouped) { |
|
|
|
this.ungrouped.add(item); |
|
|
|
} |
|
|
|
else { |
|
|
|
group = this.groups[item.data.group]; |
|
|
|
if (group) group.add(item); |
|
|
|
} |
|
|
@ -896,8 +929,11 @@ ItemSet.prototype._removeItem = function _removeItem(item) { |
|
|
|
index = this.selection.indexOf(item.id); |
|
|
|
if (index != -1) this.selection.splice(index, 1); |
|
|
|
|
|
|
|
// remove from group (if any)
|
|
|
|
if ('group' in item.data) { |
|
|
|
// remove from group
|
|
|
|
if (this.ungrouped) { |
|
|
|
this.ungrouped.remove(item); |
|
|
|
} |
|
|
|
else { |
|
|
|
var group = this.groups[item.data.group]; |
|
|
|
if (group) group.remove(item); |
|
|
|
} |
|
|
@ -919,8 +955,15 @@ ItemSet.prototype._order = function _order() { |
|
|
|
this.stack.orderByEnd(this.orderedItems.byEnd); |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Create an array containing all items being a range (having an end date) |
|
|
|
* @param array |
|
|
|
* @returns {Array} |
|
|
|
* @private |
|
|
|
*/ |
|
|
|
ItemSet.prototype._constructByEndArray = function _constructByEndArray(array) { |
|
|
|
var endArray = []; |
|
|
|
|
|
|
|
for (var i = 0; i < array.length; i++) { |
|
|
|
if (array[i] instanceof ItemRange) { |
|
|
|
endArray.push(array[i]); |
|
|
|