aboutsummaryrefslogtreecommitdiff
path: root/chrome/content/redirector.js
diff options
context:
space:
mode:
authorEinar Egilsson2009-05-09 20:46:48 +0000
committerEinar Egilsson2009-05-09 20:46:48 +0000
commit612e652d4a9feac5331c0262bbe6d234df3542e7 (patch)
treeb62a5821f9188454db189c033127263e3c48ffd5 /chrome/content/redirector.js
parent385393f45b40ad4bb67ec245388e271cf51f4994 (diff)
1.7 start
git-svn-id: http://einaregilsson.googlecode.com/svn/mozilla/redirector/trunk@209 119bf307-c92d-0410-89bd-8f53e6181181
Diffstat (limited to 'chrome/content/redirector.js')
-rw-r--r--chrome/content/redirector.js312
1 files changed, 0 insertions, 312 deletions
diff --git a/chrome/content/redirector.js b/chrome/content/redirector.js
deleted file mode 100644
index fb902f6..0000000
--- a/chrome/content/redirector.js
+++ /dev/null
@@ -1,312 +0,0 @@
-const kRedirectorWildcard = 'W';
-const kRedirectorRegex= 'R';
-
-var Redirector = {
-
- list : [],
-
- enabled : true,
-
- init : function() {
- this.load();
- this.prefObserver.register();
- },
-
- unload : function() {
- this.prefObserver.unregister();
- },
-
- save : function() {
- var r
- , tempList = [];
-
- for each (r in this.list) {
- tempList.push([r.exampleUrl, r.pattern, r.redirectUrl, r.onlyIfLinkExists, r.patternType, r.excludePattern]);
- }
- RedirLib.setCharPref('redirects', tempList.toSource());
- },
-
- load : function() {
- var tempList = eval(RedirLib.getCharPref('redirects'));
- var arr;
-
- this.list = [];
-
- for each (arr in tempList) {
- this.list.push({
- exampleUrl : arr[0],
- pattern : arr[1],
- redirectUrl : arr[2],
- onlyIfLinkExists : arr[3],
- patternType : arr[4],
- excludePattern : arr[5] || ''
- });
- }
-
- },
-
- addRedirect : function(redirect) {
- this.list.push(redirect);
- this.save();
- },
-
- deleteAt : function(index) {
- this.list.splice(index, 1);
- this.save();
- },
-
- getRedirectUrlForInstantRedirect : function(url) {
- var redirect, link, links, redirectUrl;
-
- if (this.enabled) {
-
- for each (redirect in this.list) {
-
- redirectUrl = this.getRedirectUrl(url, redirect);
- //Can't do fast redirect if it requires that link exists
- //we need the original page to verify that it exists.
- //Slow redirect will be done automatically.
- if (redirectUrl) {
- if (redirect.redirectUrl.startsWith('xpath:')) {
- RedirLib.msgBox(this.strings.getString('extensionName'), this.strings.getString('xpathDeprecated'));
- } else if (!redirect.onlyIfLinkExists) {
- RedirLib.debug('%1 matches %2, and it\'s not only if link exists. Can do instant redirect.'._(redirect.pattern, url));
- return { 'url' : redirectUrl, 'pattern' : redirect.pattern};
- } else {
- RedirLib.debug('%1 matches %2, but it\'s "only if link exists" and so has to be a slow redirect'._(redirect.pattern, url));
- }
- }
- }
- }
- return { 'url' : null, 'pattern' : null};
- },
-
- getRedirectUrl: function(url, redirect) {
-
- if (redirect.patternType == kRedirectorWildcard) {
- if (this.wildcardMatch(redirect.excludePattern, url, 'whatever')) {
- RedirLib.debug('%1 matches exclude pattern %2'._(url, redirect.excludePattern));
- return null;
- }
- return this.wildcardMatch(redirect.pattern, url, redirect.redirectUrl);
- } else if (redirect.patternType == kRedirectorRegex) {
- if (this.regexMatch(redirect.excludePattern, url, 'whatever')) {
- RedirLib.debug('%1 matches exclude pattern %2'._(url, redirect.excludePattern));
- return null;
- }
- return this.regexMatch(redirect.pattern, url, redirect.redirectUrl);
- }
- return null;
- },
-
- processUrl : function(url, doc) {
- var redirect, link, links, redirectUrl;
-
- if (!this.enabled) {
- return;
- }
-
- for each (redirect in this.list) {
-
- redirectUrl = this.getRedirectUrl(url, redirect);
-
- if (redirectUrl) {
- 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() == redirectUrl) {
- RedirLib.debug('Found a link for %1'._(redirectUrl));
- this.goto(redirectUrl, redirect.pattern, url, doc);
- return;
- }
- }
-
- RedirLib.debug('Did not find a link for %1'._(redirectUrl));
-
- } else {
- this.goto(redirectUrl, redirect.pattern, url, doc);
- }
- }
- }
- },
-
- makeAbsoluteUrl : function(currentUrl, relativeUrl) {
-
- if (relativeUrl.startsWith('http://') || relativeUrl.startsWith('https://')) {
- return relativeUrl;
- }
-
- var ioService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
- RedirLib.debug(currentUrl);
- var uri = ioService.newURI(currentUrl, null, null);
-
- return uri.resolve(relativeUrl);
- },
-
- goto : function(redirectUrl, pattern, url, doc) {
-
- redirectUrl = this.makeAbsoluteUrl(url, redirectUrl);
-
- if (redirectUrl.startsWith('xpath:')) {
- //Do nothing, the instant redirect will have popped up a message
- } else if (redirectUrl == url) {
- RedirLib.msgBox(this.strings.getString('extensionName'), this.strings.getFormattedString('recursiveError', [pattern, redirectUrl]));
- } else {
- doc.location.href = redirectUrl;
- }
- },
-
- regexMatch : function(pattern, text, redirectUrl) {
-
- if (!pattern) {
- return null;
- }
- var strings, rx, match;
- try {
- rx = new RegExp(pattern, 'gi');
- match = rx.exec(text);
- } catch(e) {
- //HACK, need to make this better
- if (window.RedirectorOverlay) {
- strings = window.RedirectorOverlay.strings;
- } else if(window.Redirect) {
- strings = window.Redirect.strings;
- }
- RedirLib.msgBox(strings.getString('extensionName'), strings.getFormattedString('regexPatternError', [pattern, e.toString()]));
- return null;
- }
-
- var rxrepl;
-
- if (match) {
- for (var i = 1; i < match.length; i++) {
- rxrepl = new RegExp('\\$' + i, 'gi');
- redirectUrl = redirectUrl.replace(rxrepl, match[i]);
- }
- return redirectUrl;
- }
-
- return null;
-
- },
-
- wildcardMatch : function(pattern, text, redirectUrl) {
- var parts
- , part
- , i
- , pos
- , originalText
- , stars;
-
- if (!pattern) {
- return null;
- }
- parts = pattern.split('*');
-
- stars = [];
- originalText = text;
- var starStart = -1;
-
- for (i in parts) {
-
- part = parts[i];
-
- pos = text.lastIndexOf(part);
-
- if (pos == -1) {
- return null;
- }
-
- if (i == 0 && pos != 0) {
- return null;
- }
-
- if (i == parts.length -1 && i != "" && text.substr(text.length - part.length) != part) {
- return null;
-
- }
-
- if (i == 0) {
- //Do nothing, part will be added on next run
- } else if (i == parts.length-1 && parts[i] == '') {
- stars.push(text);
- } else {
- stars.push(text.substr(0, pos));
- }
-
- text = text.substr(pos + part.length);
- }
-
- for (var i = 1; i <= stars.length; i++) {
- redirectUrl = redirectUrl.replace(new RegExp('\\$' + i, 'gi'), stars[i-1]);
- }
-
- return redirectUrl;
- },
-
- openHelp : function() {
- var windowName = "redirectorHelp";
- var windowsMediator = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
- var win;
- var iter = windowsMediator.getEnumerator(null);
- while (iter.hasMoreElements()) {
- win = iter.getNext();
- if (win.name == windowName) {
- win.focus();
- return;
- }
- }
- window.openDialog("chrome://redirector/content/help.html", windowName, "chrome,dialog,resizable=yes,location=0,toolbar=0,status=0,width=800px,height=600px,centerscreen", this);
- },
-
-
- openSettings : function() {
- var windowName = "redirectorSettings";
- var windowsMediator = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
- var win = windowsMediator.getMostRecentWindow(windowName);
- if (win) {
- win.focus();
- } else {
- window.openDialog("chrome://redirector/content/redirectList.xul",
- windowName,
- "chrome,dialog,resizable=no,centerscreen", this);
- }
-
- },
-
- 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') {
- return;
- }
-
- if (!window.Redirector) {
- return;
- }
-
- if (data == 'extensions.redirector.redirects') {
- Redirector.load();
- } else if (data == 'extensions.redirector.enabled') {
- Redirector.enabled = RedirLib.getBoolPref('enabled');
- }
- }
-
- }
-};
-