Index: popup.js |
=================================================================== |
deleted file mode 100644 |
--- a/popup.js |
+++ /dev/null |
@@ -1,341 +0,0 @@ |
-/* |
- * This file is part of Adblock Plus <https://adblockplus.org/>, |
- * Copyright (C) 2006-present eyeo GmbH |
- * |
- * Adblock Plus is free software: you can redistribute it and/or modify |
- * it under the terms of the GNU General Public License version 3 as |
- * published by the Free Software Foundation. |
- * |
- * Adblock Plus is distributed in the hope that it will be useful, |
- * but WITHOUT ANY WARRANTY; without even the implied warranty of |
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
- * GNU General Public License for more details. |
- * |
- * You should have received a copy of the GNU General Public License |
- * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
- */ |
- |
-"use strict"; |
- |
-let tab = null; |
- |
-function getPref(key, callback) |
-{ |
- browser.runtime.sendMessage({type: "prefs.get", key}, callback); |
-} |
- |
-function setPref(key, value, callback) |
-{ |
- browser.runtime.sendMessage({type: "prefs.set", key, value}, callback); |
-} |
- |
-function togglePref(key, callback) |
-{ |
- browser.runtime.sendMessage({type: "prefs.toggle", key}, callback); |
-} |
- |
-function isPageWhitelisted(callback) |
-{ |
- browser.runtime.sendMessage({type: "filters.isWhitelisted", tab}, callback); |
-} |
- |
-function whenPageReady() |
-{ |
- return new Promise(resolve => |
- { |
- function onMessage(message, sender) |
- { |
- if (message.type == "composer.ready" && sender.page && |
- sender.page.id == tab.id) |
- { |
- browser.runtime.onMessage.removeListener(onMessage); |
- resolve(); |
- } |
- } |
- |
- browser.runtime.onMessage.addListener(onMessage); |
- |
- browser.runtime.sendMessage({ |
- type: "composer.isPageReady", |
- pageId: tab.id |
- }, |
- ready => |
- { |
- if (ready) |
- { |
- browser.runtime.onMessage.removeListener(onMessage); |
- resolve(); |
- } |
- }); |
- }); |
-} |
- |
-function toggleEnabled() |
-{ |
- let disabled = document.body.classList.toggle("disabled"); |
- browser.runtime.sendMessage({ |
- type: disabled ? "filters.whitelist" : "filters.unwhitelist", |
- tab |
- }); |
-} |
- |
-function activateClickHide() |
-{ |
- document.body.classList.add("clickhide-active"); |
- browser.tabs.sendMessage(tab.id, { |
- type: "composer.content.startPickingElement" |
- }); |
- |
- // Close the popup after a few seconds, so user doesn't have to |
- activateClickHide.timeout = window.setTimeout(window.close, 5000); |
-} |
- |
-function cancelClickHide() |
-{ |
- if (activateClickHide.timeout) |
- { |
- window.clearTimeout(activateClickHide.timeout); |
- activateClickHide.timeout = null; |
- } |
- document.body.classList.remove("clickhide-active"); |
- browser.tabs.sendMessage(tab.id, {type: "composer.content.finished"}); |
-} |
- |
-function reportIssue() |
-{ |
- browser.tabs.create({ |
- url: browser.runtime.getURL("/issue-reporter.html?" + tab.id) |
- }).then(() => |
- { |
- window.close(); |
- }); |
-} |
- |
-function toggleCollapse(event) |
-{ |
- let collapser = event.currentTarget; |
- let collapsible = document.getElementById(collapser.dataset.collapsible); |
- collapsible.classList.toggle("collapsed"); |
- togglePref(collapser.dataset.option); |
-} |
- |
-function getDocLinks(notification) |
-{ |
- if (!notification.links) |
- return Promise.resolve([]); |
- |
- return Promise.all( |
- notification.links.map(link => |
- { |
- return new Promise((resolve, reject) => |
- { |
- browser.runtime.sendMessage({ |
- type: "app.get", |
- what: "doclink", |
- link |
- }, resolve); |
- }); |
- }) |
- ); |
-} |
- |
-function insertMessage(element, text, links) |
-{ |
- let match = /^(.*?)<(a|strong)>(.*?)<\/\2>(.*)$/.exec(text); |
- if (!match) |
- { |
- element.appendChild(document.createTextNode(text)); |
- return; |
- } |
- |
- let before = match[1]; |
- let tagName = match[2]; |
- let value = match[3]; |
- let after = match[4]; |
- |
- insertMessage(element, before, links); |
- |
- let newElement = document.createElement(tagName); |
- if (tagName == "a" && links && links.length) |
- newElement.href = links.shift(); |
- insertMessage(newElement, value, links); |
- element.appendChild(newElement); |
- |
- insertMessage(element, after, links); |
-} |
- |
-function updateStats() |
-{ |
- let statsPage = document.getElementById("stats-page"); |
- browser.runtime.sendMessage({ |
- type: "stats.getBlockedPerPage", |
- tab |
- }, |
- blockedPage => |
- { |
- ext.i18n.setElementText(statsPage, "stats_label_page", |
- [blockedPage.toLocaleString()]); |
- }); |
- |
- let statsTotal = document.getElementById("stats-total"); |
- getPref("blocked_total", blockedTotal => |
- { |
- ext.i18n.setElementText(statsTotal, "stats_label_total", |
- [blockedTotal.toLocaleString()]); |
- }); |
-} |
- |
-function toggleIconNumber() |
-{ |
- togglePref("show_statsinicon", showStatsInIcon => |
- { |
- document.getElementById("show-iconnumber").setAttribute( |
- "aria-checked", showStatsInIcon |
- ); |
- }); |
-} |
- |
-document.addEventListener("DOMContentLoaded", () => |
-{ |
- browser.tabs.query({active: true, lastFocusedWindow: true}, tabs => |
- { |
- if (tabs.length > 0) |
- tab = {id: tabs[0].id, url: tabs[0].url}; |
- |
- let urlProtocol = tab && tab.url && new URL(tab.url).protocol; |
- |
- // Mark page as 'local' to hide non-relevant elements |
- if (urlProtocol != "http:" && urlProtocol != "https:") |
- { |
- document.body.classList.add("local"); |
- document.body.classList.remove("nohtml"); |
- } |
- else |
- { |
- whenPageReady().then(() => |
- { |
- document.body.classList.remove("nohtml"); |
- }); |
- } |
- |
- // Ask content script whether clickhide is active. If so, show |
- // cancel button. If that isn't the case, ask background.html |
- // whether it has cached filters. If so, ask the user whether she |
- // wants those filters. Otherwise, we are in default state. |
- if (tab) |
- { |
- isPageWhitelisted(whitelisted => |
- { |
- if (whitelisted) |
- document.body.classList.add("disabled"); |
- }); |
- |
- browser.tabs.sendMessage(tab.id, { |
- type: "composer.content.getState" |
- }, |
- response => |
- { |
- if (response && response.active) |
- document.body.classList.add("clickhide-active"); |
- }); |
- } |
- |
- updateStats(); |
- document.getElementById("stats-container").removeAttribute("hidden"); |
- }); |
- |
- document.getElementById("enabled").addEventListener( |
- "click", toggleEnabled |
- ); |
- document.getElementById("clickhide").addEventListener( |
- "click", activateClickHide |
- ); |
- document.getElementById("clickhide-cancel").addEventListener( |
- "click", cancelClickHide |
- ); |
- document.getElementById("issueReporter").addEventListener( |
- "click", reportIssue |
- ); |
- document.getElementById("options").addEventListener("click", () => |
- { |
- browser.runtime.sendMessage({type: "app.open", what: "options"}); |
- window.close(); |
- }); |
- |
- // Set up collapsing of menu items |
- for (let collapser of document.getElementsByClassName("collapse")) |
- { |
- collapser.addEventListener("click", toggleCollapse); |
- getPref(collapser.dataset.option, value => |
- { |
- if (value) |
- { |
- document.getElementById( |
- collapser.dataset.collapsible |
- ).classList.remove("collapsed"); |
- } |
- }); |
- } |
- |
- let showIconNumber = document.getElementById("show-iconnumber"); |
- getPref("show_statsinicon", showStatsInIcon => |
- { |
- showIconNumber.setAttribute("aria-checked", showStatsInIcon); |
- }); |
- showIconNumber.addEventListener("click", toggleIconNumber); |
- document.querySelector("label[for='show-iconnumber']").addEventListener( |
- "click", toggleIconNumber |
- ); |
-}); |
- |
-window.addEventListener("load", () => |
-{ |
- browser.runtime.sendMessage({ |
- type: "notifications.get", |
- displayMethod: "popup" |
- }, notification => |
- { |
- if (!notification) |
- return; |
- |
- let titleElement = document.getElementById("notification-title"); |
- let messageElement = document.getElementById("notification-message"); |
- |
- titleElement.textContent = notification.texts.title; |
- |
- getDocLinks(notification).then(docLinks => |
- { |
- insertMessage(messageElement, notification.texts.message, docLinks); |
- |
- messageElement.addEventListener("click", event => |
- { |
- let link = event.target; |
- while (link && link != messageElement && link.localName != "a") |
- link = link.parentNode; |
- if (!link) |
- return; |
- event.preventDefault(); |
- event.stopPropagation(); |
- browser.tabs.create({url: link.href}); |
- }); |
- }); |
- |
- let notificationElement = document.getElementById("notification"); |
- notificationElement.className = notification.type; |
- notificationElement.hidden = false; |
- notificationElement.addEventListener("click", event => |
- { |
- if (event.target.id == "notification-close") |
- notificationElement.classList.add("closing"); |
- else if (event.target.id == "notification-optout" || |
- event.target.id == "notification-hide") |
- { |
- if (event.target.id == "notification-optout") |
- setPref("notifications_ignoredcategories", true); |
- |
- notificationElement.hidden = true; |
- browser.runtime.sendMessage({type: "notifications.clicked"}); |
- } |
- }, true); |
- }); |
-}); |