Puoi configurare (preimpostare) lo stato dei blocchi in una toolbox. Ad esempio, puoi impostare un campo su un valore predefinito o collegare due blocchi. Puoi anche creare blocchi ombra, che fungono da valori predefiniti per i blocchi secondari.
Esempi
Ecco alcuni esempi di blocchi preimpostati.
Blocco con un valore di campo preimpostato
Di seguito è riportato un blocco math_number il cui campo mostra il numero 42 anziché il valore predefinito 0:

Di seguito è riportata una toolbox che imposta questo campo:
JSON
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type": "math_number",
"fields": {
"NUM": 42
}
},
]
}
XML
<xml id="toolbox" style="display: none">
<block type="math_number">
<field name="NUM">42</field>
</block>
</xml>
Blocchi pre-collegati
Di seguito è riportato un blocco controls_for a cui sono collegati tre blocchi math_number:

Di seguito è riportata una toolbox che pre-collega questi blocchi:
JSON
{
"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
<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>
Blocchi disattivati
I blocchi disattivati non possono essere trascinati dalla toolbox. I blocchi possono essere disattivati singolarmente utilizzando la proprietà facoltativa disabled.

JSON
{
"kind": "flyoutToolbox",
"contents": [
{
"kind": "block",
"type":"math_number"
},
{
"kind": "block",
"type": "math_arithmetic"
},
{
"kind": "block",
"type": "math_single",
"disabled": "true"
}
]
}
XML
<xml id="toolbox" style="display: none">
<block type="math_number"></block>
<block type="math_arithmetic"></block>
<block type="math_single" disabled="true"></block>
</xml>
Puoi anche disattivare o attivare un blocco a livello di programmazione utilizzando
setDisabledReason.
Configurare i blocchi
Puoi configurare un blocco in una toolbox in qualsiasi modo tu possa configurarlo in un'area di lavoro. Ad esempio, puoi impostare i valori dei campi, collegare i blocchi agli input di valore o istruzione, aggiungere commenti e comprimere o disattivare i blocchi. Ciò è possibile perché le toolbox utilizzano lo stesso codice per configurare i blocchi che le aree di lavoro utilizzano per serializzarli.
Significa anche che è facile creare una configurazione di blocco. Carica il blocco in un'area di lavoro, configurarlo come preferisci e serializzalo eseguendo il seguente codice nella console.
JSON
console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));
XML
console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));
Puoi quindi copiare il codice di configurazione e incollarlo nella toolbox. Assicurati di rimuovere le proprietà x, y e id, che vengono ignorate dalla toolbox.
Campi variabili
I campi variabili potrebbero dover essere specificati in modo diverso quando si trovano in una toolbox rispetto a quando vengono serializzati.
In particolare, quando i campi variabili vengono serializzati normalmente in JSON, contengono solo l'ID della variabile che rappresentano, perché il nome e il tipo della variabile vengono serializzati separatamente. Tuttavia, le toolbox non contengono queste informazioni, quindi devono essere incluse direttamente nel campo variabile.
{
"kind": "flyoutToolbox",
"content": [
{
"kind": "block",
"type": "controls_for",
"fields": {
"VAR": {
"name": "index",
"type": "Number"
}
}
}
]
}
Blocchi ombra
I blocchi ombra sono blocchi segnaposto che svolgono diverse funzioni:
- Indicano i valori predefiniti per il blocco principale.
- Consentono agli utenti di digitare i valori direttamente senza dover recuperare un blocco numerico o di stringa.
- A differenza di un blocco normale, vengono sostituiti se l'utente rilascia un blocco sopra di essi.
- Informano l'utente sul tipo di valore previsto.
Per creare un blocco ombra, utilizza la proprietà shadow (JSON) o il tag <shadow>
(XML) anziché la proprietà block o il tag <block>. Ad esempio, di seguito è riportato un blocco math_arithmetic a cui sono collegati due blocchi ombra math_number:

Di seguito è riportata una toolbox che utilizza questi blocchi ombra:
JSON
{
"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
<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>