Kopyala ve yapıştır

Kopyalama yapıştırma sistemi, kopyalanan nesneleri temsil eden ICopyable nesnelerden ICopyData ve kopyalanan verileri tekrar kopyalanabilir nesnelere dönüştürebilen IPaster nesnelerden oluşur. Her ICopyable türü, bu verileri yapıştırabilecek ilişkili bir IPaster'a ihtiyaç duyar.

Bu sistemler, içerik menüsü seçenekleri ve klavye kısayolları aracılığıyla kullanıcıya gösterilir.

Genellikle kopyalanabilir nesneler oluşturulduğundan ve Blockly'ye yeni oluşturulan nesneler ekleyemeyeceğinizden, özel bir kopyalanabilir veya özel bir 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ında bulunabilecek tek oluşturulmuş nesneler bloklar, balonlar ve çalışma alanı yorumlarıdır.

Kopyalanabilir bir

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

Seçilebilir

ICopyable arayüzü, ISelectable arayüzünü genişletir. Bu, söz konusu yöntemleri ve özellikleri de uygulamanız gerektiği anlamına gelir.

Klavye kısayolları, neyin kopyalanacağını belirlemek için seçilen nesneye baktığından seçilebilir olmak 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 yalnızca bir yöntemi vardır: toCopyData. Bu yöntem, kopyalanabilen nesnenin durumunun JSON olarak serileştirilebilir bir temsilini döndürür. Bu temsil, kopyalanabilen 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ı içeren bir paster mülkü de içermelidir. Etiketler hakkında daha fazla bilgi için Etiket uygulama başlıklı makaleyi inceleyin.

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

Etiket oluşturmak için IPaster arayüzünü uygulamanız gerekir. Yalnızca yapıştırdığı öğenin kopya verilerini, öğenin yapıştırılacağı çalışma alanını ve isteğe bağlı bir koordinatı (öğenin yapıştırılacağı konum) alan tek bir yöntemi paste 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 mülkünden belirli bir kopya verileriyle 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());