کپی و پیست کنید

Blockly از عملیات کپی، برش و چسباندن تعدادی از اجزای داخلی خود مانند بلوک ها، نظرات فضای کاری و حباب ها پشتیبانی می کند.

رفتار پیش‌فرض کلیپ‌بورد

Blockly core دارای میانبرهای صفحه‌کلید است که می‌تواند بلوک‌ها، نظرات فضای کاری و هر مؤلفه دیگری که رابط‌های ICopyable ، IDraggable و IDeletable را برش داده، کپی یا جای‌گذاری کند. همچنین با یک گزینه منوی زمینه برای کپی کردن یک بلوک همراه است. در صورت نیاز می توانید میانبرها و آیتم های منوی پیش فرض را تغییر دهید یا حذف کنید.

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

در فضاهای کاری و برگه ها کپی و جایگذاری کنید

اگر می‌خواهید به کاربران اجازه دهید بلوک‌ها را از یک فضای کاری کپی کرده و آن‌ها را در فضای کاری دیگر جای‌گذاری کنند، یا حتی در یک فضای کاری در نسخه‌ای از برنامه شما که در برگه دیگری اجرا می‌شود، می‌توانید افزونه @blockly/plugin-cross-tab-copy-paste نصب کنید.

رفتار کلیپ بورد سفارشی

اگر رفتار متفاوتی می‌خواهید، می‌توانید با حذف میانبرهای صفحه‌کلید که با Blockly ارائه می‌شوند و نصب سایرین که متفاوت کار می‌کنند، یک کلیپ‌بورد سفارشی پیاده‌سازی کنید. برای تسهیل این کار، می‌توانید از روش‌هایی در فضای نام Blockly.clipboard برای کپی، چسباندن یا کنترل‌های دقیق‌تر مانند تنظیم فضای کاری که یک شی از آن کپی شده است استفاده کنید.

اشیاء قابل کپی سفارشی

موارد دلخواه را می توان با استفاده از پنج رابط با سیستم کپی/پیست سازگار کرد: ICopyable ، IDraggable ، و IDeletable برای نمایش اشیاء قابل کپی، ICopyData برای نمایش اشیاء کپی شده، و IPaster برای نمایش اشیایی که می توانند داده های کپی را دوباره به اشیاء قابل کپی تبدیل کنند. هر نوع ICopyable به یک IPaster مرتبط نیاز دارد که بتواند آن داده ها را جایگذاری کند.

هر شیئی که ICopyable ، IDraggable و IDeletable را پیاده سازی می کند و دارای IPaster و ICopyData مربوطه است، به طور خودکار با سیستم کلیپ بورد پیش فرض کار می کند.

شرایط بسیار کمی وجود دارد که بخواهید یک کپی سفارشی یا یک پاستر سفارشی (مثلاً افزونه چند انتخابی ) پیاده سازی کنید، زیرا اشیاء قابل کپی رندر می شوند و شما نمی توانید اشیاء رندر شده جدید را به Blockly اضافه کنید. تنها اشیاء رندر شده ای که می توانند در یک فضای کاری وجود داشته باشند بلوک ها، حباب ها و نظرات فضای کاری هستند.

قابل کپی را پیاده سازی کنید

برای ایجاد یک شی قابل کپی، باید رابط های ICopyable ، IDraggable و IDeletable را پیاده سازی کنید. دو واسط آخر مورد نیاز است تا بتوان یک شیء چسبانده شده را دستکاری و حذف کرد.

قابل انتخاب

رابط 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,
    };
  }
}

ICopyable همچنین یک روش اختیاری دارد، isCopyable ، که نشان می دهد آیا یک شی در حال حاضر قابل کپی است یا خیر.

قابل کشیدن و حذف

برای اطلاعات در مورد پیاده سازی IDraggable و IDeletable ، به کشش های سفارشی مراجعه کنید.

یک پاستر را اجرا کنید

برای ایجاد یک پاستر، باید رابط 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());