Update
This commit is contained in:
parent
23d4cdb566
commit
aa26470f5b
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
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,52 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Syndicate: Location</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
||||
<link href="style.css" rel="stylesheet">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mustache.js/2.2.1/mustache.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.3.0/js/md5.min.js"></script>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAgjLSNu9Cx4V1bNxhSTM4ZzqADbGoYmZ0"></script>
|
||||
<script src="../../dist/syndicatecompiler.js"></script>
|
||||
<script src="../../dist/syndicate.js"></script>
|
||||
<script type="text/syndicate-js" src="index.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<template id="json">
|
||||
<pre>{{ blob }}</pre>
|
||||
</template>
|
||||
<template id="info">
|
||||
<div>
|
||||
<p>
|
||||
{{ email }}<br>
|
||||
{{ address}}<br>
|
||||
<small>Last update: {{ timestamp }}</small>
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
<template id="markerList-option">
|
||||
<option value="{{ id }}">{{ email }}</option>
|
||||
</template>
|
||||
|
||||
<div id="map"></div>
|
||||
|
||||
<div class="row">
|
||||
<fieldset>
|
||||
<label for="my_email">Email (or name):</label>
|
||||
<input type="email" name="my_email" id="my_email">
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<label for="group">Group key:</label>
|
||||
<input type="text" name="group" id="group">
|
||||
</fieldset>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<fieldset>
|
||||
<select id="markerList"></select>
|
||||
<button id="findMarker">Find</button>
|
||||
</fieldset>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,140 @@
|
|||
assertion type location(id, email, timestamp, lat, lng);
|
||||
message type findMarker(id);
|
||||
|
||||
var brokerConnection = Syndicate.Broker.brokerConnection;
|
||||
var toBroker = Syndicate.Broker.toBroker;
|
||||
var fromBroker = Syndicate.Broker.fromBroker;
|
||||
|
||||
ground dataspace G {
|
||||
Syndicate.UI.spawnUIDriver();
|
||||
Syndicate.Timer.spawnTimerDriver();
|
||||
Syndicate.Broker.spawnBrokerClientDriver();
|
||||
|
||||
actor {
|
||||
var id = Syndicate.RandomID.randomId(4, true);
|
||||
|
||||
var email_element = document.getElementById('my_email');
|
||||
if (localStorage.my_email) {
|
||||
email_element.value = localStorage.my_email;
|
||||
} else {
|
||||
localStorage.my_email = email_element.value = id;
|
||||
}
|
||||
|
||||
var group_element = document.getElementById('group');
|
||||
var url_group_match = /group=(.*)$/.exec(document.location.search || '');
|
||||
if (url_group_match) {
|
||||
localStorage.group = group_element.value = url_group_match[1];
|
||||
} else if (localStorage.group) {
|
||||
group_element.value = localStorage.group;
|
||||
} else {
|
||||
localStorage.group = group_element.value = 'Public';
|
||||
}
|
||||
|
||||
var mapInitialized = false;
|
||||
var map = new google.maps.Map(document.getElementById('map'), {
|
||||
center: {lat: 42, lng: -71},
|
||||
zoom: 18
|
||||
});
|
||||
|
||||
var infoWindow = new google.maps.InfoWindow();
|
||||
var geocoder = new google.maps.Geocoder();
|
||||
|
||||
var wsurl_base = 'wss://demo-broker.syndicate-lang.org:8443/location/';
|
||||
var wsurl = wsurl_base + group_element.value.trim();
|
||||
|
||||
var watchId = ('geolocation' in navigator)
|
||||
&& navigator.geolocation.watchPosition(Syndicate.Dataspace.wrap(function (pos) {
|
||||
:: location(id,
|
||||
email_element.value.trim(),
|
||||
+new Date(),
|
||||
pos.coords.latitude,
|
||||
pos.coords.longitude);
|
||||
if (!mapInitialized && map) {
|
||||
mapInitialized = true;
|
||||
map.setCenter({lat: pos.coords.latitude, lng: pos.coords.longitude});
|
||||
}
|
||||
}));
|
||||
|
||||
react {
|
||||
var currentLocation = null;
|
||||
var selectedMarker = null;
|
||||
|
||||
assert brokerConnection(wsurl);
|
||||
assert toBroker(wsurl, currentLocation) when (currentLocation);
|
||||
|
||||
on message Syndicate.UI.globalEvent('#my_email', 'change', _) {
|
||||
localStorage.my_email = currentLocation[1] = email_element.value.trim();
|
||||
}
|
||||
|
||||
on message Syndicate.UI.globalEvent('#group', 'change', _) {
|
||||
localStorage.group = group_element.value.trim();
|
||||
wsurl = wsurl_base + group_element.value.trim();
|
||||
}
|
||||
|
||||
on message Syndicate.UI.globalEvent('#findMarker', 'click', $e) {
|
||||
:: findMarker(document.getElementById('markerList').value);
|
||||
}
|
||||
on message Syndicate.UI.globalEvent('#markerList', 'change', $e) {
|
||||
:: findMarker(document.getElementById('markerList').value);
|
||||
}
|
||||
|
||||
on message ($loc = location(_, _, _, _, _)) {
|
||||
currentLocation = loc;
|
||||
}
|
||||
|
||||
during fromBroker(wsurl, location($id, $email, _, _, _)) {
|
||||
var ui = new Syndicate.UI.Anchor();
|
||||
var marker = new google.maps.Marker({
|
||||
map: map,
|
||||
clickable: true,
|
||||
icon: 'https://www.gravatar.com/avatar/' + md5(email.trim().toLowerCase()) + '?s=32&d=retro'
|
||||
});
|
||||
var latestTimestamp = null;
|
||||
var latestPosition = null;
|
||||
function selectMarker() {
|
||||
selectedMarker = marker;
|
||||
updateInfoWindow();
|
||||
infoWindow.open(map, marker);
|
||||
}
|
||||
function updateInfoWindow() {
|
||||
if (selectedMarker === marker && latestPosition && latestTimestamp) {
|
||||
geocoder.geocode({'location': latestPosition}, function (results, status) {
|
||||
if (status === google.maps.GeocoderStatus.OK && results[0]) {
|
||||
infoWindow.setContent(Mustache.render(document.getElementById('info').innerHTML, {
|
||||
email: email,
|
||||
timestamp: latestTimestamp ? latestTimestamp.toString() : '',
|
||||
address: results[0].formatted_address
|
||||
}));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
do {
|
||||
marker.addListener('click', Syndicate.Dataspace.wrap(function () {
|
||||
selectMarker();
|
||||
}));
|
||||
}
|
||||
assert ui.html('#markerList',
|
||||
Mustache.render(document.getElementById('markerList-option').innerHTML, {
|
||||
id: id,
|
||||
email: email
|
||||
}));
|
||||
on message findMarker(id) {
|
||||
selectMarker();
|
||||
if (latestPosition) map.panTo(latestPosition);
|
||||
}
|
||||
on asserted fromBroker(wsurl, location(id, email, $timestamp, $lat, $lng)) {
|
||||
latestTimestamp = new Date(timestamp);
|
||||
latestPosition = {lat: lat, lng: lng};
|
||||
marker.setPosition(latestPosition);
|
||||
marker.setTitle(email + ' ' + latestTimestamp.toTimeString());
|
||||
updateInfoWindow();
|
||||
}
|
||||
finally {
|
||||
marker.setMap(null);
|
||||
if (selectedMarker === marker) selectedMarker = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#map {
|
||||
width: 100%;
|
||||
height: 75vh;
|
||||
}
|
||||
|
||||
.row {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.row fieldset {
|
||||
flex: 1;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.row fieldset label {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.row fieldset input {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
|
@ -2,7 +2,7 @@ assertion type person(id, firstName, lastName, address, age);
|
|||
message type setSortColumn(number);
|
||||
|
||||
function newRow(id, firstName, lastName, address, age) {
|
||||
actor {
|
||||
actor named ('model' + id) {
|
||||
react {
|
||||
assert person(id, firstName, lastName, address, age);
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ function spawnModel() {
|
|||
}
|
||||
|
||||
function spawnView() {
|
||||
actor {
|
||||
actor named 'view' {
|
||||
var ui = new Syndicate.UI.Anchor();
|
||||
var orderColumn = 2;
|
||||
|
||||
|
@ -41,7 +41,7 @@ function spawnView() {
|
|||
}
|
||||
|
||||
function spawnController() {
|
||||
actor {
|
||||
actor named 'controller' {
|
||||
react {
|
||||
on message Syndicate.UI.globalEvent('table#the-table th', 'click', $e) {
|
||||
:: setSortColumn(JSON.parse(e.target.dataset.column));
|
||||
|
|
|
@ -25,7 +25,8 @@ function todoListItemModel(initialId, initialTitle, initialCompleted) {
|
|||
this.title = initialTitle;
|
||||
this.completed = initialCompleted;
|
||||
|
||||
Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(todo(this.id,this.title,this.completed), 0); }))
|
||||
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(setCompleted(this.id,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: setCompleted(this.id,(Syndicate._$("v"))), metalevel: 0 }; }), (function(v) { this.completed = v; }))
|
||||
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(setAllCompleted(_), 0); }), (function() { var _ = Syndicate.__; return { assertion: setAllCompleted((Syndicate._$("v"))), metalevel: 0 }; }), (function(v) { this.completed = v; }))
|
||||
|
@ -33,7 +34,7 @@ function todoListItemModel(initialId, initialTitle, initialCompleted) {
|
|||
.onEvent(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));
|
||||
}))
|
||||
.onEvent(true, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(deleteTodo(this.id), 0); }), (function() { var _ = Syndicate.__; return { assertion: deleteTodo(this.id), metalevel: 0 }; }), (function() {})).completeBuild();
|
||||
.onEvent(true, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(deleteTodo(this.id), 0); }), (function() { var _ = Syndicate.__; return { assertion: deleteTodo(this.id), metalevel: 0 }; }), (function() {})).completeBuild(); })();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -50,9 +51,12 @@ function todoListItemView(id) {
|
|||
Syndicate.Actor.spawnActor(new Object(), function() {
|
||||
this.ui = new Syndicate.UI.Anchor();
|
||||
this.editing = false;
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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) { Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(show(completed), 0); }), (function() { var _ = Syndicate.__; return { assertion: show(completed), metalevel: 0 }; }), (function() { Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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) {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(show(completed), 0); }), (function() { var _ = Syndicate.__; return { assertion: show(completed), metalevel: 0 }; }), (function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(this.ui.html('.todo-list',Mustache.render(getTemplate(this.editing?'todo-list-item-edit-template':'todo-list-item-view-template'),{id:id,title:title,completed_class:completed?"completed":"",checked:completed?"checked":"",}),id), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(show(completed), 0); }), (function() { var _ = Syndicate.__; return { assertion: show(completed), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id,title,completed), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id,title,completed), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
|
@ -78,7 +82,7 @@ function todoListItemView(id) {
|
|||
Syndicate.Dataspace.send((newTitle ? setTitle(id, newTitle) : deleteTodo(id)));
|
||||
this.editing = false;
|
||||
}))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id,_,_), metalevel: 0 }; }), (function() {})).completeBuild();
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id,_,_), metalevel: 0 }; }), (function() {})).completeBuild(); })();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -88,33 +92,39 @@ var G = new Syndicate.Ground(function () {
|
|||
Syndicate.UI.spawnUIDriver();
|
||||
|
||||
Syndicate.Actor.spawnActor(new Object(), function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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 = "";
|
||||
})).completeBuild();
|
||||
})).completeBuild(); })();
|
||||
});
|
||||
|
||||
Syndicate.Actor.spawnActor(new Object(), function() {
|
||||
this.ui = new Syndicate.UI.Anchor();
|
||||
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(activeTodoCount(_), 0); }), (function() { var _ = Syndicate.__; return { assertion: activeTodoCount((Syndicate._$("count"))), metalevel: 0 }; }), (function(count) { Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(activeTodoCount(_), 0); }), (function() { var _ = Syndicate.__; return { assertion: activeTodoCount((Syndicate._$("count"))), metalevel: 0 }; }), (function(count) {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(this.ui.context('count').html('.todo-count strong',''+count), 0); }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return (count !== 1) ? Syndicate.Patch.assert(this.ui.context('plural').html('.todo-count span.s','s'), 0) : Syndicate.Patch.emptyPatch; }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(activeTodoCount(count), 0); }), (function() { var _ = Syndicate.__; return { assertion: activeTodoCount(count), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(totalTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: totalTodoCount(0), metalevel: 0 }; }), (function() { Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(totalTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: totalTodoCount(0), metalevel: 0 }; }), (function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('section.main','class','hidden'), 0); }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('footer.footer','class','hidden'), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(totalTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: totalTodoCount(0), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(completedTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: completedTodoCount(0), metalevel: 0 }; }), (function() { Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(completedTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: completedTodoCount(0), metalevel: 0 }; }), (function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('button.clear-completed','class','hidden'), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(completedTodoCount(0), 0); }), (function() { var _ = Syndicate.__; return { assertion: completedTodoCount(0), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(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());
|
||||
}))
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(allCompleted(), 0); }), (function() { var _ = Syndicate.__; return { assertion: allCompleted(), metalevel: 0 }; }), (function() { Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(allCompleted(), 0); }), (function() { var _ = Syndicate.__; return { assertion: allCompleted(), metalevel: 0 }; }), (function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addInitBlock((function() { Syndicate.Dataspace.send(Syndicate.UI.setProperty('.toggle-all', 'checked', true)); }))
|
||||
.addDoneBlock((function() { Syndicate.Dataspace.send(Syndicate.UI.setProperty('.toggle-all', 'checked', false)); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(allCompleted(), 0); }), (function() { var _ = Syndicate.__; return { assertion: allCompleted(), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
|
@ -123,36 +133,42 @@ var G = new Syndicate.Ground(function () {
|
|||
}))
|
||||
.onEvent(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);
|
||||
})).completeBuild();
|
||||
})).completeBuild(); })();
|
||||
});
|
||||
|
||||
Syndicate.Actor.spawnActor(new Object(), function() {
|
||||
var completedCount = 0;
|
||||
var activeCount = 0;
|
||||
Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")),_,(Syndicate._$("completed"))), metalevel: 0 }; }), (function(id, completed) { if (completed) completedCount++; else activeCount++; }))
|
||||
.onEvent(false, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")),_,(Syndicate._$("completed"))), metalevel: 0 }; }), (function(id, completed) { if (completed) completedCount--; else activeCount--; }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(activeTodoCount(activeCount), 0); }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(completedTodoCount(completedCount), 0); }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(totalTodoCount(activeCount+completedCount), 0); }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return (completedCount > 0 && activeCount === 0) ? Syndicate.Patch.assert(allCompleted(), 0) : Syndicate.Patch.emptyPatch; })).completeBuild();
|
||||
.addAssertion((function() { var _ = Syndicate.__; return (completedCount > 0 && activeCount === 0) ? Syndicate.Patch.assert(allCompleted(), 0) : Syndicate.Patch.emptyPatch; })).completeBuild(); })();
|
||||
});
|
||||
|
||||
Syndicate.Actor.spawnActor(new Object(), function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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) { Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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) {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(Syndicate.UI.uiAttribute('ul.filters > li > a[href="#'+hash+'"]','class','selected'), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash(hash), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash(hash), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/'), metalevel: 0 }; }), (function() { Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/'), metalevel: 0 }; }), (function() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(true), 0); }))
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(false), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/'), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(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() { Syndicate.Actor.createFacet()
|
||||
.onEvent(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() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(false), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/active'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/active'), metalevel: 0 }; }), (function() {})).completeBuild(); }))
|
||||
.onEvent(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() { Syndicate.Actor.createFacet()
|
||||
.onEvent(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() {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(show(true), 0); }))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/completed'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/completed'), metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild();
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.locationHash('/completed'), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.locationHash('/completed'), metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild(); })();
|
||||
});
|
||||
|
||||
Syndicate.Actor.spawnActor(new Object(), function() {
|
||||
|
@ -166,20 +182,24 @@ var G = new Syndicate.Ground(function () {
|
|||
}
|
||||
} else {
|
||||
db = {nextId: 0, todos: {}};
|
||||
Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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'));
|
||||
})).completeBuild();
|
||||
})).completeBuild(); })();
|
||||
}
|
||||
|
||||
Syndicate.Actor.createFacet()
|
||||
(function () {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(createTodo(_), 0); }), (function() { var _ = Syndicate.__; return { assertion: createTodo((Syndicate._$("title"))), metalevel: 0 }; }), (function(title) {
|
||||
todoListItemModel(db.nextId++, title, false);
|
||||
}))
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")),_,_), metalevel: 0 }; }), (function(id) { Syndicate.Actor.createFacet()
|
||||
.onEvent(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) { Syndicate.Actor.createFacet()
|
||||
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(_,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo((Syndicate._$("id")),_,_), metalevel: 0 }; }), (function(id) {
|
||||
Syndicate.Actor.createFacet()
|
||||
.onEvent(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) {
|
||||
Syndicate.Actor.createFacet()
|
||||
.addInitBlock((function() {
|
||||
db.todos[id] = {id: id, title: title, completed: completed};
|
||||
localStorage['todos-syndicate'] = JSON.stringify(db);
|
||||
|
@ -189,6 +209,6 @@ var G = new Syndicate.Ground(function () {
|
|||
delete db.todos[id];
|
||||
localStorage['todos-syndicate'] = JSON.stringify(db);
|
||||
}))
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id,_,_), metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild();
|
||||
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(todo(id,_,_), 0); }), (function() { var _ = Syndicate.__; return { assertion: todo(id,_,_), metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild(); })();
|
||||
});
|
||||
}).startStepping();
|
||||
|
|
Loading…
Reference in New Issue