aboutsummaryrefslogtreecommitdiff
path: root/chrome/js/redirector-ui.js
diff options
context:
space:
mode:
authorEinar Egilsson2011-09-04 22:53:16 +0200
committerEinar Egilsson2011-09-04 22:53:16 +0200
commit4b612baf4f29178214edec130856d83a40bf473d (patch)
tree20e36e3fcf7a24e829640c2fd605622f14af0edc /chrome/js/redirector-ui.js
parent8fb65cf8aeaaf66636698310c0168929fc1a2ce0 (diff)
Total restructuring of files and deletion of old files
Diffstat (limited to 'chrome/js/redirector-ui.js')
-rw-r--r--chrome/js/redirector-ui.js207
1 files changed, 207 insertions, 0 deletions
diff --git a/chrome/js/redirector-ui.js b/chrome/js/redirector-ui.js
new file mode 100644
index 0000000..e0a5d07
--- /dev/null
+++ b/chrome/js/redirector-ui.js
@@ -0,0 +1,207 @@
+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");
+
+$(document).ready(function() {
+ var prefs = new RedirectorPrefs();
+ var strings = StringBundleService.createBundle('chrome://redirector/locale/redirector.properties', LocaleService.getApplicationLocale());
+ function tr(name) {
+ return strings.GetStringFromName(name);
+ }
+
+ 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";
+ var dir = prefs.defaultDir;
+ if (dir) {
+ picker.displayDirectory = new LocalFile(dir);
+ }
+ picker.appendFilter(tr('redirectorFiles'), '*.rjson');
+
+ if (picker.show() == picker.returnCancel) {
+ return null;
+ }
+ 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');
+ PromptService.alert(null, title, msg);
+
+ if (imported > 0) {
+ var newlist = [];
+ for (var i = Redirector.redirectCount-imported; i < Redirector.redirectCount; i++) {
+ newlist.push(Redirector.getRedirectAt(i));
+ }
+ }
+ }
+
+ var template = $('#redirect-list').html().replace(/^\s*|\s$/g, '');
+ function databind() {
+ $('#redirect-list').empty();
+ for (var i = 0; i < Redirector.redirectCount; i++) {
+ var redirect = Redirector.getRedirectAt(i);
+ var node = $(template);
+ 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);
+ node.appendTo('#redirect-list');
+ node.data('redirect', redirect);
+ }
+
+ }
+
+ $('#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');
+ $('#redirect-form').show();
+ ev.preventDefault();
+ });
+
+ databind();
+ $('#import').click(importRedirects);
+ $('#export').click(exportRedirects);
+
+ function bindConfig() {
+ $('#config input[type="checkbox"]').each(function() {
+ var pref = $(this).attr('data-pref');
+ $(this).attr('checked', prefs[pref]);
+ });
+ }
+
+ 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');
+ });
+});
+
+/*
+ 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);}
+ }
+
+ 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;
+ }
+ }
+ }
+
+
+*/ \ No newline at end of file