Add support for negative positions

This commit is contained in:
W Etheredge 2017-10-26 20:55:12 -05:00
parent f84908d4cb
commit 53dcb198f1
2 changed files with 62 additions and 24 deletions

View file

@ -138,11 +138,25 @@ Get current tab icon URL / icon.
#### `tab.setPosition(newPosition)` #### `tab.setPosition(newPosition)`
Move tab to the specified position. Move tab to the specified position. A negative value is an offset from the right.
#### `tab.getPosition()` To move a tab to the leftmost position:
Get the tab position. ```javascript
tab.setPosition(1);
```
> Note: a position of 0 also moves the tab to the leftmost position
To move a tab to the rightmost position:
```javascript
tab.setPosition(-1);
```
#### `tab.getPosition(fromRight)`
Get the tab position. If `fromRight` is true, then the index returned is negative and is the offset from the right.
#### `tab.activate()` #### `tab.activate()`

View file

@ -209,6 +209,51 @@ class Tab extends EventEmitter {
return this.icon; return this.icon;
} }
setPosition (newPosition) {
let tabContainer = this.tabGroup.tabContainer;
let tabs = tabContainer.children;
let oldPosition = this.getPosition();
if (newPosition < 0) {
newPosition += tabContainer.childElementCount;
if (newPosition < 0) {
newPosition = 0;
}
} else {
if (newPosition > tabContainer.childElementCount) {
newPosition = tabContainer.childElementCount;
}
// Make 1 be leftmost position
newPosition--;
}
if (newPosition > oldPosition) {
newPosition++;
}
tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);
return this;
}
getPosition (fromRight) {
let position = 0;
let tab = this.tab;
while ((tab = tab.previousSibling) != null) position++;
if (fromRight === true) {
position -= this.tabGroup.tabContainer.childElementCount;
}
if (position === 0) {
position = 1;
}
return position;
}
activate () { activate () {
if (this.isClosed) return; if (this.isClosed) return;
let activeTab = this.tabGroup.getActiveTab(); let activeTab = this.tabGroup.getActiveTab();
@ -271,27 +316,6 @@ class Tab extends EventEmitter {
TabGroupPrivate.activateRecentTab.bind(tabGroup)(); TabGroupPrivate.activateRecentTab.bind(tabGroup)();
} }
} }
getPosition () {
let i = 0;
let tab = this.tab;
while ((tab = tab.previousSibling) != null) i++;
return i;
}
setPosition (newPosition) {
let tabContainer = this.tabGroup.tabContainer;
let tabs = tabContainer.children;
let oldPosition = this.getPosition();
if (newPosition > oldPosition) {
newPosition++;
}
tabContainer.insertBefore(tabs[oldPosition], tabs[newPosition]);
return this;
}
} }
const TabPrivate = { const TabPrivate = {