پلاگین هایی که کتابخانه هایی از تعاریف بلوک را ارائه می دهند، یک راه عالی برای به اشتراک گذاشتن بلوک های قابل استفاده مجدد شما با انجمن Blockly هستند. برای اینکه کتابخانه بلوک شما تا حد امکان همه کاره و مفید باشد، این دستورالعمل ها را تهیه کرده ایم.
رهنمودها
- نصب همه بلوکهای خود را برای کاربران آسان کنید و این امکان را برای کاربران فراهم کنید که فقط بلوکها یا قطعاتی از بلوکهایی را که انتخاب میکنند نصب کنند.
- نصب همه چیز را آسان کنید: می توانید این کار را با ارائه تابعی انجام دهید که هر قطعه ای را که تعریف یک بلوک نیاز دارد نصب می کند (مانند جهش دهنده ها، افزونه ها، میکسین ها، فیلدها و غیره). همچنین می توانید عملکردی را ارائه دهید که تمام بلوک های ارائه شده توسط افزونه شما را به یکباره نصب می کند.
- امکان انتخاب بخشهای خاص را فراهم کنید: شما باید تمام قطعات یک تعریف بلوک را بهطور جداگانه صادر کنید، بهطوریکه این امکان برای کاربر وجود دارد که فقط قطعات مورد نیاز خود را وارد کند تا بلاک سفارشی مشابه خود را ایجاد کند.
- از استفاده از عوارض جانبی در افزونه خودداری کنید.
- بلوکها، فیلدها، برنامههای افزودنی و سایر قطعات نباید به عنوان یک عارضه جانبی بارگذاری افزونه شما نصب شوند. کاربران باید کنترل داشته باشند که کدام چیزها و چه زمانی نصب می شوند. این به کاربران اجازه می دهد تا قطعات مورد نیاز خود را بدون نگرانی از نصب نشدن قطعات وارد کنند.
به جای نمونه سازی مستقیم فیلدهای جدید از رجیستری فیلد JSON استفاده کنید.
توصیه نمی شود - نمونه سازی مستقیم یک فیلد جدید:
const myCustomBlock = { init: function() { this.appendDummyInput() .appendField(new Blockly.FieldNumber(123), 'NAME'); } }
توصیه می شود - رجیستری فیلد JSON:
export const myCustomBlock = { init: function() { this.appendDummyInput() .appendField(Blockly.fieldRegistry.fromJson({ name: 'field_number', value: 123, }), 'NAME'); } }
استفاده از رجیستری فیلد، جایگزینی اجرای فیلد مورد استفاده در بلوک را بدون نیاز به تغییر تعریف بلوک برای کاربر آسانتر میکند.
در مورد مواردی که کاربر قبلاً نصب کرده است، فرضیات را در نظر نگیرید.
- اگر افزونه شما به یک فیلد سفارشی یا افزونه دیگری نیاز دارد، خودتان آن فیلدها را در تابع
install
ارائه شده ثبت کنید. - به زودی، Blockly ابزارهایی را ارائه می دهد که به شما امکان می دهد موارد ثبت شده قبلی را بدون خطا ثبت کنید. تا آن زمان، ممکن است بخواهید قبل از ثبت افزونه، جهشدهنده، میکسین یا فیلد، آنچه قبلاً ثبت شده است را بررسی کنید.
- در مورد هر گونه پیش نیاز یا وابستگی که توسط تعاریف پلاگین یا بلوک شما لازم است، شفاف باشید.
- اگر افزونه شما به یک فیلد سفارشی یا افزونه دیگری نیاز دارد، خودتان آن فیلدها را در تابع
ارائه توابع مولد برای هر یک از بلوک هایی که ارائه می کنید را در نظر بگیرید.
- ارائه توابع ژنراتور که خارج از جعبه کار می کنند، استفاده از بلوک های شما را بدون نیاز به درک ساختار و طراحی آنها برای کاربران آسان تر می کند. اگر آنها مجبور باشند توابع مولد خود را بنویسند، این ممکن است منجر به انجام کارهای اضافی توسط هر کاربر شود.
- جاوا اسکریپت رایج ترین زبان مورد استفاده در Blockly است، بنابراین اگر فقط یک زبان را برای ارائه انتخاب می کنید، ما جاوا اسکریپت را توصیه می کنیم، مگر اینکه بلاک های شما برای یک زبان خاص مانند اجرای کتابخانه پایتون ساخته شده باشند.
- برای زبان هایی که نمی توانید توابع مولد را برای آن ها پیاده سازی کنید، مسائل مربوط به "کمک مورد نیاز" را در نظر بگیرید و اگر کاربر آنها را ارائه کرد، درخواست های کششی را برای آنها بپذیرید.
اگر یک تابع نصب برای بلوک خود ارائه دهید، می توانید یک پارامتر
generators
اختیاری را بپذیرید. اگر کاربر نمونهای از مولد را که شما پشتیبانی میکنید ارسال کند، میتوانید به طور خودکار عملکرد تولیدکننده کد بلوک را نصب کنید و کارهای مرتبط مانند افزودن کلمات رزرو شده را انجام دهید:// Your plugin's install function export const installMyCustomBlock(generators = {}) { Blockly.defineBlocks({my_custom_block: myCustomBlock}); if (generators.javascript) { generators.javascript.forBlock['my_custom_block'] = myCustomGeneratorFunction; generators.javascript.addReservedWords('specialReservedWord'); } } // How a user may install your block import {javascriptGenerator} from 'blockly/javascript'; import {installMyCustomBlock} from 'blockly-cool-blocks-plugin'; // installs the block definition and the javascript block-code generator installMyCustomBlock({javascript: javascriptGenerator});
بازخورد
اگر سؤالی در مورد چگونگی پیروی از این دستورالعمل ها در افزونه خود دارید، در انجمن به ما اطلاع دهید! ما دوست داریم کتابخانه های بلوک شما را ببینیم و در مورد آنها بازخورد ارائه کنیم.
توجه داشته باشید که همه افزونههای شخص اول که تعریف بلوک را ارائه میکنند در حال حاضر از این دستورالعملها پیروی نمیکنند، اما افزونههای جدید این دستورالعملها را دنبال میکنند و ما قصد داریم افزونههای موجود را منتقل کنیم.