Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: safari/ext/background.js

Issue 5095280043098112: Issue 375 - Make context menus per page (Closed)
Patch Set: Created April 24, 2014, 1:22 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« chrome/ext/background.js ('K') | « chrome/ext/background.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: safari/ext/background.js
===================================================================
--- a/safari/ext/background.js
+++ b/safari/ext/background.js
@@ -41,6 +41,7 @@
};
this.browserAction = new BrowserAction(this);
+ this.contextMenus = new ContextMenus(this);
};
Page.prototype = {
get url()
@@ -236,49 +237,38 @@
}, true);
- /* Web requests */
-
- ext.webRequest = {
- onBeforeRequest: new ext._EventTarget(true),
- handlerBehaviorChanged: function() {}
- };
-
-
/* Context menus */
- var contextMenuItems = [];
- var isContextMenuHidden = true;
+ var contextMenuItems = new ext.PageMap();
- ext.contextMenus = {
- addMenuItem: function(title, contexts, onclick)
+ var ContextMenus = function(page)
+ {
+ this._page = page;
+ };
+ ContextMenus.prototype = {
+ create: function(item)
{
- contextMenuItems.push({
- id: String(contextMenuItems.length),
- title: title,
- item: null,
- contexts: contexts,
- onclick: onclick
- });
- this.showMenuItems();
+ var items = contextMenuItems.get(this._page);
+ if (!items)
+ contextMenuItems.set(this._page, items = []);
+
+ items.push(item);
},
- removeMenuItems: function()
+ removeAll: function()
{
- contextMenuItems = [];
- this.hideMenuItems();
- },
- showMenuItems: function()
- {
- isContextMenuHidden = false;
- },
- hideMenuItems: function()
- {
- isContextMenuHidden = true;
+ contextMenuItems.delete(this._page);
}
};
safari.application.addEventListener("contextmenu", function(event)
{
- if (isContextMenuHidden)
+ var pageId = event.userInfo.pageId;
+ if (!pageId)
+ return;
+
+ var page = pages[event.userInfo.pageId];
+ var items = contextMenuItems.get(page);
+ if (!items)
return;
var context = event.userInfo.tagName;
@@ -287,30 +277,34 @@
if (!event.userInfo.srcUrl)
context = null;
- for (var i = 0; i < contextMenuItems.length; i++)
+ for (var i = 0; i < items.length; i++)
{
// Supported contexts are: all, audio, image, video
- var menuItem = contextMenuItems[i];
+ var menuItem = items[i];
if (menuItem.contexts.indexOf("all") == -1 && menuItem.contexts.indexOf(context) == -1)
continue;
- event.contextMenu.appendContextMenuItem(menuItem.id, menuItem.title);
+ event.contextMenu.appendContextMenuItem(i, menuItem.title);
}
});
safari.application.addEventListener("command", function(event)
{
- for (var i = 0; i < contextMenuItems.length; i++)
- {
- if (contextMenuItems[i].id == event.command)
- {
- contextMenuItems[i].onclick(event.userInfo.srcUrl, pages[event.userInfo.pageId]);
- break;
- }
- }
+ var page = pages[event.userInfo.pageId];
+ var items = contextMenuItems.get(page);
+
+ items[event.command].onclick(event.userInfo.srcUrl, page);
Wladimir Palant 2014/04/25 11:35:50 Can there be unknown commands, e.g. from the brows
Sebastian Noack 2014/04/25 11:48:03 As far as I know the "command" event is only dispa
});
+ /* Web requests */
+
+ ext.webRequest = {
+ onBeforeRequest: new ext._EventTarget(true),
+ handlerBehaviorChanged: function() {}
+ };
+
+
/* Background page */
ext.backgroundPage = {
« chrome/ext/background.js ('K') | « chrome/ext/background.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld