fix: address PR review

- Guard node.properties before writing overrides (??= initialization).
- Resolve override key via widget.slotName ?? widget.name so promoted
  (subgraph input) widgets match the same key used at write time.
  buildWidgetMenuItem writes under the LiteGraph widget.name, which for
  promoted widgets is the subgraph input slot name; SafeWidgetData.name
  is the interior widget name and slotName is the subgraph slot name,
  so the read side has to prefer slotName when present.
- i18n: route all new menu/prompt strings through t() and add
  widgetGridOverrides entries in locales/en/main.json.
This commit is contained in:
Glary-Bot
2026-05-13 02:09:16 +00:00
committed by Connor Byrne
parent bc966a39b7
commit 5bf8ea01d5
3 changed files with 22 additions and 11 deletions

View File

@@ -1,3 +1,4 @@
import { t } from '@/i18n'
import type { IContextMenuValue } from '@/lib/litegraph/src/interfaces'
import type { LGraphNode } from '@/lib/litegraph/src/LGraphNode'
import { useVueNodeLifecycle } from '@/composables/graph/useVueNodeLifecycle'
@@ -5,8 +6,7 @@ import { app } from '@/scripts/app'
import { useExtensionService } from '@/services/extensionService'
const PROPERTY_KEY = 'gridOverrides'
const PROMPT_LABEL =
'Grid row size (e.g. 200px, minmax(150px, 300px), 1fr, auto)'
const DEFAULT_PROMPT_VALUE = '200px'
type GridOverrides = Record<string, string>
@@ -17,6 +17,7 @@ function readOverrides(node: LGraphNode): GridOverrides {
}
function writeOverrides(node: LGraphNode, next: GridOverrides): void {
node.properties ??= {}
if (Object.keys(next).length === 0) {
delete node.properties[PROPERTY_KEY]
} else {
@@ -35,7 +36,7 @@ function promptForRowSize(
current: string,
onSubmit: (value: string) => void
): void {
const input = window.prompt(PROMPT_LABEL, current)
const input = window.prompt(t('widgetGridOverrides.prompt'), current)
if (input == null) return
const trimmed = input.trim()
if (trimmed.length === 0) return
@@ -66,28 +67,28 @@ function buildWidgetMenuItem(
const current = overrides[widgetName]
const label = current
? `${widgetName}${current}`
: `${widgetName}(auto)`
: `${widgetName}${t('widgetGridOverrides.auto')}`
return {
content: label,
has_submenu: true,
callback: () => {
promptForRowSize(current ?? '200px', (value) =>
promptForRowSize(current ?? DEFAULT_PROMPT_VALUE, (value) =>
setOverride(node, widgetName, value)
)
},
submenu: {
options: [
{
content: 'Set size…',
content: t('widgetGridOverrides.setSize'),
callback: () => {
promptForRowSize(current ?? '200px', (value) =>
promptForRowSize(current ?? DEFAULT_PROMPT_VALUE, (value) =>
setOverride(node, widgetName, value)
)
}
},
{
content: 'Clear override',
content: t('widgetGridOverrides.clearOverride'),
disabled: !current,
callback: () => clearOverride(node, widgetName)
}
@@ -111,7 +112,7 @@ useExtensionService().registerExtension({
if (hasAny) {
widgetItems.push(null, {
content: 'Clear all overrides',
content: t('widgetGridOverrides.clearAll'),
callback: () => writeOverrides(node, {})
})
}
@@ -119,7 +120,7 @@ useExtensionService().registerExtension({
return [
null,
{
content: 'Widget Grid Sizes',
content: t('widgetGridOverrides.menuLabel'),
has_submenu: true,
callback: () => {},
submenu: {

View File

@@ -3816,5 +3816,13 @@
"training": "Training…",
"processingVideo": "Processing video…",
"running": "Running…"
},
"widgetGridOverrides": {
"menuLabel": "Widget Grid Sizes",
"setSize": "Set size…",
"clearOverride": "Clear override",
"clearAll": "Clear all overrides",
"auto": "(auto)",
"prompt": "Grid row size (e.g. 200px, minmax(150px, 300px), 1fr, auto)"
}
}

View File

@@ -51,6 +51,7 @@ interface ProcessedWidget {
hidden: boolean
id: string
name: string
slotName?: string
renderKey: string
simplified: SimplifiedWidget
tooltipConfig: TooltipOptions
@@ -346,6 +347,7 @@ export function computeProcessedWidgets({
hidden: mergedOptions.hidden ?? false,
id: String(bareWidgetId),
name: widget.name,
slotName: widget.slotName,
renderKey,
type: widget.type,
vueComponent,
@@ -416,7 +418,7 @@ export function useProcessedWidgets(
const overrides = nodeDataGetter()?.gridOverrides
return visibleWidgets.value
.map((w) => {
const override = overrides?.[w.name]
const override = overrides?.[w.slotName ?? w.name]
if (override) return override
return shouldExpand(w.type) || w.hasLayoutSize ? 'auto' : 'min-content'
})