From 64b2b9fc58e4c054d4a9a4fd9800774d066e4ee9 Mon Sep 17 00:00:00 2001 From: Ben Lickly Date: Fri, 13 Jul 2012 16:52:30 -0700 Subject: [PATCH 1/3] Add separate whitelist and blacklist. This avoids the problem of the whitelist clobbering the blacklist or vice versa. --- background.js | 30 +++++++++++++++++++++--------- options.html | 5 +++-- options.js | 28 ++++++++++++++++++++++------ 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/background.js b/background.js index 0ff183c..7d0dd95 100644 --- a/background.js +++ b/background.js @@ -15,7 +15,7 @@ loadRingIfNecessary(); function defaultPrefs() { return { - siteList: [ + domainBlacklist: [ 'facebook.com', 'youtube.com', 'twitter.com', @@ -28,6 +28,11 @@ function defaultPrefs() { 'addictinggames.com', 'hulu.com' ], + domainWhitelist: [ + 'google.com/calendar', + 'rememberthemilk.com', + '750words.com' + ], durations: { // in seconds work: 25 * 60, break: 5 * 60 @@ -52,14 +57,20 @@ function updatePrefsFormat(prefs) { // compatibility issue. However, in more complicated situations, we need // to modify an old PREFS module's structure for compatibility. - if(prefs.hasOwnProperty('domainBlacklist')) { - // Upon adding the whitelist feature, the domainBlacklist property was - // renamed to siteList for clarity. + if(prefs.hasOwnProperty('siteList')) { + // Upon adding a separate blacklist and whitelist, the siteList property + // is renamed to either domainBlacklist or domainWhitelist. - prefs.siteList = prefs.domainBlacklist; - delete prefs.domainBlacklist; + if (prefs.whitelist) { + prefs.domainBlacklist = defaultPrefs().domainBlacklist; + prefs.domainWhitelist = prefs.siteList; + } else { + prefs.domainBlacklist = prefs.siteList; + prefs.domainWhitelist = defaultPrefs().domainWhitelist; + } + delete prefs.siteList; savePrefs(prefs); - console.log("Renamed PREFS.domainBlacklist to PREFS.siteList"); + console.log("Renamed PREFS.siteList to PREFS.domain*lists"); } if(!prefs.hasOwnProperty('showNotifications')) { @@ -249,8 +260,9 @@ function domainsMatch(test, against) { } function isLocationBlocked(location) { - for(var k in PREFS.siteList) { - listedPattern = parseLocation(PREFS.siteList[k]); + var siteList = PREFS.whitelist ? PREFS.domainWhitelist : PREFS.domainBlacklist; + for(var k in siteList) { + listedPattern = parseLocation(siteList[k]); if(locationsMatch(location, listedPattern)) { // If we're in a whitelist, a matched location is not blocked => false // If we're in a blacklist, a matched location is blocked => true diff --git a/options.html b/options.html index 65e55ec..6f1a413 100644 --- a/options.html +++ b/options.html @@ -36,7 +36,7 @@ padding: 0; } - #site-list { + .site-list { border: 1px solid #aaa; height: 15em; width: 25em; @@ -115,7 +115,8 @@

- + +

diff --git a/options.js b/options.js index 32dada8..e592287 100644 --- a/options.js +++ b/options.js @@ -21,7 +21,8 @@ for(var i = 0; i < localizedElements.length; i++) { */ var form = document.getElementById('options-form'), - siteListEl = document.getElementById('site-list'), + domainWhitelistEl = document.getElementById('whitelist'), + domainBlacklistEl = document.getElementById('blacklist'), whitelistEl = document.getElementById('blacklist-or-whitelist'), showNotificationsEl = document.getElementById('show-notifications'), shouldRingEl = document.getElementById('should-ring'), @@ -58,7 +59,8 @@ form.onsubmit = function () { console.log(durations); background.setPrefs({ - siteList: siteListEl.value.split(/\r?\n/), + domainWhitelist: domainWhitelistEl.value.split(/\r?\n/), + domainBlacklist: domainBlacklistEl.value.split(/\r?\n/), durations: durations, showNotifications: showNotificationsEl.checked, shouldRing: shouldRingEl.checked, @@ -69,22 +71,35 @@ form.onsubmit = function () { return false; } -siteListEl.onfocus = formAltered; +domainBlacklistEl.onfocus = formAltered; +domainWhitelistEl.onfocus = formAltered; showNotificationsEl.onchange = formAltered; shouldRingEl.onchange = formAltered; clickRestartsEl.onchange = formAltered; -whitelistEl.onchange = formAltered; +whitelistEl.onchange = function() { setListVisibility(); formAltered(); }; + +function setListVisibility() { + if (whitelistEl.selectedIndex) { + domainBlacklistEl.style.display = 'none'; + domainWhitelistEl.style.display = 'inline'; + } else { + domainBlacklistEl.style.display = 'inline'; + domainWhitelistEl.style.display = 'none'; + } +} function formAltered() { saveSuccessfulEl.removeAttribute('class'); timeFormatErrorEl.removeAttribute('class'); } -siteListEl.value = background.PREFS.siteList.join("\n"); +domainBlacklistEl.value = background.PREFS.domainBlacklist.join("\n"); +domainWhitelistEl.value = background.PREFS.domainWhitelist.join("\n"); showNotificationsEl.checked = background.PREFS.showNotifications; shouldRingEl.checked = background.PREFS.shouldRing; clickRestartsEl.checked = background.PREFS.clickRestarts; whitelistEl.selectedIndex = background.PREFS.whitelist ? 1 : 0; +setListVisibility(); var duration, minutes, seconds; for(var key in durationEls) { @@ -102,7 +117,8 @@ for(var key in durationEls) { } function setInputDisabled(state) { - siteListEl.disabled = state; + domainBlacklistEl.disabled = state; + domainWhitelistEl.disabled = state; whitelistEl.disabled = state; for(var key in durationEls) { durationEls[key].disabled = state; From 4bc757661d6f86cefb276ddf4cabfaa4c2f89951 Mon Sep 17 00:00:00 2001 From: Ben Lickly Date: Sat, 14 Jul 2012 12:14:54 -0700 Subject: [PATCH 2/3] Variable renamings --- background.js | 18 +++++++++--------- options.js | 40 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/background.js b/background.js index 7d0dd95..91563c8 100644 --- a/background.js +++ b/background.js @@ -15,7 +15,7 @@ loadRingIfNecessary(); function defaultPrefs() { return { - domainBlacklist: [ + siteBlacklist: [ 'facebook.com', 'youtube.com', 'twitter.com', @@ -28,7 +28,7 @@ function defaultPrefs() { 'addictinggames.com', 'hulu.com' ], - domainWhitelist: [ + siteWhitelist: [ 'google.com/calendar', 'rememberthemilk.com', '750words.com' @@ -59,18 +59,18 @@ function updatePrefsFormat(prefs) { if(prefs.hasOwnProperty('siteList')) { // Upon adding a separate blacklist and whitelist, the siteList property - // is renamed to either domainBlacklist or domainWhitelist. + // is renamed to either siteBlacklist or siteWhitelist. if (prefs.whitelist) { - prefs.domainBlacklist = defaultPrefs().domainBlacklist; - prefs.domainWhitelist = prefs.siteList; + prefs.siteBlacklist = defaultPrefs().siteBlacklist; + prefs.siteWhitelist = prefs.siteList; } else { - prefs.domainBlacklist = prefs.siteList; - prefs.domainWhitelist = defaultPrefs().domainWhitelist; + prefs.siteBlacklist = prefs.siteList; + prefs.siteWhitelist = defaultPrefs().siteWhitelist; } delete prefs.siteList; savePrefs(prefs); - console.log("Renamed PREFS.siteList to PREFS.domain*lists"); + console.log("Renamed PREFS.siteList to PREFS.siteBlacklist/siteWhitelist"); } if(!prefs.hasOwnProperty('showNotifications')) { @@ -260,7 +260,7 @@ function domainsMatch(test, against) { } function isLocationBlocked(location) { - var siteList = PREFS.whitelist ? PREFS.domainWhitelist : PREFS.domainBlacklist; + var siteList = PREFS.whitelist ? PREFS.siteWhitelist : PREFS.siteBlacklist; for(var k in siteList) { listedPattern = parseLocation(siteList[k]); if(locationsMatch(location, listedPattern)) { diff --git a/options.js b/options.js index e592287..5c2f0c8 100644 --- a/options.js +++ b/options.js @@ -21,9 +21,9 @@ for(var i = 0; i < localizedElements.length; i++) { */ var form = document.getElementById('options-form'), - domainWhitelistEl = document.getElementById('whitelist'), - domainBlacklistEl = document.getElementById('blacklist'), - whitelistEl = document.getElementById('blacklist-or-whitelist'), + siteWhitelistEl = document.getElementById('whitelist'), + siteBlacklistEl = document.getElementById('blacklist'), + whitelistSelectEl = document.getElementById('blacklist-or-whitelist'), showNotificationsEl = document.getElementById('show-notifications'), shouldRingEl = document.getElementById('should-ring'), clickRestartsEl = document.getElementById('click-restarts'), @@ -59,32 +59,32 @@ form.onsubmit = function () { console.log(durations); background.setPrefs({ - domainWhitelist: domainWhitelistEl.value.split(/\r?\n/), - domainBlacklist: domainBlacklistEl.value.split(/\r?\n/), + siteWhitelist: siteWhitelistEl.value.split(/\r?\n/), + siteBlacklist: siteBlacklistEl.value.split(/\r?\n/), durations: durations, showNotifications: showNotificationsEl.checked, shouldRing: shouldRingEl.checked, clickRestarts: clickRestartsEl.checked, - whitelist: whitelistEl.selectedIndex == 1 + whitelist: whitelistSelectEl.selectedIndex == 1 }) saveSuccessfulEl.className = 'show'; return false; } -domainBlacklistEl.onfocus = formAltered; -domainWhitelistEl.onfocus = formAltered; +siteBlacklistEl.onfocus = formAltered; +siteWhitelistEl.onfocus = formAltered; showNotificationsEl.onchange = formAltered; shouldRingEl.onchange = formAltered; clickRestartsEl.onchange = formAltered; -whitelistEl.onchange = function() { setListVisibility(); formAltered(); }; +whitelistSelectEl.onchange = function() { setListVisibility(); formAltered(); }; function setListVisibility() { - if (whitelistEl.selectedIndex) { - domainBlacklistEl.style.display = 'none'; - domainWhitelistEl.style.display = 'inline'; + if (whitelistSelectEl.selectedIndex) { + siteBlacklistEl.style.display = 'none'; + siteWhitelistEl.style.display = 'inline'; } else { - domainBlacklistEl.style.display = 'inline'; - domainWhitelistEl.style.display = 'none'; + siteBlacklistEl.style.display = 'inline'; + siteWhitelistEl.style.display = 'none'; } } @@ -93,12 +93,12 @@ function formAltered() { timeFormatErrorEl.removeAttribute('class'); } -domainBlacklistEl.value = background.PREFS.domainBlacklist.join("\n"); -domainWhitelistEl.value = background.PREFS.domainWhitelist.join("\n"); +siteBlacklistEl.value = background.PREFS.siteBlacklist.join("\n"); +siteWhitelistEl.value = background.PREFS.siteWhitelist.join("\n"); showNotificationsEl.checked = background.PREFS.showNotifications; shouldRingEl.checked = background.PREFS.shouldRing; clickRestartsEl.checked = background.PREFS.clickRestarts; -whitelistEl.selectedIndex = background.PREFS.whitelist ? 1 : 0; +whitelistSelectEl.selectedIndex = background.PREFS.whitelist ? 1 : 0; setListVisibility(); var duration, minutes, seconds; @@ -117,9 +117,9 @@ for(var key in durationEls) { } function setInputDisabled(state) { - domainBlacklistEl.disabled = state; - domainWhitelistEl.disabled = state; - whitelistEl.disabled = state; + siteBlacklistEl.disabled = state; + siteWhitelistEl.disabled = state; + whitelistSelectEl.disabled = state; for(var key in durationEls) { durationEls[key].disabled = state; } From 463ad45743b3f5a325512f1473c0f65a3bd8a885 Mon Sep 17 00:00:00 2001 From: blickly Date: Wed, 5 Dec 2012 19:12:36 -0800 Subject: [PATCH 3/3] Remove default whitelist Users should probably explicitly add sites that they want to be whitelisted. Since the default is to use a blacklist, users who "go with the defaults" will not be affacted. --- background.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/background.js b/background.js index 91563c8..5bb2dd2 100644 --- a/background.js +++ b/background.js @@ -28,11 +28,7 @@ function defaultPrefs() { 'addictinggames.com', 'hulu.com' ], - siteWhitelist: [ - 'google.com/calendar', - 'rememberthemilk.com', - '750words.com' - ], + siteWhitelist: [], durations: { // in seconds work: 25 * 60, break: 5 * 60