| OLD | NEW | 
|    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-2013 Eyeo GmbH |    3  * Copyright (C) 2006-2013 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   74     } |   74     } | 
|   75   }; |   75   }; | 
|   76  |   76  | 
|   77  |   77  | 
|   78   /* Tabs */ |   78   /* Tabs */ | 
|   79  |   79  | 
|   80   Tab = function(tab) |   80   Tab = function(tab) | 
|   81   { |   81   { | 
|   82     this._tab = tab; |   82     this._tab = tab; | 
|   83  |   83  | 
 |   84     this.browserAction = new TabBrowserAction(this); | 
 |   85  | 
|   84     this.onLoading = new LoadingTabEventTarget(tab); |   86     this.onLoading = new LoadingTabEventTarget(tab); | 
|   85     this.onBeforeNavigate = new TabEventTarget(tab, "beforeNavigate", false); |   87     this.onBeforeNavigate = new TabEventTarget(tab, "beforeNavigate", false); | 
|   86     this.onCompleted = new TabEventTarget(tab, "navigate", false); |   88     this.onCompleted = new TabEventTarget(tab, "navigate", false); | 
|   87     this.onActivated = new TabEventTarget(tab, "activate", false); |   89     this.onActivated = new TabEventTarget(tab, "activate", false); | 
|   88     this.onRemoved = new TabEventTarget(tab, "close", false); |   90     this.onRemoved = new TabEventTarget(tab, "close", false); | 
|   89   }; |   91   }; | 
|   90   Tab.prototype = { |   92   Tab.prototype = { | 
|   91     get url() |   93     get url() | 
|   92     { |   94     { | 
|   93       return this._tab.url; |   95       return this._tab.url; | 
|   94     }, |   96     }, | 
|   95     close: function() |   97     close: function() | 
|   96     { |   98     { | 
|   97       this._tab.close(); |   99       this._tab.close(); | 
|   98     }, |  100     }, | 
|   99     activate: function() |  101     activate: function() | 
|  100     { |  102     { | 
|  101       this._tab.activate(); |  103       this._tab.activate(); | 
|  102     }, |  104     }, | 
|  103     sendMessage: function(message, responseCallback) |  105     sendMessage: function(message, responseCallback) | 
|  104     { |  106     { | 
|  105       _sendMessage( |  107       _sendMessage( | 
|  106         message, responseCallback, |  108         message, responseCallback, | 
|  107         this._tab.page, this._tab |  109         this._tab.page, this._tab | 
|  108       ); |  110       ); | 
|  109     }, |  | 
|  110     browserAction: { |  | 
|  111       setIcon: function(path) |  | 
|  112       { |  | 
|  113         safari.extension.toolbarItems[0].image = safari.extension.baseURI + path
     ; |  | 
|  114       }, |  | 
|  115       setTitle: function(title) |  | 
|  116       { |  | 
|  117         safari.extension.toolbarItems[0].toolTip = title; |  | 
|  118       }, |  | 
|  119       setBadge: function(badge) |  | 
|  120       { |  | 
|  121         if (!badge) |  | 
|  122           safari.extension.toolbarItems[0].badge = 0; |  | 
|  123         else if ("number" in badge) |  | 
|  124           safari.extension.toolbarItems[0].badge = badge.number; |  | 
|  125       } |  | 
|  126     } |  111     } | 
|  127   }; |  112   }; | 
|  128  |  113  | 
|  129   TabMap = function(deleteTabOnBeforeNavigate) |  114   TabMap = function(deleteTabOnBeforeNavigate) | 
|  130   { |  115   { | 
|  131     this._tabs = []; |  116     this._tabs = []; | 
|  132     this._values = []; |  117     this._values = []; | 
|  133  |  118  | 
|  134     this._deleteOnEvent = this._deleteOnEvent.bind(this); |  119     this._deleteOnEvent = this._deleteOnEvent.bind(this); | 
|  135     this._deleteTabOnBeforeNavigate = deleteTabOnBeforeNavigate; |  120     this._deleteTabOnBeforeNavigate = deleteTabOnBeforeNavigate; | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  186     { |  171     { | 
|  187       // delay so that other event handlers can still lookup this tab |  172       // delay so that other event handlers can still lookup this tab | 
|  188       setTimeout(this._delete.bind(this, event.target), 0); |  173       setTimeout(this._delete.bind(this, event.target), 0); | 
|  189     } |  174     } | 
|  190   }; |  175   }; | 
|  191   TabMap.prototype["delete"] = function(tab) |  176   TabMap.prototype["delete"] = function(tab) | 
|  192   { |  177   { | 
|  193     this._delete(tab._tab); |  178     this._delete(tab._tab); | 
|  194   }; |  179   }; | 
|  195  |  180  | 
 |  181   ext.tabs = { | 
 |  182     onLoading: new LoadingTabEventTarget(safari.application), | 
 |  183     onBeforeNavigate: new TabEventTarget(safari.application, "beforeNavigate", t
     rue), | 
 |  184     onCompleted: new TabEventTarget(safari.application, "navigate", true), | 
 |  185     onActivated: new TabEventTarget(safari.application, "activate", true), | 
 |  186     onRemoved: new TabEventTarget(safari.application, "close", true) | 
 |  187   }; | 
 |  188  | 
 |  189  | 
 |  190   /* Browser actions */ | 
 |  191  | 
 |  192   var toolbarItemProperties = {}; | 
 |  193  | 
 |  194   var getToolbarItemProperty = function(name) | 
 |  195   { | 
 |  196     var property = toolbarItemProperties[name]; | 
 |  197     if (!property) | 
 |  198     { | 
 |  199       property = {tabs: new TabMap()}; | 
 |  200       toolbarItemProperties[name] = property; | 
 |  201     } | 
 |  202     return property; | 
 |  203   }; | 
 |  204  | 
 |  205   var getToolbarItemForWindow = function(win) | 
 |  206   { | 
 |  207     for (var i = 0; i < safari.extension.toolbarItems.length; i++) | 
 |  208     { | 
 |  209       var toolbarItem = safari.extension.toolbarItems[i]; | 
 |  210  | 
 |  211       if (toolbarItem.browserWindow == win) | 
 |  212         return toolbarItem; | 
 |  213     } | 
 |  214  | 
 |  215     return null; | 
 |  216   }; | 
 |  217  | 
 |  218   var BrowserAction = function() {}; | 
 |  219   BrowserAction.prototype = { | 
 |  220     setIcon: function(path) | 
 |  221     { | 
 |  222       this._set("image", safari.extension.baseURI + path); | 
 |  223     }, | 
 |  224     setTitle: function(title) | 
 |  225     { | 
 |  226       this._set("label", title); | 
 |  227       this._set("toolTip", title); | 
 |  228     }, | 
 |  229     setBadge: function(badge) | 
 |  230     { | 
 |  231       if (!badge) | 
 |  232         this._set("badge", 0); | 
 |  233       else if ("number" in badge) | 
 |  234         this._set("badge", badge.number); | 
 |  235     } | 
 |  236   }; | 
 |  237  | 
 |  238   var GlobalBrowserAction = function() {}; | 
 |  239   GlobalBrowserAction.prototype = { | 
 |  240     __proto__: BrowserAction.prototype, | 
 |  241     _set: function(name, value) | 
 |  242     { | 
 |  243       var property = getToolbarItemProperty(name); | 
 |  244       property.global = value; | 
 |  245       property.tabs.clear(); | 
 |  246  | 
 |  247       for (var i = 0; i < safari.extension.toolbarItems.length; i++) | 
 |  248         safari.extension.toolbarItems[i][name] = value; | 
 |  249     } | 
 |  250   }; | 
 |  251  | 
 |  252   ext.browserAction = new GlobalBrowserAction(); | 
 |  253  | 
 |  254   var TabBrowserAction = function(tab) | 
 |  255   { | 
 |  256     this._tab = tab; | 
 |  257   }; | 
 |  258   TabBrowserAction.prototype = { | 
 |  259     __proto__: BrowserAction.prototype, | 
 |  260     _set: function(name, value) | 
 |  261     { | 
 |  262       var currentWindow = this._tab._tab.browserWindow; | 
 |  263       var toolbarItem = getToolbarItemForWindow(currentWindow); | 
 |  264  | 
 |  265       if (toolbarItem) | 
 |  266       { | 
 |  267         var property = getToolbarItemProperty(name); | 
 |  268         property.tabs.set(this._tab, value); | 
 |  269  | 
 |  270         if (!("global" in property)) | 
 |  271           property.global = toolbarItem[name]; | 
 |  272  | 
 |  273         if (this._tab._tab == currentWindow.activeTab) | 
 |  274           toolbarItem[name] = value; | 
 |  275       } | 
 |  276     } | 
 |  277   }; | 
 |  278  | 
 |  279   ext.tabs.onActivated.addListener(function(tab) | 
 |  280   { | 
 |  281     var toolbarItem = getToolbarItemForWindow(tab._tab.browserWindow); | 
 |  282  | 
 |  283     if (!toolbarItem) | 
 |  284       return; | 
 |  285  | 
 |  286     for (var name in toolbarItemProperties) | 
 |  287     { | 
 |  288       var property = toolbarItemProperties[name]; | 
 |  289  | 
 |  290       if (property.tabs.has(tab)) | 
 |  291         toolbarItem[name] = property.tabs.get(tab); | 
 |  292       else | 
 |  293         toolbarItem[name] = property.global; | 
 |  294     } | 
 |  295   }); | 
 |  296  | 
|  196  |  297  | 
|  197   /* Windows */ |  298   /* Windows */ | 
|  198  |  299  | 
|  199   Window = function(win) |  300   Window = function(win) | 
|  200   { |  301   { | 
|  201     this._win = win; |  302     this._win = win; | 
|  202   } |  303   } | 
|  203   Window.prototype = { |  304   Window.prototype = { | 
|  204     get visible() |  305     get visible() | 
|  205     { |  306     { | 
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  531       { |  632       { | 
|  532         return new Window(win); |  633         return new Window(win); | 
|  533       })); |  634       })); | 
|  534     }, |  635     }, | 
|  535     getLastFocused: function(callback) |  636     getLastFocused: function(callback) | 
|  536     { |  637     { | 
|  537       callback(new Window(safari.application.activeBrowserWindow)); |  638       callback(new Window(safari.application.activeBrowserWindow)); | 
|  538     } |  639     } | 
|  539   }; |  640   }; | 
|  540  |  641  | 
|  541   ext.tabs = { |  | 
|  542     onLoading: new LoadingTabEventTarget(safari.application), |  | 
|  543     onBeforeNavigate: new TabEventTarget(safari.application, "beforeNavigate", t
     rue), |  | 
|  544     onCompleted: new TabEventTarget(safari.application, "navigate", true), |  | 
|  545     onActivated: new TabEventTarget(safari.application, "activate", true), |  | 
|  546     onRemoved: new TabEventTarget(safari.application, "close", true) |  | 
|  547   }; |  | 
|  548  |  | 
|  549   ext.backgroundPage = { |  642   ext.backgroundPage = { | 
|  550     getWindow: function() |  643     getWindow: function() | 
|  551     { |  644     { | 
|  552       return safari.extension.globalPage.contentWindow; |  645       return safari.extension.globalPage.contentWindow; | 
|  553     } |  646     } | 
|  554   }; |  647   }; | 
|  555  |  648  | 
|  556   ext.onMessage = new BackgroundMessageEventTarget(); |  649   ext.onMessage = new BackgroundMessageEventTarget(); | 
|  557  |  650  | 
|  558   // TODO: Implement context menu |  651   // TODO: Implement context menu | 
|  559   ext.contextMenus = { |  652   ext.contextMenus = { | 
|  560     create: function(title, contexts, onclick) {}, |  653     create: function(title, contexts, onclick) {}, | 
|  561     removeAll: function(callback) {} |  654     removeAll: function(callback) {} | 
|  562   }; |  655   }; | 
|  563 })(); |  656 })(); | 
| OLD | NEW |