]> git.donarmstrong.com Git - dactyl.git/blobdiff - common/content/browser.js
Import 1.0b7.1 supporting Firefox up to 8.*
[dactyl.git] / common / content / browser.js
index 746b46ec01352d65b0524660bc190d2d73b6da6d..5a6ba5ef15a599c84f4a2e44acbfa9fa81e3271e 100644 (file)
@@ -28,8 +28,11 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
         "content-document-global-created": function (win, uri) {
             let top = util.topWindow(win);
 
-            if (top == window)
-                this._triggerLoadAutocmd("PageLoadPre", win.document, win.location.href != "null" ? window.location.href : uri);
+            if (uri == "null")
+                uri = null;
+
+            if (top == window && (win.location.href || uri))
+                this._triggerLoadAutocmd("PageLoadPre", win.document, win.location.href || uri);
         }
     },
 
@@ -43,12 +46,18 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
             title: doc.title
         };
 
-        if (dactyl.has("tabs")) {
+        if (!dactyl.has("tabs"))
+            update(args, { doc: doc, win: doc.defaultView });
+        else {
             args.tab = tabs.getContentIndex(doc) + 1;
             args.doc = {
                 valueOf: function () doc,
                 toString: function () "tabs.getTab(" + (args.tab - 1) + ").linkedBrowser.contentDocument"
             };
+            args.win = {
+                valueOf: function () doc.defaultView,
+                toString: function () "tabs.getTab(" + (args.tab - 1) + ").linkedBrowser.contentWindow"
+            };
         }
 
         autocommands.trigger(name, args);
@@ -95,26 +104,29 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
     progressListener: {
         // XXX: function may later be needed to detect a canceled synchronous openURL()
         onStateChange: util.wrapCallback(function onStateChange(webProgress, request, flags, status) {
-            onStateChange.superapply(this, arguments);
-            // STATE_IS_DOCUMENT | STATE_IS_WINDOW is important, because we also
-            // receive statechange events for loading images and other parts of the web page
-            if (flags & (Ci.nsIWebProgressListener.STATE_IS_DOCUMENT | Ci.nsIWebProgressListener.STATE_IS_WINDOW)) {
+            const L = Ci.nsIWebProgressListener;
+
+            if (request)
                 dactyl.applyTriggerObserver("browser.stateChange", arguments);
+
+            if (flags & (L.STATE_IS_DOCUMENT | L.STATE_IS_WINDOW)) {
                 // This fires when the load event is initiated
                 // only thrown for the current tab, not when another tab changes
-                if (flags & Ci.nsIWebProgressListener.STATE_START) {
+                if (flags & L.STATE_START) {
                     while (document.commandDispatcher.focusedWindow == webProgress.DOMWindow
                            && modes.have(modes.INPUT))
                         modes.pop();
 
                 }
-                else if (flags & Ci.nsIWebProgressListener.STATE_STOP) {
+                else if (flags & L.STATE_STOP) {
                     // Workaround for bugs 591425 and 606877, dactyl bug #81
                     config.browser.mCurrentBrowser.collapsed = false;
                     if (!dactyl.focusedElement || dactyl.focusedElement === document.documentElement)
                         dactyl.focusContent();
                 }
             }
+
+            onStateChange.superapply(this, arguments);
         }),
         onSecurityChange: util.wrapCallback(function onSecurityChange(webProgress, request, state) {
             onSecurityChange.superapply(this, arguments);
@@ -200,9 +212,13 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
             ["o"], "Open one or more URLs",
             function () { CommandExMode().open("open "); });
 
+        function decode(uri) util.losslessDecodeURI(uri)
+                                 .replace(/%20(?!(?:%20)*$)/g, " ")
+                                 .replace(RegExp(options["urlseparator"], "g"), encodeURIComponent);
+
         mappings.add([modes.NORMAL], ["O"],
             "Open one or more URLs, based on current location",
-            function () { CommandExMode().open("open " + buffer.uri.spec); });
+            function () { CommandExMode().open("open " + decode(buffer.uri.spec)); });
 
         mappings.add([modes.NORMAL], ["t"],
             "Open one or more URLs in a new tab",
@@ -210,7 +226,7 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
 
         mappings.add([modes.NORMAL], ["T"],
             "Open one or more URLs in a new tab, based on current location",
-            function () { CommandExMode().open("tabopen " + buffer.uri.spec); });
+            function () { CommandExMode().open("tabopen " + decode(buffer.uri.spec)); });
 
         mappings.add([modes.NORMAL], ["w"],
             "Open one or more URLs in a new window",
@@ -218,24 +234,24 @@ var Browser = Module("browser", XPCOM(Ci.nsISupportsWeakReference, ModuleBase),
 
         mappings.add([modes.NORMAL], ["W"],
             "Open one or more URLs in a new window, based on current location",
-            function () { CommandExMode().open("winopen " + buffer.uri.spec); });
+            function () { CommandExMode().open("winopen " + decode(buffer.uri.spec)); });
 
-        mappings.add([modes.NORMAL], ["~"],
+        mappings.add([modes.NORMAL], ["<open-home-directory>", "~"],
             "Open home directory",
             function () { dactyl.open("~"); });
 
-        mappings.add([modes.NORMAL], ["gh"],
+        mappings.add([modes.NORMAL], ["<open-homepage>", "gh"],
             "Open homepage",
             function () { BrowserHome(); });
 
-        mappings.add([modes.NORMAL], ["gH"],
+        mappings.add([modes.NORMAL], ["<tab-open-homepage>", "gH"],
             "Open homepage in a new tab",
             function () {
                 let homepages = gHomeButton.getHomePage();
                 dactyl.open(homepages, { from: "homepage", where: dactyl.NEW_TAB });
             });
 
-        mappings.add([modes.MAIN], ["<C-l>"],
+        mappings.add([modes.MAIN], ["<redraw-screen>", "<C-l>"],
             "Redraw the screen",
             function () { ex.redraw(); });
     }