2013-10-17 15:38:47 +00:00
|
|
|
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]);
|
|
|
|
});
|
|
|
|
})(selector, eventName);
|
|
|
|
console.log("jQuery", "installing", selector, eventName);
|
|
|
|
$(selector).on(eventName, handler);
|
|
|
|
}
|
|
|
|
newMap[key] = handler;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (var key in this.handlerMap) {
|
2013-10-18 08:58:08 +00:00
|
|
|
if (this.handlerMap.hasOwnProperty(key) && !(key in newMap)) {
|
2013-10-17 15:38:47 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2013-10-17 14:50:51 +00:00
|
|
|
var g = new Ground(function () {
|
2013-10-18 08:58:08 +00:00
|
|
|
console.log('starting ground boot');
|
2013-10-17 15:38:47 +00:00
|
|
|
World.spawn(new Spy());
|
|
|
|
World.spawn(new JQueryDriver());
|
2013-10-17 14:50:51 +00:00
|
|
|
World.spawn({
|
2013-10-17 15:38:47 +00:00
|
|
|
step: function () { console.log('dummy step'); },
|
2013-10-17 14:50:51 +00:00
|
|
|
boot: function () {
|
2013-10-17 15:38:47 +00:00
|
|
|
console.log('dummy boot');
|
|
|
|
World.updateRoutes([sub(["jQuery", "#testButton", "click", __]), sub(__, 1)]);
|
2013-10-17 14:50:51 +00:00
|
|
|
World.send({msg: 'hello outer world'}, 1);
|
|
|
|
World.send({msg: 'hello inner world'}, 0);
|
|
|
|
},
|
|
|
|
handleEvent: function (e) {
|
2013-10-18 08:58:08 +00:00
|
|
|
if (e.type === "send" && e.message[0] === "jQuery") {
|
|
|
|
console.log("got a click");
|
|
|
|
World.updateRoutes([]);
|
|
|
|
} else {
|
|
|
|
console.log('dummy handleEvent', e);
|
|
|
|
}
|
2013-10-17 14:50:51 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
g.startStepping();
|