@@ -1,85 +1,12 @@
11<html>
2+<!-- add server-side security (no file access but allowing date examples loading)
3+add connection parameters with reasonable defaults
4+-->
25<head>
36<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
47<title>Project:M36 WebSocket Client</title>
58<script type="text/javascript" src="project-m36.js"></script>
6−<script>
7−
8−function setStatus(text)
9−{
10− var newtext = document.createTextNode(text);
11− var statusnode = document.getElementById("status");
12− while( statusnode.firstChild ) {
13− statusnode.removeChild( statusnode.firstChild );
14− }
15− statusnode.appendChild(newtext);
16−}
17−
18−function appendResult(title, result)
19−{
20−//prepend the page with an additional relation result
21−var sheet = document.getElementById("sheet");
22−var template = document.getElementById("sectiontemplate").cloneNode(true);
23−template.removeAttribute("id");
24−var tutd = document.createElement("span");
25−tutd.textContent = title
26−template.getElementsByClassName("title")[0].appendChild(tutd);
27−template.getElementsByClassName("result")[0].appendChild(result);
28−if(result.nodeName == "TABLE") // show some relation statistics
29−{
30− var tupleCount = result.querySelectorAll(".result > table > tbody > tr").length
31− var attrCount = result.querySelectorAll(".result > table > thead > tr > th").length
32− var attrText = attrCount + " attribute" + (attrCount == 1 ? "" : "s")
33− var tupleText = tupleCount + " tuple" + (tupleCount == 1 ? "" : "s")
34− template.getElementsByClassName("relinfo")[0].textContent = attrText + ", " + tupleText;
35−}
36−var interactor = document.getElementById("interactor");
37−sheet.insertBefore(template, interactor);
38−window.scrollTo(0,document.body.scrollHeight);
39−}
40−
41−function updateStatus(status)
42−{
43−var tutd = document.getElementById("tutd").value;
44−if(status.relation)
45−{
46− var relastable = conn.generateRelation(status.relation);
47− appendResult(tutd, relastable);
48− mungeEmptyRows();
49−}
50−if(status.acknowledgement)
51−{
52−var ok = document.createElement("span");
53−ok.textContent="OK";
54− appendResult(tutd, ok);
55−}
56−if(status.error)
57−{
58−var error = document.createElement("span");
59−error.textContent=status.error;
60−appendResult(tutd, error);
61−}
62−}
63−
64−var conn = new ProjectM36Connection("127.0.0.1", "8888",
65− function(e) {setStatus("connected")},
66− function(e) {console.log("connection error"+e)},
67− updateStatus,
68− function(e) { setStatus("disconnected")});
69−
70−function execTutorialD()
71−{
72−var tutd = document.getElementById("tutd").value;
73−conn.executeTutorialD(tutd);
74−return false;
75−}
76−
77−function hideParent(element)
78−{
79−var deleteNode = element.parentNode;
80− element.parentNode.parentNode.removeChild(deleteNode)
81−}
82−</script>
9+<script type="text/javascript" src="websocket-client.js"></script>
8310<style>
8411#sectiontemplate
8512{
@@ -129,6 +56,11 @@ margin: 3px;
12956 background-image: linear-gradient(to top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0));
13057}
13158
59+#connection input
60+{
61+ width: 100px;
62+}
63+
13264</style>
13365</head>
13466<body>
@@ -136,7 +68,9 @@ margin: 3px;
13668<p>Try the <a href="https://github.com/agentm/project-m36/blob/master/docs/15_minute_tutorial.markdown">15 minute TutorialD Tutorial</a>.</p>
13769<div id="sheet">
13870 <div id="interactor">
139− <p>Status:<span id="status">Fresh</span></p>
71+ <form onsubmit="return connectOrDisconnect(this);" id="connection">
72+ <label>Connection:</label><input type="text" name="host" value="localhost" placeholder="Host"/>:<input type="number" placeholder="Port" name="port" min="0" max="32767" value="8888"/>/<input type="text" placeholder="Database Name" name="dbname" value="test"/><input type="submit" name="connect" value="Connect"/>
73+ </form>
14074 <form onsubmit="return execTutorialD();">
14175 <input type="text" id="tutd"/>
14276 <input type="submit"/>