Index: background.js |
=================================================================== |
--- a/background.js |
+++ b/background.js |
@@ -100,25 +100,59 @@ |
var activeNotification = null; |
-// Adds or removes browser action icon according to options. |
+function getTabStatus(tab) |
+{ |
+ var icon; |
+ var excluded = !/^https?:/.test(tab.url) || isWhitelisted(tab.url); |
+ |
+ if (require("info").platform == "safari") |
+ // pick an icon with approtiate size for Safari. However since |
+ // toolbar item icons can't use different colors, we don't have |
+ // different versions indicating whether adblocking is active. |
+ icon = "icons/abp-16" |
+ else |
+ { |
+ // pick an icon with the approtiate size for Chrome/Opera |
+ // that indicates whether adblocking is active in the tab |
+ if (excluded && iconAnimation.step < 10) |
+ icon = "icons/abp-19-whitelisted"; |
+ else |
+ icon = "icons/abp-19"; |
+ } |
+ |
+ // pick the current frame if the icon is currently animating |
+ // in order to indicate a pending notification |
+ if (iconAnimation.step > 0) |
+ { |
+ icon += "-notification-" |
+ icon += iconAnimation.severity; |
+ |
+ if (iconAnimation.step < 10) |
+ { |
+ icon += "-" |
+ icon += iconAnimation.step; |
+ } |
+ } |
+ |
+ icon += ".png"; |
+ |
+ return {icon: icon, excluded: excluded}; |
+} |
+ |
function refreshIconAndContextMenu(tab) |
{ |
- var excluded = !/^https?:/.test(tab.url) || isWhitelisted(tab.url); |
+ var status = getTabStatus(tab); |
- var iconFilename; |
- if (require("info").platform == "safari") |
- // There is no grayscale version of the icon for whitelisted tabs |
- // when using Safari, because icons are grayscale already and icons |
- // aren't per tab in Safari. |
- iconFilename = "icons/abp-16.png" |
- else |
- iconFilename = excluded ? "icons/abp-19-whitelisted.png" : "icons/abp-19.png"; |
+ // update icon indicating whether adblocking is active in the tab. |
+ // But don't interfere the icon animation if active. In that case |
+ // the icon animation takes care to update the icon to its new status |
+ // with its next frame. |
+ if (!iconAnimation.tabs.has(tab)) |
+ tab.browserAction.setIcon(status.icon); |
- tab.browserAction.setIcon(iconFilename); |
- iconAnimation.registerTab(tab, iconFilename); |
- |
- // Set context menu status according to whether current tab has whitelisted domain |
- if (excluded) |
+ // show or hide the context menu entry dependent on whether adblocking |
+ // is active in the tab |
+ if (status.excluded) |
ext.contextMenus.hideMenuItems(); |
else |
ext.contextMenus.showMenuItems(); |