Skip to content

Commit e6d649b

Browse files
authored
[Refactor] Convert NodeBadge.vue to composable (#3883)
1 parent b037ba8 commit e6d649b

File tree

3 files changed

+124
-116
lines changed

3 files changed

+124
-116
lines changed

src/components/graph/GraphCanvas.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
class="w-full h-full touch-none"
2828
/>
2929

30-
<NodeBadge />
3130
<NodeTooltip v-if="tooltipEnabled" />
3231
<NodeSearchboxPopover />
3332

@@ -53,7 +52,6 @@ import BottomPanel from '@/components/bottomPanel/BottomPanel.vue'
5352
import SubgraphBreadcrumb from '@/components/breadcrumb/SubgraphBreadcrumb.vue'
5453
import DomWidgets from '@/components/graph/DomWidgets.vue'
5554
import GraphCanvasMenu from '@/components/graph/GraphCanvasMenu.vue'
56-
import NodeBadge from '@/components/graph/NodeBadge.vue'
5755
import NodeTooltip from '@/components/graph/NodeTooltip.vue'
5856
import SelectionOverlay from '@/components/graph/SelectionOverlay.vue'
5957
import SelectionToolbox from '@/components/graph/SelectionToolbox.vue'
@@ -62,6 +60,7 @@ import NodeSearchboxPopover from '@/components/searchbox/NodeSearchBoxPopover.vu
6260
import SideToolbar from '@/components/sidebar/SideToolbar.vue'
6361
import SecondRowWorkflowTabs from '@/components/topbar/SecondRowWorkflowTabs.vue'
6462
import { useChainCallback } from '@/composables/functional/useChainCallback'
63+
import { useNodeBadge } from '@/composables/node/useNodeBadge'
6564
import { useCanvasDrop } from '@/composables/useCanvasDrop'
6665
import { useContextMenuTranslation } from '@/composables/useContextMenuTranslation'
6766
import { useCopy } from '@/composables/useCopy'
@@ -254,6 +253,7 @@ const workflowPersistence = useWorkflowPersistence()
254253
// @ts-expect-error fixme ts strict error
255254
useCanvasDrop(canvasRef)
256255
useLitegraphSettings()
256+
useNodeBadge()
257257
258258
onMounted(async () => {
259259
useGlobalLitegraph()

src/components/graph/NodeBadge.vue

Lines changed: 0 additions & 114 deletions
This file was deleted.
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
import {
2+
BadgePosition,
3+
LGraphBadge,
4+
type LGraphNode
5+
} from '@comfyorg/litegraph'
6+
import _ from 'lodash'
7+
import { computed, onMounted, watch } from 'vue'
8+
9+
import { app } from '@/scripts/app'
10+
import { useExtensionStore } from '@/stores/extensionStore'
11+
import { ComfyNodeDefImpl, useNodeDefStore } from '@/stores/nodeDefStore'
12+
import { useSettingStore } from '@/stores/settingStore'
13+
import { useColorPaletteStore } from '@/stores/workspace/colorPaletteStore'
14+
import { NodeBadgeMode } from '@/types/nodeSource'
15+
16+
/**
17+
* Add LGraphBadge to LGraphNode based on settings.
18+
*
19+
* Following badges are added:
20+
* - Node ID badge
21+
* - Node source badge
22+
* - Node life cycle badge
23+
* - API node credits badge
24+
*/
25+
export const useNodeBadge = () => {
26+
const settingStore = useSettingStore()
27+
const extensionStore = useExtensionStore()
28+
const colorPaletteStore = useColorPaletteStore()
29+
30+
const nodeSourceBadgeMode = computed(
31+
() =>
32+
settingStore.get('Comfy.NodeBadge.NodeSourceBadgeMode') as NodeBadgeMode
33+
)
34+
const nodeIdBadgeMode = computed(
35+
() => settingStore.get('Comfy.NodeBadge.NodeIdBadgeMode') as NodeBadgeMode
36+
)
37+
const nodeLifeCycleBadgeMode = computed(
38+
() =>
39+
settingStore.get(
40+
'Comfy.NodeBadge.NodeLifeCycleBadgeMode'
41+
) as NodeBadgeMode
42+
)
43+
44+
watch([nodeSourceBadgeMode, nodeIdBadgeMode, nodeLifeCycleBadgeMode], () => {
45+
app.graph?.setDirtyCanvas(true, true)
46+
})
47+
48+
const nodeDefStore = useNodeDefStore()
49+
function badgeTextVisible(
50+
nodeDef: ComfyNodeDefImpl | null,
51+
badgeMode: NodeBadgeMode
52+
): boolean {
53+
return !(
54+
badgeMode === NodeBadgeMode.None ||
55+
(nodeDef?.isCoreNode && badgeMode === NodeBadgeMode.HideBuiltIn)
56+
)
57+
}
58+
59+
onMounted(() => {
60+
extensionStore.registerExtension({
61+
name: 'Comfy.NodeBadge',
62+
nodeCreated(node: LGraphNode) {
63+
node.badgePosition = BadgePosition.TopRight
64+
65+
const badge = computed(() => {
66+
const nodeDef = nodeDefStore.fromLGraphNode(node)
67+
return new LGraphBadge({
68+
text: _.truncate(
69+
[
70+
badgeTextVisible(nodeDef, nodeIdBadgeMode.value)
71+
? `#${node.id}`
72+
: '',
73+
badgeTextVisible(nodeDef, nodeLifeCycleBadgeMode.value)
74+
? nodeDef?.nodeLifeCycleBadgeText ?? ''
75+
: '',
76+
badgeTextVisible(nodeDef, nodeSourceBadgeMode.value)
77+
? nodeDef?.nodeSource?.badgeText ?? ''
78+
: ''
79+
]
80+
.filter((s) => s.length > 0)
81+
.join(' '),
82+
{
83+
length: 31
84+
}
85+
),
86+
fgColor:
87+
colorPaletteStore.completedActivePalette.colors.litegraph_base
88+
.BADGE_FG_COLOR,
89+
bgColor:
90+
colorPaletteStore.completedActivePalette.colors.litegraph_base
91+
.BADGE_BG_COLOR
92+
})
93+
})
94+
95+
node.badges.push(() => badge.value)
96+
97+
if (node.constructor.nodeData?.api_node) {
98+
const creditsBadge = computed(() => {
99+
return new LGraphBadge({
100+
text: '',
101+
iconOptions: {
102+
unicode: '\ue96b',
103+
fontFamily: 'PrimeIcons',
104+
color: '#FABC25',
105+
bgColor: '#353535',
106+
fontSize: 8
107+
},
108+
fgColor:
109+
colorPaletteStore.completedActivePalette.colors.litegraph_base
110+
.BADGE_FG_COLOR,
111+
bgColor:
112+
colorPaletteStore.completedActivePalette.colors.litegraph_base
113+
.BADGE_BG_COLOR
114+
})
115+
})
116+
117+
node.badges.push(() => creditsBadge.value)
118+
}
119+
}
120+
})
121+
})
122+
}

0 commit comments

Comments
 (0)