Extensions et mixins

Les extensions sont des fonctions exécutées sur un bloc lors de l'initialisation. Ils ajoutent souvent une configuration ou un comportement personnalisés à un bloc. Les mixins vous permettent d'ajouter des propriétés ou des fonctions d'assistance à un bloc, mais pas de les exécuter immédiatement.

Vous n'avez besoin d'utiliser des extensions ou des mixins que lorsque vous définissez un bloc avec JSON. Si vous utilisez JavaScript pour définir un bloc, vous pouvez appeler des fonctions d'initialisation directement dans init et ajouter des méthodes ou des propriétés directement à la définition.

Extensions

Les extensions sont des fonctions exécutées sur chaque bloc d'un type donné lors de sa création. Par exemple, ils peuvent ajouter une configuration personnalisée (par exemple, définir l'info-bulle du bloc) ou un comportement personnalisé (par exemple, ajouter un écouteur d'événements au bloc).

// This extension sets the block's tooltip to be a function which displays
// the parent block's tooltip (if it exists).
Blockly.Extensions.register(
    'parent_tooltip_extension',
    function() { // this refers to the block that the extension is being run on
      var thisBlock = this;
      this.setTooltip(function() {
        var parent = thisBlock.getParent();
        return (parent && parent.getInputsInline() && parent.tooltip) ||
            Blockly.Msg['MATH_NUMBER_TOOLTIP'];
      });
    });

Les extensions doivent être "enregistrées" pour pouvoir être associées à une clé de chaîne. Vous pouvez ensuite attribuer cette clé de chaîne à la propriété extensions de la définition JSON de votre type de bloc pour appliquer l'extension au bloc.

{
 //...,
 "extensions": ["parent_tooltip_extension",]
}

Vous pouvez également ajouter plusieurs extensions à la fois. Notez que la propriété extensions doit être un tableau, même si vous n'appliquez qu'une seule extension.

{
  //...,
  "extensions": ["parent_tooltip_extension", "break_warning_extension"],
}

Mixins

Blockly fournit également une méthode pratique lorsque vous souhaitez ajouter des propriétés/fonctions d'assistance à un bloc, mais ne pas les exécuter immédiatement. Pour ce faire, vous pouvez enregistrer un objet mixin contenant toutes vos propriétés/méthodes supplémentaires. L'objet mixin est ensuite encapsulé dans une fonction qui applique le mixin chaque fois qu'une instance du type de bloc donné est créée.

Blockly.Extensions.registerMixin('my_mixin', {
  someProperty: 'a cool value',

  someMethod: function() {
    // Do something cool!
  }
))`

Les clés de chaîne associées aux mixins peuvent être référencées en JSON comme n'importe quelle autre extension.

{
 //...,
 "extensions": ["my_mixin"],
}