diff options
author | Ruben Rodriguez <ruben@gnu.org> | 2018-09-13 20:39:48 -0400 |
---|---|---|
committer | Ruben Rodriguez <ruben@gnu.org> | 2018-09-13 21:02:13 -0400 |
commit | d26b319fd6f98517cc3421f10bf18698b953e4d2 (patch) | |
tree | bc70c4e472a2eaf514d411dba5067d530e5bbea9 /data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel | |
parent | c3b304c51a3386ea09527a479a883253ea35243a (diff) |
Updated extensions list for v60
Diffstat (limited to 'data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel')
3 files changed, 438 insertions, 0 deletions
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/display-panel.html b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/display-panel.html new file mode 100644 index 0000000..df153b3 --- /dev/null +++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/display-panel.html @@ -0,0 +1,104 @@ +<!doctype html> +<html> +<head> +<meta charset="utf-8"/> +<title>Display JS Monitoring Panel</title> +<link rel="stylesheet" type="text/css" href="./panel-styles.css"/> + +<!-- /** + * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript. + * * + * Copyright (C) 2011, 2012, 2014 Loic J. Duros + * Copyright (C) 2017, 2018 NateN1222 <nathannichols454@gmail.com> + * Copyright (C) 2018 Ruben Rodriguez <ruben@gnu.org> + * Copyright (C) 2018 Giorgio Maone <giorgio@maone.net> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +--> +</head> + +<body> + <div id="header"> + <div class="title-area"> + <div> + <a class="libre" + id="ljs-settings" + href= href="https://www.gnu.org/software/librejs/" + title="LibreJS Page Settings"> + <h1 class="libre">LibreJS</h1> + </a> + </div> + </div> + <div id="buttons" class="title-area"> + <div> + <a target="_blank" href="https://www.gnu.org/software/librejs/" + id="librejs-web-link">gnu.org/software/librejs</a> + </div> + <div> + <strong>LibreJS <span id="version"></span></strong> + </div> + <button id="complain">Complain to site owner</button> + <button id="report-tab">Show this report in a new tab</button> + <button id="open-options">Settings...</button> + </div> + </div> + <div id="info"> + <div id="site"> + <h2 class="site">This whole site <span></span></h2> + <div class="buttons"> + <button class="whitelist" name="*">Whitelist</button> + <button class="blacklist" name="*">Blacklist</button> + <button class="forget" name="*">Forget</button> + </div> + </div> + <div id="unknown" class="unknown-js"> + <h2></h2> + <p id="must-reload"> + LibreJS will decide whether blocking these scripts next time this page is loaded. <button id="reload">Reload it now</button> + </p> + <ul> + <li id="li-template"> + <a class="script-url" href="#"></a>: + <p class="reason"></p> + <div class="buttons"> + <button class="whitelist">Whitelist</button> + <button class="blacklist">Blacklist</button> + <button class="forget">Forget</button> + <button class="forget" name="*">Forget <span class="domain"></span></button> + </div> + </li> + </ul> + </div> + <div id="whitelisted" class="accepted-js"> + <h2></h2> + <ul></ul> + </div> + <div id="accepted" class="accepted-js"> + <h2></h2> + <ul></ul> + </div> + <div id="blocked" class="blocked-js"> + <h2></h2> + <ul></ul> + </div> + <div id="blacklisted" class="blocked-js"> + <h2></h2> + <ul></ul> + </div> + </div> +</body> +<script src="main_panel.js"></script> +</html> diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/main_panel.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/main_panel.js new file mode 100644 index 0000000..c55b167 --- /dev/null +++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/main_panel.js @@ -0,0 +1,177 @@ +/** +* GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript. +* * +* Copyright (C) 2017, 2018 NateN1222 <nathannichols454@gmail.com> +* Copyright (C) 2018 Ruben Rodriguez <ruben@gnu.org> +* Copyright (C) 2018 Giorgio Maone <giorgio@maone.net> +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program 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 this program. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +var fromTab = window.location.hash.match(/^#fromTab=(\d+)/) && RegExp.$1; +if (fromTab) { + let browserStyle = document.createElement("link"); + browserStyle.rel = "stylesheet"; + browserStyle.href = "chrome://browser/content/extension.css"; + document.head.appendChild(browserStyle); + document.documentElement.classList.add("tab"); +} + +var myPort = browser.runtime.connect({name: "port-from-cs"}); +var currentReport; + +// Sends a message that tells the background script the window is open +myPort.postMessage({"update": true, tabId: parseInt(currentReport && currentReport.tabId || fromTab) || ""}); + +// Display the actual extension version Number +document.querySelector("#version").textContent = browser.runtime.getManifest().version; + +var liTemplate = document.querySelector("#li-template"); +liTemplate.remove(); + +document.querySelector("#info").addEventListener("click", e => { + let button = e.target; + if (!button.matches(".buttons > button")) return; + let li = button.closest("li"); + let entry = li && li._scriptEntry || [currentReport.url, "Page's site"]; + let action = button.className; + let site = button.name === "*"; + if (site) { + ([action] = action.split("-")); + } + myPort.postMessage({[action]: entry, site, tabId: currentReport.tabId}); +}); + +document.querySelector("#report-tab").onclick = e => { + myPort.postMessage({report_tab: currentReport}); + close(); +} + +document.querySelector("#complain").onclick = e => { + myPort.postMessage({invoke_contact_finder: currentReport}); + close(); +} + +document.querySelector("#open-options").onclick = e => { + browser.runtime.openOptionsPage(); + close(); +} + +document.querySelector("#reload").onclick = async e => { + let {tabId} = currentReport; + if (tabId) { + await browser.tabs.reload(tabId); + myPort.postMessage({"update": true, tabId}); + } +}; + +/* +* Takes in the [[file_id, reason],...] array and the group name for one group +* of scripts found in this tab, rendering it as a list with management buttons. +* Groups are "unknown", "blacklisted", "whitelisted", "accepted", and "blocked". +*/ +function createList(data, group){ + var {url} = data; + let entries = data[group]; + let container = document.getElementById(group); + let heading = container.querySelector("h2"); + var list = container.querySelector("ul"); + list.classList.toggle(group, true); + if (Array.isArray(entries) && entries.length) { + heading.innerHTML = `<span class="type-name">${group}</span> scripts in ${url}:`; + container.classList.remove("empty"); + } else { + // default message + list.innerHTML = `<li>No <span class="type-name">${group}</span> scripts on this page.</li>` + entries = data[group] = []; + container.classList.add("empty"); + } + // generate list + for (let entry of entries) { + let [scriptId, reason] = entry; + let li = liTemplate.cloneNode(true); + let a = li.querySelector("a"); + a.href = scriptId.split("(")[0]; + a.textContent = scriptId; + li.querySelector(".reason").textContent = reason; + let bySite = !!reason.match(/https?:\/\/[^/]+\/\*/); + li.classList.toggle("by-site", bySite); + if (bySite) { + let domain = li.querySelector(".forget .domain"); + if (domain) domain.textContent = RegExp.lastMatch; + } + li._scriptEntry = entry; + list.appendChild(li); + } + +} + +/** +* Updates scripts lists and buttons to act on them. +* If return_HTML is true, it returns the HTML of the popup window without updating it. +* example report argument: +* { +* "accepted": [["FILENAME 1","REASON 1"],["FILENAME 2","REASON 2"]], +* "blocked": [["FILENAME 1","REASON 1"],["FILENAME 2","REASON 2"]], +* "whitelisted": [["FILENAME 1","REASON 1"],["FILENAME 2","REASON 2"]], +* "blacklisted": [["FILENAME 1","REASON 1"],["FILENAME 2","REASON 2"]], +* "unknown": [["FILENAME 1","REASON 1"],["FILENAME 2","REASON 2"]], +* "url":"example.com" +* }; +* +*/ +function refreshUI(report) { + currentReport = report; + + document.querySelector("#site").className = report.siteStatus || ""; + document.querySelector("#site h2").textContent = + `This site ${report.site}`; + + for (let toBeErased of document.querySelectorAll("#info h2:not(.site) > *, #info ul > *")) { + toBeErased.remove(); + } + + let scriptsCount = 0; + for (let group of ["unknown", "accepted", "whitelisted", "blocked", "blacklisted"]) { + if (group in report) createList(report, group); + scriptsCount += report[group].length; + } + + for (let b of document.querySelectorAll(`.forget, .whitelist, .blacklist`)) { + b.disabled = false; + } + for (let b of document.querySelectorAll( + `.unknown .forget, .accepted .forget, .blocked .forget, + .whitelisted .whitelist, .blacklisted .blacklist` + )) { + b.disabled = true; + } + + let noscript = scriptsCount === 0; + document.body.classList.toggle("empty", noscript); +} + +myPort.onMessage.addListener(m => { + if (m.show_info) { + refreshUI(m.show_info); + } +}); + +function print_local_storage(){ + myPort.postMessage({"printlocalstorage": true}); +} +function delete_local_storage(){ + myPort.postMessage({"deletelocalstorage":true}); +} diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/panel-styles.css b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/panel-styles.css new file mode 100644 index 0000000..cbf5cf5 --- /dev/null +++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/html/display_panel/content/panel-styles.css @@ -0,0 +1,157 @@ +/** + * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript. + * * + * Copyright (C) 2011, 2012, 2014 Loic J. Duros + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. + * + */ +@import url("/html/common.css"); + +body { + width:500px; +} +#header{ +display:block; +width:500px; +} + +h2 { + font-size:1.1em; + font-weight:bold; + font-family:arial; + border-bottom:4px solid #444; + padding-bottom:0; + margin:10px 0 0 0; + line-height:140%; +} +code { + font-size:1.2em; + margin:0; + padding:0; +} +ul { + margin:0; + padding:0; + list-style:none; +} +#info li { + padding:5px; + border-bottom:2px solid #CCC; + margin:0; + overflow: hidden; +} + +#info ul ul { + margin:10px; + list-style:disc; +} +#info ul ul li { + padding:5px; + border-bottom:0; +} +#info { + clear:both; +} + +#info .type-name { + text-transform: uppercase; + font-weight: bold; +} + +#info .accepted-js .type-name { + color: #080; +} + +#info .blocked-js .type-name { + color: #800; +} + +#info .unknown-js .type-name { + color: #008; +} + +#info .unknown-js .reason { + display: none; +} + +.by-site button.forget, button.forget[name="*"] { + display: none; +} + +.by-site button.forget[name="*"], #site .forget[name="*"] { + display: initial; +} + + +button.whitelist { + color: #080; +} +button.blacklist { + color: #800; +} +button.forget { + color: #008; +} + +button:disabled { + color: #888 !important; +} + +span.accepted, span.blocked { + color:#008e00; + font-size:145%; + font-variant:small-caps; + font-weight:bold; +} + +span.blocked { + color:#8e0000; +} + +.title-area { + width: 250px; + float:left !important; + text-align: center !important; +} + +.title-area #librejs-web-link { + font-size: 18px; +} + +#librejs-web-labels-pages>ul { + margin-top: 8px; + font-size: 14px; + list-style-type: disc; +} + + +.empty #site, .unknown-js.empty { + display: none; +} + +.tab #must-reload, .tab #buttons, .empty #buttons { + display: none; +} + +#buttons button { + width: 100%; + text-align: center; +} + + + +#complain { + display: none; /* TODO: Complaint to owner UI */ +} |