diff options
Diffstat (limited to 'chrome/code/editRedirect.xul.js')
-rw-r--r-- | chrome/code/editRedirect.xul.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/chrome/code/editRedirect.xul.js b/chrome/code/editRedirect.xul.js new file mode 100644 index 0000000..0c8f34b --- /dev/null +++ b/chrome/code/editRedirect.xul.js @@ -0,0 +1,103 @@ +//// $Id$ + +var EditRedirect = { + txtExampleUrl : null, + txtIncludePattern : null, + txtRedirectUrl : null, + txtExcludePattern : null, + chkUnescapeMatches : null, + rdoRegex : null, + rdoWildcard : null, + + onLoad : function() { + var args = window.arguments[0]; + var redirect = args.redirect; + this.txtExampleUrl = document.getElementById('txtExampleUrl'); + this.txtIncludePattern = document.getElementById('txtIncludePattern'); + this.txtRedirectUrl= document.getElementById('txtRedirectUrl'); + this.txtExcludePattern= document.getElementById('txtExcludePattern'); + this.chkUnescapeMatches= document.getElementById('chkUnescapeMatches'); + this.rdoWildcard= document.getElementById('rdoWildcard'); + this.rdoRegex = document.getElementById('rdoRegex'); + + this.txtExampleUrl.value = redirect.exampleUrl; + this.txtIncludePattern.value = redirect.includePattern; + this.txtExcludePattern.value = redirect.excludePattern; + this.txtRedirectUrl.value = redirect.redirectUrl; + this.chkUnescapeMatches.setAttribute('checked', redirect.unescapeMatches); + this.rdoRegex.setAttribute('selected', redirect.isRegex()); + this.rdoWildcard.setAttribute('selected', redirect.isWildcard()); + + this.txtIncludePattern.focus(); + this.strings = document.getElementById("redirector-strings"); + }, + + onAccept : function() { + var args = window.arguments[0]; + var msg, title; + args.saved = true; + this.saveValues(args.redirect); + + var oldDisabled = args.redirect.disabled; + args.redirect.disabled = false; + if (!/^\s*$/.test(args.redirect.exampleUrl)) { + var result = args.redirect.getMatch(args.redirect.exampleUrl); + if (!result.isMatch) { + title = this.strings.getString('warningExampleUrlDoesntMatchPatternTitle'); + msg = this.strings.getString('warningExampleUrlDoesntMatchPattern'); + var ps = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); + var rv = ps.confirmEx(window, title, msg, ps.STD_YES_NO_BUTTONS, ps.BUTTON_TITLE_YES, ps.BUTTON_TITLE_NO, null, null, {}); + return rv == 0; + } else { + var resultUrl = result.redirectTo; + if (!resultUrl.match(/https?:/)) { + var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); + var uri = ioService.newURI(args.redirect.exampleUrl, null, null); + resultUrl = uri.resolve(resultUrl); + } + + var secondResult = args.redirect.getMatch(resultUrl); + if (secondResult.isMatch) { + title = this.strings.getString('errorExampleUrlMatchesRecursiveTitle'); + msg = this.strings.getFormattedString('errorExampleUrlMatchesRecursive', [args.redirect.exampleUrl, resultUrl]); + this.msgBox(title, msg); + return false; + } + } + } + return true; + }, + + msgBox : function(title, text) { + Components.classes["@mozilla.org/embedcomp/prompt-service;1"] + .getService(Components.interfaces.nsIPromptService) + .alert(window, title, text); + }, + + saveValues : function(redirect) { + redirect.exampleUrl = this.txtExampleUrl.value; + redirect.includePattern = this.txtIncludePattern.value; + redirect.excludePattern = this.txtExcludePattern.value; + redirect.redirectUrl = this.txtRedirectUrl.value; + redirect.patternType = this.rdoRegex.getAttribute('selected') == 'true' ? Redirect.REGEX : Redirect.WILDCARD; + var val = this.chkUnescapeMatches.getAttribute('checked'); + redirect.unescapeMatches = val === 'true' || val === true; + //Disabled cannot be set here + }, + + testPattern : function() { + try { + var redirect = new Redirect(); + this.saveValues(redirect); + var extName = this.strings.getString('extensionName'); + var result = redirect.test(); + if (result.isMatch) { + this.msgBox(extName, this.strings.getFormattedString('testPatternSuccess', [redirect.includePattern, redirect.exampleUrl, result.redirectTo])); + } else if (result.isExcludeMatch) { + this.msgBox(extName, this.strings.getFormattedString('testPatternExclude', [redirect.exampleUrl, redirect.excludePattern])); + } else { + this.msgBox(extName, this.strings.getFormattedString('testPatternFailure', [redirect.includePattern, redirect.exampleUrl])); + } + } catch(e) {alert(e);} + } +};
\ No newline at end of file |