תפריטי הקשר

כשמשתמש לוחץ לחיצה ימנית (או לוחץ לחיצה) על בלוק או על סביבת עבודה, מוצג תפריט הקשר עם פעולות נוספות. תוכל להגדיר את תפריט ההקשר הזה כדי להציג אפשרויות נוספות או להסיר את אפשרויות ברירת המחדל. המדריך הזה עוסק בהוספת אפשרות בהתאמה אישית לכל הבלוקים או לכל סביבות העבודה. אם רוצים לשנות את תפריט ההקשר רק בסוג אחד של בלוקים, אפשר לקרוא את המידע בדף custom_blocks.

ממשק API של תפריט הקשר

המחלקה ContextMenuRegistry כוללת שיטות לרישום, לביטול רישום ולקבלת כל האפשרויות של תפריט ההקשר. המחלקה היא singleton, ולכן צריך להפעיל שיטות באובייקט Blockly.ContextMenuRegistry.registry במקום ליצור מכונה חדשה בעצמכם. המחלקה ContextMenu מפעילה את השיטה getContextMenuItems בכל פעם שצריך להציג תפריט הקשר. אם לבלוק או ל-Workspace יש פונקציה customContextMenu, היא נקראת לאחר מכן כדי לשנות את רשימת האפשרויות.

הוספת אפשרויות מותאמות אישית

לכל אפשרות תפריט במרשם יש מספר מאפיינים:

  • callback: פונקציה שנקראת כשלוחצים על אפשרות התפריט.
  • scopeType: אחת מהאפשרויות Blockly.ContextMenuRegistry.ScopeType.BLOCK או Blockly.ContextMenuRegistry.ScopeType.WORKSPACE שבהן האפשרות הזו צריכה להופיע. אם אמורה להיות אפשרות להציג גם סביבת עבודה וגם בלוקים, יש לרשום אותה פעם אחת לכל scopeType.
  • displayText: מחרוזת, או HTML, או פונקציה שמחזירה אחד מהשניים. ההגדרה הזו קובעת את הטקסט שיוצג בתפריט.
  • preconditionFn: פונקציה שמחזירה אחד מהערכים enabled, disabled או hidden כדי לקבוע אם ואיך להציג את האפשרות בתפריט.
  • weight: מספר שקובע את סדר המיון של האפשרות. אפשרויות עם משקלים גבוהים יותר יופיעו מאוחר יותר בתפריט ההקשר.
  • id: מזהה מחרוזת ייחודי לאפשרות.

תתבצע קריאה לכל אחת מהפונקציות callback, displayText (אם פונקציה) ו-preconditionFn באמצעות אובייקט Scope שמכיל מידע על סביבת העבודה או הבלוק המדויקים שעליהם לוחצים. כך, אפשרות תפריט ההקשר יכולה להפנות למאפיינים של סביבת העבודה או הבלוק. לדוגמה, באפשרות התפריט 'הקשר' שמאפשרת למשתמש למחוק את כל הבלוקים, מופיעה ההודעה 'Delete 42blocks' (מחיקת 42 בלוקים) אם סביבת העבודה מכילה 42 בלוקים. עם preconditionFn, האפשרות בתפריט יכולה להיות enabled אם מאפיין מסוים של הבלוק הוא True, או disabled אם לא.

לדוגמאות נוספות, ניתן לראות רישום של אפשרויות ברירת המחדל לתפריט ההקשר ב-contextmenu_items.js.

שינוי או הסרה של אפשרויות ברירת מחדל

אפשר לבטל רישום של כל אפשרות באמצעות Blockly.ContextMenuRegistry.registry.unregister(id). המזהים של אפשרויות ברירת המחדל נמצאים ב-contextmenu_items.js.

כדי לשנות אפשרות ברירת מחדל, צריך להתקשר למספר getItem עם המזהה ולשנות אותו לפי הצורך.