Update static/js/08-settings.js

This commit is contained in:
dev 2026-11-02 04:42:25 +00:00
parent 13b3564b84
commit 20af884e7e

View File

@ -53,15 +53,7 @@ Glow.cloneSettingsState = source => {
String(value.presence_mode || "").toLowerCase()
)
? String(value.presence_mode).toLowerCase()
: "online",
dm_layout_mode:
value.dm_layout_mode === "compact"
? "compact"
: "cards",
show_presence_badge:
typeof value.show_presence_badge === "boolean"
? value.show_presence_badge
: Glow.state.profilePresenceBadgeVisible !== false
: "online"
};
};
@ -70,7 +62,7 @@ Glow.initializeSettingsDraft = settings => {
Glow.state.settings = saved;
Glow.state.settingsSaved = saved;
Glow.state.settingsDraft = Glow.cloneSettingsState(saved);
Glow.clearSettingsDirty();
Glow.clearSettingsDirty?.();
};
Glow.previewSettingsDraft = () => {
@ -78,8 +70,6 @@ Glow.previewSettingsDraft = () => {
Glow.applyAccentColor(draft.accent_color);
Glow.applyThemeMode(draft.theme_mode);
Glow.applyCustomCss(draft.custom_css || "");
Glow.saveDmLayoutPreference(draft.dm_layout_mode || "cards");
Glow.state.profilePresenceBadgeVisible = draft.show_presence_badge !== false;
};
Glow.updateSettingsDraft = patch => {
@ -89,7 +79,7 @@ Glow.updateSettingsDraft = patch => {
...patch
};
Glow.previewSettingsDraft();
Glow.markSettingsDirty();
Glow.markSettingsDirty?.();
};
Glow.syncSettingsSavePanel = () => {
@ -98,7 +88,7 @@ Glow.syncSettingsSavePanel = () => {
const shouldShow =
Glow.state.activeView === "settings" &&
Glow.isSettingsDirty();
Glow.isSettingsDirty?.();
panel.classList.toggle("hidden", !shouldShow);
@ -135,10 +125,7 @@ Glow.saveSettingsDraft = async () => {
presence_mode:
["online", "silent", "focus", "dnd"].includes(draft.presence_mode)
? draft.presence_mode
: "online",
dm_layout_mode:
draft.dm_layout_mode === "compact" ? "compact" : "cards",
show_presence_badge: draft.show_presence_badge !== false
: "online"
};
const data = await Glow.apiUpdateMySettings(payload);
@ -151,7 +138,7 @@ Glow.saveSettingsDraft = async () => {
Glow.state.settingsSaved = Glow.cloneSettingsState(merged);
Glow.state.settingsDraft = Glow.cloneSettingsState(merged);
Glow.previewSettingsDraft();
Glow.clearSettingsDirty();
Glow.clearSettingsDirty?.();
if (Glow.state.currentUser) {
Glow.state.currentUser.presence_mode =
@ -166,59 +153,22 @@ Glow.discardSettingsDraft = () => {
const saved = Glow.state.settingsSaved || Glow.cloneSettingsState({});
Glow.state.settingsDraft = Glow.cloneSettingsState(saved);
Glow.previewSettingsDraft();
Glow.clearSettingsDirty();
Glow.clearSettingsDirty?.();
if (Glow.state.activeView === "settings") {
Glow.renderSettingsView();
}
};
Glow.closeSettingsViewRequested = async () => {
if (!Glow.isSettingsDirty()) {
await Glow.openFeed?.();
return true;
}
const values = await Glow.openDialog({
title: "Unsaved settings changes",
body: "You have unsaved settings changes. Save them before leaving?",
confirmText: "Save and leave",
cancelText: "Stay"
});
if (values === null) {
return false;
}
try {
await Glow.saveSettingsDraft();
await Glow.openFeed?.();
return true;
} catch (error) {
Glow.showToast(error.message || "Could not save settings.", "error");
return false;
}
};
Glow.loadMySettings = async () => {
try {
const data = await Glow.apiGetMySettings();
const base = Glow.cloneSettingsState({
...(data.settings || {}),
dm_layout_mode:
data.settings?.dm_layout_mode || Glow.loadDmLayoutPreference(),
show_presence_badge:
typeof data.settings?.show_presence_badge === "boolean"
? data.settings.show_presence_badge
: Glow.state.profilePresenceBadgeVisible !== false
});
const base = Glow.cloneSettingsState(data.settings || {});
Glow.initializeSettingsDraft(base);
Glow.previewSettingsDraft();
} catch (_) {
const fallback = Glow.cloneSettingsState({
theme_mode: localStorage.getItem("glow_theme_mode") || "dark",
accent_color: Glow.state.accentColor,
dm_layout_mode: Glow.loadDmLayoutPreference(),
show_presence_badge: Glow.state.profilePresenceBadgeVisible !== false,
profile_visibility: "public",
last_active_visibility: "everyone",
presence_mode: "online"
@ -359,6 +309,7 @@ Glow.toggleHeaderMenu = () => {
Glow.openSettings = async () => {
Glow.state.activeView = "settings";
Glow.updateViewUI();
if (!Glow.state.settingsSaved && Glow.state.currentUser) {
await Glow.loadMySettings();
} else if (!Glow.state.settingsDraft) {
@ -367,6 +318,7 @@ Glow.openSettings = async () => {
);
Glow.previewSettingsDraft();
}
Glow.renderSettingsView();
Glow.syncSettingsSavePanel();
};
@ -501,35 +453,6 @@ Glow.renderSettingsView = () => {
resetNameColor
);
const dmLayout = Glow.renderChoicePills({
label: "DM layout",
value: draft.dm_layout_mode || "cards",
options: [
{ value: "cards", label: "Cards" },
{ value: "compact", label: "Compact" }
],
onChange: value => {
Glow.updateSettingsDraft({ dm_layout_mode: value });
Glow.loadDms?.().catch(() => {});
Glow.renderSettingsView();
}
});
const presenceBadge = Glow.renderChoicePills({
label: "Profile presence badge",
value: draft.show_presence_badge === false ? "hidden" : "shown",
options: [
{ value: "shown", label: "Shown" },
{ value: "hidden", label: "Hidden" }
],
onChange: value => {
Glow.updateSettingsDraft({
show_presence_badge: value !== "hidden"
});
Glow.renderSettingsView();
}
});
const profileVisibility = Glow.renderChoicePills({
label: "Profile visibility",
value: draft.profile_visibility || "public",
@ -583,8 +506,6 @@ Glow.renderSettingsView = () => {
iTitle,
iText,
nameColorWrap,
dmLayout,
presenceBadge,
profileVisibility,
lastActiveVisibility,
presenceMode
@ -701,7 +622,8 @@ Glow.renderSettingsView = () => {
bannerLabel.append(bannerInput);
bannerWrap.append(bannerLabel);
profileVisuals.append(pvTitle, pvText, backgroundWrap, bannerLabel);
profileVisuals.append(pvTitle, pvText, backgroundWrap, bannerWrap);
const cssSection = document.createElement("section");
cssSection.className = "settings-section";
@ -781,7 +703,7 @@ Glow.els.settingsSaveButton?.addEventListener("click", async () => {
});
Glow.els.settingsCloseButton?.addEventListener("click", async () => {
if (!Glow.isSettingsDirty()) {
if (!Glow.isSettingsDirty?.()) {
await Glow.openFeed?.();
return;
}