Плагины и расширения

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.

Оптимизация производительности

При разработке крупных плагинов важно учитывать производительность карты, особенно при работе с большими деревьями узлов:

  • Использовать делегирование событий вместо подписки на каждый узел отдельно.
  • Кешировать результаты вычислений для часто запрашиваемых данных.
  • Минимизировать количество прямых манипуляций с DOM, используя методы Mind.js для обновления визуального состояния.

Стандарты разработки плагинов

Mind.js рекомендует придерживаться следующих практик:

  1. Изоляция кода — все функции плагина должны быть ограничены своей областью, чтобы избежать конфликтов.
  2. Поддержка событий карты — использовать существующую событийную систему вместо прямого изменения структуры.
  3. Документирование методов — описывать публичные методы и параметры, чтобы интеграция с другими плагинами была предсказуемой.
  4. Обработка ошибок — корректно обрабатывать исключения и очищать ресурсы при удалении плагина.

Примеры готовых расширений

  • History Plugin — сохраняет последовательность изменений карты и позволяет откатывать действия.
  • Search Plugin — добавляет поиск по тексту узлов и подсветку результатов.
  • Export/Import Plugin — обеспечивает экспорт карты в JSON, XML или изображение, а также импорт обратно.

Эта система плагинов делает Mind.js гибкой платформой для построения как простых, так и сложных карт знаний с богатым пользовательским интерфейсом и возможностью интеграции сторонних модулей.