aboutsummaryrefslogtreecommitdiff
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/content/redirector.js46
-rw-r--r--chrome/content/redirlib.js4
-rw-r--r--chrome/locale/en-US/redirector.properties4
3 files changed, 48 insertions, 6 deletions
diff --git a/chrome/content/redirector.js b/chrome/content/redirector.js
index 6767840..732602b 100644
--- a/chrome/content/redirector.js
+++ b/chrome/content/redirector.js
@@ -17,6 +17,9 @@ var Redirector = {
$('contentAreaContextMenu')
.addEventListener("popupshowing", function(e) { Redirector.showContextMenu(e); }, false);
+
+ this.redirects = eval(RedirLib.getCharPref('redirects'));
+
var appcontent = window.document.getElementById('appcontent');
if (appcontent && !appcontent.processed) {
@@ -44,17 +47,48 @@ var Redirector = {
},
onDOMContentLoaded : function(event) {
- var redirect;
- try {
+ var redirect, link, links, url;
+
+ url = window.content.location.href;
+
+ RedirLib.debug('Processing url %1'._(url));
+
for each (redirect in this.redirects) {
- if (RedirectorCommon.wildcardMatch(redirect.pattern, window.content.location.href)) {
- window.content.location.href = redirect.redirectUrl;
+ if (RedirectorCommon.wildcardMatch(redirect.pattern, url)) {
+ 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);
+ return;
+ }
+ }
+
+ RedirLib.debug('Did not find a link for %1'._(redirect.redirectUrl));
+
+ } else {
+ this.goto(redirect);
+ }
}
}
- } catch(e) {alert(e);}
},
+ goto : function(redirect) {
+
+ if (redirect.redirectUrl == window.content.location.href) {
+ RedirLib.msgBox(this.strings.getString('extensionName'), this.strings.getFormattedString('recursiveError', [redirect.pattern, redirect.redirectUrl]));
+ } else {
+ window.content.location.href = redirect.redirectUrl;
+ }
+ },
+
onUnload : function(event) {
//Clean up here
RedirLib.debug("Finished cleanup");
@@ -82,6 +116,8 @@ var Redirector = {
if (params.out.pattern) {
this.redirects.push(params.out);
}
+
+ RedirLib.setCharPref('redirects', this.redirects.toSource());
},
onMenuItemCommand: function(event) {
diff --git a/chrome/content/redirlib.js b/chrome/content/redirlib.js
index 493c583..71856dd 100644
--- a/chrome/content/redirlib.js
+++ b/chrome/content/redirlib.js
@@ -66,6 +66,10 @@ var RedirLib = {
return this._prefBranch.getCharPref(branch);
},
+ setCharPref : function(branch, value) {
+ return this._prefBranch.setCharPref(branch, value);
+ },
+
getBoolPref : function(branch) {
return this._prefBranch.getBoolPref(branch);
},
diff --git a/chrome/locale/en-US/redirector.properties b/chrome/locale/en-US/redirector.properties
index 110f82c..5d01a1f 100644
--- a/chrome/locale/en-US/redirector.properties
+++ b/chrome/locale/en-US/redirector.properties
@@ -1,4 +1,6 @@
initError=Failed to initialize %1.
extensions.redirector@einaregilsson.com.description=Automatically redirects to user-defined urls on certain pages
+extensionName=Redirector
addCurrentUrl=Add current url to Redirector
-addLinkUrl=Add link url to Redirector \ No newline at end of file
+addLinkUrl=Add link url to Redirector
+recursiveError=A redirect with the pattern %S matches %S and is trying to redirect to it again. You should change this rule so it won't work recursively. \ No newline at end of file