Blockly Developer Tools memungkinkan Anda membuat blok kustom menggunakan blok. Alat ini mendukung kolom yang dipublikasikan sebagai plugin selain kolom yang disertakan dengan Core Blockly. Jika telah membuat kolom kustom, Anda dapat menambahkan dukungannya ke Block Factory dengan mengikuti panduan ini. Kolom kustom harus dipublikasikan di npm sebelum Anda dapat menambahkan dukungan untuknya. Anda juga harus berkomitmen untuk memperbarui kolom agar tetap dapat mengikuti perubahan di Blockly. Jika tidak, kami mungkin harus menghapusnya dari Block Factory pada masa mendatang.
Pengembangan di Block Factory
Kode sumber untuk Block Factory terletak di repositori blockly-samples
dalam direktori
examples/developer-tools
.
Untuk mengirimkan perubahan ke Developer Tools dalam contoh blockly, Anda harus
mengikuti langkah-langkah umum untuk melakukan pengembangan dalam
contoh blockly. Namun, tidak seperti bekerja dengan plugin, Anda harus menjalankan npm
install
dari direktori examples/developer-tools
secara langsung, bukan di level root blockly-samples.
Menginstal plugin
Agar Block Factory menampilkan kolom kustom dalam pratinjau, kolom kustom tersebut harus diinstal. Tambahkan kolom Anda sebagai dependensi npm dari alat developer. Kemudian, daftarkan atau lakukan penyiapan lain yang diperlukan di
developer-tools/src/blocks/index.ts
.
Membuat blok untuk kolom
Karena Block Factory menggunakan blok untuk membuat blok kustom, Anda memerlukan blok yang mewakili kolom kustom.
Membuat definisi blok
Anda harus mendesain blok untuk kolom Anda; jika ingin mendapatkan meta, Anda bahkan
dapat mendesainnya menggunakan Block Factory. Blok tersebut harus memungkinkan pengguna mengonfigurasi penyiapan yang diperlukan oleh kolom Anda, seperti nilai default dan nama. Tambahkan definisi blok ini ke developer-tools/src/blocks/fields.ts
, lalu impor di developer-tools/src/blocks/index.ts
.
Tambahkan blok ke toolbox
Selanjutnya, Anda perlu menambahkan blok ini ke definisi toolbox agar dapat diakses oleh pengguna. Definisi toolbox terletak di
developer-tools/src/toolbox.ts
. Blok Anda harus ditambahkan
ke kategori "Kolom".
Generator Kode
Block Factory bekerja menggunakan sistem Generator Kode yang sudah Anda pahami dari Blockly. Setiap blok memiliki generator kode blok untuk setiap jenis output yang dihasilkan oleh Block Factory, dan blok induk menyusun kode untuk blok turunan menjadi output yang benar. Untuk menambahkan dukungan kolom kustom, Anda harus menambahkan fungsi generator kode blok untuk setiap class Generator Kode.
Buat file untuk blok kolom Anda di direktori output-generators/fields
. Anda akan menambahkan generator kode blok untuk setiap Generator berikut ke file ini. Impor
file ini dalam file blocks/index.ts
sehingga
fungsi generator kode blok dimuat ke dalam aplikasi.
Definisi JavaScript
javascriptDefinitionGenerator
membuat kode yang akan disertakan dalam definisi JavaScript untuk blok yang menyertakan kolom kustom Anda. Biasanya,
ini berarti generator kode blok harus menampilkan baris kode yang terlihat seperti
.appendField(new YourFieldConstructor(arg1, arg2), 'userSpecifiedName')
. Perhatikan
bahwa baris kode ini tidak menyertakan titik koma, karena input yang
berisi beberapa kolom akan memiliki beberapa panggilan ke appendField
yang dirantai
bersama. Argumen dalam konstruktor diambil dari nilai yang ditetapkan
pengguna pada blok kolom. Berikut adalah contoh generator kode blok untuk
FieldAngle
:
javascriptDefinitionGenerator.forBlock['field_angle'] = function (
block: Blockly.Block,
generator: JavascriptDefinitionGenerator,
): string {
const name = generator.quote_(block.getFieldValue('FIELDNAME'));
const angle = block.getFieldValue('ANGLE');
return `.appendField(new FieldAngle(${angle}), ${name})`;
};
Blok sudut yang ditarik pengguna dari kategori "Kolom" pada kotak alat Block Factory memiliki dua kolom:
FIELDNAME
: pengguna dapat menetapkan nama kolom pada elemen penyusun kustomnyaANGLE
: pengguna dapat menetapkan nilai sudut default
Pada generator kode blok ini, kita mendapatkan nilai sudut default dan meneruskannya sebagai satu-satunya argumen ke konstruktor FieldAngle
. Nama kolom selalu diteruskan
sebagai argumen kedua ke appendField
.
Definisi JSON
jsonDefinitionGenerator
serupa, tetapi menghasilkan bagian dari definisi blok JSON yang sesuai dengan kolom Anda. Biasanya, kode ini berupa objek
JSON yang mencakup:
type
: sesuai dengan nama kolom Anda di registry lapangan Blocklyname
: pengguna dapat menetapkan nama kolom pada elemen penyusun kustomnya- properti kustom lainnya yang diperlukan oleh metode inisialisasi json kolom Anda.
Berikut contoh dari FieldAngle
lagi:
jsonDefinitionGenerator.forBlock['field_angle'] = function (
block: Blockly.Block,
generator: JsonDefinitionGenerator,
): string {
const code = {
type: 'field_angle',
name: block.getFieldValue('FIELDNAME'),
angle: block.getFieldValue('ANGLE'),
};
return JSON.stringify(code);
};
Header kode
Generator Header Kode membuat output Header Kode yang ditampilkan di Block
Factory. Output ini dapat dialihkan antara impor esmodule dan tag skrip,
bergantung pada cara pengguna ingin memuat kode, sehingga sebenarnya ada dua
instance generator yang berbeda: satu untuk setiap kasus. Anda perlu menambahkan generator
kode blok untuk setiap kode tersebut. Berikut adalah contoh untuk FieldAngle
:
importHeaderGenerator.forBlock['field_angle'] = function (
block: Blockly.Block,
generator: CodeHeaderGenerator,
): string {
generator.addHeaderLine(
`import {registerFieldAngle, FieldAngle} from '@blockly/field-angle';`,
);
generator.addHeaderLine(`registerFieldAngle();`);
return '';
};
scriptHeaderGenerator.forBlock['field_angle'] = function (
block: Blockly.Block,
generator: CodeHeaderGenerator,
): string {
generator.addHeaderLine(
`<script src="https://unpkg.com/@blockly/field-angle"></script>`,
);
generator.addHeaderLine(`registerFieldAngle();`);
return '';
};
Generator ini memiliki metode yang disebut addHeaderLine
yang memungkinkan Anda menentukan
baris kode yang harus dipanggil sebelum kolom Anda digunakan dalam kode. Umumnya, hal ini mencakup pekerjaan seperti mengimpor kolom atau memuatnya melalui tag skrip, dan mungkin memanggil fungsi yang akan mendaftarkan kolom tersebut ke registry kolom Blockly.
Untuk dua generator kode blok ini, semua kode harus ditambahkan melalui panggilan
ke addHeaderLine
. Fungsi ini akan memastikan setiap baris header hanya ditampilkan satu kali, meskipun blok kolom kustom Anda digunakan beberapa kali dalam satu blok kustom. Generator kode blok harus menampilkan string kosong.
Potongan generator
Terakhir, kita memiliki generator yang membuat stub generator untuk kolom tersebut. Dalam generator kode blok ini, Anda akan menulis kode yang menghasilkan kode yang membantu pengguna menulis kode yang menghasilkan kode. Apakah Anda merasa bingung? Ini lebih mudah dari kedengarannya!
Potongan generator untuk blok kustom mencakup variabel siap pakai yang mewakili setiap kolom di blok. Lalu, ada TODO
yang harus diselesaikan pengguna untuk menyusun semua variabel ini ke dalam string kode akhir yang akan ditampilkan oleh blok kustom mereka. Artinya, biasanya semua yang perlu dilakukan generator kode blok Anda adalah menampilkan baris yang membuat variabel kustom ini. Misalnya, pengguna membuat blok kustom yang akan menambahkan sinar matahari ke kanvasnya. Dia menambahkan kolom sudut ke blok dan menamainya "SUN_DIRECTION"
. Stub generator
untuk blok ini akan menyertakan baris const angle_sun_direction =
block.getFieldValue("SUN_DIRECTION");
. Itulah baris kode generator kode blok kita untuk kolom sudut yang harus ditampilkan:
generatorStubGenerator.forBlock['field_angle'] = function (
block: Blockly.Block,
generator: GeneratorStubGenerator,
): string {
const name = block.getFieldValue('FIELDNAME');
const fieldVar = generator.createVariableName('angle', name);
return `const ${fieldVar} = block.getFieldValue(${generator.quote_(
name,
)});\n`;
};
Untuk mendapatkan nama variabel yang distandardisasi, Anda dapat memanggil generator.createVariableName
dan meneruskan jenis kolom Anda (seperti angle
, number
, dll.) beserta nama pengguna untuk kolomnya.
Melakukan pengujian
Setelah menulis semua bagian ini, Anda akan dapat memulai Block Factory dengan menjalankan npm start
di direktori blockly-samples/examples/developer-tools
. Anda harus dapat menarik blok dari kategori kolom, menambahkannya
ke input pada blok, dan melihat perubahan outputnya. Pastikan pratinjau
blok sudah benar, dan kode untuk setiap bagian output
sudah benar.