forked from marva/sumorobot-web
automatically add else block, close if block mutator when user clicks outside of it
This commit is contained in:
parent
2e053cc911
commit
44b008d8fe
51
sumorobot.js
51
sumorobot.js
@ -220,6 +220,7 @@ window.onload = function() {
|
|||||||
|
|
||||||
/* change the if block to be more cheerful */
|
/* change the if block to be more cheerful */
|
||||||
Blockly.Blocks.logic.HUE = '#44CC00';
|
Blockly.Blocks.logic.HUE = '#44CC00';
|
||||||
|
/* inject blockly */
|
||||||
var blocklyArea = document.getElementById('blocklyArea');
|
var blocklyArea = document.getElementById('blocklyArea');
|
||||||
var blocklyDiv = document.getElementById('blocklyDiv');
|
var blocklyDiv = document.getElementById('blocklyDiv');
|
||||||
workspace = Blockly.inject(blocklyDiv, {
|
workspace = Blockly.inject(blocklyDiv, {
|
||||||
@ -279,6 +280,36 @@ window.onload = function() {
|
|||||||
|
|
||||||
/* on blockly code change */
|
/* on blockly code change */
|
||||||
function onCodeChanged(event) {
|
function onCodeChanged(event) {
|
||||||
|
/* the block */
|
||||||
|
var block = workspace.getBlockById(event.blockId);
|
||||||
|
|
||||||
|
/* if the if condition block was created */
|
||||||
|
if (event.type == Blockly.Events.CREATE && block.type == "controls_if") {
|
||||||
|
/* automatically add the else statement input */
|
||||||
|
block.elseCount_ = 1;
|
||||||
|
block.updateShape_();
|
||||||
|
/* disable the if condition block */
|
||||||
|
$("block[type=controls_if]").replaceWith("<block type='controls_if' disabled='true'></block>");
|
||||||
|
workspace.updateToolbox(document.getElementById("toolbox"));
|
||||||
|
|
||||||
|
/* set a click listener on the document */
|
||||||
|
$(document).click(function(e) {
|
||||||
|
var target = e.target;
|
||||||
|
/* when the user clicks anywhere outside the mutator and not on the mutator icon */
|
||||||
|
if (!$(target).is('.blocklyBubbleCanvas') && !$(target).parents().is('.blocklyBubbleCanvas')) {
|
||||||
|
if (!$(target).is('.blocklyIconGroup') && !$(target).parents().is('.blocklyIconGroup')) {
|
||||||
|
/* hide the mutator */
|
||||||
|
block.mutator.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
/* if the if condition block was removed */
|
||||||
|
} else if (event.type == Blockly.Events.DELETE && event.oldXml.getAttributeNode("type").nodeValue == "controls_if") {
|
||||||
|
/* enable the if condition block */
|
||||||
|
$("block[type=controls_if]").replaceWith("<block type='controls_if'></block>");
|
||||||
|
workspace.updateToolbox(document.getElementById("toolbox"));
|
||||||
|
}
|
||||||
|
|
||||||
/* only process change and move commands */
|
/* only process change and move commands */
|
||||||
if (event.type != Blockly.Events.CHANGE && event.type != Blockly.Events.MOVE) return;
|
if (event.type != Blockly.Events.CHANGE && event.type != Blockly.Events.MOVE) return;
|
||||||
/* generate code from the used blocks */
|
/* generate code from the used blocks */
|
||||||
@ -290,17 +321,6 @@ window.onload = function() {
|
|||||||
/* save the code to the local storage */
|
/* save the code to the local storage */
|
||||||
var xml = Blockly.Xml.workspaceToDom(workspace);
|
var xml = Blockly.Xml.workspaceToDom(workspace);
|
||||||
localStorage.setItem("sumorobot.currentProgram", Blockly.Xml.domToText(xml));
|
localStorage.setItem("sumorobot.currentProgram", Blockly.Xml.domToText(xml));
|
||||||
|
|
||||||
/* if the if condition block is used */
|
|
||||||
if (sumocode.indexOf("if") != -1) {
|
|
||||||
/* disable the if condition block */
|
|
||||||
$("block[type=controls_if]").replaceWith("<block type='controls_if' disabled='true'></block>");
|
|
||||||
workspace.updateToolbox(document.getElementById("toolbox"));
|
|
||||||
} else {
|
|
||||||
/* enable the if condition block */
|
|
||||||
$("block[type=controls_if]").replaceWith("<block type='controls_if'></block>");
|
|
||||||
workspace.updateToolbox(document.getElementById("toolbox"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add a change listener to Blockly */
|
/* add a change listener to Blockly */
|
||||||
@ -473,13 +493,4 @@ window.onload = function() {
|
|||||||
|
|
||||||
/* load the Mixer stream */
|
/* load the Mixer stream */
|
||||||
$("#stream").html('<iframe width="100%" height="100%" allowfullscreen="true" src="https://mixer.com/embed/player/14551694"></iframe>');
|
$("#stream").html('<iframe width="100%" height="100%" allowfullscreen="true" src="https://mixer.com/embed/player/14551694"></iframe>');
|
||||||
|
|
||||||
/* try to close if block bubble canvas */
|
|
||||||
/*$(document).click(function(e) {
|
|
||||||
var target = e.target;
|
|
||||||
if (!$(target).is('.blocklyBubbleCanvas') && !$(target).parents().is('.blocklyBubbleCanvas')) {
|
|
||||||
if (!$(target).is('.blocklyIconGroup') && !$(target).parents().is('.blocklyIconGroup'))
|
|
||||||
$('.blocklyBubbleCanvas').empty();
|
|
||||||
}
|
|
||||||
});*/
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user