mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-27 00:43:32 +01:00
Make 'passkeys' a sitemap rather than a regexpmap for parity with autocmds, groups, and styles.
--HG-- extra : rebase_source : 5e3e621416934d4c085eef491dd54243308f92c8
This commit is contained in:
@@ -1501,18 +1501,18 @@ var Events = Module("events", {
|
|||||||
options: function () {
|
options: function () {
|
||||||
options.add(["passkeys", "pk"],
|
options.add(["passkeys", "pk"],
|
||||||
"Pass certain keys through directly for the given URLs",
|
"Pass certain keys through directly for the given URLs",
|
||||||
"regexpmap", "", {
|
"sitemap", "", {
|
||||||
has: function (key) {
|
has: function (key) {
|
||||||
let url = buffer.documentURI.spec;
|
let uri = buffer.documentURI;
|
||||||
for (let re in values(this.value))
|
for (let filter in values(this.value))
|
||||||
if (re.test(url) && re.result.some(function (k) k === key))
|
if (filter(uri) && filter.result.some(function (k) k === key))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
setter: function (values) {
|
setter: function (values) {
|
||||||
values.forEach(function (re) {
|
values.forEach(function (filter) {
|
||||||
re.result = events.fromString(re.result).map(events.closure.toString);
|
filter.result = events.fromString(filter.result).map(events.closure.toString);
|
||||||
re.result.toString = function toString() this.join("");
|
filter.result.toString = function toString() this.join("");
|
||||||
});
|
});
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1117,7 +1117,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<tags>'pk' 'passkeys'</tags>
|
<tags>'pk' 'passkeys'</tags>
|
||||||
<spec>'passkeys' 'pk'</spec>
|
<spec>'passkeys' 'pk'</spec>
|
||||||
<type>regexpmap</type>
|
<type>sitemap</type>
|
||||||
<default/>
|
<default/>
|
||||||
<description>
|
<description>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ try {
|
|||||||
catch (e) {}
|
catch (e) {}
|
||||||
|
|
||||||
let objproto = Object.prototype;
|
let objproto = Object.prototype;
|
||||||
let hasOwnProperty = objproto.hasOwnProperty;
|
let { __lookupGetter__, __lookupSetter__, hasOwnProperty, propertyIsEnumerable } = objproto;
|
||||||
|
|
||||||
if (typeof XPCSafeJSObjectWrapper === "undefined")
|
if (typeof XPCSafeJSObjectWrapper === "undefined")
|
||||||
this.XPCSafeJSObjectWrapper = XPCNativeWrapper;
|
this.XPCSafeJSObjectWrapper = XPCNativeWrapper;
|
||||||
@@ -39,8 +39,8 @@ if (!Object.defineProperty)
|
|||||||
Object.defineProperty = function defineProperty(obj, prop, desc) {
|
Object.defineProperty = function defineProperty(obj, prop, desc) {
|
||||||
let value = desc.value;
|
let value = desc.value;
|
||||||
if ("value" in desc)
|
if ("value" in desc)
|
||||||
if (desc.writable && !objproto.__lookupGetter__.call(obj, prop)
|
if (desc.writable && !__lookupGetter__.call(obj, prop)
|
||||||
&& !objproto.__lookupSetter__.call(obj, prop))
|
&& !__lookupSetter__.call(obj, prop))
|
||||||
try {
|
try {
|
||||||
obj[prop] = value;
|
obj[prop] = value;
|
||||||
}
|
}
|
||||||
@@ -69,10 +69,10 @@ if (!Object.getOwnPropertyDescriptor)
|
|||||||
return undefined;
|
return undefined;
|
||||||
let desc = {
|
let desc = {
|
||||||
configurable: true,
|
configurable: true,
|
||||||
enumerable: objproto.propertyIsEnumerable.call(obj, prop)
|
enumerable: propertyIsEnumerable.call(obj, prop)
|
||||||
};
|
};
|
||||||
var get = obj.__lookupGetter__(prop),
|
var get = __lookupGetter__.call(obj, prop),
|
||||||
set = obj.__lookupSetter__(prop);
|
set = __lookupSetter__.call(obj, prop);
|
||||||
if (!get && !set) {
|
if (!get && !set) {
|
||||||
desc.value = obj[prop];
|
desc.value = obj[prop];
|
||||||
desc.writable = true;
|
desc.writable = true;
|
||||||
@@ -101,7 +101,7 @@ if (!Object.getPrototypeOf)
|
|||||||
Object.getPrototypeOf = function getPrototypeOf(obj) obj.__proto__;
|
Object.getPrototypeOf = function getPrototypeOf(obj) obj.__proto__;
|
||||||
if (!Object.keys)
|
if (!Object.keys)
|
||||||
Object.keys = function keys(obj)
|
Object.keys = function keys(obj)
|
||||||
Object.getOwnPropertyNames(obj).filter(function (k) objproto.propertyIsEnumerable.call(obj, k));
|
Object.getOwnPropertyNames(obj).filter(function (k) propertyIsEnumerable.call(obj, k));
|
||||||
|
|
||||||
let getGlobalForObject = Cu.getGlobalForObject || function (obj) obj.__parent__;
|
let getGlobalForObject = Cu.getGlobalForObject || function (obj) obj.__parent__;
|
||||||
|
|
||||||
@@ -376,7 +376,7 @@ set.add = function (set, key) {
|
|||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
set.has = function (set, key) hasOwnProperty.call(set, key) &&
|
set.has = function (set, key) hasOwnProperty.call(set, key) &&
|
||||||
objproto.propertyIsEnumerable.call(set, key);
|
propertyIsEnumerable.call(set, key);
|
||||||
/**
|
/**
|
||||||
* Returns a new set containing the members of the first argument which
|
* Returns a new set containing the members of the first argument which
|
||||||
* do not exist in any of the other given arguments.
|
* do not exist in any of the other given arguments.
|
||||||
@@ -518,7 +518,7 @@ function memoize(obj, key, getter) {
|
|||||||
if (arguments.length == 1) {
|
if (arguments.length == 1) {
|
||||||
obj = update({}, obj);
|
obj = update({}, obj);
|
||||||
for (let prop in Object.getOwnPropertyNames(obj)) {
|
for (let prop in Object.getOwnPropertyNames(obj)) {
|
||||||
let get = objproto.__lookupGetter__.call(obj, prop);
|
let get = __lookupGetter__.call(obj, prop);
|
||||||
if (get)
|
if (get)
|
||||||
memoize(obj, prop, get);
|
memoize(obj, prop, get);
|
||||||
}
|
}
|
||||||
@@ -628,7 +628,7 @@ function update(target) {
|
|||||||
Object.getOwnPropertyNames(src || {}).forEach(function (k) {
|
Object.getOwnPropertyNames(src || {}).forEach(function (k) {
|
||||||
let desc = Object.getOwnPropertyDescriptor(src, k);
|
let desc = Object.getOwnPropertyDescriptor(src, k);
|
||||||
if (desc.value instanceof Class.Property)
|
if (desc.value instanceof Class.Property)
|
||||||
desc = desc.value.init(k) || desc.value;
|
desc = desc.value.init(k, target) || desc.value;
|
||||||
if (typeof desc.value == "function" && Object.getPrototypeOf(target)) {
|
if (typeof desc.value == "function" && Object.getPrototypeOf(target)) {
|
||||||
let func = desc.value.wrapped || desc.value;
|
let func = desc.value.wrapped || desc.value;
|
||||||
func.__defineGetter__("super", function () Object.getPrototypeOf(target)[k]);
|
func.__defineGetter__("super", function () Object.getPrototypeOf(target)[k]);
|
||||||
@@ -879,7 +879,7 @@ memoize(Class.prototype, "closure", function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
iter(properties(this), properties(this, true)).forEach(function (k) {
|
iter(properties(this), properties(this, true)).forEach(function (k) {
|
||||||
if (!this.__lookupGetter__(k) && callable(this[k]))
|
if (!__lookupGetter__.call(this, k) && callable(this[k]))
|
||||||
closure[k] = closure(this[k]);
|
closure[k] = closure(this[k]);
|
||||||
else if (!(k in closure))
|
else if (!(k in closure))
|
||||||
Object.defineProperty(closure, k, {
|
Object.defineProperty(closure, k, {
|
||||||
@@ -1241,7 +1241,7 @@ update(iter, {
|
|||||||
let obj = {};
|
let obj = {};
|
||||||
for (let [k, v] in iter)
|
for (let [k, v] in iter)
|
||||||
if (v instanceof Class.Property)
|
if (v instanceof Class.Property)
|
||||||
Object.defineProperty(obj, k, v.init(k) || v);
|
Object.defineProperty(obj, k, v.init(k, obj) || v);
|
||||||
else
|
else
|
||||||
obj[k] = v;
|
obj[k] = v;
|
||||||
return obj;
|
return obj;
|
||||||
@@ -1388,7 +1388,7 @@ var array = Class("array", Array, {
|
|||||||
let obj = {};
|
let obj = {};
|
||||||
assoc.forEach(function ([k, v]) {
|
assoc.forEach(function ([k, v]) {
|
||||||
if (v instanceof Class.Property)
|
if (v instanceof Class.Property)
|
||||||
Object.defineProperty(obj, k, v.init(k) || v);
|
Object.defineProperty(obj, k, v.init(k, obj) || v);
|
||||||
else
|
else
|
||||||
obj[k] = v;
|
obj[k] = v;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -728,6 +728,7 @@ var ConfigBase = Class("ConfigBase", {
|
|||||||
HelpXMLText color: #E5E5E5;
|
HelpXMLText color: #E5E5E5;
|
||||||
// </css>
|
// </css>
|
||||||
]]></>)
|
]]></>)
|
||||||
|
}, {
|
||||||
});
|
});
|
||||||
|
|
||||||
JSMLoader.loadSubScript("resource://dactyl-local-content/config.js", this);
|
JSMLoader.loadSubScript("resource://dactyl-local-content/config.js", this);
|
||||||
|
|||||||
@@ -53,9 +53,6 @@ var Group = Class("Group", {
|
|||||||
let (match = array.nth(siteFilter.filters, function (f) f(uri), 0))
|
let (match = array.nth(siteFilter.filters, function (f) f(uri), 0))
|
||||||
match && match.result;
|
match && match.result;
|
||||||
|
|
||||||
if (!isArray(patterns))
|
|
||||||
patterns = Option.splitList(patterns, true);
|
|
||||||
|
|
||||||
return update(siteFilter, {
|
return update(siteFilter, {
|
||||||
toString: function () this.filters.join(","),
|
toString: function () this.filters.join(","),
|
||||||
|
|
||||||
@@ -64,14 +61,7 @@ var Group = Class("Group", {
|
|||||||
function (f) <span highlight={uri && f(uri) ? "Filter" : ""}>{f}</span>,
|
function (f) <span highlight={uri && f(uri) ? "Filter" : ""}>{f}</span>,
|
||||||
<>,</>),
|
<>,</>),
|
||||||
|
|
||||||
filters: patterns.map(function (pattern) {
|
filters: Option.parse.sitelist(patterns)
|
||||||
let [, res, filter] = /^(!?)(.*)/.exec(pattern);
|
|
||||||
|
|
||||||
return update(Styles.matchFilter(Option.dequote(filter)), {
|
|
||||||
result: !res,
|
|
||||||
toString: function () pattern
|
|
||||||
});
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Components.utils.import("resource://dactyl/bootstrap.jsm");
|
|||||||
defineModule("options", {
|
defineModule("options", {
|
||||||
exports: ["Option", "Options", "ValueError", "options"],
|
exports: ["Option", "Options", "ValueError", "options"],
|
||||||
require: ["storage"],
|
require: ["storage"],
|
||||||
use: ["commands", "completion", "prefs", "services", "template", "util"]
|
use: ["commands", "completion", "prefs", "services", "styles", "template", "util"]
|
||||||
}, this);
|
}, this);
|
||||||
|
|
||||||
|
|
||||||
@@ -428,17 +428,35 @@ var Option = Class("Option", {
|
|||||||
unparseRegexp: function (re) re.bang + Option.quote(util.regexp.getSource(re), /^!|:/) +
|
unparseRegexp: function (re) re.bang + Option.quote(util.regexp.getSource(re), /^!|:/) +
|
||||||
(typeof re.result === "boolean" ? "" : ":" + Option.quote(re.result)),
|
(typeof re.result === "boolean" ? "" : ":" + Option.quote(re.result)),
|
||||||
|
|
||||||
|
parseSite: function parseSite(pattern, result, rest) {
|
||||||
|
if (isArray(rest)) // Called by Array.map
|
||||||
|
result = undefined;
|
||||||
|
|
||||||
|
let [, bang, filter] = /^(!?)(.*)/.exec(pattern);
|
||||||
|
filter = Option.dequote(filter);
|
||||||
|
|
||||||
|
return update(Styles.matchFilter(filter), {
|
||||||
|
bang: bang,
|
||||||
|
filter: filter,
|
||||||
|
result: result !== undefined ? result : !bang,
|
||||||
|
toString: function () this.bang + Option.quote(this.filter) +
|
||||||
|
(typeof this.result === "boolean" ? "" : ":" + Option.quote(this.result)),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
getKey: {
|
getKey: {
|
||||||
stringlist: function (k) this.value.indexOf(k) >= 0,
|
stringlist: function (k) this.value.indexOf(k) >= 0,
|
||||||
get charlist() this.stringlist,
|
get charlist() this.stringlist,
|
||||||
|
|
||||||
regexplist: function (k, default_) {
|
regexplist: function (k, default_) {
|
||||||
for (let re in values(this.value))
|
for (let re in values(this.value))
|
||||||
if (re.test(k))
|
if (re(k))
|
||||||
return re.result;
|
return re.result;
|
||||||
return arguments.length > 1 ? default_ : null;
|
return arguments.length > 1 ? default_ : null;
|
||||||
},
|
},
|
||||||
get regexpmap() this.regexplist
|
get regexpmap() this.regexplist,
|
||||||
|
get sitelist() this.regexplist,
|
||||||
|
get sitemap() this.regexplist
|
||||||
},
|
},
|
||||||
|
|
||||||
stringify: {
|
stringify: {
|
||||||
@@ -449,7 +467,9 @@ var Option = Class("Option", {
|
|||||||
stringmap: function (vals) [Option.quote(k, /:/) + ":" + Option.quote(v) for ([k, v] in Iterator(vals))].join(","),
|
stringmap: function (vals) [Option.quote(k, /:/) + ":" + Option.quote(v) for ([k, v] in Iterator(vals))].join(","),
|
||||||
|
|
||||||
regexplist: function (vals) vals.join(","),
|
regexplist: function (vals) vals.join(","),
|
||||||
get regexpmap() this.regexplist
|
get regexpmap() this.regexplist,
|
||||||
|
get sitelist() this.regexplist,
|
||||||
|
get sitemap() this.regexplist
|
||||||
},
|
},
|
||||||
|
|
||||||
parse: {
|
parse: {
|
||||||
@@ -466,6 +486,14 @@ var Option = Class("Option", {
|
|||||||
Option.splitList(value, true)
|
Option.splitList(value, true)
|
||||||
.map(function (re) Option.parseRegexp(re, undefined, this.regexpFlags), this),
|
.map(function (re) Option.parseRegexp(re, undefined, this.regexpFlags), this),
|
||||||
|
|
||||||
|
sitelist: function (value) {
|
||||||
|
if (value === "")
|
||||||
|
return [];
|
||||||
|
if (!isArray(value))
|
||||||
|
value = Option.splitList(value, true);
|
||||||
|
return value.map(Option.parseSite);
|
||||||
|
},
|
||||||
|
|
||||||
stringmap: function (value) array.toObject(
|
stringmap: function (value) array.toObject(
|
||||||
Option.splitList(value, true).map(function (v) {
|
Option.splitList(value, true).map(function (v) {
|
||||||
let [count, key, quote] = Commands.parseArg(v, /:/);
|
let [count, key, quote] = Commands.parseArg(v, /:/);
|
||||||
@@ -479,11 +507,21 @@ var Option = Class("Option", {
|
|||||||
if (count === v.length)
|
if (count === v.length)
|
||||||
[val, re] = [re, ".?"];
|
[val, re] = [re, ".?"];
|
||||||
return Option.parseRegexp(re, val, this.regexpFlags);
|
return Option.parseRegexp(re, val, this.regexpFlags);
|
||||||
|
}, this),
|
||||||
|
|
||||||
|
sitemap: function (value)
|
||||||
|
Option.splitList(value, true).map(function (v) {
|
||||||
|
let [count, re, quote] = Commands.parseArg(v, /:/, true);
|
||||||
|
let val = Option.dequote(v.substr(count + 1));
|
||||||
|
if (count === v.length)
|
||||||
|
[val, re] = [re, "*"];
|
||||||
|
return Option.parseSite(re, val);
|
||||||
}, this)
|
}, this)
|
||||||
},
|
},
|
||||||
|
|
||||||
testValues: {
|
testValues: {
|
||||||
regexpmap: function (vals, validator) vals.every(function (re) validator(re.result)),
|
regexpmap: function (vals, validator) vals.every(function (re) validator(re.result)),
|
||||||
|
get sitemap() this.regexpmap,
|
||||||
stringlist: function (vals, validator) vals.every(validator, this),
|
stringlist: function (vals, validator) vals.every(validator, this),
|
||||||
stringmap: function (vals, validator) values(vals).every(validator, this)
|
stringmap: function (vals, validator) values(vals).every(validator, this)
|
||||||
},
|
},
|
||||||
@@ -597,6 +635,8 @@ var Option = Class("Option", {
|
|||||||
get charlist() this.stringlist,
|
get charlist() this.stringlist,
|
||||||
get regexplist() this.stringlist,
|
get regexplist() this.stringlist,
|
||||||
get regexpmap() this.stringlist,
|
get regexpmap() this.stringlist,
|
||||||
|
get sitelist() this.stringlist,
|
||||||
|
get sitemap() this.stringlist,
|
||||||
|
|
||||||
string: function (operator, values, scope, invert) {
|
string: function (operator, values, scope, invert) {
|
||||||
if (invert)
|
if (invert)
|
||||||
@@ -637,7 +677,7 @@ var Option = Class("Option", {
|
|||||||
if (!acceptable)
|
if (!acceptable)
|
||||||
acceptable = context.allItems.items.map(function (item) [item.text]);
|
acceptable = context.allItems.items.map(function (item) [item.text]);
|
||||||
}
|
}
|
||||||
if (this.type == "regexpmap")
|
if (this.type === "regexpmap" || this.type === "sitemap")
|
||||||
return Array.concat(values).every(function (re) acceptable.some(function (item) item[0] == re.result));
|
return Array.concat(values).every(function (re) acceptable.some(function (item) item[0] == re.result));
|
||||||
return Array.concat(values).every(function (value) acceptable.some(function (item) item[0] == value));
|
return Array.concat(values).every(function (value) acceptable.some(function (item) item[0] == value));
|
||||||
},
|
},
|
||||||
@@ -1286,6 +1326,7 @@ var Options = Module("options", {
|
|||||||
switch (opt.type) {
|
switch (opt.type) {
|
||||||
case "boolean":
|
case "boolean":
|
||||||
return;
|
return;
|
||||||
|
case "sitelist":
|
||||||
case "regexplist":
|
case "regexplist":
|
||||||
newValues = Option.splitList(context.filter);
|
newValues = Option.splitList(context.filter);
|
||||||
// Fallthrough
|
// Fallthrough
|
||||||
@@ -1295,6 +1336,7 @@ var Options = Module("options", {
|
|||||||
Option._splitAt = newValues.length;
|
Option._splitAt = newValues.length;
|
||||||
break;
|
break;
|
||||||
case "stringmap":
|
case "stringmap":
|
||||||
|
case "sitemap":
|
||||||
case "regexpmap":
|
case "regexpmap":
|
||||||
let vals = Option.splitList(context.filter);
|
let vals = Option.splitList(context.filter);
|
||||||
let target = vals.pop() || "";
|
let target = vals.pop() || "";
|
||||||
|
|||||||
Reference in New Issue
Block a user