Mercurial > code > home > repos > light9
annotate light9/web/graph.coffee @ 1350:36f58b2aa8ef
browser syncedgraph sends patches back to server
Ignore-this: eb8d3f018ff97f7389c4af3efa62fd9
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sun, 05 Jun 2016 03:21:31 +0000 |
parents | 5c54a1f94050 |
children | 6044e527d795 |
rev | line source |
---|---|
1346
2809a8b732f6
optimize graph lookup calls during zoom steps
Drew Perttula <drewp@bigasterisk.com>
parents:
1334
diff
changeset
|
1 log = console.log |
2809a8b732f6
optimize graph lookup calls during zoom steps
Drew Perttula <drewp@bigasterisk.com>
parents:
1334
diff
changeset
|
2 |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
3 # Patch is {addQuads: <quads>, delQuads: <quads>} |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
4 # <quads> is [{subject: s, ...}, ...] |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
5 |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
6 patchSizeSummary = (patch) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
7 '-' + patch.delQuads.length + ' +' + patch.addQuads.length |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
8 |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
9 # partial port of autodepgraphapi.py |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
10 class GraphWatchers |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
11 constructor: -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
12 @handlersSp = {} # {s: {p: [handlers]}} |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
13 subscribe: (s, p, o, onChange) -> # return subscription handle |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
14 if o? then throw Error('not implemented') |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
15 if not @handlersSp[s] |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
16 @handlersSp[s] = {} |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
17 if not @handlersSp[s][p] |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
18 @handlersSp[s][p] = [] |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
19 @handlersSp[s][p].push(onChange) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
20 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
21 unsubscribe: (subscription) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
22 throw Error('not implemented') |
1334
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
23 |
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
24 matchingHandlers: (quad) -> |
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
25 matches = [] |
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
26 for subjDict in [@handlersSp[quad.subject] || {}, @handlersSp[null] || {}] |
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
27 for subjPredMatches in [subjDict[quad.predicate] || [], subjDict[null] || []] |
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
28 matches = matches.concat(subjPredMatches) |
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
29 return matches |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
30 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
31 graphChanged: (patch) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
32 for quad in patch.delQuads |
1334
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
33 for cb in @matchingHandlers(quad) |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
34 # currently calls multiple times, which is ok, but we might |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
35 # group things into fewer patches |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
36 cb({delQuads: [quad], addQuads: []}) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
37 for quad in patch.addQuads |
1334
8406a9fbeb9d
note shape can be edited
Drew Perttula <drewp@bigasterisk.com>
parents:
1328
diff
changeset
|
38 for cb in @matchingHandlers(quad) |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
39 cb({delQuads: [], addQuads: [quad]}) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
40 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
41 |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
42 jsonPatch = (jsPatch, cb) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
43 out = {patch: {adds: '', deletes: ''}} |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
44 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
45 writeDels = (cb) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
46 writer = N3.Writer({ format: 'N-Quads' }) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
47 writer.addTriples(jsPatch.delQuads) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
48 writer.end((err, result) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
49 out.patch.deletes = result |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
50 cb()) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
51 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
52 writeAdds = (cb) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
53 writer = N3.Writer({ format: 'N-Quads' }) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
54 writer.addTriples(jsPatch.addQuads) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
55 writer.end((err, result) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
56 out.patch.adds = result |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
57 cb()) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
58 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
59 async.parallel([writeDels, writeAdds], (err) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
60 cb(JSON.stringify(out)) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
61 ) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
62 |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
63 class window.SyncedGraph |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
64 # Note that applyPatch is the only method to write to the graph, so |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
65 # it can fire subscriptions. |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
66 |
1347
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
67 constructor: (@patchSenderUrl, prefixes) -> |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
68 @graph = N3.Store() |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
69 @_addPrefixes(prefixes) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
70 @_watchers = new GraphWatchers() |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
71 @patchesToSend = [] |
1347
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
72 @newConnection() |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
73 |
1347
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
74 newConnection: -> |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
75 fullUrl = 'ws://' + window.location.host + @patchSenderUrl |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
76 @ws = new WebSocket(fullUrl) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
77 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
78 @ws.onopen = => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
79 log('connected to', fullUrl) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
80 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
81 @ws.onerror = (e) => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
82 log('ws error ' + e) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
83 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
84 @ws.onclose = => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
85 log('ws close') |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
86 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
87 @ws.onmessage = (evt) => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
88 @onMessage(JSON.parse(evt.data)) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
89 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
90 onMessage: (msg) -> |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
91 log('from rdfdb: ', msg) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
92 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
93 patch = {delQuads: [], addQuads: []} |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
94 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
95 parseAdds = (cb) => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
96 parser = N3.Parser() |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
97 parser.parse msg.patch.adds, (error, quad, prefixes) => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
98 if (quad) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
99 patch.addQuads.push(quad) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
100 else |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
101 cb() |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
102 parseDels = (cb) => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
103 parser = N3.Parser() |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
104 parser.parse msg.patch.deletes, (error, quad, prefixes) => |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
105 if (quad) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
106 patch.delQuads.push(quad) |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
107 else |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
108 cb() |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
109 |
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
110 async.parallel([parseAdds, parseDels], ((err) => @applyPatch(patch))) |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
111 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
112 _continueSending: -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
113 if @ws.readyState != @ws.OPEN |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
114 setTimeout(@_continueSending.bind(@), 500) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
115 return |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
116 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
117 # we could call this less often and coalesce patches together to optimize |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
118 # the dragging cases. |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
119 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
120 sendOne = (patch, cb) => |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
121 jsonPatch(patch, (json) => |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
122 log('send patch to server, ' + json.length + ' bytes') |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
123 @ws.send(json) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
124 cb(null) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
125 ) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
126 |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
127 async.eachSeries(@patchesToSend, sendOne, () => |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
128 @patchesToSend = [] |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
129 ) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
130 |
1347
5c54a1f94050
browser SyncedGraph client connects and receives patches
Drew Perttula <drewp@bigasterisk.com>
parents:
1346
diff
changeset
|
131 |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
132 _addPrefixes: (prefixes) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
133 @graph.addPrefixes(prefixes) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
134 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
135 Uri: (curie) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
136 N3.Util.expandPrefixedName(curie, @graph._prefixes) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
137 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
138 Literal: (jsValue) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
139 N3.Util.createLiteral(jsValue) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
140 |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
141 LiteralRoundedFloat: (f) -> |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
142 N3.Util.createLiteral(d3.format(".3f")(f), |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
143 "http://www.w3.org/2001/XMLSchema#decimal") |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
144 |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
145 toJs: (literal) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
146 # incomplete |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
147 parseFloat(N3.Util.getLiteralValue(literal)) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
148 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
149 loadTrig: (trig, cb) -> # for debugging |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
150 patch = {delQuads: [], addQuads: []} |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
151 parser = N3.Parser() |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
152 parser.parse trig, (error, quad, prefixes) => |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
153 if (quad) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
154 patch.addQuads.push(quad) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
155 else |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
156 @applyPatch(patch) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
157 @_addPrefixes(prefixes) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
158 cb() if cb |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
159 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
160 quads: () -> # for debugging |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
161 [q.subject, q.predicate, q.object, q.graph] for q in @graph.find() |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
162 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
163 applyAndSendPatch: (patch, cb) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
164 @applyPatch(patch) |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
165 console.log('queue patch to server ', patchSizeSummary(patch)) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
166 @patchesToSend.push(patch) |
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
167 @_continueSending() |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
168 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
169 applyPatch: (patch) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
170 # In most cases you want applyAndSendPatch. |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
171 # |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
172 # This is the only method that writes to the graph! |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
173 for quad in patch.delQuads |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
174 @graph.removeTriple(quad) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
175 for quad in patch.addQuads |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
176 @graph.addTriple(quad) |
1350
36f58b2aa8ef
browser syncedgraph sends patches back to server
Drew Perttula <drewp@bigasterisk.com>
parents:
1347
diff
changeset
|
177 log('applied patch locally', patchSizeSummary(patch)) |
1317
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
178 @_watchers.graphChanged(patch) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
179 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
180 getObjectPatch: (s, p, newObject, g) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
181 # send a patch which removes existing values for (s,p,*,c) and |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
182 # adds (s,p,newObject,c). Values in other graphs are not affected. |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
183 existing = @graph.findByIRI(s, p, null, g) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
184 return { |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
185 delQuads: existing, |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
186 addQuads: [{subject: s, predicate: p, object: newObject, graph: g}] |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
187 } |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
188 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
189 patchObject: (s, p, newObject, g) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
190 @applyAndSendPatch(@getObjectPatch(s, p, newObject, g)) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
191 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
192 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
193 subscribe: (s, p, o, onChange) -> # return subscription handle |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
194 # onChange is called with a patch that's limited to the quads |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
195 # that match your request. |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
196 # We call you immediately on existing triples. |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
197 @_watchers.subscribe(s, p, o, onChange) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
198 immediatePatch = {delQuads: [], addQuads: @graph.findByIRI(s, p, o)} |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
199 if immediatePatch.addQuads.length |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
200 onChange(immediatePatch) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
201 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
202 unsubscribe: (subscription) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
203 @_watchers.unsubscribe(subscription) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
204 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
205 floatValue: (s, p) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
206 quads = @graph.findByIRI(s, p) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
207 switch quads.length |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
208 when 0 then throw new Error("no value for "+s+" "+p) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
209 when 1 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
210 obj = quads[0].object |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
211 return parseFloat(N3.Util.getLiteralValue(obj)) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
212 else |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
213 throw new Error("too many values: " + JSON.stringify(quads)) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
214 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
215 stringValue: (s, p) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
216 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
217 uriValue: (s, p) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
218 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
219 objects: (s, p) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
220 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
221 subjects: (p, o) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
222 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
223 items: (list) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
224 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
225 contains: (s, p, o) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
226 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
227 ### |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
228 rdfstore.create((err, store) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
229 window.store = store |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
230 store.setPrefix('l9', "http://light9.bigasterisk.com/") |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
231 store.setPrefix('xsd', "http://www.w3.org/2001/XMLSchema#") |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
232 store.load('text/turtle', " |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
233 @prefix : <http://light9.bigasterisk.com/> . |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
234 @prefix dev: <http://light9.bigasterisk.com/device/> . |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
235 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
236 :demoResource :startTime 0.5 . |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
237 ", (err, n) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
238 console.log('loaded', n) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
239 store.graph (err, graph) -> |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
240 window.graph = graph |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
241 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
242 ) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
243 window.URI = (curie) -> store.rdf.createNamedNode(store.rdf.resolve(curie)) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
244 window.Lit = (value, dtype) -> store.rdf.createLiteral(value, null, URI(dtype)) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
245 |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
246 ) |
4c6d88aa9e26
enough element and rdf support to drag one adjuster and see its value change
Drew Perttula <drewp@bigasterisk.com>
parents:
diff
changeset
|
247 ### |