summaryrefslogtreecommitdiff
path: root/data/extensions/https-everywhere@eff.org/pages/popup/ux.js
diff options
context:
space:
mode:
authorRuben Rodriguez <ruben@gnu.org>2019-05-10 19:05:20 -0400
committerRuben Rodriguez <ruben@gnu.org>2019-05-10 19:05:20 -0400
commit7859a9131fcda359265dc16ef55933e5ed218119 (patch)
treeecb4bf7a0fd005a637d3ff0444ce9afaa8817ba9 /data/extensions/https-everywhere@eff.org/pages/popup/ux.js
parentcb4bbb16a12d495eca1ac05ebacc7557e9b05c05 (diff)
Updated extensions bundle
Diffstat (limited to 'data/extensions/https-everywhere@eff.org/pages/popup/ux.js')
-rw-r--r--data/extensions/https-everywhere@eff.org/pages/popup/ux.js180
1 files changed, 136 insertions, 44 deletions
diff --git a/data/extensions/https-everywhere@eff.org/pages/popup/ux.js b/data/extensions/https-everywhere@eff.org/pages/popup/ux.js
index f50a928..142c372 100644
--- a/data/extensions/https-everywhere@eff.org/pages/popup/ux.js
+++ b/data/extensions/https-everywhere@eff.org/pages/popup/ux.js
@@ -11,34 +11,67 @@
* Handles rule (de)activation in the popup
*/
function toggleRuleLine(event) {
- if (event.target.matches("input[type=checkbox]")) {
- getTab(activeTab => {
- const set_ruleset = {
- active: event.target.checked,
- name: event.target.nextSibling.innerText,
- tab_id: activeTab.id,
- };
-
- sendMessage("set_ruleset_active_status", set_ruleset, () => {
- // purge the name from the cache so that this unchecking is persistent.
- sendMessage("delete_from_ruleset_cache", set_ruleset.name, () => {
- // Now reload the selected tab of the current window.
- chrome.tabs.reload(set_ruleset.tab_id);
- });
+ getTab(activeTab => {
+ const set_ruleset = {
+ active: event.target.parentNode.firstChild.checked,
+ name: event.target.innerText,
+ tab_id: activeTab.id,
+ };
+
+ sendMessage("set_ruleset_active_status", set_ruleset, () => {
+ // purge the name from the cache so that this unchecking is persistent.
+ sendMessage("delete_from_ruleset_cache", set_ruleset.name, () => {
+ // Now reload the selected tab of the current window.
+ chrome.tabs.reload(set_ruleset.tab_id);
});
});
- }
+ });
}
+/**
+ * @param {object} event
+ * @description Toggles content for user to view rules and explanations for different modes
+ */
+function toggleSeeMore(event) {
+ let target = event.target;
+ let content;
+
+ if (target !== this) {
+ content = document.querySelector('.see_more__content');
+ } else {
+ content = target.parentNode.querySelector('.see_more__content');
+ }
+
+ let arrow = target.parentNode.querySelector('.see_more__arrow');
+ let text = target.parentNode.querySelector('.see_more__text');
+
+ if(arrow.classList.contains('down')) {
+ arrow.classList.replace('down', 'up');
+ text.innerText = 'See less';
+ } else if (arrow.classList.contains('up')) {
+ arrow.classList.replace('up', 'down');
+ text.innerText = 'See more';
+ }
+
+ if (content.classList.contains('hide')) {
+ content.classList.replace('hide', 'show');
+ } else if (content.classList.contains('show')) {
+ content.classList.replace('show', 'hide');
+ }
+}
/**
* Creates rule lines (including checkbox and icon) for the popup
* @param rulesets
* @param list_div
+ * @param {string} ruleType
* @returns {*}
*/
-function appendRulesToListDiv(rulesets, list_div) {
+function appendRulesToListDiv(rulesets, list_div, ruleType) {
if (rulesets && rulesets.length) {
+ let counter = rulesets.length;
+ let counterElement = document.querySelector("#RuleManagement--counter");
+ counterElement.innerText = counter;
// template parent block for each ruleset
let templateLine = document.createElement("div");
templateLine.className = "rule checkbox";
@@ -55,18 +88,26 @@ function appendRulesToListDiv(rulesets, list_div) {
// img "remove" button
let templateRemove = document.createElement("img");
- templateRemove.src = chrome.extension.getURL("images/remove.png");
+ templateRemove.src = chrome.runtime.getURL("images/remove.png");
templateRemove.className = "remove";
- templateLabel.appendChild(templateCheckbox);
+ templateLine.appendChild(templateCheckbox);
templateLabel.appendChild(templateLabelText);
templateLine.appendChild(templateLabel);
+ let increment = 0;
+
for (const ruleset of rulesets) {
+ increment++;
let line = templateLine.cloneNode(true);
let checkbox = line.querySelector("input[type=checkbox]");
+ let label = line.querySelector("label");
let text = line.querySelector("span");
+ // For each "id" attribute in each checkbox input and "for" attribute in label
+ checkbox.setAttribute("id", `${ruleType}_ruleset_${increment}`);
+ label.setAttribute("for", `${ruleType}_ruleset_${increment}`);
+
checkbox.checked = ruleset.active;
text.innerText = ruleset.name;
@@ -95,6 +136,8 @@ function showHttpNowhereUI() {
getOption_('httpNowhere', false, function(item) {
if (item.httpNowhere) {
e('http-nowhere-checkbox').checked = true;
+ e('HttpNowhere__header').innerText = 'Encrypt All Sites Eligible is ON';
+ e('HttpNowhere__explained').innerText = 'Unencrypted requests are currently blocked';
}
e('HttpNowhere').style.visibility = "visible";
});
@@ -108,30 +151,32 @@ function updateEnabledDisabledUI() {
// Hide or show the rules sections
if (item.globalEnabled) {
document.body.className = ""
- showHttpNowhereUI()
+ showHttpNowhereUI();
} else {
- document.body.className = "disabled"
+ document.body.className = "disabled";
+ e('onoffswitch_label').innerText = 'HTTPS Everywhere is OFF';
}
});
}
// Toggle extension enabled/disabled status
function toggleEnabledDisabled() {
- var extension_toggle_effect = function() {
+ let extension_toggle_effect = function() {
updateEnabledDisabledUI();
- // The extension state changed, so reload this tab.
- chrome.tabs.reload();
- window.close();
+ // The extension state changed, give some time for toggle animation and reload tab
+ setTimeout(function() {
+ chrome.tabs.reload();
+ window.close();
+ }, 1500);
}
getOption_('globalEnabled', true, function(item) {
setOption_('globalEnabled', !item.globalEnabled, extension_toggle_effect);
});
-
}
/**
- * Create the list of rules for a specific tab
+ * @description Create the list of rules for a specific tab
* @param activeTab
*/
function listRules(activeTab) {
@@ -140,11 +185,11 @@ function listRules(activeTab) {
const stableRules = rulesets.filter(ruleset => ruleset.default_state);
const unstableRules = rulesets.filter(ruleset => !ruleset.default_state);
- appendRulesToListDiv(stableRules, e("StableRules"));
- appendRulesToListDiv(unstableRules, e("UnstableRules"));
+ appendRulesToListDiv(stableRules, e("StableRules"), 'stable');
+ appendRulesToListDiv(unstableRules, e("UnstableRules"), 'unstable');
// Add listener to capture the toggle event
- e("RuleManagement").addEventListener("click", toggleRuleLine);
+ e("add-new-rule-button").addEventListener("click", toggleRuleLine);
}
// Only show the "Add a rule" section if we're on an HTTPS page
@@ -161,7 +206,7 @@ document.addEventListener("DOMContentLoaded", function () {
getTab(tab => {
const url = new URL(tab.url);
sendMessage("check_if_site_disabled", url.host, disabled => {
- if(!disabled){
+ if(!disabled) {
listRules(tab);
}
showEnableOrDisable(url, disabled);
@@ -172,12 +217,22 @@ document.addEventListener("DOMContentLoaded", function () {
updateEnabledDisabledUI();
e('onoffswitch').addEventListener('click', toggleEnabledDisabled);
e('http-nowhere-checkbox').addEventListener('click', toggleHttpNowhere, false);
+ e('RuleManagement__see_more--prompt').addEventListener('click', toggleSeeMore);
+
e('reset-to-defaults').addEventListener('click', () => {
- if (confirm(chrome.i18n.getMessage("prefs_reset_defaults_message"))) {
- sendMessage("reset_to_defaults", null, () => {
- window.close();
- });
- }
+ sendMessage("is_firefox", null, is_firefox => {
+ if (is_firefox) {
+ sendMessage("reset_to_defaults", null, () => {
+ window.close();
+ });
+ } else {
+ if (confirm(chrome.i18n.getMessage("prefs_reset_defaults_message"))) {
+ sendMessage("reset_to_defaults", null, () => {
+ window.close();
+ });
+ }
+ }
+ });
});
// Print the extension's current version.
@@ -186,16 +241,27 @@ document.addEventListener("DOMContentLoaded", function () {
version_info.innerText = the_manifest.version;
let rulesets_versions = e('rulesets-versions');
+
+ rulesets_versions.addSpan = function(update_channel_name, ruleset_version_string) {
+ let timestamp_span = document.createElement("span");
+ timestamp_span.className = "rulesets-version";
+ timestamp_span.innerText = `${chrome.i18n.getMessage("about_rulesets_version")} ${update_channel_name}: ${ruleset_version_string}`;
+ this.appendChild(timestamp_span);
+ }
+
sendMessage("get_ruleset_timestamps", null, timestamps => {
- for(let [update_channel, timestamp] of timestamps){
- if(timestamp > 0){
+ let replaces = timestamps.some(([update_channel, timestamp]) =>
+ update_channel.replaces_default_rulesets && timestamp > 0
+ );
+ if(!replaces) {
+ rulesets_versions.addSpan("EFF (Full, Bundled)", the_manifest.version);
+ }
+ for(let [update_channel, timestamp] of timestamps) {
+ if(timestamp > 0) {
let ruleset_date = new Date(timestamp * 1000);
let ruleset_version_string = ruleset_date.getUTCFullYear() + "." + (ruleset_date.getUTCMonth() + 1) + "." + ruleset_date.getUTCDate();
- let timestamp_span = document.createElement("span");
- timestamp_span.className = "rulesets-version";
- timestamp_span.innerText = chrome.i18n.getMessage("about_rulesets_version") + " " + update_channel + ": " + ruleset_version_string;
- rulesets_versions.appendChild(timestamp_span);
+ rulesets_versions.addSpan(update_channel.name, ruleset_version_string);
}
}
});
@@ -205,7 +271,6 @@ document.addEventListener("DOMContentLoaded", function () {
e("enable-on-this-site").addEventListener("click", enableOnSite);
});
-
var escapeForRegex = function( value ) {
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
};
@@ -303,9 +368,24 @@ function enableOnSite() {
});
}
+/**
+ * @description Turns EASE Mode on and off
+ */
function toggleHttpNowhere() {
- getOption_('httpNowhere', false, function(item) {
- setOption_('httpNowhere', !item.httpNowhere);
+ getTab(tab => {
+ getOption_('httpNowhere', false, item => {
+ const enabled = !item.httpNowhere;
+ setOption_('httpNowhere', enabled, () => {
+ if (enabled) {
+ chrome.tabs.reload(tab.id);
+ e('HttpNowhere__header').innerText = 'Encrypt All Sites Eligible is ON';
+ e('HttpNowhere__explained').innerText = 'Unencrypted requests are currently blocked';
+ } else {
+ e('HttpNowhere__header').innerText = 'Encrypt All Sites Eligible is OFF';
+ e('HttpNowhere__explained').innerText = 'Unencrypted requests are currently allowed';
+ }
+ });
+ });
});
}
@@ -317,3 +397,15 @@ function getTab(callback) {
}
chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => callback(tabs[0]));
}
+
+// This code fixes a Chromium-specific bug that causes links in extension popup
+// to open in regular tab even if the popup is opened in incognito mode.
+
+document.addEventListener('click', e => {
+ const { target } = e
+
+ if (target.matches('a[target="_blank"]')) {
+ chrome.tabs.create({ url: target.href })
+ e.preventDefault()
+ }
+})