Diagram Editor это комплексный виджет, разработанный с помощью MV* фреймворка Webix Jet. Это готовое приложение с минимальной конфигурацией и специальным API для переопределения логики внутренних модулей.
Кастомизация компонентов и моделей подразумевает работу с исходным кодом.
Diagram Editor построен как Jet приложение в обёртке Webix компонента, поэтому вы можете инициализировать его любым из двух способов.
Интерфейс Diagram Editor разбит по частям (компонентам). Каждый компонент, это класс, который наследуется от класса JetView и имеет свои методы и конфигурацию.
Исходный код частей интерфейса (компонентов Jet) находится в папке sources/views.
views
windows
context.js
editor.js
...
На странице карты классов представлен список используемых компонентов, а также их расположение в интерфейсе.
В моделях Diagram Editor описана логика для работы с блоками и фигурами. В Webix Jet модели называются сервисами.
Исходный код для моделей (сервисов Jet) находится в папке sources/models.
models
Local.js
Style.js
History.js
1. Local - инициализирует сервис и обеспечивает доступ к коллекции фигур
const local = $$("editor").getService("local");
const shapes = local.shapes();
2. Styles
const styles = $$("editor").getService("styles");
// получаем настройки связи
styles.getLinkValues(link);
3. History - хранит логику кнопок "Undo" and "Redo"
Методы сервисов вызываются самим интерфейсом, но также могут быть вызваны программистом напрямую:
$$("editor").getService("local").shapes();
Для начала создайте класс, наследуя его от класса по умолчанию или от diagram.views.JetView:
class LimitedShapes extends diagram.views["shapes"] {
config(){
//получаем JSON объект с конфигурацией
const ui = super.config();
//изменения конкретного компонента
ui.width = 200;
return ui;
}
init() {
//вызываем логику по умолчанию
super.init();
//а это уже пользовательский метод
this.doSomething();
}
doSomething(){
//делаем что-то при инициализации
}
}
Затем переопределите компонент (класс) по умолчанию с помощью свойства override:
webix.ui({
view: "diagram-editor",
override: new Map([
[diagram.views["shapes"], LimitedShapes]
]),
});
Чтобы убрать фигуры из списка фигур по умолчанию, вам необходимо изменить его JSON конфигурацию. Просто отфильтруйте ненужные фигуры из объекта с настройками:
class LimitedShapes extends diagram.views["shapes"] {
init() {
super.init();
// убирает основные фигуры из группы Block: octagon, triangle, и другие.
this.$$("blockView").filter(obj => {
return (
obj.id.indexOf("gon") === -1 && obj.id.indexOf("angle") === -1
);
});
}
}
Related sample: Diagram Editor: Limited Shapes
Внутри компонента shapes, localId групп с фигурами совпадают с id самих групп:
Больше примеров кастомизации смотрите в практических руководствах.
Рекомендации
1. Мы не рекомендуем удалять компоненты из интерфейса, т.к. внутренняя логика может всё ещё обращаться к ним. Вы можете скрывать компоненты.
class CustomShapes extends diagram.views["shapes"] {
init(view) {
//логика по умолчанию
super.init(view);
//получаем панель с группами фигур (компонент с именем "accordionitem")
const block = this.$$("blockView");
const panel = block.getParentView();
//прячем группу "Block"
panel.hide();
}
}
2. Получить экземпляр компонента внутри Jet можно следующими способами:
Метод работает для внутреннего компонента, у которого определён локальный ID (localId).
init() {
//логика по умолчанию
super.init();
//получаем экземпляр компонента с localId = "ExtraView"
const form = this.$$("ExtraView");
}
init(view) {
//логика по умолчанию
super.init();
//получаем экземпляр первой кнопки
const button = view.queryView("button");
}
3. Чтобы получить текущее состояние приложения и его реактивные свойства, воспользуйтесь одним из способов ниже:
const state = this.app.getState();
//или
const state = this.getParam("state");
Diagram Editor - это очень гибкий виджет в отношении кастомизаций: вы можете менять в нём практически всё, что угодно. Однако следует помнить о следующих моментах:
Обратите внимание, что у кода для Edge Сhromium должен быть другой синтаксис.