Blockly mendefinisikan sejumlah blok standar, sebagian besar aplikasi perlu menetapkan dan menerapkan setidaknya beberapa blok domain yang relevan.
Blok terdiri dari tiga komponen:
- Objek definisi blok: Menentukan tampilan dan perilaku blok, termasuk teks, warna, kolom, dan koneksi.
- Referensi toolbox: Referensi ke jenis blok di XML toolbox, sehingga pengguna menambahkannya ke ruang kerja.
- Fungsi generator: Menghasilkan string kode untuk blok ini. Kode ini selalu ditulis dalam JavaScript, meskipun bahasa targetnya bukan JavaScript.
Definisi Blokir
Blockly untuk web memuat Blocks melalui file skrip. Direktori blocks/
menyertakan beberapa contoh untuk blok standar. Dengan asumsi bahwa blok Anda tidak sesuai dengan kategori yang ada, buat file JavaScript baru. File JavaScript
baru ini perlu disertakan dalam daftar tag <script ...>
di
file HTML editor.
Definisi blok standar terlihat seperti ini:
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
: Ini adalah nama jenis blok. Karena semua blok berbagi namespace yang sama, adalah baik untuk menggunakan nama yang terdiri dari kategori Anda (di dalam hal inistring
) diikuti dengan fungsi blok Anda (dalam kasus inilength
).init
: Fungsi ini menentukan tampilan dan nuansa blok.
Ini menentukan blok berikut:
Detail definisi blok dapat ditemukan di Menentukan Blok.
Array JSON
Beberapa blok dapat ditentukan sekaligus menggunakan array definisi blok JSON.
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}"
}
]);
Menambahkan Referensi Toolbox
Setelah ditentukan, gunakan nama jenis untuk mereferensikan blok ke toolbox:
<xml id="toolbox" style="display: none">
<category name="Text">
<block type="string_length"></block>
</category>
...
</xml>
Lihat panduan Toolbox untuk mengetahui detail selengkapnya.
Menambahkan generator kode blok
Terakhir, untuk mengubah blok menjadi kode, pasangkan blok dengan generator fungsi tersebut. {i>Generator<i} khusus untuk bahasa {i> output<i} yang diinginkan, tetapi generator standar umumnya menggunakan format berikut:
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];
};
Fungsi generator mengambil referensi ke blok untuk diproses. Ini
merender input (input VALUE
, di atas) menjadi string kode, lalu
menyambungkannya ke dalam
ekspresi yang lebih besar.
→ Info selengkapnya tentang generator kode blok...