Bloki gotowe

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:

JSONXML
{
  "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:

JSONXML
{
  "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.

JSONXML
{
  "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.

JSONXML
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, yid, 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:

JSONXML
{
  "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>