منوهای زمینه

وقتی کاربر روی یک بلوک یا فضای کاری کلیک راست می‌کند (یا فشار طولانی می‌زند)، یک منوی زمینه با اقدامات اضافی نشان داده می‌شود. می توانید این منوی زمینه را برای نمایش گزینه های اضافی یا حذف گزینه های پیش فرض پیکربندی کنید. این راهنما در مورد افزودن یک گزینه سفارشی به همه بلوک ها یا همه فضاهای کاری است. اگر می‌خواهید منوی زمینه را فقط برای یک نوع بلوک تغییر دهید، به اطلاعات صفحه بلوک‌های سفارشی مراجعه کنید.

API منوی زمینه

کلاس ContextMenuRegistry شامل متدهایی برای ثبت نام، لغو ثبت و دریافت تمام گزینه های منوی زمینه است. کلاس یک تکتونه است، بنابراین متدها باید در شی Blockly.ContextMenuRegistry.registry فراخوانی شوند تا اینکه خودتان نمونه جدیدی را نمونه برداری کنید. کلاس ContextMenu هر زمان که یک منوی زمینه نمایش داده شود، متد getContextMenuItems را فراخوانی می کند. اگر بلوک یا فضای کاری دارای یک تابع customContextMenu باشد، پس از آن برای تغییر لیست گزینه ها فراخوانی می شود.

افزودن گزینه های سفارشی

هر گزینه منو در رجیستری دارای چندین ویژگی است:

  • callback : تابعی که با کلیک روی گزینه منو فراخوانی می شود.
  • scopeType : یکی از Blockly.ContextMenuRegistry.ScopeType.BLOCK یا Blockly.ContextMenuRegistry.ScopeType.WORKSPACE برای جایی که این گزینه باید نشان داده شود. اگر یک گزینه باید برای هر دو فضای کاری و بلوک ها نشان داده شود، باید یک بار برای هر scopeType ثبت شود.
  • displayText : یک رشته یا HTML یا تابعی که یکی از موارد قبلی را برمی گرداند. متن نشان داده شده در منو را تعیین می کند.
  • preconditionFn : تابعی که یکی از enabled ، disabled یا hidden برمی گرداند تا مشخص کند که آیا و چگونه گزینه منو باید ارائه شود.
  • weight : عددی که ترتیب مرتب سازی گزینه را تعیین می کند. گزینه های با وزن بالاتر بعداً در منوی زمینه ظاهر می شوند.
  • id : یک شناسه رشته منحصر به فرد برای گزینه.

هر یک از توابع callback ، displayText (اگر یک تابع) و preconditionFn با یک شی Scope فراخوانی می شوند که حاوی اطلاعاتی در مورد فضای کاری یا بلوکی است که روی آن کلیک می شود. به این ترتیب، گزینه منوی زمینه شما می تواند به ویژگی های مربوط به فضای کاری یا بلوک اشاره کند. برای مثال، گزینه منوی زمینه که به کاربر اجازه می‌دهد همه بلوک‌ها را حذف کند، می‌گوید «حذف 42 بلوک» اگر فضای کاری شامل 42 بلوک باشد. با preconditionFn ، در صورتی که برخی از ویژگی های بلوک درست باشد، یا disabled ، می توان یک گزینه منو enabled .

برای مثال‌های بیشتر، می‌توانید ثبت گزینه‌های منوی زمینه پیش‌فرض را در contextmenu_items.js ببینید.

تغییر یا حذف گزینه های پیش فرض

با استفاده از Blockly.ContextMenuRegistry.registry.unregister(id) می توانید هر گزینه را لغو ثبت کنید. شناسه‌های گزینه‌های پیش‌فرض در contextmenu_items.js هستند.

برای تغییر یک گزینه پیش فرض، getItem با شناسه فراخوانی کنید و در صورت نیاز آن را تغییر دهید.