O Blockly permite personalizar determinadas funcionalidades substituindo as classes correspondentes.
Classes substituíveis
As seguintes classes do Blockly podem ser substituídas:
Classe do Blockly | Interface | Nome do tipo de registro |
---|---|---|
Blockly.dragging.Dragger |
Blockly.IDragger |
blockDragger |
Blockly.ConnectionChecker |
Blockly.IConnectionChecker |
connectionChecker |
Blockly.InsertionMarkerPreviewer |
Blockly.IConnectionPreviewer |
connectionPreviewer |
Blockly.HorizontalFlyout |
Blockly.IFlyout |
flyoutsHorizontalToolbox |
Blockly.VerticalFlyout |
Blockly.IFlyout |
flyoutsVerticalToolbox |
Blockly.MetricsManager |
Blockly.IMetricsManager |
metricsManager |
Blockly.Toolbox |
Blockly.IToolbox |
toolbox |
Blockly.VariableMap |
Blockly.IVariableMap |
variableMap |
Blockly.VariableModel |
Blockly.IVariableModel |
-- |
Para informações sobre como substituir um renderizador, consulte Criar renderizadores personalizados.
Criar uma classe substituta
Para criar uma classe de substituição, implemente as funções na interface correspondente. É possível implementar todas essas funções em uma nova classe ou estender a classe Blockly e substituir apenas as funções que você quer mudar. O único requisito é que você (ou a classe base) implemente todas as funções na interface e siga os requisitos descritos nos comentários dela.
Para indicar ao verificador de tipos que você implementa uma interface específica,
anote sua classe com a tag @implements {InterfaceName}
JSDoc (em
JavaScript) ou a palavra-chave implements
(em TypeScript).
Informar ao Blockly sobre sua classe de substituição
Há duas maneiras de informar ao Blockly sobre sua classe de substituição: registre-a como
a classe padrão do tipo dela (preferencial) ou injete-a usando a opção de configuração plugins
.
Registre sua classe de substituição como padrão
A maneira preferencial de informar ao Blockly sobre sua classe de substituição é registrá-la
como padrão para o tipo dela. Para fazer isso, chame Blockly.registry.register
usando
o nome Blockly.registry.DEFAULT
e defina o parâmetro opt_allowOverrides
como true
.
Blockly.registry.register(
Blockly.registry.Type.VARIABLE_MODEL,
Blockly.registry.DEFAULT,
CustomVariableModel,
true,
);
Injetar sua classe de substituição
Também é possível injetar classes de substituição usando a opção de configuração plugins
.
É um objeto que usa nomes de tipos de registro como nomes de propriedades e classes de substituição ou nomes registrados como valores de propriedades.
Apesar do nome da propriedade plugins
, sua classe não precisa ser
empacotada e distribuída pelo npm como os plug-ins usados para estender
o Blockly.
Transmita sua classe de substituição para Blockly.inject
:
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': CustomMetricsManagerClass
}
}
Ou registre sua classe usando Blockly.registry.register
e transmita o nome
registrado para Blockly.inject
. Isso é útil se você armazena as opções de configuração como JSON puro.
Blockly.registry.register(Blockly.registry.Type.METRICS_MANAGER, 'YOUR_NAME', CustomMetricsManagerClass);
Blockly.inject('blocklyDiv', {
plugins: {
'metricsManager': 'YOUR_NAME'
}
}