in Canvas/CanvasSimple/lib/winjs-4.0.1/js/base.js [25098:25156]
_listItemInserted: function (event) {
// iteminserted is only interesting if this is a new group, or is the first
// item of the group at which point the group data is regenerated. It will
// however always result in a +1 to all the following firstItemIndexHints
//
var key = event.detail.key;
var index = event.detail.index;
var value = event.detail.value;
var list = this._list;
var groupKey = list.getItemFromKey(key).groupKey;
var groupItems = this._groupItems;
var groupKeys = this._groupKeys;
var groupItem = groupItems[groupKey];
var groupIndex;
var oldGroupItem, newGroupItem;
var i, len;
if (!groupItem) {
// we have a new group, add it
for (i = 0, len = groupKeys.length; i < len; i++) {
groupItem = groupItems[groupKeys[i]];
if (groupItem.firstItemIndexHint >= index) {
break;
}
}
groupIndex = i;
groupItem = {
handle: groupKey,
key: groupKey,
data: this._groupDataOf(value),
groupSize: 1,
firstItemKey: key,
firstItemIndexHint: index
};
groupKeys.splice(groupIndex, 0, groupKey);
groupItems[groupKey] = groupItem;
this._notifyItemInserted(groupKey, groupIndex, groupItem.data);
} else {
oldGroupItem = groupItem;
newGroupItem = cloneItem(oldGroupItem);
newGroupItem.groupSize++;
if (oldGroupItem.firstItemIndexHint === index) {
newGroupItem.groupData = this._groupDataOf(value);
newGroupItem.firstItemKey = key;
newGroupItem.firstItemIndexHint = index;
}
groupItems[groupKey] = newGroupItem;
groupIndex = groupKeys.indexOf(groupKey);
this._notifyItemChanged(groupKey, groupIndex, oldGroupItem.data, newGroupItem.data, oldGroupItem, newGroupItem);
}
// update the firstItemIndexHint on following groups
for (i = groupIndex + 1, len = groupKeys.length; i < len; i++) {
oldGroupItem = groupItems[groupKeys[i]];
newGroupItem = cloneItem(oldGroupItem);
newGroupItem.firstItemIndexHint++;
groupItems[newGroupItem.key] = newGroupItem;
this._notifyItemChanged(newGroupItem.key, i, oldGroupItem.data, newGroupItem.data, oldGroupItem, newGroupItem);
}
},