Fix LGraph attach/detach canvas silently fails (#986)

Attach would allow duplicate entries.
Detach left the canvas.graph property set, if list_of_graphcanvas was
not set.
This commit is contained in:
filtered
2025-05-01 04:10:45 +10:00
committed by GitHub
parent 2f0e3d35d3
commit c695b2e2bd

View File

@@ -288,29 +288,32 @@ export class LGraph implements LinkNetwork, Serialisable<SerialisableGraph> {
/**
* Attach Canvas to this graph
*/
attachCanvas(graphcanvas: LGraphCanvas): void {
if (graphcanvas.constructor != LGraphCanvas)
throw "attachCanvas expects a LGraphCanvas instance"
if (graphcanvas.graph != this)
graphcanvas.graph?.detachCanvas(graphcanvas)
attachCanvas(canvas: LGraphCanvas): void {
if (!(canvas instanceof LGraphCanvas)) {
throw new TypeError("attachCanvas expects an LGraphCanvas instance")
}
graphcanvas.graph = this
this.list_of_graphcanvas ??= []
if (!this.list_of_graphcanvas.includes(canvas)) {
this.list_of_graphcanvas.push(canvas)
}
this.list_of_graphcanvas ||= []
this.list_of_graphcanvas.push(graphcanvas)
if (canvas.graph === this) return
canvas.graph?.detachCanvas(canvas)
canvas.graph = this
}
/**
* Detach Canvas from this graph
*/
detachCanvas(graphcanvas: LGraphCanvas): void {
if (!this.list_of_graphcanvas) return
const pos = this.list_of_graphcanvas.indexOf(graphcanvas)
if (pos == -1) return
graphcanvas.graph = null
this.list_of_graphcanvas.splice(pos, 1)
detachCanvas(canvas: LGraphCanvas): void {
canvas.graph = null
const canvases = this.list_of_graphcanvas
if (canvases) {
const pos = canvases.indexOf(canvas)
if (pos !== -1) canvases.splice(pos, 1)
}
}
/**