@@ -0,0 +1,167 @@
1+//refactor this into a client library
2+var socket = new WebSocket("ws://localhost:8888");
3+socket.onopen = function(event) {
4+ console.log("connected");
5+ setStatus("connected");
6+}
7+socket.onerror = function(event) {
8+ console.log("error: " + event);
9+}
10+socket.onmessage = function (event) {
11+ console.log("message received: " + event.data);
12+ var msg = JSON.parse(event.data);
13+ handleResponse(msg);
14+}
15+socket.onclose = function(event) {
16+ console.log("conn closed: " + event);
17+ setStatus("disconnected");
18+}
19+
20+function setStatus(text)
21+{
22+ var newtext = document.createTextNode(text);
23+ var statusnode = document.getElementById("status");
24+ while( statusnode.firstChild ) {
25+ statusnode.removeChild( statusnode.firstChild );
26+ }
27+ statusnode.appendChild(newtext);
28+}
29+
30+function execTutorialD()
31+{
32+ var tutd = document.getElementById("tutd").value;
33+ socket.send("executetutd:" + tutd);
34+ return false;
35+}
36+
37+function handleResponse(message)
38+{
39+ var relation = message["displayrelation"];
40+ var acknowledged = message["acknowledged"];
41+ var error = message["displayerror"];
42+ if(relation)
43+ {
44+ var reltable = generateRelation(relation);
45+ var existingtable = document.getElementById("relationresult");
46+ while(existingtable.firstChild)
47+ {
48+ existingtable.removeChild(existingtable.firstChild);
49+ }
50+ reltable.id = "relationresult";
51+ existingtable.parentNode.replaceChild(reltable, existingtable);
52+ }
53+ else
54+ {
55+ }
56+
57+ var message = "";
58+ if(acknowledged)
59+ {
60+ message="acknowledged";
61+ }
62+ if(error)
63+ {
64+ message=error;
65+ }
66+ document.getElementById("resultstatus").innerHTML = message;
67+}
68+
69+function generateRelation(relation)
70+{
71+ var table = document.createElement("table");
72+
73+ var headers = generateRelationHeader(relation[0]);
74+ var body = generateRelationBody(relation[1]);
75+
76+ table.appendChild(headers);
77+ table.appendChild(body);
78+
79+ return table;
80+}
81+
82+function generateRelationHeader(header)
83+{
84+ var thead = document.createElement("thead");
85+ var headerrow = document.createElement("tr");
86+ for(var hindex=0; hindex < header.length; hindex++)
87+ {
88+ var th = document.createElement("th");
89+ var attrtype = generateAtomType(header[hindex]);
90+ th.appendChild(attrtype);
91+ headerrow.appendChild(th);
92+ }
93+ thead.appendChild(headerrow);
94+ return thead;
95+}
96+
97+function generateAtomType(attr)
98+{
99+ var atomType = attr[1]["tag"];
100+ var attrName = attr[0];
101+ var element = document.createElement("span");
102+ element.textContent = attrName + "::";
103+ if(atomType == "AtomType")
104+ {
105+ element.textContent += attr[1]["contents"]["serialrep"][0][2];
106+ }
107+ else if (atomType == "RelationAtomType")
108+ {
109+ var table = document.createElement("table");
110+ element.appendChild(table);
111+ var thead = document.createElement("thead");
112+ element.appendChild(thead);
113+ var tr = document.createElement("tr");
114+ thead.appendChild(tr);
115+ var relattrs = attr[1]["contents"];
116+ for(var attrindex = 0; attrindex < relattrs.length; attrindex++)
117+ {
118+ var th = document.createElement("th");
119+ var relattrNode = generateAtomType(relattrs[attrindex]);
120+ th.appendChild(relattrNode);
121+ tr.appendChild(th);
122+ }
123+ }
124+ else
125+ {
126+ element.textContent = "unknown";
127+ }
128+ return element
129+}
130+
131+function generateRelationBody(body)
132+{
133+ var bodyrows = body["asList"]
134+ var tbody = document.createElement("tbody");
135+ for(var rindex=0; rindex < bodyrows.length; rindex++)
136+ {
137+ var tablerow = document.createElement("tr");
138+ var bodyrow = bodyrows[rindex];
139+ for(var atomindex=0; atomindex < bodyrow[1].length; atomindex++)
140+ {
141+ var td = document.createElement("td");
142+ var atomNode = generateAtom(bodyrow[1][atomindex]);
143+ td.appendChild(atomNode);
144+ tablerow.appendChild(td);
145+ }
146+ tbody.appendChild(tablerow);
147+ }
148+ return tbody;
149+}
150+
151+function generateAtom(atom)
152+{
153+ var element = document.createElement("span");
154+ var atomType = atom["type"]["tag"];
155+
156+ if(atomType == "RelationAtomType")
157+ {
158+ var rel = generateRelation(atom["val"]);
159+ element.appendChild(rel);
160+ }
161+ else
162+ {
163+ element.textContent = atom["val"];
164+ }
165+ return element;
166+}
167+