Blockly bir dizi standart blok tanımlasa da çoğu uygulamanın alanla ilgili en az birkaç blok tanımlaması ve uygulaması gerekir.
Bloklar üç bileşenden oluşur:
- Blok tanımı nesnesi: Bir bloğun görünümünü ve davranışını tanımlar. gibi ayrıntıları göz önünde bulundurun.
- Araç kutusu referansı: Kullanıcıların araç kutusu XML'sindeki blok türüne bir referans. bunu çalışma alanına ekleyebilir.
- Oluşturucu işlevi: Bu blok için kod dizesini oluşturur. Hedef dil JavaScript olmasa bile her zaman JavaScript ile yazılır.
Blok Tanımı
Web için Blockly, blokları komut dosyası dosyaları aracılığıyla yükler. blocks/
dizini
standart bloklar için buna benzer birçok örnek içerir. Bloklarınızın mevcut kategorilere uymadığını varsayarak yeni bir JavaScript dosyası oluşturun. Bu yeni
JavaScript dosyasının <script ...>
etiketleri listesine eklenmesi gerekir
düzenleyicinin HTML dosyasına koyabilirsiniz.
Tipik bir blok tanımı şöyle görünür:
JSON
Blockly.Blocks['string_length'] = {
init: function() {
this.jsonInit({
"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');
}
};
string_length
: Bu, blokun tür adıdır. Tüm bloklar ortak olduğu için aynı ad alanına sahip değilse, kategorinizden ( bu örnektestring
) ve ardından blokunuzun işlevi (bu örnektelength
) tıklayın.init
: Bu işlev, bloğun görünümünü ve tarzını tanımlar.
Bu, aşağıdaki bloğu tanımlar:
Blok tanımlarıyla ilgili ayrıntıları Blok Tanımlama bölümünde bulabilirsiniz.
JSON Dizisi
JSON blok tanımı dizisi kullanılarak birden fazla blok tek seferde tanımlanabilir.
JSON
Blockly.defineBlocksWithJsonArray([
// Block for colour picker.
{
"type": "colour_picker",
"message0": "%1",
"args0": [
{
"type": "field_colour",
"name": "COLOUR",
"colour": "#ff0000"
}
],
"output": "Colour",
"helpUrl": "%{BKY_COLOUR_PICKER_HELPURL}",
"style": "colour_blocks",
"tooltip": "%{BKY_COLOUR_PICKER_TOOLTIP}",
"extensions": ["parent_tooltip_when_inline"]
},
// Block for random colour.
{
"type": "colour_random",
"message0": "%{BKY_COLOUR_RANDOM_TITLE}",
"output": "Colour",
"helpUrl": "%{BKY_COLOUR_RANDOM_HELPURL}",
"style": "colour_blocks",
"tooltip": "%{BKY_COLOUR_RANDOM_TOOLTIP}"
}
]);
Araç Kutusu Referansı Ekle
Tanımlandıktan sonra, bloka araç kutusuna referans vermek için tür adını kullanın:
<xml id="toolbox" style="display: none">
<category name="Text">
<block type="string_length"></block>
</category>
...
</xml>
Daha ayrıntılı bilgi için Araç Kutusu kılavuzuna bakın.
Blok kodu oluşturma aracı ekleme
Son olarak, bloğu koda dönüştürmek için bloğu bir oluşturucuyla eşleyin işlevini kullanın. Oluşturma araçları istenen çıkış diline özgüdür, ancak standart oluşturucular genellikle şu biçimi alır:
javascriptGenerator.forBlock['text_length'] = function(block, generator) {
// String or array length.
var argument0 = generator.valueToCode(block, 'VALUE', Order.FUNCTION_CALL) || '\'\'';
return [argument0 + '.length', Order.MEMBER];
};
Oluşturucu işlevi, işlenecek bloğa referans alır. Google
girişleri (yukarıdaki VALUE
girişi) kod dizeleri halinde oluşturur ve ardından
bunları daha büyük bir ifadede birleştirir.
→ Blok kodu oluşturucular hakkında daha fazla bilgi...