نسخ ولصق

يتكون نظام النسخ واللصق من ثلاثة عناصر، وهي 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());