162 lines
6.4 KiB
JavaScript
162 lines
6.4 KiB
JavaScript
'use strict'
|
||
|
||
/**
|
||
* Генерация HTML-элемента настройки с текстовым полем
|
||
*
|
||
* @param {string} id Настройка
|
||
* @param {string|null} name Ярлык настройки (понятный пользователю)
|
||
*
|
||
* @return {bool} Статус выполнения
|
||
*/
|
||
function text(id, name) {
|
||
if (typeof id === 'string') {
|
||
settings.read(id).then(result => {
|
||
// Инициализация оболочки поля ввода
|
||
let wrap = document.createElement('div');
|
||
wrap.classList.add('setting');
|
||
|
||
// Инициализация ярлыка поля ввода
|
||
let label = document.createElement('label');
|
||
label.innerText = name !== undefined && typeof name === 'string' ? name : id;
|
||
|
||
// Инициализация поля ввода
|
||
let text = document.createElement('input');
|
||
text.setAttribute('id', id);
|
||
text.setAttribute('type', 'text');
|
||
text.value = result[id] ?? '';
|
||
|
||
// Инициализация архитектуры
|
||
wrap.appendChild(label);
|
||
wrap.appendChild(text);
|
||
|
||
// Запись в документ
|
||
document.body.appendChild(wrap);
|
||
|
||
// Инициализация созданного элемента поля ввода
|
||
text = document.getElementById(id);
|
||
|
||
// Инициализация события
|
||
text.addEventListener("change", fn => { settings.write(id, text.value); });
|
||
|
||
return true;
|
||
});
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Генерация HTML-элемента настройки с циферным полем
|
||
*
|
||
* @param {string} id Настройка
|
||
* @param {string|null} name Ярлык настройки (понятный пользователю)
|
||
*
|
||
* @return {bool} Статус выполнения
|
||
*/
|
||
function number(id, name, min = 0, max = 100) {
|
||
if (typeof id === 'string') {
|
||
settings.read(id).then(result => {
|
||
// Инициализация оболочки циферного поля ввода
|
||
let wrap = document.createElement('div');
|
||
wrap.classList.add('setting');
|
||
|
||
// Инициализация ярлыка циферного поля ввода
|
||
let label = document.createElement('label');
|
||
label.innerText = name !== undefined && typeof name === 'string' ? name : id;
|
||
|
||
// Инициализация поля циферного ввода
|
||
let number = document.createElement('input');
|
||
number.setAttribute('id', id);
|
||
number.setAttribute('type', 'number');
|
||
number.min = min;
|
||
number.max = max;
|
||
number.value = result[id] ?? '';
|
||
|
||
// Инициализация архитектуры
|
||
wrap.appendChild(label);
|
||
wrap.appendChild(number);
|
||
|
||
// Запись в документ
|
||
document.body.appendChild(wrap);
|
||
|
||
// Инициализация созданного элемента циферного поля ввода
|
||
number = document.getElementById(id);
|
||
|
||
// Инициализация события
|
||
number.addEventListener("change", fn => { settings.write(id, number.value); });
|
||
|
||
return true;
|
||
});
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Генерация HTML-элемента настройки с кнопкой активации
|
||
*
|
||
* @param {string} id Настройка
|
||
* @param {string|null} name Ярлык настройки (понятный пользователю)
|
||
*
|
||
* @return {bool} Статус выполнения
|
||
*/
|
||
function checkbox(id, name) {
|
||
if (typeof id === 'string') {
|
||
settings.read(id).then(result => {
|
||
// Инициализация оболочки кнопки активации
|
||
let wrap = document.createElement('div');
|
||
wrap.classList.add('setting');
|
||
|
||
// Инициализация ярлыка кнопки активации
|
||
let label = document.createElement('label');
|
||
label.innerText = name !== undefined && typeof name === 'string' ? name : id;
|
||
|
||
// Инициализация кнопки активации (настоящая)
|
||
let checkbox = document.createElement('input');
|
||
checkbox.setAttribute('id', id);
|
||
checkbox.setAttribute('type', 'checkbox');
|
||
checkbox.checked = result[id] === true || result[id] === 1 || result[id] === '1' ? true : false;
|
||
|
||
// Инициализация кнопки активации (видимая)
|
||
let div = document.createElement('div');
|
||
div.setAttribute('id', id + '_button');
|
||
div.classList.add('checkbox');
|
||
div.setAttribute('type', 'button');
|
||
|
||
// Инициализация архитектуры
|
||
wrap.appendChild(label);
|
||
wrap.appendChild(checkbox);
|
||
wrap.appendChild(div);
|
||
|
||
// Запись в документ
|
||
document.body.appendChild(wrap);
|
||
|
||
// Инициализация созданного элемента кнопки активации
|
||
checkbox = document.getElementById(id);
|
||
|
||
// Инициализация событий
|
||
checkbox.addEventListener("change", fn => { settings.write(id, checkbox.checked); });
|
||
document.getElementById(id + '_button').addEventListener("click", fn => { checkbox.checked = checkbox.checked ? false : true; });
|
||
|
||
return true;
|
||
});
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
/**
|
||
* Инициализация
|
||
*/
|
||
function init() {
|
||
checkbox('debug', 'Режим отладки');
|
||
checkbox('autonom', 'Режим автономный');
|
||
number('server_connect_repeats', 'Количество попыток соединения');
|
||
checkbox('instructions', 'Инструкции');
|
||
checkbox('instruction_settings', 'Инструкция по доступу к настройкам');
|
||
checkbox('instruction_killer', 'Инструкция по доступу к удалению сообщений');
|
||
checkbox('instruction_visor', 'Инструкция по доступу к просмотру удалённых сообщений');
|
||
}
|
||
|
||
document.addEventListener("DOMContentLoaded", init);
|