diff options
Diffstat (limited to 'chrome/js/redirector-ui.js')
-rw-r--r-- | chrome/js/redirector-ui.js | 354 |
1 files changed, 0 insertions, 354 deletions
diff --git a/chrome/js/redirector-ui.js b/chrome/js/redirector-ui.js deleted file mode 100644 index 3c03128..0000000 --- a/chrome/js/redirector-ui.js +++ /dev/null @@ -1,354 +0,0 @@ -Components.utils.import("chrome://redirector/content/js/redirect.js"); -Components.utils.import("chrome://redirector/content/js/redirector.js"); -Components.utils.import("chrome://redirector/content/js/redirectorprefs.js"); -Components.utils.import("chrome://redirector/content/js/xpcom.js"); - -jQuery.fn.center = function () { - this.css("position","absolute"); - this.css("top", (($(window).height() - this.outerHeight()) / 2) + $(window).scrollTop() + "px"); - this.css("left", (($(window).width() - this.outerWidth()) / 2) + $(window).scrollLeft() + "px"); - return this; -} - -function alert(title, msg) { - PromptService.alert(null, title, msg); -} - -function tr(name, args) { - if (args) { - return strings.formatStringFromName(name, args, args.length); - } else { - return strings.GetStringFromName(name); - } -} - -function validatePattern(pattern, patternType) { - if (patternType != Redirect.REGEX) { - return true; - } - try { - var rx = new RegExp(pattern) - return true; - } catch(e) { - alert(tr('regexPatternErrorTitle'), tr('regexPatternError', [pattern, e.toString()])); - return false; - } -} - -function validateRedirect(redirect) { - if (!/^\s*$/.test(redirect.exampleUrl)) { - var result = redirect.getMatch(redirect.exampleUrl); - if (!result.isMatch) { - title = tr('warningExampleUrlDoesntMatchPatternTitle'); - msg = tr('warningExampleUrlDoesntMatchPattern'); - var rv = PromptService.confirmEx(window, title, msg, PromptService.STD_YES_NO_BUTTONS, PromptService.BUTTON_TITLE_YES, PromptService.BUTTON_TITLE_NO, null, null, {}); - return rv == 0; - } else { - var resultUrl = result.redirectTo; - if (!resultUrl.match(/https?:/)) { - var uri = IOService.newURI(redirect.exampleUrl, null, null); - resultUrl = uri.resolve(resultUrl); - } - - var secondResult = redirect.getMatch(resultUrl); - if (secondResult.isMatch) { - title = tr('errorExampleUrlMatchesRecursiveTitle'); - msg = tr('errorExampleUrlMatchesRecursive', [redirect.exampleUrl, resultUrl]); - alert(title, msg); - return false; - } - } - } - return true; -} - -function validateRedirectForTest(redirect) { - if (!/^\s*$/.test(redirect.exampleUrl)) { - var result = redirect.getMatch(redirect.exampleUrl); - if (!result.isMatch) { - return true; - } else { - var resultUrl = result.redirectTo; - if (!resultUrl.match(/https?:/)) { - var uri = IOService.newURI(redirect.exampleUrl, null, null); - resultUrl = uri.resolve(resultUrl); - } - - var secondResult = redirect.getMatch(resultUrl); - if (secondResult.isMatch) { - title = tr('errorExampleUrlMatchesRecursiveTitle'); - msg = tr('errorExampleUrlMatchesRecursive', [redirect.exampleUrl, resultUrl]); - alert(title, msg); - return false; - } - } - } - return true; -} - -function trPlural(name, count) { - name += count == 1 ? 'Singular' : ''; - return strings.formatStringFromName(name, [count],1); -} - -function getFile(captionKey, mode) { - var picker = new FilePicker(window, tr(captionKey), mode); - picker.defaultExtension = ".rjson"; - picker.defaultString = "Redirector.rjson"; - var dir = prefs.defaultDir; - if (dir) { - picker.displayDirectory = new LocalFile(dir); - } - picker.appendFilter(tr('redirectorFiles'), '*.rjson'); - - if (picker.show() == picker.returnCancel) { - return null; - } - if (picker.displayDirectory) { - prefs.defaultDir = picker.displayDirectory.path; - } - return picker.file; -} - -function exportRedirects() { - var file = getFile('exportCaption', FilePickerMode.save); - if (file) { - Redirector.exportRedirects(file); - } -} - -function importRedirects() { - var file = getFile('importCaption', FilePickerMode.open); - var result; - if (!file) { - return; - } - result = Redirector.importRedirects(file); - var msg, imported, existed; - imported = result & 0xFFFF; - existed = result >> 16; - - if (imported > 0) { - msg = trPlural('importedMessage', imported); - if (existed > 0) { - msg += ', ' + trPlural('existedMessage',existed); - } else { - msg += '.'; - } - } else if (imported == 0 && existed > 0) { - msg = trPlural('allExistedMessage', existed); - } else { //Both 0 - msg = tr('importedNone'); - } - - var title = tr('importResult'); - alert(title, msg); - - if (imported > 0) { - var newlist = []; - for (var i = Redirector.redirectCount-imported; i < Redirector.redirectCount; i++) { - newlist.push(Redirector.getRedirectAt(i)); - } - databind(); - } -} - -function databind() { - $('#redirect-list').empty(); - for (var i = 0; i < Redirector.redirectCount; i++) { - var redirect = Redirector.getRedirectAt(i); - var node = $(template); - node.find('.description').html(redirect.description); - node.find('.pattern').html(redirect.includePattern); - node.find('.redirectTo').html(redirect.redirectUrl); - node.find('.exampleUrl').html(redirect.exampleUrl); - node.find('.redirectResult').html(redirect.getMatch(redirect.exampleUrl).redirectTo); - if (redirect.disabled) { node.find('.disabled').html('[Disabled] '); } - node.appendTo('#redirect-list'); - node.data('redirect', redirect); - } -} - -function bindRedirect(redirect) { - $('#description').val(redirect.description); - $('#example-url').val(redirect.exampleUrl); - $('#include-pattern').val(redirect.includePattern); - $('#exclude-pattern').val(redirect.excludePattern); - $('#redirect-to').val(redirect.redirectUrl); - $('#redirect-enabled').attr('checked', !redirect.disabled); - $('#unescape-matches').attr('checked', redirect.unescapeMatches); - $('#escape-matches').attr('checked', redirect.escapeMatches); - $('#regex-pattern').attr('checked', redirect.patternType == Redirect.REGEX); - $('#wildcard-pattern').attr('checked', redirect.patternType == Redirect.WILDCARD); -} - -function showRedirect(redirect) { - bindRedirect(redirect); - $('#redirect-form').center().css('top', '-=40px').show(); -} - -function controlsToRedirect(redirect) { - if ($('#regex-pattern').attr('checked')) { - redirect.patternType = Redirect.REGEX; - } else { - redirect.patternType = Redirect.WILDCARD; - } - - var inc = $('#include-pattern').val(); - var exc = $('#exclude-pattern').val(); - if (!validatePattern(inc, redirect.patternType)) { - return false; - } - if (!validatePattern(exc, redirect.patternType)) { - return false; - } - redirect.includePattern = inc; - redirect.excludePattern = exc; - - redirect.description = $('#description').val(); - redirect.exampleUrl = $('#example-url').val(); - redirect.redirectUrl = $('#redirect-to').val(); - redirect.disabled = !$('#redirect-enabled').attr('checked'); - redirect.unescapeMatches = $('#unescape-matches').attr('checked'); - redirect.escapeMatches = $('#escape-matches').attr('checked'); - return true; -} - -function saveRedirect() { - //First validate: - var tmpRedirect = new Redirect(); - if (!controlsToRedirect(tmpRedirect)) { - return; - } - if (!validateRedirect(tmpRedirect)) { - return; - } - var isNew = !window.editRedirect; - var redirect = isNew ? new Redirect() : window.editRedirect; - controlsToRedirect(redirect); - if (isNew) { - Redirector.addRedirect(redirect); - } - Redirector.save(); - $('#redirect-form').hide(); - databind(); -} - -function configure() { - $('#config').center().css('top', '-=40px').show(); -} -function bindConfig() { - $('#config input[type="checkbox"]').each(function() { - var pref = $(this).attr('data-pref'); - $(this).attr('checked', prefs[pref]); - }); -} - -function testPattern() { - try { - var redirect = new Redirect(); - if (!controlsToRedirect(redirect)) { - return; - } - var extName = tr('extensionName'); - if (!validateRedirectForTest(redirect)) { - return; - } - var result = redirect.test(); - if (result.isMatch) { - alert(extName, tr('testPatternSuccess', [redirect.includePattern, redirect.exampleUrl, result.redirectTo])); - } else if (result.isExcludeMatch) { - alert(extName, tr('testPatternExclude', [redirect.exampleUrl, redirect.excludePattern])); - } else { - alert(extName, tr('testPatternFailure', [redirect.includePattern, redirect.exampleUrl])); - } - } catch(e) { - alert('Error', e.toString()); - } -} - - -$(document).ready(function() { - window.template = $('#redirect-list').html().replace(/^\s*|\s$/g, ''); - window.strings = StringBundleService.createBundle('chrome://redirector/locale/redirector.properties', LocaleService.getApplicationLocale()); - window.prefs = new RedirectorPrefs(); - - $('link').attr('href',$('link').attr('href')+new Date()); - - $('#redirect-list li div a.delete').live('click', function(ev) { - var redirect = $(this.parentNode.parentNode).data('redirect'); - if (PromptService.confirm(null, tr("deleteConfirmationTitle"), tr("deleteConfirmationText"))) { - Redirector.deleteRedirect(redirect); - $(this.parentNode.parentNode).fadeOut(function() { $(this).remove(); }); - } - ev.preventDefault(); - }); - - $('#redirect-list li div a.edit').live('click', function(ev) { - var redirect = $(this.parentNode.parentNode).data('redirect'); - window.editRedirect = redirect; - showRedirect(redirect); - ev.preventDefault(); - }); - - databind(); - $('#import').click(importRedirects); - $('#export').click(exportRedirects); - $('#new-redirect').click(function() { window.editRedirect = null; showRedirect({patternType:Redirect.REGEX});}); - $('#configure').click(configure); - $('#cancel').click(function() { $('#redirect-form').hide();}); - $('#configure').click(configure); - $('#save').click(saveRedirect); - $('#test-pattern').click(testPattern); - $('#close').click(function() { - $('#config').hide(); - }); - $('#help').click(function() { - window.location.href = "chrome://redirector/content/help.html"; - }); - - bindConfig(); - prefs.addListener({ changedPrefs:bindConfig}); - - var movingElement = null; - $('li').mousedown(function(ev) { - if (ev.target && ev.target.tagName == 'A') { - return; - } - $(this).css('background', '-moz-linear-gradient(top, #aac, #99b)'); - $('#redirect-list').css('cursor', 'move'); - movingElement = this; - }); - - - $('li').mouseover(function() { - if (movingElement && this !== movingElement) { - if ($(movingElement).offset().top > $(this).offset().top) { - $(movingElement).detach().insertBefore(this); - } else { - $(movingElement).detach().insertAfter(this); - } - } - }); - - $(document).mouseup(function() { - if (movingElement) { - $(movingElement).css('background', ''); - movingElement = null; - $('#redirect-list').css('cursor', ''); - var newOrder = {}; - $('#redirect-list li').each(function(i) { - newOrder[$(this).data('redirect')] = i; - }); - - Redirector.sortRedirects(function(a,b) { - return newOrder[a] - newOrder[b]; - }); - } - }); - - $('#config input[type="checkbox"]').bind('CheckboxStateChange', function() { - var pref = $(this).attr('data-pref'); - prefs[pref] = !!$(this).attr('checked'); - }); -}); |