aboutsummaryrefslogtreecommitdiff
path: root/chrome/content
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/content')
-rw-r--r--chrome/content/overlay.js56
-rw-r--r--chrome/content/overlay.xul9
-rw-r--r--chrome/content/redirect.js39
-rw-r--r--chrome/content/redirect.xul8
-rw-r--r--chrome/content/redirectList.js62
-rw-r--r--chrome/content/redirectList.xul28
-rw-r--r--chrome/content/redirector.js59
-rw-r--r--chrome/content/redirlib.js4
-rw-r--r--chrome/content/statusactive.PNGbin0 -> 360 bytes
-rw-r--r--chrome/content/statusinactive.PNGbin0 -> 396 bytes
10 files changed, 220 insertions, 45 deletions
diff --git a/chrome/content/overlay.js b/chrome/content/overlay.js
index 9092938..a230d23 100644
--- a/chrome/content/overlay.js
+++ b/chrome/content/overlay.js
@@ -32,6 +32,9 @@ var RedirectorOverlay = {
}
this.strings = document.getElementById("redirector-strings");
+ this.prefObserver.register();
+ this.setStatusBarImg();
+
RedirLib.debug("Finished initialization");
this.initialized = true;
@@ -74,17 +77,17 @@ var RedirectorOverlay = {
onContextMenuCommand: function(event) {
- params = { inn : { url : window.content.location.href}, out : {} };
+ var item = { exampleUrl : window.content.location.href, pattern: window.content.location.href};
if (gContextMenu.onLink) {
- params.inn.redirect = gContextMenu.link.toString();
+ item.redirectUrl = gContextMenu.link.toString();
}
window.openDialog("chrome://redirector/content/redirect.xul",
"redirect",
- "chrome,dialog,modal,centerscreen", params);
+ "chrome,dialog,modal,centerscreen", item);
- if (params.out.pattern) {
- Redirector.addRedirect(params.out);
+ if (item.saved) {
+ Redirector.addRedirect(item);
}
},
@@ -96,6 +99,47 @@ var RedirectorOverlay = {
},
+ toggleEnabled : function(event) {
+ RedirLib.setBoolPref('enabled', !RedirLib.getBoolPref('enabled'));
+ },
+
+ setStatusBarImg : function() {
+ var statusImg = $('redirector-statusbar-img');
+
+ if (RedirLib.getBoolPref('enabled')) {
+ statusImg.src = 'chrome://redirector/content/statusactive.png'
+ statusImg.setAttribute('tooltiptext', this.strings.getString('enabledTooltip'));
+ } else {
+ statusImg.src = 'chrome://redirector/content/statusinactive.png'
+ statusImg.setAttribute('tooltiptext', this.strings.getString('disabledTooltip'));
+ }
+ },
+
+ prefObserver : {
+
+ getService : function() {
+ return Cc["@mozilla.org/preferences-service;1"].getService(Ci.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' && data == 'extensions.redirector.enabled') {
+ RedirectorOverlay.setStatusBarImg();
+ }
+ }
+
+ }
+
+
};
window.addEventListener("load", function(event) { RedirectorOverlay.onLoad(event); }, false);
-window.addEventListener("unload", function(event) { RedirectorOverlay.onUnload(event); }, false); \ No newline at end of file
+window.addEventListener("unload", function(event) { RedirectorOverlay.onUnload(event); }, false);
+
+
diff --git a/chrome/content/overlay.xul b/chrome/content/overlay.xul
index c65df70..d180d1f 100644
--- a/chrome/content/overlay.xul
+++ b/chrome/content/overlay.xul
@@ -24,4 +24,13 @@
insertafter="context-stop"
oncommand="RedirectorOverlay.onContextMenuCommand(event)"/>
</popup>
+ <statusbar id="status-bar">
+ <statusbarpanel id="redirector-status">
+ <image id="redirector-statusbar-img" src="chrome://redirector/content/statusactive.png"
+ tooltiptext="Redirector is enabled;"
+ style="width:16px; height:16px;"
+ onclick="RedirectorOverlay.toggleEnabled();" />
+ </statusbarpanel>
+ </statusbar>
+
</overlay> \ No newline at end of file
diff --git a/chrome/content/redirect.js b/chrome/content/redirect.js
index cfd2a2e..5be85f7 100644
--- a/chrome/content/redirect.js
+++ b/chrome/content/redirect.js
@@ -3,29 +3,40 @@
var Redirect = {
onLoad : function() {
- var params = window.arguments[0];
- $('txtExampleUrl').value = params.inn.url;
- $('txtPattern').value = params.inn.url;
- $('txtRedirectUrl').value = params.inn.redirect || '';
-
+ var item = window.arguments[0];
+ item.saved = false;
+ $('txtExampleUrl').value = item.exampleUrl;
+ $('txtPattern').value = item.pattern;
+ $('txtRedirectUrl').value = item.redirectUrl || '';
+ $('chkOnlyIfLinkExists').checked = item.onlyIfLinkExists || false;
+
+ if (item.patternType == kRedirectorRegex) {
+ $('rdoRegex').setAttribute('selected', true);
+ $('rdoWildcard').setAttribute('selected', false);
+ }
},
onAccept : function() {
- var params = window.arguments[0];
-
- params.out.pattern = $('txtPattern').value;
- params.out.patternType = kRedirectorWildcard;
- params.out.exampleUrl =$('txtExampleUrl').value;
- params.out.redirectUrl = $('txtRedirectUrl').value;
- params.out.onlyIfLinkExists = $('chkOnlyIfLinkExists').checked;
+ var item = window.arguments[0];
+
+ item.pattern = $('txtPattern').value;
+ if ($('rdoRegex').selected) {
+ item.patternType = kRedirectorRegex;
+ } else {
+ item.patternType = kRedirectorWildcard;
+ }
+ item.exampleUrl =$('txtExampleUrl').value;
+ item.redirectUrl = $('txtRedirectUrl').value;
+ item.onlyIfLinkExists = $('chkOnlyIfLinkExists').checked;
+ item.saved = true;
return true;
},
testPattern : function() {
- try {
+ var match;
+
alert(Redirector.wildcardMatch($('txtPattern').value, $('txtExampleUrl').value));
- } catch(e) {alert(e);}
}
}; \ No newline at end of file
diff --git a/chrome/content/redirect.xul b/chrome/content/redirect.xul
index 5d6ff2c..8db1891 100644
--- a/chrome/content/redirect.xul
+++ b/chrome/content/redirect.xul
@@ -32,8 +32,14 @@
<text value="&txtRedirectUrl.label;"/>
<textbox id="txtRedirectUrl"/>
</row>
+ <row>
+ <checkbox id="chkOnlyIfLinkExists" label="&chkOnlyIfLinkExists.label;"/>
+ <radiogroup>
+ <radio id="rdoWildcard" label="&rdoWildcard.label;" accesskey="&rdoWildcard.accessKey;" selected="true"/>
+ <radio id="rdoRegex" label="&rdoRegex.label;" accesskey="&rdoRegex.accessKey;"/>
+ </radiogroup>
+ </row>
</rows>
</grid>
- <checkbox id="chkOnlyIfLinkExists" label="&chkOnlyIfLinkExists.label;"/>
</dialog>
diff --git a/chrome/content/redirectList.js b/chrome/content/redirectList.js
index 7a273cd..081359f 100644
--- a/chrome/content/redirectList.js
+++ b/chrome/content/redirectList.js
@@ -2,6 +2,9 @@ var RedirectList = {
id : "redirector@einaregilsson.com",
name : "Redirector",
+ lstRedirects: null,
+ btnDelete : null,
+ btnEdit : null,
addItemsToListBox : function(items) {
@@ -11,10 +14,13 @@ var RedirectList = {
for each (item in items) {
row = document.createElement('listitem');
- this.createCell(row, item.exampleUrl);
this.createCell(row, item.pattern);
+ this.createCell(row, item.exampleUrl);
this.createCell(row, item.redirectUrl);
this.createCell(row, item.onlyIfLinkExists);
+ this.createCell(row, item.patternType);
+
+ row.item = item;
list.appendChild(row);
}
@@ -32,10 +38,64 @@ var RedirectList = {
try {
RedirLib.initialize(this);
Redirector.init();
+ this.lstRedirects = $('lstRedirects');
+ this.btnDelete = $('btnDelete');
+ this.btnEdit = $('btnEdit');
this.addItemsToListBox(Redirector.list);
} catch(e) {
alert(e);
}
+ },
+
+ close : function() {
+ window.close();
+ },
+
+ editRedirect : function() {
+
+ var listItem = this.lstRedirects.selectedItem;
+
+ if (!listItem) {
+ return;
+ }
+
+ var item = listItem.item;
+
+ window.openDialog("chrome://redirector/content/redirect.xul",
+ "redirect",
+ "chrome,dialog,modal,centerscreen", item);
+
+ if (item.saved) {
+ var map = [item.pattern, item.exampleUrl, item.redirectUrl, item.onlyIfLinkExists, item.patternType];
+
+ for (var i in map) {
+ listItem.childNodes[i].setAttribute('value', map[i]);
+ listItem.childNodes[i].setAttribute('label', map[i]);
+ }
+
+ Redirector.save();
+ }
+
+ },
+
+ deleteRedirect : function() {
+ var index = this.lstRedirects.selectedIndex;
+
+ if (index == -1) {
+ return;
+ }
+
+ try {
+ this.lstRedirects.removeItemAt(index);
+ Redirector.deleteAt(index);
+ } catch(e) {alert(e);}
+ },
+
+ selectionChange : function() {
+ var index = this.lstRedirects.selectedIndex;
+
+ this.btnEdit.disabled = (index == -1);
+ this.btnDelete.disabled = (index == -1);
}
};
diff --git a/chrome/content/redirectList.xul b/chrome/content/redirectList.xul
index 3c0b687..688457b 100644
--- a/chrome/content/redirectList.xul
+++ b/chrome/content/redirectList.xul
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://redirector/locale/redirectList.dtd">
-<dialog title="&window.title;"
+<window title="&window.title;"
orient="vertical"
autostretch="always"
onload="RedirectList.onLoad();"
buttons="accept"
- ondialogaccept="return RedirectList.onAccept();"
+ width="600px;"
+ height="400px;"
xmlns:nc="http://home.netscape.com/NC-rdf#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
@@ -14,24 +15,31 @@
<script type="application/x-javascript" src="redirector.js"/>
<script type="application/x-javascript" src="redirectList.js"/>
- <dialogheader title="&header;" description="&header.description;"/>
-
- <listbox id="lstRedirects">
+ <vbox>
+ <listbox id="lstRedirects" height="300px" ondblclick="RedirectList.editRedirect();" onselect="RedirectList.selectionChange();">
<listhead>
<listheader label="&colPattern.label;"/>
+ <listheader label="&colExample.label;"/>
<listheader label="&colRedirectTo.label;"/>
<listheader label="&colOnlyIfLinkExits.label;"/>
<listheader label="&colPatternType.label;"/>
</listhead>
<listcols>
- <listcol flex="1"/>
- <listcol flex="1"/>
- <listcol flex="1"/>
- <listcol flex="1"/>
+ <listcol/>
+ <listcol/>
+ <listcol/>
+ <listcol/>
+ <listcol/>
</listcols>
</listbox>
-</dialog>
+ <hbox style="align:right;">
+ <button id="btnEdit" onclick="RedirectList.editRedirect();" label="&btnEdit.label;" disabled="true" />
+ <button id="btnDelete" onclick="RedirectList.deleteRedirect();" label="&btnDelete.label;" disabled="true" />
+ <button id="btnClose" onclick="RedirectList.close();" label="&btnClose.label;"/>
+ </hbox>
+ </vbox>
+</window>
diff --git a/chrome/content/redirector.js b/chrome/content/redirector.js
index 63ee85d..8ec4af7 100644
--- a/chrome/content/redirector.js
+++ b/chrome/content/redirector.js
@@ -5,6 +5,8 @@ var Redirector = {
list : [],
+ enabled : true,
+
init : function() {
this.load();
this.prefObserver.register();
@@ -43,42 +45,67 @@ var Redirector = {
this.save();
},
+ deleteAt : function(index) {
+ this.list.splice(index, 1);
+ this.save();
+ },
+
processUrl : function(url) {
- var redirect, link, links;
+ var redirect, link, links, redirectUrl, match;
+
+ if (!this.enabled) {
+ return;
+ }
+
for each (redirect in this.list) {
- if (redirect.patternType == kRedirectorWildcard && this.wildcardMatch(redirect.pattern, url)) {
+ var redirectUrl;
+
+ if (redirect.patternType == kRedirectorWildcard) {
+ match = this.wildcardMatch(redirect.pattern, url);
+ redirectUrl = redirect.redirectUrl;
+ } else if (redirect.patternType == kRedirectorRegex) {
+ match = this.regexMatch(redirect.pattern, url);
+ redirectUrl = redirect.redirectUrl;
+ }
+
+ if (match) {
RedirLib.debug('%1 matches %2'._(redirect.pattern, url));
if (redirect.onlyIfLinkExists) {
links = window.content.document.getElementsByTagName('a');
for each(link in links) {
- if (link.href && link.href.toString() == redirect.redirectUrl) {
- RedirLib.debug('Found a link for %1'._(redirect.redirectUrl));
- this._goto(redirect);
+ if (link.href && link.href.toString() == redirectUrl) {
+ RedirLib.debug('Found a link for %1'._(redirectUrl));
+ this._goto(redirectUrl, redirect.pattern);
return;
}
}
- RedirLib.debug('Did not find a link for %1'._(redirect.redirectUrl));
+ RedirLib.debug('Did not find a link for %1'._(redirectUrl));
} else {
- this._goto(redirect);
+ this._goto(redirectUrl, redirect.pattern);
}
}
}
},
- _goto : function(redirect) {
+ _goto : function(redirectUrl, pattern) {
- if (redirect.redirectUrl == window.content.location.href) {
- RedirLib.msgBox(this.strings.getString('extensionName'), this.strings.getFormattedString('recursiveError', [redirect.pattern, redirect.redirectUrl]));
+ if (redirectUrl == window.content.location.href) {
+ RedirLib.msgBox(this.strings.getString('extensionName'), this.strings.getFormattedString('recursiveError', [pattern, redirectUrl]));
} else {
- window.content.location.href = redirect.redirectUrl;
+ window.content.location.href = redirectUrl;
}
},
+ regexMatch : function(pattern, text) {
+ alert('regexmatch');
+
+ },
+
wildcardMatch : function(pattern, text) {
var parts
, part
@@ -127,10 +154,16 @@ var Redirector = {
},
observe : function(subject, topic, data) {
- if (topic == 'nsPref:changed' && data == 'extensions.redirector.redirects') {
+ if (topic != 'nsPref:changed') {
+ return;
+ }
+
+ if (data == 'extensions.redirector.redirects') {
Redirector.load();
+ } else if (data == 'extensions.redirector.enabled') {
+ Redirector.enabled = RedirLib.getBoolPref('enabled');
}
}
},
-}; \ No newline at end of file
+};
diff --git a/chrome/content/redirlib.js b/chrome/content/redirlib.js
index 71856dd..894c088 100644
--- a/chrome/content/redirlib.js
+++ b/chrome/content/redirlib.js
@@ -70,6 +70,10 @@ var RedirLib = {
return this._prefBranch.setCharPref(branch, value);
},
+ setBoolPref : function(branch, value) {
+ return this._prefBranch.setBoolPref(branch, value);
+ },
+
getBoolPref : function(branch) {
return this._prefBranch.getBoolPref(branch);
},
diff --git a/chrome/content/statusactive.PNG b/chrome/content/statusactive.PNG
new file mode 100644
index 0000000..06ce766
--- /dev/null
+++ b/chrome/content/statusactive.PNG
Binary files differ
diff --git a/chrome/content/statusinactive.PNG b/chrome/content/statusinactive.PNG
new file mode 100644
index 0000000..8b83562
--- /dev/null
+++ b/chrome/content/statusinactive.PNG
Binary files differ