diff options
Diffstat (limited to 'data/extensions/jsr@javascriptrestrictor/options_domains.js')
-rw-r--r-- | data/extensions/jsr@javascriptrestrictor/options_domains.js | 247 |
1 files changed, 0 insertions, 247 deletions
diff --git a/data/extensions/jsr@javascriptrestrictor/options_domains.js b/data/extensions/jsr@javascriptrestrictor/options_domains.js deleted file mode 100644 index 09a81fe..0000000 --- a/data/extensions/jsr@javascriptrestrictor/options_domains.js +++ /dev/null @@ -1,247 +0,0 @@ -/** \file - * \brief Code that handles domain-specific levels handling in options - * - * \author Copyright (C) 2019-2022 Libor Polcak - * \author Copyright (C) 2019 Martin Timko - * - * \license SPDX-License-Identifier: GPL-3.0-or-later - */ -// -// 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 <https://www.gnu.org/licenses/>. -// - - -function restore_domain(domain, settings) { - domains[domain] = settings; - saveDomainLevels(); - var existPref = document.getElementById(`li-exist-group-${escape(domain)}`); - existPref.classList.remove("hidden"); - var removedPref = document.getElementById(`li-removed-group-${escape(domain)}`); - removedPref.classList.add("hidden"); - var lielem = document.getElementById(`dl-${escape(domain)}`); - lielem.classList.remove("undo"); -} - -function remove_domain(domain) { - // See https://alistapart.com/article/neveruseawarning/ - var existPref = document.getElementById(`li-exist-group-${escape(domain)}`); - existPref.classList.add("hidden"); - var removedPref = document.getElementById(`li-removed-group-${escape(domain)}`); - removedPref.classList.remove("hidden"); - var lielem = document.getElementById(`dl-${escape(domain)}`); - lielem.classList.add("undo"); - delete domains[domain]; - saveDomainLevels(); -} - -function show_restore_domain_level(levelLiEl, domain) { - let level = Object.assign({}, levels[domains[domain].restore]); - if (domains[domain].restore_tweaks) { - level.tweaks = domains[domain].restore_tweaks; - } - if (!level) { - return false; - } - var fragment = document.createRange().createContextualFragment(` - <span class="domain"> - ${escape(domain)} - </span> - <span>JavaScript shield disabled</span> - <button id="enable-jss-${escape(domain)}">${browser.i18n.getMessage("ButtonRestoreLevel", escape(level.level_id))}</button>`); - levelLiEl.appendChild(fragment); - document.getElementById(`enable-jss-${escape(domain)}`).addEventListener("click", function(e) { - e.preventDefault(); - domains[domain] = level; - levelLiEl.innerHTML = ""; - saveDomainLevels(); - show_domain_level_custom_level(levelLiEl, domain); - }); - return true; -} - -function show_domain_level(levelsEl, domain) { - var displayedEl = document.getElementById(`dl-${escape(domain)}`); - if (displayedEl !== null) { - displayedEl.remove(); - } - var fragment = document.createRange().createContextualFragment(`<li class="custom_domain_level" id="dl-${escape(domain)}" jsr_domain="${escape(domain)}"> - </li>`); - levelsEl.appendChild(fragment); - let levelLiEl = document.getElementById(`dl-${escape(domain)}`); - if (domains[domain].restore) { - if (show_restore_domain_level(levelLiEl, domain)) { - return; - } - else { - domains[domain] = level_0; - saveDomainLevels(); - } - } - show_domain_level_custom_level(levelLiEl, domain); -} - -function show_domain_level_custom_level(levelLiEl, domain) { - let tweaks = Object.assign({}, domains[domain].tweaks || {}); - var fragment = document.createRange().createContextualFragment(` - <span class="domain"> - ${escape(domain)} - </span> - <select id="dl-change-${escape(domain)}"></select> - <span id="tweaks-text-${escape(domain)}">tweaked</span> - <button id="show-tweaks-${escape(domain)}" class="help">${browser.i18n.getMessage("ButtonSignExpandOneCharacterDown")}</button> - <span id="li-exist-group-${escape(domain)}"> - <button id="overwrite-dl-${escape(domain)}">${browser.i18n.getMessage("ButtonSave")}</button> - <button id="delete-dl-${escape(domain)}">${browser.i18n.getMessage("ButtonRemove")}</button> - </span> - <span id="li-removed-group-${escape(domain)}" class="hidden"> - <button id="restore-dl-${escape(domain)}">${browser.i18n.getMessage("ButtonRestore")}</button> - </span> - <div class="tweakgrid" id="tweaks-${escape(domain)}"></div>`); - levelLiEl.appendChild(fragment); - let levelSelectEl = document.getElementById(`dl-change-${escape(domain)}`); - update_domain_level(levelSelectEl, domains[domain].level_id); - document.getElementById(`overwrite-dl-${escape(domain)}`).addEventListener("click", function(e) { - e.preventDefault(); - let domainLevel = levelSelectEl.value; - domains[domain] = { - level_id: domainLevel, - } - if (Object.keys(tweaks).length > 0) { - domains[domain].tweaks = tweaks; - } - saveDomainLevels(); - }); - document.getElementById(`delete-dl-${escape(domain)}`).addEventListener("click", remove_domain.bind(null, domain)); - document.getElementById(`restore-dl-${escape(domain)}`).addEventListener("click", restore_domain.bind(null, domain, domains[domain])); - let tweaksEl = document.getElementById(`tweaks-${escape(domain)}`); - let tweaksTextEl = document.getElementById(`tweaks-text-${escape(domain)}`); - let tweaksBusiness = Object.create(tweaks_gui); - tweaksBusiness.get_current_tweaks = function() { - return getTweaksForLevel(domains[domain].level_id, tweaks); - }; - tweaksBusiness.tweak_changed = function(group_id, desired_tweak) { - if ((desired_tweak === levels[levelSelectEl.value][group_id]) || (desired_tweak === 0 && levels[levelSelectEl.value][group_id] === undefined)) { - delete tweaks[group_id]; - } - else { - tweaks[group_id] = desired_tweak; - } - if (Object.keys(tweaks).length > 0) { - domains[domain].tweaks = tweaks; - tweaksTextEl.classList.remove("hidden_descr"); - } - else { - tweaksTextEl.classList.add("hidden_descr"); - } - } - tweaksBusiness.create_tweaks_html(tweaksEl); - if (Object.keys(tweaks).length == 0) { - tweaksEl.classList.add("hidden_descr"); - tweaksTextEl.classList.add("hidden_descr"); - } - levelSelectEl.addEventListener("change", function(e) { - let oldtweaks = domains[domain].tweaks || {}; - domains[domain] = { - level_id: this.value, - } - if (Object.keys(oldtweaks).length > 0) { - domains[domain].tweaks = oldtweaks; - } - tweaksBusiness.create_tweaks_html(tweaksEl); - }); - document.getElementById(`show-tweaks-${escape(domain)}`).addEventListener("click", function(ev) { - tweaksEl.classList.toggle("hidden_descr"); - ev.preventDefault(); - }); -} - -function insert_domain_levels() { - // Insert all known levels to GUI - var allDomainsElement = document.getElementById("domain-level-list"); - for (let domain in domains) { - if (domain === escape(domain)) { - // Do not display invalid domains inserted before https://pagure.io/JShelter/webextension/issue/45 fix - // Note that an invalid domain can be inserted through advanced options - show_domain_level(allDomainsElement, domain); - } - else { - console.error("Invalid domain in configuration: " + domain); - } - } -} - -window.addEventListener("load", function() { - if (!levels_initialised) { - levels_updated_callbacks.push(insert_domain_levels); - levels_updated_callbacks.push(update_domain_level.bind(null, document.getElementById("domain-level"))); - } - else { - insert_domain_levels(); - update_domain_level(document.getElementById("domain-level")); - } -}); - -document.getElementById("add_domain").addEventListener("click", function (e) { - e.preventDefault(); - let domainEl = document.getElementById("domain-text"); - let domain = domainEl.value; - if (escape(domain) !== domain) { - alert("Unsupported domain " + domain); - return; - } - let domainLevel = document.getElementById("domain-level"); - if (domain in domains) { - let ok = confirm(browser.i18n.getMessage("JSSAdvancedConfirmOverwrite", domain)); - if (!ok) { - return; - } - } - domains[domain] = { - level_id: domainLevel.value, - } - saveDomainLevels(); - domainEl.value = ""; - var allDomainsElement = document.getElementById("domain-level-list"); - show_domain_level(allDomainsElement, domain); -}); - -function update_domain_level(dlel, set_value) { - var finalValue = set_value || dlel.value; - dlel.textContent = ""; - for (let levelid in levels) { - let descr = levels[levelid].level_description; - dlel.appendChild(document.createRange().createContextualFragment(`<option value="${escape(levelid)}">${browser.i18n.getMessage("LevelAndDescription", [escape(levels[levelid].level_text), escape(create_short_text(descr, 50))])}</option>`)); - }; - dlel.value = finalValue; -} - -document.getElementById("save-all-domain-levels").addEventListener("click", function (e) { - e.preventDefault(); - Array.prototype.forEach.call(document.getElementsByClassName("undo"), (el) => el.remove()); - Array.prototype.forEach.call(document.getElementsByClassName("custom_domain_level"), function (el) { - let new_val = el.getElementsByTagName("select")[0].value; - domains[el.attributes["jsr_domain"].value].level_id = new_val; - }); - saveDomainLevels(); -}); - -document.getElementById("delete-all-domain-levels").addEventListener("click", function (e) { - domains = {}; - saveDomainLevels(); - Array.from(document.getElementsByClassName("custom_domain_level")).forEach((el) => el.remove()); -}); - -window.addEventListener("DOMContentLoaded", function() { - document.getElementById("domain-text").attributes.placeholder.nodeValue = browser.i18n.getMessage("ExampleDomainsText") -}); |