1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-29 17:15:47 +01:00

Replace XPath-based hint paths with CSS selectors. Needs cleanup and validation.

--HG--
extra : rebase_source : 83035481bf697b7b57e17e516b0dfc61329164c6
This commit is contained in:
Kris Maglione
2011-02-17 15:23:17 -05:00
parent 589849c06d
commit a54573522a
7 changed files with 126 additions and 69 deletions

View File

@@ -205,8 +205,7 @@ var IO = Module("io", {
return context;
}
catch (e) {
if (!(e instanceof FailedAssertion))
dactyl.reportError(e);
dactyl.reportError(e);
let message = "Sourcing file: " + (e.echoerr || file.path + ": " + e);
if (!params.silent)
dactyl.echoerr(message);

View File

@@ -415,18 +415,23 @@ var Option = Class("Option", {
},
parseRegexp: function (value, result, flags) {
let keepQuotes = this && this.keepQuotes;
if (isArray(flags)) // Called by Array.map
result = flags = undefined;
if (flags == null)
flags = this && this.regexpFlags || "";
let [, bang, val] = /^(!?)(.*)/.exec(value);
let re = RegExp(Option.dequote(val), flags);
re.bang = bang;
re.result = result !== undefined ? result : !bang;
re.toString = function () Option.unparseRegexp(this);
re.toString = function () Option.unparseRegexp(this, keepQuotes);
return re;
},
unparseRegexp: function (re) re.bang + Option.quote(util.regexp.getSource(re), /^!|:/) +
(typeof re.result === "boolean" ? "" : ":" + Option.quote(re.result)),
unparseRegexp: function (re, quoted) re.bang + Option.quote(util.regexp.getSource(re), /^!|:/) +
(typeof re.result === "boolean" ? "" : ":" + (quoted ? re.result : Option.quote(re.result))),
parseSite: function parseSite(pattern, result, rest) {
if (isArray(rest)) // Called by Array.map
@@ -500,23 +505,25 @@ var Option = Class("Option", {
return [key, Option.dequote(v.substr(count + 1))];
})),
regexpmap: 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.parseRegexp(re, val, this.regexpFlags);
}, this),
regexpmap: function (value) Option.parse.list.call(this, value, Option.parseRegexp),
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)
sitemap: function (value) Option.parse.list.call(this, value, Option.parseSite),
list: function (value, parse) let (prev = null)
array.compact(Option.splitList(value, true).map(function (v) {
let [count, filter, quote] = Commands.parseArg(v, /:/, true);
let val = v.substr(count + 1);
if (!this.keepQuotes)
val = Option.dequote(val);
if (v.length > count)
return prev = parse.call(this, filter, val);
else {
util.assert(prev, "Syntax error", false);
prev.result += "," + v;
}
}, this))
},
testValues: {
@@ -549,7 +556,7 @@ var Option = Class("Option", {
return res;
},
quote: function quote(str, re)
quote: function quote(str, re) isArray(str) ? str.map(function (s) quote(s, re)).join(",") :
Commands.quoteArg[/[\s|"'\\,]|^$/.test(str) || re && re.test && re.test(str)
? (/[\b\f\n\r\t]/.test(str) ? '"' : "'")
: ""](str, re),
@@ -683,6 +690,7 @@ var Option = Class("Option", {
},
validateXPath: function (values) {
return true; // For now.
let evaluator = services.XPathEvaluator();
return this.testValues(values,
function (value) evaluator.createExpression(value, util.evaluateXPath.resolver));

View File

@@ -22,7 +22,18 @@ var XUL = Namespace("xul", "http://www.mozilla.org/keymaster/gatekeeper/there.is
var NS = Namespace("dactyl", "http://vimperator.org/namespaces/liberator");
default xml namespace = XHTML;
var FailedAssertion = Class("FailedAssertion", ErrorBase);
var FailedAssertion = Class("FailedAssertion", ErrorBase, {
init: function init(message, level, noTrace) {
if (noTrace !== undefined)
this.noTrace = noTrace;
init.supercall(this, message, level);
},
level: 3,
noTrace: true
});
var Point = Struct("x", "y");
var wrapCallback = function wrapCallback(fn) {
@@ -144,9 +155,9 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
* @param {string} message The message to present to the
* user on failure.
*/
assert: function (condition, message) {
assert: function (condition, message, quiet) {
if (!condition)
throw FailedAssertion(message, 1);
throw FailedAssertion(message, 1, quiet === undefined ? true : quiet);
},
/**
@@ -1417,6 +1428,9 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
errors: Class.memoize(function () []),
maxErrors: 15,
reportError: function (error) {
if (error.noTrace)
return;
if (Cu.reportError)
Cu.reportError(error);