initial commit
1521
blockly_compressed.js
Executable file
156
blocks_compressed.js
Executable file
@ -0,0 +1,156 @@
|
|||||||
|
// Do not edit this file; automatically generated by build.py.
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
// Copyright 2012 Google Inc. Apache License 2.0
|
||||||
|
Blockly.Blocks.colour={};Blockly.Blocks.colour.HUE=20;Blockly.Blocks.colour_picker={init:function(){this.jsonInit({message0:"%1",args0:[{type:"field_colour",name:"COLOUR",colour:"#ff0000"}],output:"Colour",colour:Blockly.Blocks.colour.HUE,helpUrl:Blockly.Msg.COLOUR_PICKER_HELPURL});var a=this;this.setTooltip(function(){var b=a.getParent();return b&&b.getInputsInline()&&b.tooltip||Blockly.Msg.COLOUR_PICKER_TOOLTIP})}};
|
||||||
|
Blockly.Blocks.colour_random={init:function(){this.jsonInit({message0:Blockly.Msg.COLOUR_RANDOM_TITLE,output:"Colour",colour:Blockly.Blocks.colour.HUE,tooltip:Blockly.Msg.COLOUR_RANDOM_TOOLTIP,helpUrl:Blockly.Msg.COLOUR_RANDOM_HELPURL})}};
|
||||||
|
Blockly.Blocks.colour_rgb={init:function(){this.setHelpUrl(Blockly.Msg.COLOUR_RGB_HELPURL);this.setColour(Blockly.Blocks.colour.HUE);this.appendValueInput("RED").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_RGB_TITLE).appendField(Blockly.Msg.COLOUR_RGB_RED);this.appendValueInput("GREEN").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_RGB_GREEN);this.appendValueInput("BLUE").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_RGB_BLUE);
|
||||||
|
this.setOutput(!0,"Colour");this.setTooltip(Blockly.Msg.COLOUR_RGB_TOOLTIP)}};
|
||||||
|
Blockly.Blocks.colour_blend={init:function(){this.setHelpUrl(Blockly.Msg.COLOUR_BLEND_HELPURL);this.setColour(Blockly.Blocks.colour.HUE);this.appendValueInput("COLOUR1").setCheck("Colour").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_BLEND_TITLE).appendField(Blockly.Msg.COLOUR_BLEND_COLOUR1);this.appendValueInput("COLOUR2").setCheck("Colour").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_BLEND_COLOUR2);this.appendValueInput("RATIO").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_BLEND_RATIO);
|
||||||
|
this.setOutput(!0,"Colour");this.setTooltip(Blockly.Msg.COLOUR_BLEND_TOOLTIP)}};Blockly.Blocks.lists={};Blockly.Blocks.lists.HUE=260;Blockly.Blocks.lists_create_empty={init:function(){this.jsonInit({message0:Blockly.Msg.LISTS_CREATE_EMPTY_TITLE,output:"Array",colour:Blockly.Blocks.lists.HUE,tooltip:Blockly.Msg.LISTS_CREATE_EMPTY_TOOLTIP,helpUrl:Blockly.Msg.LISTS_CREATE_EMPTY_HELPURL})}};
|
||||||
|
Blockly.Blocks.lists_create_with={init:function(){this.setHelpUrl(Blockly.Msg.LISTS_CREATE_WITH_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.itemCount_=3;this.updateShape_();this.setOutput(!0,"Array");this.setMutator(new Blockly.Mutator(["lists_create_with_item"]));this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("items",this.itemCount_);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute("items"),
|
||||||
|
10);this.updateShape_()},decompose:function(a){var b=a.newBlock("lists_create_with_container");b.initSvg();for(var c=b.getInput("STACK").connection,e=0;e<this.itemCount_;e++){var d=a.newBlock("lists_create_with_item");d.initSvg();c.connect(d.previousConnection);c=d.nextConnection}return b},compose:function(a){var b=a.getInputTargetBlock("STACK");for(a=[];b;)a.push(b.valueConnection_),b=b.nextConnection&&b.nextConnection.targetBlock();for(b=0;b<this.itemCount_;b++){var c=this.getInput("ADD"+b).connection.targetConnection;
|
||||||
|
c&&-1==a.indexOf(c)&&c.disconnect()}this.itemCount_=a.length;this.updateShape_();for(b=0;b<this.itemCount_;b++)Blockly.Mutator.reconnect(a[b],this,"ADD"+b)},saveConnections:function(a){a=a.getInputTargetBlock("STACK");for(var b=0;a;){var c=this.getInput("ADD"+b);a.valueConnection_=c&&c.connection.targetConnection;b++;a=a.nextConnection&&a.nextConnection.targetBlock()}},updateShape_:function(){this.itemCount_&&this.getInput("EMPTY")?this.removeInput("EMPTY"):this.itemCount_||this.getInput("EMPTY")||
|
||||||
|
this.appendDummyInput("EMPTY").appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE);for(var a=0;a<this.itemCount_;a++)if(!this.getInput("ADD"+a)){var b=this.appendValueInput("ADD"+a);0==a&&b.appendField(Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH)}for(;this.getInput("ADD"+a);)this.removeInput("ADD"+a),a++}};
|
||||||
|
Blockly.Blocks.lists_create_with_container={init:function(){this.setColour(Blockly.Blocks.lists.HUE);this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP);this.contextMenu=!1}};
|
||||||
|
Blockly.Blocks.lists_create_with_item={init:function(){this.setColour(Blockly.Blocks.lists.HUE);this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP);this.contextMenu=!1}};
|
||||||
|
Blockly.Blocks.lists_repeat={init:function(){this.jsonInit({message0:Blockly.Msg.LISTS_REPEAT_TITLE,args0:[{type:"input_value",name:"ITEM"},{type:"input_value",name:"NUM",check:"Number"}],output:"Array",colour:Blockly.Blocks.lists.HUE,tooltip:Blockly.Msg.LISTS_REPEAT_TOOLTIP,helpUrl:Blockly.Msg.LISTS_REPEAT_HELPURL})}};
|
||||||
|
Blockly.Blocks.lists_length={init:function(){this.jsonInit({message0:Blockly.Msg.LISTS_LENGTH_TITLE,args0:[{type:"input_value",name:"VALUE",check:["String","Array"]}],output:"Number",colour:Blockly.Blocks.lists.HUE,tooltip:Blockly.Msg.LISTS_LENGTH_TOOLTIP,helpUrl:Blockly.Msg.LISTS_LENGTH_HELPURL})}};
|
||||||
|
Blockly.Blocks.lists_isEmpty={init:function(){this.jsonInit({message0:Blockly.Msg.LISTS_ISEMPTY_TITLE,args0:[{type:"input_value",name:"VALUE",check:["String","Array"]}],output:"Boolean",colour:Blockly.Blocks.lists.HUE,tooltip:Blockly.Msg.LISTS_ISEMPTY_TOOLTIP,helpUrl:Blockly.Msg.LISTS_ISEMPTY_HELPURL})}};
|
||||||
|
Blockly.Blocks.lists_indexOf={init:function(){var a=[[Blockly.Msg.LISTS_INDEX_OF_FIRST,"FIRST"],[Blockly.Msg.LISTS_INDEX_OF_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.LISTS_INDEX_OF_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.setOutput(!0,"Number");this.appendValueInput("VALUE").setCheck("Array").appendField(Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST);this.appendValueInput("FIND").appendField(new Blockly.FieldDropdown(a),"END");this.setInputsInline(!0);this.setTooltip(function(){return Blockly.Msg.LISTS_INDEX_OF_TOOLTIP.replace("%1",
|
||||||
|
this.workspace.options.oneBasedIndex?"0":"-1")})}};
|
||||||
|
Blockly.Blocks.lists_getIndex={init:function(){var a=[[Blockly.Msg.LISTS_GET_INDEX_GET,"GET"],[Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE,"GET_REMOVE"],[Blockly.Msg.LISTS_GET_INDEX_REMOVE,"REMOVE"]];this.WHERE_OPTIONS=[[Blockly.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_INDEX_FIRST,"FIRST"],[Blockly.Msg.LISTS_GET_INDEX_LAST,"LAST"],[Blockly.Msg.LISTS_GET_INDEX_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);
|
||||||
|
this.setColour(Blockly.Blocks.lists.HUE);a=new Blockly.FieldDropdown(a,function(a){this.sourceBlock_.updateStatement_("REMOVE"==a)});this.appendValueInput("VALUE").setCheck("Array").appendField(Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST);this.appendDummyInput().appendField(a,"MODE").appendField("","SPACE");this.appendDummyInput("AT");Blockly.Msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput("TAIL").appendField(Blockly.Msg.LISTS_GET_INDEX_TAIL);this.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);
|
||||||
|
var b=this;this.setTooltip(function(){var a=b.getFieldValue("MODE"),e=b.getFieldValue("WHERE"),d="";switch(a+" "+e){case "GET FROM_START":case "GET FROM_END":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;break;case "GET FIRST":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;break;case "GET LAST":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;break;case "GET RANDOM":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;break;case "GET_REMOVE FROM_START":case "GET_REMOVE FROM_END":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;
|
||||||
|
break;case "GET_REMOVE FIRST":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;break;case "GET_REMOVE LAST":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;break;case "GET_REMOVE RANDOM":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;break;case "REMOVE FROM_START":case "REMOVE FROM_END":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;break;case "REMOVE FIRST":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;break;case "REMOVE LAST":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;
|
||||||
|
break;case "REMOVE RANDOM":d=Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM}if("FROM_START"==e||"FROM_END"==e)d+=" "+("FROM_START"==e?Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP:Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP).replace("%1",b.workspace.options.oneBasedIndex?"#1":"#0");return d})},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("statement",!this.outputConnection);var b=this.getInput("AT").type==Blockly.INPUT_VALUE;a.setAttribute("at",b);return a},domToMutation:function(a){var b=
|
||||||
|
"true"==a.getAttribute("statement");this.updateStatement_(b);a="false"!=a.getAttribute("at");this.updateAt_(a)},updateStatement_:function(a){a!=!this.outputConnection&&(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput("AT");this.removeInput("ORDINAL",!0);a?(this.appendValueInput("AT").setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&
|
||||||
|
this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput("AT");var b=new Blockly.FieldDropdown(this.WHERE_OPTIONS,function(b){var c="FROM_START"==b||"FROM_END"==b;if(c!=a){var d=this.sourceBlock_;d.updateAt_(c);d.setFieldValue(b,"WHERE");return null}});this.getInput("AT").appendField(b,"WHERE");Blockly.Msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore("TAIL",null)}};
|
||||||
|
Blockly.Blocks.lists_setIndex={init:function(){var a=[[Blockly.Msg.LISTS_SET_INDEX_SET,"SET"],[Blockly.Msg.LISTS_SET_INDEX_INSERT,"INSERT"]];this.WHERE_OPTIONS=[[Blockly.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_INDEX_FIRST,"FIRST"],[Blockly.Msg.LISTS_GET_INDEX_LAST,"LAST"],[Blockly.Msg.LISTS_GET_INDEX_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.LISTS_SET_INDEX_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST);
|
||||||
|
this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"MODE").appendField("","SPACE");this.appendDummyInput("AT");this.appendValueInput("TO").appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("MODE"),e=b.getFieldValue("WHERE"),d="";switch(a+" "+e){case "SET FROM_START":case "SET FROM_END":d=
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;break;case "SET FIRST":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;break;case "SET LAST":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;break;case "SET RANDOM":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;break;case "INSERT FROM_START":case "INSERT FROM_END":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;break;case "INSERT FIRST":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;break;case "INSERT LAST":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;
|
||||||
|
break;case "INSERT RANDOM":d=Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM}if("FROM_START"==e||"FROM_END"==e)d+=" "+Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace("%1",b.workspace.options.oneBasedIndex?"#1":"#0");return d})},mutationToDom:function(){var a=document.createElement("mutation"),b=this.getInput("AT").type==Blockly.INPUT_VALUE;a.setAttribute("at",b);return a},domToMutation:function(a){a="false"!=a.getAttribute("at");this.updateAt_(a)},updateAt_:function(a){this.removeInput("AT");
|
||||||
|
this.removeInput("ORDINAL",!0);a?(this.appendValueInput("AT").setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput("AT");var b=new Blockly.FieldDropdown(this.WHERE_OPTIONS,function(b){var c="FROM_START"==b||"FROM_END"==b;if(c!=a){var d=this.sourceBlock_;d.updateAt_(c);d.setFieldValue(b,"WHERE");return null}});this.moveInputBefore("AT","TO");this.getInput("ORDINAL")&&this.moveInputBefore("ORDINAL",
|
||||||
|
"TO");this.getInput("AT").appendField(b,"WHERE")}};
|
||||||
|
Blockly.Blocks.lists_getSublist={init:function(){this.WHERE_OPTIONS_1=[[Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST,"FIRST"]];this.WHERE_OPTIONS_2=[[Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_SUBLIST_END_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);
|
||||||
|
this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);this.appendDummyInput("AT1");this.appendDummyInput("AT2");Blockly.Msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput("TAIL").appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,"Array");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip(Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),b=this.getInput("AT1").type==
|
||||||
|
Blockly.INPUT_VALUE;a.setAttribute("at1",b);b=this.getInput("AT2").type==Blockly.INPUT_VALUE;a.setAttribute("at2",b);return a},domToMutation:function(a){var b="true"==a.getAttribute("at1");a="true"==a.getAttribute("at2");this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput("AT"+a);this.removeInput("ORDINAL"+a,!0);b?(this.appendValueInput("AT"+a).setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL"+a).appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):
|
||||||
|
this.appendDummyInput("AT"+a);var c=new Blockly.FieldDropdown(this["WHERE_OPTIONS_"+a],function(c){var d="FROM_START"==c||"FROM_END"==c;if(d!=b){var e=this.sourceBlock_;e.updateAt_(a,d);e.setFieldValue(c,"WHERE"+a);return null}});this.getInput("AT"+a).appendField(c,"WHERE"+a);1==a&&(this.moveInputBefore("AT1","AT2"),this.getInput("ORDINAL1")&&this.moveInputBefore("ORDINAL1","AT2"));Blockly.Msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore("TAIL",null)}};
|
||||||
|
Blockly.Blocks.lists_sort={init:function(){this.jsonInit({message0:Blockly.Msg.LISTS_SORT_TITLE,args0:[{type:"field_dropdown",name:"TYPE",options:[[Blockly.Msg.LISTS_SORT_TYPE_NUMERIC,"NUMERIC"],[Blockly.Msg.LISTS_SORT_TYPE_TEXT,"TEXT"],[Blockly.Msg.LISTS_SORT_TYPE_IGNORECASE,"IGNORE_CASE"]]},{type:"field_dropdown",name:"DIRECTION",options:[[Blockly.Msg.LISTS_SORT_ORDER_ASCENDING,"1"],[Blockly.Msg.LISTS_SORT_ORDER_DESCENDING,"-1"]]},{type:"input_value",name:"LIST",check:"Array"}],output:"Array",colour:Blockly.Blocks.lists.HUE,
|
||||||
|
tooltip:Blockly.Msg.LISTS_SORT_TOOLTIP,helpUrl:Blockly.Msg.LISTS_SORT_HELPURL})}};
|
||||||
|
Blockly.Blocks.lists_split={init:function(){var a=this,b=new Blockly.FieldDropdown([[Blockly.Msg.LISTS_SPLIT_LIST_FROM_TEXT,"SPLIT"],[Blockly.Msg.LISTS_SPLIT_TEXT_FROM_LIST,"JOIN"]],function(b){a.updateType_(b)});this.setHelpUrl(Blockly.Msg.LISTS_SPLIT_HELPURL);this.setColour(Blockly.Blocks.lists.HUE);this.appendValueInput("INPUT").setCheck("String").appendField(b,"MODE");this.appendValueInput("DELIM").setCheck("String").appendField(Blockly.Msg.LISTS_SPLIT_WITH_DELIMITER);this.setInputsInline(!0);
|
||||||
|
this.setOutput(!0,"Array");this.setTooltip(function(){var b=a.getFieldValue("MODE");if("SPLIT"==b)return Blockly.Msg.LISTS_SPLIT_TOOLTIP_SPLIT;if("JOIN"==b)return Blockly.Msg.LISTS_SPLIT_TOOLTIP_JOIN;throw"Unknown mode: "+b;})},updateType_:function(a){"SPLIT"==a?(this.outputConnection.setCheck("Array"),this.getInput("INPUT").setCheck("String")):(this.outputConnection.setCheck("String"),this.getInput("INPUT").setCheck("Array"))},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("mode",
|
||||||
|
this.getFieldValue("MODE"));return a},domToMutation:function(a){this.updateType_(a.getAttribute("mode"))}};Blockly.Blocks.logic={};Blockly.Blocks.logic.HUE=210;
|
||||||
|
Blockly.Blocks.controls_if={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.appendValueInput("IF0").setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);this.appendStatementInput("DO0").appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setMutator(new Blockly.Mutator(["controls_if_elseif","controls_if_else"]));var a=this;this.setTooltip(function(){if(a.elseifCount_||a.elseCount_){if(!a.elseifCount_&&
|
||||||
|
a.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;if(a.elseifCount_&&!a.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;if(a.elseifCount_&&a.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_4}else return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;return""});this.elseCount_=this.elseifCount_=0},mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;var a=document.createElement("mutation");this.elseifCount_&&a.setAttribute("elseif",this.elseifCount_);this.elseCount_&&a.setAttribute("else",
|
||||||
|
1);return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute("elseif"),10)||0;this.elseCount_=parseInt(a.getAttribute("else"),10)||0;this.updateShape_()},decompose:function(a){var b=a.newBlock("controls_if_if");b.initSvg();for(var c=b.nextConnection,e=1;e<=this.elseifCount_;e++){var d=a.newBlock("controls_if_elseif");d.initSvg();c.connect(d.previousConnection);c=d.nextConnection}this.elseCount_&&(a=a.newBlock("controls_if_else"),a.initSvg(),c.connect(a.previousConnection));return b},
|
||||||
|
compose:function(a){var b=a.nextConnection.targetBlock();this.elseCount_=this.elseifCount_=0;a=[null];for(var c=[null],e=null;b;){switch(b.type){case "controls_if_elseif":this.elseifCount_++;a.push(b.valueConnection_);c.push(b.statementConnection_);break;case "controls_if_else":this.elseCount_++;e=b.statementConnection_;break;default:throw"Unknown block type.";}b=b.nextConnection&&b.nextConnection.targetBlock()}this.updateShape_();for(b=1;b<=this.elseifCount_;b++)Blockly.Mutator.reconnect(a[b],this,
|
||||||
|
"IF"+b),Blockly.Mutator.reconnect(c[b],this,"DO"+b);Blockly.Mutator.reconnect(e,this,"ELSE")},saveConnections:function(a){a=a.nextConnection.targetBlock();for(var b=1;a;){switch(a.type){case "controls_if_elseif":var c=this.getInput("IF"+b),e=this.getInput("DO"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=e&&e.connection.targetConnection;b++;break;case "controls_if_else":e=this.getInput("ELSE");a.statementConnection_=e&&e.connection.targetConnection;break;default:throw"Unknown block type.";
|
||||||
|
}a=a.nextConnection&&a.nextConnection.targetBlock()}},updateShape_:function(){this.getInput("ELSE")&&this.removeInput("ELSE");for(var a=1;this.getInput("IF"+a);)this.removeInput("IF"+a),this.removeInput("DO"+a),a++;for(a=1;a<=this.elseifCount_;a++)this.appendValueInput("IF"+a).setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput("DO"+a).appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput("ELSE").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE)}};
|
||||||
|
Blockly.Blocks.controls_if_if={init:function(){this.setColour(Blockly.Blocks.logic.HUE);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_IF_IF_TITLE_IF);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.CONTROLS_IF_IF_TOOLTIP);this.contextMenu=!1}};
|
||||||
|
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.controls_ifelse={init:function(){this.jsonInit({message0:"%{BKY_CONTROLS_IF_MSG_IF} %1",args0:[{type:"input_value",name:"IF0",check:"Boolean"}],message1:"%{BKY_CONTROLS_IF_MSG_THEN} %1",args1:[{type:"input_statement",name:"DO0"}],message2:"%{BKY_CONTROLS_IF_MSG_ELSE} %1",args2:[{type:"input_statement",name:"ELSE"}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.logic.HUE,tooltip:Blockly.Msg.CONTROLS_IF_TOOLTIP_2,helpUrl:Blockly.Msg.CONTROLS_IF_HELPURL})}};
|
||||||
|
Blockly.Blocks.logic_compare={init:function(){var a=[["=","EQ"],["\u2260","NEQ"],["\u200f<\u200f","LT"],["\u200f\u2264\u200f","LTE"],["\u200f>\u200f","GT"],["\u200f\u2265\u200f","GTE"]],b=[["=","EQ"],["\u2260","NEQ"],["<","LT"],["\u2264","LTE"],[">","GT"],["\u2265","GTE"]],a=this.RTL?a:b;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 c=this;this.setTooltip(function(){var a=c.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]});this.prevBlocks_=[null,null]},onchange:function(a){var b=this.getInputTargetBlock("A"),c=this.getInputTargetBlock("B");if(b&&c&&!b.outputConnection.checkType_(c.outputConnection)){Blockly.Events.setGroup(a.group);
|
||||||
|
for(a=0;a<this.prevBlocks_.length;a++){var e=this.prevBlocks_[a];if(e===b||e===c)e.unplug(),e.bumpNeighbours_()}Blockly.Events.setGroup(!1)}this.prevBlocks_[0]=b;this.prevBlocks_[1]=c}};
|
||||||
|
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.jsonInit({message0:Blockly.Msg.LOGIC_NEGATE_TITLE,args0:[{type:"input_value",name:"BOOL",check:"Boolean"}],output:"Boolean",colour:Blockly.Blocks.logic.HUE,tooltip:Blockly.Msg.LOGIC_NEGATE_TOOLTIP,helpUrl:Blockly.Msg.LOGIC_NEGATE_HELPURL})}};
|
||||||
|
Blockly.Blocks.logic_boolean={init:function(){this.jsonInit({message0:"%1",args0:[{type:"field_dropdown",name:"BOOL",options:[[Blockly.Msg.LOGIC_BOOLEAN_TRUE,"TRUE"],[Blockly.Msg.LOGIC_BOOLEAN_FALSE,"FALSE"]]}],output:"Boolean",colour:Blockly.Blocks.logic.HUE,tooltip:Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP,helpUrl:Blockly.Msg.LOGIC_BOOLEAN_HELPURL})}};
|
||||||
|
Blockly.Blocks.logic_null={init:function(){this.jsonInit({message0:Blockly.Msg.LOGIC_NULL,output:null,colour:Blockly.Blocks.logic.HUE,tooltip:Blockly.Msg.LOGIC_NULL_TOOLTIP,helpUrl:Blockly.Msg.LOGIC_NULL_HELPURL})}};
|
||||||
|
Blockly.Blocks.logic_ternary={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_TERNARY_HELPURL);this.setColour(Blockly.Blocks.logic.HUE);this.appendValueInput("IF").setCheck("Boolean").appendField(Blockly.Msg.LOGIC_TERNARY_CONDITION);this.appendValueInput("THEN").appendField(Blockly.Msg.LOGIC_TERNARY_IF_TRUE);this.appendValueInput("ELSE").appendField(Blockly.Msg.LOGIC_TERNARY_IF_FALSE);this.setOutput(!0);this.setTooltip(Blockly.Msg.LOGIC_TERNARY_TOOLTIP);this.prevParentConnection_=null},onchange:function(a){var b=
|
||||||
|
this.getInputTargetBlock("THEN"),c=this.getInputTargetBlock("ELSE"),e=this.outputConnection.targetConnection;if((b||c)&&e)for(var d=0;2>d;d++){var f=1==d?b:c;f&&!f.outputConnection.checkType_(e)&&(Blockly.Events.setGroup(a.group),e===this.prevParentConnection_?(this.unplug(),e.getSourceBlock().bumpNeighbours_()):(f.unplug(),f.bumpNeighbours_()),Blockly.Events.setGroup(!1))}this.prevParentConnection_=e}};Blockly.Blocks.loops={};Blockly.Blocks.loops.HUE=120;Blockly.Blocks.controls_repeat_ext={init:function(){this.jsonInit({message0:Blockly.Msg.CONTROLS_REPEAT_TITLE,args0:[{type:"input_value",name:"TIMES",check:"Number"}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.loops.HUE,tooltip:Blockly.Msg.CONTROLS_REPEAT_TOOLTIP,helpUrl:Blockly.Msg.CONTROLS_REPEAT_HELPURL});this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO)}};
|
||||||
|
Blockly.Blocks.controls_repeat={init:function(){this.jsonInit({message0:Blockly.Msg.CONTROLS_REPEAT_TITLE,args0:[{type:"field_number",name:"TIMES",value:10,min:0,precision:1}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.loops.HUE,tooltip:Blockly.Msg.CONTROLS_REPEAT_TOOLTIP,helpUrl:Blockly.Msg.CONTROLS_REPEAT_HELPURL});this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO)}};
|
||||||
|
Blockly.Blocks.controls_whileUntil={init:function(){var a=[[Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_WHILE,"WHILE"],[Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_UNTIL,"UNTIL"]];this.setHelpUrl(Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL);this.setColour(Blockly.Blocks.loops.HUE);this.appendValueInput("BOOL").setCheck("Boolean").appendField(new Blockly.FieldDropdown(a),"MODE");this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO);this.setPreviousStatement(!0);this.setNextStatement(!0);
|
||||||
|
var b=this;this.setTooltip(function(){var a=b.getFieldValue("MODE");return{WHILE:Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,UNTIL:Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL}[a]})}};
|
||||||
|
Blockly.Blocks.controls_for={init:function(){this.jsonInit({message0:Blockly.Msg.CONTROLS_FOR_TITLE,args0:[{type:"field_variable",name:"VAR",variable:null},{type:"input_value",name:"FROM",check:"Number",align:"RIGHT"},{type:"input_value",name:"TO",check:"Number",align:"RIGHT"},{type:"input_value",name:"BY",check:"Number",align:"RIGHT"}],inputsInline:!0,previousStatement:null,nextStatement:null,colour:Blockly.Blocks.loops.HUE,helpUrl:Blockly.Msg.CONTROLS_FOR_HELPURL});this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_FOR_INPUT_DO);
|
||||||
|
var a=this;this.setTooltip(function(){return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})},customContextMenu:function(a){if(!this.isCollapsed()){var b={enabled:!0},c=this.getFieldValue("VAR");b.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",c);c=goog.dom.createDom("field",null,c);c.setAttribute("name","VAR");c=goog.dom.createDom("block",null,c);c.setAttribute("type","variables_get");b.callback=Blockly.ContextMenu.callbackFactory(this,c);a.push(b)}}};
|
||||||
|
Blockly.Blocks.controls_forEach={init:function(){this.jsonInit({message0:Blockly.Msg.CONTROLS_FOREACH_TITLE,args0:[{type:"field_variable",name:"VAR",variable:null},{type:"input_value",name:"LIST",check:"Array"}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.loops.HUE,helpUrl:Blockly.Msg.CONTROLS_FOREACH_HELPURL});this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_DO);var a=this;this.setTooltip(function(){return Blockly.Msg.CONTROLS_FOREACH_TOOLTIP.replace("%1",
|
||||||
|
a.getFieldValue("VAR"))})},customContextMenu:Blockly.Blocks.controls_for.customContextMenu};
|
||||||
|
Blockly.Blocks.controls_flow_statements={init:function(){var a=[[Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK,"BREAK"],[Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE,"CONTINUE"]];this.setHelpUrl(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_HELPURL);this.setColour(Blockly.Blocks.loops.HUE);this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"FLOW");this.setPreviousStatement(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("FLOW");return{BREAK:Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,
|
||||||
|
CONTINUE:Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE}[a]})},onchange:function(a){if(this.workspace.isDragging&&!this.workspace.isDragging()){a=!1;var b=this;do{if(-1!=this.LOOP_TYPES.indexOf(b.type)){a=!0;break}b=b.getSurroundParent()}while(b);a?(this.setWarningText(null),this.isInFlyout||this.setDisabled(!1)):(this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING),this.isInFlyout||this.getInheritedDisabled()||this.setDisabled(!0))}},LOOP_TYPES:["controls_repeat","controls_repeat_ext",
|
||||||
|
"controls_forEach","controls_for","controls_whileUntil"]};Blockly.Blocks.math={};Blockly.Blocks.math.HUE=230;Blockly.Blocks.math_number={init:function(){this.setHelpUrl(Blockly.Msg.MATH_NUMBER_HELPURL);this.setColour(Blockly.Blocks.math.HUE);this.appendDummyInput().appendField(new Blockly.FieldNumber("0"),"NUM");this.setOutput(!0,"Number");var a=this;this.setTooltip(function(){var b=a.getParent();return b&&b.getInputsInline()&&b.tooltip||Blockly.Msg.MATH_NUMBER_TOOLTIP})}};
|
||||||
|
Blockly.Blocks.math_arithmetic={init:function(){this.jsonInit({message0:"%1 %2 %3",args0:[{type:"input_value",name:"A",check:"Number"},{type:"field_dropdown",name:"OP",options:[[Blockly.Msg.MATH_ADDITION_SYMBOL,"ADD"],[Blockly.Msg.MATH_SUBTRACTION_SYMBOL,"MINUS"],[Blockly.Msg.MATH_MULTIPLICATION_SYMBOL,"MULTIPLY"],[Blockly.Msg.MATH_DIVISION_SYMBOL,"DIVIDE"],[Blockly.Msg.MATH_POWER_SYMBOL,"POWER"]]},{type:"input_value",name:"B",check:"Number"}],inputsInline:!0,output:"Number",colour:Blockly.Blocks.math.HUE,
|
||||||
|
helpUrl:Blockly.Msg.MATH_ARITHMETIC_HELPURL});var a=this;this.setTooltip(function(){var b=a.getFieldValue("OP");return{ADD:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,MINUS:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,MULTIPLY:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,DIVIDE:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,POWER:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER}[b]})}};
|
||||||
|
Blockly.Blocks.math_single={init:function(){this.jsonInit({message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[[Blockly.Msg.MATH_SINGLE_OP_ROOT,"ROOT"],[Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE,"ABS"],["-","NEG"],["ln","LN"],["log10","LOG10"],["e^","EXP"],["10^","POW10"]]},{type:"input_value",name:"NUM",check:"Number"}],output:"Number",colour:Blockly.Blocks.math.HUE,helpUrl:Blockly.Msg.MATH_SINGLE_HELPURL});var a=this;this.setTooltip(function(){var b=a.getFieldValue("OP");return{ROOT:Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT,
|
||||||
|
ABS:Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS,NEG:Blockly.Msg.MATH_SINGLE_TOOLTIP_NEG,LN:Blockly.Msg.MATH_SINGLE_TOOLTIP_LN,LOG10:Blockly.Msg.MATH_SINGLE_TOOLTIP_LOG10,EXP:Blockly.Msg.MATH_SINGLE_TOOLTIP_EXP,POW10:Blockly.Msg.MATH_SINGLE_TOOLTIP_POW10}[b]})}};
|
||||||
|
Blockly.Blocks.math_trig={init:function(){this.jsonInit({message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[[Blockly.Msg.MATH_TRIG_SIN,"SIN"],[Blockly.Msg.MATH_TRIG_COS,"COS"],[Blockly.Msg.MATH_TRIG_TAN,"TAN"],[Blockly.Msg.MATH_TRIG_ASIN,"ASIN"],[Blockly.Msg.MATH_TRIG_ACOS,"ACOS"],[Blockly.Msg.MATH_TRIG_ATAN,"ATAN"]]},{type:"input_value",name:"NUM",check:"Number"}],output:"Number",colour:Blockly.Blocks.math.HUE,helpUrl:Blockly.Msg.MATH_TRIG_HELPURL});var a=this;this.setTooltip(function(){var b=
|
||||||
|
a.getFieldValue("OP");return{SIN:Blockly.Msg.MATH_TRIG_TOOLTIP_SIN,COS:Blockly.Msg.MATH_TRIG_TOOLTIP_COS,TAN:Blockly.Msg.MATH_TRIG_TOOLTIP_TAN,ASIN:Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN,ACOS:Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS,ATAN:Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN}[b]})}};
|
||||||
|
Blockly.Blocks.math_constant={init:function(){this.jsonInit({message0:"%1",args0:[{type:"field_dropdown",name:"CONSTANT",options:[["\u03c0","PI"],["e","E"],["\u03c6","GOLDEN_RATIO"],["sqrt(2)","SQRT2"],["sqrt(\u00bd)","SQRT1_2"],["\u221e","INFINITY"]]}],output:"Number",colour:Blockly.Blocks.math.HUE,tooltip:Blockly.Msg.MATH_CONSTANT_TOOLTIP,helpUrl:Blockly.Msg.MATH_CONSTANT_HELPURL})}};
|
||||||
|
Blockly.Blocks.math_number_property={init:function(){var a=[[Blockly.Msg.MATH_IS_EVEN,"EVEN"],[Blockly.Msg.MATH_IS_ODD,"ODD"],[Blockly.Msg.MATH_IS_PRIME,"PRIME"],[Blockly.Msg.MATH_IS_WHOLE,"WHOLE"],[Blockly.Msg.MATH_IS_POSITIVE,"POSITIVE"],[Blockly.Msg.MATH_IS_NEGATIVE,"NEGATIVE"],[Blockly.Msg.MATH_IS_DIVISIBLE_BY,"DIVISIBLE_BY"]];this.setColour(Blockly.Blocks.math.HUE);this.appendValueInput("NUMBER_TO_CHECK").setCheck("Number");a=new Blockly.FieldDropdown(a,function(a){this.sourceBlock_.updateShape_("DIVISIBLE_BY"==
|
||||||
|
a)});this.appendDummyInput().appendField(a,"PROPERTY");this.setInputsInline(!0);this.setOutput(!0,"Boolean");this.setTooltip(Blockly.Msg.MATH_IS_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),b="DIVISIBLE_BY"==this.getFieldValue("PROPERTY");a.setAttribute("divisor_input",b);return a},domToMutation:function(a){a="true"==a.getAttribute("divisor_input");this.updateShape_(a)},updateShape_:function(a){var b=this.getInput("DIVISOR");a?b||this.appendValueInput("DIVISOR").setCheck("Number"):
|
||||||
|
b&&this.removeInput("DIVISOR")}};Blockly.Blocks.math_change={init:function(){this.jsonInit({message0:Blockly.Msg.MATH_CHANGE_TITLE,args0:[{type:"field_variable",name:"VAR",variable:Blockly.Msg.MATH_CHANGE_TITLE_ITEM},{type:"input_value",name:"DELTA",check:"Number"}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.variables.HUE,helpUrl:Blockly.Msg.MATH_CHANGE_HELPURL});var a=this;this.setTooltip(function(){return Blockly.Msg.MATH_CHANGE_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})}};
|
||||||
|
Blockly.Blocks.math_round={init:function(){this.jsonInit({message0:"%1 %2",args0:[{type:"field_dropdown",name:"OP",options:[[Blockly.Msg.MATH_ROUND_OPERATOR_ROUND,"ROUND"],[Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDUP,"ROUNDUP"],[Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDDOWN,"ROUNDDOWN"]]},{type:"input_value",name:"NUM",check:"Number"}],output:"Number",colour:Blockly.Blocks.math.HUE,tooltip:Blockly.Msg.MATH_ROUND_TOOLTIP,helpUrl:Blockly.Msg.MATH_ROUND_HELPURL})}};
|
||||||
|
Blockly.Blocks.math_on_list={init:function(){var a=[[Blockly.Msg.MATH_ONLIST_OPERATOR_SUM,"SUM"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MIN,"MIN"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MAX,"MAX"],[Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE,"AVERAGE"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN,"MEDIAN"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MODE,"MODE"],[Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV,"STD_DEV"],[Blockly.Msg.MATH_ONLIST_OPERATOR_RANDOM,"RANDOM"]],b=this;this.setHelpUrl(Blockly.Msg.MATH_ONLIST_HELPURL);this.setColour(Blockly.Blocks.math.HUE);
|
||||||
|
this.setOutput(!0,"Number");a=new Blockly.FieldDropdown(a,function(a){b.updateType_(a)});this.appendValueInput("LIST").setCheck("Array").appendField(a,"OP");this.setTooltip(function(){var a=b.getFieldValue("OP");return{SUM:Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM,MIN:Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN,MAX:Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX,AVERAGE:Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE,MEDIAN:Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN,MODE:Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE,STD_DEV:Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV,
|
||||||
|
RANDOM:Blockly.Msg.MATH_ONLIST_TOOLTIP_RANDOM}[a]})},updateType_:function(a){"MODE"==a?this.outputConnection.setCheck("Array"):this.outputConnection.setCheck("Number")},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("op",this.getFieldValue("OP"));return a},domToMutation:function(a){this.updateType_(a.getAttribute("op"))}};
|
||||||
|
Blockly.Blocks.math_modulo={init:function(){this.jsonInit({message0:Blockly.Msg.MATH_MODULO_TITLE,args0:[{type:"input_value",name:"DIVIDEND",check:"Number"},{type:"input_value",name:"DIVISOR",check:"Number"}],inputsInline:!0,output:"Number",colour:Blockly.Blocks.math.HUE,tooltip:Blockly.Msg.MATH_MODULO_TOOLTIP,helpUrl:Blockly.Msg.MATH_MODULO_HELPURL})}};
|
||||||
|
Blockly.Blocks.math_constrain={init:function(){this.jsonInit({message0:Blockly.Msg.MATH_CONSTRAIN_TITLE,args0:[{type:"input_value",name:"VALUE",check:"Number"},{type:"input_value",name:"LOW",check:"Number"},{type:"input_value",name:"HIGH",check:"Number"}],inputsInline:!0,output:"Number",colour:Blockly.Blocks.math.HUE,tooltip:Blockly.Msg.MATH_CONSTRAIN_TOOLTIP,helpUrl:Blockly.Msg.MATH_CONSTRAIN_HELPURL})}};
|
||||||
|
Blockly.Blocks.math_random_int={init:function(){this.jsonInit({message0:Blockly.Msg.MATH_RANDOM_INT_TITLE,args0:[{type:"input_value",name:"FROM",check:"Number"},{type:"input_value",name:"TO",check:"Number"}],inputsInline:!0,output:"Number",colour:Blockly.Blocks.math.HUE,tooltip:Blockly.Msg.MATH_RANDOM_INT_TOOLTIP,helpUrl:Blockly.Msg.MATH_RANDOM_INT_HELPURL})}};
|
||||||
|
Blockly.Blocks.math_random_float={init:function(){this.jsonInit({message0:Blockly.Msg.MATH_RANDOM_FLOAT_TITLE_RANDOM,output:"Number",colour:Blockly.Blocks.math.HUE,tooltip:Blockly.Msg.MATH_RANDOM_FLOAT_TOOLTIP,helpUrl:Blockly.Msg.MATH_RANDOM_FLOAT_HELPURL})}};Blockly.Blocks.procedures={};Blockly.Blocks.procedures.HUE=290;
|
||||||
|
Blockly.Blocks.procedures_defnoreturn={init:function(){var a=new Blockly.FieldTextInput("",Blockly.Procedures.rename);a.setSpellcheck(!1);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE).appendField(a,"NAME").appendField("","PARAMS");this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));(this.workspace.options.comments||this.workspace.options.parentWorkspace&&this.workspace.options.parentWorkspace.options.comments)&&Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT&&
|
||||||
|
this.setCommentText(Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL);this.arguments_=[];this.setStatements_(!0);this.statementConnection_=null},setStatements_:function(a){this.hasStatements_!==a&&(a?(this.appendStatementInput("STACK").appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_DO),this.getInput("RETURN")&&this.moveInputBefore("STACK",
|
||||||
|
"RETURN")):this.removeInput("STACK",!0),this.hasStatements_=a)},updateParams_:function(){for(var a=!1,b={},c=0;c<this.arguments_.length;c++){if(b["arg_"+this.arguments_[c].toLowerCase()]){a=!0;break}b["arg_"+this.arguments_[c].toLowerCase()]=!0}a?this.setWarningText(Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING):this.setWarningText(null);a="";this.arguments_.length&&(a=Blockly.Msg.PROCEDURES_BEFORE_PARAMS+" "+this.arguments_.join(", "));Blockly.Events.disable();try{this.setFieldValue(a,"PARAMS")}finally{Blockly.Events.enable()}},
|
||||||
|
mutationToDom:function(a){var b=document.createElement("mutation");a&&b.setAttribute("name",this.getFieldValue("NAME"));for(var c=0;c<this.arguments_.length;c++){var e=document.createElement("arg");e.setAttribute("name",this.arguments_[c]);a&&this.paramIds_&&e.setAttribute("paramId",this.paramIds_[c]);b.appendChild(e)}this.hasStatements_||b.setAttribute("statements","false");return b},domToMutation:function(a){this.arguments_=[];for(var b=0,c;c=a.childNodes[b];b++)"arg"==c.nodeName.toLowerCase()&&
|
||||||
|
this.arguments_.push(c.getAttribute("name"));this.updateParams_();Blockly.Procedures.mutateCallers(this);this.setStatements_("false"!==a.getAttribute("statements"))},decompose:function(a){var b=a.newBlock("procedures_mutatorcontainer");b.initSvg();this.getInput("RETURN")?b.setFieldValue(this.hasStatements_?"TRUE":"FALSE","STATEMENTS"):b.getInput("STATEMENT_INPUT").setVisible(!1);for(var c=b.getInput("STACK").connection,e=0;e<this.arguments_.length;e++){var d=a.newBlock("procedures_mutatorarg");d.initSvg();
|
||||||
|
d.setFieldValue(this.arguments_[e],"NAME");d.oldLocation=e;c.connect(d.previousConnection);c=d.nextConnection}Blockly.Procedures.mutateCallers(this);return b},compose:function(a){this.arguments_=[];this.paramIds_=[];for(var b=a.getInputTargetBlock("STACK");b;)this.arguments_.push(b.getFieldValue("NAME")),this.paramIds_.push(b.id),b=b.nextConnection&&b.nextConnection.targetBlock();this.updateParams_();Blockly.Procedures.mutateCallers(this);a=a.getFieldValue("STATEMENTS");if(null!==a&&(a="TRUE"==a,
|
||||||
|
this.hasStatements_!=a))if(a)this.setStatements_(!0),Blockly.Mutator.reconnect(this.statementConnection_,this,"STACK"),this.statementConnection_=null;else{a=this.getInput("STACK").connection;if(this.statementConnection_=a.targetConnection)a=a.targetBlock(),a.unplug(),a.bumpNeighbours_();this.setStatements_(!1)}},getProcedureDef:function(){return[this.getFieldValue("NAME"),this.arguments_,!1]},getVars:function(){return this.arguments_},renameVar:function(a,b){for(var c=!1,e=0;e<this.arguments_.length;e++)Blockly.Names.equals(a,
|
||||||
|
this.arguments_[e])&&(this.arguments_[e]=b,c=!0);if(c&&(this.updateParams_(),this.mutator.isVisible()))for(var c=this.mutator.workspace_.getAllBlocks(),e=0,d;d=c[e];e++)"procedures_mutatorarg"==d.type&&Blockly.Names.equals(a,d.getFieldValue("NAME"))&&d.setFieldValue(b,"NAME")},customContextMenu:function(a){var b={enabled:!0},c=this.getFieldValue("NAME");b.text=Blockly.Msg.PROCEDURES_CREATE_DO.replace("%1",c);var e=goog.dom.createDom("mutation");e.setAttribute("name",c);for(var d=0;d<this.arguments_.length;d++)c=
|
||||||
|
goog.dom.createDom("arg"),c.setAttribute("name",this.arguments_[d]),e.appendChild(c);e=goog.dom.createDom("block",null,e);e.setAttribute("type",this.callType_);b.callback=Blockly.ContextMenu.callbackFactory(this,e);a.push(b);if(!this.isCollapsed())for(d=0;d<this.arguments_.length;d++)b={enabled:!0},c=this.arguments_[d],b.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",c),e=goog.dom.createDom("field",null,c),e.setAttribute("name","VAR"),e=goog.dom.createDom("block",null,e),e.setAttribute("type",
|
||||||
|
"variables_get"),b.callback=Blockly.ContextMenu.callbackFactory(this,e),a.push(b)},callType_:"procedures_callnoreturn"};
|
||||||
|
Blockly.Blocks.procedures_defreturn={init:function(){var a=new Blockly.FieldTextInput("",Blockly.Procedures.rename);a.setSpellcheck(!1);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFRETURN_TITLE).appendField(a,"NAME").appendField("","PARAMS");this.appendValueInput("RETURN").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));(this.workspace.options.comments||this.workspace.options.parentWorkspace&&
|
||||||
|
this.workspace.options.parentWorkspace.options.comments)&&Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT&&this.setCommentText(Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL);this.arguments_=[];this.setStatements_(!0);this.statementConnection_=null},setStatements_:Blockly.Blocks.procedures_defnoreturn.setStatements_,updateParams_:Blockly.Blocks.procedures_defnoreturn.updateParams_,
|
||||||
|
mutationToDom:Blockly.Blocks.procedures_defnoreturn.mutationToDom,domToMutation:Blockly.Blocks.procedures_defnoreturn.domToMutation,decompose:Blockly.Blocks.procedures_defnoreturn.decompose,compose:Blockly.Blocks.procedures_defnoreturn.compose,getProcedureDef:function(){return[this.getFieldValue("NAME"),this.arguments_,!0]},getVars:Blockly.Blocks.procedures_defnoreturn.getVars,renameVar:Blockly.Blocks.procedures_defnoreturn.renameVar,customContextMenu:Blockly.Blocks.procedures_defnoreturn.customContextMenu,
|
||||||
|
callType_:"procedures_callreturn"};Blockly.Blocks.procedures_mutatorcontainer={init:function(){this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE);this.appendStatementInput("STACK");this.appendDummyInput("STATEMENT_INPUT").appendField(Blockly.Msg.PROCEDURES_ALLOW_STATEMENTS).appendField(new Blockly.FieldCheckbox("TRUE"),"STATEMENTS");this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP);this.contextMenu=!1}};
|
||||||
|
Blockly.Blocks.procedures_mutatorarg={init:function(){var a=new Blockly.FieldTextInput("x",this.validator_);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_MUTATORARG_TITLE).appendField(a,"NAME");this.setPreviousStatement(!0);this.setNextStatement(!0);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP);this.contextMenu=!1;a.onFinishEditing_=this.createNewVar_;a.onFinishEditing_("x")},validator_:function(a){return(a=a.replace(/[\s\xa0]+/g,
|
||||||
|
" ").replace(/^ | $/g,""))||null},createNewVar_:function(a){var b=this.sourceBlock_;b&&b.workspace&&b.workspace.options&&b.workspace.options.parentWorkspace&&b.workspace.options.parentWorkspace.createVariable(a)}};
|
||||||
|
Blockly.Blocks.procedures_callnoreturn={init:function(){this.appendDummyInput("TOPROW").appendField(this.id,"NAME");this.setPreviousStatement(!0);this.setNextStatement(!0);this.setColour(Blockly.Blocks.procedures.HUE);this.setHelpUrl(Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL);this.arguments_=[];this.quarkConnections_={};this.quarkIds_=null},getProcedureCall:function(){return this.getFieldValue("NAME")},renameProcedure:function(a,b){Blockly.Names.equals(a,this.getProcedureCall())&&(this.setFieldValue(b,
|
||||||
|
"NAME"),this.setTooltip((this.outputConnection?Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP:Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP).replace("%1",b)))},setProcedureParameters_:function(a,b){var c=Blockly.Procedures.getDefinition(this.getProcedureCall(),this.workspace),e=c&&c.mutator&&c.mutator.isVisible();e||(this.quarkConnections_={},this.quarkIds_=null);if(b)if(goog.array.equals(this.arguments_,a))this.quarkIds_=b;else{if(b.length!=a.length)throw"Error: paramNames and paramIds must be the same length.";
|
||||||
|
this.setCollapsed(!1);this.quarkIds_||(this.quarkConnections_={},a.join("\n")==this.arguments_.join("\n")?this.quarkIds_=b:this.quarkIds_=[]);c=this.rendered;this.rendered=!1;for(var d=0;d<this.arguments_.length;d++){var f=this.getInput("ARG"+d);f&&(f=f.connection.targetConnection,this.quarkConnections_[this.quarkIds_[d]]=f,e&&f&&-1==b.indexOf(this.quarkIds_[d])&&(f.disconnect(),f.getSourceBlock().bumpNeighbours_()))}this.arguments_=[].concat(a);this.updateShape_();if(this.quarkIds_=b)for(d=0;d<this.arguments_.length;d++)e=
|
||||||
|
this.quarkIds_[d],e in this.quarkConnections_&&(f=this.quarkConnections_[e],Blockly.Mutator.reconnect(f,this,"ARG"+d)||delete this.quarkConnections_[e]);(this.rendered=c)&&this.render()}},updateShape_:function(){for(var a=0;a<this.arguments_.length;a++){var b=this.getField("ARGNAME"+a);if(b){Blockly.Events.disable();try{b.setValue(this.arguments_[a])}finally{Blockly.Events.enable()}}else b=new Blockly.FieldLabel(this.arguments_[a]),this.appendValueInput("ARG"+a).setAlign(Blockly.ALIGN_RIGHT).appendField(b,
|
||||||
|
"ARGNAME"+a).init()}for(;this.getInput("ARG"+a);)this.removeInput("ARG"+a),a++;if(a=this.getInput("TOPROW"))this.arguments_.length?this.getField("WITH")||(a.appendField(Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS,"WITH"),a.init()):this.getField("WITH")&&a.removeField("WITH")},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("name",this.getProcedureCall());for(var b=0;b<this.arguments_.length;b++){var c=document.createElement("arg");c.setAttribute("name",this.arguments_[b]);
|
||||||
|
a.appendChild(c)}return a},domToMutation:function(a){var b=a.getAttribute("name");this.renameProcedure(this.getProcedureCall(),b);for(var b=[],c=[],e=0,d;d=a.childNodes[e];e++)"arg"==d.nodeName.toLowerCase()&&(b.push(d.getAttribute("name")),c.push(d.getAttribute("paramId")));this.setProcedureParameters_(b,c)},renameVar:function(a,b){for(var c=0;c<this.arguments_.length;c++)Blockly.Names.equals(a,this.arguments_[c])&&(this.arguments_[c]=b,this.getField("ARGNAME"+c).setValue(b))},onchange:function(a){if(this.workspace&&
|
||||||
|
!this.workspace.isFlyout)if(a.type==Blockly.Events.CREATE&&-1!=a.ids.indexOf(this.id)){var b=this.getProcedureCall(),b=Blockly.Procedures.getDefinition(b,this.workspace);!b||b.type==this.defType_&&JSON.stringify(b.arguments_)==JSON.stringify(this.arguments_)||(b=null);if(!b){Blockly.Events.setGroup(a.group);a=goog.dom.createDom("xml");b=goog.dom.createDom("block");b.setAttribute("type",this.defType_);var c=this.getRelativeToSurfaceXY(),e=c.y+2*Blockly.SNAP_RADIUS;b.setAttribute("x",c.x+Blockly.SNAP_RADIUS*
|
||||||
|
(this.RTL?-1:1));b.setAttribute("y",e);c=this.mutationToDom();b.appendChild(c);c=goog.dom.createDom("field");c.setAttribute("name","NAME");c.appendChild(document.createTextNode(this.getProcedureCall()));b.appendChild(c);a.appendChild(b);Blockly.Xml.domToWorkspace(a,this.workspace);Blockly.Events.setGroup(!1)}}else a.type==Blockly.Events.DELETE&&(b=this.getProcedureCall(),b=Blockly.Procedures.getDefinition(b,this.workspace),b||(Blockly.Events.setGroup(a.group),this.dispose(!0,!1),Blockly.Events.setGroup(!1)))},
|
||||||
|
customContextMenu:function(a){var b={enabled:!0};b.text=Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF;var c=this.getProcedureCall(),e=this.workspace;b.callback=function(){var a=Blockly.Procedures.getDefinition(c,e);a&&a.select()};a.push(b)},defType_:"procedures_defnoreturn"};
|
||||||
|
Blockly.Blocks.procedures_callreturn={init:function(){this.appendDummyInput("TOPROW").appendField("","NAME");this.setOutput(!0);this.setColour(Blockly.Blocks.procedures.HUE);this.setHelpUrl(Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL);this.arguments_=[];this.quarkConnections_={};this.quarkIds_=null},getProcedureCall:Blockly.Blocks.procedures_callnoreturn.getProcedureCall,renameProcedure:Blockly.Blocks.procedures_callnoreturn.renameProcedure,setProcedureParameters_:Blockly.Blocks.procedures_callnoreturn.setProcedureParameters_,
|
||||||
|
updateShape_:Blockly.Blocks.procedures_callnoreturn.updateShape_,mutationToDom:Blockly.Blocks.procedures_callnoreturn.mutationToDom,domToMutation:Blockly.Blocks.procedures_callnoreturn.domToMutation,renameVar:Blockly.Blocks.procedures_callnoreturn.renameVar,onchange:Blockly.Blocks.procedures_callnoreturn.onchange,customContextMenu:Blockly.Blocks.procedures_callnoreturn.customContextMenu,defType_:"procedures_defreturn"};
|
||||||
|
Blockly.Blocks.procedures_ifreturn={init:function(){this.appendValueInput("CONDITION").setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);this.appendValueInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setColour(Blockly.Blocks.procedures.HUE);this.setTooltip(Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP);this.setHelpUrl(Blockly.Msg.PROCEDURES_IFRETURN_HELPURL);this.hasReturnValue_=!0},
|
||||||
|
mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("value",Number(this.hasReturnValue_));return a},domToMutation:function(a){this.hasReturnValue_=1==a.getAttribute("value");this.hasReturnValue_||(this.removeInput("VALUE"),this.appendDummyInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN))},onchange:function(a){if(this.workspace.isDragging&&!this.workspace.isDragging()){a=!1;var b=this;do{if(-1!=this.FUNCTION_TYPES.indexOf(b.type)){a=!0;break}b=b.getSurroundParent()}while(b);
|
||||||
|
a?("procedures_defnoreturn"==b.type&&this.hasReturnValue_?(this.removeInput("VALUE"),this.appendDummyInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN),this.hasReturnValue_=!1):"procedures_defreturn"!=b.type||this.hasReturnValue_||(this.removeInput("VALUE"),this.appendValueInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN),this.hasReturnValue_=!0),this.setWarningText(null),this.isInFlyout||this.setDisabled(!1)):(this.setWarningText(Blockly.Msg.PROCEDURES_IFRETURN_WARNING),
|
||||||
|
this.isInFlyout||this.getInheritedDisabled()||this.setDisabled(!0))}},FUNCTION_TYPES:["procedures_defnoreturn","procedures_defreturn"]};Blockly.Blocks.sumorobot={};Blockly.Blocks.sumorobot_delay={init:function(){this.setHelpUrl(Blockly.Msg.SUMOROBOT_DELAY_HELPURL);this.setColour("#E64C00");this.appendDummyInput().appendField(Blockly.Msg.SUMOROBOT_DELAY_TITLE).appendField(new Blockly.FieldTextInput("1000",Blockly.FieldTextInput.numberValidator),"DELAY");this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.SUMOROBOT_DELAY_TOOLTIP)}};
|
||||||
|
Blockly.Blocks.sumorobot_move={init:function(){var a=[[Blockly.Msg.SUMOROBOT_MOVE_MSG_STOP,"STOP"],[Blockly.Msg.SUMOROBOT_MOVE_MSG_LEFT,"LEFT"],[Blockly.Msg.SUMOROBOT_MOVE_MSG_RIGHT,"RIGHT"],[Blockly.Msg.SUMOROBOT_MOVE_MSG_FORWARD,"FORWARD"],[Blockly.Msg.SUMOROBOT_MOVE_MSG_BACKWARD,"BACKWARD"]];this.setHelpUrl(Blockly.Msg.SUMOROBOT_MOVE_HELPURL);this.setColour("#E60000");a=new Blockly.FieldDropdown(a);this.appendDummyInput().appendField(a,"MOVE");this.setPreviousStatement(!0);this.setNextStatement(!0);
|
||||||
|
this.setTooltip(Blockly.Msg.SUMOROBOT_MOVE_TOOLTIP)}};Blockly.Blocks.sumorobot_enemy={init:function(){this.setHelpUrl(Blockly.Msg.SUMOROBOT_ENEMY_HELPURL);this.setColour("#0099E6");this.appendDummyInput().appendField("enemy");this.setOutput(!0,"Boolean");this.setTooltip(Blockly.Msg.SUMOROBOT_ENEMY_TOOLTIP)}};
|
||||||
|
Blockly.Blocks.sumorobot_line={init:function(){var a=[[Blockly.Msg.SUMOROBOT_LINE_MSG_LEFT,"LEFT"],[Blockly.Msg.SUMOROBOT_LINE_MSG_RIGHT,"RIGHT"]];this.setHelpUrl(Blockly.Msg.SUMOROBOT_LINE_HELPURL);this.setColour("#E6BF00");a=new Blockly.FieldDropdown(a);this.appendDummyInput().appendField(a,"LINE");this.setOutput(!0,"Boolean");this.setTooltip(Blockly.Msg.SUMOROBOT_LINE_TOOLTIP)}};Blockly.Blocks.texts={};Blockly.Blocks.texts.HUE=160;
|
||||||
|
Blockly.Blocks.text={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_TEXT_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.appendDummyInput().appendField(this.newQuote_(!0)).appendField(new Blockly.FieldTextInput(""),"TEXT").appendField(this.newQuote_(!1));this.setOutput(!0,"String");var a=this;this.setTooltip(function(){var b=a.getParent();return b&&b.getInputsInline()&&b.tooltip||Blockly.Msg.TEXT_TEXT_TOOLTIP})},newQuote_:function(a){return new Blockly.FieldImage(a==this.RTL?"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==":
|
||||||
|
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC",12,12,'"')}};
|
||||||
|
Blockly.Blocks.text_join={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_JOIN_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.itemCount_=2;this.updateShape_();this.setOutput(!0,"String");this.setMutator(new Blockly.Mutator(["text_create_join_item"]));this.setTooltip(Blockly.Msg.TEXT_JOIN_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("items",this.itemCount_);return a},domToMutation:function(a){this.itemCount_=parseInt(a.getAttribute("items"),10);
|
||||||
|
this.updateShape_()},decompose:function(a){var b=a.newBlock("text_create_join_container");b.initSvg();for(var c=b.getInput("STACK").connection,e=0;e<this.itemCount_;e++){var d=a.newBlock("text_create_join_item");d.initSvg();c.connect(d.previousConnection);c=d.nextConnection}return b},compose:function(a){var b=a.getInputTargetBlock("STACK");for(a=[];b;)a.push(b.valueConnection_),b=b.nextConnection&&b.nextConnection.targetBlock();for(b=0;b<this.itemCount_;b++){var c=this.getInput("ADD"+b).connection.targetConnection;
|
||||||
|
c&&-1==a.indexOf(c)&&c.disconnect()}this.itemCount_=a.length;this.updateShape_();for(b=0;b<this.itemCount_;b++)Blockly.Mutator.reconnect(a[b],this,"ADD"+b)},saveConnections:function(a){a=a.getInputTargetBlock("STACK");for(var b=0;a;){var c=this.getInput("ADD"+b);a.valueConnection_=c&&c.connection.targetConnection;b++;a=a.nextConnection&&a.nextConnection.targetBlock()}},updateShape_:function(){this.itemCount_&&this.getInput("EMPTY")?this.removeInput("EMPTY"):this.itemCount_||this.getInput("EMPTY")||
|
||||||
|
this.appendDummyInput("EMPTY").appendField(this.newQuote_(!0)).appendField(this.newQuote_(!1));for(var a=0;a<this.itemCount_;a++)if(!this.getInput("ADD"+a)){var b=this.appendValueInput("ADD"+a);0==a&&b.appendField(Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH)}for(;this.getInput("ADD"+a);)this.removeInput("ADD"+a),a++},newQuote_:Blockly.Blocks.text.newQuote_};
|
||||||
|
Blockly.Blocks.text_create_join_container={init:function(){this.setColour(Blockly.Blocks.texts.HUE);this.appendDummyInput().appendField(Blockly.Msg.TEXT_CREATE_JOIN_TITLE_JOIN);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.TEXT_CREATE_JOIN_TOOLTIP);this.contextMenu=!1}};
|
||||||
|
Blockly.Blocks.text_create_join_item={init:function(){this.setColour(Blockly.Blocks.texts.HUE);this.appendDummyInput().appendField(Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TITLE_ITEM);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TOOLTIP);this.contextMenu=!1}};
|
||||||
|
Blockly.Blocks.text_append={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_APPEND_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.appendValueInput("TEXT").appendField(Blockly.Msg.TEXT_APPEND_TO).appendField(new Blockly.FieldVariable(Blockly.Msg.TEXT_APPEND_VARIABLE),"VAR").appendField(Blockly.Msg.TEXT_APPEND_APPENDTEXT);this.setPreviousStatement(!0);this.setNextStatement(!0);var a=this;this.setTooltip(function(){return Blockly.Msg.TEXT_APPEND_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})}};
|
||||||
|
Blockly.Blocks.text_length={init:function(){this.jsonInit({message0:Blockly.Msg.TEXT_LENGTH_TITLE,args0:[{type:"input_value",name:"VALUE",check:["String","Array"]}],output:"Number",colour:Blockly.Blocks.texts.HUE,tooltip:Blockly.Msg.TEXT_LENGTH_TOOLTIP,helpUrl:Blockly.Msg.TEXT_LENGTH_HELPURL})}};
|
||||||
|
Blockly.Blocks.text_isEmpty={init:function(){this.jsonInit({message0:Blockly.Msg.TEXT_ISEMPTY_TITLE,args0:[{type:"input_value",name:"VALUE",check:["String","Array"]}],output:"Boolean",colour:Blockly.Blocks.texts.HUE,tooltip:Blockly.Msg.TEXT_ISEMPTY_TOOLTIP,helpUrl:Blockly.Msg.TEXT_ISEMPTY_HELPURL})}};
|
||||||
|
Blockly.Blocks.text_indexOf={init:function(){var a=[[Blockly.Msg.TEXT_INDEXOF_OPERATOR_FIRST,"FIRST"],[Blockly.Msg.TEXT_INDEXOF_OPERATOR_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.TEXT_INDEXOF_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.setOutput(!0,"Number");this.appendValueInput("VALUE").setCheck("String").appendField(Blockly.Msg.TEXT_INDEXOF_INPUT_INTEXT);this.appendValueInput("FIND").setCheck("String").appendField(new Blockly.FieldDropdown(a),"END");Blockly.Msg.TEXT_INDEXOF_TAIL&&this.appendDummyInput().appendField(Blockly.Msg.TEXT_INDEXOF_TAIL);
|
||||||
|
this.setInputsInline(!0);var b=this;this.setTooltip(function(){return Blockly.Msg.TEXT_INDEXOF_TOOLTIP.replace("%1",b.workspace.options.oneBasedIndex?"0":"-1")})}};
|
||||||
|
Blockly.Blocks.text_charAt={init:function(){this.WHERE_OPTIONS=[[Blockly.Msg.TEXT_CHARAT_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_CHARAT_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_CHARAT_FIRST,"FIRST"],[Blockly.Msg.TEXT_CHARAT_LAST,"LAST"],[Blockly.Msg.TEXT_CHARAT_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.TEXT_CHARAT_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.setOutput(!0,"String");this.appendValueInput("VALUE").setCheck("String").appendField(Blockly.Msg.TEXT_CHARAT_INPUT_INTEXT);this.appendDummyInput("AT");
|
||||||
|
this.setInputsInline(!0);this.updateAt_(!0);var a=this;this.setTooltip(function(){var b=a.getFieldValue("WHERE"),c=Blockly.Msg.TEXT_CHARAT_TOOLTIP;if("FROM_START"==b||"FROM_END"==b)c+=" "+("FROM_START"==b?Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP:Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP).replace("%1",a.workspace.options.oneBasedIndex?"#1":"#0");return c})},mutationToDom:function(){var a=document.createElement("mutation"),b=this.getInput("AT").type==Blockly.INPUT_VALUE;a.setAttribute("at",b);return a},
|
||||||
|
domToMutation:function(a){a="false"!=a.getAttribute("at");this.updateAt_(a)},updateAt_:function(a){this.removeInput("AT");this.removeInput("ORDINAL",!0);a?(this.appendValueInput("AT").setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput("AT");Blockly.Msg.TEXT_CHARAT_TAIL&&(this.removeInput("TAIL",!0),this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_CHARAT_TAIL));var b=new Blockly.FieldDropdown(this.WHERE_OPTIONS,
|
||||||
|
function(b){var c="FROM_START"==b||"FROM_END"==b;if(c!=a){var d=this.sourceBlock_;d.updateAt_(c);d.setFieldValue(b,"WHERE");return null}});this.getInput("AT").appendField(b,"WHERE")}};
|
||||||
|
Blockly.Blocks.text_getSubstring={init:function(){this.WHERE_OPTIONS_1=[[Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_GET_SUBSTRING_START_FIRST,"FIRST"]];this.WHERE_OPTIONS_2=[[Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_GET_SUBSTRING_END_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.TEXT_GET_SUBSTRING_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);
|
||||||
|
this.appendValueInput("STRING").setCheck("String").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);this.appendDummyInput("AT1");this.appendDummyInput("AT2");Blockly.Msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,"String");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip(Blockly.Msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),
|
||||||
|
b=this.getInput("AT1").type==Blockly.INPUT_VALUE;a.setAttribute("at1",b);b=this.getInput("AT2").type==Blockly.INPUT_VALUE;a.setAttribute("at2",b);return a},domToMutation:function(a){var b="true"==a.getAttribute("at1");a="true"==a.getAttribute("at2");this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput("AT"+a);this.removeInput("ORDINAL"+a,!0);b?(this.appendValueInput("AT"+a).setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL"+a).appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):
|
||||||
|
this.appendDummyInput("AT"+a);2==a&&Blockly.Msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput("TAIL",!0),this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL));var c=new Blockly.FieldDropdown(this["WHERE_OPTIONS_"+a],function(c){var d="FROM_START"==c||"FROM_END"==c;if(d!=b){var e=this.sourceBlock_;e.updateAt_(a,d);e.setFieldValue(c,"WHERE"+a);return null}});this.getInput("AT"+a).appendField(c,"WHERE"+a);1==a&&this.moveInputBefore("AT1","AT2")}};
|
||||||
|
Blockly.Blocks.text_changeCase={init:function(){var a=[[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,"UPPERCASE"],[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,"LOWERCASE"],[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,"TITLECASE"]];this.setHelpUrl(Blockly.Msg.TEXT_CHANGECASE_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.appendValueInput("TEXT").setCheck("String").appendField(new Blockly.FieldDropdown(a),"CASE");this.setOutput(!0,"String");this.setTooltip(Blockly.Msg.TEXT_CHANGECASE_TOOLTIP)}};
|
||||||
|
Blockly.Blocks.text_trim={init:function(){var a=[[Blockly.Msg.TEXT_TRIM_OPERATOR_BOTH,"BOTH"],[Blockly.Msg.TEXT_TRIM_OPERATOR_LEFT,"LEFT"],[Blockly.Msg.TEXT_TRIM_OPERATOR_RIGHT,"RIGHT"]];this.setHelpUrl(Blockly.Msg.TEXT_TRIM_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);this.appendValueInput("TEXT").setCheck("String").appendField(new Blockly.FieldDropdown(a),"MODE");this.setOutput(!0,"String");this.setTooltip(Blockly.Msg.TEXT_TRIM_TOOLTIP)}};
|
||||||
|
Blockly.Blocks.text_print={init:function(){this.jsonInit({message0:Blockly.Msg.TEXT_PRINT_TITLE,args0:[{type:"input_value",name:"TEXT"}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.texts.HUE,tooltip:Blockly.Msg.TEXT_PRINT_TOOLTIP,helpUrl:Blockly.Msg.TEXT_PRINT_HELPURL})}};
|
||||||
|
Blockly.Blocks.text_prompt_ext={init:function(){var a=[[Blockly.Msg.TEXT_PROMPT_TYPE_TEXT,"TEXT"],[Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER,"NUMBER"]];this.setHelpUrl(Blockly.Msg.TEXT_PROMPT_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);var b=this,a=new Blockly.FieldDropdown(a,function(a){b.updateType_(a)});this.appendValueInput("TEXT").appendField(a,"TYPE");this.setOutput(!0,"String");this.setTooltip(function(){return"TEXT"==b.getFieldValue("TYPE")?Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT:Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER})},
|
||||||
|
updateType_:function(a){this.outputConnection.setCheck("NUMBER"==a?"Number":"String")},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("type",this.getFieldValue("TYPE"));return a},domToMutation:function(a){this.updateType_(a.getAttribute("type"))}};
|
||||||
|
Blockly.Blocks.text_prompt={init:function(){var a=[[Blockly.Msg.TEXT_PROMPT_TYPE_TEXT,"TEXT"],[Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER,"NUMBER"]],b=this;this.setHelpUrl(Blockly.Msg.TEXT_PROMPT_HELPURL);this.setColour(Blockly.Blocks.texts.HUE);a=new Blockly.FieldDropdown(a,function(a){b.updateType_(a)});this.appendDummyInput().appendField(a,"TYPE").appendField(this.newQuote_(!0)).appendField(new Blockly.FieldTextInput(""),"TEXT").appendField(this.newQuote_(!1));this.setOutput(!0,"String");this.setTooltip(function(){return"TEXT"==
|
||||||
|
b.getFieldValue("TYPE")?Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT:Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER})},newQuote_:Blockly.Blocks.text.newQuote_,updateType_:Blockly.Blocks.text_prompt_ext.updateType_,mutationToDom:Blockly.Blocks.text_prompt_ext.mutationToDom,domToMutation:Blockly.Blocks.text_prompt_ext.domToMutation};Blockly.Blocks.variables={};Blockly.Blocks.variables.HUE=330;
|
||||||
|
Blockly.Blocks.variables_get={init:function(){this.setHelpUrl(Blockly.Msg.VARIABLES_GET_HELPURL);this.setColour(Blockly.Blocks.variables.HUE);this.appendDummyInput().appendField(new Blockly.FieldVariable(Blockly.Msg.VARIABLES_DEFAULT_NAME),"VAR");this.setOutput(!0);this.setTooltip(Blockly.Msg.VARIABLES_GET_TOOLTIP);this.contextMenuMsg_=Blockly.Msg.VARIABLES_GET_CREATE_SET},contextMenuType_:"variables_set",customContextMenu:function(a){var b={enabled:!0},c=this.getFieldValue("VAR");b.text=this.contextMenuMsg_.replace("%1",
|
||||||
|
c);c=goog.dom.createDom("field",null,c);c.setAttribute("name","VAR");c=goog.dom.createDom("block",null,c);c.setAttribute("type",this.contextMenuType_);b.callback=Blockly.ContextMenu.callbackFactory(this,c);a.push(b)}};
|
||||||
|
Blockly.Blocks.variables_set={init:function(){this.jsonInit({message0:Blockly.Msg.VARIABLES_SET,args0:[{type:"field_variable",name:"VAR",variable:Blockly.Msg.VARIABLES_DEFAULT_NAME},{type:"input_value",name:"VALUE"}],previousStatement:null,nextStatement:null,colour:Blockly.Blocks.variables.HUE,tooltip:Blockly.Msg.VARIABLES_SET_TOOLTIP,helpUrl:Blockly.Msg.VARIABLES_SET_HELPURL});this.contextMenuMsg_=Blockly.Msg.VARIABLES_SET_CREATE_GET},contextMenuType_:"variables_get",customContextMenu:Blockly.Blocks.variables_get.customContextMenu};
|
6
bootstrap.min.css
vendored
Normal file
68
index.html
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Sumorobot</title>
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
<link rel="stylesheet" href="bootstrap.min.css">
|
||||||
|
<script src="jquery.min.js"></script>
|
||||||
|
<script src="blockly_compressed.js"></script>
|
||||||
|
<script src="sumorobot_compressed.js"></script>
|
||||||
|
<script src="blocks_compressed.js"></script>
|
||||||
|
<script src="msg/js/en.js"></script>
|
||||||
|
<script src="sumorobot.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="panel">
|
||||||
|
<img src="logo.png" alt="logo">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-addon robot-nr">1</span>
|
||||||
|
<input type="text" class="form-control robot-id" placeholder="ID" />
|
||||||
|
<span class="input-group-addon addon-no-border robot-nr">2</span>
|
||||||
|
<input type="text" class="form-control robot-id" placeholder="ID" />
|
||||||
|
<span class="input-group-addon addon-no-border robot-nr">3</span>
|
||||||
|
<input type="text" class="form-control robot-id" placeholder="ID" />
|
||||||
|
<span class="input-group-addon addon-no-border robot-nr">4</span>
|
||||||
|
<input type="text" class="form-control robot-id" placeholder="ID" />
|
||||||
|
<span class="input-group-addon addon-no-border robot-nr">5</span>
|
||||||
|
<input type="text" class="form-control robot-id" placeholder="ID" />
|
||||||
|
</div>
|
||||||
|
<div class="btn-group btn-group-justified btn-group-robot" role="group" aria-label="robots">
|
||||||
|
<a href="#" class="btn btn-lg btn-robot-nr">1</a>
|
||||||
|
<a href="#" class="btn btn-lg btn-robot-nr">2</a>
|
||||||
|
<a href="#" class="btn btn-lg btn-robot-nr">3</a>
|
||||||
|
<a href="#" class="btn btn-lg btn-robot-nr">4</a>
|
||||||
|
<a href="#" class="btn btn-lg btn-robot-nr">5</a>
|
||||||
|
<a href="#" class="btn btn-lg btn-robot-add">+</a>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label class="form-check-label">
|
||||||
|
<input type="checkbox" class="form-check-input big-checkbox" id="remote-control">
|
||||||
|
Remote control
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td id="blocklyArea"></td>
|
||||||
|
<td id="blocklyCodeArea"><textarea id="blocklyCode"></textarea></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div id="blocklyDiv" style="position: absolute"></div>
|
||||||
|
|
||||||
|
<xml id="toolbox" style="display: none">
|
||||||
|
<block type="controls_if"></block>
|
||||||
|
<block type="sumorobot_move"></block>
|
||||||
|
<block type="sumorobot_delay"></block>
|
||||||
|
<block type="sumorobot_enemy"></block>
|
||||||
|
<block type="sumorobot_line"></block>
|
||||||
|
</xml>
|
||||||
|
|
||||||
|
<div class="btn-group btn-group-justified">
|
||||||
|
<a href="#" class="btn btn-lg btn-success btn-start">Start</a>
|
||||||
|
<a href="#" class="btn btn-lg btn-danger btn-stop">Stop</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
4
jquery.min.js
vendored
Normal file
BIN
media/1x1.gif
Executable file
After Width: | Height: | Size: 43 B |
BIN
media/click.mp3
Executable file
BIN
media/click.ogg
Executable file
BIN
media/click.wav
Executable file
BIN
media/delete.mp3
Executable file
BIN
media/delete.ogg
Executable file
BIN
media/delete.wav
Executable file
BIN
media/disconnect.mp3
Executable file
BIN
media/disconnect.ogg
Executable file
BIN
media/disconnect.wav
Executable file
BIN
media/handclosed.cur
Executable file
After Width: | Height: | Size: 326 B |
BIN
media/handdelete.cur
Executable file
After Width: | Height: | Size: 766 B |
BIN
media/handopen.cur
Executable file
After Width: | Height: | Size: 198 B |
BIN
media/quote0.png
Executable file
After Width: | Height: | Size: 796 B |
BIN
media/quote1.png
Executable file
After Width: | Height: | Size: 738 B |
BIN
media/sprites.png
Executable file
After Width: | Height: | Size: 4.0 KiB |
74
media/sprites.svg
Executable file
@ -0,0 +1,74 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="96px" height="124px">
|
||||||
|
<style type="text/css">
|
||||||
|
#background {
|
||||||
|
fill: none;
|
||||||
|
}
|
||||||
|
.arrows {
|
||||||
|
fill: #000;
|
||||||
|
stroke: none;
|
||||||
|
}
|
||||||
|
.selected>.arrows {
|
||||||
|
fill: #fff;
|
||||||
|
}
|
||||||
|
.checkmark {
|
||||||
|
fill: #000;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 10pt;
|
||||||
|
text-anchor: middle;
|
||||||
|
}
|
||||||
|
.trash {
|
||||||
|
fill: #888;
|
||||||
|
}
|
||||||
|
.zoom {
|
||||||
|
fill: none;
|
||||||
|
stroke: #888;
|
||||||
|
stroke-width: 2;
|
||||||
|
stroke-linecap: round;
|
||||||
|
}
|
||||||
|
.zoom>.center {
|
||||||
|
fill: #888;
|
||||||
|
stroke-width: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<rect id="background" width="96" height="124" x="0" y="0" />
|
||||||
|
|
||||||
|
<g>
|
||||||
|
<path class="arrows" d="M 13,1.5 13,14.5 1.74,8 z" />
|
||||||
|
<path class="arrows" d="M 17.5,3 30.5,3 24,14.26 z" />
|
||||||
|
<path class="arrows" d="M 35,1.5 35,14.5 46.26,8 z" />
|
||||||
|
</g>
|
||||||
|
<g class="selected" transform="translate(0, 16)">
|
||||||
|
<path class="arrows" d="M 13,1.5 13,14.5 1.74,8 z" />
|
||||||
|
<path class="arrows" d="M 17.5,3 30.5,3 24,14.26 z" />
|
||||||
|
<path class="arrows" d="M 35,1.5 35,14.5 46.26,8 z" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<text class="checkmark" x="55.5" y="28">✓</text>
|
||||||
|
|
||||||
|
<g class="trash">
|
||||||
|
<path d="M 2,41 v 6 h 42 v -6 h -10.5 l -3,-3 h -15 l -3,3 z" />
|
||||||
|
<rect width="36" height="20" x="5" y="50" />
|
||||||
|
<rect width="36" height="42" x="5" y="50" rx="4" ry="4" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g class="zoom">
|
||||||
|
<circle r="11.5" cx="16" cy="108" />
|
||||||
|
<circle r="4.3" cx="16" cy="108" class="center" />
|
||||||
|
<path d="m 28,108 h3" />
|
||||||
|
<path d="m 1,108 h3" />
|
||||||
|
<path d="m 16,120 v3" />
|
||||||
|
<path d="m 16,93 v3" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g class="zoom">
|
||||||
|
<circle r="15" cx="48" cy="108" />
|
||||||
|
<path d="m 48,101.6 v12.8" />
|
||||||
|
<path d="m 41.6,108 h12.8" />
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g class="zoom">
|
||||||
|
<circle r="15" cx="80" cy="108" />
|
||||||
|
<path d="m 73.6,108 h12.8" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
408
msg/js/en.js
Executable file
@ -0,0 +1,408 @@
|
|||||||
|
// This file was automatically generated. Do not modify.
|
||||||
|
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
goog.provide('Blockly.Msg.en');
|
||||||
|
|
||||||
|
goog.require('Blockly.Msg');
|
||||||
|
|
||||||
|
Blockly.Msg.ADD_COMMENT = "Add Comment";
|
||||||
|
Blockly.Msg.CHANGE_VALUE_TITLE = "Change value:";
|
||||||
|
Blockly.Msg.CLEAN_UP = "Clean up Blocks";
|
||||||
|
Blockly.Msg.COLLAPSE_ALL = "Collapse Blocks";
|
||||||
|
Blockly.Msg.COLLAPSE_BLOCK = "Collapse Block";
|
||||||
|
Blockly.Msg.COLOUR_BLEND_COLOUR1 = "colour 1";
|
||||||
|
Blockly.Msg.COLOUR_BLEND_COLOUR2 = "colour 2";
|
||||||
|
Blockly.Msg.COLOUR_BLEND_HELPURL = "http://meyerweb.com/eric/tools/color-blend/";
|
||||||
|
Blockly.Msg.COLOUR_BLEND_RATIO = "ratio";
|
||||||
|
Blockly.Msg.COLOUR_BLEND_TITLE = "blend";
|
||||||
|
Blockly.Msg.COLOUR_BLEND_TOOLTIP = "Blends two colours together with a given ratio (0.0 - 1.0).";
|
||||||
|
Blockly.Msg.COLOUR_PICKER_HELPURL = "https://en.wikipedia.org/wiki/Color";
|
||||||
|
Blockly.Msg.COLOUR_PICKER_TOOLTIP = "Choose a colour from the palette.";
|
||||||
|
Blockly.Msg.COLOUR_RANDOM_HELPURL = "http://randomcolour.com";
|
||||||
|
Blockly.Msg.COLOUR_RANDOM_TITLE = "random colour";
|
||||||
|
Blockly.Msg.COLOUR_RANDOM_TOOLTIP = "Choose a colour at random.";
|
||||||
|
Blockly.Msg.COLOUR_RGB_BLUE = "blue";
|
||||||
|
Blockly.Msg.COLOUR_RGB_GREEN = "green";
|
||||||
|
Blockly.Msg.COLOUR_RGB_HELPURL = "http://www.december.com/html/spec/colorper.html";
|
||||||
|
Blockly.Msg.COLOUR_RGB_RED = "red";
|
||||||
|
Blockly.Msg.COLOUR_RGB_TITLE = "colour with";
|
||||||
|
Blockly.Msg.COLOUR_RGB_TOOLTIP = "Create a colour with the specified amount of red, green, and blue. All values must be between 0 and 100.";
|
||||||
|
Blockly.Msg.CONTROLS_FLOW_STATEMENTS_HELPURL = "https://github.com/google/blockly/wiki/Loops#loop-termination-blocks";
|
||||||
|
Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK = "break out of loop";
|
||||||
|
Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE = "continue with next iteration of loop";
|
||||||
|
Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK = "Break out of the containing loop.";
|
||||||
|
Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE = "Skip the rest of this loop, and continue with the next iteration.";
|
||||||
|
Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING = "Warning: This block may only be used within a loop.";
|
||||||
|
Blockly.Msg.CONTROLS_FOREACH_HELPURL = "https://github.com/google/blockly/wiki/Loops#for-each";
|
||||||
|
Blockly.Msg.CONTROLS_FOREACH_TITLE = "for each item %1 in list %2";
|
||||||
|
Blockly.Msg.CONTROLS_FOREACH_TOOLTIP = "For each item in a list, set the variable '%1' to the item, and then do some statements.";
|
||||||
|
Blockly.Msg.CONTROLS_FOR_HELPURL = "https://github.com/google/blockly/wiki/Loops#count-with";
|
||||||
|
Blockly.Msg.CONTROLS_FOR_TITLE = "count with %1 from %2 to %3 by %4";
|
||||||
|
Blockly.Msg.CONTROLS_FOR_TOOLTIP = "Have the variable '%1' take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP = "Add a condition to the if block.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP = "Add a final, catch-all condition to the if block.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_HELPURL = "https://github.com/google/blockly/wiki/IfElse";
|
||||||
|
Blockly.Msg.CONTROLS_IF_IF_TOOLTIP = "Add, remove, or reorder sections to reconfigure this if block.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_MSG_ELSE = "else";
|
||||||
|
Blockly.Msg.CONTROLS_IF_MSG_ELSEIF = "else if";
|
||||||
|
Blockly.Msg.CONTROLS_IF_MSG_IF = "if";
|
||||||
|
Blockly.Msg.CONTROLS_IF_TOOLTIP_1 = "If a value is true, then do some statements.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_TOOLTIP_2 = "If a value is true, then do the first block of statements. Otherwise, do the second block of statements.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_TOOLTIP_3 = "If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements.";
|
||||||
|
Blockly.Msg.CONTROLS_IF_TOOLTIP_4 = "If the first value is true, then do the first block of statements. Otherwise, if the second value is true, do the second block of statements. If none of the values are true, do the last block of statements.";
|
||||||
|
Blockly.Msg.CONTROLS_REPEAT_HELPURL = "https://en.wikipedia.org/wiki/For_loop";
|
||||||
|
Blockly.Msg.CONTROLS_REPEAT_INPUT_DO = "do";
|
||||||
|
Blockly.Msg.CONTROLS_REPEAT_TITLE = "repeat %1 times";
|
||||||
|
Blockly.Msg.CONTROLS_REPEAT_TOOLTIP = "Do some statements several times.";
|
||||||
|
Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL = "https://github.com/google/blockly/wiki/Loops#repeat";
|
||||||
|
Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_UNTIL = "repeat until";
|
||||||
|
Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_WHILE = "repeat while";
|
||||||
|
Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL = "While a value is false, then do some statements.";
|
||||||
|
Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE = "While a value is true, then do some statements.";
|
||||||
|
Blockly.Msg.DELETE_ALL_BLOCKS = "Delete all %1 blocks?";
|
||||||
|
Blockly.Msg.DELETE_BLOCK = "Delete Block";
|
||||||
|
Blockly.Msg.DELETE_VARIABLE = "Delete the '%1' variable";
|
||||||
|
Blockly.Msg.DELETE_VARIABLE_CONFIRMATION = "Delete %1 uses of the '%2' variable?";
|
||||||
|
Blockly.Msg.DELETE_X_BLOCKS = "Delete %1 Blocks";
|
||||||
|
Blockly.Msg.DISABLE_BLOCK = "Disable Block";
|
||||||
|
Blockly.Msg.DUPLICATE_BLOCK = "Duplicate";
|
||||||
|
Blockly.Msg.ENABLE_BLOCK = "Enable Block";
|
||||||
|
Blockly.Msg.EXPAND_ALL = "Expand Blocks";
|
||||||
|
Blockly.Msg.EXPAND_BLOCK = "Expand Block";
|
||||||
|
Blockly.Msg.EXTERNAL_INPUTS = "External Inputs";
|
||||||
|
Blockly.Msg.HELP = "Help";
|
||||||
|
Blockly.Msg.INLINE_INPUTS = "Inline Inputs";
|
||||||
|
Blockly.Msg.LISTS_CREATE_EMPTY_HELPURL = "https://github.com/google/blockly/wiki/Lists#create-empty-list";
|
||||||
|
Blockly.Msg.LISTS_CREATE_EMPTY_TITLE = "create empty list";
|
||||||
|
Blockly.Msg.LISTS_CREATE_EMPTY_TOOLTIP = "Returns a list, of length 0, containing no data records";
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD = "list";
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP = "Add, remove, or reorder sections to reconfigure this list block.";
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_HELPURL = "https://github.com/google/blockly/wiki/Lists#create-list-with";
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH = "create list with";
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP = "Add an item to the list.";
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP = "Create a list with any number of items.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_FIRST = "first";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_FROM_END = "# from end";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_FROM_START = "#";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_GET = "get";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE = "get and remove";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_LAST = "last";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_RANDOM = "random";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_REMOVE = "remove";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TAIL = "";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST = "Returns the first item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM = "Returns the item at the specified position in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST = "Returns the last item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM = "Returns a random item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST = "Removes and returns the first item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM = "Removes and returns the item at the specified position in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST = "Removes and returns the last item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM = "Removes and returns a random item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST = "Removes the first item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM = "Removes the item at the specified position in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST = "Removes the last item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM = "Removes a random item in a list.";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END = "to # from end";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START = "to #";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_END_LAST = "to last";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_HELPURL = "https://github.com/google/blockly/wiki/Lists#getting-a-sublist";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST = "get sub-list from first";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END = "get sub-list from # from end";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START = "get sub-list from #";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_TAIL = "";
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP = "Creates a copy of the specified portion of a list.";
|
||||||
|
Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP = "%1 is the last item.";
|
||||||
|
Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP = "%1 is the first item.";
|
||||||
|
Blockly.Msg.LISTS_INDEX_OF_FIRST = "find first occurrence of item";
|
||||||
|
Blockly.Msg.LISTS_INDEX_OF_HELPURL = "https://github.com/google/blockly/wiki/Lists#getting-items-from-a-list";
|
||||||
|
Blockly.Msg.LISTS_INDEX_OF_LAST = "find last occurrence of item";
|
||||||
|
Blockly.Msg.LISTS_INDEX_OF_TOOLTIP = "Returns the index of the first/last occurrence of the item in the list. Returns %1 if item is not found.";
|
||||||
|
Blockly.Msg.LISTS_INLIST = "in list";
|
||||||
|
Blockly.Msg.LISTS_ISEMPTY_HELPURL = "https://github.com/google/blockly/wiki/Lists#is-empty";
|
||||||
|
Blockly.Msg.LISTS_ISEMPTY_TITLE = "%1 is empty";
|
||||||
|
Blockly.Msg.LISTS_ISEMPTY_TOOLTIP = "Returns true if the list is empty.";
|
||||||
|
Blockly.Msg.LISTS_LENGTH_HELPURL = "https://github.com/google/blockly/wiki/Lists#length-of";
|
||||||
|
Blockly.Msg.LISTS_LENGTH_TITLE = "length of %1";
|
||||||
|
Blockly.Msg.LISTS_LENGTH_TOOLTIP = "Returns the length of a list.";
|
||||||
|
Blockly.Msg.LISTS_REPEAT_HELPURL = "https://github.com/google/blockly/wiki/Lists#create-list-with";
|
||||||
|
Blockly.Msg.LISTS_REPEAT_TITLE = "create list with item %1 repeated %2 times";
|
||||||
|
Blockly.Msg.LISTS_REPEAT_TOOLTIP = "Creates a list consisting of the given value repeated the specified number of times.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_HELPURL = "https://github.com/google/blockly/wiki/Lists#in-list--set";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_INPUT_TO = "as";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_INSERT = "insert at";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_SET = "set";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST = "Inserts the item at the start of a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM = "Inserts the item at the specified position in a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST = "Append the item to the end of a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM = "Inserts the item randomly in a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST = "Sets the first item in a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM = "Sets the item at the specified position in a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST = "Sets the last item in a list.";
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM = "Sets a random item in a list.";
|
||||||
|
Blockly.Msg.LISTS_SORT_HELPURL = "https://github.com/google/blockly/wiki/Lists#sorting-a-list";
|
||||||
|
Blockly.Msg.LISTS_SORT_ORDER_ASCENDING = "ascending";
|
||||||
|
Blockly.Msg.LISTS_SORT_ORDER_DESCENDING = "descending";
|
||||||
|
Blockly.Msg.LISTS_SORT_TITLE = "sort %1 %2 %3";
|
||||||
|
Blockly.Msg.LISTS_SORT_TOOLTIP = "Sort a copy of a list.";
|
||||||
|
Blockly.Msg.LISTS_SORT_TYPE_IGNORECASE = "alphabetic, ignore case";
|
||||||
|
Blockly.Msg.LISTS_SORT_TYPE_NUMERIC = "numeric";
|
||||||
|
Blockly.Msg.LISTS_SORT_TYPE_TEXT = "alphabetic";
|
||||||
|
Blockly.Msg.LISTS_SPLIT_HELPURL = "https://github.com/google/blockly/wiki/Lists#splitting-strings-and-joining-lists";
|
||||||
|
Blockly.Msg.LISTS_SPLIT_LIST_FROM_TEXT = "make list from text";
|
||||||
|
Blockly.Msg.LISTS_SPLIT_TEXT_FROM_LIST = "make text from list";
|
||||||
|
Blockly.Msg.LISTS_SPLIT_TOOLTIP_JOIN = "Join a list of texts into one text, separated by a delimiter.";
|
||||||
|
Blockly.Msg.LISTS_SPLIT_TOOLTIP_SPLIT = "Split text into a list of texts, breaking at each delimiter.";
|
||||||
|
Blockly.Msg.LISTS_SPLIT_WITH_DELIMITER = "with delimiter";
|
||||||
|
Blockly.Msg.LOGIC_BOOLEAN_FALSE = "false";
|
||||||
|
Blockly.Msg.LOGIC_BOOLEAN_HELPURL = "https://github.com/google/blockly/wiki/Logic#values";
|
||||||
|
Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP = "Returns either true or false.";
|
||||||
|
Blockly.Msg.LOGIC_BOOLEAN_TRUE = "true";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_HELPURL = "https://en.wikipedia.org/wiki/Inequality_(mathematics)";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ = "Return true if both inputs equal each other.";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT = "Return true if the first input is greater than the second input.";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE = "Return true if the first input is greater than or equal to the second input.";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT = "Return true if the first input is smaller than the second input.";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE = "Return true if the first input is smaller than or equal to the second input.";
|
||||||
|
Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ = "Return true if both inputs are not equal to each other.";
|
||||||
|
Blockly.Msg.LOGIC_NEGATE_HELPURL = "https://github.com/google/blockly/wiki/Logic#not";
|
||||||
|
Blockly.Msg.LOGIC_NEGATE_TITLE = "not %1";
|
||||||
|
Blockly.Msg.LOGIC_NEGATE_TOOLTIP = "Returns true if the input is false. Returns false if the input is true.";
|
||||||
|
Blockly.Msg.LOGIC_NULL = "null";
|
||||||
|
Blockly.Msg.LOGIC_NULL_HELPURL = "https://en.wikipedia.org/wiki/Nullable_type";
|
||||||
|
Blockly.Msg.LOGIC_NULL_TOOLTIP = "Returns null.";
|
||||||
|
Blockly.Msg.LOGIC_OPERATION_AND = "and";
|
||||||
|
Blockly.Msg.LOGIC_OPERATION_HELPURL = "https://github.com/google/blockly/wiki/Logic#logical-operations";
|
||||||
|
Blockly.Msg.LOGIC_OPERATION_OR = "or";
|
||||||
|
Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND = "Return true if both inputs are true.";
|
||||||
|
Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR = "Return true if at least one of the inputs is true.";
|
||||||
|
Blockly.Msg.LOGIC_TERNARY_CONDITION = "test";
|
||||||
|
Blockly.Msg.LOGIC_TERNARY_HELPURL = "https://en.wikipedia.org/wiki/%3F:";
|
||||||
|
Blockly.Msg.LOGIC_TERNARY_IF_FALSE = "if false";
|
||||||
|
Blockly.Msg.LOGIC_TERNARY_IF_TRUE = "if true";
|
||||||
|
Blockly.Msg.LOGIC_TERNARY_TOOLTIP = "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.";
|
||||||
|
Blockly.Msg.MATH_ADDITION_SYMBOL = "+";
|
||||||
|
Blockly.Msg.MATH_ARITHMETIC_HELPURL = "https://en.wikipedia.org/wiki/Arithmetic";
|
||||||
|
Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD = "Return the sum of the two numbers.";
|
||||||
|
Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE = "Return the quotient of the two numbers.";
|
||||||
|
Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS = "Return the difference of the two numbers.";
|
||||||
|
Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY = "Return the product of the two numbers.";
|
||||||
|
Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER = "Return the first number raised to the power of the second number.";
|
||||||
|
Blockly.Msg.MATH_CHANGE_HELPURL = "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter";
|
||||||
|
Blockly.Msg.MATH_CHANGE_TITLE = "change %1 by %2";
|
||||||
|
Blockly.Msg.MATH_CHANGE_TOOLTIP = "Add a number to variable '%1'.";
|
||||||
|
Blockly.Msg.MATH_CONSTANT_HELPURL = "https://en.wikipedia.org/wiki/Mathematical_constant";
|
||||||
|
Blockly.Msg.MATH_CONSTANT_TOOLTIP = "Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).";
|
||||||
|
Blockly.Msg.MATH_CONSTRAIN_HELPURL = "https://en.wikipedia.org/wiki/Clamping_%28graphics%29";
|
||||||
|
Blockly.Msg.MATH_CONSTRAIN_TITLE = "constrain %1 low %2 high %3";
|
||||||
|
Blockly.Msg.MATH_CONSTRAIN_TOOLTIP = "Constrain a number to be between the specified limits (inclusive).";
|
||||||
|
Blockly.Msg.MATH_DIVISION_SYMBOL = "÷";
|
||||||
|
Blockly.Msg.MATH_IS_DIVISIBLE_BY = "is divisible by";
|
||||||
|
Blockly.Msg.MATH_IS_EVEN = "is even";
|
||||||
|
Blockly.Msg.MATH_IS_NEGATIVE = "is negative";
|
||||||
|
Blockly.Msg.MATH_IS_ODD = "is odd";
|
||||||
|
Blockly.Msg.MATH_IS_POSITIVE = "is positive";
|
||||||
|
Blockly.Msg.MATH_IS_PRIME = "is prime";
|
||||||
|
Blockly.Msg.MATH_IS_TOOLTIP = "Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number. Returns true or false.";
|
||||||
|
Blockly.Msg.MATH_IS_WHOLE = "is whole";
|
||||||
|
Blockly.Msg.MATH_MODULO_HELPURL = "https://en.wikipedia.org/wiki/Modulo_operation";
|
||||||
|
Blockly.Msg.MATH_MODULO_TITLE = "remainder of %1 ÷ %2";
|
||||||
|
Blockly.Msg.MATH_MODULO_TOOLTIP = "Return the remainder from dividing the two numbers.";
|
||||||
|
Blockly.Msg.MATH_MULTIPLICATION_SYMBOL = "×";
|
||||||
|
Blockly.Msg.MATH_NUMBER_HELPURL = "https://en.wikipedia.org/wiki/Number";
|
||||||
|
Blockly.Msg.MATH_NUMBER_TOOLTIP = "A number.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_HELPURL = "";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE = "average of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_MAX = "max of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN = "median of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_MIN = "min of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_MODE = "modes of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_RANDOM = "random item of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV = "standard deviation of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_OPERATOR_SUM = "sum of list";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE = "Return the average (arithmetic mean) of the numeric values in the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX = "Return the largest number in the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN = "Return the median number in the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN = "Return the smallest number in the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE = "Return a list of the most common item(s) in the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_RANDOM = "Return a random element from the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV = "Return the standard deviation of the list.";
|
||||||
|
Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM = "Return the sum of all the numbers in the list.";
|
||||||
|
Blockly.Msg.MATH_POWER_SYMBOL = "^";
|
||||||
|
Blockly.Msg.MATH_RANDOM_FLOAT_HELPURL = "https://en.wikipedia.org/wiki/Random_number_generation";
|
||||||
|
Blockly.Msg.MATH_RANDOM_FLOAT_TITLE_RANDOM = "random fraction";
|
||||||
|
Blockly.Msg.MATH_RANDOM_FLOAT_TOOLTIP = "Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).";
|
||||||
|
Blockly.Msg.MATH_RANDOM_INT_HELPURL = "https://en.wikipedia.org/wiki/Random_number_generation";
|
||||||
|
Blockly.Msg.MATH_RANDOM_INT_TITLE = "random integer from %1 to %2";
|
||||||
|
Blockly.Msg.MATH_RANDOM_INT_TOOLTIP = "Return a random integer between the two specified limits, inclusive.";
|
||||||
|
Blockly.Msg.MATH_ROUND_HELPURL = "https://en.wikipedia.org/wiki/Rounding";
|
||||||
|
Blockly.Msg.MATH_ROUND_OPERATOR_ROUND = "round";
|
||||||
|
Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDDOWN = "round down";
|
||||||
|
Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDUP = "round up";
|
||||||
|
Blockly.Msg.MATH_ROUND_TOOLTIP = "Round a number up or down.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_HELPURL = "https://en.wikipedia.org/wiki/Square_root";
|
||||||
|
Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE = "absolute";
|
||||||
|
Blockly.Msg.MATH_SINGLE_OP_ROOT = "square root";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS = "Return the absolute value of a number.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_EXP = "Return e to the power of a number.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_LN = "Return the natural logarithm of a number.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_LOG10 = "Return the base 10 logarithm of a number.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_NEG = "Return the negation of a number.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_POW10 = "Return 10 to the power of a number.";
|
||||||
|
Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT = "Return the square root of a number.";
|
||||||
|
Blockly.Msg.MATH_SUBTRACTION_SYMBOL = "-";
|
||||||
|
Blockly.Msg.MATH_TRIG_ACOS = "acos";
|
||||||
|
Blockly.Msg.MATH_TRIG_ASIN = "asin";
|
||||||
|
Blockly.Msg.MATH_TRIG_ATAN = "atan";
|
||||||
|
Blockly.Msg.MATH_TRIG_COS = "cos";
|
||||||
|
Blockly.Msg.MATH_TRIG_HELPURL = "https://en.wikipedia.org/wiki/Trigonometric_functions";
|
||||||
|
Blockly.Msg.MATH_TRIG_SIN = "sin";
|
||||||
|
Blockly.Msg.MATH_TRIG_TAN = "tan";
|
||||||
|
Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS = "Return the arccosine of a number.";
|
||||||
|
Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN = "Return the arcsine of a number.";
|
||||||
|
Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN = "Return the arctangent of a number.";
|
||||||
|
Blockly.Msg.MATH_TRIG_TOOLTIP_COS = "Return the cosine of a degree (not radian).";
|
||||||
|
Blockly.Msg.MATH_TRIG_TOOLTIP_SIN = "Return the sine of a degree (not radian).";
|
||||||
|
Blockly.Msg.MATH_TRIG_TOOLTIP_TAN = "Return the tangent of a degree (not radian).";
|
||||||
|
Blockly.Msg.NEW_VARIABLE = "Create variable...";
|
||||||
|
Blockly.Msg.NEW_VARIABLE_TITLE = "New variable name:";
|
||||||
|
Blockly.Msg.ORDINAL_NUMBER_SUFFIX = "";
|
||||||
|
Blockly.Msg.PROCEDURES_ALLOW_STATEMENTS = "allow statements";
|
||||||
|
Blockly.Msg.PROCEDURES_BEFORE_PARAMS = "with:";
|
||||||
|
Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
|
||||||
|
Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP = "Run the user-defined function '%1'.";
|
||||||
|
Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
|
||||||
|
Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP = "Run the user-defined function '%1' and use its output.";
|
||||||
|
Blockly.Msg.PROCEDURES_CALL_BEFORE_PARAMS = "with:";
|
||||||
|
Blockly.Msg.PROCEDURES_CREATE_DO = "Create '%1'";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = "Describe this function...";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFNORETURN_DO = "";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "do something";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = "to";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP = "Creates a function with no output.";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_RETURN = "return";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP = "Creates a function with an output.";
|
||||||
|
Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING = "Warning: This function has duplicate parameters.";
|
||||||
|
Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF = "Highlight function definition";
|
||||||
|
Blockly.Msg.PROCEDURES_IFRETURN_HELPURL = "http://c2.com/cgi/wiki?GuardClause";
|
||||||
|
Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP = "If a value is true, then return a second value.";
|
||||||
|
Blockly.Msg.PROCEDURES_IFRETURN_WARNING = "Warning: This block may be used only within a function definition.";
|
||||||
|
Blockly.Msg.PROCEDURES_MUTATORARG_TITLE = "input name:";
|
||||||
|
Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP = "Add an input to the function.";
|
||||||
|
Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE = "inputs";
|
||||||
|
Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP = "Add, remove, or reorder inputs to this function.";
|
||||||
|
Blockly.Msg.REDO = "Redo";
|
||||||
|
Blockly.Msg.REMOVE_COMMENT = "Remove Comment";
|
||||||
|
Blockly.Msg.RENAME_VARIABLE = "Rename variable...";
|
||||||
|
Blockly.Msg.RENAME_VARIABLE_TITLE = "Rename all '%1' variables to:";
|
||||||
|
Blockly.Msg.SUMOROBOT_DELAY_HELPURL = "http://www.robokoding.com/sumorobot/delay";
|
||||||
|
Blockly.Msg.SUMOROBOT_DELAY_TITLE = "delay";
|
||||||
|
Blockly.Msg.SUMOROBOT_DELAY_TOOLTIP = "Continue doing previous movement for given milliseconds.";
|
||||||
|
Blockly.Msg.SUMOROBOT_ENEMY_HELPURL = "http://www.robokoding.com/sumorobot/enemy";
|
||||||
|
Blockly.Msg.SUMOROBOT_ENEMY_TOOLTIP = "Detect the enemy in the sumoring.";
|
||||||
|
Blockly.Msg.SUMOROBOT_LINE_HELPURL = "http://www.robokoding.com/sumorobot/line";
|
||||||
|
Blockly.Msg.SUMOROBOT_LINE_MSG_FRONT = "line front";
|
||||||
|
Blockly.Msg.SUMOROBOT_LINE_MSG_LEFT = "line left";
|
||||||
|
Blockly.Msg.SUMOROBOT_LINE_MSG_RIGHT = "line right";
|
||||||
|
Blockly.Msg.SUMOROBOT_LINE_TOOLTIP = "Detect the line of the sumoring.";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_HELPURL = "http://www.robokoding.com/sumorobot/move";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_MSG_BACKWARD = "move backward";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_MSG_FORWARD = "move forward";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_MSG_LEFT = "move left";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_MSG_RIGHT = "move right";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_MSG_STOP = "move stop";
|
||||||
|
Blockly.Msg.SUMOROBOT_MOVE_TOOLTIP = "Move the sumorobot to a specific direction.";
|
||||||
|
Blockly.Msg.TEXT_APPEND_APPENDTEXT = "append text";
|
||||||
|
Blockly.Msg.TEXT_APPEND_HELPURL = "https://github.com/google/blockly/wiki/Text#text-modification";
|
||||||
|
Blockly.Msg.TEXT_APPEND_TO = "to";
|
||||||
|
Blockly.Msg.TEXT_APPEND_TOOLTIP = "Append some text to variable '%1'.";
|
||||||
|
Blockly.Msg.TEXT_CHANGECASE_HELPURL = "https://github.com/google/blockly/wiki/Text#adjusting-text-case";
|
||||||
|
Blockly.Msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE = "to lower case";
|
||||||
|
Blockly.Msg.TEXT_CHANGECASE_OPERATOR_TITLECASE = "to Title Case";
|
||||||
|
Blockly.Msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE = "to UPPER CASE";
|
||||||
|
Blockly.Msg.TEXT_CHANGECASE_TOOLTIP = "Return a copy of the text in a different case.";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_FIRST = "get first letter";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_FROM_END = "get letter # from end";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_FROM_START = "get letter #";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_HELPURL = "https://github.com/google/blockly/wiki/Text#extracting-text";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_INPUT_INTEXT = "in text";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_LAST = "get last letter";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_RANDOM = "get random letter";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_TAIL = "";
|
||||||
|
Blockly.Msg.TEXT_CHARAT_TOOLTIP = "Returns the letter at the specified position.";
|
||||||
|
Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TOOLTIP = "Add an item to the text.";
|
||||||
|
Blockly.Msg.TEXT_CREATE_JOIN_TITLE_JOIN = "join";
|
||||||
|
Blockly.Msg.TEXT_CREATE_JOIN_TOOLTIP = "Add, remove, or reorder sections to reconfigure this text block.";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_END = "to letter # from end";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_START = "to letter #";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_END_LAST = "to last letter";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_HELPURL = "https://github.com/google/blockly/wiki/Text#extracting-a-region-of-text";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT = "in text";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_START_FIRST = "get substring from first letter";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_END = "get substring from letter # from end";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_START = "get substring from letter #";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_TAIL = "";
|
||||||
|
Blockly.Msg.TEXT_GET_SUBSTRING_TOOLTIP = "Returns a specified portion of the text.";
|
||||||
|
Blockly.Msg.TEXT_INDEXOF_HELPURL = "https://github.com/google/blockly/wiki/Text#finding-text";
|
||||||
|
Blockly.Msg.TEXT_INDEXOF_INPUT_INTEXT = "in text";
|
||||||
|
Blockly.Msg.TEXT_INDEXOF_OPERATOR_FIRST = "find first occurrence of text";
|
||||||
|
Blockly.Msg.TEXT_INDEXOF_OPERATOR_LAST = "find last occurrence of text";
|
||||||
|
Blockly.Msg.TEXT_INDEXOF_TAIL = "";
|
||||||
|
Blockly.Msg.TEXT_INDEXOF_TOOLTIP = "Returns the index of the first/last occurrence of the first text in the second text. Returns %1 if text is not found.";
|
||||||
|
Blockly.Msg.TEXT_ISEMPTY_HELPURL = "https://github.com/google/blockly/wiki/Text#checking-for-empty-text";
|
||||||
|
Blockly.Msg.TEXT_ISEMPTY_TITLE = "%1 is empty";
|
||||||
|
Blockly.Msg.TEXT_ISEMPTY_TOOLTIP = "Returns true if the provided text is empty.";
|
||||||
|
Blockly.Msg.TEXT_JOIN_HELPURL = "https://github.com/google/blockly/wiki/Text#text-creation";
|
||||||
|
Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH = "create text with";
|
||||||
|
Blockly.Msg.TEXT_JOIN_TOOLTIP = "Create a piece of text by joining together any number of items.";
|
||||||
|
Blockly.Msg.TEXT_LENGTH_HELPURL = "https://github.com/google/blockly/wiki/Text#text-modification";
|
||||||
|
Blockly.Msg.TEXT_LENGTH_TITLE = "length of %1";
|
||||||
|
Blockly.Msg.TEXT_LENGTH_TOOLTIP = "Returns the number of letters (including spaces) in the provided text.";
|
||||||
|
Blockly.Msg.TEXT_PRINT_HELPURL = "https://github.com/google/blockly/wiki/Text#printing-text";
|
||||||
|
Blockly.Msg.TEXT_PRINT_TITLE = "print %1";
|
||||||
|
Blockly.Msg.TEXT_PRINT_TOOLTIP = "Print the specified text, number or other value.";
|
||||||
|
Blockly.Msg.TEXT_PROMPT_HELPURL = "https://github.com/google/blockly/wiki/Text#getting-input-from-the-user";
|
||||||
|
Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER = "Prompt for user for a number.";
|
||||||
|
Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT = "Prompt for user for some text.";
|
||||||
|
Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER = "prompt for number with message";
|
||||||
|
Blockly.Msg.TEXT_PROMPT_TYPE_TEXT = "prompt for text with message";
|
||||||
|
Blockly.Msg.TEXT_TEXT_HELPURL = "https://en.wikipedia.org/wiki/String_(computer_science)";
|
||||||
|
Blockly.Msg.TEXT_TEXT_TOOLTIP = "A letter, word, or line of text.";
|
||||||
|
Blockly.Msg.TEXT_TRIM_HELPURL = "https://github.com/google/blockly/wiki/Text#trimming-removing-spaces";
|
||||||
|
Blockly.Msg.TEXT_TRIM_OPERATOR_BOTH = "trim spaces from both sides of";
|
||||||
|
Blockly.Msg.TEXT_TRIM_OPERATOR_LEFT = "trim spaces from left side of";
|
||||||
|
Blockly.Msg.TEXT_TRIM_OPERATOR_RIGHT = "trim spaces from right side of";
|
||||||
|
Blockly.Msg.TEXT_TRIM_TOOLTIP = "Return a copy of the text with spaces removed from one or both ends.";
|
||||||
|
Blockly.Msg.TODAY = "Today";
|
||||||
|
Blockly.Msg.UNDO = "Undo";
|
||||||
|
Blockly.Msg.VARIABLES_DEFAULT_NAME = "item";
|
||||||
|
Blockly.Msg.VARIABLES_GET_CREATE_SET = "Create 'set %1'";
|
||||||
|
Blockly.Msg.VARIABLES_GET_HELPURL = "https://github.com/google/blockly/wiki/Variables#get";
|
||||||
|
Blockly.Msg.VARIABLES_GET_TOOLTIP = "Returns the value of this variable.";
|
||||||
|
Blockly.Msg.VARIABLES_SET = "set %1 to %2";
|
||||||
|
Blockly.Msg.VARIABLES_SET_CREATE_GET = "Create 'get %1'";
|
||||||
|
Blockly.Msg.VARIABLES_SET_HELPURL = "https://github.com/google/blockly/wiki/Variables#set";
|
||||||
|
Blockly.Msg.VARIABLES_SET_TOOLTIP = "Sets this variable to be equal to the input.";
|
||||||
|
Blockly.Msg.VARIABLE_ALREADY_EXISTS = "A variable named '%1' already exists.";
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_TITLE = Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE;
|
||||||
|
Blockly.Msg.CONTROLS_IF_IF_TITLE_IF = Blockly.Msg.CONTROLS_IF_MSG_IF;
|
||||||
|
Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
|
||||||
|
Blockly.Msg.CONTROLS_IF_MSG_THEN = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
|
||||||
|
Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_PROCEDURE = Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE;
|
||||||
|
Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
|
||||||
|
Blockly.Msg.MATH_CHANGE_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_DO = Blockly.Msg.PROCEDURES_DEFNORETURN_DO;
|
||||||
|
Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF = Blockly.Msg.CONTROLS_IF_MSG_ELSEIF;
|
||||||
|
Blockly.Msg.LISTS_GET_INDEX_HELPURL = Blockly.Msg.LISTS_INDEX_OF_HELPURL;
|
||||||
|
Blockly.Msg.CONTROLS_FOREACH_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
|
||||||
|
Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
|
||||||
|
Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
|
||||||
|
Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE = Blockly.Msg.VARIABLES_DEFAULT_NAME;
|
||||||
|
Blockly.Msg.TEXT_APPEND_VARIABLE = Blockly.Msg.VARIABLES_DEFAULT_NAME;
|
||||||
|
Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
|
||||||
|
Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
|
||||||
|
Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT = Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT;
|
108
styles.css
Executable file
@ -0,0 +1,108 @@
|
|||||||
|
html, body {
|
||||||
|
margin: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
overflow: hidden;
|
||||||
|
background-color: #fff;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 140%;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
width: 15%;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
height: 88%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
span.has-error {
|
||||||
|
color: #a94442 !important;
|
||||||
|
border-color: #a94442 !important;
|
||||||
|
background-color: #f2dede !important;
|
||||||
|
}
|
||||||
|
input.has-error {
|
||||||
|
border-color: #a94442 !important;
|
||||||
|
}
|
||||||
|
.form-control {
|
||||||
|
padding: 0.5vw 1vw !important;
|
||||||
|
}
|
||||||
|
.addon-no-border {
|
||||||
|
border-left: 0px !important;
|
||||||
|
border-right: 0px !important;
|
||||||
|
}
|
||||||
|
.input-group-addon {
|
||||||
|
padding: 0.5vw 1vw !important;
|
||||||
|
}
|
||||||
|
.btn-robot-nr, .btn-robot-add {
|
||||||
|
font-size: 10vw !important;
|
||||||
|
border: 3px solid rgba(0, 0, 0, 0.1) !important;
|
||||||
|
}
|
||||||
|
.btn-robot-add {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
.btn-selected {
|
||||||
|
border-color: #fc3 !important;
|
||||||
|
}
|
||||||
|
.btn-success {
|
||||||
|
border-width: 3px !important;
|
||||||
|
background-color: #44CC00 !important;
|
||||||
|
}
|
||||||
|
.btn-danger {
|
||||||
|
border-width: 3px !important;
|
||||||
|
background-color: #b80000 !important;
|
||||||
|
}
|
||||||
|
.btn-danger.disabled {
|
||||||
|
background-color: #ee4d4d !important;
|
||||||
|
}
|
||||||
|
.btn:hover, .btn.hover {
|
||||||
|
border-width: 3px;
|
||||||
|
border-color: #fc3 !important;
|
||||||
|
}
|
||||||
|
.big-checkbox {
|
||||||
|
width: 5vw;
|
||||||
|
height: 5vw;
|
||||||
|
}
|
||||||
|
.form-check-label {
|
||||||
|
font-size: 5vw;
|
||||||
|
}
|
||||||
|
.goog-menuitem-content {
|
||||||
|
font-size: 2em !important;
|
||||||
|
}
|
||||||
|
#panel {
|
||||||
|
z-index: 35;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
td#blocklyArea {
|
||||||
|
width: 99%;
|
||||||
|
height: 99%;
|
||||||
|
}
|
||||||
|
td#blocklyCodeArea {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
textarea#blocklyCode {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (min-width: 768px) {
|
||||||
|
td#blocklyArea {
|
||||||
|
width: 60%;
|
||||||
|
height: 99%;
|
||||||
|
}
|
||||||
|
td#blocklyCodeArea {
|
||||||
|
width: 40%;
|
||||||
|
height: 99%;
|
||||||
|
}
|
||||||
|
textarea#blocklyCode {
|
||||||
|
width: 99%;
|
||||||
|
height: 100%;
|
||||||
|
font-size: 1.8em;
|
||||||
|
}
|
||||||
|
}
|
393
sumorobot.js
Executable file
@ -0,0 +1,393 @@
|
|||||||
|
/* the server URL */
|
||||||
|
//var robotServer = "10.42.0.1";
|
||||||
|
var robotServer = "iot.koodur.com";
|
||||||
|
/* enable disable remote control */
|
||||||
|
var remoteControl = false;
|
||||||
|
/* the sumorobot state */
|
||||||
|
var sumostart = false;
|
||||||
|
/* the sumorobot object */
|
||||||
|
var sumorobot = null;
|
||||||
|
/* the sumorobot code */
|
||||||
|
var sumocode = "";
|
||||||
|
|
||||||
|
var Sumorobot = function(wsUri) {
|
||||||
|
/* assign the WebSocket URI */
|
||||||
|
this.wsUri = wsUri;
|
||||||
|
/* start connecting to the WebSocket */
|
||||||
|
this.connect();
|
||||||
|
/* to ping the robot */
|
||||||
|
this.watchdogHandler = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
Sumorobot.prototype.connect = function() {
|
||||||
|
/* to have access to this object */
|
||||||
|
var self = this;
|
||||||
|
this.websocket = new WebSocket(this.wsUri);
|
||||||
|
/* when the WebSocket gets connected */
|
||||||
|
this.websocket.onopen = function(evt) {
|
||||||
|
console.log("INFO websocket connected");
|
||||||
|
/* setup a timer to ping the robot */
|
||||||
|
watchdogTimer = setInterval(function() {
|
||||||
|
/* send a ping to the robot */
|
||||||
|
console.log("ping the robot")
|
||||||
|
self.send("ping");
|
||||||
|
}, 2000);
|
||||||
|
};
|
||||||
|
/* when the WebSocket closes */
|
||||||
|
this.websocket.onclose = function(evt) {
|
||||||
|
console.log("INFO websocket disconnected");
|
||||||
|
/* clear the pinging */
|
||||||
|
clearInterval(watchdogTimer);
|
||||||
|
/* Try to recnnect to the sumorobot */
|
||||||
|
self.connect();
|
||||||
|
};
|
||||||
|
/* when there is a message from the WebSocket */
|
||||||
|
this.websocket.onmessage = function(evt) {
|
||||||
|
/* when scope is received */
|
||||||
|
console.log(evt.data);
|
||||||
|
};
|
||||||
|
/* when there is an WebSocket error */
|
||||||
|
this.websocket.onerror = function(err) {
|
||||||
|
console.log("ERROR websocket error: " + err);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
Sumorobot.prototype.send = function(msg) {
|
||||||
|
/* Ready state constants: CONNECTING 0, OPEN 1, CLOSING 2, CLOSED 3 */
|
||||||
|
/* https://developer.mozilla.org/en-US/docs/Web/API/WebSocket */
|
||||||
|
if (this.websocket.readyState == 1) {
|
||||||
|
this.websocket.send(msg);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
window.onload = function() {
|
||||||
|
/* remove previous and next statement from if block */
|
||||||
|
Blockly.Blocks.controls_if.init = function() {
|
||||||
|
this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);
|
||||||
|
this.setColour(Blockly.Blocks.logic.HUE);
|
||||||
|
this.appendValueInput("IF0").setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);
|
||||||
|
this.appendStatementInput("DO0").appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);
|
||||||
|
this.setPreviousStatement(0);
|
||||||
|
this.setNextStatement(0);
|
||||||
|
this.setMutator(new Blockly.Mutator(["controls_if_elseif","controls_if_else"]));
|
||||||
|
var a = this;
|
||||||
|
this.setTooltip(function() {
|
||||||
|
if (a.elseifCount_ || a.elseCount_) {
|
||||||
|
if(!a.elseifCount_ && a.elseCount_) return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;
|
||||||
|
if(a.elseifCount_ && !a.elseCount_) return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;
|
||||||
|
if(a.elseifCount_ && a.elseCount_) return Blockly.Msg.CONTROLS_IF_TOOLTIP_4
|
||||||
|
} else return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;
|
||||||
|
return "";
|
||||||
|
});
|
||||||
|
this.elseCount_=this.elseifCount_ = 0;
|
||||||
|
};
|
||||||
|
/* magnify the tool icon on the if block */
|
||||||
|
Blockly.Icon.prototype.renderIcon = function(cursorX) {
|
||||||
|
if (this.collapseHidden && this.block_.isCollapsed()) {
|
||||||
|
this.iconGroup_.setAttribute('display', 'none');
|
||||||
|
return cursorX;
|
||||||
|
}
|
||||||
|
this.iconGroup_.setAttribute('display', 'block');
|
||||||
|
|
||||||
|
var SIZE = 1.7;
|
||||||
|
var TOP_MARGIN = 2;
|
||||||
|
var LEFT_MARGIN = 5;
|
||||||
|
var width = this.SIZE;
|
||||||
|
if (this.block_.RTL) {
|
||||||
|
cursorX -= width;
|
||||||
|
}
|
||||||
|
this.iconGroup_.setAttribute('transform',
|
||||||
|
'translate(' + LEFT_MARGIN + ',' + TOP_MARGIN + ') scale(' + SIZE + ')');
|
||||||
|
this.computeIconLocation();
|
||||||
|
if (this.block_.RTL) {
|
||||||
|
cursorX -= Blockly.BlockSvg.SEP_SPACE_X;
|
||||||
|
} else {
|
||||||
|
cursorX += width + Blockly.BlockSvg.SEP_SPACE_X;
|
||||||
|
}
|
||||||
|
return cursorX;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* change to python code */
|
||||||
|
Blockly.Sumorobot['controls_if'] = function(block) {
|
||||||
|
// If/elseif/else condition.
|
||||||
|
var n = 0;
|
||||||
|
var argument = Blockly.Sumorobot.valueToCode(block, 'IF' + n,
|
||||||
|
Blockly.Sumorobot.ORDER_NONE) || 'False';
|
||||||
|
var branch = Blockly.Sumorobot.statementToCode(block, 'DO' + n);
|
||||||
|
var code = 'if ' + argument + ':\n' + branch;
|
||||||
|
if (branch === '') {
|
||||||
|
code += ' pass\n';
|
||||||
|
}
|
||||||
|
for (n = 1; n <= block.elseifCount_; n++) {
|
||||||
|
argument = Blockly.Sumorobot.valueToCode(block, 'IF' + n,
|
||||||
|
Blockly.Sumorobot.ORDER_NONE) || 'False';
|
||||||
|
branch = Blockly.Sumorobot.statementToCode(block, 'DO' + n);
|
||||||
|
code += 'elif ' + argument + ':\n' + branch;
|
||||||
|
if (branch === '') {
|
||||||
|
code += ' pass\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (block.elseCount_) {
|
||||||
|
branch = Blockly.Sumorobot.statementToCode(block, 'ELSE');
|
||||||
|
code += 'else:\n' + branch;
|
||||||
|
if (branch === '') {
|
||||||
|
code += ' pass';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return code + '\n';
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Sumorobot['sumorobot_delay'] = function(block) {
|
||||||
|
var code = 'sumorobot.sleep(' + parseFloat(block.getFieldValue('DELAY')) + ')\n';
|
||||||
|
return code;
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Sumorobot['sumorobot_move'] = function(block) {
|
||||||
|
var code = 'sumorobot.move(' + block.getFieldValue('MOVE') + ')\n';
|
||||||
|
return code;
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Sumorobot['sumorobot_enemy'] = function(block) {
|
||||||
|
var code = 'sumorobot.is_enemy()';
|
||||||
|
return [code, Blockly.Sumorobot.ORDER_ATOMIC];
|
||||||
|
};
|
||||||
|
|
||||||
|
Blockly.Sumorobot['sumorobot_line'] = function(block) {
|
||||||
|
var code = 'sumorobot.is_line(' + block.getFieldValue('LINE') + ')';
|
||||||
|
return [code, Blockly.Sumorobot.ORDER_ATOMIC];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* change the if block to be more cheerful */
|
||||||
|
Blockly.Blocks.logic.HUE = '#44CC00';
|
||||||
|
var blocklyArea = document.getElementById('blocklyArea');
|
||||||
|
var blocklyDiv = document.getElementById('blocklyDiv');
|
||||||
|
var workspace = Blockly.inject(blocklyDiv, {
|
||||||
|
scrollbars: false,
|
||||||
|
media: 'media/',
|
||||||
|
trashcan: true,
|
||||||
|
sounds: true,
|
||||||
|
zoom: {
|
||||||
|
wheel: true,
|
||||||
|
controls: true,
|
||||||
|
startScale: 1.2
|
||||||
|
},
|
||||||
|
toolbox: document.getElementById('toolbox')
|
||||||
|
});
|
||||||
|
|
||||||
|
/* on blockly resize */
|
||||||
|
var onresize = function(e) {
|
||||||
|
// Compute the absolute coordinates and dimensions of blocklyArea.
|
||||||
|
var element = blocklyArea;
|
||||||
|
var x = 0;
|
||||||
|
var y = 0;
|
||||||
|
do {
|
||||||
|
x += element.offsetLeft;
|
||||||
|
y += element.offsetTop;
|
||||||
|
element = element.offsetParent;
|
||||||
|
} while (element);
|
||||||
|
/* position blocklyDiv over blocklyArea */
|
||||||
|
blocklyDiv.style.left = x + 'px';
|
||||||
|
blocklyDiv.style.top = y + 'px';
|
||||||
|
blocklyDiv.style.width = blocklyArea.offsetWidth + 'px';
|
||||||
|
blocklyDiv.style.height = blocklyArea.offsetHeight + 'px';
|
||||||
|
};
|
||||||
|
window.addEventListener('resize', onresize, false);
|
||||||
|
onresize();
|
||||||
|
Blockly.svgResize(workspace);
|
||||||
|
|
||||||
|
/* function to set local storage */
|
||||||
|
function getLocalStorageItem(item) {
|
||||||
|
/* when the local storage doesn't exist, return empty string */
|
||||||
|
if (typeof(Storage) === "undefined") return "";
|
||||||
|
/* otherwise return item from the local storage*/
|
||||||
|
return localStorage.getItem(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* function to set local storage */
|
||||||
|
function setLocalStorageItem(item, value) {
|
||||||
|
/* when local storage doesn't exist, return */
|
||||||
|
if (typeof(Storage) === "undefined") return;
|
||||||
|
/* otherwise set the item to the local storage */
|
||||||
|
localStorage.setItem(item, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retrieve the blocks */
|
||||||
|
var xml = Blockly.Xml.textToDom(getLocalStorageItem("sumorobot.currentProgram"));
|
||||||
|
/* resume the blocks */
|
||||||
|
Blockly.Xml.domToWorkspace(xml, workspace);
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
|
||||||
|
/* save the code to the local storage */
|
||||||
|
var xml = Blockly.Xml.workspaceToDom(workspace);
|
||||||
|
localStorage.setItem("sumorobot.currentProgram", Blockly.Xml.domToText(xml));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add a change listener to Blockly */
|
||||||
|
workspace.addChangeListener(onCodeChanged);
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
/* select the hotkey */
|
||||||
|
switch(e.which) {
|
||||||
|
case 32: // space bar
|
||||||
|
sumostart = !sumostart;
|
||||||
|
if (sumostart) {
|
||||||
|
$(".btn-start").addClass("hover");
|
||||||
|
$(".btn-start").click();
|
||||||
|
} else {
|
||||||
|
$(".btn-stop").addClass("hover");
|
||||||
|
$(".btn-stop").click();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 37: // left
|
||||||
|
if (remoteControl) sumorobot.send("left");
|
||||||
|
break;
|
||||||
|
case 38: // up
|
||||||
|
if (remoteControl) sumorobot.send("forward");
|
||||||
|
break;
|
||||||
|
case 39: // right
|
||||||
|
if (remoteControl) sumorobot.send("right");
|
||||||
|
break;
|
||||||
|
case 40: // down
|
||||||
|
if (remoteControl) sumorobot.send("backward");
|
||||||
|
break;
|
||||||
|
case 49: // 1
|
||||||
|
$(".btn-robot-nr:eq(0)").click();
|
||||||
|
break;
|
||||||
|
case 50: // 2
|
||||||
|
$(".btn-robot-nr:eq(1)").click();
|
||||||
|
break;
|
||||||
|
case 51: // 3
|
||||||
|
$(".btn-robot-nr:eq(2)").click();
|
||||||
|
break;
|
||||||
|
case 52: // 4
|
||||||
|
$(".btn-robot-nr:eq(3)").click();
|
||||||
|
break;
|
||||||
|
case 53: // 5
|
||||||
|
$(".btn-robot-nr:eq(4)").click();
|
||||||
|
break;
|
||||||
|
case 67: // c
|
||||||
|
panel();
|
||||||
|
$("#panel").toggle();
|
||||||
|
break;
|
||||||
|
case 82: // r
|
||||||
|
$("#remote-control").click();
|
||||||
|
break;
|
||||||
|
case 83: // s
|
||||||
|
$(".btn-stop").addClass("hover");
|
||||||
|
$(".btn-stop").click();
|
||||||
|
break;
|
||||||
|
case 87: // w
|
||||||
|
$(".btn-start").addClass("hover");
|
||||||
|
$(".btn-start").click();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* key up event */
|
||||||
|
$(document).keyup(function(e) {
|
||||||
|
/* 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");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* start button listener */
|
||||||
|
$(".btn-start").click(function() {
|
||||||
|
sumorobot.send("start:" + document.getElementById("blocklyCode").value.replace(/sumorobot./g, ""));
|
||||||
|
});
|
||||||
|
|
||||||
|
/* stop button listener */
|
||||||
|
$(".btn-stop").click(function() {
|
||||||
|
sumorobot.send("stop");
|
||||||
|
});
|
||||||
|
|
||||||
|
/* remote control checkbox listener */
|
||||||
|
$("#remote-control").click(function() {
|
||||||
|
remoteControl = $("#remote-control").is(":checked");
|
||||||
|
});
|
||||||
|
|
||||||
|
/* robot number button listener */
|
||||||
|
$(".btn-robot-nr").click(function() {
|
||||||
|
/* extract and validate the selected robot ID */
|
||||||
|
var index = $(".btn-robot-nr").index($(this));
|
||||||
|
var robotID = $(".robot-id:eq(" + index + ")").val();
|
||||||
|
if (robotID.trim() === "") {
|
||||||
|
$(".robot-nr:eq(" + index + "), .robot-id:eq(" + index + ")").addClass("has-error");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
$(".robot-nr:eq(" + index + "), .robot-id:eq(" + index + ")").removeClass("has-error");
|
||||||
|
}
|
||||||
|
/* highlight the selected robot button */
|
||||||
|
$(".btn-robot-nr").removeClass("btn-selected");
|
||||||
|
$(this).addClass("btn-selected");
|
||||||
|
/* update robot IDs in local storage */
|
||||||
|
setLocalStorageItem("sumorobot.robotID" + index, robotID);
|
||||||
|
/* connect to the selected robot channel */
|
||||||
|
sumorobot = new Sumorobot("ws://" + robotServer + ":80/p2p/browser/" + robotID + "/");
|
||||||
|
/* hide the configuration panel */
|
||||||
|
$("#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;
|
||||||
|
if (!$(target).is('.blocklyBubbleCanvas') && !$(target).parents().is('.blocklyBubbleCanvas')) {
|
||||||
|
if (!$(target).is('.blocklyIconGroup') && !$(target).parents().is('.blocklyIconGroup'))
|
||||||
|
$('.blocklyBubbleCanvas').empty();
|
||||||
|
}
|
||||||
|
});*/
|
||||||
|
}
|
12
sumorobot_compressed.js
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
// Do not edit this file; automatically generated by build.py.
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Blockly.Sumorobot=new Blockly.Generator("Sumorobot");Blockly.Sumorobot.addReservedWords("setup,loop,if,else,for,switch,case,while,do,break,continue,return,goto,define,include,HIGH,LOW,INPUT,OUTPUT,INPUT_PULLUP,true,false,interger, constants,floating,point,void,bookean,char,unsigned,byte,int,word,long,float,double,string,String,array,static, volatile,const,sizeof,pinMode,digitalWrite,digitalRead,analogReference,analogRead,analogWrite,tone,noTone,shiftOut,shitIn,pulseIn,millis,micros,delay,delayMicroseconds,min,max,abs,constrain,map,pow,sqrt,sin,cos,tan,randomSeed,random,lowByte,highByte,bitRead,bitWrite,bitSet,bitClear,bit,attachInterrupt,detachInterrupt,interrupts,noInterrupts,FORWARD,BACKWARD,LEFT,RIGHT,STOP,isEnemy,isLine,move");
|
||||||
|
Blockly.Sumorobot.ORDER_ATOMIC=0;Blockly.Sumorobot.ORDER_MEMBER=1;Blockly.Sumorobot.ORDER_NEW=1;Blockly.Sumorobot.ORDER_FUNCTION_CALL=2;Blockly.Sumorobot.ORDER_INCREMENT=3;Blockly.Sumorobot.ORDER_DECREMENT=3;Blockly.Sumorobot.ORDER_LOGICAL_NOT=4;Blockly.Sumorobot.ORDER_BITWISE_NOT=4;Blockly.Sumorobot.ORDER_UNARY_PLUS=4;Blockly.Sumorobot.ORDER_UNARY_NEGATION=4;Blockly.Sumorobot.ORDER_TYPEOF=4;Blockly.Sumorobot.ORDER_VOID=4;Blockly.Sumorobot.ORDER_DELETE=4;Blockly.Sumorobot.ORDER_MULTIPLICATION=5;
|
||||||
|
Blockly.Sumorobot.ORDER_DIVISION=5;Blockly.Sumorobot.ORDER_MODULUS=5;Blockly.Sumorobot.ORDER_ADDITION=6;Blockly.Sumorobot.ORDER_SUBTRACTION=6;Blockly.Sumorobot.ORDER_BITWISE_SHIFT=7;Blockly.Sumorobot.ORDER_RELATIONAL=8;Blockly.Sumorobot.ORDER_IN=8;Blockly.Sumorobot.ORDER_INSTANCEOF=8;Blockly.Sumorobot.ORDER_EQUALITY=9;Blockly.Sumorobot.ORDER_BITWISE_AND=10;Blockly.Sumorobot.ORDER_BITWISE_XOR=11;Blockly.Sumorobot.ORDER_BITWISE_OR=12;Blockly.Sumorobot.ORDER_LOGICAL_AND=13;
|
||||||
|
Blockly.Sumorobot.ORDER_LOGICAL_OR=14;Blockly.Sumorobot.ORDER_CONDITIONAL=15;Blockly.Sumorobot.ORDER_ASSIGNMENT=16;Blockly.Sumorobot.ORDER_COMMA=17;Blockly.Sumorobot.ORDER_NONE=99;
|
||||||
|
Blockly.Sumorobot.init=function(a){Blockly.Sumorobot.definitions_=Object.create(null);Blockly.Sumorobot.functionNames_=Object.create(null);Blockly.Sumorobot.variableDB_?Blockly.Sumorobot.variableDB_.reset():Blockly.Sumorobot.variableDB_=new Blockly.Names(Blockly.Sumorobot.RESERVED_WORDS_);var c=[];a=a.variableList;if(a.length){for(var b=0;b<a.length;b++)c[b]=Blockly.Sumorobot.variableDB_.getName(a[b],Blockly.Variables.NAME_TYPE);Blockly.Sumorobot.definitions_.variables="var "+c.join(", ")+";"}};
|
||||||
|
Blockly.Sumorobot.finish=function(a){var c=[],b;for(b in Blockly.Sumorobot.definitions_)c.push(Blockly.Sumorobot.definitions_[b]);return c.join("\n\n")+"\n\n\n"+a};Blockly.Sumorobot.scrubNakedValue=function(a){return a+";\n"};Blockly.Sumorobot.quote_=function(a){a=a.replace(/\\/g,"\\\\").replace(/\n/g,"\\\n").replace(/'/g,"\\'");return"'"+a+"'"};
|
||||||
|
Blockly.Sumorobot.scrub_=function(a,c){var b="";if(!a.outputConnection||!a.outputConnection.targetConnection){var d=a.getCommentText();(d=Blockly.utils.wrap(d,Blockly.Sumorobot.COMMENT_WRAP-3))&&(b=a.getProcedureDef?b+("/**\n"+Blockly.Sumorobot.prefixLines(d+"\n"," * ")+" */\n"):b+Blockly.Sumorobot.prefixLines(d+"\n","// "));for(var e=0;e<a.inputList.length;e++)a.inputList[e].type==Blockly.INPUT_VALUE&&(d=a.inputList[e].connection.targetBlock())&&(d=Blockly.Sumorobot.allNestedComments(d))&&(b+=Blockly.Sumorobot.prefixLines(d,
|
||||||
|
"// "))}e=a.nextConnection&&a.nextConnection.targetBlock();e=Blockly.Sumorobot.blockToCode(e);return b+c+e};Blockly.Sumorobot.sumorobot={};Blockly.Sumorobot.controls_if=function(a){var c=0,b="",d,e;do e=Blockly.Sumorobot.valueToCode(a,"IF"+c,Blockly.Sumorobot.ORDER_NONE)||"false",d=Blockly.Sumorobot.statementToCode(a,"DO"+c),b+=(0<c?" else ":"")+"if ("+e+") {\n"+d+"}",++c;while(a.getInput("IF"+c));a.getInput("ELSE")&&(d=Blockly.Sumorobot.statementToCode(a,"ELSE"),b+=" else {\n"+d+"}");return b+"\n"};Blockly.Sumorobot.controls_ifelse=Blockly.Sumorobot.controls_if;
|
||||||
|
Blockly.Sumorobot.sumorobot_delay=function(a){return"sumorobot.delay("+parseFloat(a.getFieldValue("DELAY"))+");\n"};Blockly.Sumorobot.sumorobot_move=function(a){return"sumorobot.move("+a.getFieldValue("MOVE")+");\n"};Blockly.Sumorobot.sumorobot_enemy=function(a){return["sumorobot.isEnemy()",Blockly.Sumorobot.ORDER_ATOMIC]};Blockly.Sumorobot.sumorobot_line=function(a){return["sumorobot.isLine("+a.getFieldValue("LINE")+")",Blockly.Sumorobot.ORDER_ATOMIC]};
|