X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=common%2Fcontent%2Fbrowser.js;fp=common%2Fcontent%2Fbrowser.js;h=5a6ba5ef15a599c84f4a2e44acbfa9fa81e3271e;hb=70740024f9c028c1fd63e1a1850ab062ff956054;hp=746b46ec01352d65b0524660bc190d2d73b6da6d;hpb=718c614c183350706466e22939d0101ca4c87efe;p=dactyl.git diff --git a/common/content/browser.js b/common/content/browser.js index 746b46e..5a6ba5e 100644 --- a/common/content/browser.js +++ b/common/content/browser.js @@ -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", function () { dactyl.open("~"); }); - mappings.add([modes.NORMAL], ["gh"], + mappings.add([modes.NORMAL], ["", "gh"], "Open homepage", function () { BrowserHome(); }); - mappings.add([modes.NORMAL], ["gH"], + mappings.add([modes.NORMAL], ["", "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], [""], + mappings.add([modes.MAIN], ["", ""], "Redraw the screen", function () { ex.redraw(); }); }