|
@@ -7,8 +7,10 @@ |
|
|
* - options.icon: Tab => either a string (the icon path), or null (to get the |
|
|
* - options.icon: Tab => either a string (the icon path), or null (to get the |
|
|
* default icon from the manifest), or an object (with path or imageData, see |
|
|
* default icon from the manifest), or an object (with path or imageData, see |
|
|
* docs of browser.pageAction.setIcon). |
|
|
* docs of browser.pageAction.setIcon). |
|
|
* - options.onClicked: Tab => void (or Promise of void); run on click, after |
|
|
|
|
|
* which the button state is automatically updated on all tabs. |
|
|
|
|
|
|
|
|
* - options.title: Tab => string (to use as button tooltip), or null (to use |
|
|
|
|
|
* default title from the manifest) |
|
|
|
|
|
* - options.onClicked: Tab => void; executed on click, after which the button |
|
|
|
|
|
* state is automatically updated on all tabs. |
|
|
* |
|
|
* |
|
|
* Returns an object with the following methods: |
|
|
* Returns an object with the following methods: |
|
|
* - update(tab?): update visibility, icons, etcetera of a given tab, or of |
|
|
* - update(tab?): update visibility, icons, etcetera of a given tab, or of |
|
@@ -18,6 +20,7 @@ |
|
|
* const pageActionButton = PageActionButton({ |
|
|
* const pageActionButton = PageActionButton({ |
|
|
* visible: tab => tab.url.startsWith('https'), |
|
|
* visible: tab => tab.url.startsWith('https'), |
|
|
* icon: tab => isEnabled(tab.url) ? '/icon_enabled.svg' : '/icon_disabled.svg', |
|
|
* icon: tab => isEnabled(tab.url) ? '/icon_enabled.svg' : '/icon_disabled.svg', |
|
|
|
|
|
* title: tab => isEnabled(tab.url) ? 'Disable' : 'Enable', |
|
|
* onClicked: tab => toggleEnabled(tab.url), |
|
|
* onClicked: tab => toggleEnabled(tab.url), |
|
|
* }) |
|
|
* }) |
|
|
* // Manually trigger an update of a tab. |
|
|
* // Manually trigger an update of a tab. |
|
@@ -30,6 +33,7 @@ import browser from 'webextension-polyfill' |
|
|
export default function PageActionButton({ |
|
|
export default function PageActionButton({ |
|
|
visible = tab => true, |
|
|
visible = tab => true, |
|
|
icon = tab => null, |
|
|
icon = tab => null, |
|
|
|
|
|
title = tab => null, |
|
|
onClicked = tab => {}, |
|
|
onClicked = tab => {}, |
|
|
}) { |
|
|
}) { |
|
|
async function setIcon(tab) { |
|
|
async function setIcon(tab) { |
|
@@ -43,9 +47,17 @@ export default function PageActionButton({ |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
async function setTitle(tab) { |
|
|
|
|
|
browser.pageAction.setTitle({ |
|
|
|
|
|
title: await title(tab), |
|
|
|
|
|
tabId: tab.id, |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
async function checkTab(tab) { |
|
|
async function checkTab(tab) { |
|
|
if (await visible(tab)) { |
|
|
if (await visible(tab)) { |
|
|
setIcon(tab) |
|
|
setIcon(tab) |
|
|
|
|
|
setTitle(tab) |
|
|
browser.pageAction.show(tab.id) |
|
|
browser.pageAction.show(tab.id) |
|
|
} else { |
|
|
} else { |
|
|
browser.pageAction.hide(tab.id) |
|
|
browser.pageAction.hide(tab.id) |
|
|