This commit is contained in:
Tony Garnock-Jones 2016-06-11 07:04:45 -04:00
parent aa26470f5b
commit a2168f9262
10 changed files with 202 additions and 41 deletions

View File

@ -154,7 +154,7 @@ var modifiedSourceActions = {
},
FacetSituation_assert: function(_assert, expr, whenClause, _sc) {
return '\n.addAssertion(' + buildSubscription([expr], 'assert', 'pattern', whenClause) + ')';
return '\n.addAssertion(' + buildSubscription([expr], 'assert', 'pattern', whenClause, null) + ')';
},
FacetSituation_event: function(_on, eventPattern, block) {
return buildOnEvent(false,
@ -168,18 +168,20 @@ var modifiedSourceActions = {
return '\n.addOnEventHandler((function(' + id.asES5 + ') ' + block.asES5 + '))';
},
FacetSituation_during: function(_during, pattern, facetBlock) {
var cachedAssertionVar = gensym('cachedAssertion');
return buildOnEvent(false,
'asserted',
pattern.subscription,
pattern.projection,
pattern.bindings,
'{ ' + facetBlock.facetVarDecls +
'\nvar '+cachedAssertionVar+' = '+pattern.instantiatedAssertion+';'+
'\nSyndicate.Actor.createFacet()' +
facetBlock.asES5 +
buildOnEvent(true,
'retracted',
pattern.instantiatedSubscription,
pattern.instantiatedProjection,
pattern.instantiatedSubscription(cachedAssertionVar),
pattern.instantiatedProjection(cachedAssertionVar),
[],
'{}') +
'.completeBuild(); }');
@ -223,7 +225,7 @@ semantics.addAttribute('eventType', {
FacetTransitionEventPattern_risingEdge: function (_lp, expr, _rp) { return 'risingEdge'; }
});
function buildSubscription(children, patchMethod, mode, whenClause) {
function buildSubscription(children, patchMethod, mode, whenClause, cachedAssertionVar) {
var fragments = [];
var hasWhenClause = (whenClause && (whenClause.numChildren === 1));
fragments.push('(function() { var _ = Syndicate.__; return ');
@ -235,7 +237,11 @@ function buildSubscription(children, patchMethod, mode, whenClause) {
} else {
fragments.push('{ assertion: ');
}
children.forEach(function (c) { c.buildSubscription(fragments, mode); });
if (cachedAssertionVar) {
fragments.push(cachedAssertionVar);
} else {
children.forEach(function (c) { c.buildSubscription(fragments, mode); });
}
if (patchMethod) {
fragments.push(', ');
} else {
@ -256,25 +262,35 @@ function buildSubscription(children, patchMethod, mode, whenClause) {
semantics.addAttribute('subscription', {
_default: function(children) {
return buildSubscription(children, 'sub', 'pattern', null);
return buildSubscription(children, 'sub', 'pattern', null, null);
}
});
semantics.addAttribute('instantiatedSubscription', {
semantics.addAttribute('instantiatedAssertion', {
_default: function(children) {
return buildSubscription(children, 'sub', 'instantiated', null);
var fragments = [];
fragments.push('(function() { var _ = Syndicate.__; return ');
children.forEach(function (c) { c.buildSubscription(fragments, 'instantiated'); });
fragments.push('; })()');
return fragments.join('');
}
});
semantics.addAttribute('instantiatedProjection', {
semantics.addOperation('instantiatedSubscription(cachedAssertionVar)', {
_default: function(children) {
return buildSubscription(children, null, 'instantiated', null);
return buildSubscription(children, 'sub', 'instantiated', null, this.args.cachedAssertionVar);
}
});
semantics.addOperation('instantiatedProjection(cachedAssertionVar)', {
_default: function(children) {
return buildSubscription(children, null, 'instantiated', null, this.args.cachedAssertionVar);
}
});
semantics.addAttribute('projection', {
_default: function(children) {
return buildSubscription(children, null, 'projection', null);
return buildSubscription(children, null, 'projection', null, null);
}
});
@ -529,7 +545,7 @@ function translateSyndicateScripts() {
var output = compiler.compileSyndicateSource(allSourceText);
var f = new Function(output);
f();
f.call(window);
}
document.addEventListener('DOMContentLoaded', translateSyndicateScripts, false);

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,7 @@
<form name="nym_form">
<fieldset>
<label class="control-label" for="wsurl">Server:</label>
<input type="text" id="wsurl" name="wsurl" value="ws://demo-broker.syndicate-lang.org:8000/">
<input type="text" id="wsurl" name="wsurl" value="wss://demo-broker.syndicate-lang.org:8443/">
<label class="control-label" for="nym">Nym:</label>
<input type="text" id="nym" name="nym" value="">

1
examples/location/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.expanded.js

View File

@ -0,0 +1,7 @@
all: index.expanded.js
%.expanded.js: %.js
../../bin/syndicatec $< > $@ || (rm -f $@; false)
clean:
rm -f *.expanded.js

View File

@ -0,0 +1,125 @@
"use strict";
var locationRecord = Syndicate.Struct.makeConstructor('location', ["id","email","timestamp","lat","lng"]);
var findMarker = Syndicate.Struct.makeConstructor("findMarker", ["id"]);
var brokerConnection = Syndicate.Broker.brokerConnection;
var toBroker = Syndicate.Broker.toBroker;
var fromBroker = Syndicate.Broker.fromBroker;
var G = new Syndicate.Ground(function () {
Syndicate.UI.spawnUIDriver();
Syndicate.Timer.spawnTimerDriver();
Syndicate.Broker.spawnBrokerClientDriver();
Syndicate.Actor.spawnActor(new Object(), function() {
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) {
Syndicate.Dataspace.send(locationRecord(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});
}
}));
(function () { var currentLocation = null; var selectedMarker = null;
Syndicate.Actor.createFacet()
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(brokerConnection(wsurl), 0); }))
.addAssertion((function() { var _ = Syndicate.__; return (currentLocation) ? Syndicate.Patch.assert(toBroker(wsurl,currentLocation), 0) : Syndicate.Patch.emptyPatch; }))
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('#my_email','change',_), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('#my_email','change',_), metalevel: 0 }; }), (function() {
localStorage.my_email = currentLocation[1] = email_element.value.trim();
}))
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('#group','change',_), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('#group','change',_), metalevel: 0 }; }), (function() {
localStorage.group = group_element.value.trim();
wsurl = wsurl_base + group_element.value.trim();
}))
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('#findMarker','click',_), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('#findMarker','click',(Syndicate._$("e"))), metalevel: 0 }; }), (function(e) {
Syndicate.Dataspace.send(findMarker(document.getElementById('markerList').value));
}))
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(Syndicate.UI.globalEvent('#markerList','change',_), 0); }), (function() { var _ = Syndicate.__; return { assertion: Syndicate.UI.globalEvent('#markerList','change',(Syndicate._$("e"))), metalevel: 0 }; }), (function(e) {
Syndicate.Dataspace.send(findMarker(document.getElementById('markerList').value));
}))
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub((locationRecord(_,_,_,_,_)), 0); }), (function() { var _ = Syndicate.__; return { assertion: ((Syndicate._$("loc",locationRecord(_,_,_,_,_)))), metalevel: 0 }; }), (function(loc) {
currentLocation = loc;
}))
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(fromBroker(wsurl,locationRecord(_,_,_,_,_)), 0); }), (function() { var _ = Syndicate.__; return { assertion: fromBroker(wsurl,locationRecord((Syndicate._$("id")),(Syndicate._$("email")),_,_,_)), metalevel: 0 }; }), (function(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
}));
}
});
}
}
var _cachedAssertion1465643052024_0 = (function() { var _ = Syndicate.__; return fromBroker(wsurl,locationRecord(id,email,_,_,_)); })();
Syndicate.Actor.createFacet()
.addInitBlock((function() {
marker.addListener('click', Syndicate.Dataspace.wrap(function () {
selectMarker();
}));
}))
.addAssertion((function() { var _ = Syndicate.__; return Syndicate.Patch.assert(ui.html('#markerList',Mustache.render(document.getElementById('markerList-option').innerHTML,{id:id,email:email})), 0); }))
.onEvent(false, "message", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(findMarker(id), 0); }), (function() { var _ = Syndicate.__; return { assertion: findMarker(id), metalevel: 0 }; }), (function() {
selectMarker();
if (latestPosition) map.panTo(latestPosition);
}))
.onEvent(false, "asserted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(fromBroker(wsurl,locationRecord(id,email,_,_,_)), 0); }), (function() { var _ = Syndicate.__; return { assertion: fromBroker(wsurl,locationRecord(id,email,(Syndicate._$("timestamp")),(Syndicate._$("lat")),(Syndicate._$("lng")))), metalevel: 0 }; }), (function(timestamp, lat, lng) {
latestTimestamp = new Date(timestamp);
latestPosition = {lat: lat, lng: lng};
marker.setPosition(latestPosition);
marker.setTitle(email + ' ' + latestTimestamp.toTimeString());
updateInfoWindow();
}))
.addDoneBlock((function() {
marker.setMap(null);
if (selectedMarker === marker) selectedMarker = null;
}))
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643052024_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643052024_0, metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild(); })();
});
}).startStepping();

View File

@ -8,9 +8,7 @@
<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>
<script src="../../dist/syndicate.min.js"></script>
</head>
<body>
<template id="json">
@ -48,5 +46,7 @@
<button id="findMarker">Find</button>
</fieldset>
</div>
<script src="index.expanded.js"></script>
</body>
</html>

View File

@ -1,4 +1,4 @@
assertion type location(id, email, timestamp, lat, lng);
assertion type locationRecord(id, email, timestamp, lat, lng) = 'location';
message type findMarker(id);
var brokerConnection = Syndicate.Broker.brokerConnection;
@ -44,11 +44,11 @@ ground dataspace G {
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);
:: locationRecord(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});
@ -78,11 +78,11 @@ ground dataspace G {
:: findMarker(document.getElementById('markerList').value);
}
on message ($loc = location(_, _, _, _, _)) {
on message ($loc = locationRecord(_, _, _, _, _)) {
currentLocation = loc;
}
during fromBroker(wsurl, location($id, $email, _, _, _)) {
during fromBroker(wsurl, locationRecord($id, $email, _, _, _)) {
var ui = new Syndicate.UI.Anchor();
var marker = new google.maps.Marker({
map: map,
@ -123,7 +123,7 @@ ground dataspace G {
selectMarker();
if (latestPosition) map.panTo(latestPosition);
}
on asserted fromBroker(wsurl, location(id, email, $timestamp, $lat, $lng)) {
on asserted fromBroker(wsurl, locationRecord(id, email, $timestamp, $lat, $lng)) {
latestTimestamp = new Date(timestamp);
latestPosition = {lat: lat, lng: lng};
marker.setPosition(latestPosition);

View File

@ -22,7 +22,7 @@ ground dataspace G {
return Math.max(Math.min(v, limit), -limit);
}
var wsurl = 'ws://demo-broker.syndicate-lang.org:8000/';
var wsurl = 'wss://demo-broker.syndicate-lang.org:8443/';
react {
assert brokerConnection(wsurl);

View File

@ -54,12 +54,14 @@ function todoListItemView(id) {
(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) {
var _cachedAssertion1465643053181_0 = (function() { var _ = Syndicate.__; return todo(id,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() {
var _cachedAssertion1465643053181_1 = (function() { var _ = Syndicate.__; return show(completed); })();
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(); }))
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_1, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_1, metalevel: 0 }; }), (function() {})).completeBuild(); }))
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_0, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_0, metalevel: 0 }; }), (function() {})).completeBuild(); }))
.onEvent(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));
}))
@ -107,27 +109,31 @@ 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) {
var _cachedAssertion1465643053181_2 = (function() { var _ = Syndicate.__; return activeTodoCount(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(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_2, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_2, 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() {
var _cachedAssertion1465643053181_3 = (function() { var _ = Syndicate.__; return totalTodoCount(0); })();
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(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_3, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_3, 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() {
var _cachedAssertion1465643053181_4 = (function() { var _ = Syndicate.__; return completedTodoCount(0); })();
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(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_4, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_4, 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() {
var _cachedAssertion1465643053181_5 = (function() { var _ = Syndicate.__; return allCompleted(); })();
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(); }))
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_5, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_5, metalevel: 0 }; }), (function() {})).completeBuild(); }))
.onEvent(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));
}))
@ -153,22 +159,26 @@ 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) {
var _cachedAssertion1465643053181_6 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash(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(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_6, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_6, 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() {
var _cachedAssertion1465643053181_7 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/'); })();
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(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_7, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_7, 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() {
var _cachedAssertion1465643053181_8 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/active'); })();
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(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_8, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_8, 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() {
var _cachedAssertion1465643053181_9 = (function() { var _ = Syndicate.__; return Syndicate.UI.locationHash('/completed'); })();
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(_cachedAssertion1465643053181_9, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_9, metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild(); })();
});
Syndicate.Actor.spawnActor(new Object(), function() {
@ -197,18 +207,20 @@ Syndicate.Actor.createFacet()
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) {
var _cachedAssertion1465643053181_10 = (function() { var _ = Syndicate.__; return todo(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) {
var _cachedAssertion1465643053181_11 = (function() { var _ = Syndicate.__; return todo(id,title,completed); })();
Syndicate.Actor.createFacet()
.addInitBlock((function() {
db.todos[id] = {id: id, title: title, completed: completed};
localStorage['todos-syndicate'] = JSON.stringify(db);
}))
.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(); }))
.onEvent(true, "retracted", (function() { var _ = Syndicate.__; return Syndicate.Patch.sub(_cachedAssertion1465643053181_11, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_11, metalevel: 0 }; }), (function() {})).completeBuild(); }))
.addDoneBlock((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(_cachedAssertion1465643053181_10, 0); }), (function() { var _ = Syndicate.__; return { assertion: _cachedAssertion1465643053181_10, metalevel: 0 }; }), (function() {})).completeBuild(); })).completeBuild(); })();
});
}).startStepping();