| Index: chrome/browser/resources/shared/js/cr/ui/list_selection_model.js
|
| ===================================================================
|
| --- chrome/browser/resources/shared/js/cr/ui/list_selection_model.js (revision 86337)
|
| +++ chrome/browser/resources/shared/js/cr/ui/list_selection_model.js (working copy)
|
| @@ -247,29 +247,43 @@
|
| * @param {!Array.<number>} permutation The reordering permutation.
|
| */
|
| adjustToReordering: function(permutation) {
|
| - var oldLeadIndex = this.leadIndex;
|
| -
|
| - var oldSelectedIndexes = this.selectedIndexes;
|
| - this.selectedIndexes = oldSelectedIndexes.map(function(oldIndex) {
|
| - return permutation[oldIndex];
|
| - }).filter(function(index) {
|
| - return index != -1;
|
| - });
|
| -
|
| - if (oldLeadIndex != -1)
|
| - this.leadIndex = permutation[oldLeadIndex];
|
| },
|
|
|
| /**
|
| - * Adjusts selection model length. This is only used when data model is
|
| - * set, so it is safe to clear() first.
|
| - * This should not be used for dataModel updates, use adjustToReordering
|
| - * instead.
|
| - * @param {number} length New selection model length.
|
| + * Adjust the selection by adding or removing a certain numbers of items.
|
| + * This should be called by the owner of the selection model as items are
|
| + * added and removed from the underlying data model.
|
| + * @param {number} index The index of the first change.
|
| + * @param {number} itemsRemoved Number of items removed.
|
| + * @param {number} itemsAdded Number of items added.
|
| */
|
| - adjustLength: function(length) {
|
| - this.clear();
|
| - this.length_ = length;
|
| + adjust: function(index, itemsRemoved, itemsAdded) {
|
| + function getNewAdjustedIndex(i) {
|
| + if (i >= index && i < index + itemsRemoved) {
|
| + return index
|
| + } else if (i >= index) {
|
| + return i - itemsRemoved + itemsAdded;
|
| + }
|
| + return i;
|
| + }
|
| +
|
| + this.length_ += itemsAdded - itemsRemoved;
|
| +
|
| + var newMap = [];
|
| + for (var i in this.selectedIndexes_) {
|
| + i = Number(i);
|
| + if (i < index) {
|
| + newMap[i] = true;
|
| + } else if (i < index + itemsRemoved) {
|
| + // noop
|
| + } else {
|
| + newMap[i + itemsAdded - itemsRemoved] = true;
|
| + }
|
| + }
|
| + this.selectedIndexes_ = newMap;
|
| +
|
| + this.leadIndex = getNewAdjustedIndex(this.leadIndex);
|
| + this.anchorIndex = getNewAdjustedIndex(this.anchorIndex);
|
| }
|
| };
|
|
|
|
|