Окно настроек
tera-mod-ui — обертка над Electron. Она доступна в графическом запуске Toolbox; проверяйте global.TeraProxy.GUIMode и оставляйте команды для режима без GUI.
new Settings(mod, structure, settings, options = {}) создает интерфейс по схеме. Пример предполагает включенные настройки с полем enabled:
module.exports = function SettingsExample(mod) {
let ui;
if (global.TeraProxy.GUIMode) {
const { Settings } = require('tera-mod-ui');
ui = new Settings(mod, [
{ key: 'enabled', name: 'Enabled', type: 'bool' }
], mod.settings);
ui.on('update', (settings) => {
mod.settings = settings;
mod.saveSettings();
});
}
mod.command.add('example-ui', () => {
if (ui) ui.show();
else mod.command.message('GUI is unavailable in this mode.');
});
this.destructor = () => {
if (ui) ui.destructor();
};
};
Схема содержит key, name, type; в текущей реализации поддерживаются bool, select, number, range, string. Дополнительные параметры зависят от элемента управления, например min/max для числовых значений. Событие update передает весь объект после изменения поля. Методы show(), hide(), close(), update(settings) управляют окном и его значениями. При выгрузке вызовите destructor().
Собственное окно
new Host(mod, file, options, createWindow = true, rootFolder = null) загружает локальный HTML относительно папки модуля или указанного корня. options передаются BrowserWindow. Методы: show, hide, close, send(name, ...args), destructor. Host — EventEmitter: on(name, callback) принимает события от окна.
На стороне окна new Renderer() из tera-mod-ui предоставляет send, события on, а также minimize, maximize, close, destructor. Это обмен между главным процессом Toolbox и renderer через IPC, а не веб-сервер.
// In a local window script:
const { Renderer } = require('tera-mod-ui');
const renderer = new Renderer();
renderer.on('status', (text) => {
document.querySelector('#status').textContent = text;
});
renderer.send('ready');
В текущем Host включена интеграция Node.js и отключена изоляция контекста. Загружайте собственные локальные страницы, проверяйте данные сообщений и не вставляйте непроверенный HTML. Для обычных настроек готовый Settings требует меньше кода.
Источники: node_modules/tera-mod-ui/{index,settings,host,renderer}.js и интерфейс settings_ui.