firmware/general/package/wifibroadcast-ng/www/script.js

98 lines
2.6 KiB
JavaScript

let configData = { majestic: {}, wfb: {} };
async function loadYAML(url, setter) {
const response = await fetch(url);
const text = await response.text();
setter(jsyaml.load(text));
}
async function uploadYAML(data, location) {
const yamlData = jsyaml.dump(data);
await fetch('/upload', {
method: 'POST',
headers: { 'File-Location': location },
body: yamlData
});
}
async function runCommand(command) {
await fetch('/command', {
method: 'POST',
headers: { 'Run-Command': command }
});
}
if (navigator.userAgent.includes("Android")) {
document.querySelector('.video-section').style.display = 'none';
}
function syncForm(data, formPrefix, mode) {
Object.keys(data).forEach((section) => {
Object.keys(data[section]).forEach((key) => {
const field = document.getElementsByName(formPrefix + '.' + section + '.' + key)[0];
if (!field) {
return;
}
const isCheckbox = field.type === "checkbox";
if (mode === "setup") {
isCheckbox ?
field.checked = data[section][key] === true : field.value = data[section][key];
} else if (mode === "update") {
data[section][key] = isCheckbox ?
field.checked : (isNaN(field.value) ? field.value : Number(field.value));
}
});
});
}
function executeDelay(button, command) {
button.disabled = true;
runCommand(command);
setTimeout(() => {
button.disabled = false;
location.reload();
}, 1000);
}
function addClickListener(buttonId, command, configKey) {
document.getElementById(buttonId).addEventListener('click', function () {
if (configKey && configData[configKey]) {
syncForm(configData[configKey], configKey, "update");
var yamlPath = '/etc/' + configKey + '.yaml';
uploadYAML(configData[configKey], yamlPath);
}
executeDelay(this, command);
});
}
addClickListener('apply-video-button', 'killall -1 majestic', 'majestic');
addClickListener('apply-wfb-button', 'wifibroadcast start', 'wfb');
addClickListener('reset-video-button', 'wifibroadcast resetv');
addClickListener('reset-wfb-button', 'wifibroadcast resetw');
function populateSelect(id, start, end, step) {
const select = document.getElementById(id);
for (let i = start; i <= end; i += step) {
const option = document.createElement('option');
option.value = i;
option.textContent = i;
select.appendChild(option);
}
}
populateSelect('bitrate', 1024, 20480, 1024);
populateSelect('txpower', 1, 58, 1);
populateSelect('wfb_index', 0, 8, 1);
populateSelect('tun_index', 0, 8, 1);
loadYAML('/etc/majestic.yaml', (data) => {
configData.majestic = data;
syncForm(configData.majestic, 'majestic', "setup");
});
loadYAML('/etc/wfb.yaml', (data) => {
configData.wfb = data;
syncForm(configData.wfb, 'wfb', "setup");
});