प्रीसेट ब्लॉक

टूलबॉक्स में ब्लॉक की स्थिति को कॉन्फ़िगर (पहले से तय) किया जा सकता है. उदाहरण के लिए, किसी फ़ील्ड को डिफ़ॉल्ट वैल्यू पर सेट किया जा सकता है या दो ब्लॉक को आपस में जोड़ा जा सकता है. शैडो ब्लॉक भी बनाए जा सकते हैं. ये चाइल्ड ब्लॉक के लिए डिफ़ॉल्ट तौर पर काम करते हैं.

उदाहरण

यहां प्रीसेट ब्लॉक के कुछ उदाहरण दिए गए हैं.

पहले से सेट की गई फ़ील्ड वैल्यू के साथ ब्लॉक करना

यहां एक math_number ब्लॉक दिया गया है, जिसके फ़ील्ड में डिफ़ॉल्ट तौर पर दिखने वाले 0 के बजाय 42 दिख रहा है:

यहां इस फ़ील्ड को सेट करने वाला टूलबॉक्स दिया गया है:

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>

पहले से कनेक्ट किए गए ब्लॉक

यहां एक controls_for ब्लॉक दिया गया है, जिसमें तीन math_number ब्लॉक कनेक्ट किए गए हैं:

यहां एक टूलबॉक्स दिया गया है, जो इन ब्लॉक को पहले से कनेक्ट करता है:

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>

बंद किए गए ब्लॉक

बंद किए गए ब्लॉक को टूलबॉक्स से खींचकर नहीं लाया जा सकता. 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>

setEnabled का इस्तेमाल करके, प्रोग्राम के ज़रिए भी ब्लॉक को बंद या चालू किया जा सकता है.

ब्लॉक कॉन्फ़िगर करना

टूलबॉक्स में किसी ब्लॉक को उसी तरह कॉन्फ़िगर किया जा सकता है जिस तरह वर्कस्पेस में किया जा सकता है. उदाहरण के लिए, फ़ील्ड वैल्यू सेट की जा सकती हैं, वैल्यू या स्टेटमेंट इनपुट से ब्लॉक कनेक्ट किए जा सकते हैं, टिप्पणियां जोड़ी जा सकती हैं, और ब्लॉक को छोटा किया जा सकता है या बंद किया जा सकता है. ऐसा इसलिए होता है, क्योंकि टूलबॉक्स, ब्लॉक को कॉन्फ़िगर करने के लिए उसी कोड का इस्तेमाल करते हैं जिसका इस्तेमाल Workspace, उन्हें सीरियलाइज़ करने के लिए करता है.

इसका यह भी मतलब है कि ब्लॉक कॉन्फ़िगरेशन बनाना आसान है. अपने ब्लॉक को वर्कस्पेस में लोड करें और अपनी पसंद के मुताबिक कॉन्फ़िगर करें. इसके बाद, कंसोल में यह कोड चलाकर उसे सीरियलाइज़ करें.

JSONXML
console.log(Blockly.serialization.workspaces.save(Blockly.getMainWorkspace()));
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"
        }
      }
    }
  ]
}

शैडो ब्लॉक

शैडो ब्लॉक, प्लेसहोल्डर ब्लॉक होते हैं, जो कई काम करते हैं:

  • ये अपने पैरंट ब्लॉक के लिए डिफ़ॉल्ट वैल्यू दिखाते हैं.
  • इनकी मदद से, उपयोगकर्ता सीधे वैल्यू टाइप कर सकते हैं. इसके लिए, उन्हें कोई नंबर या स्ट्रिंग ब्लॉक फ़ेच करने की ज़रूरत नहीं होती.
  • सामान्य ब्लॉक के उलट, अगर उपयोगकर्ता इनके ऊपर कोई ब्लॉक छोड़ता है, तो ये बदल जाते हैं.
  • इससे उपयोगकर्ता को यह जानकारी मिलती है कि वैल्यू किस तरह की होनी चाहिए.

शैडो ब्लॉक बनाने के लिए, block प्रॉपर्टी या <block> टैग के बजाय, shadow प्रॉपर्टी (JSON) या <shadow> टैग (एक्सएमएल) का इस्तेमाल करें. उदाहरण के लिए, यहां एक math_arithmetic ब्लॉक दिया गया है, जिसमें दो math_number शैडो ब्लॉक जुड़े हुए हैं:

यहां एक टूलबॉक्स दिया गया है, जिसमें इन शैडो ब्लॉक का इस्तेमाल किया गया है:

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>