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());