Kopyala ve yapıştır

Kopyalama yapıştırma sistemi üç şeyden oluşur: ICopyable nesneler, kopyalanan nesneleri temsil eden ICopyData ve kopyalanan verileri tekrar kopyalanabilir nesnelere dönüştürebilen IPaster nesneleri. Her ICopyable türünün, bu verileri yapıştırabilecek ilişkili bir IPaster öğesine ihtiyacı vardır.

Bu sistemler, bağlam menüsü seçenekleri ve klavye kısayolları aracılığıyla kullanıcıya sunulur.

Genellikle kopyalanabilir nesneler oluşturulduğundan ve Blockly'ye yeni oluşturulan nesneler ekleyemeyeceğinizden, özel kopyalanabilir veya özel yapıştırıcı (ör. multiselect eklentisi veya sekmeler arası kopyalama yapıştırma eklentisi) uygulamak isteyebileceğiniz çok az durum vardır. Bir çalışma alanı içinde oluşturulmuş nesneler yalnızca bloklar, balonlar ve çalışma alanı yorumlarıdır.

Kopyalanabilir bir kampanya oluşturun

Kopyalanabilir bir nesne oluşturmak için ICopyable arayüzünü uygulamanız gerekir.

Seçilebilir

ICopyable arayüzü ISelectable arayüzünü genişlettiği için bu yöntemleri ve özellikleri de uygulamanız gerekir.

Klavye kısayolları neyin kopyalanacağını belirlemek için seçilen nesneye baktığından seçilebilir özellik gereklidir.

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

Kopyalanabilir

ICopyable arayüzünün kendisinde yalnızca bir yöntem vardır: toCopyData bu yöntem, kopyalanabilir nesnenin durumunun JSON ile serileştirilebilir bir gösterimini döndürür ve kopyalanabilir nesneyi yeniden oluşturmak için kullanılabilir.

Kopyalama verileri, bu kopyalama verilerini yapıştırması gereken yapıştırıcıyla ilişkili kayıtlı dize adını barındıran bir paster özelliği de içermelidir. Yapıştırıcılar hakkında daha fazla bilgi için Yapıştırıcı uygulama bölümüne bakın.

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

Yapıştırıcı uygulama

Yapıştırıcı oluşturmak için IPaster arayüzünü uygulamanız gerekir. Yapıştırdığı öğenin kopya verilerini, öğenin yapıştırılacağı çalışma alanını ve öğenin yapıştırılacağı konum olan isteğe bağlı bir koordinatı alan tek bir paste yöntemi vardır.

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

Kayıt

Bir yapıştırıcıyı uyguladıktan sonra, paster özelliğindeki belirli bir kopya verisiyle ilişkili yapıştırıcıyı bulabilmek için bunu kaydetmeniz gerekir.

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