| Index: lib/child/objectTabs.js |
| =================================================================== |
| copy from lib/objectTabs.js |
| copy to lib/child/objectTabs.js |
| --- a/lib/objectTabs.js |
| +++ b/lib/child/objectTabs.js |
| @@ -27,52 +27,16 @@ var objTabs = |
| { |
| /** |
| * Number of milliseconds to wait until hiding tab after the mouse moves away. |
| * @type Integer |
| */ |
| HIDE_DELAY: 1000, |
| /** |
| - * Flag used to trigger object tabs initialization first time object tabs are |
| - * used. |
| - * @type Boolean |
| - */ |
| - initialized: false, |
| - |
| - /** |
| - * Will be set to true while initialization is in progress. |
| - * @type Boolean |
| - */ |
| - initializing: false, |
| - |
| - /** |
| - * Parameters for _showTab, to be called once initialization is complete. |
| - */ |
| - delayedShowParams: null, |
| - |
| - /** |
| - * Randomly generated class to be used for visible object tabs on top of object. |
| - * @type String |
| - */ |
| - objTabClassVisibleTop: null, |
| - |
| - /** |
| - * Randomly generated class to be used for visible object tabs at the bottom of the object. |
| - * @type String |
| - */ |
| - objTabClassVisibleBottom: null, |
| - |
| - /** |
| - * Randomly generated class to be used for invisible object tabs. |
| - * @type String |
| - */ |
| - objTabClassHidden: null, |
| - |
| - /** |
| * Document element the object tab is currently being displayed for. |
| * @type Element |
| */ |
| currentElement: null, |
| /** |
| * Windows that the window event handler is currently registered for. |
| * @type Window[] |
| @@ -105,115 +69,52 @@ var objTabs = |
| /** |
| * Used when hideTimer is running, time when the tab should be hidden. |
| * @type Integer |
| */ |
| hideTargetTime: 0, |
| /** |
| - * Initializes object tabs (generates random classes and registers stylesheet). |
| + * Localized texts and class names to be used for the tab. |
| + * @type Object |
| */ |
| - _initCSS: function() |
| - { |
| - function processCSSData(request) |
| - { |
| - if (onShutdown.done) |
| - return; |
| - |
| - let data = request.responseText; |
| - |
| - let rnd = []; |
| - let offset = "a".charCodeAt(0); |
| - for (let i = 0; i < 60; i++) |
| - rnd.push(offset + Math.random() * 26); |
| - |
| - this.objTabClassVisibleTop = String.fromCharCode.apply(String, rnd.slice(0, 20)); |
| - this.objTabClassVisibleBottom = String.fromCharCode.apply(String, rnd.slice(20, 40)); |
| - this.objTabClassHidden = String.fromCharCode.apply(String, rnd.slice(40, 60)); |
| - |
| - let {Utils} = require("utils"); |
| - let url = Utils.makeURI("data:text/css," + encodeURIComponent(data.replace(/%%CLASSVISIBLETOP%%/g, this.objTabClassVisibleTop) |
| - .replace(/%%CLASSVISIBLEBOTTOM%%/g, this.objTabClassVisibleBottom) |
| - .replace(/%%CLASSHIDDEN%%/g, this.objTabClassHidden))); |
| - Utils.styleService.loadAndRegisterSheet(url, Ci.nsIStyleSheetService.USER_SHEET); |
| - onShutdown.add(function() |
| - { |
| - Utils.styleService.unregisterSheet(url, Ci.nsIStyleSheetService.USER_SHEET); |
| - }); |
| - |
| - this.initializing = false; |
| - this.initialized = true; |
| - |
| - if (this.delayedShowParams) |
| - this._showTab.apply(this, this.delayedShowParams); |
| - } |
| - |
| - this.delayedShowParams = arguments; |
| - |
| - if (!this.initializing) |
| - { |
| - this.initializing = true; |
| - |
| - // Load CSS asynchronously |
| - try { |
| - let request = new XMLHttpRequest(); |
| - request.mozBackgroundRequest = true; |
| - request.open("GET", "chrome://adblockplus/content/objtabs.css"); |
| - request.overrideMimeType("text/plain"); |
| - |
| - request.addEventListener("load", processCSSData.bind(this, request), false); |
| - request.send(null); |
| - } |
| - catch (e) |
| - { |
| - Cu.reportError(e); |
| - this.initializing = false; |
| - } |
| - } |
| - }, |
| + texts: null, |
| /** |
| * Called to show object tab for an element. |
| */ |
| showTabFor: function(/**Element*/ element) |
| { |
| // Object tabs aren't usable in Fennec |
| let {application} = require("info"); |
| if (application == "fennec" || application == "fennec2" || |
| application == "adblockbrowser") |
| return; |
| - let {Prefs} = require("prefs"); |
| - if (!Prefs.frameobjects) |
| + if (!sendSyncMessage("AdblockPlus:GetObjectTabsStatus")) |
| return; |
| if (this.hideTimer) |
| { |
| this.hideTimer.cancel(); |
| this.hideTimer = null; |
| } |
| if (this.objtabElement) |
| this.objtabElement.style.setProperty("opacity", "1", "important"); |
| if (this.currentElement != element) |
| { |
| this._hideTab(); |
| - let {Policy} = require("contentPolicy"); |
| - let {RequestNotifier} = require("requestNotifier"); |
| + let {RequestNotifier} = require("child/requestNotifier"); |
| let data = RequestNotifier.getDataForNode(element, true, "OBJECT"); |
| if (data) |
| - { |
| - if (this.initialized) |
| - this._showTab(element, data[1]); |
| - else |
| - this._initCSS(element, data[1]); |
| - } |
| + this._showTab(element, data[1]); |
| } |
| }, |
| /** |
| * Called to hide object tab for an element (actual hiding happens delayed). |
| */ |
| hideTabFor: function(/**Element*/ element) |
| { |
| @@ -227,27 +128,26 @@ var objTabs = |
| /** |
| * Makes the tab element visible. |
| * @param {Element} element |
| * @param {RequestEntry} data |
| */ |
| _showTab: function(element, data) |
| { |
| - let {UI} = require("ui"); |
| - if (!UI.overlay) |
| - return; |
| + if (!this.texts) |
| + this.texts = sendSyncMessage("AdblockPlus:GetObjectTabsTexts"); |
| let doc = element.ownerDocument.defaultView.top.document; |
| this.objtabElement = doc.createElementNS("http://www.w3.org/1999/xhtml", "a"); |
| - this.objtabElement.textContent = UI.overlay.attributes.objtabtext; |
| - this.objtabElement.setAttribute("title", UI.overlay.attributes.objtabtooltip); |
| + this.objtabElement.textContent = this.texts.label; |
| + this.objtabElement.setAttribute("title", this.texts.tooltip); |
| this.objtabElement.setAttribute("href", data.location); |
| - this.objtabElement.setAttribute("class", this.objTabClassHidden); |
| + this.objtabElement.setAttribute("class", this.texts.classHidden); |
| this.objtabElement.style.setProperty("opacity", "1", "important"); |
| this.objtabElement.nodeData = data; |
| this.currentElement = element; |
| // Register paint listeners for the relevant windows |
| this.windowListeners = []; |
| let wnd = element.ownerDocument.defaultView; |
| @@ -273,18 +173,16 @@ var objTabs = |
| this._positionTab(); |
| }, |
| /** |
| * Hides the tab element. |
| */ |
| _hideTab: function() |
| { |
| - this.delayedShowParams = null; |
| - |
| if (this.objtabElement) |
| { |
| // Prevent recursive calls via popuphidden handler |
| let objtab = this.objtabElement; |
| this.objtabElement = null; |
| this.currentElement = null; |
| if (this.hideTimer) |
| @@ -327,23 +225,23 @@ var objTabs = |
| !elementDoc.defaultView || !elementDoc.documentElement) |
| { |
| this._hideTab(); |
| return; |
| } |
| let objRect = this._getElementPosition(this.currentElement); |
| - let className = this.objTabClassVisibleTop; |
| + let className = this.texts.classVisibleTop; |
| let left = objRect.right - this.objtabElement.offsetWidth; |
| let top = objRect.top - this.objtabElement.offsetHeight; |
| if (top < 0) |
| { |
| top = objRect.bottom; |
| - className = this.objTabClassVisibleBottom; |
| + className = this.texts.classVisibleBottom; |
| } |
| if (this.objtabElement.style.left != left + "px") |
| this.objtabElement.style.setProperty("left", left + "px", "important"); |
| if (this.objtabElement.style.top != top + "px") |
| this.objtabElement.style.setProperty("top", top + "px", "important"); |
| if (this.objtabElement.getAttribute("class") != className) |
| @@ -410,20 +308,18 @@ var objTabs = |
| rect.bottom += relTop; |
| } |
| return rect; |
| }, |
| doBlock: function() |
| { |
| - let {UI} = require("ui"); |
| - let {Utils} = require("utils"); |
| - let chromeWindow = Utils.getChromeWindow(this.currentElement.ownerDocument.defaultView); |
| - UI.blockItem(chromeWindow, this.currentElement, this.objtabElement.nodeData); |
| + // TODO: Store this.currentElement for the filter assistant |
|
Wladimir Palant
2015/11/06 19:52:43
Making filter assistant work with nodes correctly
|
| + sendAsyncMessage("AdblockPlus:BlockItem", this.objtabElement.nodeData); |
| }, |
| /** |
| * Called whenever a timer fires. |
| * @param {nsISupport} subject |
| * @param {string} topic |
| * @param {string} data |
| */ |