Alat Developer Blockly memungkinkan Anda membuat blok kustom menggunakan blok. Selain kolom yang disertakan dengan Blockly inti, kolom ini juga memiliki dukungan untuk kolom yang dipublikasikan sebagai plugin. Jika Anda telah membuat kolom kustom, Anda dapat menambahkan dukungan untuk kolom tersebut 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 mengikuti perubahan di Blockly. Jika tidak, kami mungkin perlu menghapusnya dari Block Factory pada masa mendatang.
Pengembangan di Block Factory
Kode sumber Block Factory terletak di repositori blockly-samples
di direktori examples/developer-tools
.
Untuk mengirimkan perubahan pada Alat Developer di blockly-samples, Anda harus
mengikuti langkah-langkah umum untuk mengembangkan di
blockly-samples. Namun, tidak seperti saat bekerja dengan plugin, Anda harus menjalankan npm
install
dari direktori examples/developer-tools
secara langsung, bukan di tingkat root blockly-samples.
Menginstal plugin
Agar Pabrik Blok menampilkan kolom kustom Anda di pratinjau, kolom kustom tersebut harus diinstal. Tambahkan kolom Anda sebagai dependensi npm
developer-tools. Kemudian, daftarkan atau lakukan pekerjaan 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 merepresentasikan kolom kustom Anda.
Buat definisi blok
Anda perlu mendesain blok untuk kolom; jika ingin mendapatkan meta, Anda bahkan dapat mendesainnya menggunakan Block Factory. Blok 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
.
Menambahkan 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".
Pembuat Kode
Block Factory berfungsi dengan menggunakan sistem Pembuat Kode yang sudah Anda kenal dari Blockly. Setiap blok memiliki generator kode blok untuk setiap jenis output yang dihasilkan oleh Block Factory, dan blok induk merakit kode untuk blok turunan ke dalam output yang benar. Untuk menambahkan dukungan untuk kolom kustom, Anda harus menambahkan fungsi generator kode blok untuk setiap class Code Generator.
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 di file blocks/index.ts
agar fungsi
pembuat 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 dirangkai
bersama. Argumen dalam konstruktor diambil dari nilai yang ditetapkan pengguna di blok kolom. Berikut adalah contoh pembuat kode blok ini 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 di blok kustom merekaANGLE
: pengguna dapat menyetel nilai sudut default
Dalam 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 ini menampilkan bagian dari definisi blok JSON yang sesuai dengan kolom Anda. Biasanya, kode ini adalah objek JSON yang mencakup:
type
: sesuai dengan nama kolom Anda di pendaftaran kolom Blocklyname
: pengguna dapat menetapkan nama kolom di blok kustom mereka- properti kustom lain 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
Code Header Generator 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 masing-masingnya. Berikut 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. Biasanya,
hal ini mencakup pekerjaan seperti mengimpor kolom atau memuatnya melalui tag
skrip, dan mungkin memanggil fungsi yang akan mendaftarkan kolom dengan
pendaftaran 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
sekali, meskipun blok kolom kustom Anda digunakan beberapa kali dalam satu blok
kustom. Generator kode blok harus menampilkan string kosong.
Stub generator
Terakhir, kita memiliki generator yang membuat stub generator untuk kolom. Di generator kode blok ini, Anda akan menulis kode yang menghasilkan kode yang membantu pengguna menulis kode yang menghasilkan kode. Masih bingung? Caranya lebih mudah dari yang Anda kira.
Stub generator untuk blok kustom mencakup variabel siap pakai yang merepresentasikan setiap kolom di blok. Kemudian, ada TODO
yang harus diselesaikan pengguna untuk mengumpulkan semua variabel ini ke dalam string kode akhir yang akan ditampilkan oleh blok kustom mereka. Artinya, biasanya semua generator kode blok Anda hanya perlu menampilkan baris yang membuat variabel kustom ini. Katakan bahwa pengguna
sedang membuat blok kustom yang akan menambahkan sinar matahari ke kanvasnya. Mereka
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 yang perlu ditampilkan oleh generator kode blok untuk kolom sudut:
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 standar untuk variabel, Anda dapat memanggil
generator.createVariableName
dan meneruskan jenis kolom (seperti
angle
, number
, dll.) beserta nama kolom yang diberikan pengguna.
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 dapat menarik blok dari kategori kolom, menambahkannya ke input pada blok, dan melihat perubahan output. Periksa apakah pratinjau
blok terlihat benar, dan apakah kode untuk setiap bagian output sudah
benar.