Mind.js поддерживает систему плагинов, позволяющую расширять
функциональность ядра библиотеки без необходимости модификации исходного
кода. Плагины подключаются через объект конфигурации при инициализации
Mind:
const mind = new Mind({
container: '#mindmap',
plugins: [PluginName1, PluginName2]
});
Каждый плагин представляет собой объект с набором методов и событий, которые библиотека вызывает в определенные моменты жизненного цикла карты знаний. Основные методы плагинов:
init(mindInstance): вызывается при инициализации карты,
получает ссылку на экземпляр Mind.destroy(): освобождает ресурсы плагина при удалении
карты.on(eventName, handler): позволяет подписаться на
события карты, такие как добавление узла или изменение структуры.Событийная система плагинов предоставляет гибкий механизм для отслеживания изменений карты. Ключевые события включают:
nodeAdded: срабатывает при добавлении нового узла.nodeRemoved: при удалении узла.nodeUpdated: при изменении содержимого или стиля
узла.selectionChanged: при смене выделенного узла.Пример использования события в плагине:
const loggingPlugin = {
init(mindInstance) {
mindInstance.on('nodeAdded', (node) => {
console.log('Добавлен узел:', node.id, node.text);
});
}
};
Плагины могут добавлять новые свойства и методы к узлам карты. Mind.js позволяет динамически расширять объекты узлов через прототип или встроенные API:
mindInstance.registerNodeExtension({
name: 'priority',
default: 'normal',
methods: {
setHighPriority() {
this.priority = 'high';
}
}
});
После регистрации нового свойства все узлы карты получают доступ к
priority и методам для управления приоритетом.
Для интеграции внешних библиотек, таких как визуализация диаграмм или хранение данных, Mind.js предоставляет интерфейс плагинов, который обеспечивает доступ к внутренним событиям и методам карты. Пример подключения модуля экспорта в формате JSON:
const exportPlugin = {
init(mindInstance) {
mindInstance.exportToJSON = function() {
return JSON.stringify(this.getNodes(), null, 2);
};
}
};
Плагины позволяют добавлять собственные панели инструментов, контекстные меню и элементы управления:
const toolbarPlugin = {
init(mindInstance) {
const toolbar = document.createElement('div');
toolbar.className = 'custom-toolbar';
toolbar.innerHTML = `<button id="addNodeBtn">Добавить узел</button>`;
document.body.appendChild(toolbar);
document.getElementById('addNodeBtn').addEventListener('click', () => {
mindInstance.addNode({ text: 'Новый узел' });
});
}
};
Такой подход обеспечивает расширяемость без вмешательства в исходный код библиотеки, позволяя строить сложные интерфейсы поверх Mind.js.
При разработке крупных плагинов важно учитывать производительность карты, особенно при работе с большими деревьями узлов:
Mind.js рекомендует придерживаться следующих практик:
Эта система плагинов делает Mind.js гибкой платформой для построения как простых, так и сложных карт знаний с богатым пользовательским интерфейсом и возможностью интеграции сторонних модулей.