aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Benjamin Barenblat <bbaren@mit.edu>2011-02-20 22:55:41 -0500
committerGravatar Benjamin Barenblat <bbaren@mit.edu>2011-02-20 22:55:41 -0500
commita742e43c387d089b344c0e293cf1b4292ee57c58 (patch)
treecd5d34ffe07f583b52221f1732f4faef482f77ef
parent2b2b8ffc0d9978778aa38525a55cdddf2942cef7 (diff)
Added dynamically generated behavior menu to Web interface
The menu makes a GET request to obtain the available behaviors as a JSON list; it then generates a dropdown from which a behavior can be selected. You should change installationEntryPointURL in control.js to point to the appropriate resource.
-rw-r--r--web/js/control.js70
-rw-r--r--web/smootlight.html17
2 files changed, 87 insertions, 0 deletions
diff --git a/web/js/control.js b/web/js/control.js
new file mode 100644
index 0000000..8fce419
--- /dev/null
+++ b/web/js/control.js
@@ -0,0 +1,70 @@
+/* control.js - control the SmootLight installation
+ *
+ * Copyright (C) 2011 by Benjamin Barenblat
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * Except as contained in this notice, the name(s) of the above copyright
+ * holders shall not be used in advertising or otherwise to promote the sale,
+ * use or other dealings in this Software without prior written authorization.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * The script talks with the installation by making HTTP requests to the given
+ * URL.
+ */
+const installationEntryPointURL = "lights.json"
+
+/**
+ * Reloads the behavior list, updating the control form accordingly.
+ */
+function refreshBehaviorList() {
+ const request = { "OperationType": "ListAll",
+ "Key": "Behaviors" };
+ $.getJSON(installationEntryPointURL,
+ request,
+ function(behaviors) {
+ setBehaviors(behaviors);
+ showRefreshButton();
+ });
+}
+
+/**
+ * Sets the behavior list in the control form.
+ *
+ * @param behaviors Array of behavior objects to set. Each object must have a
+ * name field, which will be displayed as the behavior's name.
+ */
+function setBehaviors(behaviors) {
+ $("#behaviors option").remove()
+ for (var i = 0; i < behaviors.length; i++) {
+ $("#behaviors").append("<option value=\""
+ + behaviors[i].name
+ + "\">"
+ + behaviors[i].name
+ + "</option>");
+ }
+}
+
+function showRefreshButton() {
+ $("#preferences #refreshBehaviorListButton").removeClass("invisible");
+}
+
+// Refresh the behavior list as soon as the DOM is available.
+$(refreshBehaviorList);
diff --git a/web/smootlight.html b/web/smootlight.html
index b52a7e2..ff50964 100644
--- a/web/smootlight.html
+++ b/web/smootlight.html
@@ -2,11 +2,28 @@
<head>
<title>SmootLight</title>
<script type='text/javascript' src='js/smootCanvas.js'></script>
+<script type='text/javascript' src='http://code.jquery.com/jquery-1.5.min.js'></script>
+<script type='text/javascript' src='js/control.js'></script>
+
+<style type='text/css'>
+ .invisible {
+ display: none;
+ }
+</style>
</head>
<body>
<canvas id='canvas' style='margin: 50px 25px;' width='800px' height='500px'></canvas>
<div id='connection'></div>
<div id='framerate'></div>
+
+ <div id='control'>
+ <form id='preferences' action='#'>
+ <select id='behaviors'>
+ <option>Loading behaviors&hellip;</option>
+ </select>
+ <input id='refreshBehaviorListButton' type='button' value='Refresh behavior list' onclick='refreshBehaviorList()' class='invisible' />
+ </form>
+ </div>
</body>
</html> \ No newline at end of file