mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-01-09 02:04:11 +01:00
Add experimental jQuery-ish DOM object.
This commit is contained in:
@@ -491,7 +491,7 @@ var Buffer = Module("buffer", {
|
||||
try {
|
||||
let [x, y] = elem.getAttribute("coords").split(",").map(parseFloat);
|
||||
|
||||
events.dispatch(elem, events.create(elem.ownerDocument, "mouseover", { screenX: x, screenY: y }));
|
||||
DOM(elem).mouseover({ screenX: x, screenY: y });
|
||||
}
|
||||
catch (e) {}
|
||||
}
|
||||
@@ -606,13 +606,15 @@ var Buffer = Module("buffer", {
|
||||
|
||||
prefs.withContext(function () {
|
||||
prefs.set("browser.tabs.loadInBackground", true);
|
||||
["mousedown", "mouseup", "click"].slice(0, util.haveGecko("2b") ? 2 : 3)
|
||||
.forEach(function (event) {
|
||||
events.dispatch(elem, events.create(doc, event, {
|
||||
screenX: offsetX, screenY: offsetY,
|
||||
ctrlKey: ctrlKey, shiftKey: shiftKey, metaKey: ctrlKey
|
||||
}));
|
||||
});
|
||||
let params = {
|
||||
screenX: offsetX, screenY: offsetY,
|
||||
ctrlKey: ctrlKey, shiftKey: shiftKey, metaKey: ctrlKey
|
||||
};
|
||||
|
||||
DOM(elem).mousedown(params).mouseup(params);
|
||||
if (!util.haveGecko("2b"))
|
||||
DOM(elem).click(params);
|
||||
|
||||
let sel = util.selectionController(win);
|
||||
sel.getSelection(sel.SELECTION_FOCUS_REGION).collapseToStart();
|
||||
});
|
||||
@@ -1422,8 +1424,7 @@ var Buffer = Module("buffer", {
|
||||
let file = io.File(path);
|
||||
dactyl.assert(file.exists());
|
||||
|
||||
elem.value = file.path;
|
||||
events.dispatch(elem, events.create(elem.ownerDocument, "change", {}));
|
||||
DOM(elem).val(file.path).change();
|
||||
}
|
||||
}).open(elem.value);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ var Editor = Module("editor", {
|
||||
elem.scrollTop = top;
|
||||
elem.scrollLeft = left;
|
||||
|
||||
events.dispatch(elem, events.create(elem.ownerDocument, "input"));
|
||||
DOM(elem).input();
|
||||
}
|
||||
},
|
||||
|
||||
@@ -248,10 +248,10 @@ var Editor = Module("editor", {
|
||||
textBox.value = val;
|
||||
|
||||
if (false) {
|
||||
textBox.setAttributeNS(NS, "modifiable", true);
|
||||
util.computedStyle(textBox).MozUserInput;
|
||||
events.dispatch(textBox, events.create(textBox.ownerDocument, "input", {}));
|
||||
textBox.removeAttributeNS(NS, "modifiable");
|
||||
let elem = DOM(textBox);
|
||||
elem.attrNS(NS, "modifiable", true)
|
||||
.style.MozUserInput;
|
||||
elem.input().attrNS(NS, "modifiable", null);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -641,8 +641,8 @@ var Events = Module("events", {
|
||||
let elem = target || event.originalTarget;
|
||||
if (elem) {
|
||||
let doc = elem.ownerDocument || elem.document || elem;
|
||||
let evt = events.create(doc, event.type, event);
|
||||
events.dispatch(elem, evt, extra);
|
||||
let evt = DOM.Event(doc, event.type, event);
|
||||
DOM.Event.dispatch(elem, evt, extra);
|
||||
}
|
||||
else if (i > 0 && event.type === "keypress")
|
||||
events.events.keypress.call(events, event);
|
||||
@@ -691,10 +691,10 @@ var Events = Module("events", {
|
||||
evt.isMacro = true;
|
||||
evt.dactylMode = mode;
|
||||
evt.dactylSavedEvents = savedEvents;
|
||||
this.feedingEvent = evt;
|
||||
DOM.Event.feedingEvent = evt;
|
||||
|
||||
let doc = document.commandDispatcher.focusedWindow.document;
|
||||
let event = events.create(doc, type, evt);
|
||||
|
||||
let target = dactyl.focusedElement
|
||||
|| ["complete", "interactive"].indexOf(doc.readyState) >= 0 && doc.documentElement
|
||||
|| doc.defaultView;
|
||||
@@ -703,6 +703,7 @@ var Events = Module("events", {
|
||||
["<Return>", "<Space>"].indexOf(key) == -1)
|
||||
target = target.ownerDocument.documentElement;
|
||||
|
||||
let event = DOM.Event(doc, type, evt);
|
||||
if (!evt_obj.dactylString && !mode)
|
||||
events.dispatch(target, event, evt);
|
||||
else if (type === "keypress")
|
||||
@@ -717,7 +718,7 @@ var Events = Module("events", {
|
||||
util.reportError(e);
|
||||
}
|
||||
finally {
|
||||
this.feedingEvent = null;
|
||||
DOM.Event.feedingEvent = null;
|
||||
this.feedingKeys = wasFeeding;
|
||||
if (quiet)
|
||||
commandline.quiet = wasQuiet;
|
||||
@@ -726,64 +727,8 @@ var Events = Module("events", {
|
||||
return true;
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates an actual event from a pseudo-event object.
|
||||
*
|
||||
* The pseudo-event object (such as may be retrieved from events.fromString)
|
||||
* should have any properties you want the event to have.
|
||||
*
|
||||
* @param {Document} doc The DOM document to associate this event with
|
||||
* @param {Type} type The type of event (keypress, click, etc.)
|
||||
* @param {Object} opts The pseudo-event. @optional
|
||||
*/
|
||||
create: function (doc, type, opts) {
|
||||
const DEFAULTS = {
|
||||
HTML: {
|
||||
type: type, bubbles: true, cancelable: false
|
||||
},
|
||||
Key: {
|
||||
type: type,
|
||||
bubbles: true, cancelable: true,
|
||||
view: doc.defaultView,
|
||||
ctrlKey: false, altKey: false, shiftKey: false, metaKey: false,
|
||||
keyCode: 0, charCode: 0
|
||||
},
|
||||
Mouse: {
|
||||
type: type,
|
||||
bubbles: true, cancelable: true,
|
||||
view: doc.defaultView,
|
||||
detail: 1,
|
||||
screenX: 0, screenY: 0,
|
||||
clientX: 0, clientY: 0,
|
||||
ctrlKey: false, altKey: false, shiftKey: false, metaKey: false,
|
||||
button: 0,
|
||||
relatedTarget: null
|
||||
}
|
||||
};
|
||||
|
||||
opts = opts || {};
|
||||
|
||||
var t = this._create_types[type];
|
||||
var evt = doc.createEvent((t || "HTML") + "Events");
|
||||
|
||||
let defaults = DEFAULTS[t || "HTML"];
|
||||
|
||||
let args = Object.keys(defaults)
|
||||
.map(function (k) k in opts ? opts[k] : defaults[k]);
|
||||
|
||||
evt["init" + t + "Event"].apply(evt, args);
|
||||
return evt;
|
||||
},
|
||||
|
||||
_create_types: Class.memoize(function () iter(
|
||||
{
|
||||
Mouse: "click mousedown mouseout mouseover mouseup",
|
||||
Key: "keydown keypress keyup",
|
||||
"": "change dactyl-input input submit"
|
||||
}
|
||||
).map(function ([k, v]) v.split(" ").map(function (v) [v, k]))
|
||||
.flatten()
|
||||
.toObject()),
|
||||
create: deprecated("DOM.Event", function create() DOM.Event.apply(null, arguments)),
|
||||
dispatch: deprecated("DOM.Event.dispatch", function dispatch() DOM.Event.dispatch.apply(DOM.Event, arguments)),
|
||||
|
||||
/**
|
||||
* Converts a user-input string of keys into a canonical
|
||||
@@ -817,44 +762,6 @@ var Events = Module("events", {
|
||||
yield match[0];
|
||||
}()),
|
||||
|
||||
/**
|
||||
* Dispatches an event to an element as if it were a native event.
|
||||
*
|
||||
* @param {Node} target The DOM node to which to dispatch the event.
|
||||
* @param {Event} event The event to dispatch.
|
||||
*/
|
||||
dispatch: Class.memoize(function ()
|
||||
util.haveGecko("2b")
|
||||
? function dispatch(target, event, extra) {
|
||||
try {
|
||||
this.feedingEvent = extra;
|
||||
if (target instanceof Element)
|
||||
// This causes a crash on Gecko<2.0, it seems.
|
||||
return (target.ownerDocument || target.document || target).defaultView
|
||||
.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils)
|
||||
.dispatchDOMEventViaPresShell(target, event, true);
|
||||
else {
|
||||
target.dispatchEvent(event);
|
||||
return !event.getPreventDefault();
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
util.reportError(e);
|
||||
}
|
||||
finally {
|
||||
this.feedingEvent = null;
|
||||
}
|
||||
}
|
||||
: function dispatch(target, event, extra) {
|
||||
try {
|
||||
this.feedingEvent = extra;
|
||||
target.dispatchEvent(update(event, extra));
|
||||
}
|
||||
finally {
|
||||
this.feedingEvent = null;
|
||||
}
|
||||
}),
|
||||
|
||||
get defaultTarget() dactyl.focusedElement || content.document.body || document.documentElement,
|
||||
|
||||
/**
|
||||
@@ -1306,11 +1213,11 @@ var Events = Module("events", {
|
||||
let duringFeed = this.duringFeed || [];
|
||||
this.duringFeed = [];
|
||||
try {
|
||||
if (this.feedingEvent)
|
||||
for (let [k, v] in Iterator(this.feedingEvent))
|
||||
if (DOM.Event.feedingEvent)
|
||||
for (let [k, v] in Iterator(DOM.Event.feedingEvent))
|
||||
if (!(k in event))
|
||||
event[k] = v;
|
||||
this.feedingEvent = null;
|
||||
DOM.Event.feedingEvent = null;
|
||||
|
||||
let key = events.toString(event);
|
||||
|
||||
@@ -1321,7 +1228,7 @@ var Events = Module("events", {
|
||||
elem.dactylKeyPress = elem.value;
|
||||
util.timeout(function () {
|
||||
if (elem.dactylKeyPress !== undefined && elem.value !== elem.dactylKeyPress)
|
||||
events.dispatch(elem, events.create(elem.ownerDocument, "dactyl-input"));
|
||||
DOM(elem).dactylInput();
|
||||
elem.dactylKeyPress = undefined;
|
||||
});
|
||||
}
|
||||
@@ -1425,7 +1332,7 @@ var Events = Module("events", {
|
||||
this.keyEvents = [];
|
||||
|
||||
let pass = this.passing && !event.isMacro ||
|
||||
this.feedingEvent && this.feedingEvent.isReplay ||
|
||||
DOM.Event.feedingEvent && DOM.Event.feedingEvent.isReplay ||
|
||||
event.isReplay ||
|
||||
modes.main == modes.PASS_THROUGH ||
|
||||
modes.main == modes.QUOTE
|
||||
|
||||
Reference in New Issue
Block a user