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

Side by Side 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.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« chrome/ext/background.js ('K') | « chrome/ext/background.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 23 matching lines...) Expand all
34 else 34 else
35 // while the new tab page is shown on Safari 7, the 'page' property 35 // while the new tab page is shown on Safari 7, the 'page' property
36 // of the tab is undefined, and we can't send messages to that page 36 // of the tab is undefined, and we can't send messages to that page
37 this._messageProxy = { 37 this._messageProxy = {
38 handleRequest: function() {}, 38 handleRequest: function() {},
39 handleResponse: function() {}, 39 handleResponse: function() {},
40 sendMessage: function() {} 40 sendMessage: function() {}
41 }; 41 };
42 42
43 this.browserAction = new BrowserAction(this); 43 this.browserAction = new BrowserAction(this);
44 this.contextMenus = new ContextMenus(this);
44 }; 45 };
45 Page.prototype = { 46 Page.prototype = {
46 get url() 47 get url()
47 { 48 {
48 return this._frames[0].url; 49 return this._frames[0].url;
49 }, 50 },
50 activate: function() 51 activate: function()
51 { 52 {
52 this._tab.activate(); 53 this._tab.activate();
53 }, 54 },
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 { 230 {
230 activePage = page; 231 activePage = page;
231 break; 232 break;
232 } 233 }
233 } 234 }
234 235
235 updateToolbarItemForPage(activePage, event.target.browserWindow); 236 updateToolbarItemForPage(activePage, event.target.browserWindow);
236 }, true); 237 }, true);
237 238
238 239
239 /* Web requests */
240
241 ext.webRequest = {
242 onBeforeRequest: new ext._EventTarget(true),
243 handlerBehaviorChanged: function() {}
244 };
245
246
247 /* Context menus */ 240 /* Context menus */
248 241
249 var contextMenuItems = []; 242 var contextMenuItems = new ext.PageMap();
250 var isContextMenuHidden = true;
251 243
252 ext.contextMenus = { 244 var ContextMenus = function(page)
253 addMenuItem: function(title, contexts, onclick) 245 {
246 this._page = page;
247 };
248 ContextMenus.prototype = {
249 create: function(item)
254 { 250 {
255 contextMenuItems.push({ 251 var items = contextMenuItems.get(this._page);
256 id: String(contextMenuItems.length), 252 if (!items)
257 title: title, 253 contextMenuItems.set(this._page, items = []);
258 item: null, 254
259 contexts: contexts, 255 items.push(item);
260 onclick: onclick
261 });
262 this.showMenuItems();
263 }, 256 },
264 removeMenuItems: function() 257 removeAll: function()
265 { 258 {
266 contextMenuItems = []; 259 contextMenuItems.delete(this._page);
267 this.hideMenuItems();
268 },
269 showMenuItems: function()
270 {
271 isContextMenuHidden = false;
272 },
273 hideMenuItems: function()
274 {
275 isContextMenuHidden = true;
276 } 260 }
277 }; 261 };
278 262
279 safari.application.addEventListener("contextmenu", function(event) 263 safari.application.addEventListener("contextmenu", function(event)
280 { 264 {
281 if (isContextMenuHidden) 265 var pageId = event.userInfo.pageId;
266 if (!pageId)
267 return;
268
269 var page = pages[event.userInfo.pageId];
270 var items = contextMenuItems.get(page);
271 if (!items)
282 return; 272 return;
283 273
284 var context = event.userInfo.tagName; 274 var context = event.userInfo.tagName;
285 if (context == "img") 275 if (context == "img")
286 context = "image"; 276 context = "image";
287 if (!event.userInfo.srcUrl) 277 if (!event.userInfo.srcUrl)
288 context = null; 278 context = null;
289 279
290 for (var i = 0; i < contextMenuItems.length; i++) 280 for (var i = 0; i < items.length; i++)
291 { 281 {
292 // Supported contexts are: all, audio, image, video 282 // Supported contexts are: all, audio, image, video
293 var menuItem = contextMenuItems[i]; 283 var menuItem = items[i];
294 if (menuItem.contexts.indexOf("all") == -1 && menuItem.contexts.indexOf(co ntext) == -1) 284 if (menuItem.contexts.indexOf("all") == -1 && menuItem.contexts.indexOf(co ntext) == -1)
295 continue; 285 continue;
296 286
297 event.contextMenu.appendContextMenuItem(menuItem.id, menuItem.title); 287 event.contextMenu.appendContextMenuItem(i, menuItem.title);
298 } 288 }
299 }); 289 });
300 290
301 safari.application.addEventListener("command", function(event) 291 safari.application.addEventListener("command", function(event)
302 { 292 {
303 for (var i = 0; i < contextMenuItems.length; i++) 293 var page = pages[event.userInfo.pageId];
304 { 294 var items = contextMenuItems.get(page);
305 if (contextMenuItems[i].id == event.command) 295
306 { 296 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
307 contextMenuItems[i].onclick(event.userInfo.srcUrl, pages[event.userInfo. pageId]);
308 break;
309 }
310 }
311 }); 297 });
312 298
313 299
300 /* Web requests */
301
302 ext.webRequest = {
303 onBeforeRequest: new ext._EventTarget(true),
304 handlerBehaviorChanged: function() {}
305 };
306
307
314 /* Background page */ 308 /* Background page */
315 309
316 ext.backgroundPage = { 310 ext.backgroundPage = {
317 getWindow: function() 311 getWindow: function()
318 { 312 {
319 return window; 313 return window;
320 } 314 }
321 }; 315 };
322 316
323 317
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 replacePage(page); 651 replacePage(page);
658 break; 652 break;
659 } 653 }
660 }); 654 });
661 655
662 656
663 /* Storage */ 657 /* Storage */
664 658
665 ext.storage = safari.extension.settings; 659 ext.storage = safari.extension.settings;
666 })(); 660 })();
OLDNEW
« 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