microwave/firefox/settings/js/generator.js

162 lines
6.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'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);