diff --git a/main.py b/main.py
index 5ff5190..4547521 100644
--- a/main.py
+++ b/main.py
@@ -662,6 +662,10 @@ async def update_settings(
status_code=status.HTTP_403_FORBIDDEN, detail="Admin access required"
)
+ # Preserve existing GitHub token when the form submits an empty value.
+ if not github_token.strip():
+ github_token = get_setting(GITHUB_TOKEN, "")
+
set_setting(DISCORD_WEBHOOK_URL, discord_webhook_url)
set_setting(GITHUB_TOKEN, github_token)
set_setting(SKIP_SELF_UPDATE, "true" if skip_self_update else "false")
diff --git a/templates/settings.html b/templates/settings.html
index 727d2a4..ce36cb7 100644
--- a/templates/settings.html
+++ b/templates/settings.html
@@ -134,13 +134,19 @@
Discord Webhook Setup
if (settingsForm && typeof window.AjaxLoader !== 'undefined') {
settingsForm.addEventListener('submit', function(e) {
AjaxLoader.show('Saving settings...');
-
- // Disable form elements
- const formElements = settingsForm.querySelectorAll('input, button');
- formElements.forEach(element => {
- element.disabled = true;
+
+ // Keep inputs submitted; make them read-only while the request goes out.
+ const inputs = settingsForm.querySelectorAll('input');
+ inputs.forEach(element => {
+ element.readOnly = true;
+ });
+
+ // Disable buttons to prevent double-submit.
+ const buttons = settingsForm.querySelectorAll('button');
+ buttons.forEach(button => {
+ button.disabled = true;
});
-
+
// Update button text
if (settingsBtn) {
settingsBtn.innerHTML = 'Saving...';
@@ -149,4 +155,4 @@ Discord Webhook Setup
}
});
-{% endblock %}
\ No newline at end of file
+{% endblock %}