From b579379d88ea82afb0924d3711db12c76ee6415d Mon Sep 17 00:00:00 2001 From: Thomas Brouard Date: Thu, 14 Sep 2017 17:23:49 +0200 Subject: [PATCH] Add getTabs() and eachTab() methods to TabGroup Closes #39 --- README.md | 14 ++++++++++++++ index.js | 23 ++++++++++++++++------- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5a53862..1a9432c 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,20 @@ Retrieve an instance of `Tab` from its `id` (return `null` if not found). Return the currently active tab (otherwise return `null`). +#### `tabGroup.getTabs()` + +Return all registered tabs. + +#### `tabGroup.eachTab(fn, thisArg)` + +Loop through the list of tabs in `tabGroup` and execute the `fn` function for each tab. `fn` is called with the following parameters: + +* `currentTab`: the current tab object. +* `index`: the index of the current tab being processed. +* `tabs`: the full array of tabs (similar to `tabGroup.getTabs()`). + +`thisArg` (optional) is the value to use as `this` when executing `fn`. + ### Tab Instances of `Tab` are returned by the `tabGroup.addTab()` method. diff --git a/index.js b/index.js index 6ef0f0f..d6f4746 100644 --- a/index.js +++ b/index.js @@ -76,6 +76,15 @@ class TabGroup extends EventEmitter { return null; } + getTabs () { + return this.tabs; + } + + eachTab (fn) { + this.tabs.forEach(fn); + return this; + } + getActiveTab () { if (this.tabs.length === 0) return null; return this.tabs[0]; @@ -157,12 +166,12 @@ class Tab extends EventEmitter { if (this.isClosed) return; return this.title; } - + setBadge (badge) { if (this.isClosed) return; let span = this.tabElements.badge; this.badge = badge; - + if (badge) { span.innerHTML = badge; span.classList.remove('hidden'); @@ -172,12 +181,12 @@ class Tab extends EventEmitter { this.emit("badge-changed", badge, this); } - + getBadge () { if (this.isClosed) return; return this.badge; } - + setIcon (iconURL, icon) { if (this.isClosed) return; this.iconURL = iconURL; @@ -318,13 +327,13 @@ const TabPrivate = { initWebview: function () { this.webview = document.createElement("webview"); - + const tabWebviewDidFinishLoadHandler = function (e) { this.emit("webview-ready", this); }; this.webview.addEventListener("did-finish-load", tabWebviewDidFinishLoadHandler.bind(this), false); - + this.webview.classList.add(this.tabGroup.options.viewClass); if (this.webviewAttributes) { let attrs = this.webviewAttributes; @@ -332,7 +341,7 @@ const TabPrivate = { this.webview.setAttribute(key, attrs[key]); } } - + this.tabGroup.viewContainer.appendChild(this.webview); } };