בלוקים מוגדרים מראש

אפשר להגדיר מראש את המצב של הבלוקים בארגז הכלים. לדוגמה, אפשר להגדיר שדה לערך ברירת מחדל או לחבר שני בלוקים. אפשר גם ליצור חסימות צל, שמשמשות כברירות מחדל לחסימות של חשבונות צאצא.

דוגמאות

הנה כמה דוגמאות לבלוקים מוגדרים מראש.

חסימה באמצעות ערך מוגדר מראש בשדה

בדוגמה הבאה מוצג math_numberבלוק שבו השדה מציג את המספר 42 במקום ברירת המחדל 0:

בלוק מספרים שהערך שלו מוגדר מראש ל-42.

וכאן יש ארגז כלים שמגדיר את השדה הזה:

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>

בלוקים עם קישור מקדים

בדוגמה הבאה יש בלוק controls_for עם שלושה בלוקים math_number שמחוברים אליו:

בלוק &#39;ספירה עם i מהערך עד הערך לפי הערך&#39;. The three value inputs
are connected to number blocks with the values 1, 10, and
1.

וכאן יש ארגז כלים שמבצע חיבור מראש של הבלוקים האלה:

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>

בלוקים מושבתים

אי אפשר לגרור בלוקים מושבתים מארגז הכלים. אפשר להשבית כל בלוק בנפרד באמצעות המאפיין האופציונלי 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>

אפשר גם להשבית או להפעיל חסימה באופן פרוגרמטי באמצעות setDisabledReason.

הגדרת החסימות

אפשר להגדיר בלוק בארגז כלים בכל דרך שבה אפשר להגדיר אותו במרחב עבודה. לדוגמה, אפשר להגדיר ערכים לשדות, לחבר בלוקים לכניסות של ערכים או של הצהרות, להוסיף הערות ולכווץ או להשבית בלוקים. הדבר אפשרי כי ארגזי הכלים משתמשים באותו קוד כדי להגדיר בלוקים שסביבות העבודה משתמשות בהם כדי לבצע סריאליזציה שלהם.

בנוסף, קל ליצור הגדרת חסימה. פשוט טוענים את הבלוק לסביבת עבודה, מגדירים אותו לפי הצורך ומבצעים סריאליזציה שלו על ידי הרצת הקוד הבא במסוף.

JSON

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

XML

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

לאחר מכן, אפשר להעתיק את קוד ההגדרה ולהדביק אותו בארגז הכלים. חשוב להסיר את המאפיינים x, y ו-id, שהכלי מתעלם מהם.

שדות משתנים

יכול להיות שיהיה צורך לציין שדות משתנים בצורה שונה כשהם נמצאים בארגז כלים לעומת כשהם עוברים סריאליזציה.

בפרט, כששדות של משתנים עוברים סדרת נתונים ל-JSON, הם מכילים רק את המזהה של המשתנה שהם מייצגים, כי השם והסוג של המשתנה עוברים סדרת נתונים בנפרד. עם זאת, ארגזי הכלים לא מכילים את המידע הזה, ולכן צריך לכלול אותו ישירות בשדה המשתנה.

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

בלוקים של צללים

בלוקים של צל הם בלוקים של placeholder שמבצעים כמה פונקציות:

  • הם מציינים את ערכי ברירת המחדל של בלוק האב שלהם.
  • הם מאפשרים למשתמשים להקליד ערכים ישירות בלי צורך לאחזר מספר או בלוק מחרוזת.
  • בניגוד לחסימה רגילה, אם המשתמש משחרר בלוק מעליהם, הם מוחלפים.
  • הם מודיעים למשתמש על סוג הערך הצפוי.

כדי ליצור בלוק צל, צריך להשתמש במאפיין shadow (JSON) או בתג <shadow> (XML) במקום במאפיין block או בתג <block>. לדוגמה, הנה בלוק math_arithmetic עם שני בלוקי צל math_number שמחוברים אליו:

בלוק `math_arithmetic` עם שני ערכי קלט שמופרדים על ידי תפריט נפתח של אופרטור, שבו נבחר אופרטור החיבור. כל ערך שמוזן מכיל בלוק מספרים מוצלל, שמוצג באפור כדי להראות שאפשר להחליף אותו בבלוק אחר.

והנה ארגז כלים שכולל את בלוקי הצל האלה:

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>