Загрузка данных
// Функция, которая выставляет все настройки
async function applyMyDefaults() {
console.log("ESC Auto: Применяю дефолтные настройки...");
// 1. НАПРАВЛЕНИЯ ВРАЩЕНИЯ (ESC 1: Normal, ESC 2: Reversed, ESC 3: Reversed, ESC 4: Normal)
const motorDirections = document.querySelectorAll('select[name="MOTOR_DIRECTION"]');
const targetDirections = ["1", "2", "2", "1"];
motorDirections.forEach((selectElem, index) => {
if (targetDirections[index]) {
selectElem.value = targetDirections[index];
selectElem.dispatchEvent(new Event('change', { bubbles: true }));
}
});
// 2. ВЫПАДАЮЩИЕ СПИСКИ
const selectsMap = {
'COMMUTATION_TIMING': '3', // 15° (Medium)
'DEMAG_COMPENSATION': '2', // Low
'RPM_POWER_SLOPE': '9', // 9x
'BEACON_DELAY': '5', // Infinite
'POWER_RATING': '2', // 2S+
'TEMPERATURE_PROTECTION': '0' // Disabled
};
for (const [name, val] of Object.entries(selectsMap)) {
const el = document.querySelector(`select[name="${name}"]`);
if (el) {
el.value = val;
el.dispatchEvent(new Event('change', { bubbles: true }));
}
}
// 3. ЧЕКБОКСЫ
const checkboxMap = {
'FORCE_EDT_ARM': false,
'BRAKE_ON_STOP': false
};
for (const [name, targetState] of Object.entries(checkboxMap)) {
const el = document.querySelector(`input[name="${name}"][type="checkbox"]`);
if (el && el.checked !== targetState) {
el.click();
}
}
// 4. ПОЛЗУНКИ
const slidersMap = {
'STARTUP_POWER_MIN': '1030',
'STARTUP_POWER_MAX': '1056',
'BEEP_STRENGTH': '0',
'BEACON_STRENGTH': '0',
'BRAKING_STRENGTH': '100'
};
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
for (const [name, val] of Object.entries(slidersMap)) {
const hiddenInput = document.querySelector(`input[name="${name}"][type="hidden"]`);
if (hiddenInput) {
nativeInputValueSetter.call(hiddenInput, val);
hiddenInput.dispatchEvent(new Event('input', { bubbles: true }));
hiddenInput.dispatchEvent(new Event('change', { bubbles: true }));
const sliderContainer = hiddenInput.closest('.input-wrapper');
if (sliderContainer) {
const valueLabel = sliderContainer.querySelector('.input-range__label--value .input-range__label-container');
if (valueLabel) valueLabel.innerText = val;
}
}
}
// Визуальный отклик
const myBtn = document.getElementById('my-custom-default-btn');
if (myBtn) {
const originalColor = myBtn.style.backgroundColor;
myBtn.style.backgroundColor = '#38a169';
myBtn.innerText = 'Применено!';
setTimeout(() => {
myBtn.style.backgroundColor = originalColor;
myBtn.innerText = 'Применить мой шаблон';
}, 1500);
}
}
// Добавление кнопки
function injectCustomButton() {
const buttonBar = document.querySelector('.buttons-right');
// Если панель есть, а нашей кнопки нет — добавляем
if (buttonBar && !document.getElementById('my-custom-default-btn')) {
const btnContainer = document.createElement('div');
btnContainer.className = 'generic-button';
const myBtn = document.createElement('button');
myBtn.type = 'button';
myBtn.id = 'my-custom-default-btn';
myBtn.innerText = 'Применить мой шаблон';
myBtn.style.backgroundColor = '#2b6cb0';
myBtn.style.color = '#ffffff';
myBtn.style.fontWeight = 'bold';
myBtn.addEventListener('click', applyMyDefaults);
btnContainer.appendChild(myBtn);
// Вставляем кнопку первой в списке
buttonBar.insertBefore(btnContainer, buttonBar.firstChild);
console.log("ESC Auto: Кнопка успешно добавлена!");
}
}
// Проверяем интерфейс каждую секунду.
// Это гарантирует, что кнопка появится даже если сайт полностью перерисуется.
setInterval(injectCustomButton, 1000);