نظرة عامة على الوحدات الأساسية المخصّصة

تأتي Blockly مع عدد كبير من الكتل المحدّدة مسبقًا، بدءًا من الدوالّ الحسابية ووصولاً إلى البنى المتكرّرة. ومع ذلك، تحتاج معظم التطبيقات إلى تحديد وحدات مخصّصة ونفذتها لنطاقها. على سبيل المثال، قد يحتاج تطبيق الرسم إلى وحدات لرسم الخطوط والأوساط، وقد يحتاج تطبيق الروبوتات إلى وحدات لنقل ذراع وتحريك مخلب.

لتحديد نوع جديد من الوحدات واستخدامه، تحتاج إلى ثلاثة عناصر:

  • تعريف العنصر: يحدّد مظهر نوع العنصر وأسلوبه، بالإضافة إلى سلوكيات معيّنة.
  • أداة إنشاء الرموز البرمجية للمجموعات: تُنشئ سلسلة الرموز البرمجية للمجموعات من هذا النوع. ويتم كتابتها دائمًا بلغة JavaScript، حتى إذا لم تكن اللغة المستهدفة هي JavaScript.
  • مرجع صندوق الأدوات: يشير إلى نوع الكتلة في صندوق الأدوات، كي تتمكّن المستخدمون من إضافته إلى مساحة العمل.

تعريف الحظر

يحدِّد تعريف الكتلة مظهر الكتلة وأسلوبها، مثل النص والحقول وعمليات الربط واللون. ويمكن أن يحدِّد أيضًا السلوك الخاص بالوحدة، مثل معالِج الأحداث الخاص بالوحدة. على سبيل المثال، هذا القسم:

عنصر "طول_السلسلة"

يمكن تعريفها في تنسيق JSON أو JavaScript على النحو التالي:

JSON

Blockly.common.defineBlocksWithJsonArray([{
  "type": "string_length",
  "message0": 'length of %1',
  "args0": [
    {
      "type": "input_value",
      "name": "VALUE",
      "check": "String"
    }
  ],
  "output": "Number",
  "colour": 160,
  "tooltip": "Returns number of letters in the provided text.",
  "helpUrl": "http://www.w3schools.com/jsref/jsref_length_string.asp"
}]);

JavaScript

Blockly.Blocks['string_length'] = {
   init: function() {
     this.appendValueInput('VALUE')
         .setCheck('String')
         .appendField('length of');
     this.setOutput(true, 'Number');
     this.setColour(160);
     this.setTooltip('Returns number of letters in the provided text.');
     this.setHelpUrl('http://www.w3schools.com/jsref/jsref_length_string.asp');
   }
};

لمزيد من المعلومات عن تعريفات الوحدات وآلية عملها، اطّلِع على ما هو تعريف الوحدة؟.

أدوات إنشاء الرموز البرمجية

لتحويل مجموعة إلى رمز، تحتاج إلى وظائف إنشاء منفصلة لكل لغة تريد إنشاءها. على سبيل المثال، في ما يلي أداة إنشاء تُنشئ JavaScript:

javascriptGenerator.forBlock['string_length'] = function(block, generator) {
   // String or array length.
   var argument0 = generator.valueToCode(block, 'VALUE', Order.FUNCTION_CALL) || '\'\'';
   return [argument0 + '.length', Order.MEMBER];
};

تقبل دالة المولد الكتلة التي تتم معالجتها ومولد لغة. وتُنشئ هذه الميزة رمزًا لأيّ وحدات مرتبطة بمدخلات (مثل إدخال VALUE في المثال) وأيّ حقول، ثمّ تُجمِّع السلاسل الناتجة في تعبير أكبر.

لمزيد من المعلومات، يُرجى الاطّلاع على أداة توليد رمز المنع.

مرجع "مربّع الأدوات"

بعد تحديد نوع الكتلة، استخدِم اسم النوع للإشارة إليه في صندوق أدوات:

JSON

var toolbox = {
     "kind": "categoryToolbox",
     "name": "Text"
     "contents": [
       {
         "kind": "block",
         "type": "string_length"
       },
     ]
   };

XML

<xml id="toolbox" style="display: none"> WHY IS THERE DISPLAY: NONE HERE?
   <category name="Text">
     <block type="string_length"></block>
   </category>
   ...
</xml>

لمزيد من المعلومات، اطّلِع على تحديد صندوق أدوات منبثق أو تحديد صندوق أدوات فئي.