Support scoped selection of jquery nodes; support cross-metalevel jquery
This commit is contained in:
parent
5f384f5d35
commit
0054254aed
|
@ -1,35 +1,46 @@
|
||||||
// JQuery event driver
|
// JQuery event driver
|
||||||
|
|
||||||
function spawnJQueryDriver() {
|
function spawnJQueryDriver(baseSelector, metaLevel) {
|
||||||
var d = new DemandMatcher(["jQuery", __, __, __]);
|
metaLevel = metaLevel || 0;
|
||||||
|
var d = new DemandMatcher(["jQuery", __, __, __], metaLevel);
|
||||||
d.onDemandIncrease = function (r) {
|
d.onDemandIncrease = function (r) {
|
||||||
var selector = r.pattern[1];
|
var selector = r.pattern[1];
|
||||||
var eventName = r.pattern[2];
|
var eventName = r.pattern[2];
|
||||||
World.spawn(new JQueryEventRouter(selector, eventName),
|
World.spawn(new JQueryEventRouter(baseSelector, selector, eventName, metaLevel),
|
||||||
[pub(["jQuery", selector, eventName, __]),
|
[pub(["jQuery", selector, eventName, __], metaLevel),
|
||||||
pub(["jQuery", selector, eventName, __], 0, 1)]);
|
pub(["jQuery", selector, eventName, __], metaLevel, 1)]);
|
||||||
};
|
};
|
||||||
World.spawn(d);
|
World.spawn(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
function JQueryEventRouter(selector, eventName) {
|
function JQueryEventRouter(baseSelector, selector, eventName, metaLevel) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
this.baseSelector = baseSelector || null;
|
||||||
this.selector = selector;
|
this.selector = selector;
|
||||||
this.eventName = eventName;
|
this.eventName = eventName;
|
||||||
|
this.metaLevel = metaLevel || 0;
|
||||||
this.preventDefault = (this.eventName.charAt(0) !== "+");
|
this.preventDefault = (this.eventName.charAt(0) !== "+");
|
||||||
this.handler =
|
this.handler =
|
||||||
World.wrap(function (e) {
|
World.wrap(function (e) {
|
||||||
World.send(["jQuery", self.selector, self.eventName, e]);
|
World.send(["jQuery", self.selector, self.eventName, e], self.metaLevel);
|
||||||
if (self.preventDefault) e.preventDefault();
|
if (self.preventDefault) e.preventDefault();
|
||||||
return !self.preventDefault;
|
return !self.preventDefault;
|
||||||
});
|
});
|
||||||
$(this.selector).on(this.preventDefault ? this.eventName : this.eventName.substring(1),
|
this.computeNodes().on(this.preventDefault ? this.eventName : this.eventName.substring(1),
|
||||||
this.handler);
|
this.handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
JQueryEventRouter.prototype.handleEvent = function (e) {
|
JQueryEventRouter.prototype.handleEvent = function (e) {
|
||||||
if (e.type === "routes" && e.routes.length === 0) {
|
if (e.type === "routes" && e.routes.length === 0) {
|
||||||
$(this.selector).off(this.eventName, this.handler);
|
this.computeNodes().off(this.eventName, this.handler);
|
||||||
World.exit();
|
World.exit();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
JQueryEventRouter.prototype.computeNodes = function () {
|
||||||
|
if (this.baseSelector) {
|
||||||
|
return $(this.baseSelector).children(this.selector).addBack(this.selector);
|
||||||
|
} else {
|
||||||
|
return $(this.selector);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue