minor UI tweaks
This commit is contained in:
@@ -3,6 +3,9 @@ const abortBtn = document.getElementById("abortBtn");
|
||||
const taskSelect = document.getElementById("taskSelect");
|
||||
const envSelect = document.getElementById("envSelect");
|
||||
const profileSelect = document.getElementById("profileSelect");
|
||||
const envProfileSummary = document.getElementById("envProfileSummary");
|
||||
const envSummaryValue = document.getElementById("envSummaryValue");
|
||||
const profileSummaryValue = document.getElementById("profileSummaryValue");
|
||||
const customTaskBtn = document.getElementById("customTaskBtn");
|
||||
const normalTaskBtn = document.getElementById("normalTaskBtn");
|
||||
const customTaskInput = document.getElementById("customTaskInput");
|
||||
@@ -67,6 +70,7 @@ const state = {
|
||||
selectedEnvId: "",
|
||||
selectedProfileId: "",
|
||||
alwaysShowOutput: false,
|
||||
alwaysUseDefaultEnvProfile: false,
|
||||
activeTabId: null,
|
||||
pendingConfigRefresh: false,
|
||||
customTaskMode: false,
|
||||
@@ -682,6 +686,46 @@ function resolveThemeForPopup(baseTheme) {
|
||||
return baseTheme || "system";
|
||||
}
|
||||
|
||||
function resolveAppearanceToggleValue(value, fallback) {
|
||||
if (value === "enabled") return true;
|
||||
if (value === "disabled") return false;
|
||||
if (value === "inherit" || value === null || value === undefined) {
|
||||
return Boolean(fallback);
|
||||
}
|
||||
if (typeof value === "boolean") return value;
|
||||
return Boolean(fallback);
|
||||
}
|
||||
|
||||
function resolveAlwaysUseDefaultEnvProfile(baseSetting, workspace, site) {
|
||||
const resolvedBase = resolveAppearanceToggleValue(baseSetting, false);
|
||||
const workspaceResolved = resolveAppearanceToggleValue(
|
||||
workspace?.alwaysUseDefaultEnvProfile,
|
||||
resolvedBase
|
||||
);
|
||||
return resolveAppearanceToggleValue(
|
||||
site?.alwaysUseDefaultEnvProfile,
|
||||
workspaceResolved
|
||||
);
|
||||
}
|
||||
|
||||
function updateEnvProfileSummary() {
|
||||
if (!envSummaryValue || !profileSummaryValue) return;
|
||||
const env = getSelectedEnv();
|
||||
const profile = getSelectedProfile();
|
||||
envSummaryValue.textContent = env ? env.name || "Default" : "None";
|
||||
profileSummaryValue.textContent = profile ? profile.name || "Default" : "None";
|
||||
}
|
||||
|
||||
function applyAlwaysUseDefaultEnvProfileState() {
|
||||
document.body.classList.toggle(
|
||||
"always-default-env-profile",
|
||||
state.alwaysUseDefaultEnvProfile
|
||||
);
|
||||
updateEnvSelectState();
|
||||
updateProfileSelectState();
|
||||
updateEnvProfileSummary();
|
||||
}
|
||||
|
||||
function setAnalyzing(isAnalyzing) {
|
||||
state.isAnalyzing = isAnalyzing;
|
||||
runBtn.disabled = isAnalyzing;
|
||||
@@ -752,6 +796,8 @@ function setCustomTaskMode(enabled, { persist = true } = {}) {
|
||||
});
|
||||
}
|
||||
updatePromptCount();
|
||||
updateEnvSelectState();
|
||||
updateProfileSelectState();
|
||||
if (persist) {
|
||||
void persistCustomTaskState();
|
||||
}
|
||||
@@ -901,6 +947,7 @@ function renderEnvironments(envs) {
|
||||
option.value = "";
|
||||
envSelect.appendChild(option);
|
||||
updateEnvSelectState();
|
||||
updateEnvProfileSummary();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -911,6 +958,7 @@ function renderEnvironments(envs) {
|
||||
envSelect.appendChild(option);
|
||||
}
|
||||
updateEnvSelectState();
|
||||
updateEnvProfileSummary();
|
||||
}
|
||||
|
||||
function updateTaskSelectState() {
|
||||
@@ -920,7 +968,10 @@ function updateTaskSelectState() {
|
||||
|
||||
function updateEnvSelectState() {
|
||||
const hasEnvs = state.envs.length > 0;
|
||||
envSelect.disabled = state.isAnalyzing || !hasEnvs;
|
||||
envSelect.disabled =
|
||||
state.isAnalyzing ||
|
||||
!hasEnvs ||
|
||||
(state.alwaysUseDefaultEnvProfile && !state.customTaskMode);
|
||||
}
|
||||
|
||||
function renderProfiles(profiles) {
|
||||
@@ -933,6 +984,7 @@ function renderProfiles(profiles) {
|
||||
option.value = "";
|
||||
profileSelect.appendChild(option);
|
||||
updateProfileSelectState();
|
||||
updateEnvProfileSummary();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -943,11 +995,15 @@ function renderProfiles(profiles) {
|
||||
profileSelect.appendChild(option);
|
||||
}
|
||||
updateProfileSelectState();
|
||||
updateEnvProfileSummary();
|
||||
}
|
||||
|
||||
function updateProfileSelectState() {
|
||||
const hasProfiles = state.profiles.length > 0;
|
||||
profileSelect.disabled = state.isAnalyzing || !hasProfiles;
|
||||
profileSelect.disabled =
|
||||
state.isAnalyzing ||
|
||||
!hasProfiles ||
|
||||
(state.alwaysUseDefaultEnvProfile && !state.customTaskMode);
|
||||
}
|
||||
|
||||
function getTaskDefaultEnvId(task) {
|
||||
@@ -968,6 +1024,7 @@ function setEnvironmentSelection(envId) {
|
||||
}
|
||||
state.selectedEnvId = target;
|
||||
updatePromptCount();
|
||||
updateEnvProfileSummary();
|
||||
}
|
||||
|
||||
function setProfileSelection(profileId) {
|
||||
@@ -980,6 +1037,7 @@ function setProfileSelection(profileId) {
|
||||
}
|
||||
state.selectedProfileId = target;
|
||||
updatePromptCount();
|
||||
updateEnvProfileSummary();
|
||||
}
|
||||
|
||||
function selectTask(taskId, { resetEnv } = { resetEnv: false }) {
|
||||
@@ -1105,6 +1163,7 @@ async function loadConfig() {
|
||||
"sites",
|
||||
"theme",
|
||||
"alwaysShowOutput",
|
||||
"alwaysUseDefaultEnvProfile",
|
||||
LAST_TASK_KEY,
|
||||
LAST_ENV_KEY,
|
||||
LAST_PROFILE_KEY,
|
||||
@@ -1156,8 +1215,14 @@ async function loadConfig() {
|
||||
state.globalTheme = stored.theme;
|
||||
}
|
||||
state.alwaysShowOutput = Boolean(stored.alwaysShowOutput);
|
||||
state.alwaysUseDefaultEnvProfile = resolveAlwaysUseDefaultEnvProfile(
|
||||
stored.alwaysUseDefaultEnvProfile,
|
||||
activeWorkspace,
|
||||
activeSite
|
||||
);
|
||||
applyTheme(resolveThemeForPopup(state.globalTheme));
|
||||
updateOutputVisibility();
|
||||
applyAlwaysUseDefaultEnvProfileState();
|
||||
state.customTaskMode = Boolean(stored[CUSTOM_TASK_MODE_KEY]);
|
||||
state.customTaskText = stored[CUSTOM_TASK_TEXT_KEY] || "";
|
||||
|
||||
@@ -1205,22 +1270,24 @@ async function loadConfig() {
|
||||
const initialTaskId = effectiveTasks.some((task) => task.id === storedTaskId)
|
||||
? storedTaskId
|
||||
: effectiveTasks[0].id;
|
||||
selectTask(initialTaskId, { resetEnv: false });
|
||||
selectTask(initialTaskId, { resetEnv: state.alwaysUseDefaultEnvProfile });
|
||||
|
||||
const task = effectiveTasks.find((item) => item.id === initialTaskId);
|
||||
if (storedEnvId && effectiveEnvs.some((env) => env.id === storedEnvId)) {
|
||||
setEnvironmentSelection(storedEnvId);
|
||||
} else {
|
||||
setEnvironmentSelection(getTaskDefaultEnvId(task));
|
||||
}
|
||||
if (!state.alwaysUseDefaultEnvProfile) {
|
||||
if (storedEnvId && effectiveEnvs.some((env) => env.id === storedEnvId)) {
|
||||
setEnvironmentSelection(storedEnvId);
|
||||
} else {
|
||||
setEnvironmentSelection(getTaskDefaultEnvId(task));
|
||||
}
|
||||
|
||||
if (
|
||||
storedProfileId &&
|
||||
effectiveProfiles.some((profile) => profile.id === storedProfileId)
|
||||
) {
|
||||
setProfileSelection(storedProfileId);
|
||||
} else {
|
||||
setProfileSelection(getTaskDefaultProfileId(task));
|
||||
if (
|
||||
storedProfileId &&
|
||||
effectiveProfiles.some((profile) => profile.id === storedProfileId)
|
||||
) {
|
||||
setProfileSelection(storedProfileId);
|
||||
} else {
|
||||
setProfileSelection(getTaskDefaultProfileId(task));
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
@@ -1296,6 +1363,10 @@ async function handleAnalyze() {
|
||||
setStatus("Select a task.");
|
||||
return;
|
||||
}
|
||||
if (state.alwaysUseDefaultEnvProfile && !forcedTask && !state.customTaskMode) {
|
||||
setEnvironmentSelection(getTaskDefaultEnvId(task));
|
||||
setProfileSelection(getTaskDefaultProfileId(task));
|
||||
}
|
||||
|
||||
const {
|
||||
apiKeys = [],
|
||||
@@ -1751,7 +1822,13 @@ async function loadShortcutRunRequest() {
|
||||
await persistSelections();
|
||||
state.autoRunPending = false;
|
||||
state.shortcutRunPending = false;
|
||||
void handleExtractAndAnalyze();
|
||||
void handleExtractAndAnalyze().finally(() => {
|
||||
if (!state.alwaysUseDefaultEnvProfile) return;
|
||||
const selectedTask = getSelectedTask();
|
||||
if (!selectedTask) return;
|
||||
setEnvironmentSelection(getTaskDefaultEnvId(selectedTask));
|
||||
setProfileSelection(getTaskDefaultProfileId(selectedTask));
|
||||
});
|
||||
}
|
||||
|
||||
async function loadAutoRunRequest() {
|
||||
@@ -1819,7 +1896,8 @@ chrome.storage.onChanged.addListener((changes) => {
|
||||
"workspaces",
|
||||
"sites",
|
||||
"theme",
|
||||
"alwaysShowOutput"
|
||||
"alwaysShowOutput",
|
||||
"alwaysUseDefaultEnvProfile"
|
||||
];
|
||||
if (configKeys.some((key) => changes[key])) {
|
||||
scheduleConfigRefresh();
|
||||
|
||||
Reference in New Issue
Block a user