From ea6cc98f5bcd7baaa4a7ae1f5a6e964702deef3e Mon Sep 17 00:00:00 2001 From: "z.yurii" Date: Sun, 18 Sep 2022 17:43:22 +0200 Subject: [PATCH] Added possibility to set multiple options to show instead of blocked pages +element blockURL is multiline textbox now. +instead of buttons "Default Page", "Delaying Page", "Blank Page" there are plus and minus buttons for each of this standard options. Plus button adds to blockURLs one line of the standard option. Minus button - removes one line. +each time when you go to the site from the block list, you will be redirected to randomly selected one of the options from blockURLs list. --- background.js | 15 ++++++++++----- common.js | 10 +++++++--- options.css | 22 ++++++++++++++++++++++ options.html | 38 ++++++++++++++++++++++++++++++-------- options.js | 32 ++++++++++++++++++++++++-------- 5 files changed, 93 insertions(+), 24 deletions(-) diff --git a/background.js b/background.js index 700a539..5e6969f 100644 --- a/background.js +++ b/background.js @@ -528,7 +528,7 @@ function checkTab(id, isBeforeNav, isRepeat) { let rollover = gOptions[`rollover${set}`]; let conjMode = gOptions[`conjMode${set}`]; let days = gOptions[`days${set}`]; - let blockURL = gOptions[`blockURL${set}`]; + let blockURLs = gOptions[`blockURLs${set}`]; let applyFilter = gOptions[`applyFilter${set}`]; let filterName = gOptions[`filterName${set}`]; let filterMute = gOptions[`filterMute${set}`]; @@ -605,7 +605,7 @@ function checkTab(id, isBeforeNav, isRepeat) { log(`lockdown: ${lockdown}`); log(`withinTimePeriods: ${withinTimePeriods}`); log(`afterTimeLimit: ${afterTimeLimit}`); - log(`blockURL: ${blockURL}`); + log(`blockURLs: ${blockURLs}`); if (blockRE) { let res = blockRE.exec(pageURL); if (res) { @@ -644,11 +644,16 @@ function checkTab(id, isBeforeNav, isRepeat) { } else { gTabs[id].keyword = keyword; + let blockUrlsList = blockURLs.split("\n"); + let positionOfBlockUrlToRedirectOn = Math.floor(Math.random() * (blockUrlsList.length)); + + let blockURL = blockUrlsList[positionOfBlockUrlToRedirectOn]; + // Get final URL for block page blockURL = getLocalizedURL(blockURL) - .replace(/\$K/g, keyword ? keyword : "") - .replace(/\$S/g, set) - .replace(/\$U/g, pageURLWithHash); + .replace(/\$K/g, keyword ? keyword : "") + .replace(/\$S/g, set) + .replace(/\$U/g, pageURLWithHash); // Redirect page browser.tabs.update(id, { url: blockURL }); diff --git a/common.js b/common.js index fa03205..06c8117 100644 --- a/common.js +++ b/common.js @@ -37,7 +37,7 @@ const PER_SET_OPTIONS = { rollover: { type: "boolean", def: false, id: "rollover" }, conjMode: { type: "boolean", def: false, id: "conjMode" }, days: { type: "array", def: [false, true, true, true, true, true, false], id: "day" }, - blockURL: { type: "string", def: DEFAULT_BLOCK_URL, id: "blockURL" }, + blockURLs: { type: "string", def: DEFAULT_BLOCK_URL, id: "blockURLs" }, applyFilter: { type: "boolean", def: false, id: "applyFilter" }, filterName: { type: "string", def: "grayscale", id: "filterName" }, filterMute: { type: "boolean", def: false, id: "filterMute" }, @@ -316,8 +316,12 @@ function checkPosNegIntFormat(value) { // Check blocking page URL format // -function checkBlockURLFormat(url) { - return INTERNAL_BLOCK_URL.test(url) || getParsedURL(url).page; +function checkBlockURLsFormat(url) { + let listOfUrls = url.split("\n"); + for(let i = 0; i < listOfUrls.length; ++i) + if(!INTERNAL_BLOCK_URL.test(listOfUrls[i]) && !getParsedURL(listOfUrls[i]).page) + return false; + return true; } // Convert times to minute periods diff --git a/options.css b/options.css index 953bb1d..a9b3a01 100644 --- a/options.css +++ b/options.css @@ -87,6 +87,28 @@ body { width: 408px; } +.whatToShowInsteadOfBlocked { + display: flex; + padding-top: 7px; + padding-bottom: 7px; +} + +.listOfSites { + float: left; + padding-right: 5%; +} + +.predefinedOptionsList { + display: flex; + flex-direction: column; +} + +.predefinedOption { + display: flex; + justify-content: space-between; + padding: 3px; +} + #form-container { display: flex; justify-content: center; diff --git a/options.html b/options.html index 86cc719..9db5f3f 100644 --- a/options.html +++ b/options.html @@ -135,18 +135,40 @@ In this section, specify how you want to block these sites.


+

-

-

- - - - -
+

+
+
+ +
+ +
+ + +
+ +
Default Page
+ +
+
+ +
Delaying Page
+ +
+
+ +
Blank Page
+ +
+ +
+
+

@@ -533,7 +555,7 @@

Please enter the number of minutes in the correct format (as a positive whole number).

-
+

Please enter the URL for the blocking page in the correct format (as a fully specified URL).

diff --git a/options.js b/options.js index b2305c8..8f73031 100644 --- a/options.js +++ b/options.js @@ -73,9 +73,12 @@ function initForm(numSets) { }); $(`#setName${set}`).change(function (e) { updateBlockSetName(set, $(`#setName${set}`).val()); }); $(`#allDay${set}`).click(function (e) { $(`#times${set}`).val(ALL_DAY_TIMES); }); - $(`#defaultPage${set}`).click(function (e) { $(`#blockURL${set}`).val(DEFAULT_BLOCK_URL); }); - $(`#delayingPage${set}`).click(function (e) { $(`#blockURL${set}`).val(DELAYED_BLOCK_URL); }); - $(`#blankPage${set}`).click(function (e) { $(`#blockURL${set}`).val("about:blank"); }); + $(`#addDefaultPage${set}`).click(function (e) { addToListOfBlockUrls(DEFAULT_BLOCK_URL, set); }); + $(`#addDelayingPage${set}`).click(function (e) { addToListOfBlockUrls(DELAYED_BLOCK_URL, set); }); + $(`#addBlankPage${set}`).click(function (e) { addToListOfBlockUrls("about:blank", set); }); + $(`#removeDefaultPage${set}`).click(function (e) { removeFromListOfBlockUrls(DEFAULT_BLOCK_URL, set); }); + $(`#removeDelayingPage${set}`).click(function (e) { removeFromListOfBlockUrls(DELAYED_BLOCK_URL, set); }); + $(`#removeBlankPage${set}`).click(function (e) { removeFromListOfBlockUrls("about:blank", set); }); $(`#resetOpts${set}`).click(function (e) { resetSetOptions(set); $("#alertResetOptions").dialog("open"); @@ -178,7 +181,7 @@ function saveOptions(event) { let limitOffset = $(`#limitOffset${set}`).val(); let delaySecs = $(`#delaySecs${set}`).val(); let reloadSecs = $(`#reloadSecs${set}`).val(); - let blockURL = $(`#blockURL${set}`).val(); + let blockURLs = $(`#blockURLs${set}`).val(); // Check field values if (!checkTimePeriodsFormat(times)) { @@ -211,10 +214,10 @@ function saveOptions(event) { $("#alertBadSeconds").dialog("open"); return false; } - if (!checkBlockURLFormat(blockURL)) { + if (!checkBlockURLsFormat(blockURLs)) { $("#tabs").tabs("option", "active", (set - 1)); - $(`#blockURL${set}`).focus(); - $("#alertBadBlockURL").dialog("open"); + $(`#blockURLs${set}`).focus(); + $("#alertBadBlockURLs").dialog("open"); return false; } } @@ -996,7 +999,8 @@ function disableSetOptions(set, disabled) { let items = [ "resetOpts", "allDay", - "defaultPage", "delayingPage", "blankPage", + "addDefaultPage", "addDelayingPage", "addBlankPage", + "removeDefaultPage", "removeDelayingPage", "removeBlankPage", "clearRegExpBlock", "genRegExpBlock", "clearRegExpAllow", "genRegExpAllow", "cancelLockdown" @@ -1097,6 +1101,18 @@ function handleKeyDown(event) { } } +function removeFromListOfBlockUrls(urlToRemove, set) { + let listOfBlockUrls = $(`#blockURLs${set}`).val().split("\n"); + let indexToRemove = listOfBlockUrls.indexOf(urlToRemove); + if(indexToRemove >= 0) + listOfBlockUrls.splice(indexToRemove, 1); + $(`#blockURLs${set}`).val(listOfBlockUrls.join("\n")); +} + +function addToListOfBlockUrls(urlToAdd, set) { + $(`#blockURLs${set}`).val($(`#blockURLs${set}`).val() + "\n" + urlToAdd); +} + /*** STARTUP CODE BEGINS HERE ***/ browser.runtime.getPlatformInfo().then(