forked from marva/sumorobot-web
		
	automatically add else block, close if block mutator when user clicks outside of it
This commit is contained in:
		
							
								
								
									
										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();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    });*/
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user