mota-js/_server/blockly/blocks_compressed.js
2018-04-18 00:28:53 +08:00

1857 lines
85 KiB
JavaScript

// Do not edit this file; automatically generated by build.py.
'use strict';
Blockly.Blocks.colour = {};
Blockly.Constants = {};
Blockly.Constants.Colour = {};
Blockly.Constants.Colour.HUE = 20;
Blockly.Blocks.colour.HUE = Blockly.Constants.Colour.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "colour_picker",
message0: "%1",
args0: [{type: "field_colour", name: "COLOUR", colour: "#ff0000"}],
output: "Colour",
colour: "%{BKY_COLOUR_HUE}",
helpUrl: "%{BKY_COLOUR_PICKER_HELPURL}",
tooltip: "%{BKY_COLOUR_PICKER_TOOLTIP}",
extensions: ["parent_tooltip_when_inline"]
}, {
type: "colour_random",
message0: "%{BKY_COLOUR_RANDOM_TITLE}",
output: "Colour",
colour: "%{BKY_COLOUR_HUE}",
helpUrl: "%{BKY_COLOUR_RANDOM_HELPURL}",
tooltip: "%{BKY_COLOUR_RANDOM_TOOLTIP}"
}, {
type: "colour_rgb",
message0: "%{BKY_COLOUR_RGB_TITLE} %{BKY_COLOUR_RGB_RED} %1 %{BKY_COLOUR_RGB_GREEN} %2 %{BKY_COLOUR_RGB_BLUE} %3",
args0: [{type: "input_value", name: "RED", check: "Number", align: "RIGHT"}, {
type: "input_value",
name: "GREEN",
check: "Number",
align: "RIGHT"
}, {type: "input_value", name: "BLUE", check: "Number", align: "RIGHT"}],
output: "Colour",
colour: "%{BKY_COLOUR_HUE}",
helpUrl: "%{BKY_COLOUR_RGB_HELPURL}",
tooltip: "%{BKY_COLOUR_RGB_TOOLTIP}"
}, {
type: "colour_blend",
message0: "%{BKY_COLOUR_BLEND_TITLE} %{BKY_COLOUR_BLEND_COLOUR1} %1 %{BKY_COLOUR_BLEND_COLOUR2} %2 %{BKY_COLOUR_BLEND_RATIO} %3",
args0: [{
type: "input_value", name: "COLOUR1",
check: "Colour", align: "RIGHT"
}, {type: "input_value", name: "COLOUR2", check: "Colour", align: "RIGHT"}, {
type: "input_value",
name: "RATIO",
check: "Number",
align: "RIGHT"
}],
output: "Colour",
colour: "%{BKY_COLOUR_HUE}",
helpUrl: "%{BKY_COLOUR_BLEND_HELPURL}",
tooltip: "%{BKY_COLOUR_BLEND_TOOLTIP}"
}]);
Blockly.Blocks.lists = {};
Blockly.Constants.Lists = {};
Blockly.Constants.Lists.HUE = 260;
Blockly.Blocks.lists.HUE = Blockly.Constants.Lists.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "lists_create_empty",
message0: "%{BKY_LISTS_CREATE_EMPTY_TITLE}",
output: "Array",
colour: "%{BKY_LISTS_HUE}",
tooltip: "%{BKY_LISTS_CREATE_EMPTY_TOOLTIP}",
helpUrl: "%{BKY_LISTS_CREATE_EMPTY_HELPURL}"
}, {
type: "lists_repeat",
message0: "%{BKY_LISTS_REPEAT_TITLE}",
args0: [{type: "input_value", name: "ITEM"}, {type: "input_value", name: "NUM", check: "Number"}],
output: "Array",
colour: "%{BKY_LISTS_HUE}",
tooltip: "%{BKY_LISTS_REPEAT_TOOLTIP}",
helpUrl: "%{BKY_LISTS_REPEAT_HELPURL}"
}, {
type: "lists_reverse",
message0: "%{BKY_LISTS_REVERSE_MESSAGE0}",
args0: [{type: "input_value", name: "LIST", check: "Array"}],
output: "Array",
inputsInline: !0,
colour: "%{BKY_LISTS_HUE}",
tooltip: "%{BKY_LISTS_REVERSE_TOOLTIP}",
helpUrl: "%{BKY_LISTS_REVERSE_HELPURL}"
}, {
type: "lists_isEmpty",
message0: "%{BKY_LISTS_ISEMPTY_TITLE}",
args0: [{type: "input_value", name: "VALUE", check: ["String", "Array"]}],
output: "Boolean",
colour: "%{BKY_LISTS_HUE}",
tooltip: "%{BKY_LISTS_ISEMPTY_TOOLTIP}",
helpUrl: "%{BKY_LISTS_ISEMPTY_HELPURL}"
}, {
type: "lists_length",
message0: "%{BKY_LISTS_LENGTH_TITLE}",
args0: [{type: "input_value", name: "VALUE", check: ["String", "Array"]}],
output: "Number",
colour: "%{BKY_LISTS_HUE}",
tooltip: "%{BKY_LISTS_LENGTH_TOOLTIP}",
helpUrl: "%{BKY_LISTS_LENGTH_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, d = 0; d < this.itemCount_; d++) {
var e = a.newBlock("lists_create_with_item");
e.initSvg();
c.connect(e.previousConnection);
c = e.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_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);
var b = this;
this.setTooltip(function () {
return Blockly.Msg.LISTS_INDEX_OF_TOOLTIP.replace("%1",
b.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"), d = b.getFieldValue("WHERE"), e = "";
switch (a + " " + d) {
case "GET FROM_START":
case "GET FROM_END":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM;
break;
case "GET FIRST":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST;
break;
case "GET LAST":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST;
break;
case "GET RANDOM":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM;
break;
case "GET_REMOVE FROM_START":
case "GET_REMOVE FROM_END":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM;
break;
case "GET_REMOVE FIRST":
e =
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST;
break;
case "GET_REMOVE LAST":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST;
break;
case "GET_REMOVE RANDOM":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM;
break;
case "REMOVE FROM_START":
case "REMOVE FROM_END":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM;
break;
case "REMOVE FIRST":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST;
break;
case "REMOVE LAST":
e = Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST;
break;
case "REMOVE RANDOM":
e =
Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM
}
if ("FROM_START" == d || "FROM_END" == d) e += " " + ("FROM_START" == d ? Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP : Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP).replace("%1", b.workspace.options.oneBasedIndex ? "#1" : "#0");
return e
})
}, 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 e = this.sourceBlock_;
e.updateAt_(c);
e.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"), d = b.getFieldValue("WHERE"), e = "";
switch (a + " " + d) {
case "SET FROM_START":
case "SET FROM_END":
e =
Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM;
break;
case "SET FIRST":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST;
break;
case "SET LAST":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST;
break;
case "SET RANDOM":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM;
break;
case "INSERT FROM_START":
case "INSERT FROM_END":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM;
break;
case "INSERT FIRST":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST;
break;
case "INSERT LAST":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST;
break;
case "INSERT RANDOM":
e = Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM
}
if ("FROM_START" == d || "FROM_END" == d) e += " " + Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP.replace("%1", b.workspace.options.oneBasedIndex ? "#1" : "#0");
return e
})
}, 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 e = this.sourceBlock_;
e.updateAt_(c);
e.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 f = this.sourceBlock_;
f.updateAt_(a, d);
f.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.Constants.Logic = {};
Blockly.Constants.Logic.HUE = 210;
Blockly.Blocks.logic.HUE = Blockly.Constants.Logic.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "logic_boolean",
message0: "%1",
args0: [{
type: "field_dropdown",
name: "BOOL",
options: [["%{BKY_LOGIC_BOOLEAN_TRUE}", "TRUE"], ["%{BKY_LOGIC_BOOLEAN_FALSE}", "FALSE"]]
}],
output: "Boolean",
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKY_LOGIC_BOOLEAN_TOOLTIP}",
helpUrl: "%{BKY_LOGIC_BOOLEAN_HELPURL}"
}, {
type: "controls_if",
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"
}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_LOGIC_HUE}",
helpUrl: "%{BKY_CONTROLS_IF_HELPURL}",
mutator: "controls_if_mutator",
extensions: ["controls_if_tooltip"]
}, {
type: "controls_ifelse",
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,
// change by zhaouv @ logic_compare output : "Boolean" -> null
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKYCONTROLS_IF_TOOLTIP_2}",
helpUrl: "%{BKY_CONTROLS_IF_HELPURL}",
extensions: ["controls_if_tooltip"]
}, {
type: "logic_compare",
message0: "%1 %2 %3",
args0: [{type: "input_value", name: "A"}, {
type: "field_dropdown",
name: "OP",
options: [["=", "EQ"], ["\u2260", "NEQ"], ["<", "LT"], ["\u2264", "LTE"], [">", "GT"], ["\u2265", "GTE"]]
}, {type: "input_value", name: "B"}],
inputsInline: !0,
output: null,
colour: "%{BKY_LOGIC_HUE}",
helpUrl: "%{BKY_LOGIC_COMPARE_HELPURL}",
extensions: ["logic_compare",
// change by zhaouv @ logic_operation output,check : "Boolean" -> null
// change by zhaouv @ logic_negate output,check : "Boolean" -> null
"logic_op_tooltip"]
}, {
type: "logic_operation",
message0: "%1 %2 %3",
args0: [{type: "input_value", name: "A", check: null}, {
type: "field_dropdown",
name: "OP",
options: [["%{BKY_LOGIC_OPERATION_AND}", "AND"], ["%{BKY_LOGIC_OPERATION_OR}", "OR"]]
}, {type: "input_value", name: "B", check: null}],
inputsInline: !0,
output: null,
colour: "%{BKY_LOGIC_HUE}",
helpUrl: "%{BKY_LOGIC_OPERATION_HELPURL}",
extensions: ["logic_op_tooltip"]
}, {
type: "logic_negate",
message0: "%{BKY_LOGIC_NEGATE_TITLE}",
args0: [{
type: "input_value", name: "BOOL",
check: null
}],
output: null,
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKY_LOGIC_NEGATE_TOOLTIP}",
helpUrl: "%{BKY_LOGIC_NEGATE_HELPURL}"
}, {
type: "logic_null",
message0: "%{BKY_LOGIC_NULL}",
output: null,
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKY_LOGIC_NULL_TOOLTIP}",
helpUrl: "%{BKY_LOGIC_NULL_HELPURL}"
}, {
type: "logic_ternary",
message0: "%{BKY_LOGIC_TERNARY_CONDITION} %1",
args0: [{type: "input_value", name: "IF", check: "Boolean"}],
message1: "%{BKY_LOGIC_TERNARY_IF_TRUE} %1",
args1: [{type: "input_value", name: "THEN"}],
message2: "%{BKY_LOGIC_TERNARY_IF_FALSE} %1",
args2: [{type: "input_value", name: "ELSE"}],
output: null,
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKY_LOGIC_TERNARY_TOOLTIP}",
helpUrl: "%{BKY_LOGIC_TERNARY_HELPURL}",
extensions: ["logic_ternary"]
}]);
Blockly.defineBlocksWithJsonArray([{
type: "controls_if_if",
message0: "%{BKY_CONTROLS_IF_IF_TITLE_IF}",
nextStatement: null,
enableContextMenu: !1,
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKY_CONTROLS_IF_IF_TOOLTIP}"
}, {
type: "controls_if_elseif",
message0: "%{BKY_CONTROLS_IF_ELSEIF_TITLE_ELSEIF}",
previousStatement: null,
nextStatement: null,
enableContextMenu: !1,
colour: "%{BKY_LOGIC_HUE}",
tooltip: "%{BKY_CONTROLS_IF_ELSEIF_TOOLTIP}"
}, {
type: "controls_if_else", message0: "%{BKY_CONTROLS_IF_ELSE_TITLE_ELSE}", previousStatement: null,
enableContextMenu: !1, colour: "%{BKY_LOGIC_HUE}", tooltip: "%{BKY_CONTROLS_IF_ELSE_TOOLTIP}"
}]);
Blockly.Constants.Logic.TOOLTIPS_BY_OP = {
EQ: "%{BKY_LOGIC_COMPARE_TOOLTIP_EQ}",
NEQ: "%{BKY_LOGIC_COMPARE_TOOLTIP_NEQ}",
LT: "%{BKY_LOGIC_COMPARE_TOOLTIP_LT}",
LTE: "%{BKY_LOGIC_COMPARE_TOOLTIP_LTE}",
GT: "%{BKY_LOGIC_COMPARE_TOOLTIP_GT}",
GTE: "%{BKY_LOGIC_COMPARE_TOOLTIP_GTE}",
AND: "%{BKY_LOGIC_OPERATION_TOOLTIP_AND}",
OR: "%{BKY_LOGIC_OPERATION_TOOLTIP_OR}"
};
Blockly.Extensions.register("logic_op_tooltip", Blockly.Extensions.buildTooltipForDropdown("OP", Blockly.Constants.Logic.TOOLTIPS_BY_OP));
Blockly.Constants.Logic.CONTROLS_IF_MUTATOR_MIXIN = {
elseifCount_: 0, elseCount_: 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, d = 1; d <= this.elseifCount_; d++) {
var e = a.newBlock("controls_if_elseif");
e.initSvg();
c.connect(e.previousConnection);
c = e.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], d = 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_++;
d = 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(d, 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), d = this.getInput("DO" +
b);
a.valueConnection_ = c && c.connection.targetConnection;
a.statementConnection_ = d && d.connection.targetConnection;
b++;
break;
case "controls_if_else":
d = this.getInput("ELSE");
a.statementConnection_ = d && d.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.Extensions.registerMutator("controls_if_mutator", Blockly.Constants.Logic.CONTROLS_IF_MUTATOR_MIXIN, null, ["controls_if_elseif", "controls_if_else"]);
Blockly.Constants.Logic.CONTROLS_IF_TOOLTIP_EXTENSION = function () {
this.setTooltip(function () {
if (this.elseifCount_ || this.elseCount_) {
if (!this.elseifCount_ && this.elseCount_) return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;
if (this.elseifCount_ && !this.elseCount_) return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;
if (this.elseifCount_ && this.elseCount_) return Blockly.Msg.CONTROLS_IF_TOOLTIP_4
} else return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;
return ""
}.bind(this))
};
Blockly.Extensions.register("controls_if_tooltip", Blockly.Constants.Logic.CONTROLS_IF_TOOLTIP_EXTENSION);
Blockly.Constants.Logic.fixLogicCompareRtlOpLabels = function () {
var a = {LT: "\u200f<\u200f", LTE: "\u200f\u2264\u200f", GT: "\u200f>\u200f", GTE: "\u200f\u2265\u200f"},
b = this.getField("OP");
if (b) {
b = b.getOptions();
for (var c = 0; c < b.length; ++c) {
var d = b[c], e = a[d[1]];
goog.isString(d[0]) && e && (d[0] = e)
}
}
};
Blockly.Constants.Logic.LOGIC_COMPARE_ONCHANGE_MIXIN = {
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 d = this.prevBlocks_[a];
if (d === b || d === c) d.unplug(), d.bumpNeighbours_()
}
Blockly.Events.setGroup(!1)
}
this.prevBlocks_[0] = b;
this.prevBlocks_[1] = c
}
};
Blockly.Constants.Logic.LOGIC_COMPARE_EXTENSION = function () {
this.RTL && Blockly.Constants.Logic.fixLogicCompareRtlOpLabels.apply(this);
this.mixin(Blockly.Constants.Logic.LOGIC_COMPARE_ONCHANGE_MIXIN)
};
Blockly.Extensions.register("logic_compare", Blockly.Constants.Logic.LOGIC_COMPARE_EXTENSION);
Blockly.Constants.Logic.LOGIC_TERNARY_ONCHANGE_MIXIN = {
prevParentConnection_: null, onchange: function (a) {
var b = this.getInputTargetBlock("THEN"), c = this.getInputTargetBlock("ELSE"),
d = this.outputConnection.targetConnection;
if ((b || c) && d) for (var e = 0; 2 > e; e++) {
var f = 1 == e ? b : c;
f && !f.outputConnection.checkType_(d) && (Blockly.Events.setGroup(a.group), d === this.prevParentConnection_ ? (this.unplug(), d.getSourceBlock().bumpNeighbours_()) : (f.unplug(), f.bumpNeighbours_()), Blockly.Events.setGroup(!1))
}
this.prevParentConnection_ =
d
}
};
Blockly.Extensions.registerMixin("logic_ternary", Blockly.Constants.Logic.LOGIC_TERNARY_ONCHANGE_MIXIN);
Blockly.Blocks.loops = {};
Blockly.Constants.Loops = {};
Blockly.Constants.Loops.HUE = 120;
Blockly.Blocks.loops.HUE = Blockly.Constants.Loops.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "controls_repeat_ext",
message0: "%{BKY_CONTROLS_REPEAT_TITLE}",
args0: [{type: "input_value", name: "TIMES", check: "Number"}],
message1: "%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",
args1: [{type: "input_statement", name: "DO"}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_LOOPS_HUE}",
tooltip: "%{BKY_CONTROLS_REPEAT_TOOLTIP}",
helpUrl: "%{BKY_CONTROLS_REPEAT_HELPURL}"
}, {
type: "controls_repeat",
message0: "%{BKY_CONTROLS_REPEAT_TITLE}",
args0: [{
type: "field_number", name: "TIMES",
value: 10, min: 0, precision: 1
}],
message1: "%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",
args1: [{type: "input_statement", name: "DO"}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_LOOPS_HUE}",
tooltip: "%{BKY_CONTROLS_REPEAT_TOOLTIP}",
helpUrl: "%{BKY_CONTROLS_REPEAT_HELPURL}"
}, {
type: "controls_whileUntil",
message0: "%1 %2",
args0: [{
type: "field_dropdown",
name: "MODE",
options: [["%{BKY_CONTROLS_WHILEUNTIL_OPERATOR_WHILE}", "WHILE"], ["%{BKY_CONTROLS_WHILEUNTIL_OPERATOR_UNTIL}", "UNTIL"]]
}, {
type: "input_value", name: "BOOL",
check: "Boolean"
}],
message1: "%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",
args1: [{type: "input_statement", name: "DO"}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_LOOPS_HUE}",
helpUrl: "%{BKY_CONTROLS_WHILEUNTIL_HELPURL}",
extensions: ["controls_whileUntil_tooltip"]
}, {
type: "controls_for",
message0: "%{BKY_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"
}],
message1: "%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",
args1: [{type: "input_statement", name: "DO"}],
inputsInline: !0,
previousStatement: null,
nextStatement: null,
colour: "%{BKY_LOOPS_HUE}",
helpUrl: "%{BKY_CONTROLS_FOR_HELPURL}",
extensions: ["contextMenu_newGetVariableBlock", "controls_for_tooltip"]
}, {
type: "controls_forEach",
message0: "%{BKY_CONTROLS_FOREACH_TITLE}",
args0: [{type: "field_variable", name: "VAR", variable: null}, {type: "input_value", name: "LIST", check: "Array"}],
message1: "%{BKY_CONTROLS_REPEAT_INPUT_DO} %1",
args1: [{type: "input_statement", name: "DO"}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_LOOPS_HUE}",
helpUrl: "%{BKY_CONTROLS_FOREACH_HELPURL}",
extensions: ["contextMenu_newGetVariableBlock", "controls_forEach_tooltip"]
}, {
type: "controls_flow_statements",
message0: "%1",
args0: [{
type: "field_dropdown",
name: "FLOW",
options: [["%{BKY_CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK}", "BREAK"], ["%{BKY_CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE}", "CONTINUE"]]
}],
previousStatement: null,
colour: "%{BKY_LOOPS_HUE}",
helpUrl: "%{BKY_CONTROLS_FLOW_STATEMENTS_HELPURL}",
extensions: ["controls_flow_tooltip", "controls_flow_in_loop_check"]
}]);
Blockly.Constants.Loops.WHILE_UNTIL_TOOLTIPS = {
WHILE: "%{BKY_CONTROLS_WHILEUNTIL_TOOLTIP_WHILE}",
UNTIL: "%{BKY_CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL}"
};
Blockly.Extensions.register("controls_whileUntil_tooltip", Blockly.Extensions.buildTooltipForDropdown("MODE", Blockly.Constants.Loops.WHILE_UNTIL_TOOLTIPS));
Blockly.Constants.Loops.BREAK_CONTINUE_TOOLTIPS = {
BREAK: "%{BKY_CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK}",
CONTINUE: "%{BKY_CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE}"
};
Blockly.Extensions.register("controls_flow_tooltip", Blockly.Extensions.buildTooltipForDropdown("FLOW", Blockly.Constants.Loops.BREAK_CONTINUE_TOOLTIPS));
Blockly.Constants.Loops.CUSTOM_CONTEXT_MENU_CREATE_VARIABLES_GET_MIXIN = {
customContextMenu: function (a) {
var b = this.getFieldValue("VAR");
if (!this.isCollapsed() && null != b) {
var c = {enabled: !0};
c.text = Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1", b);
b = goog.dom.createDom("field", null, b);
b.setAttribute("name", "VAR");
b = goog.dom.createDom("block", null, b);
b.setAttribute("type", "variables_get");
c.callback = Blockly.ContextMenu.callbackFactory(this, b);
a.push(c)
}
}
};
Blockly.Extensions.registerMixin("contextMenu_newGetVariableBlock", Blockly.Constants.Loops.CUSTOM_CONTEXT_MENU_CREATE_VARIABLES_GET_MIXIN);
Blockly.Extensions.register("controls_for_tooltip", Blockly.Extensions.buildTooltipWithFieldValue("%{BKY_CONTROLS_FOR_TOOLTIP}", "VAR"));
Blockly.Extensions.register("controls_forEach_tooltip", Blockly.Extensions.buildTooltipWithFieldValue("%{BKY_CONTROLS_FOREACH_TOOLTIP}", "VAR"));
Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN = {
LOOP_TYPES: ["controls_repeat", "controls_repeat_ext", "controls_forEach", "controls_for", "controls_whileUntil"],
onchange: function () {
if (this.workspace.isDragging && !this.workspace.isDragging()) {
var a = !1, 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))
}
}
};
Blockly.Extensions.registerMixin("controls_flow_in_loop_check", Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN);
Blockly.Blocks.math = {};
Blockly.Constants.Math = {};
Blockly.Constants.Math.HUE = 230;
Blockly.Blocks.math.HUE = Blockly.Constants.Math.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "math_number",
message0: "%1",
args0: [{type: "field_number", name: "NUM", value: 0}],
output: "Number",
colour: "%{BKY_MATH_HUE}",
helpUrl: "%{BKY_MATH_NUMBER_HELPURL}",
tooltip: "%{BKY_MATH_NUMBER_TOOLTIP}",
extensions: ["parent_tooltip_when_inline"]
}, {
type: "math_arithmetic",
message0: "%1 %2 %3",
args0: [{type: "input_value", name: "A", check: "Number"}, {
type: "field_dropdown",
name: "OP",
options: [["%{BKY_MATH_ADDITION_SYMBOL}", "ADD"], ["%{BKY_MATH_SUBTRACTION_SYMBOL}", "MINUS"], ["%{BKY_MATH_MULTIPLICATION_SYMBOL}",
"MULTIPLY"], ["%{BKY_MATH_DIVISION_SYMBOL}", "DIVIDE"], ["%{BKY_MATH_POWER_SYMBOL}", "POWER"]]
}, {type: "input_value", name: "B", check: "Number"}],
inputsInline: !0,
output: "Number",
colour: "%{BKY_MATH_HUE}",
helpUrl: "%{BKY_MATH_ARITHMETIC_HELPURL}",
extensions: ["math_op_tooltip"]
}, {
type: "math_single",
message0: "%1 %2",
args0: [{
type: "field_dropdown",
name: "OP",
options: [["%{BKY_MATH_SINGLE_OP_ROOT}", "ROOT"], ["%{BKY_MATH_SINGLE_OP_ABSOLUTE}", "ABS"], ["-", "NEG"], ["ln", "LN"], ["log10", "LOG10"], ["e^", "EXP"], ["10^", "POW10"]]
},
{type: "input_value", name: "NUM", check: "Number"}],
output: "Number",
colour: "%{BKY_MATH_HUE}",
helpUrl: "%{BKY_MATH_SINGLE_HELPURL}",
extensions: ["math_op_tooltip"]
}, {
type: "math_trig",
message0: "%1 %2",
args0: [{
type: "field_dropdown",
name: "OP",
options: [["%{BKY_MATH_TRIG_SIN}", "SIN"], ["%{BKY_MATH_TRIG_COS}", "COS"], ["%{BKY_MATH_TRIG_TAN}", "TAN"], ["%{BKY_MATH_TRIG_ASIN}", "ASIN"], ["%{BKY_MATH_TRIG_ACOS}", "ACOS"], ["%{BKY_MATH_TRIG_ATAN}", "ATAN"]]
}, {type: "input_value", name: "NUM", check: "Number"}],
output: "Number",
colour: "%{BKY_MATH_HUE}",
helpUrl: "%{BKY_MATH_TRIG_HELPURL}",
extensions: ["math_op_tooltip"]
}, {
type: "math_constant",
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: "%{BKY_MATH_HUE}",
tooltip: "%{BKY_MATH_CONSTANT_TOOLTIP}",
helpUrl: "%{BKY_MATH_CONSTANT_HELPURL}"
}, {
type: "math_number_property",
message0: "%1 %2",
args0: [{type: "input_value", name: "NUMBER_TO_CHECK", check: "Number"},
{
type: "field_dropdown",
name: "PROPERTY",
options: [["%{BKY_MATH_IS_EVEN}", "EVEN"], ["%{BKY_MATH_IS_ODD}", "ODD"], ["%{BKY_MATH_IS_PRIME}", "PRIME"], ["%{BKY_MATH_IS_WHOLE}", "WHOLE"], ["%{BKY_MATH_IS_POSITIVE}", "POSITIVE"], ["%{BKY_MATH_IS_NEGATIVE}", "NEGATIVE"], ["%{BKY_MATH_IS_DIVISIBLE_BY}", "DIVISIBLE_BY"]]
}],
inputsInline: !0,
output: "Boolean",
colour: "%{BKY_MATH_HUE}",
tooltip: "%{BKY_MATH_IS_TOOLTIP}",
mutator: "math_is_divisibleby_mutator"
}, {
type: "math_change",
message0: "%{BKY_MATH_CHANGE_TITLE}",
args0: [{
type: "field_variable",
name: "VAR", variable: "%{BKY_MATH_CHANGE_TITLE_ITEM}"
}, {type: "input_value", name: "DELTA", check: "Number"}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_VARIABLES_HUE}",
helpUrl: "%{BKY_MATH_CHANGE_HELPURL}",
extensions: ["math_change_tooltip"]
}, {
type: "math_round",
message0: "%1 %2",
args0: [{
type: "field_dropdown",
name: "OP",
options: [["%{BKY_MATH_ROUND_OPERATOR_ROUND}", "ROUND"], ["%{BKY_MATH_ROUND_OPERATOR_ROUNDUP}", "ROUNDUP"], ["%{BKY_MATH_ROUND_OPERATOR_ROUNDDOWN}", "ROUNDDOWN"]]
}, {
type: "input_value",
name: "NUM", check: "Number"
}],
output: "Number",
colour: "%{BKY_MATH_HUE}",
helpUrl: "%{BKY_MATH_ROUND_HELPURL}",
tooltip: "%{BKY_MATH_ROUND_TOOLTIP}"
}, {
type: "math_on_list",
message0: "%1 %2",
args0: [{
type: "field_dropdown",
name: "OP",
options: [["%{BKY_MATH_ONLIST_OPERATOR_SUM}", "SUM"], ["%{BKY_MATH_ONLIST_OPERATOR_MIN}", "MIN"], ["%{BKY_MATH_ONLIST_OPERATOR_MAX}", "MAX"], ["%{BKY_MATH_ONLIST_OPERATOR_AVERAGE}", "AVERAGE"], ["%{BKY_MATH_ONLIST_OPERATOR_MEDIAN}", "MEDIAN"], ["%{BKY_MATH_ONLIST_OPERATOR_MODE}", "MODE"], ["%{BKY_MATH_ONLIST_OPERATOR_STD_DEV}",
"STD_DEV"], ["%{BKY_MATH_ONLIST_OPERATOR_RANDOM}", "RANDOM"]]
}, {type: "input_value", name: "LIST", check: "Array"}],
output: "Number",
colour: "%{BKY_MATH_HUE}",
helpUrl: "%{BKY_MATH_ONLIST_HELPURL}",
mutator: "math_modes_of_list_mutator",
extensions: ["math_op_tooltip"]
}, {
type: "math_modulo",
message0: "%{BKY_MATH_MODULO_TITLE}",
args0: [{type: "input_value", name: "DIVIDEND", check: "Number"}, {
type: "input_value",
name: "DIVISOR",
check: "Number"
}],
inputsInline: !0,
output: "Number",
colour: "%{BKY_MATH_HUE}",
tooltip: "%{BKY_MATH_MODULO_TOOLTIP}",
helpUrl: "%{BKY_MATH_MODULO_HELPURL}"
}, {
type: "math_constrain",
message0: "%{BKY_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: "%{BKY_MATH_HUE}",
tooltip: "%{BKY_MATH_CONSTRAIN_TOOLTIP}",
helpUrl: "%{BKY_MATH_CONSTRAIN_HELPURL}"
}, {
type: "math_random_int",
message0: "%{BKY_MATH_RANDOM_INT_TITLE}",
args0: [{type: "input_value", name: "FROM", check: "Number"},
{type: "input_value", name: "TO", check: "Number"}],
inputsInline: !0,
output: "Number",
colour: "%{BKY_MATH_HUE}",
tooltip: "%{BKY_MATH_RANDOM_INT_TOOLTIP}",
helpUrl: "%{BKY_MATH_RANDOM_INT_HELPURL}"
}, {
type: "math_random_float",
message0: "%{BKY_MATH_RANDOM_FLOAT_TITLE_RANDOM}",
output: "Number",
colour: "%{BKY_MATH_HUE}",
tooltip: "%{BKY_MATH_RANDOM_FLOAT_TOOLTIP}",
helpUrl: "%{BKY_MATH_RANDOM_FLOAT_HELPURL}"
}]);
Blockly.Constants.Math.TOOLTIPS_BY_OP = {
ADD: "%{BKY_MATH_ARITHMETIC_TOOLTIP_ADD}",
MINUS: "%{BKY_MATH_ARITHMETIC_TOOLTIP_MINUS}",
MULTIPLY: "%{BKY_MATH_ARITHMETIC_TOOLTIP_MULTIPLY}",
DIVIDE: "%{BKY_MATH_ARITHMETIC_TOOLTIP_DIVIDE}",
POWER: "%{BKY_MATH_ARITHMETIC_TOOLTIP_POWER}",
ROOT: "%{BKY_MATH_SINGLE_TOOLTIP_ROOT}",
ABS: "%{BKY_MATH_SINGLE_TOOLTIP_ABS}",
NEG: "%{BKY_MATH_SINGLE_TOOLTIP_NEG}",
LN: "%{BKY_MATH_SINGLE_TOOLTIP_LN}",
LOG10: "%{BKY_MATH_SINGLE_TOOLTIP_LOG10}",
EXP: "%{BKY_MATH_SINGLE_TOOLTIP_EXP}",
POW10: "%{BKY_MATH_SINGLE_TOOLTIP_POW10}",
SIN: "%{BKY_MATH_TRIG_TOOLTIP_SIN}",
COS: "%{BKY_MATH_TRIG_TOOLTIP_COS}",
TAN: "%{BKY_MATH_TRIG_TOOLTIP_TAN}",
ASIN: "%{BKY_MATH_TRIG_TOOLTIP_ASIN}",
ACOS: "%{BKY_MATH_TRIG_TOOLTIP_ACOS}",
ATAN: "%{BKY_MATH_TRIG_TOOLTIP_ATAN}",
SUM: "%{BKY_MATH_ONLIST_TOOLTIP_SUM}",
MIN: "%{BKY_MATH_ONLIST_TOOLTIP_MIN}",
MAX: "%{BKY_MATH_ONLIST_TOOLTIP_MAX}",
AVERAGE: "%{BKY_MATH_ONLIST_TOOLTIP_AVERAGE}",
MEDIAN: "%{BKY_MATH_ONLIST_TOOLTIP_MEDIAN}",
MODE: "%{BKY_MATH_ONLIST_TOOLTIP_MODE}",
STD_DEV: "%{BKY_MATH_ONLIST_TOOLTIP_STD_DEV}",
RANDOM: "%{BKY_MATH_ONLIST_TOOLTIP_RANDOM}"
};
Blockly.Extensions.register("math_op_tooltip", Blockly.Extensions.buildTooltipForDropdown("OP", Blockly.Constants.Math.TOOLTIPS_BY_OP));
Blockly.Constants.Math.IS_DIVISIBLEBY_MUTATOR_MIXIN = {
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.Constants.Math.IS_DIVISIBLE_MUTATOR_EXTENSION = function () {
this.getField("PROPERTY").setValidator(function (a) {
this.sourceBlock_.updateShape_("DIVISIBLE_BY" == a)
})
};
Blockly.Extensions.registerMutator("math_is_divisibleby_mutator", Blockly.Constants.Math.IS_DIVISIBLEBY_MUTATOR_MIXIN, Blockly.Constants.Math.IS_DIVISIBLE_MUTATOR_EXTENSION);
Blockly.Constants.Math.CHANGE_TOOLTIP_EXTENSION = function () {
this.setTooltip(function () {
return Blockly.Msg.MATH_CHANGE_TOOLTIP.replace("%1", this.getFieldValue("VAR"))
}.bind(this))
};
Blockly.Extensions.register("math_change_tooltip", Blockly.Extensions.buildTooltipWithFieldValue("%{BKY_MATH_CHANGE_TOOLTIP}", "VAR"));
Blockly.Constants.Math.LIST_MODES_MUTATOR_MIXIN = {
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.Constants.Math.LIST_MODES_MUTATOR_EXTENSION = function () {
this.getField("OP").setValidator(function (a) {
this.updateType_(a)
}.bind(this))
};
Blockly.Extensions.registerMutator("math_modes_of_list_mutator", Blockly.Constants.Math.LIST_MODES_MUTATOR_MIXIN, Blockly.Constants.Math.LIST_MODES_MUTATOR_EXTENSION);
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 d = document.createElement("arg");
d.setAttribute("name", this.arguments_[c]);
a && this.paramIds_ && d.setAttribute("paramId", this.paramIds_[c]);
b.appendChild(d)
}
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, d = 0; d < this.arguments_.length; d++) {
var e = a.newBlock("procedures_mutatorarg");
e.initSvg();
e.setFieldValue(this.arguments_[d], "NAME");
e.oldLocation = d;
c.connect(e.previousConnection);
c = e.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, d = 0; d < this.arguments_.length; d++) Blockly.Names.equals(a,
this.arguments_[d]) && (this.arguments_[d] = b, c = !0);
if (c && (this.updateParams_(), this.mutator.isVisible())) {
c = this.mutator.workspace_.getAllBlocks();
d = 0;
for (var e; e = c[d]; d++) "procedures_mutatorarg" == e.type && Blockly.Names.equals(a, e.getFieldValue("NAME")) && e.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 d = goog.dom.createDom("mutation");
d.setAttribute("name", c);
for (var e = 0; e < this.arguments_.length; e++) c =
goog.dom.createDom("arg"), c.setAttribute("name", this.arguments_[e]), d.appendChild(c);
d = goog.dom.createDom("block", null, d);
d.setAttribute("type", this.callType_);
b.callback = Blockly.ContextMenu.callbackFactory(this, d);
a.push(b);
if (!this.isCollapsed()) for (e = 0; e < this.arguments_.length; e++) b = {enabled: !0}, c = this.arguments_[e], b.text = Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1", c), d = goog.dom.createDom("field", null, c), d.setAttribute("name", "VAR"), d = goog.dom.createDom("block", null, d), d.setAttribute("type",
"variables_get"), b.callback = Blockly.ContextMenu.callbackFactory(this, d), 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_;
if (b && b.workspace && b.workspace.options && b.workspace.options.parentWorkspace) {
b = b.workspace.options.parentWorkspace;
var c = b.getVariable(a);
c && c.name !== a ? b.renameVariableById(c.getId(), a) : b.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),
d = c && c.mutator && c.mutator.isVisible();
d || (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 e = 0; e < this.arguments_.length; e++) {
var f = this.getInput("ARG" + e);
f && (f = f.connection.targetConnection, this.quarkConnections_[this.quarkIds_[e]] = f, d && f && -1 == b.indexOf(this.quarkIds_[e]) && (f.disconnect(), f.getSourceBlock().bumpNeighbours_()))
}
this.arguments_ = [].concat(a);
this.updateShape_();
if (this.quarkIds_ = b) for (e = 0; e < this.arguments_.length; e++) d =
this.quarkIds_[e], d in this.quarkConnections_ && (f = this.quarkConnections_[d], Blockly.Mutator.reconnect(f, this, "ARG" + e) || delete this.quarkConnections_[d]);
(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);
b = [];
for (var c = [], d = 0, e; e = a.childNodes[d]; d++) "arg" == e.nodeName.toLowerCase() && (b.push(e.getAttribute("name")), c.push(e.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.BLOCK_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(), d = c.y + 2 * Blockly.SNAP_RADIUS;
b.setAttribute("x", c.x + Blockly.SNAP_RADIUS *
(this.RTL ? -1 : 1));
b.setAttribute("y", d);
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.BLOCK_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(), d = this.workspace;
b.callback = function () {
var a = Blockly.Procedures.getDefinition(c, d);
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 () {
if (this.workspace.isDragging && !this.workspace.isDragging()) {
var a = !1, 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.texts = {};
Blockly.Constants.Text = {};
Blockly.Constants.Text.HUE = 160;
Blockly.Blocks.texts.HUE = Blockly.Constants.Text.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "text",
message0: "%1",
args0: [{type: "field_input", name: "TEXT", text: ""}],
output: "String",
colour: "%{BKY_TEXTS_HUE}",
helpUrl: "%{BKY_TEXT_TEXT_HELPURL}",
tooltip: "%{BKY_TEXT_TEXT_TOOLTIP}",
extensions: ["text_quotes", "parent_tooltip_when_inline"]
}, {
type: "text_join",
message0: "",
output: "String",
colour: "%{BKY_TEXTS_HUE}",
helpUrl: "%{BKY_TEXT_JOIN_HELPURL}",
tooltip: "%{BKY_TEXT_JOIN_TOOLTIP}",
mutator: "text_join_mutator"
}, {
type: "text_create_join_container",
message0: "%{BKY_TEXT_CREATE_JOIN_TITLE_JOIN} %1 %2",
args0: [{type: "input_dummy"}, {type: "input_statement", name: "STACK"}],
colour: "%{BKY_TEXTS_HUE}",
tooltip: "%{BKY_TEXT_CREATE_JOIN_TOOLTIP}",
enableContextMenu: !1
}, {
type: "text_create_join_item",
message0: "%{BKY_TEXT_CREATE_JOIN_ITEM_TITLE_ITEM}",
previousStatement: null,
nextStatement: null,
colour: "%{BKY_TEXTS_HUE}",
tooltip: "{%BKY_TEXT_CREATE_JOIN_ITEM_TOOLTIP}",
enableContextMenu: !1
}, {
type: "text_append",
message0: "%{BKY_TEXT_APPEND_TITLE}",
args0: [{type: "field_variable", name: "VAR", variable: "%{BKY_TEXT_APPEND_VARIABLE}"},
{type: "input_value", name: "TEXT"}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_TEXTS_HUE}",
extensions: ["text_append_tooltip"]
}, {
type: "text_length",
message0: "%{BKY_TEXT_LENGTH_TITLE}",
args0: [{type: "input_value", name: "VALUE", check: ["String", "Array"]}],
output: "Number",
colour: "%{BKY_TEXTS_HUE}",
tooltip: "%{BKY_TEXT_LENGTH_TOOLTIP}",
helpUrl: "%{BKY_TEXT_LENGTH_HELPURL}"
}, {
type: "text_isEmpty",
message0: "%{BKY_TEXT_ISEMPTY_TITLE}",
args0: [{type: "input_value", name: "VALUE", check: ["String", "Array"]}],
output: "Boolean",
colour: "%{BKY_TEXTS_HUE}",
tooltip: "%{BKY_TEXT_ISEMPTY_TOOLTIP}",
helpUrl: "%{BKY_TEXT_ISEMPTY_HELPURL}"
}, {
type: "text_indexOf",
message0: "%{BKY_TEXT_INDEXOF_TITLE}",
args0: [{type: "input_value", name: "VALUE", check: "String"}, {
type: "field_dropdown",
name: "END",
options: [["%{BKY_TEXT_INDEXOF_OPERATOR_FIRST}", "FIRST"], ["%{BKY_TEXT_INDEXOF_OPERATOR_LAST}", "LAST"]]
}, {type: "input_value", name: "FIND", check: "String"}],
output: "Number",
colour: "%{BKY_TEXTS_HUE}",
helpUrl: "%{BKY_TEXT_INDEXOF_HELPURL}",
inputsInline: !0,
extensions: ["text_indexOf_tooltip"]
}, {
type: "text_charAt",
message0: "%{BKY_TEXT_CHARAT_TITLE}",
args0: [{type: "input_value", name: "VALUE", check: "String"}, {
type: "field_dropdown",
name: "WHERE",
options: [["%{BKY_TEXT_CHARAT_FROM_START}", "FROM_START"], ["%{BKY_TEXT_CHARAT_FROM_END}", "FROM_END"], ["%{BKY_TEXT_CHARAT_FIRST}", "FIRST"], ["%{BKY_TEXT_CHARAT_LAST}", "LAST"], ["%{BKY_TEXT_CHARAT_RANDOM}", "RANDOM"]]
}],
output: "String",
colour: "%{BKY_TEXTS_HUE}",
helpUrl: "%{BKY_TEXT_CHARAT_HELPURL}",
inputsInline: !0,
mutator: "text_charAt_mutator"
}]);
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 f = this.sourceBlock_;
f.updateAt_(a, d);
f.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 () {
this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);
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
})
},
updateType_: Blockly.Blocks.text_prompt_ext.updateType_,
mutationToDom: Blockly.Blocks.text_prompt_ext.mutationToDom,
domToMutation: Blockly.Blocks.text_prompt_ext.domToMutation
};
Blockly.Blocks.text_count = {
init: function () {
this.jsonInit({
message0: Blockly.Msg.TEXT_COUNT_MESSAGE0,
args0: [{type: "input_value", name: "SUB", check: "String"}, {
type: "input_value",
name: "TEXT",
check: "String"
}],
output: "Number",
inputsInline: !0,
colour: Blockly.Blocks.texts.HUE,
tooltip: Blockly.Msg.TEXT_COUNT_TOOLTIP,
helpUrl: Blockly.Msg.TEXT_COUNT_HELPURL
})
}
};
Blockly.Blocks.text_replace = {
init: function () {
this.jsonInit({
message0: Blockly.Msg.TEXT_REPLACE_MESSAGE0,
args0: [{type: "input_value", name: "FROM", check: "String"}, {
type: "input_value",
name: "TO",
check: "String"
}, {type: "input_value", name: "TEXT", check: "String"}],
output: "String",
inputsInline: !0,
colour: Blockly.Blocks.texts.HUE,
tooltip: Blockly.Msg.TEXT_REPLACE_TOOLTIP,
helpUrl: Blockly.Msg.TEXT_REPLACE_HELPURL
})
}
};
Blockly.Blocks.text_reverse = {
init: function () {
this.jsonInit({
message0: Blockly.Msg.TEXT_REVERSE_MESSAGE0,
args0: [{type: "input_value", name: "TEXT", check: "String"}],
output: "String",
inputsInline: !0,
colour: Blockly.Blocks.texts.HUE,
tooltip: Blockly.Msg.TEXT_REVERSE_TOOLTIP,
helpUrl: Blockly.Msg.TEXT_REVERSE_HELPURL
})
}
};
Blockly.Constants.Text.QUOTE_IMAGE_MIXIN = {
QUOTE_IMAGE_LEFT_DATAURI: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC",
QUOTE_IMAGE_RIGHT_DATAURI: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==",
QUOTE_IMAGE_WIDTH: 12,
QUOTE_IMAGE_HEIGHT: 12,
quoteField_: function (a) {
for (var b = 0, c; c = this.inputList[b]; b++) for (var d = 0, e; e = c.fieldRow[d]; d++) if (a == e.name) {
c.insertFieldAt(d, this.newQuote_(!0));
c.insertFieldAt(d + 2, this.newQuote_(!1));
return
}
console.warn('field named "' + a + '" not found in ' + this.toDevString())
},
newQuote_: function (a) {
a = this.RTL ? !a : a;
return new Blockly.FieldImage(a ? this.QUOTE_IMAGE_LEFT_DATAURI : this.QUOTE_IMAGE_RIGHT_DATAURI, this.QUOTE_IMAGE_WIDTH, this.QUOTE_IMAGE_HEIGHT, a ? "\u201c" : "\u201d")
}
};
Blockly.Constants.Text.TEXT_QUOTES_EXTENSION = function () {
this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);
this.quoteField_("TEXT")
};
Blockly.Constants.Text.TEXT_JOIN_MUTATOR_MIXIN = {
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, d = 0; d < this.itemCount_; d++) {
var e = a.newBlock("text_create_join_item");
e.initSvg();
c.connect(e.previousConnection);
c =
e.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++
}
};
Blockly.Constants.Text.TEXT_JOIN_EXTENSION = function () {
this.mixin(Blockly.Constants.Text.QUOTE_IMAGE_MIXIN);
this.itemCount_ = 2;
this.updateShape_();
this.setMutator(new Blockly.Mutator(["text_create_join_item"]))
};
Blockly.Constants.Text.TEXT_APPEND_TOOLTIP_EXTENSION = function () {
var a = this;
this.setTooltip(function () {
return Blockly.Msg.TEXT_APPEND_TOOLTIP ? Blockly.Msg.TEXT_APPEND_TOOLTIP.replace("%1", a.getFieldValue("VAR")) : ""
})
};
Blockly.Constants.Text.TEXT_INDEXOF_TOOLTIP_EXTENSION = function () {
var a = this;
this.setTooltip(function () {
return Blockly.Msg.TEXT_INDEXOF_TOOLTIP.replace("%1", a.workspace.options.oneBasedIndex ? "0" : "-1")
})
};
Blockly.Constants.Text.TEXT_CHARAT_MUTATOR_MIXIN = {
mutationToDom: function () {
var a = document.createElement("mutation");
a.setAttribute("at", !!this.isAt_);
return a
}, domToMutation: function (a) {
a = "false" != a.getAttribute("at");
this.updateAt_(a)
}, updateAt_: function (a) {
this.removeInput("AT", !0);
this.removeInput("ORDINAL", !0);
a && (this.appendValueInput("AT").setCheck("Number"), Blockly.Msg.ORDINAL_NUMBER_SUFFIX && this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX));
Blockly.Msg.TEXT_CHARAT_TAIL &&
(this.removeInput("TAIL", !0), this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_CHARAT_TAIL));
this.isAt_ = a
}
};
Blockly.Constants.Text.TEXT_CHARAT_EXTENSION = function () {
this.getField("WHERE").setValidator(function (a) {
var b = "FROM_START" == a || "FROM_END" == a;
if (b != this.isAt_) {
var d = this.sourceBlock_;
d.updateAt_(b);
d.setFieldValue(a, "WHERE");
return null
}
});
this.updateAt_(!0);
var a = this;
this.setTooltip(function () {
var b = a.getFieldValue("WHERE"), c = Blockly.Msg.TEXT_CHARAT_TOOLTIP;
("FROM_START" == b || "FROM_END" == b) && (b = "FROM_START" == b ? Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP : Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP) &&
(c += " " + b.replace("%1", a.workspace.options.oneBasedIndex ? "#1" : "#0"));
return c
})
};
Blockly.Extensions.register("text_indexOf_tooltip", Blockly.Constants.Text.TEXT_INDEXOF_TOOLTIP_EXTENSION);
Blockly.Extensions.register("text_quotes", Blockly.Constants.Text.TEXT_QUOTES_EXTENSION);
Blockly.Extensions.register("text_append_tooltip", Blockly.Constants.Text.TEXT_APPEND_TOOLTIP_EXTENSION);
Blockly.Extensions.registerMutator("text_join_mutator", Blockly.Constants.Text.TEXT_JOIN_MUTATOR_MIXIN, Blockly.Constants.Text.TEXT_JOIN_EXTENSION);
Blockly.Extensions.registerMutator("text_charAt_mutator", Blockly.Constants.Text.TEXT_CHARAT_MUTATOR_MIXIN, Blockly.Constants.Text.TEXT_CHARAT_EXTENSION);
Blockly.Blocks.variables = {};
Blockly.Constants.Variables = {};
Blockly.Constants.Variables.HUE = 330;
Blockly.Blocks.variables.HUE = Blockly.Constants.Variables.HUE;
Blockly.defineBlocksWithJsonArray([{
type: "variables_get",
message0: "%1",
args0: [{type: "field_variable", name: "VAR", variable: "%{BKY_VARIABLES_DEFAULT_NAME}"}],
output: null,
colour: "%{BKY_VARIABLES_HUE}",
helpUrl: "%{BKY_VARIABLES_GET_HELPURL}",
tooltip: "%{BKY_VARIABLES_GET_TOOLTIP}",
extensions: ["contextMenu_variableSetterGetter"]
}, {
type: "variables_set",
message0: "%{BKY_VARIABLES_SET}",
args0: [{type: "field_variable", name: "VAR", variable: "%{BKY_VARIABLES_DEFAULT_NAME}"}, {
type: "input_value",
name: "VALUE"
}],
previousStatement: null,
nextStatement: null,
colour: "%{BKY_VARIABLES_HUE}",
tooltip: "%{BKY_VARIABLES_SET_TOOLTIP}",
helpUrl: "%{BKY_VARIABLES_SET_HELPURL}",
extensions: ["contextMenu_variableSetterGetter"]
}]);
Blockly.Constants.Variables.CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN = {
customContextMenu: function (a) {
if ("variables_get" == this.type) var b = "variables_set",
c = Blockly.Msg.VARIABLES_GET_CREATE_SET; else b = "variables_get", c = Blockly.Msg.VARIABLES_SET_CREATE_GET;
var d = {enabled: 0 < this.workspace.remainingCapacity()}, e = this.getFieldValue("VAR");
d.text = c.replace("%1", e);
c = goog.dom.createDom("field", null, e);
c.setAttribute("name", "VAR");
c = goog.dom.createDom("block", null, c);
c.setAttribute("type", b);
d.callback =
Blockly.ContextMenu.callbackFactory(this, c);
a.push(d)
}
};
Blockly.Extensions.registerMixin("contextMenu_variableSetterGetter", Blockly.Constants.Variables.CUSTOM_CONTEXT_MENU_VARIABLE_GETTER_SETTER_MIXIN);