123 lines
5.3 KiB
JavaScript
123 lines
5.3 KiB
JavaScript
import { createCheckboxSetting, createNumberSetting } from "../ui/buttonHelpers.js";
|
|
|
|
export function renderSettingsSection(extension) {
|
|
const settingsSection = document.createElement("div");
|
|
settingsSection.style.cssText = "border-top: 1px solid var(--dist-divider, #444); margin-bottom: 10px;";
|
|
|
|
const settingsToggleArea = document.createElement("div");
|
|
settingsToggleArea.style.cssText = "padding: 16.5px 0; cursor: pointer; user-select: none;";
|
|
|
|
const settingsHeader = document.createElement("div");
|
|
settingsHeader.style.cssText = "display: flex; align-items: center; justify-content: space-between;";
|
|
|
|
const workerSettingsTitle = document.createElement("h4");
|
|
workerSettingsTitle.textContent = "Settings";
|
|
workerSettingsTitle.style.cssText = "margin: 0; font-size: 14px;";
|
|
|
|
const workerSettingsToggle = document.createElement("span");
|
|
workerSettingsToggle.textContent = "▶";
|
|
workerSettingsToggle.style.cssText =
|
|
"font-size: 12px; color: var(--dist-settings-arrow, #888); transition: all 0.2s ease;";
|
|
|
|
settingsHeader.appendChild(workerSettingsTitle);
|
|
settingsHeader.appendChild(workerSettingsToggle);
|
|
settingsToggleArea.appendChild(settingsHeader);
|
|
|
|
settingsToggleArea.onmouseover = () => {
|
|
workerSettingsToggle.style.color = "var(--dist-settings-arrow-hover, #fff)";
|
|
};
|
|
settingsToggleArea.onmouseout = () => {
|
|
workerSettingsToggle.style.color = "var(--dist-settings-arrow, #888)";
|
|
};
|
|
|
|
const settingsSeparator = document.createElement("div");
|
|
settingsSeparator.style.cssText = "border-bottom: 1px solid var(--dist-divider, #444); margin: 0;";
|
|
|
|
const settingsContent = document.createElement("div");
|
|
settingsContent.style.cssText =
|
|
"max-height: 0; overflow: hidden; opacity: 0; transition: max-height 0.3s ease, opacity 0.3s ease;";
|
|
|
|
const settingsDiv = document.createElement("div");
|
|
settingsDiv.style.cssText =
|
|
"display: grid; grid-template-columns: 1fr auto; row-gap: 10px; column-gap: 10px; padding-top: 10px; align-items: center;";
|
|
|
|
let settingsExpanded = false;
|
|
settingsToggleArea.onclick = () => {
|
|
settingsExpanded = !settingsExpanded;
|
|
if (settingsExpanded) {
|
|
settingsContent.style.maxHeight = "200px";
|
|
settingsContent.style.opacity = "1";
|
|
workerSettingsToggle.style.transform = "rotate(90deg)";
|
|
settingsSeparator.style.display = "none";
|
|
} else {
|
|
settingsContent.style.maxHeight = "0";
|
|
settingsContent.style.opacity = "0";
|
|
workerSettingsToggle.style.transform = "rotate(0deg)";
|
|
settingsSeparator.style.display = "block";
|
|
}
|
|
};
|
|
|
|
const generalLabel = document.createElement("div");
|
|
generalLabel.textContent = "GENERAL";
|
|
generalLabel.style.cssText =
|
|
"grid-column: 1 / span 2; font-size: 11px; color: var(--dist-muted-text, #888); letter-spacing: 0.06em; padding-top: 2px;";
|
|
|
|
const timeoutsLabel = document.createElement("div");
|
|
timeoutsLabel.textContent = "TIMEOUTS";
|
|
timeoutsLabel.style.cssText =
|
|
"grid-column: 1 / span 2; font-size: 11px; color: var(--dist-muted-text, #888); letter-spacing: 0.06em; padding-top: 4px;";
|
|
|
|
settingsDiv.appendChild(generalLabel);
|
|
settingsDiv.appendChild(
|
|
createCheckboxSetting(
|
|
"setting-debug",
|
|
"Debug Mode",
|
|
"Enable verbose logging in the browser console and ComfyUI server output.",
|
|
extension.config?.settings?.debug || false,
|
|
(event) => extension._updateSetting("debug", event.target.checked)
|
|
)
|
|
);
|
|
settingsDiv.appendChild(
|
|
createCheckboxSetting(
|
|
"setting-auto-launch",
|
|
"Auto-launch Local Workers on Startup",
|
|
"Start local worker processes automatically when the master starts.",
|
|
extension.config?.settings?.auto_launch_workers || false,
|
|
(event) => extension._updateSetting("auto_launch_workers", event.target.checked)
|
|
)
|
|
);
|
|
settingsDiv.appendChild(
|
|
createCheckboxSetting(
|
|
"setting-stop-on-exit",
|
|
"Stop Local Workers on Master Exit",
|
|
"Stop local worker processes automatically when the master exits.",
|
|
extension.config?.settings?.stop_workers_on_master_exit !== false,
|
|
(event) => extension._updateSetting("stop_workers_on_master_exit", event.target.checked)
|
|
)
|
|
);
|
|
settingsDiv.appendChild(timeoutsLabel);
|
|
settingsDiv.appendChild(
|
|
createNumberSetting(
|
|
"setting-worker-timeout",
|
|
"Worker Timeout",
|
|
"Maximum result-wait and heartbeat inactivity period before recovery begins. Busy workers may receive additional grace. Default: 60 seconds.",
|
|
extension.config?.settings?.worker_timeout_seconds ?? 60,
|
|
10,
|
|
1,
|
|
(event) => {
|
|
const value = parseInt(event.target.value, 10);
|
|
if (!Number.isFinite(value) || value <= 0) {
|
|
return;
|
|
}
|
|
extension._updateSetting("worker_timeout_seconds", value);
|
|
}
|
|
)
|
|
);
|
|
|
|
settingsContent.appendChild(settingsDiv);
|
|
settingsSection.appendChild(settingsToggleArea);
|
|
settingsSection.appendChild(settingsSeparator);
|
|
settingsSection.appendChild(settingsContent);
|
|
return settingsSection;
|
|
}
|