on d64cdeb help sign in
256 lines 6.8 kB history raw
1function appendResult(title, result)
2{
3 //prepend the page with an additional relation result
4 var sheet = document.getElementById("sheet");
5 var template = document.getElementById("sectiontemplate").cloneNode(true);
6 template.removeAttribute("id");
7 var titleSpan = document.createElement("span");
8 titleSpan.textContent = title;
9 template.getElementsByClassName("title")[0].appendChild(titleSpan);
10 template.getElementsByClassName("result")[0].appendChild(result);
11 if(result.nodeName == "TABLE") // show some relation statistics
12 {
13 var tupleCount = result.querySelectorAll(".result > table > tbody > tr").length
14 var attrCount = result.querySelectorAll(".result > table > thead > tr > th").length
15 var attrText = attrCount + " attribute" + (attrCount == 1 ? "" : "s")
16 var tupleText = tupleCount + " tuple" + (tupleCount == 1 ? "" : "s")
17 template.getElementsByClassName("relinfo")[0].textContent = attrText + ", " + tupleText;
18 }
19 var interactor = document.getElementById("interactor");
20 sheet.insertBefore(template, interactor);
21 window.scrollTo(0,document.body.scrollHeight);
24function updateStatus(status)
26 var tutd = document.getElementById("tutd").value;
27 if(status.relation)
28 {
29 var relastable = conn.generateRelation(status.relation);
30 appendResult(tutd, relastable);
31 mungeEmptyRows();
32 }
33 if(status.acknowledgement)
34 {
35 var ok = document.createElement("span");
36 ok.textContent="OK";
37 appendResult(tutd, ok);
38 }
39 if(status.error)
40 {
41 var error = document.createElement("span");
42 error.textContent=status.error;
43 appendResult(tutd, error);
44 }
47function promptUpdate(headName, schemaName)
49 document.getElementById("promptinfo").textContent = "Current Branch: (" + headName + ") Schema: (" + schemaName + ")";
52function relationErrorAsString(errObj)
54 return errObj.tag + " " + errObj.contents;
57function notificationUpdate(notificationName, evaldNotif)
59 //generate two tables for display
60 var notifDiv = document.createElement('div');
61 var oldInfo = document.createElement('div');
62 oldInfo.textContent = "Pre-change info: ";
63 var newInfo = document.createElement('div');
64 newInfo.textContent = "Post-change info: ";
65 var status = "Notification received: " + notificationName;
67 if(evaldNotif.reportOldRelation.Left)
68 {
69 var errOld = evaldNotif.reportOldRelation.Left;
70 oldInfo.textContent += relationErrorAsString(errOld);
71 }
72 else if(evaldNotif.reportOldRelation.Right)
73 {
74 oldInfo.appendChild(conn.generateRelation(evaldNotif.reportOldRelation.Right));
75 }
77 if(evaldNotif.reportNewRelation.Left)
78 {
79 var errNew = evaldNotif.reportNewRelation.Left;
80 newInfo.textContent += relationErrorAsString(errNew);
81 }
82 else if(evaldNotif.reportNewRelation.Right)
83 {
84 newInfo.appendChild(conn.generateRelation(evaldNotif.reportNewRelation.Right));
85 }
87 notifDiv.appendChild(oldInfo);
88 notifDiv.appendChild(document.createElement('br'));
89 notifDiv.appendChild(newInfo);
90 appendResult(status,notifDiv);
91 mungeEmptyRows();
94var conn;
96function connectOrDisconnect(form)
98 var formin = form.elements;
99 var protocol = formin["protocol"].value;
100 var host = formin["host"].value;
101 var port = formin["port"].value;
102 var path = formin["path"].value;
103 var dbname = formin["dbname"].value;
105 var conninfo = document.getElementById("conninfo");
106 var promptInfo = document.getElementById("promptinfo");
108 if(window.conn && window.conn.readyState() == 1)
109 {
110 //disconnect
111 window.conn.close();
112 conninfo.textContent = "Connect to:";
114 toggleConnectionFields(form, true, "Connect");
115 promptInfo.textContent = "";
116 }
117 else
118 {
119 //connect
120 conninfo.textContent = "Connected to:";
121 window.conn = new ProjectM36Connection(protocol, host, port, path,
122 dbname,
123 connectionOpened,
124 connectionError,
125 updateStatus,
126 promptUpdate,
127 notificationUpdate,
128 connectionClosed);
129 toggleConnectionFields(form, false, "Connecting...");
130 }
131 return false;
134function connectionError(event)
136 var err = document.createElement("span");
137 err.textContent = "Failed to connect to websocket server. Please check the connection parameters and try again.";
138 appendResult("Connect", err);
139 connectionClosed(event)
142function connectionClosed(event)
144 toggleConnectionFields(document.getElementById("connection"), true, "Connect");
147function toggleConnectionFields(form, enabled, status)
149 form.elements["connect"].value = status;
150 var readonlyElements = [form.elements["host"],
151 form.elements["port"],
152 form.elements["dbname"],
153 form.elements["path"]];
154 var disableElements = [form.elements["protocol"],
155 ]
156 var enableElements = [document.getElementById("eval")];
158 for(var ein=0; ein < readonlyElements.length; ein++)
159 {
160 var e = readonlyElements[ein];
161 if(enabled)
162 {
163 e.removeAttribute("readonly");
164 }
165 else
166 {
167 e.setAttribute("readonly", "readonly");
168 }
169 }
170 //also update the eval/submit button
171 for(var ein=0; ein < disableElements.length; ein++)
172 {
173 var e = disableElements[ein];
174 if(enabled)
175 {
176 e.removeAttribute("disabled");
177 }
178 else
179 {
180 e.setAttribute("disabled", "disabled");
182 }
183 }
185 for(var ein=0; ein < enableElements.length; ein++)
186 {
187 var e = enableElements[ein];
188 if(!enabled)
189 {
190 e.removeAttribute("disabled");
191 }
192 else
193 {
194 e.setAttribute("disabled", "disabled");
196 }
197 }
203function connectionOpened(event)
205 toggleConnectionFields(document.getElementById("connection"), false, "Disconnect");
208function execTutorialD()
210 var tutd = document.getElementById("tutd").value;
211 if(!window.conn || window.conn.readyState() != 1)
212 {
213 var err = document.createElement("span");
214 err.textContent = "Cannot execute command until a database connection is established.";
215 appendResult(tutd, err);
216 }
217 else
218 {
219 conn.executeTutorialD(tutd);
220 }
221 return false;
224function hideResult(element)
226 var deleteNode = element.parentNode.parentNode;
227 element.parentNode.parentNode.parentNode.removeChild(deleteNode)
230function installSampleHandlers()
232 var samples = document.querySelectorAll("#samples li");
233 for(var idx = 0; idx < samples.length; idx++)
234 {
235 var tutd = document.getElementById("tutd");
236 var el = samples[idx];
237 el.onclick = function(el) {
238 tutd.value = el.target.textContent;
239 }
240 }
243function setupDefaultConfig()
245 var form = document.getElementById("connection");
246 for(var key in defaultConfig)
247 {
248 form.elements[key].value = defaultConfig[key];
249 }
252function pageload()
254 installSampleHandlers();
255 setupDefaultConfig();