Skip to content

Commit

Permalink
Preference overhaul
Browse files Browse the repository at this point in the history
* Get rid of "tap" nomenclature.
* Make load*Tabs preferences integers so we can configure multiple behaviours (e.g. load, lazy, progressive, ...)
* Rename hostWhitelist to just whitelist in anticipation of feature generalization.
* Drop some preferences from the pref window, including the ability to add new entries to the whitelist.
  • Loading branch information
philikon committed Jul 11, 2010
1 parent 4d9672b commit 5e2401f
Show file tree
Hide file tree
Showing 5 changed files with 166 additions and 203 deletions.
1 change: 1 addition & 0 deletions content/browser.js
Expand Up @@ -3,6 +3,7 @@ Components.utils.import("resource://bartab/prototypes.js");
// Initialize BarTab as soon as possible.
window.addEventListener("DOMContentLoaded", function() {
window.removeEventListener("DOMContentLoaded", arguments.callee, false);
BarTabUtils.migratePrefs();
var tabbrowser = document.getElementById("content");
(new BarTabHandler).init(tabbrowser);
}, false);
90 changes: 19 additions & 71 deletions content/preferences.js
Expand Up @@ -3,14 +3,13 @@ Components.utils.import("resource://bartab/prototypes.js");
var BarTabPreferences = {

init: function() {
BarTabUtils.mPrefs.addObserver("extensions.bartap.hostWhitelist", this, false);
BarTabUtils.mPrefs.addObserver("extensions.bartab.whitelist", this, false);
this.onTimeoutChange();
this.onLoadChange();
this.updateHostWhitelist();
this.updateWhitelist();
},

destroy: function() {
BarTabUtils.mPrefs.removeObserver("extensions.bartap.hostWhitelist", this);
BarTabUtils.mPrefs.removeObserver("extensions.bartab.whitelist", this);
},

QueryInterface: function(aIID) {
Expand All @@ -31,103 +30,52 @@ var BarTabPreferences = {
timerWidgets.style.visibility = visibility;
},

onLoadChange: function() {
var menuitem = document.getElementById('loadOnSelect').selectedItem;
var delayWidgets = document.getElementById('delayWidgets');
var visibility = (menuitem.value == "2") ? 'visible' : 'hidden';
delayWidgets.style.visibility = visibility;
},

// Add to and remove hosts from whitelist
// Add to and remove entries from whitelist

updateHostWhitelist: function() {
var list = document.getElementById("hostWhitelist");
updateWhitelist: function() {
var list = document.getElementById("whitelist");
while (list.firstChild) {
list.removeChild(list.firstChild);
}

var whitelist = BarTabUtils.getHostWhitelist();
whitelist.forEach(function(host) {
var whitelist = BarTabUtils.getWhitelist();
whitelist.forEach(function(entry) {
let row = document.createElement("listitem");
row.setAttribute("label", host);
row.setAttribute("label", entry);
list.appendChild(row);
});
},

hostSelected: function() {
var removeButton = document.getElementById("hostWhitelistRemove");
var list = document.getElementById("hostWhitelist");
whiteListEntrySelected: function() {
var removeButton = document.getElementById("whitelistRemove");
var list = document.getElementById("whitelist");
if (list.selectedItems.length) {
removeButton.setAttribute("disabled", "false");
} else {
removeButton.setAttribute("disabled", "true");
}
},

removeHost: function() {
var list = document.getElementById("hostWhitelist");
var whitelist = BarTabUtils.getHostWhitelist();
removeWhitelistEntry: function() {
var list = document.getElementById("whitelist");
var whitelist = BarTabUtils.getWhitelist();
var self = this;
list.selectedItems.forEach(function (item) {
var host = item.getAttribute("label");
var index = whitelist.indexOf(host);
var entry = item.getAttribute("label");
var index = whitelist.indexOf(entry);
if (index == -1) {
return;
}
whitelist.splice(index, 1);
});
BarTabUtils.setHostWhitelist(whitelist);
},

addHost: function() {
var textbox = document.getElementById("hostWhitelistNewHost");
var whitelist = BarTabUtils.getHostWhitelist();
var host = textbox.value.trim();

if (!host) {
return;
}

// Convert whole URLs to hostnames
if ((host.substr(0, 7) == "http://")
|| (host.substr(0, 8) == "https://")) {
try {
host = BarTabUtils.makeURI(host).host;
} catch(ex) {
// Ignore
}
}

// Sort out duplicates.
if (whitelist.indexOf(host) != -1) {
textbox.value = "";
return;
}

// We don't allow semicolon in the host name
// TODO it couldn't hurt to do a proper check for illegal characters
if (host.indexOf(';') != -1) {
return;
}

whitelist.push(host);
BarTabUtils.setHostWhitelist(whitelist);
textbox.value = "";
},

onNewHostKeyPress: function(event) {
switch (event.keyCode) {
case event.DOM_VK_ENTER:
case event.DOM_VK_RETURN:
this.addHost();
}
BarTabUtils.setWhitelist(whitelist);
},

observe: function(aSubject, aTopic, aData) {
if (aTopic != "nsPref:changed") {
return;
}
this.updateHostWhitelist();
this.updateWhitelist();
}

};
100 changes: 29 additions & 71 deletions content/preferences.xul
Expand Up @@ -11,33 +11,27 @@
<prefpane id="bartab-prefpane" label="&prefpane.title;">

<preferences>
<preference id="extensions.bartap.tapRestoredTabs"
name="extensions.bartap.tapRestoredTabs"
type="bool" />
<preference id="extensions.bartap.tapBackgroundTabs"
name="extensions.bartap.tapBackgroundTabs"
type="bool" />
<preference id="extensions.bartap.tapAfterTimeout"
name="extensions.bartap.tapAfterTimeout"
type="bool" />
<preference id="extensions.bartap.timeoutValue"
name="extensions.bartap.timeoutValue"
<preference id="extensions.bartab.loadRestoredTabs"
name="extensions.bartab.loadRestoredTabs"
type="int" />
<preference id="extensions.bartap.timeoutUnit"
name="extensions.bartap.timeoutUnit"
<preference id="extensions.bartab.loadBackgroundTabs"
name="extensions.bartab.loadBackgroundTabs"
type="int" />
<preference id="extensions.bartap.findClosestUntappedTab"
name="extensions.bartap.findClosestUntappedTab"
<preference id="extensions.bartab.unloadAfterTimeout"
name="extensions.bartab.unloadAfterTimeout"
type="bool" />
<preference id="extensions.bartap.loadOnSelect"
name="extensions.bartap.loadOnSelect"
<preference id="extensions.bartab.timeoutValue"
name="extensions.bartab.timeoutValue"
type="int" />
<preference id="extensions.bartap.loadOnSelectDelay"
name="extensions.bartap.loadOnSelectDelay"
<preference id="extensions.bartab.timeoutUnit"
name="extensions.bartab.timeoutUnit"
type="int" />
<preference id="extensions.bartab.findClosestLoadedTab"
name="extensions.bartab.findClosestLoadedTab"
type="bool" />
</preferences>

<groupbox id="barTapGroup">
<groupbox id="BarTabGroup">
<caption label="&group.label;"/>

<grid>
Expand All @@ -53,10 +47,10 @@
accesskey="&restoredTabs.accesskey;"
control="menuRestoredTabs" />
<menulist id="menuRestoredTabs"
preference="extensions.bartap.tapRestoredTabs">
preference="extensions.bartab.loadRestoredTabs">
<menupopup>
<menuitem label="&loadTabs.label;" value="false"/>
<menuitem label="&dontLoadTabs.label;" value="true"/>
<menuitem label="&loadTabs.label;" value="0"/>
<menuitem label="&dontLoadTabs.label;" value="1"/>
</menupopup>
</menulist>
</row>
Expand All @@ -68,10 +62,10 @@
accesskey="&backgroundTabs.accesskey;"
control="menuBackgroundTabs" />
<menulist id="menuBackgroundTabs"
preference="extensions.bartap.tapBackgroundTabs">
preference="extensions.bartab.loadBackgroundTabs">
<menupopup>
<menuitem label="&loadTabs.label;" value="false"/>
<menuitem label="&dontLoadTabs.label;" value="true"/>
<menuitem label="&loadTabs.label;" value="0"/>
<menuitem label="&dontLoadTabs.label;" value="1"/>
</menupopup>
</menulist>
</row>
Expand All @@ -83,7 +77,7 @@
accesskey="&unloadAfterTimeout.accesskey;"
control="tapAfterTimeout" />
<menulist id="tapAfterTimeout"
preference="extensions.bartap.tapAfterTimeout"
preference="extensions.bartab.unloadAfterTimeout"
oncommand="BarTabPreferences.onTimeoutChange();">
<menupopup>
<menuitem label="&doNothing.label;" value="false"/>
Expand All @@ -94,10 +88,10 @@
<textbox id="timeoutValue"
type="number"
size="2"
preference="extensions.bartap.timeoutValue"
preference="extensions.bartab.timeoutValue"
aria-labelledby="timeoutUnit"/>
<menulist id="timeoutUnit"
preference="extensions.bartap.timeoutUnit">
preference="extensions.bartab.timeoutUnit">
<menupopup>
<menuitem label="&timeoutSecs.label;" value="1"/>
<menuitem label="&timeoutMins.label;" value="60"/>
Expand All @@ -114,63 +108,27 @@
<vbox>
<label value="&hostWhitelist.label;"
accesskey="&hostWhitelist.accesskey;"
control="hostWhitelist" />
control="whitelist" />
<description style="font: small-caption;
font-weight: normal;
width: 0; /* trigger word wrapping */
margin: 0.5em 1em 0em 1em;">&hostWhitelist.description;</description>
</vbox>
<listbox id="hostWhitelist"
<listbox id="whitelist"
flex="1"
style="height: 5em;"
seltype="multiple"
onselect="BarTabPreferences.hostSelected(event);">
onselect="BarTabPreferences.whitelistEntrySelected(event);">
</listbox>
<vbox>
<spacer flex="1" />
<button id="hostWhitelistRemove"
<button id="whitelistRemove"
disabled="true"
label="&hostWhitelistRemove.label;"
accesskey="&hostWhitelistRemove.accesskey;"
oncommand="BarTabPreferences.removeHost();" />
oncommand="BarTabPreferences.removeWhitelistEntry();" />
</vbox>
</row>
<row>
<spacer flex="1" />
<textbox id="hostWhitelistNewHost"
onkeypress="BarTabPreferences.onNewHostKeyPress(event);" />
<button id="hostWhitelistAdd"
label="&hostWhitelistAdd.label;"
accesskey="&hostWhitelistAdd.accesskey;"
oncommand="BarTabPreferences.addHost();" />
</row>

<separator class="thin"/>

<row align="center">
<label value="&loadOnSelect.label;"
accesskey="&loadOnSelect.accesskey;"
control="loadOnSelect" />
<menulist id="loadOnSelect"
preference="extensions.bartap.loadOnSelect"
oncommand="BarTabPreferences.onLoadChange();">
<menupopup>
<menuitem label="&loadAfterAskingMe.label;" value="0"/>
<menuitem label="&loadImmediately.label;" value="1"/>
<menuitem label="&loadAfterDelay.label;" value="2"/>
</menupopup>
</menulist>
<hbox id="delayWidgets" align="center">
<textbox id="loadOnSelectDelay"
type="number"
size="4"
preference="extensions.bartap.loadOnSelectDelay"
aria-labelledby="delayMilliseconds"/>
<label id="delayMilliseconds"
value="&delayMilliseconds.label;"
control="loadOnSelectDelay" />
</hbox>
</row>

<separator class="thin"/>

Expand All @@ -179,7 +137,7 @@
accesskey="&closingTabs.accesskey;"
control="menuClosingTabs" />
<menulist id="menuClosingTabs"
preference="extensions.bartap.findClosestUntappedTab">
preference="extensions.bartab.findClosestLoadedTab">
<menupopup>
<menuitem label="&doNothing.label;" value="false"/>
<menuitem label="&findClosestLoadedTab.label;" value="true"/>
Expand Down
18 changes: 9 additions & 9 deletions defaults/preferences/prefs.js
@@ -1,12 +1,12 @@
pref("extensions.bartap.tapRestoredTabs", true);
pref("extensions.bartap.tapBackgroundTabs", false);
pref("extensions.bartap.tapAfterTimeout", false);
pref("extensions.bartap.timeoutValue", 2);
pref("extensions.bartap.timeoutUnit", 3600);
pref("extensions.bartap.hostWhitelist", "");
pref("extensions.bartap.findClosestUntappedTab", true);
pref("extensions.bartap.loadOnSelect", 1);
pref("extensions.bartap.loadOnSelectDelay", 500);
pref("extensions.bartab.loadRestoredTabs", 1);
pref("extensions.bartab.loadBackgroundTabs", 0);
pref("extensions.bartab.unloadAfterTimeout", false);
pref("extensions.bartab.timeoutValue", 2);
pref("extensions.bartab.timeoutUnit", 3600);
pref("extensions.bartab.whitelist", "");
pref("extensions.bartab.findClosestLoadedTab", true);
pref("extensions.bartab.loadOnSelectDelay", 0);
pref("extensions.bartab.migrated", false);

// https://developer.mozilla.org/en/Localizing_extension_descriptions
pref("extensions.bartap@philikon.de.description", "chrome://bartab/locale/overlay.properties");

0 comments on commit 5e2401f

Please sign in to comment.