Blocs prédéfinis

Vous pouvez configurer (prédéfinir) l'état des blocs dans une boîte à outils. Par exemple, vous pouvez définir un champ sur une valeur par défaut ou connecter deux blocs. Vous pouvez également créer des blocs fantômes, qui servent de valeurs par défaut pour les blocs enfants.

Exemples

Voici quelques exemples de blocs prédéfinis.

Bloquer avec une valeur de champ prédéfinie

Voici un bloc math_number dont le champ affiche le nombre 42 au lieu de la valeur par défaut 0 :

Bloc de nombre dont la valeur est prédéfinie sur 42.

Voici une boîte à outils qui définit ce champ :

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>

Blocs préconnectés

Voici un bloc controls_for auquel sont connectés trois blocs math_number :

Bloc &quot;count with i from value to value by value&quot; (compter avec i de valeur à valeur par valeur). Les trois entrées de valeur sont connectées à des blocs numériques avec les valeurs 1, 10 et 1.

Voici une boîte à outils qui préconnecte ces blocs :

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>

Blocs désactivés

Les blocs désactivés ne peuvent pas être déplacés depuis la boîte à outils. Les blocs peuvent être désactivés individuellement à l'aide de la propriété facultative disabled.

Menu déroulant avec trois blocs. Le troisième bloc est désactivé et grisé.

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>

Vous pouvez également désactiver ou activer un bloc de manière programmatique à l'aide de setDisabledReason.

Configurer vos blocages

Vous pouvez configurer un bloc dans une boîte à outils de la même manière que dans un espace de travail. Par exemple, vous pouvez définir des valeurs de champ, connecter des blocs à des entrées de valeur ou d'instruction, ajouter des commentaires, et réduire ou désactiver des blocs. Cela est possible, car les boîtes à outils utilisent le même code pour configurer les blocs que les espaces de travail utilisent pour les sérialiser.

Cela signifie également qu'il est facile de créer une configuration de bloc. Il vous suffit de charger votre bloc dans un espace de travail, de le configurer comme vous le souhaitez et de le sérialiser en exécutant le code suivant dans la console.

JSON

console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));

XML

console.log(Blockly.Xml.workspaceToDom(Blockly.getMainWorkspace()));

Vous pouvez ensuite copier le code de configuration et le coller dans votre boîte à outils. Veillez à supprimer les propriétés x, y et id, qui sont ignorées par la boîte à outils.

Champs de variables

Les champs de variables peuvent nécessiter une spécification différente lorsqu'ils se trouvent dans une boîte à outils par rapport à lorsqu'ils sont sérialisés.

En particulier, lorsque les champs de variables sont normalement sérialisés au format JSON, ils ne contiennent que l'ID de la variable qu'ils représentent, car le nom et le type de la variable sont sérialisés séparément. Toutefois, les boîtes à outils ne contiennent pas ces informations. Vous devez donc les inclure directement dans le champ de variable.

{
  "kind": "flyoutToolbox",
  "content": [
    {
      "kind": "block",
      "type": "controls_for",
      "fields": {
        "VAR": {
          "name": "index",
          "type": "Number"
        }
      }
    }
  ]
}

Blocs d'ombre

Les blocs fantômes sont des blocs d'espace réservé qui remplissent plusieurs fonctions :

  • Elles indiquent les valeurs par défaut de leur bloc parent.
  • Ils permettent aux utilisateurs de saisir des valeurs directement sans avoir à récupérer un bloc de nombre ou de chaîne.
  • Contrairement à un bloc normal, ils sont remplacés si l'utilisateur dépose un bloc sur eux.
  • Ils informent l'utilisateur du type de valeur attendu.

Pour créer un bloc fantôme, utilisez la propriété shadow (JSON) ou la balise <shadow> (XML) au lieu de la propriété block ou de la balise <block>. Par exemple, voici un bloc math_arithmetic auquel sont connectés deux blocs fantômes math_number :

Bloc `math_arithmetic` avec deux entrées de valeur séparées par un menu déroulant d&#39;opérateurs sur lequel l&#39;opérateur plus est sélectionné. Chaque valeur saisie contient un bloc de nombre fantôme, qui est grisé pour indiquer qu&#39;un autre bloc peut le remplacer.

Voici une boîte à outils qui utilise ces blocs fantômes :

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>