تتيح Blockly عمليات النسخ والقص واللصق لعدد من مكوّناتها المضمّنة، مثل اللبنات وتعليقات مساحة العمل والفقاعات.
السلوك التلقائي للحافظة
تتضمّن حزمة Blockly الأساسية اختصارات لوحة المفاتيح التي تتيح قص أو نسخ أو لصق الوحدات وتعليقات مساحة العمل وأي مكونات أخرى تنفّذ واجهات 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());