Merge pull request #43 from wetheredge/master

Reposition tabs programmatically
This commit is contained in:
Thomas Brouard 2017-10-27 09:16:15 +02:00 committed by GitHub
commit a8090c9792
2 changed files with 67 additions and 0 deletions

View file

@ -136,6 +136,28 @@ Set tab icon (a iconURL or an icon must be given).
Get current tab icon URL / icon.
#### `tab.setPosition(newPosition)`
Move tab to the specified position. A negative value is an offset from the right.
To move a tab to the leftmost 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 the index returned is negative and is the offset from the right.
#### `tab.activate()`
Activate this tab. The class "active" is added to the active tab.

View file

@ -209,6 +209,51 @@ class Tab extends EventEmitter {
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 () {
if (this.isClosed) return;
let activeTab = this.tabGroup.getActiveTab();