Index: lib/filterComposer.js |
=================================================================== |
--- a/lib/filterComposer.js |
+++ b/lib/filterComposer.js |
@@ -17,10 +17,13 @@ |
/** @module filterComposer */ |
+"use strict"; |
+ |
let {extractHostFromFrame, stringifyURL, isThirdParty} = require("url"); |
let {getKey, checkWhitelisted} = require("whitelisting"); |
let {defaultMatcher} = require("matcher"); |
let {RegExpFilter} = require("filterClasses"); |
+let {port} = require("messaging"); |
function isValidString(s) { |
return s && s.indexOf("\0") == -1; |
@@ -66,25 +69,7 @@ |
return '"' + value.replace(/["\\\{\}\x00-\x1F\x7F]/g, escapeChar) + '"'; |
}; |
-/** |
- * Generates filters to block an element. |
- * @param {Object} details |
- * @param {string} details.tagName The element's tag name |
- * @param {string} details.id The element's "id" attribute |
- * @param {string} details.src The element's "src" attribute |
- * @param {string} details.style The element's "style" attribute |
- * @param {string[]} details.classes The classes given by the element's "class" attribute |
- * @param {string[]} details.urls The URLs considered when loading the element |
- * @param {string} details.type The request type (will be ignored if there are no URLs) |
- * @param {string} details.baseURL The URL of the document containing the element |
- * @param {Page} details.page The page containing the element |
- * @param {Frame} details.frame The frame containing the element |
- * |
- * @return {object} An object holding the list of generated filters and |
- * the list of CSS selectors for the included element |
- * hiding filters: {filters: [...], selectors: [...]} |
- */ |
-exports.composeFilters = function(details) |
+function composeFilters(details) |
{ |
let filters = []; |
let selectors = []; |
@@ -151,4 +136,59 @@ |
} |
return {filters: filters, selectors: selectors}; |
-}; |
+} |
+ |
+port.on("composer.ready", (message, sender) => |
+{ |
+ htmlPages.set(sender.page, null); |
+ refreshIconAndContextMenu(sender.page); |
+}); |
+ |
+port.on("composer.openDialog", (message, sender) => |
+{ |
+ return new Promise(resolve => |
+ { |
+ ext.windows.create({ |
+ url: ext.getURL("block.html"), |
+ left: 50, |
+ top: 50, |
+ width: 420, |
+ height: 200, |
+ focused: true, |
+ type: "popup" |
+ }, |
+ popupPage => |
+ { |
+ let popupPageId = popupPage.id; |
+ function onRemoved(removedPageId) |
+ { |
+ if (popupPageId == removedPageId) |
+ { |
+ sender.page.sendMessage({ |
+ type: "blockelement-popup-closed", |
+ popupId: popupPageId |
+ }); |
+ ext.pages.onRemoved.removeListener(onRemoved); |
+ } |
+ } |
+ ext.pages.onRemoved.addListener(onRemoved); |
+ resolve(popupPageId); |
+ }); |
+ }); |
+}); |
+ |
+port.on("composer.getFilters", (message, sender) => |
+{ |
+ return composeFilters({ |
+ tagName: message.tagName, |
+ id: message.id, |
+ src: message.src, |
+ style: message.style, |
+ classes: message.classes, |
+ urls: message.urls, |
+ type: message.mediatype, |
+ baseURL: message.baseURL, |
+ page: sender.page, |
+ frame: sender.frame |
+ }); |
+}); |