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 refreshIconAndContextMenu(tab) |
+function getTabStatus(tab, animation) |
{ |
var whitelisted = isWhitelisted(tab.url); |
- var iconFilename; |
+ var icon; |
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" |
+ // 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 |
- iconFilename = whitelisted ? "icons/abp-19-whitelisted.png" : "icons/abp-19.png"; |
+ { |
+ // pick an icon with the approtiate size for Chrome/Opera |
+ // that indicates whether the page is whitelisted |
+ if (whitelisted && (!animation || animation.step < 10)) |
Felix Dahlke
2014/02/27 22:02:05
So we will use the red ABP icon if the animation s
Sebastian Noack
2014/02/28 08:35:16
We are neither going to use the red default nor th
|
+ icon = "icons/abp-19-whitelisted"; |
+ else |
+ icon = "icons/abp-19"; |
+ } |
- tab.browserAction.setIcon(iconFilename); |
- iconAnimation.registerTab(tab, iconFilename); |
+ // pick the current frame if the icon is currently animating |
+ // in order to indicate a pending notification |
+ if (animation && animation.step > 0) |
+ { |
+ icon += "-notification-"; |
+ icon += animation.severity; |
Wladimir Palant
2014/03/06 14:31:35
Nit: why split this to two statements? This seems
Sebastian Noack
2014/03/06 20:41:13
I found it slightly more readable to have one oper
|
- // Set context menu status according to whether current tab has whitelisted domain |
- if (whitelisted || !/^https?:/.test(tab.url)) |
+ if (animation.step < 10) |
+ { |
+ icon += "-"; |
+ icon += animation.step; |
+ } |
+ } |
+ |
+ icon += ".png"; |
+ |
+ return {icon: icon, whitelisted: whitelisted}; |
+} |
+ |
+function refreshIconAndContextMenu(tab) |
+{ |
+ var status = getTabStatus(tab); |
+ |
+ // update icon indicating whether the page is whitelisted. |
+ // But don't interfere the icon animation if active. |
Felix Dahlke
2014/02/27 22:02:05
s/interfere/interrupt/?
Sebastian Noack
2014/02/28 08:35:16
Don't know. It wouldn't just pause the animation,
Wladimir Palant
2014/03/06 14:31:35
If we now have a generic function to calculate the
Wladimir Palant
2014/03/06 14:34:33
In fact, this isn't even necessary. If iconAnimati
Sebastian Noack
2014/03/06 20:41:13
Done.
On 2014/03/06 14:34:33, Wladimir Palant wro
Wladimir Palant
2014/03/06 20:49:44
Isn't that exactly the issue that registerTab() wa
Sebastian Noack
2014/03/07 17:26:11
Now it is addressed within getTabStatus() as you s
Wladimir Palant
2014/03/07 22:13:29
Still missing something that would start the anima
Sebastian Noack
2014/03/08 11:36:39
Considering that the animation is interrupted anyw
Wladimir Palant
2014/03/21 14:10:11
Why interrupted? The animation step doesn't change
Sebastian Noack
2014/03/31 13:20:32
Since the icon is set per tab, when the active tab
|
+ // 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); |
+ |
+ // show or hide the context menu entry dependent on whether |
+ // adblocking is active in the tab |
+ if (status.whitelisted || !/^https?:/.test(tab.url)) |
ext.contextMenus.hideMenuItems(); |
else |
ext.contextMenus.showMenuItems(); |