Переопределить встроенные значки

Blockly имеет три типа встроенных значков: комментарии, предупреждения и мутаторы.

Значки комментариев можно переопределить. Это означает, что вы можете указать Blockly создать экземпляр вашего собственного класса значков комментариев при вызове таких методов, как myBlock.setCommentText() . Это может потребоваться, например, если вы хотите, чтобы всплывающее окно комментария выглядело по-другому.

Блок с выделенным значком комментария

Значки предупреждений и мутаторов не подлежат переопределению.

Значок комментария

Чтобы переопределить значок комментария, необходимо создать собственный значок, реализующий интерфейс ICommentIcon , а затем зарегистрировать его.

Базовая реализация

Прежде чем добавлять логику для комментариев, завершите базовую реализацию собственного значка.

Тип

Метод getType должен возвращать значок комментария IconType .

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

Текст

Интерфейс ICommentIcon требует, чтобы комментарий содержал текст. Метод getText должен возвращать текст комментария. Метод setText должен установить текст комментария и обновить все визуальные элементы.

getText() {
  return this.text;
}

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

Пузырь

Ваш собственный значок комментария должен реализовывать интерфейс IHasBubble для поддержки сериализации. Даже если ваш значок технически не имеет пузырька, вам следует сохранить информацию о видимости в своем классе, чтобы сохранить сохраненное состояние. В противном случае вы потеряете информацию от пользователя, если загрузите сохранение, в котором указано, был ли комментарий открыт или нет.

bubbleIsVisible() {
  return this.bubbleVisible;
}

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

Дополнительную информацию о всплывающих окнах см. в разделе Использование всплывающих всплывающих окон .

Интерфейс ICommentIcon также требует метода getBubbleSize , который возвращает размер, и setBubbleSize , который его устанавливает. Те же рассуждения о сохранении состояния, что и ранее, даже если на вашем значке технически нет пузырька, применимы и здесь.

getBubbleSize() {
  return this.bubbleSize;
}

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

Сохранить и загрузить

Значок пользовательского комментария должен реализовывать интерфейс ISerializable . Состояние должно соответствовать интерфейсу 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));
}

Дополнительные сведения о сериализации значков см. в разделе Сохранение и загрузка значков .

Регистрация

Наконец, вам необходимо зарегистрировать свой значок, чтобы Blockly мог создать его экземпляр. Обязательно используйте тип IconTypes.COMMENT .

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