Написание и подключение плагинов

Клиентская часть ГеоМиксера позволяет писать и подключать к себе плагины. Внутри плагина доступны все ф-ции GeoMixer API и ряд интерфейсов GeoMixer Viewer.

Плагины ГеоМиксера представляют из себя js файл (возможно, с дополнительными зависимостями), реализующий интерфейс плагина и подключаемый при запуске системы через загрузчик модулей.

Модули ГеоМиксера

Модули ГеоМиксера – достаточно низкоуровневый механизм подключения именованных объектов (модулей) из внешних js файлов. Каждый модуль имеет имя и тело модуля. Дополнительно можно указать зависимости, список css файлов и ф-цию для инициализации.

Загрузчик модулей позволяет работать с модулями. Доступен через глобальную переменную gmxCore. Полная документация gmxCore.

Пример добавление модуля:

gmxCore.addModule('testModule',
    {   //Тело модуля
        test1: function(){},
        test2: function(){}
    },
    css: 'testModule.css' //css для модуля
)
gmxCore.addModule('testModule',
    {   //Тело модуля
        test1: function(){},
        test2: function(){}
    },
    css: 'testModule.css' //css для модуля
)

Пример использования модуля:

//загрузить модуль testModule из файла testModule.js
gmxCore.loadModule('testModule', 'testModule.js', function(testModule)
{
    testModule.test1();
    testModule.test2();
})
//загрузить модуль testModule из файла testModule.js
gmxCore.loadModule('testModule', 'testModule.js', function(testModule)
{
    testModule.test1();
    testModule.test2();
})

Интерфейс плагинов

Плагины являются модулями, которые предоставляют интерфейс IGeomixerPlugin. Интерфейс представляет из себя три ф-ции для инициализации плагина (beforeMap(), beforeViewer() и afterViewer()), которые вызываются в разные моменты времени инициализации ГеоМиксера, а так же переменную pluginName- имя плагина. Стоит заметить, что в одном модуле может содержаться только один плагин. Полная документация IGeomixerPlugin

Подключение плагина

Для подключения плагина необходимо в конфигурационном файле ГеоМиксера (config.js) добавить в глобальный массив gmxPlugins информацию об этом плагине. Информация представляет из себя объект со следующими свойствами:

  • module – основной модуль плагина
  • file – откуда брать модуль, если он ещё не загружен
  • params – параметры плагина. Будут переданы в ф-ции инициализации плагина
  • mapPlugin – будет ли плагин подключаться ко всем картам ГеоМиксера (mapPlugin=false) или только к некоторым (mapPlugin=true)
  • isPublic – стоит ли показывать имя плагина в списке плагинов карты (для некоторых плагинов хочется иметь возможность подключать их к картам, но не показывать всем пользователям)

Пример (файл config.js):

gmxPlugins.push({
    module: 'testPlugin',  //подключаем плагин из модуля testPlugin
    file: 'testModule.js',
    mapPlugin: true,       //будем подключать только к некоторым картам
    isPublic: true         //показывать всем пользователям
})
gmxPlugins.push({
    module: 'testPlugin',  //подключаем плагин из модуля testPlugin
    file: 'testModule.js',
    mapPlugin: true,       //будем подключать только к некоторым картам
    isPublic: true         //показывать всем пользователям
})

Подключение плагина шаг за шагом – пример

Покажем на простом примере создание плагина с нуля. Плагин будет называться «TestPlugin» и будет при загрузке просто переключать подложку на «Гибрид» вместо стандартной «Карты».

Создайте отдельный js-файл, например, TestPlugin.js в папке api/plugins. В файле нужно определить модуль и реализацию интерфейса IGeomixerPlugin:

gmxCore.addModule('TestPlugin', //Определяем модуль с названием TestPlugin
{
    pluginName: 'Test Plugin', //так этот плагин будет отображаться в списке плагинов карты
    afterViewer: function(params, map) //будет вызвана после полной инициализации ГеоМиксера
    {
        map.setBaseLayer('Гибрид'); //используем GoeMixer API чтобы поменять видимую подложку карты
    }
})
gmxCore.addModule('TestPlugin', //Определяем модуль с названием TestPlugin
{
    pluginName: 'Test Plugin', //так этот плагин будет отображаться в списке плагинов карты
    afterViewer: function(params, map) //будет вызвана после полной инициализации ГеоМиксера
    {
        map.setBaseLayer('Гибрид'); //используем GoeMixer API чтобы поменять видимую подложку карты
    }
})

Далее нужно подключить этот плагин к ГеоМиксеру. Открываем файл api/config.js и добавляем описание плагина к глобальному массиву gmxPlugins (если её нет, то создаём его).

window.gmxPlugins = window.gmxPlugins || []; //Если нет переменной, то пусть будет пустым массивом
window.gmxPlugins.push({
    module: 'TestPlugin',  //подключаем плагин из модуля TestPlugin
    file: 'plugins/TestPlugin.js',
    mapPlugin: true,       //будем подключать только к некоторым картам
    isPublic: true         //показывать в списке плагинов всем пользователям
}}
window.gmxPlugins = window.gmxPlugins || []; //Если нет переменной, то пусть будет пустым массивом
window.gmxPlugins.push({
    module: 'TestPlugin',  //подключаем плагин из модуля TestPlugin
    file: 'plugins/TestPlugin.js',
    mapPlugin: true,       //будем подключать только к некоторым картам
    isPublic: true         //показывать в списке плагинов всем пользователям
}}

Если при добавлении плагина к ГеоМиксеру не установлена опция mapPlugin, то плагин будет загружен для всех карт (для нашего примера во всех картах поменяется подложка по-умолчанию). Если опция включена, то плагин добавляется к нужным картам вручную при помощи интерфейса пользователя.