From 193c47420c8c7ae106184f2aefc785e16256b0ca Mon Sep 17 00:00:00 2001 From: Neil Fraser Date: Wed, 28 Jan 2015 17:07:22 -0800 Subject: [PATCH] Refactor previous merge. --- blocks/logic.js | 53 +++++++++++++++++++------------------------- blocks_compressed.js | 3 ++- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/blocks/logic.js b/blocks/logic.js index b9bc93e9c..fbb68ab66 100644 --- a/blocks/logic.js +++ b/blocks/logic.js @@ -299,36 +299,29 @@ Blockly.Blocks['logic_compare'] = { }; return TOOLTIPS[op]; }); - var myid = this.id; - var bindid = Blockly.addChangeListener(function() { - var me = Blockly.mainWorkspace.getBlockById(myid); - if(null == me) { - Blockly.removeChangeListener(bindid); - } else { - if (me.getInputTargetBlock('A') && !me.getInputTargetBlock('B')) { - if (me.getInputTargetBlock('A').outputConnection.check_) { - me.getInput('B').setCheck(me.getInputTargetBlock('A').outputConnection.check_[0]); - } else { - me.getInput('B').setCheck(null); - } - } else if (me.getInputTargetBlock('B') && !me.getInputTargetBlock('A')) { - if (me.getInputTargetBlock('B').outputConnection.check_) { - me.getInputTargetBlock('A').setCheck(me.getInputTargetBlock('B').outputConnection.check_[0]); - } else { - me.getInput('A').setCheck(null); - } - } else if (me.getInputTargetBlock('A') && me.getInputTargetBlock('B')) { - if (me.getInputTargetBlock('A').outputConnection.check_) { - me.getInput('B').setCheck(me.getInputTargetBlock('A').outputConnection.check_[0]); - } else if (me.getInput('B').outputConnection.check_) { - me.getInput('A').setCheck(me.getInputTargetBlock('B').outputConnection.check_[0]); - } - } else { - me.getInput('A').setCheck(null); - me.getInput('B').setCheck(null); - } - } - }); + }, + /** + * Called whenever anything on the workspace changes. + * Prevent mismatched types from being compared. + * @this Blockly.Block + */ + onchange: function() { + if (!this.workspace) { + // Block has been deleted. + return; + } + var blockA = this.getInputTargetBlock('A'); + var blockB = this.getInputTargetBlock('B'); + if (blockA) { + this.getInput('B').setCheck(blockA.outputConnection.check_); + } + if (blockB) { + this.getInput('A').setCheck(blockB.outputConnection.check_); + } + if (!blockA && !blockB) { + this.getInput('A').setCheck(null); + this.getInput('B').setCheck(null); + } } }; diff --git a/blocks_compressed.js b/blocks_compressed.js index 3ce437abd..19d7edec5 100644 --- a/blocks_compressed.js +++ b/blocks_compressed.js @@ -47,7 +47,8 @@ b++;break;case "controls_if_else":d=this.getInput("ELSE");a.statementConnection_ Blockly.Blocks.controls_if_elseif={init:function(){this.setColour(Blockly.Blocks.logic.HUE);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);this.contextMenu=!1}}; Blockly.Blocks.controls_if_else={init:function(){this.setColour(Blockly.Blocks.logic.HUE);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);this.setPreviousStatement(!0);this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP);this.contextMenu=!1}}; Blockly.Blocks.logic_compare={init:function(){var a=Blockly.RTL?[["=","EQ"],["\u2260","NEQ"],[">","LT"],["\u2265","LTE"],["<","GT"],["\u2264","GTE"]]:[["=","EQ"],["\u2260","NEQ"],["<","LT"],["\u2264","LTE"],[">","GT"],["\u2265","GTE"]];this.setHelpUrl(Blockly.Msg.LOGIC_COMPARE_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0,"Boolean");this.appendValueInput("A");this.appendValueInput("B").appendField(new Blockly.FieldDropdown(a),"OP");this.setInputsInline(!0);var b=this;this.setTooltip(function(){var a= -b.getFieldValue("OP");return{EQ:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ,NEQ:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ,LT:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT,LTE:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE,GT:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT,GTE:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE}[a]})}}; +b.getFieldValue("OP");return{EQ:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ,NEQ:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ,LT:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT,LTE:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE,GT:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT,GTE:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE}[a]})},onchange:function(){if(this.workspace){var a=this.getInputTargetBlock("A"),b=this.getInputTargetBlock("B");a&&this.getInput("B").setCheck(a.outputConnection.check_);b&&this.getInput("A").setCheck(b.outputConnection.check_); +a||b||(this.getInput("A").setCheck(null),this.getInput("B").setCheck(null))}}}; Blockly.Blocks.logic_operation={init:function(){var a=[[Blockly.Msg.LOGIC_OPERATION_AND,"AND"],[Blockly.Msg.LOGIC_OPERATION_OR,"OR"]];this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0,"Boolean");this.appendValueInput("A").setCheck("Boolean");this.appendValueInput("B").setCheck("Boolean").appendField(new Blockly.FieldDropdown(a),"OP");this.setInputsInline(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("OP");return{AND:Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND, OR:Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR}[a]})}};Blockly.Blocks.logic_negate={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_NEGATE_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0,"Boolean");this.interpolateMsg(Blockly.Msg.LOGIC_NEGATE_TITLE,["BOOL","Boolean",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setTooltip(Blockly.Msg.LOGIC_NEGATE_TOOLTIP)}}; Blockly.Blocks.logic_boolean={init:function(){var a=[[Blockly.Msg.LOGIC_BOOLEAN_TRUE,"TRUE"],[Blockly.Msg.LOGIC_BOOLEAN_FALSE,"FALSE"]];this.setHelpUrl(Blockly.Msg.LOGIC_BOOLEAN_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.setOutput(!0,"Boolean");this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"BOOL");this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP)}};