mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
This commit is contained in:
@@ -244,11 +244,20 @@ export class BreadcrumbsWidget {
|
||||
}
|
||||
|
||||
setItems(items: BreadcrumbsItem[]): void {
|
||||
let prefix = commonPrefixLength(this._items, items, (a, b) => a.equals(b));
|
||||
let removed = this._items.splice(prefix, this._items.length - prefix, ...items.slice(prefix));
|
||||
this._render(prefix);
|
||||
dispose(removed);
|
||||
this._focus(-1, undefined);
|
||||
let prefix: number;
|
||||
let removed: BreadcrumbsItem[];
|
||||
try {
|
||||
prefix = commonPrefixLength(this._items, items, (a, b) => a.equals(b));
|
||||
removed = this._items.splice(prefix, this._items.length - prefix, ...items.slice(prefix));
|
||||
this._render(prefix);
|
||||
dispose(removed);
|
||||
this._focus(-1, undefined);
|
||||
} catch (e) {
|
||||
let newError = new Error(`BreadcrumbsItem#setItems: newItems: ${items.length}, prefix: ${prefix}, removed: ${removed.length}`);
|
||||
newError.name = e.name;
|
||||
newError.stack = e.stack;
|
||||
throw newError;
|
||||
}
|
||||
}
|
||||
|
||||
private _render(start: number): void {
|
||||
@@ -258,11 +267,11 @@ export class BreadcrumbsWidget {
|
||||
this._renderItem(item, node);
|
||||
}
|
||||
// case a: more nodes -> remove them
|
||||
for (; start < this._nodes.length; start++) {
|
||||
this._nodes[start].remove();
|
||||
this._freeNodes.push(this._nodes[start]);
|
||||
while (start < this._nodes.length) {
|
||||
const free = this._nodes.pop();
|
||||
this._freeNodes.push(free);
|
||||
free.remove();
|
||||
}
|
||||
this._nodes.length = this._items.length;
|
||||
|
||||
// case b: more items -> render them
|
||||
for (; start < this._items.length; start++) {
|
||||
@@ -270,7 +279,7 @@ export class BreadcrumbsWidget {
|
||||
let node = this._freeNodes.length > 0 ? this._freeNodes.pop() : document.createElement('div');
|
||||
this._renderItem(item, node);
|
||||
this._domNode.appendChild(node);
|
||||
this._nodes[start] = node;
|
||||
this._nodes.push(node);
|
||||
}
|
||||
this.layout(undefined);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user