Типы определяют фигуры для блоков. Фигуры помогают понять роль того или иного блока на диаграмме.
В этой статье вы узнаете, как использовать встроенные типы, стилизовать их и создавать собственные.
По умолчанию, стандартный блок отображается в виде простого прямоугольника, без какой-либо стилизации:

Есть два типа блоков со встроенной стилизацией:

На изображении ниже вы можете увидеть встроенные SVG фигуры (типы).

Related sample: Diagram: Built-in Shapes
Вы можете задать блоку стилизованный тип или SVG фигуру. Это можно сделать отдельно для каждого блока или же сразу для всех блоков. Для того чтобы применить тип индивидуально, необходимо добавить свойство type к соответствующему объекту блока и установить название нужного типа в качестве его значения.
webix.ui({
view:"diagram",
data:[
{
id:"start",
value:"start",
x:0,
y:80,
type:"disk", },
// другие блоки
]
});
Если вам нужно, чтобы все блоки были одного типа, вы можете определить тип глобально в объекте item:
webix.ui({
view:"diagram",
data:[/* данные для блоков */],
item:{
// тип heptagon установлен для всех блоков
type:"heptagon" }
});
Существует два способа стилизации SVG блоков и типов:
Стилизация текста
Стилизация SVG
Блоки с SVG типами можно стилизовать непосредственно в объекте блока:
webix.ui({
view:"diagram",
data:[
{
id: "process",
backgroundColor:"#F67B72",
lineColor:"#F67B72",
fontColor:"#fff"
},
// другие блоки
],
});
Внутри массива shapes вы можете задать настройки по умолчанию для каждого SVG типа.
Массив shapes содержит объекты с настройками типов. Вы также можете задать настройки по умолчанию сразу для нескольких типов.
view:"diagram",
shapes:[
{
id: "process",
backgroundColor:"#F67B72",
fontColor:"magenta"
},
// другие фигуры
]
Теперь у всех блоков, которые используют тип "process", будет одинаковый цвет фона и текста. Если для конкретного блока задать другие цвета в индивидуальных настройках, они переопределят глобальные настройки.
Метод setShape позволяет задать стили для конкретного SVG типа:
$$("diagram1").setShape("dot", {
lineColor:"#2d9bf0"
});
Related sample: Diagram: Shape Styling
Теперь у всех блоков, которые используют тип "dot", будет одинаковый цвет линий. Если внутри объекта конкретного блока задать другой цвет, он переопределит цвет, заданный с помощью метода.
Вы можете стилизовать блоки глобально или индивидуально. Чтобы применить стили сразу ко всем блокам, определите объект item внутри конструктора Diagram и укажите название CSS класса в качестве значения поля css:
{
view:"diagram",
data:[/* данные для блоков */],
item:{
css:"common_blocks"
}
}
Чтобы стилизовать блоки и их содержимое (фигуру и текст), вам необходимо указать название CSS класса в качестве значения для поля блока $css:
{
id: 1,
// любое название
$css: "my_css"
}
Далее рассматривается стилизация фигуры и текста блока.
Блок представляет собой контейнер с фигурой и текстом внутри. Поэтому, чтобы стилизовать внутреннюю фигуру блока по умолчанию, вам необходимо добавить CSS правило в зависимости от шаблона этой фигуры. У фигуры уже есть собственный CSS класс, который можно переопределить:
<!-- css классы для блока "default" -->
<div class="webix_diagram_shape webix_diagram_shape_default"></div>
<!-- css классы для блока "org" -->
<div class="webix_diagram_shape webix_diagram_shape_org"></div>
CSS правила для фигуры "org" будут выглядеть следующим образом:
.my_css .webix_diagram_shape_org { border-color: orange; }
SVG блоки стилизуются похожим образом, однако вам нужно обращаться напрямую к SVG элементу (а не CSS классу):
.my_css svg { stroke: orange; }
Related sample: Diagram: Built-in Block Styles
Текст рисуется поверх фигуры. У такого текста есть CSS класс "webix_diagram_text", к которому и нужно обратиться:
.my_css .webix_diagram_text {
font-weight: 500;
background: transparent !important;
}
Related sample: Diagram: Decision Tree

Виджет Diagram позволяет создавать и применять собственные SVG типы (фигуры) для блоков диаграммы.
Чтобы создать собственную фигуру, добавьте объект с ее настройками в массив shapes:
{
view:"diagram",
shapes:[
{
id: "internet",
// используется для тултипов в редакторе Diagram
name: "Network",
// используется для группировки фигур в редакторе Diagram
group: "device",
template: '<svg width="60" height="60" viewBox="0 0 60 60">...</svg>',
lineColor: "98E4ED",
backgroundColor:"#fff",
altBackgroundColor:"#98E4ED",
textVAlign:"bottom"
},
// другие фигуры (встроенные и собственные)
]
}
Можно также воспользоваться методом addShape:
$$("diagram").addShape("internet", {
template: '<svg width="60" height="60" viewBox="0 0 60 60">...</svg>',
name: "Network",
group: "device",
lineColor: "98E4ED",
backgroundColor:"#fff",
altBackgroundColor:"#98E4ED",
textVAlign:"bottom"
});
Related sample: Diagram: Custom Shapes
Обратите внимание, что для собственных фигур вам также необходимо добавить следующие поля:
Если в вашей фигуре есть несколько элементов path, которые нужно стилизовать с помощью свойства altBackgroundColor, то этим элементам необходимо добавить класс webix_diagram_shape_alt.
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" >
<rect width="60" height="60" />
<path class="webix_diagram_shape_alt" .../> </svg>`
Убедитесь, что название фигуры не повторяется и не совпадает с названиями встроенных фигур. В противном случае, настройки вашей фигуры переопределят настройки встроенной.
Настройки всех фигур хранятся в массиве shapes. Вы можете получить объект конкретной фигуры. Для этого нужно вызвать метод getShape для диаграммы, и передать название нужной фигуры в качестве параметра. Метод вернет объект с настройками указанной фигуры.
$$("diagram1").getShape("plus");
/*
{
id:"plus",
name:"plus",
svg:"...svgCode"
}
*/
Наверх