Kopiuj i wklej

System kopiowania i wklejania składa się z 3 elementów: obiektów ICopyable, ICopyData reprezentujących skopiowane obiekty i IPaster obiektów, które mogą powodować kopiowanie danych z powrotem na obiekty możliwe do skopiowania. Każdy typ obiektu ICopyable wymaga powiązanego elementu IPaster, który może wkleić te dane.

Systemy te są wyświetlane użytkownikom za pomocą opcji menu kontekstowego i skrótów klawiszowych.

W nielicznych przypadkach warto zaimplementować niestandardowy mechanizm wklejania, który można skopiować lub zastosować niestandardowy mechanizm wklejania (np. wtyczka z funkcją wielokrotnego wyboru lub wtyczka do wklejania elementów na wielu kartach), ponieważ obiekty, które można skopiować, są renderowane i nie można dodawać nowych renderowanych obiektów do Blockly. Jedyne wyrenderowane obiekty, które mogą istnieć w obszarze roboczym, to bloki, dymki i komentarze do obszaru roboczego.

Implementowanie możliwego do skopiowania

Aby utworzyć możliwy do skopiowania obiekt, musisz zaimplementować interfejs ICopyable.

Do wyboru

Interfejs ICopyable rozszerza interfejs ISelectable, co oznacza, że musisz też wdrożyć te metody i właściwości.

Możliwość zaznaczania jest wymagana, bo skróty klawiszowe analizują wybrany obiekt, by ustalić, co należy skopiować.

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.
  }
}

Można skopiować

Sam interfejs ICopyable ma tylko jedną metodę toCopyData, która zwraca możliwą do serializowania reprezentację stanu obiektu możliwego do skopiowania w formacie JSON, która może zostać użyta do odtworzenia obiektu możliwego do skopiowania.

Kopiowanie musi też zawierać właściwość paster, która zawiera zarejestrowaną nazwę ciągu znaków powiązaną z elementem wklejającym, który ma wkleić te skopiowane dane. Więcej informacji na temat wklejania znajdziesz w artykule Wdrażanie narzędzia do wklejania.

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,
    };
  }
}

Wdrożenie pastera

Aby utworzyć wklejacz, musisz zaimplementować interfejs IPaster. Ma tylko jedną metodę paste pobierającą dane skopiowane z obiektu, obszar roboczy, do którego coś ma zostać wklejony, oraz opcjonalną współrzędną, która określa lokalizację wklejenia.

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.
  }
}

Rejestracja

Po zaimplementowaniu wklejania musisz go zarejestrować, aby móc znaleźć tę usługę powiązaną z daną kopią danych z jej właściwości paster.

// This string matches the string assigned to the 'paster' property.
Blockly.clipboard.registry.register('MY_PASTER', new MyPaster());