The Big Spawn/Actor Swap

This commit is contained in:
Tony Garnock-Jones 2017-02-20 17:19:56 -05:00
parent 186be084fd
commit 86b82b57cb
24 changed files with 1968 additions and 1174 deletions

View File

@ -1,5 +1,5 @@
```javascript
actor {
spawn {
field this.balance = 0;
assert account(this.balance);
on message deposit($amount) {

View File

@ -1,5 +1,5 @@
```javascript
actor {
spawn {
on asserted account($balance) {
console.log("Balance:",
balance);

View File

@ -1,5 +1,5 @@
```racket
(actor
(spawn
(field [balance 0])
(assert (account (balance)))
(on (message (deposit $amount))

View File

@ -1,5 +1,5 @@
```racket
(actor
(spawn
(on (asserted (account $balance))
(printf "Balance: ~a\n"
balance)))

2425
dist/syndicate.js vendored

File diff suppressed because one or more lines are too long

37
dist/syndicate.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,12 +2,12 @@
new Syndicate.Ground(function () {
Syndicate.UI.spawnUIDriver();
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
var ui = new Syndicate.UI.Anchor();
Syndicate.Actor.declareField(this, "counter", 0);
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(ui.html('#button-label', '' + this.counter), 0); }));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('#counter', 'click', _), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('#counter', 'click', _), metalevel: 0 }; }), (function() {
this.counter++;
}));
} }).bind(this)); });
} }); });
}).startStepping();

View File

@ -1,7 +1,7 @@
ground dataspace {
Syndicate.UI.spawnUIDriver();
actor {
spawn {
var ui = new Syndicate.UI.Anchor();
field this.counter = 0;
assert ui.html('#button-label', '' + this.counter);

View File

@ -15,7 +15,7 @@ function spawnChatApp() {
$("#nym_form").submit(function (e) { e.preventDefault(); return false; });
if (!($("#nym").val())) { $("#nym").val("nym" + Math.floor(Math.random() * 65536)); }
actor {
spawn {
var ui = new Syndicate.UI.Anchor();
field this.nym;
field this.status;
@ -82,8 +82,8 @@ function outputUtterance(who, what) {
assertion type inputValue(selector, value);
function spawnInputChangeMonitor() {
actor {
during Syndicate.observe(inputValue($selector, _)) actor {
spawn {
during Syndicate.observe(inputValue($selector, _)) spawn {
field this.value = $(selector).val();
assert inputValue(selector, this.value);
on message Syndicate.UI.globalEvent(selector, 'change', $e) {

View File

@ -9,7 +9,7 @@ assertion type componentPresent(name);
// TV
function spawnTV() {
actor {
spawn {
var ui = new Syndicate.UI.Anchor();
during tvAlert($text) {
assert ui.context(text).html('#tv', Mustache.render($('#alert_template').html(), { text: text }));
@ -21,7 +21,7 @@ function spawnTV() {
// Remote control and listener
function spawnRemoteControl() {
actor {
spawn {
assert componentPresent('remote control');
on message Syndicate.UI.globalEvent('#remote-control', 'click', _) {
:: remoteClick();
@ -30,7 +30,7 @@ function spawnRemoteControl() {
}
function spawnRemoteListener() {
actor {
spawn {
this.stoveIsOn = false;
// In principle, we should start up in "power undefined" state and
// count clicks we get in that state; when we then learn the real
@ -53,7 +53,7 @@ function spawnRemoteListener() {
// Stove switch and power draw monitor
function spawnStoveSwitch() {
actor {
spawn {
field this.powerOn = false;
this.ui = new Syndicate.UI.Anchor();
@ -77,7 +77,7 @@ function spawnStoveSwitch() {
}
function spawnPowerDrawMonitor() {
actor {
spawn {
field this.watts = 0;
this.ui = new Syndicate.UI.Anchor();
@ -99,7 +99,7 @@ function spawnPowerDrawMonitor() {
// Timeout listener
function spawnTimeoutListener() {
actor {
spawn {
during powerDraw($watts) {
on start {
if (watts > 0) {
@ -119,7 +119,7 @@ function spawnTimeoutListener() {
}
// function spawnTimeoutListener() {
// actor {
// spawn {
// on asserted powerDraw($watts) {
// if (watts > 0) {
// var powerOnTime = Date.now();
@ -135,7 +135,7 @@ function spawnTimeoutListener() {
// }
// function spawnTimeoutListener() {
// actor {
// spawn {
// this.mostRecentTime = 0;
// this.powerOnTime = null;
// on asserted powerDraw($watts) {
@ -153,7 +153,7 @@ function spawnTimeoutListener() {
// Failure monitor
function spawnFailureMonitor() {
actor {
spawn {
on retracted componentPresent($who) {
react {
assert tvAlert('FAILURE: ' + who);
@ -167,7 +167,7 @@ function spawnFailureMonitor() {
// Chaos Monkey
function spawnChaosMonkey() {
actor* {
spawn* {
monitorComponent('power draw monitor',
'#spawn-power-draw-monitor',
'#kill-power-draw-monitor',

View File

@ -11,7 +11,7 @@ var G = new Syndicate.Ground(function () {
Syndicate.Timer.spawnTimerDriver();
Syndicate.Broker.spawnBrokerClientDriver();
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
var id = Syndicate.RandomID.randomId(4, true);
var email_element = document.getElementById('my_email');
@ -91,8 +91,8 @@ var G = new Syndicate.Ground(function () {
}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(fromBroker(this.wsurl, locationRecord(_, _, _, _, _)), 0); }), (function() { var _ = Syndicate.__; return { assertion: fromBroker(this.wsurl, locationRecord((Syndicate._$("id")), (Syndicate._$("email")), _, _, _)), metalevel: 0 }; }), (function(id, email) {
var _cachedAssertion1472127196930_0 = (function() { var _ = Syndicate.__; return fromBroker(this.wsurl, locationRecord(id, email, _, _, _)); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628703784_0 = (function() { var _ = Syndicate.__; return fromBroker(this.wsurl, locationRecord(id, email, _, _, _)); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
var ui = new Syndicate.UI.Anchor();
var marker = new google.maps.Marker({
map: map,
@ -145,6 +145,6 @@ var _cachedAssertion1472127196930_0 = (function() { var _ = Syndicate.__; return
if (selectedMarker === marker) selectedMarker = null;
}));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127196930_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127196930_0, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
} }).bind(this)); });
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628703784_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628703784_0, metalevel: 0 }; }), (function() {})); }); }}));
} }); });
}).startStepping();

View File

@ -10,7 +10,7 @@ ground dataspace G {
Syndicate.Timer.spawnTimerDriver();
Syndicate.Broker.spawnBrokerClientDriver();
actor {
spawn {
var id = Syndicate.RandomID.randomId(4, true);
var email_element = document.getElementById('my_email');

View File

@ -9,7 +9,7 @@ ground dataspace G {
Syndicate.Timer.spawnTimerDriver();
Syndicate.Broker.spawnBrokerClientDriver();
actor {
spawn {
var ui = new Syndicate.UI.Anchor();
var color = tinycolor('hsl ' + (Math.random() * 360 | 0) + ' 100% 50%').toHexString();
var x = 0;

View File

@ -3,7 +3,7 @@ assertion type beep(counter);
ground dataspace {
console.log('starting ground boot');
actor {
spawn {
stop on asserted Syndicate.observe(beep(_)) {
field this.counter = 0;
react {
@ -18,7 +18,7 @@ ground dataspace {
}
}
actor {
spawn {
on message beep($counter) {
console.log("beep!", counter);
}

View File

@ -2,7 +2,7 @@ ground dataspace G {
Syndicate.UI.spawnUIDriver();
Syndicate.Timer.spawnTimerDriver();
actor {
spawn {
var ui = new Syndicate.UI.Anchor();
field this.angle;
field this.handX;

View File

@ -2,7 +2,7 @@ assertion type person(id, firstName, lastName, address, age);
message type setSortColumn(number);
function newRow(id, firstName, lastName, address, age) {
actor named ('model' + id) {
spawn named ('model' + id) {
assert person(id, firstName, lastName, address, age);
}
}
@ -16,7 +16,7 @@ function spawnModel() {
}
function spawnView() {
actor named 'view' {
spawn named 'view' {
var ui = new Syndicate.UI.Anchor();
field this.orderColumn = 2;
@ -37,7 +37,7 @@ function spawnView() {
}
function spawnController() {
actor named 'controller' {
spawn named 'controller' {
on message Syndicate.UI.globalEvent('table#the-table th', 'click', $e) {
:: setSortColumn(JSON.parse(e.target.dataset.column));
}

View File

@ -25,7 +25,7 @@ function piece(text, pos, lo, hi, cls) {
}
function spawnGui() {
actor {
spawn {
field this.text = '';
field this.pos = 0;
field this.highlightState = false;
@ -78,7 +78,7 @@ function spawnGui() {
// Textfield Model
function spawnModel() {
actor {
spawn {
field this.fieldValue = "initial";
field this.cursorPos = this.fieldValue.length; /* positions address gaps between characters */
@ -119,7 +119,7 @@ function spawnModel() {
// Search engine
function spawnSearch() {
actor {
spawn {
field this.searchtext = document.getElementById("searchBox").value;
field this.fieldValue = "";
field this.highlight = false;

View File

@ -20,7 +20,7 @@ var show = Syndicate.Struct.makeConstructor("show", ["completed"]);
//////////////////////////////////////////////////////////////////////////
function todoListItemModel(initialId, initialTitle, initialCompleted) {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.declareField(this, "id", initialId);
Syndicate.Actor.declareField(this, "title", initialTitle);
Syndicate.Actor.declareField(this, "completed", initialCompleted);
@ -37,7 +37,7 @@ function todoListItemModel(initialId, initialTitle, initialCompleted) {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(clearCompletedTodos(), 0); }), (function() { var _ = Syndicate.__; return { assertion: clearCompletedTodos(), metalevel: 0 }; }), (function() {
if (this.completed) Syndicate.Dataspace.send(deleteTodo(this.id));
}));
} }).bind(this)); });
} }); });
}
///////////////////////////////////////////////////////////////////////////
@ -50,18 +50,18 @@ function getTemplate(id) {
}
function todoListItemView(id) {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id, _, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id, _, _), metalevel: 0 }; }), (function() {}));
this.ui = new Syndicate.UI.Anchor();
Syndicate.Actor.declareField(this, "editing", false);
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id, _, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id, (Syndicate._$("title")), (Syndicate._$("completed"))), metalevel: 0 }; }), (function(title, completed) {
var _cachedAssertion1472127199197_0 = (function() { var _ = Syndicate.__; return todo(id, title, completed); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_0 = (function() { var _ = Syndicate.__; return todo(id, title, completed); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(show(completed), 0); }), (function() { var _ = Syndicate.__; return { assertion: show(completed), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_1 = (function() { var _ = Syndicate.__; return show(completed); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_1 = (function() { var _ = Syndicate.__; return show(completed); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(this.ui.html('.todo-list',
Mustache.render(getTemplate(this.editing
? 'todo-list-item-edit-template'
@ -74,9 +74,9 @@ var _cachedAssertion1472127199197_1 = (function() { var _ = Syndicate.__; return
}),
id), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_1, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_1, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_1, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_1, metalevel: 0 }; }), (function() {})); }); }}));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_0, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_0, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(this.ui.event('.toggle', 'change', _), 0); }), (function() { var _ = Syndicate.__; return { assertion: this.ui.event('.toggle', 'change', (Syndicate._$("e"))), metalevel: 0 }; }), (function(e) {
Syndicate.Dataspace.send(setCompleted(id, e.target.checked));
@ -103,7 +103,7 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
Syndicate.Dataspace.send((newTitle ? setTitle(id, newTitle) : deleteTodo(id)));
this.editing = false;
}));
} }).bind(this)); });
} }); });
}
///////////////////////////////////////////////////////////////////////////
@ -111,50 +111,50 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
var G = new Syndicate.Ground(function () {
Syndicate.UI.spawnUIDriver();
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('.new-todo', 'change', _), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('.new-todo', 'change', (Syndicate._$("e"))), metalevel: 0 }; }), (function(e) {
var newTitle = e.target.value.trim();
if (newTitle) Syndicate.Dataspace.send(createTodo(newTitle));
e.target.value = "";
}));
} }).bind(this)); });
} }); });
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
this.ui = new Syndicate.UI.Anchor();
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(activeTodoCount(_), 0); }), (function() { var _ = Syndicate.__; return { assertion: activeTodoCount((Syndicate._$("count"))), metalevel: 0 }; }), (function(count) {
var _cachedAssertion1472127199197_2 = (function() { var _ = Syndicate.__; return activeTodoCount(count); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_2 = (function() { var _ = Syndicate.__; return activeTodoCount(count); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(this.ui.context('count').html('.todo-count strong', '' + count), 0); }));
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return (count !== 1) ? Syndicate.Patch.assert(this.ui.context('plural').html('.todo-count span.s', 's'), 0) : Syndicate.Patch.emptyPatch; }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_2, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_2, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_2, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_2, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(totalTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: totalTodoCount(0), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_3 = (function() { var _ = Syndicate.__; return totalTodoCount(0); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_3 = (function() { var _ = Syndicate.__; return totalTodoCount(0); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('section.main', 'class', 'hidden'), 0); }));
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('footer.footer', 'class', 'hidden'), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_3, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_3, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_3, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_3, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(completedTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: completedTodoCount(0), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_4 = (function() { var _ = Syndicate.__; return completedTodoCount(0); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_4 = (function() { var _ = Syndicate.__; return completedTodoCount(0); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('button.clear-completed', 'class', 'hidden'), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_4, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_4, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_4, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_4, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('button.clear-completed', 'click', _), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('button.clear-completed', 'click', _), metalevel: 0 }; }), (function() {
Syndicate.Dataspace.send(clearCompletedTodos());
}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(allCompleted(), 0); }), (function() { var _ = Syndicate.__; return { assertion: allCompleted(), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_5 = (function() { var _ = Syndicate.__; return allCompleted(); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_5 = (function() { var _ = Syndicate.__; return allCompleted(); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addInitBlock((function() { Syndicate.Dataspace.send(Syndicate.UI.setProperty('.toggle-all', 'checked', true)); }));
Syndicate.Actor.Facet.current.addDoneBlock((function() { Syndicate.Dataspace.send(Syndicate.UI.setProperty('.toggle-all', 'checked', false)); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_5, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_5, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_5, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_5, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('.toggle-all', 'change', _), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('.toggle-all', 'change', (Syndicate._$("e"))), metalevel: 0 }; }), (function(e) {
Syndicate.Dataspace.send(setAllCompleted(e.target.checked));
}));
@ -162,9 +162,9 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_, _, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")), _, _), metalevel: 0 }; }), (function(id) {
todoListItemView(id);
}));
} }).bind(this)); });
} }); });
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.declareField(this, "completedCount", 0);
Syndicate.Actor.declareField(this, "activeCount", 0);
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_, _, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")), _, (Syndicate._$("c"))), metalevel: 0 }; }), (function(id, c) { if (c) this.completedCount++; else this.activeCount++; }));
@ -173,39 +173,39 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(completedTodoCount(this.completedCount), 0); }));
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(totalTodoCount(this.activeCount + this.completedCount), 0); }));
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return (this.completedCount > 0 && this.activeCount === 0) ? Syndicate.Patch.assert(allCompleted(), 0) : Syndicate.Patch.emptyPatch; }));
} }).bind(this)); });
} }); });
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash(_), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash((Syndicate._$("hash"))), metalevel: 0 }; }), (function(hash) {
var _cachedAssertion1472127199197_6 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash(hash); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_6 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash(hash); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('ul.filters > li > a[href="#'+hash+'"]',
'class', 'selected'), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_6, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_6, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_6, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_6, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/'), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_7 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/'); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_7 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/'); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(true), 0); }));
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(false), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_7, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_7, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_7, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_7, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/active'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/active'), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_8 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/active'); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_8 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/active'); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(false), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_8, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_8, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_8, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_8, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/completed'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/completed'), metalevel: 0 }; }), (function() {
var _cachedAssertion1472127199197_9 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/completed'); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_9 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/completed'); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(true), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_9, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_9, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
} }).bind(this)); });
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_9, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_9, metalevel: 0 }; }), (function() {})); }); }}));
} }); });
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
var db;
if ('todos-syndicate' in localStorage) {
@ -217,13 +217,13 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
} else {
db = {nextId: 0, todos: {}};
Syndicate.Actor.Facet.current.addInitBlock((function() {
(function () { Syndicate.Actor.Facet.build((function () { {
(function () { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.observe(createTodo(_)), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.observe(createTodo(_)), metalevel: 0 }; }), (function() {
Syndicate.Dataspace.send(createTodo('Buy milk'));
Syndicate.Dataspace.send(createTodo('Buy bread'));
Syndicate.Dataspace.send(createTodo('Finish PhD'));
}));
} }).bind(this)); }).call(this);
} }); }).call(this);
}));
}
@ -232,22 +232,22 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_, _, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")), _, _), metalevel: 0 }; }), (function(id) {
var _cachedAssertion1472127199197_10 = (function() { var _ = Syndicate.__; return todo(id, _, _); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_10 = (function() { var _ = Syndicate.__; return todo(id, _, _); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id, _, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id, (Syndicate._$("title")), (Syndicate._$("completed"))), metalevel: 0 }; }), (function(title, completed) {
var _cachedAssertion1472127199197_11 = (function() { var _ = Syndicate.__; return todo(id, title, completed); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628704807_11 = (function() { var _ = Syndicate.__; return todo(id, title, completed); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addInitBlock((function() {
db.todos[id] = {id: id, title: title, completed: completed};
localStorage['todos-syndicate'] = JSON.stringify(db);
}));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_11, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_11, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_11, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_11, metalevel: 0 }; }), (function() {})); }); }}));
Syndicate.Actor.Facet.current.addDoneBlock((function() {
delete db.todos[id];
localStorage['todos-syndicate'] = JSON.stringify(db);
}));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127199197_10, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127199197_10, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
} }).bind(this)); });
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628704807_10, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628704807_10, metalevel: 0 }; }), (function() {})); }); }}));
} }); });
}).startStepping();

View File

@ -24,7 +24,7 @@ assertion type show(completed);
//////////////////////////////////////////////////////////////////////////
function todoListItemModel(initialId, initialTitle, initialCompleted) {
actor {
spawn {
field this.id = initialId;
field this.title = initialTitle;
field this.completed = initialCompleted;
@ -54,7 +54,7 @@ function getTemplate(id) {
}
function todoListItemView(id) {
actor {
spawn {
stop on retracted todo(id, _, _);
this.ui = new Syndicate.UI.Anchor();
@ -109,7 +109,7 @@ function todoListItemView(id) {
ground dataspace G {
Syndicate.UI.spawnUIDriver();
actor {
spawn {
on message Syndicate.UI.globalEvent('.new-todo', 'change', $e) {
var newTitle = e.target.value.trim();
if (newTitle) :: createTodo(newTitle);
@ -117,7 +117,7 @@ ground dataspace G {
}
}
actor {
spawn {
this.ui = new Syndicate.UI.Anchor();
during activeTodoCount($count) {
@ -150,7 +150,7 @@ ground dataspace G {
}
}
actor {
spawn {
field this.completedCount = 0;
field this.activeCount = 0;
on asserted todo($id, _, $c) { if (c) this.completedCount++; else this.activeCount++; }
@ -161,7 +161,7 @@ ground dataspace G {
assert allCompleted() when (this.completedCount > 0 && this.activeCount === 0);
}
actor {
spawn {
during Syndicate.UI.locationHash($hash) {
assert Syndicate.UI.uiAttribute('ul.filters > li > a[href="#'+hash+'"]',
'class', 'selected');
@ -179,7 +179,7 @@ ground dataspace G {
}
}
actor {
spawn {
var db;
if ('todos-syndicate' in localStorage) {

View File

@ -72,16 +72,16 @@ var splitProposal = Syndicate.Struct.makeConstructor("splitProposal", ["title","
/// core library.
///
function whileRelevantAssert(P) {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(P, 0); }));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.observe(P), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.observe(P), metalevel: 0 }; }), (function() {}));
} }).bind(this)); });
} }); });
}
/// ### Implementation: SELLER
function seller() {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
/// We give our actor two state variables: a dictionary recording our
/// inventory of books (mapping title to price), and a counter
@ -113,11 +113,11 @@ function seller() {
/// responsive record, if one exists.
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.observe(bookQuote(_, _)), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.observe(bookQuote((Syndicate._$("title")), _)), metalevel: 0 }; }), (function(title) {
var _cachedAssertion1472127201683_0 = (function() { var _ = Syndicate.__; return Syndicate.observe(bookQuote(title, _)); }).call(this);
{ Syndicate.Actor.Facet.build((function () { {
var _cachedAssertion1487628705850_0 = (function() { var _ = Syndicate.__; return Syndicate.observe(bookQuote(title, _)); }).call(this);
{ Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(bookQuote(title, this.priceOf(title)), 0); }));
}
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1472127201683_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1472127201683_0, metalevel: 0 }; }), (function() {})); }).bind(this)); }}));
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1487628705850_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1487628705850_0, metalevel: 0 }; }), (function() {})); }); }}));
/// It also responds to order requests.
@ -142,7 +142,7 @@ Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "re
order(title, offerPrice, orderId, "March 9th"));
}
}));
} }).bind(this)); });
} }); });
}
/// ### Implementation: SPLIT-PROPOSER and book-quote-requestor
@ -175,7 +175,7 @@ function buyerA() {
/// First, retrieve a quote for the title, and analyze the result.
(function () { Syndicate.Actor.Facet.build((function () { {
(function () { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(bookQuote(title, _), 0); }), (function() { var _ = Syndicate.__; return { assertion: bookQuote(title, (Syndicate._$("price"))), metalevel: 0 }; }), (function(price) {
if (price === false) {
console.log("A learns that "+title+" is out-of-stock.");
@ -192,7 +192,7 @@ function buyerA() {
trySplit(title, price, price / 2);
}
}));
} }).bind(this)); }).call(this);
} }); }).call(this);
}
function trySplit(title, price, contribution) {
@ -211,7 +211,7 @@ function buyerA() {
/// Make our proposal, and wait for a response.
(function () { Syndicate.Actor.Facet.build((function () { {
(function () { Syndicate.Actor.Facet.build(function () { {
Syndicate.Actor.Facet.current.onEvent(Syndicate.Actor.PRIORITY_NORMAL, true, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(splitProposal(title, price, contribution, true), 0); }), (function() { var _ = Syndicate.__; return { assertion: splitProposal(title, price, contribution, true), metalevel: 0 }; }), (function() {
console.log("A learns that the split-proposal for "+
title+" was accepted");
@ -225,7 +225,7 @@ function buyerA() {
price,
contribution + ((price - contribution) / 2));
}));
} }).bind(this)); }).call(this);
} }); }).call(this);
}
}
});
@ -234,7 +234,7 @@ function buyerA() {
/// ### Implementation: SPLIT-DISPOSER and BUYER
function buyerB() {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
/// This actor maintains a record of the amount of money it has left
/// to spend.
@ -273,7 +273,7 @@ function buyerB() {
remainingFunds+" remaining funds");
this.funds = remainingFunds;
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build((function () { {
Syndicate.Actor.spawnActor(function() { Syndicate.Actor.Facet.build(function () { {
/// While waiting for order confirmation, take the opportunity to
/// signal to our SPLIT-PROPOSER that we accepted their proposal.
@ -289,10 +289,10 @@ function buyerB() {
console.log("The order for "+title+" has id "+id+
", and will be delivered on "+date);
}));
} }).bind(this)); });
} }); });
}
}));
} }).bind(this)); });
} }); });
}
/// ### Starting Configuration

View File

@ -76,7 +76,7 @@ assertion type splitProposal(title, price, contribution, accepted);
/// core library.
///
function whileRelevantAssert(P) {
actor {
spawn {
assert P;
stop on retracted Syndicate.observe(P);
}
@ -85,7 +85,7 @@ function whileRelevantAssert(P) {
/// ### Implementation: SELLER
function seller() {
actor {
spawn {
/// We give our actor two state variables: a dictionary recording our
/// inventory of books (mapping title to price), and a counter
@ -150,7 +150,7 @@ function seller() {
/// ### Implementation: SPLIT-PROPOSER and book-quote-requestor
function buyerA() {
actor* {
spawn* {
var self = this;
/// Our actor remembers which books remain on its shopping list, and
@ -238,7 +238,7 @@ function buyerA() {
/// ### Implementation: SPLIT-DISPOSER and BUYER
function buyerB() {
actor {
spawn {
/// This actor maintains a record of the amount of money it has left
/// to spend.
@ -276,7 +276,7 @@ function buyerB() {
remainingFunds+" remaining funds");
this.funds = remainingFunds;
actor {
spawn {
/// While waiting for order confirmation, take the opportunity to
/// signal to our SPLIT-PROPOSER that we accepted their proposal.

View File

@ -76,7 +76,7 @@ This routine is under consideration for possible addition to the
core library.
function whileRelevantAssert(P) {
actor {
spawn {
assert P;
stop on retracted Syndicate.observe(P);
}
@ -85,7 +85,7 @@ core library.
### Implementation: SELLER
function seller() {
actor {
spawn {
We give our actor two state variables: a dictionary recording our
inventory of books (mapping title to price), and a counter
@ -150,7 +150,7 @@ replying to the orderer.
### Implementation: SPLIT-PROPOSER and book-quote-requestor
function buyerA() {
actor* {
spawn* {
var self = this;
Our actor remembers which books remain on its shopping list, and
@ -238,7 +238,7 @@ Make our proposal, and wait for a response.
### Implementation: SPLIT-DISPOSER and BUYER
function buyerB() {
actor {
spawn {
This actor maintains a record of the amount of money it has left
to spend.
@ -276,7 +276,7 @@ on a split.
remainingFunds+" remaining funds");
this.funds = remainingFunds;
actor {
spawn {
While waiting for order confirmation, take the opportunity to
signal to our SPLIT-PROPOSER that we accepted their proposal.