diff --git a/sumorobot.js b/sumorobot.js
index 3ef48d1..0745b59 100755
--- a/sumorobot.js
+++ b/sumorobot.js
@@ -7,6 +7,8 @@ var remoteControl = false;
var sumostart = false;
/* the sumorobot object */
var sumorobot = null;
+/* disable enable hotkeys */
+var hotkeys = true;
/* the sumorobot code */
var sumocode = "";
@@ -16,7 +18,7 @@ var Sumorobot = function(wsUri) {
/* start connecting to the WebSocket */
this.connect();
/* to ping the robot */
- this.watchdogHandler = null;
+ this.watchdogTimer = null;
};
Sumorobot.prototype.connect = function() {
@@ -27,7 +29,7 @@ Sumorobot.prototype.connect = function() {
this.websocket.onopen = function(evt) {
console.log("INFO websocket connected");
/* setup a timer to ping the robot */
- watchdogTimer = setInterval(function() {
+ self.watchdogTimer = setInterval(function() {
/* send a ping to the robot */
console.log("ping the robot")
self.send("ping");
@@ -37,7 +39,7 @@ Sumorobot.prototype.connect = function() {
this.websocket.onclose = function(evt) {
console.log("INFO websocket disconnected");
/* clear the pinging */
- clearInterval(watchdogTimer);
+ clearInterval(self.watchdogTimer);
/* Try to recnnect to the sumorobot */
self.connect();
};
@@ -61,6 +63,51 @@ Sumorobot.prototype.send = function(msg) {
};
window.onload = function() {
+ /* function to update the control panel */
+ function updateControlPanel() {
+ /* hide all buttons and text fields */
+ $(".robot-id, .robot-nr, .btn-robot-nr").hide();
+ /* show the first button and text field */
+ $(".robot-id:eq(0), .robot-nr:eq(0), .btn-robot-nr:eq(0)").show();
+
+ /* adjust the buttons and text fields to be in the middle */
+ $(".input-group, .btn-group-robot").css("width", "20%");
+ $(".input-group, .btn-group-robot").css("margin-left", "40%");
+
+ /* hide the robot add button */
+ $(".btn-robot-add").hide();
+
+ /* populate robots IDs and buttons */
+ for (var i = 0; i < 5; i++) {
+ var id = getLocalStorageItem("sumorobot.robotID" + i);
+ if (id) {
+ $(".robot-id:eq(" + i + ")").val(id);
+ $(".robot-id:eq(" + i + "), .robot-nr:eq(" + i + "), .btn-robot-nr:eq(" + i + ")").show();
+ $(".input-group, .btn-group-robot").css("width", 20 + (i * 20) + "%");
+ $(".input-group, .btn-group-robot").css("margin-left", 40 - (i * 10) + "%");
+ } else {
+ /* when no robots yet added */
+ if (i != 0) {
+ /* show the robot add button */
+ $(".btn-robot-add").show();
+ $(".btn-group-robot").css("width", 20 + (i * 20) + "%");
+ $(".input-group, .btn-group-robot").css("margin-left", 40 - (i * 10) + "%");
+ /* add click listener to the robot add button */
+ $(".btn-robot-add").click(function() {
+ $(".robot-id:eq(" + i + "), .robot-nr:eq(" + i + "), .btn-robot-nr:eq(" + i + ")").show();
+ $(".input-group, .btn-group-robot").css("width", 20 + (i * 20) + "%");
+ $(".input-group, .btn-group-robot").css("margin-left", 40 - (i * 10) + "%");
+ $(this).hide();
+ });
+ }
+ break;
+ }
+ }
+ }
+
+ /* load the control panel */
+ updateControlPanel();
+
/* remove previous and next statement from if block */
Blockly.Blocks.controls_if.init = function() {
this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);
@@ -218,12 +265,26 @@ window.onload = function() {
/* on blockly code change */
function onCodeChanged(event) {
- /* generate code from the blocks and show the code to the user */
- document.getElementById("blocklyCode").value = Blockly.Sumorobot.workspaceToCode(workspace);
+ /* generate code from the used blocks */
+ var code = Blockly.Sumorobot.workspaceToCode(workspace);
+
+ /* show the code to the user */
+ document.getElementById("blocklyCode").value = code;
/* save the code to the local storage */
var xml = Blockly.Xml.workspaceToDom(workspace);
localStorage.setItem("sumorobot.currentProgram", Blockly.Xml.domToText(xml));
+
+ /* if the if condition block is used */
+ if (code.indexOf("if") != -1) {
+ /* disable the if condition block */
+ $("block[type=controls_if]").replaceWith("");
+ workspace.updateToolbox(document.getElementById("toolbox"));
+ } else {
+ /* enable the if condition block */
+ $("block[type=controls_if]").replaceWith("");
+ workspace.updateToolbox(document.getElementById("toolbox"));
+ }
}
/* add a change listener to Blockly */
@@ -231,8 +292,8 @@ window.onload = function() {
/* key down event */
$(document).keydown(function(e) {
- /* if the focused element is a textarea or text input, don't use hotkeys */
- if ($(e.target).is("textarea") || $(e.target).is("[type=text]")) return;
+ /* if the hotkeys are disabled or the focused element is a textarea or text input, don't use hotkeys */
+ if (hotkeys == false || $(e.target).is("textarea") || $(e.target).is("[type=text]")) return;
/* select the hotkey */
switch(e.which) {
case 32: // space bar
@@ -273,7 +334,7 @@ window.onload = function() {
$(".btn-robot-nr:eq(4)").click();
break;
case 67: // c
- panel();
+ updateControlPanel();
$("#panel").toggle();
break;
case 82: // r
@@ -292,10 +353,10 @@ window.onload = function() {
/* key up event */
$(document).keyup(function(e) {
+ /* if the hotkeys are disabled or the focused element is a textarea or text input, don't use hotkeys */
+ if (hotkeys == false || $(e.target).is("textarea") || $(e.target).is("[type=text]")) return;
/* remove hover from buttons */
$('.btn').removeClass('hover');
- /* if the focused element is a textarea or text input, don't use hotkeys */
- if ($(e.target).is("textarea") || $(e.target).is("[type=text]")) return;
/* if arrow keys */
if (e.which == 37 || e.which == 38 || e.which == 39 || e.which == 40) {
if (remoteControl) sumorobot.send("stop");
@@ -304,11 +365,13 @@ window.onload = function() {
/* start button listener */
$(".btn-start").click(function() {
+ sumostart = true;
sumorobot.send("start:" + document.getElementById("blocklyCode").value.replace(/sumorobot./g, ""));
});
/* stop button listener */
$(".btn-stop").click(function() {
+ sumostart = false;
sumorobot.send("stop");
});
@@ -339,49 +402,6 @@ window.onload = function() {
$("#panel").hide();
});
- function panel() {
- /* hide all buttons and text fields */
- $(".robot-id, .robot-nr, .btn-robot-nr").hide();
- /* show the first button and text field */
- $(".robot-id:eq(0), .robot-nr:eq(0), .btn-robot-nr:eq(0)").show();
-
- /* adjust the buttons and text fields to be in the middle */
- $(".input-group, .btn-group-robot").css("width", "20%");
- $(".input-group, .btn-group-robot").css("margin-left", "40%");
-
- /* hide the robot add button */
- $(".btn-robot-add").hide();
-
- /* populate robots IDs and buttons */
- for (var i = 0; i < 5; i++) {
- var id = getLocalStorageItem("sumorobot.robotID" + i);
- if (id) {
- $(".robot-id:eq(" + i + ")").val(id);
- $(".robot-id:eq(" + i + "), .robot-nr:eq(" + i + "), .btn-robot-nr:eq(" + i + ")").show();
- $(".input-group, .btn-group-robot").css("width", 20 + (i * 20) + "%");
- $(".input-group, .btn-group-robot").css("margin-left", 40 - (i * 10) + "%");
- } else {
- /* when no robots yet added */
- if (i != 0) {
- /* show the robot add button */
- $(".btn-robot-add").show();
- $(".btn-group-robot").css("width", 20 + (i * 20) + "%");
- $(".input-group, .btn-group-robot").css("margin-left", 40 - (i * 10) + "%");
- /* add click listener to the robot add button */
- $(".btn-robot-add").click(function() {
- $(".robot-id:eq(" + i + "), .robot-nr:eq(" + i + "), .btn-robot-nr:eq(" + i + ")").show();
- $(".input-group, .btn-group-robot").css("width", 20 + (i * 20) + "%");
- $(".input-group, .btn-group-robot").css("margin-left", 40 - (i * 10) + "%");
- $(this).hide();
- });
- }
- break;
- }
- }
- }
-
- panel();
-
/* try to close if block bubble canvas */
/*$(document).click(function(e) {
var target = e.target;