سیستم کپی پیست از سه چیز ساخته شده است، اشیاء 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());