Index: background.js |
=================================================================== |
--- a/background.js |
+++ b/background.js |
@@ -100,25 +100,56 @@ |
var activeNotification = null; |
-// Adds or removes browser action icon according to options. |
+function getTabStatus(tab) |
+{ |
+ var whitelisted = isWhitelisted(tab.url); |
+ var animated = iconAnimation.tabs.has(tab); |
+ |
+ var icon; |
+ 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 the page is whitelisted |
+ icon = "icons/abp-16"; |
+ else |
+ { |
+ // pick an icon with the approtiate size for Chrome/Opera |
+ // that indicates whether the page is whitelisted |
+ if (whitelisted && (!animated || 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 (animated && iconAnimation.step > 0) |
+ { |
+ icon += "-notification-" + iconAnimation.severity; |
+ |
+ if (iconAnimation.step < 10) |
+ icon += "-" + iconAnimation.step; |
+ } |
+ |
+ icon += ".png"; |
+ |
+ return {icon: icon, whitelisted: whitelisted}; |
+} |
+ |
function refreshIconAndContextMenu(tab) |
{ |
- var whitelisted = 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 = whitelisted ? "icons/abp-19-whitelisted.png" : "icons/abp-19.png"; |
+ // update icon indicating whether the page is whitelisted. |
+ // 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 (whitelisted || !/^https?:/.test(tab.url)) |
+ // show or hide the context menu entry dependent on whether |
+ // adblocking is active in that tab |
+ if (status.whitelisted || !/^https?:/.test(tab.url)) |
ext.contextMenus.hideMenuItems(); |
else |
ext.contextMenus.showMenuItems(); |