79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
function Spy() {
|
|
}
|
|
|
|
Spy.prototype.boot = function () {
|
|
World.updateRoutes([sub(__, 0, 1000), pub(__, 0, 1000)]);
|
|
};
|
|
|
|
Spy.prototype.handleEvent = function (e) {
|
|
console.log("SPY", e);
|
|
};
|
|
|
|
function JQueryDriver() {
|
|
this.handlerMap = {};
|
|
}
|
|
|
|
JQueryDriver.prototype.updateHandlerMap = function (routes) {
|
|
var newMap = {};
|
|
for (var i = 0; i < routes.length; i++) {
|
|
var selector = routes[i].pattern[1];
|
|
var eventName = routes[i].pattern[2];
|
|
if (typeof(selector) === 'string' && typeof(eventName) === 'string') {
|
|
var key = JSON.stringify([selector, eventName]);
|
|
var handler = this.handlerMap[key];
|
|
if (!handler) {
|
|
handler = (function (selector, eventName) { // JS is broken
|
|
return World.wrap(function (e) {
|
|
World.send(["jQuery", selector, eventName, e]);
|
|
World.current.startStepping();
|
|
});
|
|
})(selector, eventName);
|
|
console.log("jQuery", "installing", selector, eventName);
|
|
$(selector).on(eventName, handler);
|
|
}
|
|
newMap[key] = handler;
|
|
}
|
|
}
|
|
for (var key in this.handlerMap) {
|
|
if (hasOwnProperty(this.handlerMap, key) && !hasOwnProperty(newMap, key)) {
|
|
var keyArray = JSON.parse(key);
|
|
var handler = this.handlerMap[key];
|
|
var selector = keyArray[0];
|
|
var eventName = keyArray[1];
|
|
console.log("jQuery", "removing", selector, eventName);
|
|
$(selector).off(eventName, handler);
|
|
}
|
|
}
|
|
this.handlerMap = newMap;
|
|
};
|
|
|
|
JQueryDriver.prototype.boot = function () {
|
|
World.updateRoutes([pub(["jQuery", __, __, __], 0, 1)]);
|
|
};
|
|
|
|
JQueryDriver.prototype.handleEvent = function (e) {
|
|
if (e.type === "routes") {
|
|
this.updateHandlerMap(e.routes);
|
|
}
|
|
};
|
|
|
|
var g = new Ground(function () {
|
|
console.log('here');
|
|
World.spawn(new Spy());
|
|
World.spawn(new JQueryDriver());
|
|
World.spawn({
|
|
step: function () { console.log('dummy step'); },
|
|
boot: function () {
|
|
console.log('dummy boot');
|
|
World.updateRoutes([sub(["jQuery", "#testButton", "click", __]), sub(__, 1)]);
|
|
World.send({msg: 'hello outer world'}, 1);
|
|
World.send({msg: 'hello inner world'}, 0);
|
|
},
|
|
handleEvent: function (e) {
|
|
console.log('dummy handleEvent', e);
|
|
}
|
|
});
|
|
});
|
|
|
|
g.startStepping();
|