Files

94 lines
3.0 KiB
TypeScript

import dtCore, { nodePackVersion } from "./ComfyUI-DrawThings-gRPC.js"
import controlNetNode from "./controlnet.js"
import dtModelNodes from "./dtModelNodes.js"
import dtPrompt from "./dtPromptNode.js"
import loraNode from "./lora.js"
import dtWidgets from "./widgets.js"
import type { ComfyApp, ComfyExtension } from "@comfyorg/comfyui-frontend-types";
// @ts-ignore
import { app } from "../../scripts/app.js";
const modules: ComfyExtension[] = [dtCore, dtPrompt, dtModelNodes, /* dtDynamicInputs, */ dtWidgets, loraNode, controlNetNode]
// different features of the nodepack extension are implemented in different modules
// here we combine them and register a single extension
app.registerExtension({
name: "DrawThings-gRPC",
getCustomWidgets(...args: any[]) {
return dtCore.getCustomWidgets ? dtCore.getCustomWidgets.apply(dtCore, args as any) : {}
},
beforeConfigureGraph(...args: any[]) {
for (const module of modules) {
try { module.beforeConfigureGraph?.apply(module, args as any) }
catch (e) {
console.error(`Error in ${module.name} beforeConfigureGraph:`, e)
}
}
},
beforeRegisterNodeDef(...args: any[]) {
for (const module of modules) {
try { module.beforeRegisterNodeDef?.apply(module, args as any) }
catch (e) {
console.error(`Error in ${module.name} beforeConfigureGraph:`, e)
}
}
},
afterConfigureGraph(...args: any[]) {
for (const module of modules) {
try { module.afterConfigureGraph?.apply(module, args as any) }
catch (e) {
console.error(`Error in ${module.name} afterConfigureGraph:`, e)
}
}
},
setup(...args: any[]) {
for (const module of modules) {
try { module.setup?.apply(module, args as any) }
catch (e) {
console.error(`Error in ${module.name} beforeConfigureGraph:`, e)
}
}
injectCss("extensions/drawthings-grpc/drawThings.css")
},
settings: modules.flatMap(m => m.settings ?? []),
aboutPageBadges: [
{
label: `DrawThings-gRPC v${nodePackVersion}`,
url: 'https://github.com/Jokimbe/ComfyUI-DrawThings-gRPC',
icon: 'dt-grpc-about-badge-logo'
}
],
})
/**
* Injects CSS into the page with a promise when complete.
* This was copied from rgthree
*
*/
export function injectCss(href: string) {
if (document.querySelector(`link[href^="${href}"]`)) {
return Promise.resolve()
}
return new Promise<void>((resolve) => {
const link = document.createElement("link")
link.setAttribute("rel", "stylesheet")
link.setAttribute("type", "text/css")
const timeout = setTimeout(resolve, 1000)
link.addEventListener("load", (e) => {
clearInterval(timeout)
resolve()
})
link.href = href
document.head.appendChild(link)
})
}