1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-20 10:17:59 +01:00

Better :yank formatting.

This commit is contained in:
Kris Maglione
2010-10-14 22:06:17 -04:00
parent 7853331e7c
commit bea1c20858
6 changed files with 29 additions and 8 deletions

View File

@@ -19,6 +19,7 @@ const Services = Module("Services", {
this.services = {};
this.add("annotation", "@mozilla.org/browser/annotation-service;1", Ci.nsIAnnotationService);
this.add("appShell", "@mozilla.org/appshell/appShellService;1", Ci.nsIAppShellService);
this.add("appStartup", "@mozilla.org/toolkit/app-startup;1", Ci.nsIAppStartup);
this.add("autoCompleteSearch", "@mozilla.org/autocomplete/search;1?name=history", Ci.nsIAutoCompleteSearch);
this.add("bookmarks", "@mozilla.org/browser/nav-bookmarks-service;1", Ci.nsINavBookmarksService);
@@ -54,6 +55,9 @@ const Services = Module("Services", {
this.add("windowMediator", "@mozilla.org/appshell/window-mediator;1", Ci.nsIWindowMediator);
this.add("windowWatcher", "@mozilla.org/embedcomp/window-watcher;1", Ci.nsIWindowWatcher);
this.addClass("docshell", "@mozilla.org/docshell;1", [Ci.nsIBaseWindow, Ci.nsIWebNavigation,
Ci.nsIWebPageDescriptor, Ci.nsIWebProgress]);
this.addClass("file", "@mozilla.org/file/local;1", Ci.nsILocalFile);
this.addClass("file:", "@mozilla.org/network/protocol;1?name=file", Ci.nsIFileProtocolHandler);
this.addClass("find", "@mozilla.org/embedcomp/rangefind;1", Ci.nsIFind);

View File

@@ -43,6 +43,10 @@ const Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
this.addObserver(this);
this.overlays = {};
let doc = services.get("appShell").hiddenDOMWindow.document;
this._div = this.xmlToDom(<div xmlns={XHTML}/>, doc);
doc.body.appendChild(this._div);
},
// FIXME: Only works for Pentadactyl
@@ -262,6 +266,17 @@ const Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
dequote: function dequote(pattern, chars)
pattern.replace(/\\(.)/, function (m0, m1) chars.indexOf(m1) >= 0 ? m1 : m0),
domToString: function (node) {
this._div.appendChild(this._div.ownerDocument.importNode(node, true));
let sel = this._div.ownerDocument.defaultView.getSelection();
sel.removeAllRanges();
sel.selectAllChildren(this._div);
let res = sel.toString();
while (this._div.firstChild)
this._div.removeChild(this._div.firstChild);
return res;
},
/**
* Prints a message to the console. If <b>msg</b> is an object it is
* pretty printed.