aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chrome/content/code/browserOverlay.xul.js67
-rw-r--r--chrome/content/code/prefs.js92
-rw-r--r--chrome/content/code/redirect.js164
-rw-r--r--chrome/content/code/redirectList.xul.js59
-rw-r--r--chrome/content/code/redirector.prototype.js52
-rw-r--r--chrome/content/ui/redirectList.xul25
-rw-r--r--components/redirector.component.js1
-rw-r--r--defaults/preferences/redirector.preferences.js2
8 files changed, 263 insertions, 199 deletions
diff --git a/chrome/content/code/browserOverlay.xul.js b/chrome/content/code/browserOverlay.xul.js
index 129da48..b5ec077 100644
--- a/chrome/content/code/browserOverlay.xul.js
+++ b/chrome/content/code/browserOverlay.xul.js
@@ -13,12 +13,9 @@ var RedirectorOverlay = {
document.getElementById('contentAreaContextMenu')
.addEventListener("popupshowing", function(e) { RedirectorOverlay.showContextMenu(e); }, false);
- document.getElementById('redirector-status').hidden = !Redirector.getBoolPref('showStatusBarIcon');
- document.getElementById('redirector-context').hidden = !Redirector.getBoolPref('showContextMenu');
-
this.strings = document.getElementById("redirector-strings");
- this.prefObserver.register();
- this.setStatusBarImg();
+ this.changedPrefs(Redirector.prefs);
+ Redirector.prefs.addListener(this);
} catch(e) {
if (this.strings) {
@@ -30,10 +27,25 @@ var RedirectorOverlay = {
},
onUnload : function(event) {
- RedirectorOverlay.prefObserver.unregister();
+ Redirector.prefs.removeListener(this);
Redirector.debug("Finished cleanup");
},
+ changedPrefs : function(prefs) {
+ var statusImg = document.getElementById('redirector-statusbar-img');
+
+ if (prefs.enabled) {
+ statusImg.src = 'chrome://redirector/content/images/statusactive.PNG'
+ statusImg.setAttribute('tooltiptext', this.strings.getString('enabledTooltip'));
+ } else {
+ statusImg.src = 'chrome://redirector/content/images/statusinactive.PNG'
+ statusImg.setAttribute('tooltiptext', this.strings.getString('disabledTooltip'));
+ }
+
+ document.getElementById('redirector-status').hidden = !prefs.showStatusBarIcon;
+ document.getElementById('redirector-context').hidden = !prefs.showContextMenu;
+ },
+
showContextMenu : function(event) {
if (gContextMenu.onLink) {
document.getElementById("redirector-context").label = this.strings.getString('addLinkUrl');
@@ -60,7 +72,7 @@ var RedirectorOverlay = {
},
toggleEnabled : function(event) {
- Redirector.setEnabled(!Redirector.enabled);
+ Redirector.prefs.enabled = !Redirector.prefs.enabled;
},
openSettings : function() {
@@ -85,47 +97,8 @@ var RedirectorOverlay = {
} else if (event.button == RIGHT) {
this.openSettings();
}
- },
-
- setStatusBarImg : function() {
- var statusImg = document.getElementById('redirector-statusbar-img');
-
- if (Redirector.enabled) {
- statusImg.src = 'chrome://redirector/content/images/statusactive.PNG'
- statusImg.setAttribute('tooltiptext', this.strings.getString('enabledTooltip'));
- } else {
- statusImg.src = 'chrome://redirector/content/images/statusinactive.PNG'
- statusImg.setAttribute('tooltiptext', this.strings.getString('disabledTooltip'));
- }
- },
-
- prefObserver : {
-
- getService : function() {
- return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal);
- },
-
- register: function() {
- this.getService().addObserver('extensions.redirector', this, false);
- },
-
- unregister: function() {
- this.getService().removeObserver('extensions.redirector', this);
- },
-
- observe : function(subject, topic, data) {
- if (topic != 'nsPref:changed') {
- return;
- }
- if (data == 'extensions.redirector.enabled') {
- RedirectorOverlay.setStatusBarImg();
- } else if (data == 'extensions.redirector.showStatusBarIcon') {
- document.getElementById('redirector-status').hidden = !Redirector.getBoolPref('showStatusBarIcon');
- } else if (data == 'extensions.redirector.showContextMenu') {
- document.getElementById('redirector-context').hidden = !Redirector.getBoolPref('showContextMenu');
- }
- }
}
+
};
window.addEventListener("load", function(event) { RedirectorOverlay.onLoad(event); }, false);
window.addEventListener("unload", function(event) { RedirectorOverlay.onUnload(event); }, false);
diff --git a/chrome/content/code/prefs.js b/chrome/content/code/prefs.js
new file mode 100644
index 0000000..c87eb27
--- /dev/null
+++ b/chrome/content/code/prefs.js
@@ -0,0 +1,92 @@
+// $Id$
+
+function Prefs() {
+ this.init();
+}
+
+Prefs.prototype = {
+
+ //Preferences:
+ _version : null,
+ _enabled : null,
+ _showStatusBarIcon : null,
+ _showContextMenu : null,
+ _debugEnabled : null,
+ _defaultDir : null,
+ _redirects : null,
+
+ _prefBranch : null,
+
+ _listeners : null,
+
+ //Preferences props
+
+ get version() { return this._version; },
+ set version(value) { this._prefBranch.setCharPref('version', value); },
+
+ get enabled() { return this._enabled; },
+ set enabled(value) { this._prefBranch.setBoolPref('enabled', value); },
+
+ get showStatusBarIcon() { return this._showStatusBarIcon; },
+ set showStatusBarIcon(value) { this._prefBranch.setBoolPref('showStatusBarIcon', value); },
+
+ get showContextMenu() { return this._showContextMenu; },
+ set showContextMenu(value) { this._prefBranch.setBoolPref('showContextMenu', value); },
+
+ get debugEnabled() { return this._debugEnabled; },
+ set debugEnabled(value) { this._prefBranch.setBoolPref('debugEnabled', value); },
+
+ get defaultDir() { return this._defaultDir; },
+ set defaultDir(value) { this._prefBranch.setCharPref('defaultDir', value); },
+
+ get redirects() { return this._redirects; },
+ set redirects(value) { this._prefBranch.setCharPref('redirects', value); },
+
+ init : function() {
+ this._prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.redirector.");
+ this.reload();
+ this._listeners = [];
+ this.service.addObserver('extensions.redirector', this, false);
+ },
+
+ destroy : function() {
+ this.service.removeObserver('extensions.redirector', this);
+ },
+
+ reload : function() {
+ this._version = this._prefBranch.getCharPref('version');
+ this._enabled = this._prefBranch.getBoolPref('enabled');
+ this._showStatusBarIcon = this._prefBranch.getBoolPref('showStatusBarIcon');
+ this._showContextMenu = this._prefBranch.getBoolPref('showContextMenu');
+ this._debugEnabled = this._prefBranch.getBoolPref('debugEnabled');
+ this._defaultDir = this._prefBranch.getCharPref('defaultDir');
+ this._redirects = this._prefBranch.getCharPref('redirects');
+ },
+
+ get service() {
+ return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal);
+ },
+
+ observe : function(subject, topic, data) {
+ if (topic != 'nsPref:changed') {
+ return;
+ }
+ this.reload();
+ for each (var listener in this._listeners) {
+ listener && listener.changedPrefs && listener.changedPrefs(this);
+ }
+ },
+
+ addListener : function(listener) {
+ this._listeners.push(listener);
+ },
+
+ removeListener : function(listener) {
+ for (var i = 0; i < this._listeners.length; i++) {
+ if (this._listeners[i] == listener) {
+ this._listeners.splice(i,1);
+ return;
+ }
+ }
+ },
+} \ No newline at end of file
diff --git a/chrome/content/code/redirect.js b/chrome/content/code/redirect.js
index 740eda9..dcd3596 100644
--- a/chrome/content/code/redirect.js
+++ b/chrome/content/code/redirect.js
@@ -9,6 +9,65 @@ Redirect.WILDCARD = 'W';
Redirect.REGEX = 'R';
Redirect.prototype = {
+
+ //These are the only ones that are necessary to have as properties for now
+ //The others can be changed to properties later as neccessary
+ _includePattern : null,
+ _excludePattern : null,
+ _patternType : null,
+ _rxInclude : null,
+ _rxExclude : null,
+
+ get patternType() { return this._patternType; },
+ set patternType(value) {
+ this._patternType = value;
+ this.compile();
+ },
+
+ get includePattern() { return this._includePattern; },
+ set includePattern(value) {
+ this._includePattern = value;
+ this._rxInclude = this._compile(value);
+ },
+
+ get excludePattern() { return this._excludePattern; },
+ set excludePattern(value) {
+ this._excludePattern = value;
+ this._rxExclude = this._compile(value);
+ },
+
+ _preparePattern : function(pattern) {
+ if (this.patternType == Redirect.REGEX) {
+ return pattern;
+ } else { //Convert wildcard to regex pattern
+ var converted = '^';
+ for (var i = 0; i < pattern.length; i++) {
+ var ch = pattern.charAt(i);
+ if ('()[]{}?.^$\\+'.indexOf(ch) != -1) {
+ converted += '\\' + ch;
+ } else if (ch == '*') {
+ converted += '(.*?)';
+ } else {
+ converted += ch;
+ }
+ }
+ converted += '$';
+ return converted;
+ }
+ },
+
+ compile : function() {
+ this._rxInclude = this._compile(this._includePattern);
+ this._rxExclude = this._compile(this._excludePattern);
+ },
+
+ _compile : function(pattern) {
+ if (!pattern) {
+ return null;
+ }
+ return new RegExp(this._preparePattern(pattern),"gi");
+ },
+
_init : function(exampleUrl, includePattern, excludePattern, redirectUrl, patternType, unescapeMatches, disabled) {
this.exampleUrl = exampleUrl || '';
this.includePattern = includePattern || '';
@@ -78,11 +137,11 @@ Redirect.prototype = {
};
var redirectTo = null;
- redirectTo = this._match(url, this.includePattern, this.redirectUrl);
+ redirectTo = this._includeMatch(url);
if (redirectTo !== null) {
if (this.disabled) {
result.isDisabledMatch = true;
- } else if (this._match(url, this.excludePattern, 'exclude') == 'exclude') {
+ } else if (this._excludeMatch(url)) {
result.isExcludeMatch = true;
} else {
result.isMatch = true;
@@ -92,95 +151,24 @@ Redirect.prototype = {
return result;
},
- _match : function(url, pattern, redirectUrl) {
- if (this.isWildcard()) {
- return this._wildcardMatch(url, pattern, redirectUrl);
- } else {
- return this._regexMatch(url, pattern, redirectUrl);
+ _includeMatch : function(url) {
+ if (!this._rxInclude) {
+ return null;
}
- },
-
- _wildcardMatch : function(url, pattern, redirectUrl) {
-
- if (!pattern || !url) {
- return null;
+ var matches = this._rxInclude.exec(url);
+ if (!matches) {
+ return null;
}
- if (pattern.indexOf('*') == -1) {
- return (pattern == url) ? redirectUrl : null;
- }
-
- var parts = pattern.split('*');
- var first = parts[0],
- last = parts[parts.length-1];
-
- if (first) {
- if (url.substr(0, first.length) != first) {
- return null;
- }
- url = url.substr(first.length);
- }
-
- if (last) {
- if (url.substr(url.length-last.length) != last) {
- return null;
- }
- url = url.substr(0, url.length-last.length);
- }
-
- if ((first || last) && parts.length == 2) {
- return redirectUrl.replace('$1', url);
- }
- parts.splice(0,1);
- parts.splice(parts.length-1,1);
- var pos = 0, lastPos = 0;
- var matches = [];
- for each(part in parts) {
- pos = url.indexOf(part, lastPos);
- if (pos == -1) {
- return null;
- }
- var match = url.substr(lastPos, pos-lastPos);
- matches.push(match);
- lastPos = pos + part.length;
- }
- matches.push(url.substr(lastPos));
-
- return this._replaceCaptures(redirectUrl, matches);
- },
-
- _regexMatch : function(url, pattern, redirectUrl, unescapeMatches) {
-
- if (!pattern) {
- return null;
- }
- var strings, rx, match;
- try {
- rx = new RegExp(pattern, 'gi');
- match = rx.exec(url);
- } catch(e) {
- //External users can display this to the user if they want
- throw { type : 'regexPatternError',
- 'pattern' : pattern,
- message : "The pattern '" + pattern + "' is not a valid regular expression",
- toString : function() { return this.message; }
- };
+ var resultUrl = this.redirectUrl;
+ for (var i = 1; i < matches.length; i++) {
+ resultUrl = resultUrl.replace(new RegExp('\\$' + i, 'gi'), this.unescapeMatches ? unescape(matches[i]) : matches[i]);
}
-
- var rxrepl;
-
- if (!match) {
- return null;
- }
- match.splice(0,1); //First element in regex match is the whole match
- return this._replaceCaptures(redirectUrl, match);
- },
-
- _replaceCaptures : function(redirectUrl, captures) {
- for (var i = 1; i <= captures.length; i++) {
- redirectUrl = redirectUrl.replace(new RegExp('\\$' + i, 'gi'), this.unescapeMatches ? unescape(captures[i-1]) : captures[i-1]);
- }
- return redirectUrl;
- },
+ return resultUrl;
+ },
+
+ _excludeMatch : function(url) {
+ return !!(this._rxExclude && this._rxExclude.exec(url));
+ },
clone : function() {
return new Redirect(this.exampleUrl, this.includePattern,
diff --git a/chrome/content/code/redirectList.xul.js b/chrome/content/code/redirectList.xul.js
index 76b450f..046d018 100644
--- a/chrome/content/code/redirectList.xul.js
+++ b/chrome/content/code/redirectList.xul.js
@@ -11,24 +11,55 @@ var RedirectList = {
btnEdit : null,
btnUp : null,
btnDown : null,
-
+ chkEnableRedirector : null,
+ chkShowStatusBarIcon : null,
+ chkShowContextMenu : null,
+ chkEnableDebugOutput : null,
+
onLoad : function() {
try {
+ //Get references to controls
this.lstRedirects = document.getElementById('lstRedirects');
- this.lstRedirects.selType = 'single';
- this.template = document.getElementsByTagName('richlistitem')[0];
- this.lstRedirects.removeChild(this.template);
this.btnDelete = document.getElementById('btnDelete');
this.btnEdit = document.getElementById('btnEdit');
this.btnUp = document.getElementById('btnUp');
this.btnDown = document.getElementById('btnDown');
+ this.chkEnableRedirector = document.getElementById('chkEnableRedirector');
+ this.chkShowStatusBarIcon = document.getElementById('chkShowStatusBarIcon');
+ this.chkShowContextMenu = document.getElementById('chkShowContextMenu');
+ this.chkEnableDebugOutput = document.getElementById('chkEnableDebugOutput');
+
+ //Preferences
+ this.setPrefs(Redirector.prefs);
+ Redirector.prefs.addListener(this);
+
+ //Redirect list
+ this.lstRedirects.selType = 'single';
+ this.template = document.getElementsByTagName('richlistitem')[0];
+ this.lstRedirects.removeChild(this.template);
this.addItemsToListBox(Redirector.list);
- this.strings = document.getElementById('redirector-strings');
+
+ this.strings = document.getElementById('redirector-strings');
} catch(e) {
alert(e);
}
},
+
+ onUnload : function() {
+ Redirector.prefs.removeListener(this);
+ },
+ changedPrefs : function(prefs) {
+ this.setPrefs(prefs);
+ },
+
+ setPrefs : function(prefs) {
+ this.chkEnableRedirector.setAttribute('checked', prefs.enabled);
+ this.chkShowStatusBarIcon.setAttribute('checked', prefs.showStatusBarIcon);
+ this.chkShowContextMenu.setAttribute('checked', prefs.showContextMenu);
+ this.chkEnableDebugOutput.setAttribute('checked', prefs.debugEnabled);
+ },
+
addItemsToListBox : function(items) {
var item, row, value, newItem;
@@ -94,6 +125,10 @@ var RedirectList = {
listItem.getElementsByAttribute('name', 'dscrRedirectTo')[0].setAttribute('value', item.redirectUrl);
},
+ preferenceChange : function(event) {
+ Redirector.prefs[event.originalTarget.getAttribute('preference')] = event.originalTarget.hasAttribute('checked');
+ },
+
addRedirect : function() {
var args = { saved : false, redirect : new Redirect() };
window.openDialog("chrome://redirector/content/ui/editRedirect.xul", "redirect", "chrome,dialog,modal,centerscreen", args);
@@ -124,12 +159,6 @@ var RedirectList = {
}
},
- buttonKeyPress : function(event) {
- if (event.keyCode == 13 && !event.originalTarget.disabled) {
- event.originalTarget.click();
- }
- },
-
deleteRedirect : function() {
var index = this.lstRedirects.selectedIndex;
@@ -165,14 +194,6 @@ var RedirectList = {
this.btnDown.disabled = (index == -1 || index >= Redirector.list.length-1);
},
- redirectListKeyDown : function(event) {
- if (event.keyCode == 46) { //Del key
- this.deleteRedirect();
- } else if (event.keyCode == 13) { //Enter key
- this.editRedirect();
- }
- },
-
importExport : function(mode, captionKey, func) {
//Mostly borrowed from Adblock Plus
var picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
diff --git a/chrome/content/code/redirector.prototype.js b/chrome/content/code/redirector.prototype.js
index 8218395..e364ecc 100644
--- a/chrome/content/code/redirector.prototype.js
+++ b/chrome/content/code/redirector.prototype.js
@@ -6,19 +6,20 @@ Cr = Components.results;
nsIContentPolicy = Ci.nsIContentPolicy;
Redirector.prototype = {
- prefBranch : null,
- list : null,
+
+ prefs : null,
+ list : null,
strings : null,
cout : Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService),
+
+
init : function() {
- this.prefBranch = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.redirector.");
+ this.prefs = new Prefs();
//Check if we need to update existing redirects
- var data = this.prefBranch.getCharPref('redirects');
- var version = this.prefBranch.getCharPref('version');
- this.debugEnabled = this.prefBranch.getBoolPref('debug');
- this.enabled = this.prefBranch.getBoolPref('enabled');
+ var data = this.prefs.redirects;
+ var version = this.prefs.version;
this.loadStrings();
//Here update checks are handled
if (version == 'undefined') { //Either a fresh install of Redirector, or first time install of v2.0
@@ -33,14 +34,14 @@ Redirector.prototype = {
arr.splice(3,1); //Remove the "only if link exists" data
newArr.push(arr.join(',,,'));
}
- this.prefBranch.setCharPref('redirects', newArr.join(':::'));
+ this.prefs.redirects = newArr.join(':::');
}
- this.prefBranch.setCharPref('version', '2.0');
+ this.prefs.version = '2.0';
}
//Update finished
//Now get from the new format
- data = this.prefBranch.getCharPref('redirects');
+ data = this.prefs.redirects;
var arr;
this.list = [];
if (data != '') {
@@ -52,14 +53,6 @@ Redirector.prototype = {
}
},
- getDefaultDir : function() {
- return this.prefBranch.getCharPref('defaultDir');
- },
-
- setDefaultDir : function(dir) {
- this.prefBranch.setCharPref('defaultDir', dir.spec);
- },
-
loadStrings : function() {
var src = 'chrome://redirector/locale/redirector.properties';
var localeService = Cc["@mozilla.org/intl/nslocaleservice;1"].getService(Ci.nsILocaleService);
@@ -69,7 +62,7 @@ Redirector.prototype = {
},
debug : function(msg) {
- if (this.debugEnabled) {
+ if (this.prefs.debugEnabled) {
this.cout.logStringMessage('REDIRECTOR: ' + msg);
}
},
@@ -77,14 +70,15 @@ Redirector.prototype = {
// nsIContentPolicy interface implementation
shouldLoad: function(contentType, contentLocation, requestOrigin, aContext, mimeTypeGuess, extra) {
try {
- if (!this.enabled) {
+ if (!this.prefs.enabled) {
return nsIContentPolicy.ACCEPT;
}
- if (contentLocation.scheme != "http" && contentLocation.scheme != "https") {
+
+ if (contentType != nsIContentPolicy.TYPE_DOCUMENT) {
return nsIContentPolicy.ACCEPT;
}
-
- if (contentType != nsIContentPolicy.TYPE_DOCUMENT) {
+
+ if (contentLocation.scheme != "http" && contentLocation.scheme != "https") {
return nsIContentPolicy.ACCEPT;
}
@@ -122,11 +116,6 @@ Redirector.prototype = {
return nsIContentPolicy.ACCEPT;
},
- setEnabled : function(val) {
- this.enabled = val;
- this.prefBranch.setBoolPref('enabled', val);
- },
-
reload : function() {
loader.loadSubScript('chrome://redirector/content/code/redirector.prototype.js');
loader.loadSubScript('chrome://redirector/content/code/redirect.js');
@@ -148,17 +137,13 @@ Redirector.prototype = {
},
save : function() {
- this.prefBranch.setCharPref('redirects', this.redirectsAsString(':::'));
+ this.prefs.redirects = this.redirectsAsString(':::');
},
redirectsAsString : function(seperator) {
return [r.serialize() for each (r in this.list)].join(seperator);
},
- getBoolPref : function(name) {
- return this.prefBranch.getBoolPref(name);
- },
-
exportRedirects : function(file) {
var fileStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
const PR_WRONLY = 0x02;
@@ -166,7 +151,6 @@ Redirector.prototype = {
const PR_TRUNCATE = 0x20;
fileStream.init(file, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, 0644, 0);
- //file.parent.QueryInterface(Ci.nsILocalFile)
var stream = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream);
stream.init(fileStream, "UTF-8", 16384, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
stream.writeString(this.redirectsAsString('\n'));
diff --git a/chrome/content/ui/redirectList.xul b/chrome/content/ui/redirectList.xul
index 02b1b72..9154e8a 100644
--- a/chrome/content/ui/redirectList.xul
+++ b/chrome/content/ui/redirectList.xul
@@ -7,6 +7,7 @@
<window title="&window.title;"
orient="vertical"
onload="RedirectList.onLoad();"
+ onunload="RedirectList.onUnload();"
buttons="accept"
width="650px"
height="500px"
@@ -29,8 +30,12 @@
</tabs>
<tabpanels flex="1">
<tabpanel flex="1">
+ <keyset>
+ <key oncommand="RedirectList.moveUp();" keycode="VK_UP" modifiers="control" />
+ <key oncommand="RedirectList.moveDown();" keycode="VK_DOWN" modifiers="control" />
+ </keyset>
<vbox flex="1">
- <richlistbox seltype="single" id="lstRedirects" flex="1" ondblclick="RedirectList.editRedirect();" onselect="RedirectList.selectionChange();" onkeydown="RedirectList.redirectListKeyDown(event);">
+ <richlistbox seltype="single" id="lstRedirects" flex="1" ondblclick="RedirectList.editRedirect();" onselect="RedirectList.selectionChange();">
<richlistitem class="redirectListItem" selected="false">
<grid>
<cols />
@@ -56,11 +61,11 @@
</richlistitem>
</richlistbox>
<hbox>
- <button id="btnAdd" onclick="RedirectList.addRedirect();" accesskey="&btnAdd.accesskey;" onkeypress="RedirectList.buttonKeyPress(event);" label="&btnAdd.label;" tooltiptext="&btnAdd.tooltip;" disabled="false" />
- <button id="btnEdit" onclick="RedirectList.editRedirect();" accesskey="&btnEdit.accesskey;" onkeypress="RedirectList.buttonKeyPress(event);" label="&btnEdit.label;" tooltiptext="&btnEdit.tooltip;" disabled="true" />
- <button id="btnDelete" onclick="RedirectList.deleteRedirect();" accesskey="&btnDelete.accesskey;" onkeypress="RedirectList.buttonKeyPress(event);" label="&btnDelete.label;" tooltiptext="&btnDelete.tooltip;" disabled="true" />
- <button id="btnUp" onclick="RedirectList.moveUp();" onkeypress="RedirectList.buttonKeyPress(event);" label="&btnUp.label;" tooltiptext="&btnUp.tooltip;" disabled="false" />
- <button id="btnDown" onclick="RedirectList.moveDown();" onkeypress="RedirectList.buttonKeyPress(event);" tooltiptext="&btnDown.tooltip;" label="&btnDown.label;" />
+ <button id="btnAdd" oncommand="RedirectList.addRedirect();" accesskey="&btnAdd.accesskey;" label="&btnAdd.label;" tooltiptext="&btnAdd.tooltip;" disabled="false" />
+ <button id="btnEdit" oncommand="RedirectList.editRedirect();" accesskey="&btnEdit.accesskey;" label="&btnEdit.label;" tooltiptext="&btnEdit.tooltip;" disabled="true" />
+ <button id="btnDelete" oncommand="RedirectList.deleteRedirect();" accesskey="&btnDelete.accesskey;" label="&btnDelete.label;" tooltiptext="&btnDelete.tooltip;" disabled="true" />
+ <button id="btnUp" oncommand="RedirectList.moveUp();" label="&btnUp.label;" tooltiptext="&btnUp.tooltip;" disabled="false" />
+ <button id="btnDown" oncommand="RedirectList.moveDown();" tooltiptext="&btnDown.tooltip;" label="&btnDown.label;" />
</hbox>
</vbox>
</tabpanel>
@@ -69,22 +74,22 @@
<groupbox>
<caption label="&grpGeneralPreferences.label;" />
<hbox>
- <checkbox label="&chkEnableRedirector.label;" accesskey="&chkEnableRedirector.accesskey;" />
+ <checkbox id="chkEnableRedirector" label="&chkEnableRedirector.label;" oncommand="RedirectList.preferenceChange(event);" accesskey="&chkEnableRedirector.accesskey;" preference="enabled" />
<spacer flex="1" />
</hbox>
<hbox>
- <checkbox label="&chkShowStatusBarIcon.label;" accesskey="&chkShowStatusBarIcon.accesskey;" />
+ <checkbox id="chkShowStatusBarIcon" label="&chkShowStatusBarIcon.label;" oncommand="RedirectList.preferenceChange(event);" accesskey="&chkShowStatusBarIcon.accesskey;" preference="showStatusBarIcon" />
<spacer flex="1" />
</hbox>
<hbox>
- <checkbox label="&chkShowContextMenu.label;" accesskey="&chkShowContextMenu.accesskey;" />
+ <checkbox id="chkShowContextMenu" label="&chkShowContextMenu.label;" oncommand="RedirectList.preferenceChange(event);" accesskey="&chkShowContextMenu.accesskey;" preference="showContextMenu" />
<spacer flex="1" />
</hbox>
</groupbox>
<groupbox>
<caption label="&grpDebuggingPreferences.label;" />
<hbox>
- <checkbox label="&chkEnableDebugOutput.label;" accesskey="&chkEnableDebugOutput.accesskey;" />
+ <checkbox id="chkEnableDebugOutput" label="&chkEnableDebugOutput.label;" oncommand="RedirectList.preferenceChange(event);" accesskey="&chkEnableDebugOutput.accesskey;" preference="debugEnabled" />
<spacer flex="1" />
</hbox>
</groupbox>
diff --git a/components/redirector.component.js b/components/redirector.component.js
index 1ed0764..eeb6b39 100644
--- a/components/redirector.component.js
+++ b/components/redirector.component.js
@@ -16,6 +16,7 @@ const loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSS
try {
loader.loadSubScript('chrome://redirector/content/code/redirector.prototype.js');
loader.loadSubScript('chrome://redirector/content/code/redirect.js');
+ loader.loadSubScript('chrome://redirector/content/code/prefs.js');
} catch(e) {
for (i in e)
Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService).logStringMessage('REDIRECTOR: Loading Redirector implementation failed: ' + i + e[i]);
diff --git a/defaults/preferences/redirector.preferences.js b/defaults/preferences/redirector.preferences.js
index 61e0173..1bac6b0 100644
--- a/defaults/preferences/redirector.preferences.js
+++ b/defaults/preferences/redirector.preferences.js
@@ -1,6 +1,6 @@
//// $Id$
-pref("extensions.redirector.debug", false);
+pref("extensions.redirector.debugEnabled", false);
pref("extensions.redirector.enabled", true);
pref("extensions.redirector.showContextMenu", true);
pref("extensions.redirector.showStatusBarIcon", true);