Типы определяют фигуры для блоков. Фигуры помогают понять роль того или иного блока на диаграмме.
В этой статье вы узнаете о том, как использовать встроенные типы, стилизовать их и создавать собственные.
По умолчанию, стандартный блок отображается в виде простого прямоугольника, без какой либо стилизации:
Есть два типа блоков со встроенной стилизацией:
На изображении ниже вы можете увидеть встроенные 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 styles
Вы можете стилизовать блоки, которые используют 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"
},
// другие фигуры
]
Теперь у всех блоков, которые используют тип "action", будет одинаковый цвет фона и шрифта. Если для конкретного блока задать другие цвета в индивидуальных настройках, они переопределят глобальные настройки .
You can also use the setShape method to provide defaults for a particular SVG-based type. Метод 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 классы для блока "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",
// used for tooltips in Diagram editor
name: "Network",
// used to group shapes in Diagram editor
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"
}
*/
Наверх