diff options
author | Alessio Vanni <vannilla@firemail.cc> | 2019-02-19 21:06:09 +0100 |
---|---|---|
committer | Alessio Vanni <vannilla@firemail.cc> | 2019-02-19 21:06:09 +0100 |
commit | fe2f8acc8210c2ddead4621797b47106a9b38f5b (patch) | |
tree | 5fb103d45d7e4345f56fc068ce8173b82fa7051f /js/settings.js | |
download | ematrix-fe2f8acc8210c2ddead4621797b47106a9b38f5b.tar.lz ematrix-fe2f8acc8210c2ddead4621797b47106a9b38f5b.tar.xz ematrix-fe2f8acc8210c2ddead4621797b47106a9b38f5b.zip |
Fork uMatrix
Pretty much just changing the name and the copyright.
Diffstat (limited to 'js/settings.js')
-rw-r--r-- | js/settings.js | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/js/settings.js b/js/settings.js new file mode 100644 index 0000000..bc11c7a --- /dev/null +++ b/js/settings.js @@ -0,0 +1,195 @@ +/******************************************************************************* + + ηMatrix - a browser extension to black/white list requests. + Copyright (C) 2014-2019 Raymond Hill + Copyright (C) 2019 Alessio Vanni + + 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/}. + + uMatrix Home: https://github.com/gorhill/uMatrix +*/ + +/* global uDom */ + +'use strict'; + +/******************************************************************************/ + +(function() { + +/******************************************************************************/ + +var cachedSettings = {}; + +/******************************************************************************/ + +function changeUserSettings(name, value) { + vAPI.messaging.send('settings.js', { + what: 'userSettings', + name: name, + value: value + }); +} + +/******************************************************************************/ + +function changeMatrixSwitch(name, state) { + vAPI.messaging.send('settings.js', { + what: 'setMatrixSwitch', + switchName: name, + state: state + }); +} + +/******************************************************************************/ + +function onChangeValueHandler(elem, setting, min, max) { + var oldVal = cachedSettings.userSettings[setting]; + var newVal = Math.round(parseFloat(elem.value)); + if ( typeof newVal !== 'number' ) { + newVal = oldVal; + } else { + newVal = Math.max(newVal, min); + newVal = Math.min(newVal, max); + } + elem.value = newVal; + if ( newVal !== oldVal ) { + changeUserSettings(setting, newVal); + } +} + +/******************************************************************************/ + +function prepareToDie() { + onChangeValueHandler( + uDom.nodeFromId('deleteUnusedSessionCookiesAfter'), + 'deleteUnusedSessionCookiesAfter', + 15, 1440 + ); + onChangeValueHandler( + uDom.nodeFromId('clearBrowserCacheAfter'), + 'clearBrowserCacheAfter', + 15, 1440 + ); +} + +/******************************************************************************/ + +function onInputChanged(ev) { + var target = ev.target; + + switch ( target.id ) { + case 'displayTextSize': + changeUserSettings('displayTextSize', target.value + 'px'); + break; + case 'clearBrowserCache': + case 'cloudStorageEnabled': + case 'collapseBlacklisted': + case 'collapseBlocked': + case 'colorBlindFriendly': + case 'deleteCookies': + case 'deleteLocalStorage': + case 'deleteUnusedSessionCookies': + case 'iconBadgeEnabled': + case 'processHyperlinkAuditing': + changeUserSettings(target.id, target.checked); + break; + case 'noMixedContent': + case 'noscriptTagsSpoofed': + case 'processReferer': + changeMatrixSwitch( + target.getAttribute('data-matrix-switch'), + target.checked + ); + break; + case 'deleteUnusedSessionCookiesAfter': + onChangeValueHandler(target, 'deleteUnusedSessionCookiesAfter', 15, 1440); + break; + case 'clearBrowserCacheAfter': + onChangeValueHandler(target, 'clearBrowserCacheAfter', 15, 1440); + break; + case 'popupScopeLevel': + changeUserSettings('popupScopeLevel', target.value); + break; + default: + break; + } + + switch ( target.id ) { + case 'collapseBlocked': + synchronizeWidgets(); + break; + default: + break; + } +} + +/******************************************************************************/ + +function synchronizeWidgets() { + var e1, e2; + + e1 = uDom.nodeFromId('collapseBlocked'); + e2 = uDom.nodeFromId('collapseBlacklisted'); + if ( e1.checked ) { + e2.setAttribute('disabled', ''); + } else { + e2.removeAttribute('disabled'); + } +} + +/******************************************************************************/ + +vAPI.messaging.send( + 'settings.js', + { what: 'getUserSettings' }, + function onSettingsReceived(settings) { + // Cache copy + cachedSettings = settings; + + var userSettings = settings.userSettings; + var matrixSwitches = settings.matrixSwitches; + + uDom('[data-setting-bool]').forEach(function(elem){ + elem.prop('checked', userSettings[elem.prop('id')] === true); + }); + + uDom('[data-matrix-switch]').forEach(function(elem){ + var switchName = elem.attr('data-matrix-switch'); + if ( typeof switchName === 'string' && switchName !== '' ) { + elem.prop('checked', matrixSwitches[switchName] === true); + } + }); + + uDom.nodeFromId('displayTextSize').value = + parseInt(userSettings.displayTextSize, 10) || 14; + + uDom.nodeFromId('popupScopeLevel').value = userSettings.popupScopeLevel; + uDom.nodeFromId('deleteUnusedSessionCookiesAfter').value = + userSettings.deleteUnusedSessionCookiesAfter; + uDom.nodeFromId('clearBrowserCacheAfter').value = + userSettings.clearBrowserCacheAfter; + + synchronizeWidgets(); + + document.addEventListener('change', onInputChanged); + + // https://github.com/gorhill/httpswitchboard/issues/197 + uDom(window).on('beforeunload', prepareToDie); + } +); + +/******************************************************************************/ + +})(); |