העתקה והדבקה

המערכת של הדבקת ההעתקה בנויה משלושה דברים: 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());