Możesz skonfigurować (ustawić wstępnie) stan bloków w skrzynce narzędzi. Możesz na przykład ustawić pole na wartość domyślną lub połączyć 2 bloki. Możesz też tworzyć blokady cienia, które służą jako domyślne dla blokad podrzędnych.
Przykłady
Oto kilka przykładów gotowych bloków.
Blokowanie za pomocą wstępnie ustawionej wartości pola
Oto blok math_number
, w którym zamiast domyślnej wartości 0 w polu wyświetla się liczba 42:
Oto zestaw narzędzi, który pozwala ustawić to pole:
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "math_number",
"fields": {
"NUM": 42
}
},
]
}
<xml id="toolbox" style="display: none">
<block type="math_number">
<field name="NUM">42</field>
</block>
</xml>
Bloki połączone wstępnie
Oto blok controls_for
, z którym połączone są 3 bloki math_number
:
Oto narzędzie, które łączy te bloki:
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "controls_for",
"inputs": {
"FROM": {
"block": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
},
"TO": {
"block": {
"type": "math_number",
"fields": {
"NUM": 10
}
}
},
"BY": {
"block": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
},
}
},
]
}
<xml id="toolbox" style="display: none">
<block type="controls_for">
<value name="FROM">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
<value name="TO">
<block type="math_number">
<field name="NUM">10</field>
</block>
</value>
<value name="BY">
<block type="math_number">
<field name="NUM">1</field>
</block>
</value>
</block>
</xml>
Wyłączone bloki
Bloków wyłączonych nie można przeciągać z skrzynki narzędzi. Bloki można wyłączyć pojedynczo za pomocą opcjonalnej właściwości disabled
.
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type":"math_number"
},
{
"kind": "block",
"type": "math_arithmetic"
},
{
"kind": "block",
"type": "math_single",
"disabled": "true"
}
]
}
<xml id="toolbox" style="display: none">
<block type="math_number"></block>
<block type="math_arithmetic"></block>
<block type="math_single" disabled="true"></block>
</xml>
Możesz też wyłączyć lub włączyć blokadę za pomocą funkcji setEnabled
.
Konfigurowanie bloków
Blok w skrzynce narzędzi możesz skonfigurować w dowolny sposób, w jaki możesz to zrobić na pulpicie. Możesz na przykład ustawiać wartości pól, łączyć bloki z wartościami lub wejściami instrukcji, dodawać komentarze oraz składać lub wyłączać bloki. Jest to możliwe, ponieważ toolboxy używają tego samego kodu do konfigurowania bloków, którego workspaces używają do ich serializacji.
Oznacza to też, że konfigurację bloku można łatwo utworzyć. Wystarczy załadować blok na platformie Workspace, skonfigurować go zgodnie z potrzebami i zserializować, uruchamiając w konsoli podany niżej kod.
console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));
console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));
Następnie możesz skopiować kod konfiguracji i wklejć go w skrzynce narzędzi. Pamiętaj, aby usunąć właściwości x
, y
i id
, które są ignorowane przez narzędzia.
Pola zmienne
Pola zmienne mogą wymagać innego określenia, gdy znajdują się w skrzynce narzędzi, a gdy są serializowane.
W szczególności, gdy pola zmiennych są normalnie serializowane do formatu JSON, zawierają tylko identyfikator reprezentowanej przez nie zmiennej, ponieważ nazwa i typ zmiennej są serializowane osobno. Jednak toolboxy nie zawierają tych informacji, więc należy je podać bezpośrednio w polu zmiennej.
{
"kind": "flyoutToolbox",
"content": [
{
"kind": "block",
"type": "controls_for",
"fields": {
"VAR": {
"name": "index",
"type": "Number"
}
}
}
]
}
Bloki cienia
Bloki cienia to bloki zastępcze, które pełnią kilka funkcji:
- Wskazują one domyślne wartości dla bloku nadrzędnego.
- Umożliwiają one użytkownikom wpisywanie wartości bezpośrednio bez konieczności pobierania bloku liczb lub ciągu znaków.
- W przeciwieństwie do zwykłych bloków, są one zastępowane, gdy użytkownik upuści blok na ich powierzchni.
- Informują użytkownika o typie oczekiwanej wartości.
Aby utworzyć blok cienia, użyj właściwości shadow
(JSON) lub tagu <shadow>
(XML) zamiast właściwości block
lub tagu <block>
. Oto na przykład blok math_arithmetic
, do którego podłączone są 2 bloki cienia math_number
:
Oto zestaw narzędzi, który wykorzystuje te bloki cienia:
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "math_arithmetic",
"fields": {
"OP": "ADD"
},
"inputs": {
"A": {
"shadow": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
},
"B": {
"shadow": {
"type": "math_number",
"fields": {
"NUM": 1
}
}
}
}
},
]
}
<xml id="toolbox" style="display: none">
<block type="math_arithmetic">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
<value name="B">
<shadow type="math_number">
<field name="NUM">1</field>
</shadow>
</value>
</block>
</xml>