המערכת של הדבקת ההעתקה בנויה משלושה דברים: ICopyable
אובייקטים, ICopyData
שמייצגים אובייקטים מועתקים, ו-IPaster
אובייקטים שיכולים להפוך נתונים מהעתקה בחזרה לאובייקטים ניתנים להעתקה. לכל סוג של ICopyable
נדרש IPaster
משויך שיכול להדביק את הנתונים האלה.
המערכות האלה מוצגות למשתמש באמצעות אפשרויות בתפריט ההקשר ומקשי קיצור.
יש מעט מאוד מקרים שבהם כדאי להטמיע קובץ פסטר בהתאמה אישית או קובץ פסטר בהתאמה אישית (למשל, הפלאגין בבחירה מרובה או הפלאגין להדבקת העתקה בין כרטיסיות), כי בדרך כלל אובייקטים שניתן להעתיק, מוצגים, ואי אפשר להוסיף אובייקטים מעובדים חדשים ל-Blockly. האובייקטים היחידים שעברו עיבוד שיכולים להתקיים בסביבת העבודה הם בלוקים, בועות ותגובות בסביבת העבודה.
הטמעת עותק שניתן להעתיק
כדי ליצור אובייקט שניתן להעתקה, יש להטמיע את הממשק ICopyable
.
ניתן לבחירה
הממשק של ICopyable
מרחיב את הממשק של ISelectable
, ולכן צריך להטמיע גם את השיטות והמאפיינים האלה.
צריך שתהיה אפשרות לבחור אותה, כי מקשי קיצור בוחנים את האובייקט שנבחר כדי להבין מה להעתיק.
class MyCopyable implements ISelectable {
constructor(workspace) {
this.id = Blockly.utils.idGenerator.genUid();
this.workspace = workspace;
}
select() {
// Visually indicate this draggable is selected.
}
unselect() {
// Visually indicate this draggable is not selected.
}
}
ניתן להעתקה
בממשק ICopyable
עצמו יש רק שיטה אחת, toCopyData
, שמחזירה ייצוג של קובץ JSON שניתן להעתקה של מצב האובייקט שניתן להעתיק, ואפשר להשתמש בו כדי ליצור מחדש את האובייקט שניתן להעתיק.
נתוני ההעתקה צריכים גם לכלול מאפיין paster
שכולל את שם המחרוזת הרשום שמשויך לפסטר שבו צריך להדביק את נתוני ההעתקה האלה. למידע נוסף על פספוסים, ראו הטמעה של פסטר.
class MyCopyable implements ICopyable {
constructor(workspace, state) {
this.workspace = workspace;
this.myState = state;
}
toCopyData() {
return {
// This string matches the string used to register the paster.
paster: 'MY_PASTER',
state: this.myState,
};
}
}
הטמעת פסטר
כדי ליצור פסטר, עליך להטמיע את הממשק IPaster
. יש לו רק שיטה אחת (paste
) שמקבלת את נתוני ההעתקה של מה שהוא מדביק, סביבת העבודה שבה רוצים להדביק את הפריט וקואורדינטה אופציונלית, שהיא המיקום שבו מדביקים את הפריט.
class MyPaster implements IPaster {
paste(copyData, workspace, coordinate) {
return new MyCopyable(workspace, copyData.state);
// Optionally position the copyable at the passed coordinate.
// Optionally select the copyable after it is pasted.
}
}
הרשמה
אחרי שמטמיעים פסר, עליכם לרשום אותו כדי שתוכלו למצוא את פס ההזזה שמשויך לעותק נתון מהנכס paster
שלו.
// This string matches the string assigned to the 'paster' property.
Blockly.clipboard.registry.register('MY_PASTER', new MyPaster());