mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-02 16:35:46 +01:00
Fix :js context on Minefield.
This commit is contained in:
@@ -475,7 +475,8 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
|
|||||||
|
|
||||||
userEval: function (str, context, fileName, lineNumber) {
|
userEval: function (str, context, fileName, lineNumber) {
|
||||||
let ctxt;
|
let ctxt;
|
||||||
if (jsmodules.__proto__ != window)
|
if (jsmodules.__proto__ != window && jsmodules.__proto__ != XPCNativeWrapper(window) &&
|
||||||
|
jsmodules.isPrototypeOf(context))
|
||||||
str = "with (window) { with (modules) { (this.eval || eval)(" + str.quote() + ") } }";
|
str = "with (window) { with (modules) { (this.eval || eval)(" + str.quote() + ") } }";
|
||||||
|
|
||||||
let info = contexts.context;
|
let info = contexts.context;
|
||||||
@@ -1218,8 +1219,10 @@ var Dactyl = Module("dactyl", XPCOM(Ci.nsISupportsWeakReference, ModuleBase), {
|
|||||||
util.reportError(error);
|
util.reportError(error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error.result == Cr.NS_BINDING_ABORTED)
|
if (error.result == Cr.NS_BINDING_ABORTED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (echo)
|
if (echo)
|
||||||
dactyl.echoerr(error, commandline.FORCE_SINGLELINE);
|
dactyl.echoerr(error, commandline.FORCE_SINGLELINE);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -187,6 +187,9 @@ var Editor = Module("editor", {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
let textBox = config.isComposeWindow ? null : dactyl.focusedElement;
|
let textBox = config.isComposeWindow ? null : dactyl.focusedElement;
|
||||||
|
if (!DOM(textBox).isInput)
|
||||||
|
textBox = null;
|
||||||
|
|
||||||
let line, column;
|
let line, column;
|
||||||
let keepFocus = modes.stack.some(function (m) isinstance(m.main, modes.COMMAND_LINE));
|
let keepFocus = modes.stack.some(function (m) isinstance(m.main, modes.COMMAND_LINE));
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,18 @@ var EventHive = Class("EventHive", Contexts.Hive, {
|
|||||||
this.unlisten(null);
|
this.unlisten(null);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_events: function _events(event, callback) {
|
||||||
|
if (!isObject(event))
|
||||||
|
var [self, events] = [null, array.toObject([[event, callback]])];
|
||||||
|
else
|
||||||
|
[self, events] = [event, event[callback || "events"]];
|
||||||
|
|
||||||
|
if (Set.has(events, "input") && !Set.has(events, "dactyl-input"))
|
||||||
|
events["dactyl-input"] = events.input;
|
||||||
|
|
||||||
|
return [self, events];
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an event listener for this session and removes it on
|
* Adds an event listener for this session and removes it on
|
||||||
* dactyl shutdown.
|
* dactyl shutdown.
|
||||||
@@ -35,22 +47,17 @@ var EventHive = Class("EventHive", Contexts.Hive, {
|
|||||||
* untrusted events.
|
* untrusted events.
|
||||||
*/
|
*/
|
||||||
listen: function (target, event, callback, capture, allowUntrusted) {
|
listen: function (target, event, callback, capture, allowUntrusted) {
|
||||||
if (!isObject(event))
|
var [self, events] = this._events(event, callback);
|
||||||
var [self, events] = [null, array.toObject([[event, callback]])];
|
|
||||||
else
|
|
||||||
[self, events] = [event, event[callback || "events"]];
|
|
||||||
|
|
||||||
if (Set.has(events, "input") && !Set.has(events, "dactyl-input"))
|
|
||||||
events["dactyl-input"] = events.input;
|
|
||||||
|
|
||||||
for (let [event, callback] in Iterator(events)) {
|
for (let [event, callback] in Iterator(events)) {
|
||||||
let args = [Cu.getWeakReference(target),
|
let args = [Cu.getWeakReference(target),
|
||||||
|
self ? Cu.getWeakReference(self) : { get: function () null },
|
||||||
event,
|
event,
|
||||||
this.wrapListener(callback, self),
|
this.wrapListener(callback, self),
|
||||||
capture,
|
capture,
|
||||||
allowUntrusted];
|
allowUntrusted];
|
||||||
|
|
||||||
target.addEventListener.apply(target, args.slice(1));
|
target.addEventListener.apply(target, args.slice(2));
|
||||||
this.sessionListeners.push(args);
|
this.sessionListeners.push(args);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -65,12 +72,21 @@ var EventHive = Class("EventHive", Contexts.Hive, {
|
|||||||
* phase, otherwise during the bubbling phase.
|
* phase, otherwise during the bubbling phase.
|
||||||
*/
|
*/
|
||||||
unlisten: function (target, event, callback, capture) {
|
unlisten: function (target, event, callback, capture) {
|
||||||
|
if (target != null)
|
||||||
|
var [self, events] = this._events(event, callback);
|
||||||
|
|
||||||
this.sessionListeners = this.sessionListeners.filter(function (args) {
|
this.sessionListeners = this.sessionListeners.filter(function (args) {
|
||||||
if (target == null || args[0].get() == target && args[1] == event && args[2].wrapped == callback && args[3] == capture) {
|
let elem = args[0].get();
|
||||||
args[0].get().removeEventListener.apply(args[0].get(), args.slice(1));
|
if (target == null || elem == target
|
||||||
|
&& self == args[1].get()
|
||||||
|
&& Set.has(events, args[2])
|
||||||
|
&& args[3].wrapped == events[args[2]]
|
||||||
|
&& args[4] == capture) {
|
||||||
|
|
||||||
|
elem.removeEventListener.apply(elem, args.slice(2));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return !args[0].get();
|
return elem;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -192,7 +208,8 @@ var Events = Module("events", {
|
|||||||
*/
|
*/
|
||||||
wrapListener: function wrapListener(method, self) {
|
wrapListener: function wrapListener(method, self) {
|
||||||
self = self || this;
|
self = self || this;
|
||||||
method.wrapped = wrappedListener;
|
method.wrapper = wrappedListener;
|
||||||
|
wrappedListener.wrapped = method;
|
||||||
function wrappedListener(event) {
|
function wrappedListener(event) {
|
||||||
try {
|
try {
|
||||||
method.apply(self, arguments);
|
method.apply(self, arguments);
|
||||||
|
|||||||
@@ -307,6 +307,17 @@ var Modes = Module("modes", {
|
|||||||
dactyl.triggerObserver("modes.add", mode);
|
dactyl.triggerObserver("modes.add", mode);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
removeMode: function removeMode(mode) {
|
||||||
|
if (this[mode.name] == mode)
|
||||||
|
delete this[mode.name];
|
||||||
|
if (this._modeMap[mode.name] == mode)
|
||||||
|
delete this._modeMap[mode.name];
|
||||||
|
if (this._modeMap[mode.mode] == mode)
|
||||||
|
delete this._modeMap[mode.mode];
|
||||||
|
|
||||||
|
this._mainModes = this._mainModes.filter(function (m) m != mode);
|
||||||
|
},
|
||||||
|
|
||||||
dumpStack: function dumpStack() {
|
dumpStack: function dumpStack() {
|
||||||
util.dump("Mode stack:");
|
util.dump("Mode stack:");
|
||||||
for (let [i, mode] in array.iterItems(this._modeStack))
|
for (let [i, mode] in array.iterItems(this._modeStack))
|
||||||
|
|||||||
@@ -1399,18 +1399,26 @@ var DOM = Class("DOM", {
|
|||||||
* @param {Node} elem The context element.
|
* @param {Node} elem The context element.
|
||||||
* @param {boolean} asIterator Whether to return the results as an
|
* @param {boolean} asIterator Whether to return the results as an
|
||||||
* XPath iterator.
|
* XPath iterator.
|
||||||
|
* @param {object} namespaces Additional namespaces to recognize.
|
||||||
|
* @optional
|
||||||
* @returns {Object} Iterable result of the evaluation.
|
* @returns {Object} Iterable result of the evaluation.
|
||||||
*/
|
*/
|
||||||
XPath: update(
|
XPath: update(
|
||||||
function XPath(expression, elem, asIterator) {
|
function XPath(expression, elem, asIterator, namespaces) {
|
||||||
try {
|
try {
|
||||||
let doc = elem.ownerDocument || elem;
|
let doc = elem.ownerDocument || elem;
|
||||||
|
|
||||||
if (isArray(expression))
|
if (isArray(expression))
|
||||||
expression = DOM.makeXPath(expression);
|
expression = DOM.makeXPath(expression);
|
||||||
|
|
||||||
|
let resolver = XPath.resolver;
|
||||||
|
if (namespaces) {
|
||||||
|
namespaces = update({}, DOM.namespaces, namespaces);
|
||||||
|
resolver = function (prefix) namespaces[prefix] || null;
|
||||||
|
}
|
||||||
|
|
||||||
let result = doc.evaluate(expression, elem,
|
let result = doc.evaluate(expression, elem,
|
||||||
XPath.resolver,
|
resolver,
|
||||||
asIterator ? Ci.nsIDOMXPathResult.ORDERED_NODE_ITERATOR_TYPE : Ci.nsIDOMXPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
|
asIterator ? Ci.nsIDOMXPathResult.ORDERED_NODE_ITERATOR_TYPE : Ci.nsIDOMXPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -717,7 +717,7 @@ var JavaScript = Module("javascript", {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
var result = dactyl.userEval(js, this.context);
|
var result = dactyl.userEval(js, this.context);
|
||||||
var xml = util.objectToString(result, true);
|
var xml = result === undefined ? "" : util.objectToString(result, true);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
util.reportError(e);
|
util.reportError(e);
|
||||||
|
|||||||
@@ -823,11 +823,15 @@ var Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
|
|||||||
* @returns {nsIURI}
|
* @returns {nsIURI}
|
||||||
*/
|
*/
|
||||||
newURI: function newURI(uri, charset, base) {
|
newURI: function newURI(uri, charset, base) {
|
||||||
let idx = uri.lastIndexOf(" -> ");
|
if (uri instanceof Ci.nsIURI)
|
||||||
if (~idx)
|
var res = uri.clone();
|
||||||
uri = uri.slice(idx + 4);
|
else {
|
||||||
|
let idx = uri.lastIndexOf(" -> ");
|
||||||
|
if (~idx)
|
||||||
|
uri = uri.slice(idx + 4);
|
||||||
|
|
||||||
let res = this.withProperErrors("newURI", services.io, uri, charset, base);
|
res = this.withProperErrors("newURI", services.io, uri, charset, base);
|
||||||
|
}
|
||||||
res instanceof Ci.nsIURL;
|
res instanceof Ci.nsIURL;
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user