diff --git a/common/content/buffer.js b/common/content/buffer.js index deab343d..eb4c7d99 100644 --- a/common/content/buffer.js +++ b/common/content/buffer.js @@ -933,22 +933,16 @@ const Buffer = Module("buffer", { * range. */ viewSelectionSource: function () { - // copied (and tuned somebit) from browser.jar -> nsContextMenu.js - let focusedWindow = document.commandDispatcher.focusedWindow; - if (focusedWindow == window) - focusedWindow = buffer.focusedFrame; + // copied (and tuned somewhat) from browser.jar -> nsContextMenu.js + let win = document.commandDispatcher.focusedWindow; + if (win == window) + win = buffer.focusedFrame; - let docCharset = null; - if (focusedWindow) - docCharset = "charset=" + focusedWindow.document.characterSet; + let charset = win ? "charset=" + win.document.characterSet : null; - let reference = null; - reference = focusedWindow.getSelection(); - - let docUrl = null; window.openDialog("chrome://global/content/viewPartialSource.xul", - "_blank", "scrollbars,resizable,chrome,dialog=no", - docUrl, docCharset, reference, "selection"); + "_blank", "scrollbars,resizable,chrome,dialog=no", + null, charset, win.getSelection(), "selection"); }, /** @@ -966,11 +960,10 @@ const Buffer = Module("buffer", { if (isArray(url)) { if (options.get("editor").has("l")) this.viewSourceExternally(url[0] || doc, url[1]); - else { - let chrome = "chrome://global/content/viewSource.xul"; - window.openDialog(chrome, "_blank", "all,dialog=no", + else + window.openDialog("chrome://global/content/viewSource.xul", + "_blank", "all,dialog=no", url[0], null, null, url[1]); - } } else { if (useExternalEditor) @@ -1000,12 +993,6 @@ const Buffer = Module("buffer", { * * @param {Document} doc The document to view. */ - /* - * Derived from code in Mozilla, ©2005 Jason Barnabe, - * Tri-licensed under MPL 1.1/GPL 2.0/LGPL 2.1 - * Portions copyright Kris Maglione licensable under the - * MIT license. - */ viewSourceExternally: Class("viewSourceExternally", XPCOM([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]), { init: function (doc, callback) { @@ -1024,8 +1011,9 @@ const Buffer = Module("buffer", { this.callback(temp); }, this); - if (uri.scheme == "file") - this.callback(File(uri.QueryInterface(Ci.nsIFileURL).file)); + let file = util.getFile(uri); + if (file) + this.callback(file); else { this.file = io.createTempFile(); var webBrowserPersist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] diff --git a/common/modules/template.jsm b/common/modules/template.jsm index 84d7a0dc..e0f771fe 100644 --- a/common/modules/template.jsm +++ b/common/modules/template.jsm @@ -296,15 +296,18 @@ const Template = Module("Template", { { let (name = item.name || item.names[0], frame = item.definedAt) - frame ? <>{name}  - - Defined at { - frame.filename + ":" + frame.lineNumber} - - - : name + !frame ? name : /* Help... --Kris */ + let (url = frame.filename.replace(/.* -> /, "")) + <>{name}  + + Defined at { + (util.getFile(util.newURI(url)) || { path: url }).path + + ":" + frame.lineNumber + } + + } {item.description} ) diff --git a/common/modules/util.jsm b/common/modules/util.jsm index 3cb53e71..de12f307 100644 --- a/common/modules/util.jsm +++ b/common/modules/util.jsm @@ -12,7 +12,7 @@ Components.utils.import("resource://dactyl/base.jsm"); defineModule("util", { exports: ["FailedAssertion", "Math", "NS", "Util", "XHTML", "XUL", "util"], require: ["services"], - use: ["highlight", "template"] + use: ["highlight", "storage", "template"] }); const XHTML = Namespace("html", "http://www.w3.org/1999/xhtml"); @@ -464,6 +464,21 @@ const Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]) return strNum[0] + " " + unitVal[unitIndex]; }, + /** + * Returns the file which backs a given URL, if available. + * + * @param {nsIURI} uri The URI for which to find a file. + */ + getFile: function getFile(uri) { + if (uri instanceof Ci.nsIFileURL) + return File(uri.QueryInterface(Ci.nsIFileURL).file); + let channel = services.io.newChannelFromURI(uri); + channel.cancel(Cr.NS_BINDING_ABORTED); + if (channel instanceof Ci.nsIFileChannel) + return File(channel.QueryInterface(Ci.nsIFileChannel).file); + return null; + }, + /** * Returns the host for the given URL, or null if invalid. * @@ -626,7 +641,7 @@ const Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]) * @returns {nsIURI} */ // FIXME: createURI needed too? - newURI: function (uri, charset, base) services.io.newURI(uri, charset, base), + newURI: function (uri, charset, base) services.io.newURI(uri.replace(/.* -> /, ""), charset, base), /** * Pretty print a JavaScript object. Use HTML markup to color certain items