From dba8cc4290faf96a22ec63c2aa4fcab6bf3acc8f Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 07:45:22 +0200 Subject: Adding upstream version 7.5.1+dfsg. Signed-off-by: Daniel Baumann --- src/scripts/options.js | 380 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 380 insertions(+) create mode 100644 src/scripts/options.js (limited to 'src/scripts/options.js') diff --git a/src/scripts/options.js b/src/scripts/options.js new file mode 100644 index 0000000..14d7eab --- /dev/null +++ b/src/scripts/options.js @@ -0,0 +1,380 @@ +'use strict'; + +// ----------------- Internationalization ------------------ +document.querySelectorAll('[data-i18n]').forEach(node => { + let [text, attr] = node.dataset.i18n.split('|'); + text = chrome.i18n.getMessage(text); + attr ? node[attr] = text : node.appendChild(document.createTextNode(text)); +}); +// ----------------- /Internationalization ----------------- + +// ----- global +const accounts = document.querySelector('#accounts'); +const mode = document.querySelector('#mode'); +const syncOnOff = document.querySelector('#syncOnOff'); +const popup = document.querySelector('.popup'); +const popupMain = popup.children[0]; + +let storageArea, minIndex = Number.MAX_SAFE_INTEGER; + +// ----------------- User Preference ----------------------- +chrome.storage.local.get(null, result => { + // if sync is NOT set or it is false, use this result + syncOnOff.checked = result.sync; + localStorage.setItem('sync', syncOnOff.checked); + storageArea = result.sync ? chrome.storage.sync : chrome.storage.local; + result.sync ? chrome.storage.sync.get(null, processOptions) : processOptions(result); +}); +// ----------------- /User Preference ---------------------- + +// ----------------- Spinner ------------------------------- +const spinner = document.querySelector('.spinner'); +function hideSpinner() { + + spinner.classList.remove('on'); + setTimeout(() => { spinner.style.display = 'none'; }, 600); +} + +function showSpinner() { + + spinner.style.display = 'flex'; + spinner.classList.add('on'); +} +// ----------------- /spinner ------------------------------ + + +// ----- add Listeners for menu +document.querySelectorAll('nav a').forEach(item => item.addEventListener('click', process)); +function process() { + + switch (this.dataset.i18n) { + + case 'add': + localStorage.removeItem('id'); // clear localStorage; this indicates an add not an edit + localStorage.setItem('nextIndex', minIndex); // index to use for this proxy so that it's added to the beginning + location.href = '/proxy.html'; + break; + case 'export': Utils.exportFile(); break; + case 'import': location.href = '/import.html'; break; + case 'importProxyList': location.href = '/import-proxy-list.html'; break; + case 'log': location.href = '/log.html'; break; + case 'about': location.href = '/about.html'; break; + + case 'deleteAll': + if (confirm(chrome.i18n.getMessage('confirmDelete'))) { + showSpinner(); + chrome.storage.local.clear(() => chrome.storage.sync.clear(() => { + hideSpinner(); + Utils.notify(chrome.i18n.getMessage('deleteAllmessage')); + location.href = '/options.html'; + })); + } + break; + + case 'deleteBrowserData': + const h4 = document.createElement('h4'); + const p = document.createElement('p'); + popupMain.children[0].textContent = chrome.i18n.getMessage('deleteBrowserData'); + let h = h4.cloneNode(); + h.textContent = chrome.i18n.getMessage('deleteNot'); + let p1 = p.cloneNode(); + p1.textContent = chrome.i18n.getMessage('deleteBrowserDataNotDescription'); + popupMain.children[1].appendChild(h); + popupMain.children[1].appendChild(p1); + + h = h4.cloneNode(); + h.textContent = chrome.i18n.getMessage('delete'); + p1 = p.cloneNode(); + p1.textContent = chrome.i18n.getMessage('deleteBrowserDataDescription'); + popupMain.children[1].appendChild(h); + popupMain.children[1].appendChild(p1); + + popupMain.children[2].children[0].addEventListener('click', closePopup); + popupMain.children[2].children[1].addEventListener('click', () => // Not cancelled + chrome.browsingData.remove({}, { + //appcache: true, + cache: true, + cookies: true, + downloads: false, + //fileSystems: true, + formData: false, + history: false, + indexedDB: true, + localStorage: true, + pluginData: true, + //passwords: true, + //webSQL: true, + //serverBoundCertificates: true, + serviceWorkers: true + }, () => { + Utils.notify(chrome.i18n.getMessage('done')); + closePopup(); + } + )); + showPopup(); + break; + } +} + +// ----- add Listeners for initial elements +mode.addEventListener('change', selectMode); +function selectMode() { + + // set color + mode.style.color = mode.children[mode.selectedIndex].style.color; + + console.log(mode, "selectMode"); + // we already know the state of sync | this is set when manually changing the select + // it is undefined when mode is switched from toolbar popup or on startup + this && storageArea.set({mode: mode.value}); + + // --- change the state of success/secondary + // change all success -> secondary + document.querySelectorAll('.success').forEach(item => item.classList.replace('success', 'secondary')); + + switch (mode.value) { + + case 'patterns': + document.querySelectorAll('input[name="onOff"]:checked').forEach(item => { + const node = item.parentNode.parentNode; + node.classList.replace('secondary', 'success'); // FF49, Ch 61 + }); + break; + + case 'disabled': // do nothing + break; + + default: + const node = document.getElementById(mode.value); + node && node.classList.replace('secondary', 'success'); + } +} + +syncOnOff.addEventListener('change', () => { + const useSync = syncOnOff.checked; + // sync value always CHECKED locally + // data is merged, replacing exisitng and adding new ones + localStorage.setItem('sync', syncOnOff.checked); + storageArea = syncOnOff.checked ? chrome.storage.sync : chrome.storage.local; + if (useSync && confirm(chrome.i18n.getMessage('confirmTransferToSync'))) { + showSpinner(); + chrome.storage.local.set({sync: true}); // save sync state + chrome.storage.local.get(null, result => { // get source + delete result.sync; + chrome.storage.sync.set(result, hideSpinner); // save to target + }); // get source & save to target + } + else if (!useSync && confirm(chrome.i18n.getMessage('confirmTransferToLocal'))) { + showSpinner(); + chrome.storage.sync.get(null, result => { // get source + result.sync = false; // set sync = false + chrome.storage.local.set(result, hideSpinner); // save to target + }); + } +}); + + +chrome.runtime.onMessage.addListener((message, sender) => { // from popup or bg +// console.log(message); + if(!message.mode || message.mode === mode.value) { return; } // change if it is different + mode.value = message.mode; + selectMode(); +}); + +function processOptions(pref) { + // --- reset + accounts.textContent = ''; + + // remove all