Blockly, tuşları (veya ctrl-C
gibi tuş kombinasyonlarını) işlemlere eşleyen klavye kısayollarının bir kaydını tutar. Kayıt defterinde, kopyalama için ctrl-C
ve meta-C
gibi bir dizi kısayol önceden doldurulmuştur. Kayıt defterine kısayol ekleyebilir ve kayıt defterinden kısayol silebilirsiniz.
Klavye kısayolları nasıl çalışır?
Kısayol kayıt defteri, klavye kısayollarını modelleyen nesneler içerir. Kullanıcı bir tuşa (veya tuş kombinasyonuna) bastığında Blockly:
Kayıt defterini kontrol ederek anahtara uygulanan kısayollar olup olmadığını belirler. Tuşu birden fazla kısayol kullanıyorsa kısayollar, kayıt sırasının tersine göre denenir. Yani en son kaydedilen kısayol önce denenir.
Kısayolun
preconditionFn
işlevini çağırır. Bu işlev, kısayolun mevcut durum için geçerli olup olmadığını belirler. Örneğin, kopyalama kısayolu bloklar için geçerlidir ancak çalışma alanı için geçerli değildir. Kısayol uygulanmazsa Blockly, listedeki bir sonraki kısayolu (varsa) dener.Kısayolun
callback
işlevini çağırır. Bu işlev, kısayolun işlemini yürütür. Örneğin, kopyalama kısayolu, şu anda odaklanılmış nesnenin (ör. bir blok) kopyasını oluşturur. Bu işlevtrue
değerini döndürürse işleme durdurulur.false
döndürülürse Blockly, listede varsa bir sonraki kısayolu dener.
Kapsam
A
Scope
nesnesi, şu anda odaklanılan Blockly bileşenini tanımlar. Kapsam nesneleri, preconditionFn
ve callback
'ye iletilir. Bu nesneler, kısayolun belirli bir bileşen için geçerli olup olmadığına ve geçerliyse nasıl uygulanacağına karar vermek için kullanılır.
Scope
nesnesini kullanmak için focusedNode
özelliğini kullanın. Bu, IFocusableNode
öğesini uygulayan bir nesnedir. Bu arayüz, kullanıcının odaklanabileceği tüm Blockly bileşenleri (çalışma alanları, bloklar, alanlar, yorumlar ve kendi özel bileşenleriniz dahil) tarafından uygulanır. Daha fazla bilgi için Odaklanma sistemi başlıklı makaleyi inceleyin.
Örneğin, bir preconditionFn
, focusedNode
kullanarak bir kısayolun yalnızca bloklar için geçerli olmasını sağlayabilir.
preconditionFn(workspace, scope) {
return (scope.focusedNode instanceof Blockly.BlockSvg);
}
KeyboardShortcut arayüzü
Kısayol kayıt defterindeki nesneler,
KeyboardShortcut
arayüzünü uygular. Bu özellikler şunlardır:
name (zorunlu)
Kısayol için benzersiz bir ad. Bu, kullanıcılara gösterilmez ve okunabilir olması gerekmez. Çevrilmemelidir.
const logFieldsShortcut = {
name: 'logFields',
// ...
};
preconditionFn (isteğe bağlı)
Blockly, bir kısayolun geçerli duruma uygulanıp uygulanmayacağına karar vermek için bu işlevi çağırır. true
döndürürse Blockly, callback
çağrısı yapar. false
döndürürse Blockly bu kısayolu yoksayar. Örneğin:
const logFieldsShortcut = {
// ...
preconditionFn(workspace, scope) {
// This shortcut only applies to blocks.
return (scope.focusedNode instanceof Blockly.BlockSvg);
},
// ...
};
Kısayol her zaman geçerliyse bu işlev atlanabilir (yaygın değildir).
Kısayollar bu işlevi atlamamalı ve ardından callback
içinde koşullu olarak işlem yapmamalıdır. Bu işlem, Blockly'nin bağlama uygun kısayolları gösteren bağlamsal yardım menüleri oluşturması gibi işlemleri yapmasını engeller.
callback (isteğe bağlı)
Bu işlev, kısayolla ilişkili işlemi yürütür. Yalnızca preconditionFn
, true
değerini döndürürse veya mevcut değilse çağrılır. Parametreleri şunlardır:
workspace
: MevcutWorkspaceSvg
.e
: Kısayolu başlatanEvent
.shortcut
:KeyboardShortcut
öğesinin kendisi.scope
: Kısayolun uygulandığıScope
.
İşlem başarılı olursa true
, başarısız olursa false
değerini döndürür.
Örneğin:
const logFieldsShortcut = {
// ...
callback(workspace, event, shortcut, scope) {
// preconditionFn required focusedNode to be a BlockSvg.
for (input of scope.focusedNode.inputList) {
// Log the values of all named fields. (Label fields usually don't have names.)
for (field of input.fieldRow) {
if (field.name) {
console.log(field.name + ': ' + field.getText());
}
}
}
return true;
},
// ...
};
callback
isteğe bağlı olsa da genellikle uygulanmaması için bir neden yoktur.
keyCodes (isteğe bağlı)
Bu kısayolu etkinleştiren bir tuş dizisi (veya tuş kombinasyonları). Tuşları tanımlamak için Blockly.utils.KeyCodes
'daki tuş kodlarını kullanın.
Örneğin:
const logFieldsShortcut = {
// ...
keyCodes: [Blockly.utils.KeyCodes.L],
// ...
};
Mevcut bir kısayola ek tuşlar eşlemek istiyorsanız (ör. varsayılan bir kısayola tuş eklemek istiyorsanız) Blockly.ShortcutRegistry.registry.addKeyMapping
işlevini çağırabilirsiniz.
Bu durum yaygın değildir.
Tuş kombinasyonları
Klavye kısayolunuz, Control
ve C
tuşlarını aynı anda basılı tutmak gibi bir tuş kombinasyonuyla etkinleştiriliyorsa Blockly.ShortcutRegistry.registry.createSerializedKey
işlevini çağırarak sıralı bir tuş kodu oluşturun:
const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey(
Blockly.utils.KeyCodes.C, // Keycode of main key
[Blockly.utils.KeyCodes.CTRL], // Array of modifier keys
);
const copyShortcut = {
// ...
keyCodes: [ctrlC], // Use the serialized keycode
// ...
};
Control ve Meta
Windows'da birçok kısayol Control
tuşuyla etkinleştirilir. Mac'te bu klavye kısayollarında Command
tuşu yerine META
tuş kodu olarak tanınan Command
tuşu kullanılır. Her iki işletim sistemini de desteklemek için kısayollarınızı hem CTRL
tuş kodu hem de META
tuş koduyla kaydedin.
const ctrlC = Blockly.ShortcutRegistry.registry.createSerializedKey(
Blockly.utils.KeyCodes.C,
[Blockly.utils.KeyCodes.CTRL],
);
const metaC = Blockly.ShortcutRegistry.registry.createSerializedKey(
Blockly.utils.KeyCodes.C,
[Blockly.utils.KeyCodes.META],
);
const copyShortcut = {
// ...
keyCodes: [ctrlC, metaC],
// ...
};
Uygulamayla ilgili not
Blockly'nin klavye etkinliği işleyicileri, desteği sonlandırılmış olmasına rağmen keycode
özelliğini
KeyboardEvent
kullanır.
allowCollision (isteğe bağlı)
Varsayılan olarak, belirli bir tuş veya tuş kombinasyonu için yalnızca bir kısayol kaydedebilirsiniz. Bu özelliği true
olarak ayarladığınızda, aynı tuş (veya tuş kombinasyonu) ile kısayol daha önce kaydedilmiş olsa bile tuş (veya tuş kombinasyonu) kaydedebilirsiniz.
Bu özelliğin yalnızca bu kısayolu kaydetmeye çalışırken geçerli olduğunu unutmayın.
Diğer kısayolların aynı tuşu (veya tuş kombinasyonunu) kullanmasını engellemez. Kaydedilip kaydedilemeyecekleri, allowCollision
özelliğinin değerine bağlıdır.
Belirli bir tuş veya tuş kombinasyonu için kaç kısayol kaydedilmiş olursa olsun, en fazla biri başarıyla yürütülür. Kısayollar, kayıt sırasının tersine göre (son kaydedilenden ilk kaydedilene doğru) denenir.
Bunlardan biri geri çağırmadan true
döndükten sonra başka kısayollar denenmez.
meta veriler (isteğe bağlı)
Bu, ek bilgiler içeren rastgele bir nesnedir. shortcut
parametresi aracılığıyla callback
için kullanılabilir.
Kısayol ekleme, silme ve değiştirme
Yeni bir klavye kısayolu eklemek için Blockly.ShortcutRegistry.registry.register
işlevini çağırın:
Blockly.ShortcutRegistry.registry.register(logFieldsShortcut);
Bu işlevde, mevcut bir kısayolu kısayolunuzla aynı ada sahip bir kısayolla değiştirmenize olanak tanıyan ikinci bir parametre (allowOverrides
) bulunur. Bu özelliğin, farklı bir adla kısayol eklemenize olanak tanıyan ancak mevcut bir kısayolla aynı tuşu veya tuş kombinasyonunu kullanan KeyboardShortcut.allowCollision
özelliğinden farklı olduğunu unutmayın.
Klavye kısayolunu silmek için Blockly.ShortcutRegistry.registry.unregister
işlevini çağırın ve kısayolun adını iletin:
Blockly.ShortcutRegistry.registry.unregister('logFields');
Klavye kısayollarını yerinde değiştiremezsiniz. Bunun yerine mevcut kısayolu silip yeni bir kısayol eklemeniz gerekir. Örneğin:
// Get the existing shortcut. getRegistry returns an object keyed by shortcut name.
const allShortcuts = Blockly.ShortcutRegistry.registry.getRegistry();
const modLogFieldsShortcut = allShortcuts[logFieldsShortcut.name];
// Apply the shortcut only to math blocks,
modLogFieldsShortcut.preconditionFn = function (workspace, scope) {
return (scope.focusedNode instanceof Blockly.BlockSvg &&
scope.focusedNode.type.startsWith('math_'));
}
// Delete the existing shortcut and add the modified shortcut.
Blockly.ShortcutRegistry.registry.unregister(logFieldsShortcut.name);
Blockly.ShortcutRegistry.registry.register(modLogFieldsShortcut);
Varsayılan kısayollar
Kısayol kayıt defteri, çeşitli kısayollarla önceden doldurulur. Bunları https://github.com/google/blockly/blob/master/core/shortcut_items.ts adresinde bulabilirsiniz.
Kısayollar, registerXxxx
işlevlerinde tanımlanır.
Klavye ile gezinme kısayolları
Klavyeyle gezinme eklentisi, kullanıcıların Blockly'de klavyeyle (ör. ok tuşlarını kullanarak) gezinmesine olanak tanıyan kısayollar içerir. Klavye ile gezinme, fare kullanamayan (ör. hareket veya görme engelli) kullanıcılar için çok önemlidir. Ayrıca, verimlilik için klavye kısayollarını kullanmak isteyen ileri düzey kullanıcılar için de faydalıdır.