90 lines
2.7 KiB
JavaScript
90 lines
2.7 KiB
JavaScript
import { app } from '../../../scripts/app.js'
|
|
import { ComfyWidgets } from '../../../scripts/widgets.js'
|
|
|
|
app.registerExtension({
|
|
name: 'Mixlab.GPT.ShowTextForGPT',
|
|
async beforeRegisterNodeDef (nodeType, nodeData, app) {
|
|
if (nodeData.name === 'ShowTextForGPT') {
|
|
function populate (text) {
|
|
text = text.filter(t => t && t?.trim())
|
|
|
|
if (this.widgets) {
|
|
// console.log('#ShowTextForGPT',this.widgets)
|
|
// const pos = this.widgets.findIndex(w => w.name === 'text')
|
|
for (let i = 0; i < this.widgets.length; i++) {
|
|
if (this.widgets[i].name == 'show_text')
|
|
this.widgets[i].onRemove?.()
|
|
|
|
}
|
|
this.widgets.length = 2
|
|
}
|
|
|
|
for (let list of text) {
|
|
if (list) {
|
|
// console.log('#####', list)
|
|
const w = ComfyWidgets['STRING'](
|
|
this,
|
|
'show_text',
|
|
['STRING', { multiline: true }],
|
|
app
|
|
).widget
|
|
w.inputEl.readOnly = true
|
|
w.inputEl.style.opacity = 0.6
|
|
|
|
// w.inputEl.style.display='none'
|
|
|
|
try {
|
|
if (typeof list != 'string') {
|
|
let data = JSON.parse(list)
|
|
data = Array.from(data, d => {
|
|
return {
|
|
...d,
|
|
content: decodeURIComponent(d.content)
|
|
}
|
|
})
|
|
list = JSON.stringify(data, null, 2)
|
|
}
|
|
} catch (error) {
|
|
console.log(error)
|
|
}
|
|
|
|
w.value = list
|
|
}
|
|
}
|
|
// console.log('ShowTextForGPT',this.widgets.length)
|
|
requestAnimationFrame(() => {
|
|
if (this) {
|
|
const sz = this.computeSize()
|
|
if (sz[0] < this.size[0]) {
|
|
sz[0] = this.size[0]
|
|
}
|
|
if (sz[1] < this.size[1]) {
|
|
sz[1] = this.size[1]
|
|
}
|
|
this.onResize?.(sz)
|
|
app.graph.setDirtyCanvas(true, false)
|
|
}
|
|
})
|
|
}
|
|
|
|
// When the node is executed we will be sent the input text, display this in the widget
|
|
const onExecuted = nodeType.prototype.onExecuted
|
|
nodeType.prototype.onExecuted = function (message) {
|
|
onExecuted?.apply(this, arguments)
|
|
// console.log('##onExecuted', this, message)
|
|
if (message.text) populate.call(this, message.text)
|
|
}
|
|
|
|
const onConfigure = nodeType.prototype.onConfigure
|
|
nodeType.prototype.onConfigure = function () {
|
|
onConfigure?.apply(this, arguments)
|
|
if (this.widgets_values?.length) {
|
|
populate.call(this, this.widgets_values)
|
|
}
|
|
}
|
|
|
|
this.serialize_widgets = true //需要保存参数
|
|
}
|
|
}
|
|
})
|