syndicate-2017/examples/dom/index.js

57 lines
1.6 KiB
JavaScript
Raw Normal View History

2016-04-06 16:22:30 +00:00
var G;
$(document).ready(function () {
var Dataspace = Syndicate.Dataspace;
2016-04-06 16:22:30 +00:00
var sub = Syndicate.sub;
var assert = Syndicate.assert;
var retract = Syndicate.retract;
var __ = Syndicate.__;
var _$ = Syndicate._$;
G = new Syndicate.Ground(function () {
console.log('starting ground boot');
Syndicate.DOM.spawnDOMDriver();
2016-05-08 15:34:45 +00:00
var DOM = Syndicate.DOM.DOM;
var jQueryEvent = Syndicate.JQuery.jQueryEvent;
2016-04-06 16:22:30 +00:00
Dataspace.spawn({
2016-04-06 16:22:30 +00:00
boot: function () {
2016-05-08 15:34:45 +00:00
return assert(DOM("#clicker-holder", "clicker",
2016-05-11 02:43:16 +00:00
'<button><span style="font-style: italic">Click me!</span></button>'))
2016-05-08 15:34:45 +00:00
.andThen(sub(jQueryEvent("button.clicker", "click", __)));
2016-04-06 16:22:30 +00:00
},
handleEvent: function (e) {
2016-05-08 15:34:45 +00:00
if (e.type === "message" && jQueryEvent.isClassOf(e.message)) {
Dataspace.send("bump_count");
2016-04-06 16:22:30 +00:00
}
}
});
Dataspace.spawn({
2016-04-06 16:22:30 +00:00
counter: 0,
boot: function () {
this.updateState();
return sub("bump_count");
},
updateState: function () {
2016-05-08 15:34:45 +00:00
Dataspace.stateChange(retract(DOM.pattern)
.andThen(assert(DOM("#counter-holder", "counter",
2016-05-11 02:43:16 +00:00
'<div><p>The current count is: '+this.counter+
'</p></div>'))));
2016-04-06 16:22:30 +00:00
},
handleEvent: function (e) {
if (e.type === "message" && e.message === "bump_count") {
this.counter++;
this.updateState();
}
}
});
});
2016-05-10 04:44:02 +00:00
G.dataspace.setOnStateChange(function (mux, patch) {
2016-04-06 16:22:30 +00:00
$("#spy-holder").text(Syndicate.prettyTrie(mux.routingTable));
2016-05-10 04:44:02 +00:00
});
2016-04-06 16:22:30 +00:00
G.startStepping();
});