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

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);