Anula íconos integrados

Blockly tiene tres tipos de íconos integrados: comentarios, advertencias y mutadores.

Los íconos de comentarios son reemplazables. Eso significa que puedes indicarle a Blockly que cree una instancia de tu propia clase de ícono de comentario cuando llames a métodos como myBlock.setCommentText(). Es posible que quieras hacerlo si, por ejemplo, quieres que la burbuja emergente del comentario se vea diferente.

Un bloque con el ícono de comentario destacado

Los íconos de advertencia y mutador no se pueden anular.

Ícono de comentario

Para anular el ícono de comentario, debes crear un ícono personalizado que implemente la interfaz ICommentIcon y, luego, registrarlo.

Implementación básica

Antes de agregar una lógica específica para los comentarios, completa la implementación básica de tu ícono personalizado.

Tipo

El método getType debe mostrar el ícono de comentario IconType.

class MyCommentIcon extends Blockly.icons.Icon {
  getType() {
    return Blockly.icons.IconType.COMMENT;
  }
}

Texto

La interfaz ICommentIcon requiere que el comentario tenga texto. El método getText debe mostrar el texto del comentario. El método setText debe establecer el texto del comentario y actualizar los elementos visuales.

getText() {
  return this.text;
}

setText(text) {
  this.text = text;
  this.myRenderMethod();
}

Cuadro

Tu ícono de comentario personalizado debe implementar la interfaz IHasBubble para admitir la serialización. Incluso si técnicamente tu ícono no tiene un cuadro, debes almacenar la información de visibilidad en tu clase para que se mantenga el estado guardado. De lo contrario, perderás la información del usuario si cargas un elemento guardado que incluya si el comentario se abrió o no.

bubbleIsVisible() {
  return this.bubbleVisible;
}

setBubbleVisible(visible: boolean) {
  this.bubbleVisible = visible;
}

Para obtener más información sobre las burbujas, consulta Cómo usar burbujas emergentes.

La interfaz ICommentIcon también requiere un método getBubbleSize que muestra un tamaño y un setBubbleSize que lo establezca. También se aplica el mismo razonamiento del estado de guardado anterior, incluso si técnicamente tu ícono no tiene una burbuja.

getBubbleSize() {
  return this.bubbleSize;
}

setBubbleSize(size) {
  this.bubbleSize = size;
  this.myRenderMethod();
}

Guardar y cargar

Tu ícono de comentario personalizado debe implementar la interfaz de ISerializable. El estado debe cumplir con la interfaz de CommentState.

saveState() {
  return {
    text: this.text,
    pinned: this.bubbleVisible,
    height: this.bubbleSize.height,
    width: this.bubbleSize.width,
  }
}

loadState(state) {
  this.setText(state.text);
  this.setBubbleVisible(state.pinned);
  this.setBubbleSize(new Blockly.utils.Size(state.width, state.height));
}

Para obtener más información sobre la serialización de íconos, consulta Cómo guardar y cargar íconos.

Registro

Por último, debes registrar tu icono para que Blockly pueda crear una instancia de él. Asegúrate de usar el tipo IconTypes.COMMENT.

Blockly.icons.registry.register(Blockly.icons.IconType.COMMENT, myCommentIcon);