প্রিসেট ব্লক

আপনি একটি টুলবক্সে ব্লকগুলির অবস্থা কনফিগার (প্রিসেট) করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ফিল্ডকে ডিফল্ট মানে সেট করতে পারেন অথবা দুটি ব্লক একসাথে সংযুক্ত করতে পারেন। এছাড়াও আপনি শ্যাডো ব্লক তৈরি করতে পারেন, যা চাইল্ড ব্লকগুলির জন্য ডিফল্ট হিসেবে কাজ করে।

উদাহরণ

এখানে কিছু প্রিসেট ব্লকের উদাহরণ দেওয়া হলো।

পূর্বনির্ধারিত ফিল্ড মান সহ ব্লক

এখানে একটি math_number ব্লক রয়েছে যার ফিল্ডটি ডিফল্ট মান ০-এর পরিবর্তে ৪২ সংখ্যাটি প্রদর্শন করে:

একটি সংখ্যা ব্লক যার মান ৪২-এ পূর্বনির্ধারিত।

এবং এখানে একটি টুলবক্স রয়েছে যা এই ক্ষেত্রটি নির্ধারণ করে:

JSON

{
 "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 ব্লক সংযুক্ত রয়েছে:

একটি "i-এর মান থেকে মান অনুযায়ী গণনা" ব্লক। তিনটি মান ইনপুট 1, 10, এবং 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 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 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()));

এক্সএমএল

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> ট্যাগ (XML) ব্যবহার করুন। উদাহরণস্বরূপ, এখানে একটি 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 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>