mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-02-07 07:55:45 +01:00
Completion of certain chrome:, resource:, and about: URLs.
This commit is contained in:
@@ -27,6 +27,9 @@ Range.prototype.contains = function (date)
|
||||
date == null || (this.min == null || date >= this.min) && (this.max == null || date <= this.max);
|
||||
Range.prototype.__defineGetter__("isEternity", function () this.max == null && this.min == null);
|
||||
Range.prototype.__defineGetter__("isSession", function () this.max == null && this.min == sanitizer.sessionStart);
|
||||
Range.prototype.__defineGetter__("native", function ()
|
||||
this.isEternity ? null : [range.min || 0, range.max == null ? Number.MAX_VALUE : range.max]);
|
||||
|
||||
|
||||
const Item = Class("Item", {
|
||||
init: function (name) {
|
||||
@@ -266,7 +269,7 @@ const Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakR
|
||||
try {
|
||||
let item = this.items[Sanitizer.argToPref(itemName)];
|
||||
if (item && !this.itemMap[itemName].override) {
|
||||
item.range = range;
|
||||
item.range = range.native;
|
||||
if ("clear" in item && item.canClear)
|
||||
item.clear();
|
||||
}
|
||||
@@ -369,12 +372,16 @@ const Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakR
|
||||
|
||||
let timespan = args["-timespan"] || modules.options["sanitizetimespan"];
|
||||
|
||||
let range = Range(), match = /^(\d+)([mhdw])$/.exec(timespan);
|
||||
let range = Range();
|
||||
let [match, num, unit] = /^(\d+)([mhdw])$/.exec(timespan) || [];
|
||||
range[args["-older"] ? "max" : "min"] =
|
||||
match ? 1000 * (Date.now() - 1000 * parseInt(match[1], 10) * { m: 60, h: 3600, d: 3600 * 24, w: 3600 * 24 * 7 }[match[2]])
|
||||
match ? 1000 * (Date.now() - 1000 * parseInt(num, 10) * { m: 60, h: 3600, d: 3600 * 24, w: 3600 * 24 * 7 }[unit])
|
||||
: (timespan[0] == "s" ? sanitizer.sessionStart : null);
|
||||
|
||||
let items = args.slice();
|
||||
if (args["-host"] && !args.length)
|
||||
args[0] = "all";
|
||||
|
||||
if (args.bang) {
|
||||
dactyl.assert(args.length == 0, "E488: Trailing characters");
|
||||
items = Object.keys(sanitizer.itemMap).filter(
|
||||
@@ -386,7 +393,7 @@ const Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakR
|
||||
if (items.indexOf("all") >= 0)
|
||||
items = Object.keys(sanitizer.itemMap).filter(function (k) items.indexOf(k) === -1);
|
||||
|
||||
sanitizer.range = range;
|
||||
sanitizer.range = range.native;
|
||||
sanitizer.ignoreTimespan = range.min == null;
|
||||
sanitizer.sanitizing = true;
|
||||
if (args["-host"]) {
|
||||
@@ -412,11 +419,9 @@ const Sanitizer = Module("sanitizer", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakR
|
||||
{
|
||||
names: ["-host", "-h"],
|
||||
description: "Only sanitize items referring to listed host or hosts",
|
||||
completer: function (context) {
|
||||
let hosts = context.filter.split(",");
|
||||
context.advance(context.filter.length - hosts.pop().length);
|
||||
completer: function (context, args) {
|
||||
context.filters.push(function (item)
|
||||
!hosts.some(function (host) util.isSubdomain(item.text, host)));
|
||||
!args["-host"].some(function (host) util.isSubdomain(item.text, host)));
|
||||
modules.completion.domain(context);
|
||||
},
|
||||
type: modules.CommandOption.LIST,
|
||||
|
||||
@@ -58,6 +58,7 @@ const Services = Module("Services", {
|
||||
this.add("versionCompare", "@mozilla.org/xpcom/version-comparator;1", Ci.nsIVersionComparator);
|
||||
this.add("windowMediator", "@mozilla.org/appshell/window-mediator;1", Ci.nsIWindowMediator);
|
||||
this.add("windowWatcher", "@mozilla.org/embedcomp/window-watcher;1", Ci.nsIWindowWatcher);
|
||||
this.add("zipReader", "@mozilla.org/libjar/zip-reader-cache;1", Ci.nsIZipReaderCache);
|
||||
|
||||
this.addClass("File", "@mozilla.org/file/local;1", Ci.nsILocalFile);
|
||||
this.addClass("file:", "@mozilla.org/network/protocol;1?name=file", Ci.nsIFileProtocolHandler);
|
||||
@@ -68,15 +69,18 @@ const Services = Module("Services", {
|
||||
this.addClass("String", "@mozilla.org/supports-string;1", Ci.nsISupportsString);
|
||||
this.addClass("Timer", "@mozilla.org/timer;1", Ci.nsITimer);
|
||||
this.addClass("Xmlhttp", "@mozilla.org/xmlextras/xmlhttprequest;1", Ci.nsIXMLHttpRequest);
|
||||
this.addClass("ZipReader", "@mozilla.org/libjar/zip-reader;1", Ci.nsIZipReader, "open");
|
||||
this.addClass("ZipWriter", "@mozilla.org/zipwriter;1", Ci.nsIZipWriter);
|
||||
},
|
||||
|
||||
_create: function (classes, ifaces, meth) {
|
||||
_create: function (classes, ifaces, meth, init, args) {
|
||||
try {
|
||||
let res = Cc[classes][meth || "getService"]();
|
||||
if (!ifaces)
|
||||
return res.wrappedJSObject;
|
||||
Array.concat(ifaces).forEach(function (iface) res.QueryInterface(iface));
|
||||
if (init)
|
||||
res[init].apply(res, args);
|
||||
return res;
|
||||
}
|
||||
catch (e) {
|
||||
@@ -113,9 +117,9 @@ const Services = Module("Services", {
|
||||
* @param {nsISupports|nsISupports[]} ifaces The interface or array of
|
||||
* interfaces implemented by this class.
|
||||
*/
|
||||
addClass: function (name, class_, ifaces) {
|
||||
addClass: function (name, class_, ifaces, init) {
|
||||
const self = this;
|
||||
return this[name] = function () self._create(class_, ifaces, "createInstance");
|
||||
return this[name] = function () self._create(class_, ifaces, "createInstance", init, arguments);
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -471,7 +471,12 @@ const Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
|
||||
*/
|
||||
getFile: function getFile(uri) {
|
||||
if (isString(uri))
|
||||
uri = util.newURI(uri);
|
||||
try {
|
||||
uri = util.newURI(uri);
|
||||
}
|
||||
catch (e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (uri instanceof Ci.nsIFileURL)
|
||||
return File(uri.QueryInterface(Ci.nsIFileURL).file);
|
||||
|
||||
Reference in New Issue
Block a user