diff --git a/build/litegraph.js b/build/litegraph.js index 7cf799a160..e4e2269210 100644 --- a/build/litegraph.js +++ b/build/litegraph.js @@ -5581,6 +5581,10 @@ LGraphNode.prototype.executeAction = function(action) this.resizing_node.size[0] = LiteGraph.NODE_MIN_WIDTH; } + if (this.resizing_node.onResize) { + this.resizing_node.onResize(this.resizing_node.size); + } + this.canvas.style.cursor = "se-resize"; this.dirty_canvas = true; this.dirty_bgcanvas = true; @@ -10539,11 +10543,13 @@ LGraphNode.prototype.executeAction = function(action) var body_rect = document.body.getBoundingClientRect(); var root_rect = root.getBoundingClientRect(); + if(body_rect.height == 0) + console.error("document.body height is 0. That is dangerous, set html,body { height: 100%; }"); - if (left > body_rect.width - root_rect.width - 10) { + if (body_rect.width && left > body_rect.width - root_rect.width - 10) { left = body_rect.width - root_rect.width - 10; } - if (top > body_rect.height - root_rect.height - 10) { + if (body_rect.height && top > body_rect.height - root_rect.height - 10) { top = body_rect.height - root_rect.height - 10; } } diff --git a/build/litegraph.min.js b/build/litegraph.min.js index 2054e16b35..92bc038e6f 100755 --- a/build/litegraph.min.js +++ b/build/litegraph.min.js @@ -8,240 +8,241 @@ this.visible_links=[];b&&b.attachCanvas(this);this.setCanvas(a);this.clear();d.s b.event=null);var r=document.createElement("div");r.className="litegraph litecontextmenu litemenubar-panel";b.className&&(r.className+=" "+b.className);r.style.minWidth=100;r.style.minHeight=100;r.style.pointerEvents="none";setTimeout(function(){r.style.pointerEvents="auto"},100);r.addEventListener("mouseup",function(a){a.preventDefault();return!0},!0);r.addEventListener("contextmenu",function(a){if(2!=a.button)return!1;a.preventDefault();return!1},!0);r.addEventListener("mousedown",function(a){if(2== a.button)return g.close(),a.preventDefault(),!0},!0);b.scroll_speed||(b.scroll_speed=0.1);r.addEventListener("wheel",d,!0);r.addEventListener("mousewheel",d,!0);this.root=r;b.title&&(f=document.createElement("div"),f.className="litemenu-title",f.innerHTML=b.title,r.appendChild(f));var f=0,h;for(h in a){var c=a.constructor==Array?a[h]:h;null!=c&&c.constructor!==String&&(c=void 0===c.content?String(c):c.content);this.addItem(c,a[h],b);f++}r.addEventListener("mouseleave",function(a){g.lock||(r.closing_timer&& clearTimeout(r.closing_timer),r.closing_timer=setTimeout(g.close.bind(g,a),500))});r.addEventListener("mouseenter",function(a){r.closing_timer&&clearTimeout(r.closing_timer)});h=document;b.event&&(h=b.event.target.ownerDocument);h||(h=document);h.fullscreenElement?h.fullscreenElement.appendChild(r):h.body.appendChild(r);f=b.left||0;h=b.top||0;if(b.event){f=b.event.clientX-10;h=b.event.clientY-10;b.title&&(h-=20);b.parentMenu&&(f=b.parentMenu.root.getBoundingClientRect(),f=f.left+f.width);var c=document.body.getBoundingClientRect(), -k=r.getBoundingClientRect();f>c.width-k.width-10&&(f=c.width-k.width-10);h>c.height-k.height-10&&(h=c.height-k.height-10)}r.style.left=f+"px";r.style.top=h+"px";b.scale&&(r.style.transform="scale("+b.scale+")")}function A(a){this.points=a;this.nearest=this.selected=-1;this.size=null;this.must_update=!0;this.margin=5}var h=B.LiteGraph={VERSION:0.4,CANVAS_GRID_SIZE:10,NODE_TITLE_HEIGHT:30,NODE_TITLE_TEXT_Y:20,NODE_SLOT_HEIGHT:20,NODE_WIDGET_HEIGHT:20,NODE_WIDTH:140,NODE_MIN_WIDTH:50,NODE_COLLAPSED_RADIUS:10, -NODE_COLLAPSED_WIDTH:80,NODE_TITLE_COLOR:"#999",NODE_TEXT_SIZE:14,NODE_TEXT_COLOR:"#AAA",NODE_SUBTEXT_SIZE:12,NODE_DEFAULT_COLOR:"#333",NODE_DEFAULT_BGCOLOR:"#353535",NODE_DEFAULT_BOXCOLOR:"#666",NODE_DEFAULT_SHAPE:"box",DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0.5)",DEFAULT_GROUP_FONT:24,WIDGET_BGCOLOR:"#222",WIDGET_OUTLINE_COLOR:"#666",WIDGET_TEXT_COLOR:"#DDD",WIDGET_SECONDARY_TEXT_COLOR:"#999",LINK_COLOR:"#9A9",EVENT_LINK_COLOR:"#A86",CONNECTING_LINK_COLOR:"#AFA",MAX_NUMBER_OF_NODES:1E3,DEFAULT_POSITION:[100, -100],VALID_SHAPES:["default","box","round","card"],BOX_SHAPE:1,ROUND_SHAPE:2,CIRCLE_SHAPE:3,CARD_SHAPE:4,ARROW_SHAPE:5,INPUT:1,OUTPUT:2,EVENT:-1,ACTION:-1,ALWAYS:0,ON_EVENT:1,NEVER:2,ON_TRIGGER:3,UP:1,DOWN:2,LEFT:3,RIGHT:4,CENTER:5,STRAIGHT_LINK:0,LINEAR_LINK:1,SPLINE_LINK:2,NORMAL_TITLE:0,NO_TITLE:1,TRANSPARENT_TITLE:2,AUTOHIDE_TITLE:3,proxy:null,node_images_path:"",debug:!1,catch_exceptions:!0,throw_errors:!0,allow_scripts:!1,registered_node_types:{},node_types_by_file_extension:{},Nodes:{},searchbox_extras:{}, -registerNodeType:function(a,b){if(!b.prototype)throw"Cannot register a simple object, it must be a class with a prototype";b.type=a;h.debug&&console.log("Node registered: "+a);a.split("/");var d=b.name,g=a.lastIndexOf("/");b.category=a.substr(0,g);b.title||(b.title=d);if(b.prototype)for(var f in n.prototype)b.prototype[f]||(b.prototype[f]=n.prototype[f]);if(g=this.registered_node_types[a])console.log("replacing node type: "+a);else if(Object.hasOwnProperty(b.prototype,"shape")||Object.defineProperty(b.prototype, -"shape",{set:function(a){switch(a){case "default":delete this._shape;break;case "box":this._shape=h.BOX_SHAPE;break;case "round":this._shape=h.ROUND_SHAPE;break;case "circle":this._shape=h.CIRCLE_SHAPE;break;case "card":this._shape=h.CARD_SHAPE;break;default:this._shape=a}},get:function(a){return this._shape},enumerable:!0,configurable:!0}),b.prototype.onPropertyChange&&console.warn("LiteGraph node class "+a+" has onPropertyChange method, it must be called onPropertyChanged with d at the end"),b.supported_extensions)for(f in b.supported_extensions){var r= -b.supported_extensions[f];r&&r.constructor===String&&(this.node_types_by_file_extension[r.toLowerCase()]=b)}this.registered_node_types[a]=b;b.constructor.name&&(this.Nodes[d]=b);if(h.onNodeTypeRegistered)h.onNodeTypeRegistered(a,b);if(g&&h.onNodeTypeReplaced)h.onNodeTypeReplaced(a,b,g)},unregisterNodeType:function(a){var b=a.constructor===String?this.registered_node_types[a]:a;if(!b)throw"node type not found: "+a;delete this.registered_node_types[b.type];b.constructor.name&&delete this.Nodes[b.constructor.name]}, -wrapFunctionAsNode:function(a,b,d,g,f){for(var r=Array(b.length),s="",c=h.getParameterNames(b),k=0;ks&&(s=f.size[0]),c+=f.size[1]+a+h.NODE_TITLE_HEIGHT;b+=s+a}this.setDirtyCanvas(!0,!0)};c.prototype.getTime=function(){return this.globaltime};c.prototype.getFixedTime=function(){return this.fixedtime};c.prototype.getElapsedTime=function(){return this.elapsed_time};c.prototype.sendEventToAllNodes=function(a,b,d){d=d||h.ALWAYS;var g=this._nodes_in_order? -this._nodes_in_order:this._nodes;if(g)for(var f=0,r=g.length;f=h.MAX_NUMBER_OF_NODES)throw"LiteGraph: max number of nodes in a graph reached";null==a.id||-1==a.id?a.id=++this.last_node_id:this.last_node_ida.length||(this._pos[0]=a[0],this._pos[1]=a[1])},get:function(){return this._pos}, -enumerable:!0});this.id=-1;this.type=null;this.inputs=[];this.outputs=[];this.connections=[];this.properties={};this.properties_info=[];this.flags={}};n.prototype.configure=function(a){this.graph&&this.graph._version++;for(var b in a)if("properties"==b)for(var d in a.properties){if(this.properties[d]=a.properties[d],this.onPropertyChanged)this.onPropertyChanged(d,a.properties[d])}else null!=a[b]&&("object"==typeof a[b]?this[b]&&this[b].configure?this[b].configure(a[b]):this[b]=h.cloneObject(a[b], -this[b]):this[b]=a[b]);a.title||(this.title=this.constructor.title);if(this.onConnectionsChange){if(this.inputs)for(d=0;d=this.outputs.length)){var d=this.outputs[a];if(d&&(d._data=b,this.outputs[a].links))for(d=0;d=this.outputs.length)){var d=this.outputs[a]; -if(d&&(d.type=b,this.outputs[a].links))for(d=0;d=this.inputs.length||null==this.inputs[a].link)){var d=this.graph.links[this.inputs[a].link];if(!d)return null;if(!b)return d.data;var g=this.graph.getNodeById(d.origin_id);if(!g)return d.data;if(g.updateOutputData)g.updateOutputData(d.origin_slot);else if(g.onExecute)g.onExecute();return d.data}};n.prototype.getInputDataType= -function(a){if(!this.inputs||a>=this.inputs.length||null==this.inputs[a].link)return null;a=this.graph.links[this.inputs[a].link];if(!a)return null;var b=this.graph.getNodeById(a.origin_id);return b?(a=b.outputs[a.origin_slot])?a.type:null:a.type};n.prototype.getInputDataByName=function(a,b){var d=this.findInputSlot(a);return-1==d?null:this.getInputData(d,b)};n.prototype.isInputConnected=function(a){return this.inputs?a=this.inputs.length)return null;a=this.inputs[a];return a&&null!==a.link?(a=this.graph.links[a.link])?this.graph.getNodeById(a.origin_id):null:null};n.prototype.getInputOrProperty=function(a){if(!this.inputs||!this.inputs.length)return this.properties?this.properties[a]:null;for(var b=0,d=this.inputs.length;b=this.outputs.length?null:this.outputs[a]._data};n.prototype.getOutputInfo=function(a){return this.outputs?a=this.outputs.length)return null;a=this.outputs[a];if(!a.links||0==a.links.length)return null;for(var b=[],d=0;da&&this.pos[1]-f-db)return!0;return!1};n.prototype.getSlotInPosition=function(a,b){var d=new Float32Array(2);if(this.inputs)for(var g=0,f=this.inputs.length;g=this.outputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),null;b&&b.constructor===Number&&(b=this.graph.getNodeById(b));if(!b)throw"target node is null";if(b==this)return null;if(d.constructor===String){if(d=b.findInputSlot(d),-1==d)return h.debug&&console.log("Connect: Error, no slot of name "+d),null}else{if(d=== -h.EVENT)return null;if(!b.inputs||d>=b.inputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),null}null!=b.inputs[d].link&&b.disconnectInput(d);var g=this.outputs[a];if(b.onConnectInput&&!1===b.onConnectInput(d,g.type,g))return null;var f=b.inputs[d],r=null;if(h.isValidConnection(g.type,f.type)){r=new m(++this.graph.last_link_id,f.type,this.id,a,b.id,d);this.graph.links[r.id]=r;null==g.links&&(g.links=[]);g.links.push(r.id);b.inputs[d].link=r.id;this.graph&&this.graph._version++; -if(this.onConnectionsChange)this.onConnectionsChange(h.OUTPUT,a,!0,r,g);if(b.onConnectionsChange)b.onConnectionsChange(h.INPUT,d,!0,r,f);this.graph&&this.graph.onNodeConnectionChange&&(this.graph.onNodeConnectionChange(h.INPUT,b,d,this,a),this.graph.onNodeConnectionChange(h.OUTPUT,this,a,b,d))}this.setDirtyCanvas(!1,!0);this.graph.connectionChange(this,r);return r};n.prototype.disconnectOutput=function(a,b){if(a.constructor===String){if(a=this.findOutputSlot(a),-1==a)return h.debug&&console.log("Connect: Error, no slot of name "+ -a),!1}else if(!this.outputs||a>=this.outputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),!1;var d=this.outputs[a];if(!d||!d.links||0==d.links.length)return!1;if(b){b.constructor===Number&&(b=this.graph.getNodeById(b));if(!b)throw"Target Node not found";for(var g=0,f=d.links.length;g=this.inputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),!1;var b=this.inputs[a];if(!b)return!1;var d=this.inputs[a].link;this.inputs[a].link=null;var g=this.graph.links[d];if(g){var f= -this.graph.getNodeById(g.origin_id);if(!f)return!1;var r=f.outputs[g.origin_slot];if(!r||!r.links||0==r.links.length)return!1;for(var s=0,c=r.links.length;sb&&this.inputs[b].pos)return d[0]=this.pos[0]+this.inputs[b].pos[0],d[1]=this.pos[1]+this.inputs[b].pos[1],d;if(!a&&g>b&&this.outputs[b].pos)return d[0]=this.pos[0]+this.outputs[b].pos[0],d[1]=this.pos[1]+this.outputs[b].pos[1],d;if(this.horizontal)return d[0]=this.pos[0]+this.size[0]/g*(b+0.5),d[1]=a?this.pos[1]-h.NODE_TITLE_HEIGHT: -this.pos[1]+this.size[1],d;d[0]=a?this.pos[0]+f:this.pos[0]+this.size[0]+1-f;d[1]=this.pos[1]+(b+0.7)*h.NODE_SLOT_HEIGHT+(this.constructor.slot_start_y||0);return d};n.prototype.alignToGrid=function(){this.pos[0]=h.CANVAS_GRID_SIZE*Math.round(this.pos[0]/h.CANVAS_GRID_SIZE);this.pos[1]=h.CANVAS_GRID_SIZE*Math.round(this.pos[1]/h.CANVAS_GRID_SIZE)};n.prototype.trace=function(a){this.console||(this.console=[]);this.console.push(a);this.console.length>n.MAX_CONSOLE&&this.console.shift();this.graph.onNodeTrace(this, -a)};n.prototype.setDirtyCanvas=function(a,b){this.graph&&this.graph.sendActionToCanvas("setDirty",[a,b])};n.prototype.loadImage=function(a){var b=new Image;b.src=h.node_images_path+a;b.ready=!1;var d=this;b.onload=function(){this.ready=!0;d.setDirtyCanvas(!0)};return b};n.prototype.captureInput=function(a){if(this.graph&&this.graph.list_of_graphcanvas)for(var b=this.graph.list_of_graphcanvas,d=0;da.length||(this._pos[0]=a[0],this._pos[1]=a[1])},get:function(){return this._pos},enumerable:!0});Object.defineProperty(this,"size",{set:function(a){!a||2>a.length||(this._size[0]=Math.max(140,a[0]),this._size[1]=Math.max(80,a[1]))},get:function(){return this._size}, -enumerable:!0})};l.prototype.configure=function(a){this.title=a.title;this._bounding.set(a.bounding);this.color=a.color;this.font=a.font};l.prototype.serialize=function(){var a=this._bounding;return{title:this.title,bounding:[Math.round(a[0]),Math.round(a[1]),Math.round(a[2]),Math.round(a[3])],color:this.color,font:this.font}};l.prototype.move=function(a,b,d){this._pos[0]+=a;this._pos[1]+=b;if(!d)for(d=0;dthis.max_scale&&(a=this.max_scale);if(a!=this.scale&&this.element){var d=this.element.getBoundingClientRect();if(d){b=b||[0.5*d.width,0.5*d.height];d=this.convertCanvasToOffset(b);this.scale=a;0.01>Math.abs(this.scale-1)&&(this.scale= -1);var g=this.convertCanvasToOffset(b),d=[g[0]-d[0],g[1]-d[1]];this.offset[0]+=d[0];this.offset[1]+=d[1];if(this.onredraw)this.onredraw(this)}}};x.prototype.changeDeltaScale=function(a,b){this.changeScale(this.scale*a,b)};x.prototype.reset=function(){this.scale=1;this.offset[0]=0;this.offset[1]=0};B.LGraphCanvas=h.LGraphCanvas=e;e.link_type_colors={"-1":h.EVENT_LINK_COLOR,number:"#AAA",node:"#DCA"};e.gradients={};e.prototype.clear=function(){this.fps=this.render_time=this.last_draw_time=this.frame= -0;this.dragging_rectangle=null;this.selected_nodes={};this.selected_group=null;this.visible_nodes=[];this.connecting_node=this.node_capturing_input=this.node_over=this.node_dragged=null;this.highlighted_links={};this.dirty_bgcanvas=this.dirty_canvas=!0;this.node_widget=this.node_in_panel=this.dirty_area=null;this.last_mouse=[0,0];this.last_mouseclick=0;this.visible_area.set([0,0,0,0]);if(this.onClear)this.onClear()};e.prototype.setGraph=function(a,b){this.graph!=a&&(b||this.clear(),!a&&this.graph? -this.graph.detachCanvas(this):(a.attachCanvas(this),this._graph_stack&&(this._graph_stack=null),this.setDirty(!0,!0)))};e.prototype.openSubgraph=function(a){if(!a)throw"graph cannot be null";if(this.graph==a)throw"graph cannot be the same";this.clear();this.graph&&(this._graph_stack||(this._graph_stack=[]),this._graph_stack.push(this.graph));a.attachCanvas(this);this.setDirty(!0,!0)};e.prototype.closeSubgraph=function(){if(this._graph_stack&&0!=this._graph_stack.length){var a=this.graph._subgraph_node, -b=this._graph_stack.pop();this.selected_nodes={};this.highlighted_links={};b.attachCanvas(this);this.setDirty(!0,!0);a&&(this.centerOnNode(a),this.selectNodes([a]))}};e.prototype.getCurrentGraph=function(){return this.graph};e.prototype.setCanvas=function(a,b){if(a&&a.constructor===String&&(a=document.getElementById(a),!a))throw"Error creating LiteGraph canvas: Canvas not found";if(a!==this.canvas&&(!a&&this.canvas&&(b||this.unbindEvents()),this.canvas=a,this.ds.element=a)){a.className+=" lgraphcanvas"; -a.data=this;a.tabindex="1";this.bgcanvas=null;this.bgcanvas||(this.bgcanvas=document.createElement("canvas"),this.bgcanvas.width=this.canvas.width,this.bgcanvas.height=this.canvas.height);if(null==a.getContext){if("canvas"!=a.localName)throw"Element supplied for LGraphCanvas must be a element, you passed a "+a.localName;throw"This browser doesn't support Canvas";}null==(this.ctx=a.getContext("2d"))&&(a.webgl_enabled||console.warn("This canvas seems to be WebGL, enabling WebGL renderer"), -this.enableWebGL());this._mousemove_callback=this.processMouseMove.bind(this);this._mouseup_callback=this.processMouseUp.bind(this);b||this.bindEvents()}};e.prototype._doNothing=function(a){a.preventDefault();return!1};e.prototype._doReturnTrue=function(a){a.preventDefault();return!0};e.prototype.bindEvents=function(){if(this._events_binded)console.warn("LGraphCanvas: events already binded");else{var a=this.canvas,b=this.getCanvasWindow().document;this._mousedown_callback=this.processMouseDown.bind(this); -this._mousewheel_callback=this.processMouseWheel.bind(this);a.addEventListener("mousedown",this._mousedown_callback,!0);a.addEventListener("mousemove",this._mousemove_callback);a.addEventListener("mousewheel",this._mousewheel_callback,!1);a.addEventListener("contextmenu",this._doNothing);a.addEventListener("DOMMouseScroll",this._mousewheel_callback,!1);a.addEventListener("touchstart",this.touchHandler,!0);a.addEventListener("touchmove",this.touchHandler,!0);a.addEventListener("touchend",this.touchHandler, -!0);a.addEventListener("touchcancel",this.touchHandler,!0);this._key_callback=this.processKey.bind(this);a.addEventListener("keydown",this._key_callback,!0);b.addEventListener("keyup",this._key_callback,!0);this._ondrop_callback=this.processDrop.bind(this);a.addEventListener("dragover",this._doNothing,!1);a.addEventListener("dragend",this._doNothing,!1);a.addEventListener("drop",this._ondrop_callback,!1);a.addEventListener("dragenter",this._doReturnTrue,!1);this._events_binded=!0}};e.prototype.unbindEvents= -function(){if(this._events_binded){var a=this.getCanvasWindow().document;this.canvas.removeEventListener("mousedown",this._mousedown_callback);this.canvas.removeEventListener("mousewheel",this._mousewheel_callback);this.canvas.removeEventListener("DOMMouseScroll",this._mousewheel_callback);this.canvas.removeEventListener("keydown",this._key_callback);a.removeEventListener("keyup",this._key_callback);this.canvas.removeEventListener("contextmenu",this._doNothing);this.canvas.removeEventListener("drop", -this._ondrop_callback);this.canvas.removeEventListener("dragenter",this._doReturnTrue);this.canvas.removeEventListener("touchstart",this.touchHandler);this.canvas.removeEventListener("touchmove",this.touchHandler);this.canvas.removeEventListener("touchend",this.touchHandler);this.canvas.removeEventListener("touchcancel",this.touchHandler);this._ondrop_callback=this._key_callback=this._mousewheel_callback=this._mousedown_callback=null;this._events_binded=!1}else console.warn("LGraphCanvas: no events binded")}; -e.getFileExtension=function(a){var b=a.indexOf("?");-1!=b&&(a=a.substr(0,b));b=a.lastIndexOf(".");return-1==b?"":a.substr(b+1).toLowerCase()};e.prototype.enableWebGL=function(){if(void 0===typeof GL)throw"litegl.js must be included to use a WebGL canvas";if(void 0===typeof enableWebGLCanvas)throw"webglCanvas.js must be included to use this feature";this.gl=this.ctx=enableWebGLCanvas(this.canvas);this.ctx.webgl=!0;this.bgcanvas=this.canvas;this.bgctx=this.gl;this.canvas.webgl_enabled=!0};e.prototype.setDirty= -function(a,b){a&&(this.dirty_canvas=!0);b&&(this.dirty_bgcanvas=!0)};e.prototype.getCanvasWindow=function(){if(!this.canvas)return window;var a=this.canvas.ownerDocument;return a.defaultView||a.parentWindow};e.prototype.startRendering=function(){function a(){this.pause_rendering||this.draw();var b=this.getCanvasWindow();this.is_rendering&&b.requestAnimationFrame(a.bind(this))}this.is_rendering||(this.is_rendering=!0,a.call(this))};e.prototype.stopRendering=function(){this.is_rendering=!1};e.prototype.processMouseDown= -function(a){if(this.graph){this.adjustMouseEvent(a);var b=this.getCanvasWindow();e.active_canvas=this;this.canvas.removeEventListener("mousemove",this._mousemove_callback);b.document.addEventListener("mousemove",this._mousemove_callback,!0);b.document.addEventListener("mouseup",this._mouseup_callback,!0);var d=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes,5),g=!1,f=300>h.getTime()-this.last_mouseclick;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]=a.canvasY;this.canvas.focus(); -h.closeAllContextMenus(b);if(!this.onMouse||!0!=this.onMouse(a)){if(1==a.which){a.ctrlKey&&(this.dragging_rectangle=new Float32Array(4),this.dragging_rectangle[0]=a.canvasX,this.dragging_rectangle[1]=a.canvasY,this.dragging_rectangle[2]=1,this.dragging_rectangle[3]=1,g=!0);var r=!1;if(d&&this.allow_interaction&&!g&&!this.read_only){this.live_mode||d.flags.pinned||this.bringToFront(d);if(!this.connecting_node&&!d.flags.collapsed&&!this.live_mode)if(!g&&!1!==d.resizable&&w(a.canvasX,a.canvasY,d.pos[0]+ -d.size[0]-5,d.pos[1]+d.size[1]-5,10,10))this.resizing_node=d,this.canvas.style.cursor="se-resize",g=!0;else{if(d.outputs)for(var s=0,c=d.outputs.length;sr[0]+4||a.canvasYr[1]+4)){this.showLinkMenu(d,a);this.over_link_center=null;break}this.selected_group=this.graph.getGroupOnPos(a.canvasX,a.canvasY);this.selected_group_resizing=!1;this.selected_group&&!this.read_only&&(a.ctrlKey&&(this.dragging_rectangle=null),10>C([a.canvasX, -a.canvasY],[this.selected_group.pos[0]+this.selected_group.size[0],this.selected_group.pos[1]+this.selected_group.size[1]])*this.ds.scale?this.selected_group_resizing=!0:this.selected_group.recomputeInsideNodes());f&&!this.read_only&&this.allow_searchbox&&this.showSearchBox(a);r=!0}!g&&r&&this.allow_dragcanvas&&(this.dragging_canvas=!0)}else 2!=a.which&&3==a.which&&(this.read_only||this.processContextMenu(d,a));this.last_mouse[0]=a.localX;this.last_mouse[1]=a.localY;this.last_mouseclick=h.getTime(); -this.last_mouse_dragging=!0;this.graph.change();(!b.document.activeElement||"input"!=b.document.activeElement.nodeName.toLowerCase()&&"textarea"!=b.document.activeElement.nodeName.toLowerCase())&&a.preventDefault();a.stopPropagation();if(this.onMouseDown)this.onMouseDown(a);return!1}}};e.prototype.processMouseMove=function(a){this.autoresize&&this.resize();if(this.graph){e.active_canvas=this;this.adjustMouseEvent(a);var b=[a.localX,a.localY],d=[b[0]-this.last_mouse[0],b[1]-this.last_mouse[1]];this.last_mouse= -b;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]=a.canvasY;a.dragging=this.last_mouse_dragging;this.node_widget&&(this.processNodeWidgets(this.node_widget[0],this.canvas_mouse,a,this.node_widget[1]),this.dirty_canvas=!0);if(this.dragging_rectangle)this.dragging_rectangle[2]=a.canvasX-this.dragging_rectangle[0],this.dragging_rectangle[3]=a.canvasY-this.dragging_rectangle[1],this.dirty_canvas=!0;else if(this.selected_group&&!this.read_only)this.selected_group_resizing?this.selected_group.size= -[a.canvasX-this.selected_group.pos[0],a.canvasY-this.selected_group.pos[1]]:(this.selected_group.move(d[0]/this.ds.scale,d[1]/this.ds.scale,a.ctrlKey),this.selected_group._nodes.length&&(this.dirty_canvas=!0)),this.dirty_bgcanvas=!0;else if(this.dragging_canvas)this.ds.offset[0]+=d[0]/this.ds.scale,this.ds.offset[1]+=d[1]/this.ds.scale,this.dirty_bgcanvas=this.dirty_canvas=!0;else if(this.allow_interaction&&!this.read_only){this.connecting_node&&(this.dirty_canvas=!0);for(var g=this.graph.getNodeOnPos(a.canvasX, -a.canvasY,this.visible_nodes),b=0,f=this.graph._nodes.length;bs[0]+4||a.canvasYs[1]+4)){f=r;break}}f!=this.over_link_center&&(this.over_link_center=f,this.dirty_canvas=!0);this.canvas&&(this.canvas.style.cursor="")}if(this.node_capturing_input&&this.node_capturing_input!=g&&this.node_capturing_input.onMouseMove)this.node_capturing_input.onMouseMove(a,[a.canvasX-this.node_capturing_input.pos[0],a.canvasY-this.node_capturing_input.pos[1]],this);if(this.node_dragged&&!this.live_mode){for(b in this.selected_nodes)g=this.selected_nodes[b], -g.pos[0]+=d[0]/this.ds.scale,g.pos[1]+=d[1]/this.ds.scale;this.dirty_bgcanvas=this.dirty_canvas=!0}this.resizing_node&&!this.live_mode&&(this.resizing_node.size[0]=a.canvasX-this.resizing_node.pos[0],this.resizing_node.size[1]=a.canvasY-this.resizing_node.pos[1],d=Math.max(this.resizing_node.inputs?this.resizing_node.inputs.length:0,this.resizing_node.outputs?this.resizing_node.outputs.length:0)*h.NODE_SLOT_HEIGHT+(this.resizing_node.widgets?this.resizing_node.widgets.length:0)*(h.NODE_WIDGET_HEIGHT+ -4)+4,this.resizing_node.size[1]this.dragging_rectangle[3]?this.dragging_rectangle[1]-f:this.dragging_rectangle[1];this.dragging_rectangle[0]= -0>this.dragging_rectangle[2]?this.dragging_rectangle[0]-g:this.dragging_rectangle[0];this.dragging_rectangle[1]=r;this.dragging_rectangle[2]=g;this.dragging_rectangle[3]=f;f=[];for(r=0;ra.click_time&&w(a.canvasX,a.canvasY,g.pos[0],g.pos[1]-h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT)&&g.collapse();this.dirty_bgcanvas=this.dirty_canvas=!0;this.node_dragged.pos[0]=Math.round(this.node_dragged.pos[0]);this.node_dragged.pos[1]=Math.round(this.node_dragged.pos[1]);this.graph.config.align_to_grid&& -this.node_dragged.alignToGrid();if(this.onNodeMoved)this.onNodeMoved(this.node_dragged);this.node_dragged=null}else{g=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes);!g&&300>a.click_time&&this.deselectAllNodes();this.dirty_canvas=!0;this.dragging_canvas=!1;if(this.node_over&&this.node_over.onMouseUp)this.node_over.onMouseUp(a,[a.canvasX-this.node_over.pos[0],a.canvasY-this.node_over.pos[1]],this);if(this.node_capturing_input&&this.node_capturing_input.onMouseUp)this.node_capturing_input.onMouseUp(a, -[a.canvasX-this.node_capturing_input.pos[0],a.canvasY-this.node_capturing_input.pos[1]])}}else 2==a.which?(this.dirty_canvas=!0,this.dragging_canvas=!1):3==a.which&&(this.dirty_canvas=!0,this.dragging_canvas=!1);this.graph.change();a.stopPropagation();a.preventDefault();return!1}};e.prototype.processMouseWheel=function(a){if(this.graph&&this.allow_dragcanvas){var b=null!=a.wheelDeltaY?a.wheelDeltaY:-60*a.detail;this.adjustMouseEvent(a);var d=this.ds.scale;0b&&(d*=1/1.1);this.ds.changeScale(d, -[a.localX,a.localY]);this.graph.change();a.preventDefault();return!1}};e.prototype.isOverNodeBox=function(a,b,d){var g=h.NODE_TITLE_HEIGHT;return w(b,d,a.pos[0]+2,a.pos[1]+2-g,g-4,g-4)?!0:!1};e.prototype.isOverNodeInput=function(a,b,d,g){if(a.inputs)for(var f=0,h=a.inputs.length;fd- -this.graph._last_trigger_time)&&this.drawBackCanvas();(this.dirty_canvas||a)&&this.drawFrontCanvas();this.fps=this.render_time?1/this.render_time:0;this.frame+=1}};e.prototype.drawFrontCanvas=function(){this.dirty_canvas=!1;this.ctx||(this.ctx=this.bgcanvas.getContext("2d"));var a=this.ctx;if(a){a.start2D&&a.start2D();var b=this.canvas;a.restore();a.setTransform(1,0,0,1,0,0);this.dirty_area&&(a.save(),a.beginPath(),a.rect(this.dirty_area[0],this.dirty_area[1],this.dirty_area[2],this.dirty_area[3]), -a.clip());this.clear_background&&a.clearRect(0,0,b.width,b.height);this.bgcanvas==this.canvas?this.drawBackCanvas():a.drawImage(this.bgcanvas,0,0);if(this.onRender)this.onRender(b,a);this.show_info&&this.renderInfo(a);if(this.graph){a.save();this.ds.toCanvasContext(a);for(var b=this.computeVisibleNodes(null,this.visible_nodes),d=0;d> ";b.fillText(g+d.getTitle(),0.5*a.width,40);b.restore()}d=!1;this.onRenderBackground&&(d=this.onRenderBackground(a,b));b.restore(); -b.setTransform(1,0,0,1,0,0);this.visible_links.length=0;if(this.graph){b.save();this.ds.toCanvasContext(b);if(this.background_image&&0.5this.ds.scale;if(this.live_mode){if(!a.flags.collapsed&&(b.shadowColor="transparent",a.onDrawForeground))a.onDrawForeground(b,this,this.canvas)}else{var r=this.editor_alpha;b.globalAlpha=r;this.render_shadows&&!f?(b.shadowColor= -h.DEFAULT_SHADOW_COLOR,b.shadowOffsetX=2*this.ds.scale,b.shadowOffsetY=2*this.ds.scale,b.shadowBlur=3*this.ds.scale):b.shadowColor="transparent";if(!a.flags.collapsed||!a.onDrawCollapsed||!0!=a.onDrawCollapsed(b,this)){var s=a._shape||h.BOX_SHAPE;y.set(a.size);var c=a.horizontal;if(a.flags.collapsed){b.font=this.inner_text_font;var k=a.getTitle?a.getTitle():a.title;null!=k&&(a._collapsed_width=Math.min(a.size[0],b.measureText(k).width+2*h.NODE_TITLE_HEIGHT),y[0]=a._collapsed_width,y[1]=0)}a.clip_area&& -(b.save(),b.beginPath(),s==h.BOX_SHAPE?b.rect(0,0,y[0],y[1]):s==h.ROUND_SHAPE?b.roundRect(0,0,y[0],y[1],10):s==h.CIRCLE_SHAPE&&b.arc(0.5*y[0],0.5*y[1],0.5*y[0],0,2*Math.PI),b.clip());a.has_errors&&(g="red");this.drawNodeShape(a,b,y,d,g,a.is_selected,a.mouseOver);b.shadowColor="transparent";if(a.onDrawForeground)a.onDrawForeground(b,this,this.canvas);b.textAlign=c?"center":"left";b.font=this.inner_text_font;g=!f;s=this.connecting_output;b.lineWidth=1;var k=0,e=new Float32Array(2);if(!a.flags.collapsed){if(a.inputs)for(d= -0;dthis.ds.scale,k=a._shape||a.constructor.shape||h.ROUND_SHAPE,p=a.constructor.title_mode,q=!0;p==h.TRANSPARENT_TITLE?q=!1:p==h.AUTOHIDE_TITLE&&s&&(q=!0);v[0]=0;v[1]=q?-f:0;v[2]=d[0]+1;v[3]=q?d[1]+f:d[1];s=b.globalAlpha;b.beginPath();k==h.BOX_SHAPE|| -c?b.fillRect(v[0],v[1],v[2],v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE?b.roundRect(v[0],v[1],v[2],v[3],this.round_radius,k==h.CARD_SHAPE?0:this.round_radius):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0],0,2*Math.PI);b.fill();a.flags.collapsed||(b.shadowColor="transparent",b.fillStyle="rgba(0,0,0,0.2)",b.fillRect(0,-1,v[2],2));b.shadowColor="transparent";if(a.onDrawBackground)a.onDrawBackground(b,this,this.canvas);if(q||p==h.TRANSPARENT_TITLE){if(a.onDrawTitleBar)a.onDrawTitleBar(b,f,d,this.ds.scale, -g);else if(p!=h.TRANSPARENT_TITLE&&(a.constructor.title_color||this.render_title_colored)){q=a.constructor.title_color||g;a.flags.collapsed&&(b.shadowColor=h.DEFAULT_SHADOW_COLOR);if(this.use_gradients){var t=e.gradients[q];t||(t=e.gradients[q]=b.createLinearGradient(0,0,400,0),t.addColorStop(0,q),t.addColorStop(1,"#000"));b.fillStyle=t}else b.fillStyle=q;b.beginPath();k==h.BOX_SHAPE||c?b.rect(0,-f,d[0]+1,f):k!=h.ROUND_SHAPE&&k!=h.CARD_SHAPE||b.roundRect(0,-f,d[0]+1,f,this.round_radius,a.flags.collapsed? -this.round_radius:0);b.fill();b.shadowColor="transparent"}if(a.onDrawTitleBox)a.onDrawTitleBox(b,f,d,this.ds.scale);else k==h.ROUND_SHAPE||k==h.CIRCLE_SHAPE||k==h.CARD_SHAPE?(c&&(b.fillStyle="black",b.beginPath(),b.arc(0.5*f,-0.5*f,6,0,2*Math.PI),b.fill()),b.fillStyle=a.boxcolor||h.NODE_DEFAULT_BOXCOLOR,c?b.fillRect(0.5*f-5,-0.5*f-5,10,10):(b.beginPath(),b.arc(0.5*f,-0.5*f,5,0,2*Math.PI),b.fill())):(c&&(b.fillStyle="black",b.fillRect(0.5*(f-10)-1,-0.5*(f+10)-1,12,12)),b.fillStyle=a.boxcolor||h.NODE_DEFAULT_BOXCOLOR, -b.fillRect(0.5*(f-10),-0.5*(f+10),10,10));b.globalAlpha=s;if(a.onDrawTitleText)a.onDrawTitleText(b,f,d,this.ds.scale,this.title_text_font,r);!c&&(b.font=this.title_text_font,c=String(a.getTitle()))&&(b.fillStyle=r?"white":a.constructor.title_text_color||this.node_title_color,a.flags.collapsed?(b.textAlign="left",b.measureText(c),b.fillText(c.substr(0,20),f,h.NODE_TITLE_TEXT_Y-f),b.textAlign="left"):(b.textAlign="left",b.fillText(c,f,h.NODE_TITLE_TEXT_Y-f)));if(a.onDrawTitle)a.onDrawTitle(b)}if(r){if(a.onBounding)a.onBounding(v); -p==h.TRANSPARENT_TITLE&&(v[1]-=f,v[3]+=f);b.lineWidth=1;b.globalAlpha=0.8;b.beginPath();k==h.BOX_SHAPE?b.rect(-6+v[0],-6+v[1],12+v[2],12+v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE&&a.flags.collapsed?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius):k==h.CARD_SHAPE?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius,2):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0]+6,0,2*Math.PI);b.strokeStyle="#FFF";b.stroke();b.strokeStyle=g;b.globalAlpha=1}};var G=new Float32Array(4), -p=new Float32Array(4),q=new Float32Array(2),k=new Float32Array(2);e.prototype.drawConnections=function(a){var b=h.getTime(),d=this.visible_area;G[0]=d[0]-20;G[1]=d[1]-20;G[2]=d[2]+40;G[3]=d[3]+40;a.lineWidth=this.connections_width;a.fillStyle="#AAA";a.strokeStyle="#AAA";a.globalAlpha=this.editor_alpha;for(var d=this.graph._nodes,g=0,f=d.length;gp[2]&&(p[0]+=p[2],p[2]=Math.abs(p[2]));0>p[3]&&(p[1]+=p[3],p[3]=Math.abs(p[3]));if(u(p,G)){var n=e.outputs[z],z=r.inputs[s];if(n&&z&&(e=n.dir||(e.horizontal?h.DOWN:h.RIGHT),z=z.dir||(r.horizontal?h.UP:h.LEFT),this.renderLink(a,l,t,c,!1,0,null,e,z),c&&c._last_time&&1E3>b-c._last_time)){var n= -2-0.002*(b-c._last_time),K=a.globalAlpha;a.globalAlpha=K*n;this.renderLink(a,l,t,c,!0,n,"white",e,z);a.globalAlpha=K}}}}}}a.globalAlpha=1};e.prototype.renderLink=function(a,b,d,g,f,r,c,k,p,q){g&&this.visible_links.push(g);!c&&g&&(c=g.color||e.link_type_colors[g.type]);c||(c=this.default_link_color);null!=g&&this.highlighted_links[g.id]&&(c="#FFF");k=k||h.RIGHT;p=p||h.LEFT;var z=C(b,d);this.render_connections_border&&0.6b[1]?0:Math.PI,a.save(),a.translate(t[0],t[1]),a.rotate(l),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore(),a.save(),a.translate(q[0],q[1]),a.rotate(n),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore()),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill());if(r)for(a.fillStyle= -c,t=0;5>t;++t)r=(0.001*h.getTime()+0.2*t)%1,f=this.computeConnectionPoint(b,d,r,k,p),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill()};e.prototype.computeConnectionPoint=function(a,b,d,g,f){g=g||h.RIGHT;f=f||h.LEFT;var r=C(a,b),c=[a[0],a[1]],k=[b[0],b[1]];switch(g){case h.LEFT:c[0]+=-0.25*r;break;case h.RIGHT:c[0]+=0.25*r;break;case h.UP:c[1]+=-0.25*r;break;case h.DOWN:c[1]+=0.25*r}switch(f){case h.LEFT:k[0]+=-0.25*r;break;case h.RIGHT:k[0]+=0.25*r;break;case h.UP:k[1]+=-0.25*r;break;case h.DOWN:k[1]+= -0.25*r}g=(1-d)*(1-d)*(1-d);f=3*(1-d)*(1-d)*d;r=3*(1-d)*d*d;d*=d*d;return[g*a[0]+f*c[0]+r*k[0]+d*b[0],g*a[1]+f*c[1]+r*k[1]+d*b[1]]};e.prototype.drawExecutionOrder=function(a){a.shadowColor="transparent";a.globalAlpha=0.25;a.textAlign="center";a.strokeStyle="white";a.globalAlpha=0.75;for(var b=this.visible_nodes,d=0;dt.last_y&&st.options.max&&(t.value=t.options.max);else if("mousedown"==d.type){var l=t.options.values; -l&&l.constructor===Function&&(l=t.options.values(t,a));var z=null;"number"!=t.type&&(z=l.constructor===Array?l:Object.keys(l));c=40>c?-1:c>k-40?1:0;if("number"==t.type)t.value+=0.1*c*(t.options.step||1),null!=t.options.min&&t.valuet.options.max&&(t.value=t.options.max);else if(c)e=-1,e=l.constructor===Object?z.indexOf(String(t.value))+c:z.indexOf(t.value)+c,e>=z.length&&(e=z.length-1),0>e&&(e=0),t.value=l.constructor===Array?l[e]: -e;else{var n=l!=z?Object.values(l):l;new h.ContextMenu(n,{scale:Math.max(1,this.ds.scale),event:d,className:"dark",callback:y.bind(t)},e);var y=function(a,b,d){l!=z&&(a=n.indexOf(a));this.value=a;f(this,a);p.dirty_canvas=!0;return!1}}}else"mouseup"==d.type&&"number"==t.type&&(c=40>c?-1:c>k-40?1:0,200>d.click_time&&0==c&&this.prompt("Value",t.value,function(a){this.value=Number(a);f(this,this.value)}.bind(t),d));g!=t.value&&setTimeout(function(){f(this,this.value)}.bind(t),20);this.dirty_canvas=!0; -break;case "toggle":"mousedown"==d.type&&(t.value=!t.value,setTimeout(function(){f(t,t.value)},20));break;case "string":case "text":"mousedown"==d.type&&this.prompt("Value",t.value,function(a){this.value=a;f(this,a)}.bind(t),d);break;default:t.mouse&&t.mouse(ctx,d,[c,s],a)}return t}}return null};e.prototype.drawGroups=function(a,b){if(this.graph){var d=this.graph._groups;b.save();b.globalAlpha=0.5*this.editor_alpha;for(var g=0;gd&&0.01>b.editor_alpha&&(clearInterval(g),1>d&&(b.live_mode=!0));1"+q+""+a+"",value:q});if(p.length)return new h.ContextMenu(p, -{event:d,callback:c,parentMenu:g,allow_html:!0,node:f},b),!1}};e.decodeHTML=function(a){var b=document.createElement("div");b.innerText=a;return b.innerHTML};e.onResizeNode=function(a,b,d,g,f){f&&(f.size=f.computeSize(),f.setDirtyCanvas(!0,!0))};e.prototype.showLinkMenu=function(a,b){var d=this;console.log(a);var g=new h.ContextMenu(["Add Node",null,"Delete"],{event:b,title:null!=a.data?a.data.constructor.name:null,callback:function(b,h,c){switch(b){case "Add Node":e.onMenuAdd(null,null,c,g,function(b){console.log("node autoconnect"); -var f=d.graph.getNodeById(a.origin_id),g=d.graph.getNodeById(a.target_id);b.inputs&&b.inputs.length&&b.outputs&&b.outputs.length&&f.outputs[a.origin_slot].type==b.inputs[0].type&&b.outputs[0].type==g.inputs[0].type&&(f.connect(a.origin_slot,b,0),b.connect(0,g,a.target_slot),b.pos[0]-=0.5*b.size[0])});break;case "Delete":d.graph.removeLink(a.id)}}});return!1};e.onShowPropertyEditor=function(a,b,d,g,f){function h(){var b=p.value;"Number"==a.type?b=Number(b):"Boolean"==a.type&&(b=Boolean(b));f[c]=b; -k.parentNode&&k.parentNode.removeChild(k);f.setDirtyCanvas(!0,!0)}var c=a.property||"title";b=f[c];var k=document.createElement("div");k.className="graphdialog";k.innerHTML="";k.querySelector(".name").innerText=c;var p=k.querySelector("input");p&&(p.value=b,p.addEventListener("blur",function(a){this.focus()}),p.addEventListener("keydown",function(a){13==a.keyCode&&(h(),a.preventDefault(),a.stopPropagation())})); -b=e.active_canvas.canvas;d=b.getBoundingClientRect();var q=g=-20;d&&(g-=d.left,q-=d.top);event?(k.style.left=event.clientX+g+"px",k.style.top=event.clientY+q+"px"):(k.style.left=0.5*b.width+g+"px",k.style.top=0.5*b.height+q+"px");k.querySelector("button").addEventListener("click",h);b.parentNode.appendChild(k)};e.prototype.prompt=function(a,b,d,g){var f=this;a=a||"";var h=!1,c=document.createElement("div");c.className="graphdialog rounded";c.innerHTML=" "; -c.close=function(){f.prompt_box=null;c.parentNode&&c.parentNode.removeChild(c)};1e.search_limit)break}}s=null;if(Array.prototype.filter)s=Object.keys(h.registered_node_types).filter(l); -else for(k in s=[],h.registered_node_types)l(k)&&s.push(k);for(k=0;ke.search_limit);k++);var l=function(a){var b=h.registered_node_types[a];return p&&b.filter!=p?!1:-1!==a.toLowerCase().indexOf(d)}}}var f=this,c=e.active_canvas,k=c.canvas,p=k.ownerDocument||document,q=document.createElement("div");q.className="litegraph litesearchbox graphdialog rounded";q.innerHTML="Search
"; -q.close=function(){f.search_box=null;p.body.focus();p.body.style.overflow="";setTimeout(function(){f.canvas.focus()},20);q.parentNode&&q.parentNode.removeChild(q)};var l=null;1k.height-200&&(z.style.maxHeight=k.height-a.layerY-20+"px");u.focus();return q};e.prototype.showEditPropertyValue=function(a,b,d){function g(){f(t.value)}function f(f){"number"==typeof a.properties[b]&&(f=Number(f));if("array"==h||"object"==h)f=JSON.parse(f);a.properties[b]=f;a._graph&&a._graph._version++;if(a.onPropertyChanged)a.onPropertyChanged(b, -f);if(d.onclose)d.onclose();e.close();a.setDirtyCanvas(!0,!0)}if(a&&void 0!==a.properties[b]){d=d||{};var c=a.getPropertyInfo(b),h=c.type,k="";if("string"==h||"number"==h||"array"==h||"object"==h)k="";else if("enum"==h&&c.values){var k=""}else if("boolean"== -h)k="";else{console.warn("unknown type: "+h);return}var e=this.createDialog(""+b+""+k+"",d);if("enum"==h&&c.values){var t=e.querySelector("select");t.addEventListener("change",function(a){f(a.target.value)})}else if("boolean"==h)(t=e.querySelector("input"))&&t.addEventListener("click",function(a){f(!!t.checked)});else if(t=e.querySelector("input"))t.addEventListener("blur", -function(a){this.focus()}),q=void 0!==a.properties[b]?a.properties[b]:"",q=JSON.stringify(q),t.value=q,t.addEventListener("keydown",function(a){13==a.keyCode&&(g(),a.preventDefault(),a.stopPropagation())});e.querySelector("button").addEventListener("click",g);return e}};e.prototype.createDialog=function(a,b){b=b||{};var d=document.createElement("div");d.className="graphdialog";d.innerHTML=a;var g=this.canvas.getBoundingClientRect(),f=-20,c=-20;g&&(f-=g.left,c-=g.top);b.position?(f+=b.position[0], -c+=b.position[1]):b.event?(f+=b.event.clientX,c+=b.event.clientY):(f+=0.5*this.canvas.width,c+=0.5*this.canvas.height);d.style.left=f+"px";d.style.top=c+"px";this.canvas.parentNode.appendChild(d);d.close=function(){this.parentNode&&this.parentNode.removeChild(this)};return d};e.onMenuNodeCollapse=function(a,b,d,g,f){f.collapse()};e.onMenuNodePin=function(a,b,d,g,f){f.pin()};e.onMenuNodeMode=function(a,b,d,g,f){new h.ContextMenu(["Always","On Event","On Trigger","Never"],{event:d,callback:function(a){if(f)switch(a){case "On Event":f.mode= -h.ON_EVENT;break;case "On Trigger":f.mode=h.ON_TRIGGER;break;case "Never":f.mode=h.NEVER;break;default:f.mode=h.ALWAYS}},parentMenu:g,node:f});return!1};e.onMenuNodeColors=function(a,b,d,g,f){if(!f)throw"no node for color";b=[];b.push({value:null,content:"No color"});for(var c in e.node_colors)a=e.node_colors[c],a={value:c,content:""+c+""},b.push(a);new h.ContextMenu(b,{event:d,callback:function(a){f&&((a=a.value?e.node_colors[a.value]:null)?f.constructor===h.LGraphGroup?f.color=a.groupcolor:(f.color=a.color,f.bgcolor=a.bgcolor):(delete f.color,delete f.bgcolor),f.setDirtyCanvas(!0,!0))},parentMenu:g,node:f});return!1};e.onMenuNodeShapes=function(a,b,d,g,f){if(!f)throw"no node passed";new h.ContextMenu(h.VALID_SHAPES,{event:d,callback:function(a){f&&(f.shape=a,f.setDirtyCanvas(!0))},parentMenu:g,node:f}); -return!1};e.onMenuNodeRemove=function(a,b,d,g,f){if(!f)throw"no node passed";!1!==f.removable&&(f.graph.remove(f),f.setDirtyCanvas(!0,!0))};e.onMenuNodeClone=function(a,b,d,g,f){!1!=f.clonable&&(a=f.clone())&&(a.pos=[f.pos[0]+5,f.pos[1]+5],f.graph.add(a),f.setDirtyCanvas(!0,!0))};e.node_colors={red:{color:"#322",bgcolor:"#533",groupcolor:"#A88"},brown:{color:"#332922",bgcolor:"#593930",groupcolor:"#b06634"},green:{color:"#232",bgcolor:"#353",groupcolor:"#8A8"},blue:{color:"#223",bgcolor:"#335",groupcolor:"#88A"}, -pale_blue:{color:"#2a363b",bgcolor:"#3f5159",groupcolor:"#3f789e"},cyan:{color:"#233",bgcolor:"#355",groupcolor:"#8AA"},purple:{color:"#323",bgcolor:"#535",groupcolor:"#a1309b"},yellow:{color:"#432",bgcolor:"#653",groupcolor:"#b58b2a"},black:{color:"#222",bgcolor:"#000",groupcolor:"#444"}};e.prototype.getCanvasMenuOptions=function(){var a=null;this.getMenuOptions?a=this.getMenuOptions():(a=[{content:"Add Node",has_submenu:!0,callback:e.onMenuAdd},{content:"Add Group",callback:e.onGroupAdd}],this._graph_stack&& -0Name",f),k=h.querySelector("input");k&&c&&(k.value=c.label||"");h.querySelector("button").addEventListener("click",function(a){k.value&&(c&&(c.label=k.value),d.setDirty(!0));h.close()})}},extra:a};a&&(c.title=a.type);var k=null;a&&(k=a.getSlotInPosition(b.canvasX,b.canvasY),e.active_node= -a);if(k){f=[];k&&k.output&&k.output.links&&k.output.links.length&&f.push({content:"Disconnect Links",slot:k});var p=k.input||k.output;f.push(p.locked?"Cannot remove":{content:"Remove Slot",slot:k});f.push(p.nameLocked?"Cannot rename":{content:"Rename Slot",slot:k});c.title=(k.input?k.input.type:k.output.type)||"*";k.input&&k.input.type==h.ACTION&&(c.title="Action");k.output&&k.output.type==h.EVENT&&(c.title="Event")}else a?f=this.getNodeMenuOptions(a):(f=this.getCanvasMenuOptions(),(k=this.graph.getGroupOnPos(b.canvasX, -b.canvasY))&&f.push(null,{content:"Edit Group",has_submenu:!0,submenu:{title:"Group",extra:k,options:this.getGroupMenuOptions(k)}}));f&&new h.ContextMenu(f,c,g)};"undefined"!=typeof window&&window.CanvasRenderingContext2D&&(window.CanvasRenderingContext2D.prototype.roundRect=function(a,b,d,g,f,c){void 0===f&&(f=5);void 0===c&&(c=f);this.moveTo(a+f,b);this.lineTo(a+d-f,b);this.quadraticCurveTo(a+d,b,a+d,b+f);this.lineTo(a+d,b+g-c);this.quadraticCurveTo(a+d,b+g,a+d-c,b+g);this.lineTo(a+c,b+g);this.quadraticCurveTo(a, -b+g,a,b+g-c);this.lineTo(a,b+f);this.quadraticCurveTo(a,b,a+f,b)});h.compareObjects=function(a,b){for(var d in a)if(a[d]!=b[d])return!1;return!0};h.distance=C;h.colorToString=function(a){return"rgba("+Math.round(255*a[0]).toFixed()+","+Math.round(255*a[1]).toFixed()+","+Math.round(255*a[2]).toFixed()+","+(4==a.length?a[3].toFixed(2):"1.0")+")"};h.isInsideRectangle=w;h.growBounding=function(a,b,d){ba[2]&&(a[2]=b);da[3]&&(a[3]=d)};h.isInsideBounding=function(a,b){return a[0]< -b[0][0]||a[1]b[1][0]||a[1]>b[1][1]?!1:!0};h.overlapBounding=u;h.hex2num=function(a){"#"==a.charAt(0)&&(a=a.slice(1));a=a.toUpperCase();for(var b=Array(3),d=0,g,f,c=0;6>c;c+=2)g="0123456789ABCDEF".indexOf(a.charAt(c)),f="0123456789ABCDEF".indexOf(a.charAt(c+1)),b[d]=16*g+f,d++;return b};h.num2hex=function(a){for(var b="#",d,g,f=0;3>f;f++)d=a[f]/16,g=a[f]%16,b+="0123456789ABCDEF".charAt(d)+"0123456789ABCDEF".charAt(g);return b};D.prototype.addItem=function(a,b,d){function g(a){var b= -this.value;b&&b.has_submenu&&f.call(this,a)}function f(a){var b=this.value,f=!0;c.current_submenu&&c.current_submenu.close(a);if(d.callback){var g=d.callback.call(this,b,d,a,c,d.node);!0===g&&(f=!1)}if(b&&(b.callback&&!d.ignore_item_callbacks&&!0!==b.disabled&&(g=b.callback.call(this,b,d,a,c,d.extra),!0===g&&(f=!1)),b.submenu)){if(!b.submenu.options)throw"ContextMenu submenu needs options";new c.constructor(b.submenu.options,{callback:b.submenu.callback,event:a,parentMenu:c,ignore_item_callbacks:b.submenu.ignore_item_callbacks, -title:b.submenu.title,extra:b.submenu.extra,autoopen:d.autoopen});f=!1}f&&!c.lock&&c.close()}var c=this;d=d||{};var h=document.createElement("div");h.className="litemenu-entry submenu";var k=!1;if(null===b)h.classList.add("separator");else{h.innerHTML=b&&b.title?b.title:a;if(h.value=b)b.disabled&&(k=!0,h.classList.add("disabled")),(b.submenu||b.has_submenu)&&h.classList.add("has_submenu");"function"==typeof b?(h.dataset.value=a,h.onclick_callback=b):h.dataset.value=b;b.className&&(h.className+=" "+ -b.className)}this.root.appendChild(h);k||h.addEventListener("click",f);d.autoopen&&h.addEventListener("mouseenter",g);return h};D.prototype.close=function(a,b){this.root.parentNode&&this.root.parentNode.removeChild(this.root);this.parentMenu&&!b&&(this.parentMenu.lock=!1,this.parentMenu.current_submenu=null,void 0===a?this.parentMenu.close():a&&!D.isCursorOverElement(a,this.parentMenu.root)&&D.trigger(this.parentMenu.root,"mouseleave",a));this.current_submenu&&this.current_submenu.close(a,!0);this.root.closing_timer&& -clearTimeout(this.root.closing_timer)};D.trigger=function(a,b,d,g){var f=document.createEvent("CustomEvent");f.initCustomEvent(b,!0,!0,d);f.srcElement=g;a.dispatchEvent?a.dispatchEvent(f):a.__events&&a.__events.dispatchEvent(f);return f};D.prototype.getTopMenu=function(){return this.options.parentMenu?this.options.parentMenu.getTopMenu():this};D.prototype.getFirstEvent=function(){return this.options.parentMenu?this.options.parentMenu.getFirstEvent():this.options.event};D.isCursorOverElement=function(a, -b){var d=a.clientX,g=a.clientY,f=b.getBoundingClientRect();return f?g>f.top&&gf.left&&dMath.abs(d))return g[1];d=(a-g[0])/d;return g[1]*(1-d)+f[1]*d}}return 0}};A.prototype.draw=function(a,b,d,g,f,c){if(d=this.points){this.size= -b;var h=b[0]-2*this.margin;b=b[1]-2*this.margin;f=f||"#666";a.save();a.translate(this.margin,this.margin);g&&(a.fillStyle="#111",a.fillRect(0,0,h,b),a.fillStyle="#222",a.fillRect(0.5*h,0,1,b),a.strokeStyle="#333",a.strokeRect(0,0,h,b));a.strokeStyle=f;c&&(a.globalAlpha=0.5);a.beginPath();for(g=0;ga[1])){var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=a[0]-this.margin,h=a[1]-this.margin;this.selected=this.getCloserPoint([c,h],30/b.ds.scale);-1==this.selected&&(g=[c/g,1-h/f],d.push(g),d.sort(function(a,b){return a[0]-b[0]}),this.selected=d.indexOf(g),this.must_update=!0);if(-1!=this.selected)return!0}};A.prototype.onMouseMove=function(a,b){var d=this.points;if(d){var g= -this.selected;if(!(0>g)){var f=(a[0]-this.margin)/(this.size[0]-2*this.margin),c=(a[1]-this.margin)/(this.size[1]-2*this.margin);this._nearest=this.getCloserPoint([a[0]-this.margin,a[1]-this.margin],30/b.ds.scale);var h=d[g];if(h){var k=0==g||g==d.length-1;!k&&(-10>a[0]||a[0]>this.size[0]+10||-10>a[1]||a[1]>this.size[1]+10)?(d.splice(g,1),this.selected=-1):(h[0]=k?0==g?0:1:Math.clamp(f,0,1),h[1]=1-Math.clamp(c,0,1),d.sort(function(a,b){return a[0]-b[0]}),this.selected=d.indexOf(h),this.must_update= -!0)}}}};A.prototype.onMouseUp=function(a,b){this.selected=-1;return!1};A.prototype.getCloserPoint=function(a,b){var d=this.points;if(!d)return-1;b=b||30;for(var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=d.length,h=[0,0],k=1E6,p=-1,q=0;qk||e>b||(p=q,k=e)}return p};h.CurveEditor=A;h.getParameterNames=function(a){return(a+"").replace(/[/][/].*$/gm,"").replace(/\s+/g,"").replace(/[/][*][^/*]*[*][/]/g,"").split("){", -1)[0].replace(/^[^(]*[(]/,"").replace(/=[^,]+/g,"").split(",").filter(Boolean)};Math.clamp=function(a,b,d){return b>a?b:dc.width-k.width-10&&(f=c.width-k.width-10);c.height&&h>c.height-k.height-10&&(h=c.height-k.height-10)}r.style.left=f+"px";r.style.top=h+"px";b.scale&&(r.style.transform="scale("+b.scale+")")}function A(a){this.points=a;this.nearest=this.selected=-1;this.size=null;this.must_update=!0;this.margin=5}var h=B.LiteGraph={VERSION:0.4,CANVAS_GRID_SIZE:10,NODE_TITLE_HEIGHT:30, +NODE_TITLE_TEXT_Y:20,NODE_SLOT_HEIGHT:20,NODE_WIDGET_HEIGHT:20,NODE_WIDTH:140,NODE_MIN_WIDTH:50,NODE_COLLAPSED_RADIUS:10,NODE_COLLAPSED_WIDTH:80,NODE_TITLE_COLOR:"#999",NODE_TEXT_SIZE:14,NODE_TEXT_COLOR:"#AAA",NODE_SUBTEXT_SIZE:12,NODE_DEFAULT_COLOR:"#333",NODE_DEFAULT_BGCOLOR:"#353535",NODE_DEFAULT_BOXCOLOR:"#666",NODE_DEFAULT_SHAPE:"box",DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0.5)",DEFAULT_GROUP_FONT:24,WIDGET_BGCOLOR:"#222",WIDGET_OUTLINE_COLOR:"#666",WIDGET_TEXT_COLOR:"#DDD",WIDGET_SECONDARY_TEXT_COLOR:"#999", +LINK_COLOR:"#9A9",EVENT_LINK_COLOR:"#A86",CONNECTING_LINK_COLOR:"#AFA",MAX_NUMBER_OF_NODES:1E3,DEFAULT_POSITION:[100,100],VALID_SHAPES:["default","box","round","card"],BOX_SHAPE:1,ROUND_SHAPE:2,CIRCLE_SHAPE:3,CARD_SHAPE:4,ARROW_SHAPE:5,INPUT:1,OUTPUT:2,EVENT:-1,ACTION:-1,ALWAYS:0,ON_EVENT:1,NEVER:2,ON_TRIGGER:3,UP:1,DOWN:2,LEFT:3,RIGHT:4,CENTER:5,STRAIGHT_LINK:0,LINEAR_LINK:1,SPLINE_LINK:2,NORMAL_TITLE:0,NO_TITLE:1,TRANSPARENT_TITLE:2,AUTOHIDE_TITLE:3,proxy:null,node_images_path:"",debug:!1,catch_exceptions:!0, +throw_errors:!0,allow_scripts:!1,registered_node_types:{},node_types_by_file_extension:{},Nodes:{},searchbox_extras:{},registerNodeType:function(a,b){if(!b.prototype)throw"Cannot register a simple object, it must be a class with a prototype";b.type=a;h.debug&&console.log("Node registered: "+a);a.split("/");var d=b.name,g=a.lastIndexOf("/");b.category=a.substr(0,g);b.title||(b.title=d);if(b.prototype)for(var f in n.prototype)b.prototype[f]||(b.prototype[f]=n.prototype[f]);if(g=this.registered_node_types[a])console.log("replacing node type: "+ +a);else if(Object.hasOwnProperty(b.prototype,"shape")||Object.defineProperty(b.prototype,"shape",{set:function(a){switch(a){case "default":delete this._shape;break;case "box":this._shape=h.BOX_SHAPE;break;case "round":this._shape=h.ROUND_SHAPE;break;case "circle":this._shape=h.CIRCLE_SHAPE;break;case "card":this._shape=h.CARD_SHAPE;break;default:this._shape=a}},get:function(a){return this._shape},enumerable:!0,configurable:!0}),b.prototype.onPropertyChange&&console.warn("LiteGraph node class "+a+ +" has onPropertyChange method, it must be called onPropertyChanged with d at the end"),b.supported_extensions)for(f in b.supported_extensions){var r=b.supported_extensions[f];r&&r.constructor===String&&(this.node_types_by_file_extension[r.toLowerCase()]=b)}this.registered_node_types[a]=b;b.constructor.name&&(this.Nodes[d]=b);if(h.onNodeTypeRegistered)h.onNodeTypeRegistered(a,b);if(g&&h.onNodeTypeReplaced)h.onNodeTypeReplaced(a,b,g)},unregisterNodeType:function(a){var b=a.constructor===String?this.registered_node_types[a]: +a;if(!b)throw"node type not found: "+a;delete this.registered_node_types[b.type];b.constructor.name&&delete this.Nodes[b.constructor.name]},wrapFunctionAsNode:function(a,b,d,g,f){for(var r=Array(b.length),s="",c=h.getParameterNames(b),k=0;ks&&(s=f.size[0]),c+=f.size[1]+a+h.NODE_TITLE_HEIGHT;b+=s+a}this.setDirtyCanvas(!0,!0)};c.prototype.getTime=function(){return this.globaltime};c.prototype.getFixedTime=function(){return this.fixedtime};c.prototype.getElapsedTime= +function(){return this.elapsed_time};c.prototype.sendEventToAllNodes=function(a,b,d){d=d||h.ALWAYS;var g=this._nodes_in_order?this._nodes_in_order:this._nodes;if(g)for(var f=0,r=g.length;f=h.MAX_NUMBER_OF_NODES)throw"LiteGraph: max number of nodes in a graph reached";null==a.id||-1==a.id?a.id=++this.last_node_id:this.last_node_id< +a.id&&(this.last_node_id=a.id);a.graph=this;this._version++;this._nodes.push(a);this._nodes_by_id[a.id]=a;if(a.onAdded)a.onAdded(this);this.config.align_to_grid&&a.alignToGrid();b||this.updateExecutionOrder();if(this.onNodeAdded)this.onNodeAdded(a);this.setDirtyCanvas(!0);this.change();return a}};c.prototype.remove=function(a){if(a.constructor===h.LGraphGroup){var b=this._groups.indexOf(a);-1!=b&&this._groups.splice(b,1);a.graph=null;this._version++;this.setDirtyCanvas(!0,!0);this.change()}else if(null!= +this._nodes_by_id[a.id]&&!a.ignore_remove){if(a.inputs)for(b=0;ba.length||(this._pos[0]=a[0],this._pos[1]=a[1])},get:function(){return this._pos},enumerable:!0});this.id=-1;this.type=null;this.inputs=[];this.outputs=[];this.connections=[];this.properties={};this.properties_info=[];this.flags={}};n.prototype.configure=function(a){this.graph&&this.graph._version++;for(var b in a)if("properties"==b)for(var d in a.properties){if(this.properties[d]=a.properties[d],this.onPropertyChanged)this.onPropertyChanged(d, +a.properties[d])}else null!=a[b]&&("object"==typeof a[b]?this[b]&&this[b].configure?this[b].configure(a[b]):this[b]=h.cloneObject(a[b],this[b]):this[b]=a[b]);a.title||(this.title=this.constructor.title);if(this.onConnectionsChange){if(this.inputs)for(d=0;d=this.outputs.length)){var d=this.outputs[a];if(d&&(d._data=b,this.outputs[a].links))for(d=0;d=this.outputs.length)){var d=this.outputs[a];if(d&&(d.type=b,this.outputs[a].links))for(d=0;d=this.inputs.length||null==this.inputs[a].link)){var d=this.graph.links[this.inputs[a].link];if(!d)return null;if(!b)return d.data;var g=this.graph.getNodeById(d.origin_id);if(!g)return d.data; +if(g.updateOutputData)g.updateOutputData(d.origin_slot);else if(g.onExecute)g.onExecute();return d.data}};n.prototype.getInputDataType=function(a){if(!this.inputs||a>=this.inputs.length||null==this.inputs[a].link)return null;a=this.graph.links[this.inputs[a].link];if(!a)return null;var b=this.graph.getNodeById(a.origin_id);return b?(a=b.outputs[a.origin_slot])?a.type:null:a.type};n.prototype.getInputDataByName=function(a,b){var d=this.findInputSlot(a);return-1==d?null:this.getInputData(d,b)};n.prototype.isInputConnected= +function(a){return this.inputs?a=this.inputs.length)return null;a=this.inputs[a];return a&&null!==a.link?(a=this.graph.links[a.link])?this.graph.getNodeById(a.origin_id):null:null};n.prototype.getInputOrProperty=function(a){if(!this.inputs||!this.inputs.length)return this.properties?this.properties[a]: +null;for(var b=0,d=this.inputs.length;b=this.outputs.length?null:this.outputs[a]._data};n.prototype.getOutputInfo=function(a){return this.outputs?a=this.outputs.length)return null;a=this.outputs[a];if(!a.links||0==a.links.length)return null;for(var b=[],d=0;da&&this.pos[1]-f-db)return!0;return!1};n.prototype.getSlotInPosition=function(a,b){var d=new Float32Array(2);if(this.inputs)for(var g=0,f=this.inputs.length;g=this.outputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),null;b&&b.constructor===Number&&(b=this.graph.getNodeById(b)); +if(!b)throw"target node is null";if(b==this)return null;if(d.constructor===String){if(d=b.findInputSlot(d),-1==d)return h.debug&&console.log("Connect: Error, no slot of name "+d),null}else{if(d===h.EVENT)return null;if(!b.inputs||d>=b.inputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),null}null!=b.inputs[d].link&&b.disconnectInput(d);var g=this.outputs[a];if(b.onConnectInput&&!1===b.onConnectInput(d,g.type,g))return null;var f=b.inputs[d],r=null;if(h.isValidConnection(g.type, +f.type)){r=new m(++this.graph.last_link_id,f.type,this.id,a,b.id,d);this.graph.links[r.id]=r;null==g.links&&(g.links=[]);g.links.push(r.id);b.inputs[d].link=r.id;this.graph&&this.graph._version++;if(this.onConnectionsChange)this.onConnectionsChange(h.OUTPUT,a,!0,r,g);if(b.onConnectionsChange)b.onConnectionsChange(h.INPUT,d,!0,r,f);this.graph&&this.graph.onNodeConnectionChange&&(this.graph.onNodeConnectionChange(h.INPUT,b,d,this,a),this.graph.onNodeConnectionChange(h.OUTPUT,this,a,b,d))}this.setDirtyCanvas(!1, +!0);this.graph.connectionChange(this,r);return r};n.prototype.disconnectOutput=function(a,b){if(a.constructor===String){if(a=this.findOutputSlot(a),-1==a)return h.debug&&console.log("Connect: Error, no slot of name "+a),!1}else if(!this.outputs||a>=this.outputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),!1;var d=this.outputs[a];if(!d||!d.links||0==d.links.length)return!1;if(b){b.constructor===Number&&(b=this.graph.getNodeById(b));if(!b)throw"Target Node not found"; +for(var g=0,f=d.links.length;g=this.inputs.length)return h.debug&&console.log("Connect: Error, slot number not found"),!1;var b=this.inputs[a];if(!b)return!1;var d=this.inputs[a].link;this.inputs[a].link=null;var g=this.graph.links[d];if(g){var f=this.graph.getNodeById(g.origin_id);if(!f)return!1;var r=f.outputs[g.origin_slot];if(!r||!r.links||0==r.links.length)return!1;for(var s=0,c=r.links.length;sb&&this.inputs[b].pos)return d[0]=this.pos[0]+this.inputs[b].pos[0],d[1]=this.pos[1]+this.inputs[b].pos[1],d;if(!a&&g>b&&this.outputs[b].pos)return d[0]=this.pos[0]+this.outputs[b].pos[0], +d[1]=this.pos[1]+this.outputs[b].pos[1],d;if(this.horizontal)return d[0]=this.pos[0]+this.size[0]/g*(b+0.5),d[1]=a?this.pos[1]-h.NODE_TITLE_HEIGHT:this.pos[1]+this.size[1],d;d[0]=a?this.pos[0]+f:this.pos[0]+this.size[0]+1-f;d[1]=this.pos[1]+(b+0.7)*h.NODE_SLOT_HEIGHT+(this.constructor.slot_start_y||0);return d};n.prototype.alignToGrid=function(){this.pos[0]=h.CANVAS_GRID_SIZE*Math.round(this.pos[0]/h.CANVAS_GRID_SIZE);this.pos[1]=h.CANVAS_GRID_SIZE*Math.round(this.pos[1]/h.CANVAS_GRID_SIZE)};n.prototype.trace= +function(a){this.console||(this.console=[]);this.console.push(a);this.console.length>n.MAX_CONSOLE&&this.console.shift();this.graph.onNodeTrace(this,a)};n.prototype.setDirtyCanvas=function(a,b){this.graph&&this.graph.sendActionToCanvas("setDirty",[a,b])};n.prototype.loadImage=function(a){var b=new Image;b.src=h.node_images_path+a;b.ready=!1;var d=this;b.onload=function(){this.ready=!0;d.setDirtyCanvas(!0)};return b};n.prototype.captureInput=function(a){if(this.graph&&this.graph.list_of_graphcanvas)for(var b= +this.graph.list_of_graphcanvas,d=0;da.length||(this._pos[0]=a[0],this._pos[1]=a[1])},get:function(){return this._pos},enumerable:!0}); +Object.defineProperty(this,"size",{set:function(a){!a||2>a.length||(this._size[0]=Math.max(140,a[0]),this._size[1]=Math.max(80,a[1]))},get:function(){return this._size},enumerable:!0})};l.prototype.configure=function(a){this.title=a.title;this._bounding.set(a.bounding);this.color=a.color;this.font=a.font};l.prototype.serialize=function(){var a=this._bounding;return{title:this.title,bounding:[Math.round(a[0]),Math.round(a[1]),Math.round(a[2]),Math.round(a[3])],color:this.color,font:this.font}};l.prototype.move= +function(a,b,d){this._pos[0]+=a;this._pos[1]+=b;if(!d)for(d=0;dthis.max_scale&&(a=this.max_scale);if(a!=this.scale&&this.element){var d=this.element.getBoundingClientRect(); +if(d){b=b||[0.5*d.width,0.5*d.height];d=this.convertCanvasToOffset(b);this.scale=a;0.01>Math.abs(this.scale-1)&&(this.scale=1);var g=this.convertCanvasToOffset(b),d=[g[0]-d[0],g[1]-d[1]];this.offset[0]+=d[0];this.offset[1]+=d[1];if(this.onredraw)this.onredraw(this)}}};x.prototype.changeDeltaScale=function(a,b){this.changeScale(this.scale*a,b)};x.prototype.reset=function(){this.scale=1;this.offset[0]=0;this.offset[1]=0};B.LGraphCanvas=h.LGraphCanvas=e;e.link_type_colors={"-1":h.EVENT_LINK_COLOR,number:"#AAA", +node:"#DCA"};e.gradients={};e.prototype.clear=function(){this.fps=this.render_time=this.last_draw_time=this.frame=0;this.dragging_rectangle=null;this.selected_nodes={};this.selected_group=null;this.visible_nodes=[];this.connecting_node=this.node_capturing_input=this.node_over=this.node_dragged=null;this.highlighted_links={};this.dirty_bgcanvas=this.dirty_canvas=!0;this.node_widget=this.node_in_panel=this.dirty_area=null;this.last_mouse=[0,0];this.last_mouseclick=0;this.visible_area.set([0,0,0,0]); +if(this.onClear)this.onClear()};e.prototype.setGraph=function(a,b){this.graph!=a&&(b||this.clear(),!a&&this.graph?this.graph.detachCanvas(this):(a.attachCanvas(this),this._graph_stack&&(this._graph_stack=null),this.setDirty(!0,!0)))};e.prototype.openSubgraph=function(a){if(!a)throw"graph cannot be null";if(this.graph==a)throw"graph cannot be the same";this.clear();this.graph&&(this._graph_stack||(this._graph_stack=[]),this._graph_stack.push(this.graph));a.attachCanvas(this);this.setDirty(!0,!0)}; +e.prototype.closeSubgraph=function(){if(this._graph_stack&&0!=this._graph_stack.length){var a=this.graph._subgraph_node,b=this._graph_stack.pop();this.selected_nodes={};this.highlighted_links={};b.attachCanvas(this);this.setDirty(!0,!0);a&&(this.centerOnNode(a),this.selectNodes([a]))}};e.prototype.getCurrentGraph=function(){return this.graph};e.prototype.setCanvas=function(a,b){if(a&&a.constructor===String&&(a=document.getElementById(a),!a))throw"Error creating LiteGraph canvas: Canvas not found"; +if(a!==this.canvas&&(!a&&this.canvas&&(b||this.unbindEvents()),this.canvas=a,this.ds.element=a)){a.className+=" lgraphcanvas";a.data=this;a.tabindex="1";this.bgcanvas=null;this.bgcanvas||(this.bgcanvas=document.createElement("canvas"),this.bgcanvas.width=this.canvas.width,this.bgcanvas.height=this.canvas.height);if(null==a.getContext){if("canvas"!=a.localName)throw"Element supplied for LGraphCanvas must be a element, you passed a "+a.localName;throw"This browser doesn't support Canvas";}null== +(this.ctx=a.getContext("2d"))&&(a.webgl_enabled||console.warn("This canvas seems to be WebGL, enabling WebGL renderer"),this.enableWebGL());this._mousemove_callback=this.processMouseMove.bind(this);this._mouseup_callback=this.processMouseUp.bind(this);b||this.bindEvents()}};e.prototype._doNothing=function(a){a.preventDefault();return!1};e.prototype._doReturnTrue=function(a){a.preventDefault();return!0};e.prototype.bindEvents=function(){if(this._events_binded)console.warn("LGraphCanvas: events already binded"); +else{var a=this.canvas,b=this.getCanvasWindow().document;this._mousedown_callback=this.processMouseDown.bind(this);this._mousewheel_callback=this.processMouseWheel.bind(this);a.addEventListener("mousedown",this._mousedown_callback,!0);a.addEventListener("mousemove",this._mousemove_callback);a.addEventListener("mousewheel",this._mousewheel_callback,!1);a.addEventListener("contextmenu",this._doNothing);a.addEventListener("DOMMouseScroll",this._mousewheel_callback,!1);a.addEventListener("touchstart", +this.touchHandler,!0);a.addEventListener("touchmove",this.touchHandler,!0);a.addEventListener("touchend",this.touchHandler,!0);a.addEventListener("touchcancel",this.touchHandler,!0);this._key_callback=this.processKey.bind(this);a.addEventListener("keydown",this._key_callback,!0);b.addEventListener("keyup",this._key_callback,!0);this._ondrop_callback=this.processDrop.bind(this);a.addEventListener("dragover",this._doNothing,!1);a.addEventListener("dragend",this._doNothing,!1);a.addEventListener("drop", +this._ondrop_callback,!1);a.addEventListener("dragenter",this._doReturnTrue,!1);this._events_binded=!0}};e.prototype.unbindEvents=function(){if(this._events_binded){var a=this.getCanvasWindow().document;this.canvas.removeEventListener("mousedown",this._mousedown_callback);this.canvas.removeEventListener("mousewheel",this._mousewheel_callback);this.canvas.removeEventListener("DOMMouseScroll",this._mousewheel_callback);this.canvas.removeEventListener("keydown",this._key_callback);a.removeEventListener("keyup", +this._key_callback);this.canvas.removeEventListener("contextmenu",this._doNothing);this.canvas.removeEventListener("drop",this._ondrop_callback);this.canvas.removeEventListener("dragenter",this._doReturnTrue);this.canvas.removeEventListener("touchstart",this.touchHandler);this.canvas.removeEventListener("touchmove",this.touchHandler);this.canvas.removeEventListener("touchend",this.touchHandler);this.canvas.removeEventListener("touchcancel",this.touchHandler);this._ondrop_callback=this._key_callback= +this._mousewheel_callback=this._mousedown_callback=null;this._events_binded=!1}else console.warn("LGraphCanvas: no events binded")};e.getFileExtension=function(a){var b=a.indexOf("?");-1!=b&&(a=a.substr(0,b));b=a.lastIndexOf(".");return-1==b?"":a.substr(b+1).toLowerCase()};e.prototype.enableWebGL=function(){if(void 0===typeof GL)throw"litegl.js must be included to use a WebGL canvas";if(void 0===typeof enableWebGLCanvas)throw"webglCanvas.js must be included to use this feature";this.gl=this.ctx=enableWebGLCanvas(this.canvas); +this.ctx.webgl=!0;this.bgcanvas=this.canvas;this.bgctx=this.gl;this.canvas.webgl_enabled=!0};e.prototype.setDirty=function(a,b){a&&(this.dirty_canvas=!0);b&&(this.dirty_bgcanvas=!0)};e.prototype.getCanvasWindow=function(){if(!this.canvas)return window;var a=this.canvas.ownerDocument;return a.defaultView||a.parentWindow};e.prototype.startRendering=function(){function a(){this.pause_rendering||this.draw();var b=this.getCanvasWindow();this.is_rendering&&b.requestAnimationFrame(a.bind(this))}this.is_rendering|| +(this.is_rendering=!0,a.call(this))};e.prototype.stopRendering=function(){this.is_rendering=!1};e.prototype.processMouseDown=function(a){if(this.graph){this.adjustMouseEvent(a);var b=this.getCanvasWindow();e.active_canvas=this;this.canvas.removeEventListener("mousemove",this._mousemove_callback);b.document.addEventListener("mousemove",this._mousemove_callback,!0);b.document.addEventListener("mouseup",this._mouseup_callback,!0);var d=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes,5), +g=!1,f=300>h.getTime()-this.last_mouseclick;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]=a.canvasY;this.canvas.focus();h.closeAllContextMenus(b);if(!this.onMouse||!0!=this.onMouse(a)){if(1==a.which){a.ctrlKey&&(this.dragging_rectangle=new Float32Array(4),this.dragging_rectangle[0]=a.canvasX,this.dragging_rectangle[1]=a.canvasY,this.dragging_rectangle[2]=1,this.dragging_rectangle[3]=1,g=!0);var r=!1;if(d&&this.allow_interaction&&!g&&!this.read_only){this.live_mode||d.flags.pinned||this.bringToFront(d); +if(!this.connecting_node&&!d.flags.collapsed&&!this.live_mode)if(!g&&!1!==d.resizable&&w(a.canvasX,a.canvasY,d.pos[0]+d.size[0]-5,d.pos[1]+d.size[1]-5,10,10))this.resizing_node=d,this.canvas.style.cursor="se-resize",g=!0;else{if(d.outputs)for(var s=0,c=d.outputs.length;sr[0]+4||a.canvasYr[1]+4)){this.showLinkMenu(d,a);this.over_link_center=null;break}this.selected_group=this.graph.getGroupOnPos(a.canvasX,a.canvasY);this.selected_group_resizing= +!1;this.selected_group&&!this.read_only&&(a.ctrlKey&&(this.dragging_rectangle=null),10>C([a.canvasX,a.canvasY],[this.selected_group.pos[0]+this.selected_group.size[0],this.selected_group.pos[1]+this.selected_group.size[1]])*this.ds.scale?this.selected_group_resizing=!0:this.selected_group.recomputeInsideNodes());f&&!this.read_only&&this.allow_searchbox&&this.showSearchBox(a);r=!0}!g&&r&&this.allow_dragcanvas&&(this.dragging_canvas=!0)}else 2!=a.which&&3==a.which&&(this.read_only||this.processContextMenu(d, +a));this.last_mouse[0]=a.localX;this.last_mouse[1]=a.localY;this.last_mouseclick=h.getTime();this.last_mouse_dragging=!0;this.graph.change();(!b.document.activeElement||"input"!=b.document.activeElement.nodeName.toLowerCase()&&"textarea"!=b.document.activeElement.nodeName.toLowerCase())&&a.preventDefault();a.stopPropagation();if(this.onMouseDown)this.onMouseDown(a);return!1}}};e.prototype.processMouseMove=function(a){this.autoresize&&this.resize();if(this.graph){e.active_canvas=this;this.adjustMouseEvent(a); +var b=[a.localX,a.localY],d=[b[0]-this.last_mouse[0],b[1]-this.last_mouse[1]];this.last_mouse=b;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]=a.canvasY;a.dragging=this.last_mouse_dragging;this.node_widget&&(this.processNodeWidgets(this.node_widget[0],this.canvas_mouse,a,this.node_widget[1]),this.dirty_canvas=!0);if(this.dragging_rectangle)this.dragging_rectangle[2]=a.canvasX-this.dragging_rectangle[0],this.dragging_rectangle[3]=a.canvasY-this.dragging_rectangle[1],this.dirty_canvas=!0;else if(this.selected_group&& +!this.read_only)this.selected_group_resizing?this.selected_group.size=[a.canvasX-this.selected_group.pos[0],a.canvasY-this.selected_group.pos[1]]:(this.selected_group.move(d[0]/this.ds.scale,d[1]/this.ds.scale,a.ctrlKey),this.selected_group._nodes.length&&(this.dirty_canvas=!0)),this.dirty_bgcanvas=!0;else if(this.dragging_canvas)this.ds.offset[0]+=d[0]/this.ds.scale,this.ds.offset[1]+=d[1]/this.ds.scale,this.dirty_bgcanvas=this.dirty_canvas=!0;else if(this.allow_interaction&&!this.read_only){this.connecting_node&& +(this.dirty_canvas=!0);for(var g=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes),b=0,f=this.graph._nodes.length;bs[0]+4||a.canvasYs[1]+4)){f=r;break}}f!=this.over_link_center&&(this.over_link_center=f,this.dirty_canvas=!0);this.canvas&&(this.canvas.style.cursor="")}if(this.node_capturing_input&&this.node_capturing_input!=g&&this.node_capturing_input.onMouseMove)this.node_capturing_input.onMouseMove(a,[a.canvasX-this.node_capturing_input.pos[0],a.canvasY-this.node_capturing_input.pos[1]], +this);if(this.node_dragged&&!this.live_mode){for(b in this.selected_nodes)g=this.selected_nodes[b],g.pos[0]+=d[0]/this.ds.scale,g.pos[1]+=d[1]/this.ds.scale;this.dirty_bgcanvas=this.dirty_canvas=!0}if(this.resizing_node&&!this.live_mode){this.resizing_node.size[0]=a.canvasX-this.resizing_node.pos[0];this.resizing_node.size[1]=a.canvasY-this.resizing_node.pos[1];d=Math.max(this.resizing_node.inputs?this.resizing_node.inputs.length:0,this.resizing_node.outputs?this.resizing_node.outputs.length:0)*h.NODE_SLOT_HEIGHT+ +(this.resizing_node.widgets?this.resizing_node.widgets.length:0)*(h.NODE_WIDGET_HEIGHT+4)+4;this.resizing_node.size[1]this.dragging_rectangle[3]?this.dragging_rectangle[1]-f:this.dragging_rectangle[1];this.dragging_rectangle[0]=0>this.dragging_rectangle[2]?this.dragging_rectangle[0]-g:this.dragging_rectangle[0];this.dragging_rectangle[1]=r;this.dragging_rectangle[2]=g;this.dragging_rectangle[3]=f;f=[];for(r=0;ra.click_time&&w(a.canvasX,a.canvasY,g.pos[0],g.pos[1]-h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT,h.NODE_TITLE_HEIGHT)&&g.collapse();this.dirty_bgcanvas=this.dirty_canvas=!0;this.node_dragged.pos[0]=Math.round(this.node_dragged.pos[0]); +this.node_dragged.pos[1]=Math.round(this.node_dragged.pos[1]);this.graph.config.align_to_grid&&this.node_dragged.alignToGrid();if(this.onNodeMoved)this.onNodeMoved(this.node_dragged);this.node_dragged=null}else{g=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes);!g&&300>a.click_time&&this.deselectAllNodes();this.dirty_canvas=!0;this.dragging_canvas=!1;if(this.node_over&&this.node_over.onMouseUp)this.node_over.onMouseUp(a,[a.canvasX-this.node_over.pos[0],a.canvasY-this.node_over.pos[1]], +this);if(this.node_capturing_input&&this.node_capturing_input.onMouseUp)this.node_capturing_input.onMouseUp(a,[a.canvasX-this.node_capturing_input.pos[0],a.canvasY-this.node_capturing_input.pos[1]])}}else 2==a.which?(this.dirty_canvas=!0,this.dragging_canvas=!1):3==a.which&&(this.dirty_canvas=!0,this.dragging_canvas=!1);this.graph.change();a.stopPropagation();a.preventDefault();return!1}};e.prototype.processMouseWheel=function(a){if(this.graph&&this.allow_dragcanvas){var b=null!=a.wheelDeltaY?a.wheelDeltaY: +-60*a.detail;this.adjustMouseEvent(a);var d=this.ds.scale;0b&&(d*=1/1.1);this.ds.changeScale(d,[a.localX,a.localY]);this.graph.change();a.preventDefault();return!1}};e.prototype.isOverNodeBox=function(a,b,d){var g=h.NODE_TITLE_HEIGHT;return w(b,d,a.pos[0]+2,a.pos[1]+2-g,g-4,g-4)?!0:!1};e.prototype.isOverNodeInput=function(a,b,d,g){if(a.inputs)for(var f=0,h=a.inputs.length;fd-this.graph._last_trigger_time)&&this.drawBackCanvas();(this.dirty_canvas||a)&&this.drawFrontCanvas();this.fps=this.render_time?1/this.render_time:0;this.frame+=1}};e.prototype.drawFrontCanvas=function(){this.dirty_canvas=!1;this.ctx||(this.ctx=this.bgcanvas.getContext("2d"));var a=this.ctx;if(a){a.start2D&&a.start2D();var b=this.canvas;a.restore();a.setTransform(1,0,0,1,0,0);this.dirty_area&&(a.save(), +a.beginPath(),a.rect(this.dirty_area[0],this.dirty_area[1],this.dirty_area[2],this.dirty_area[3]),a.clip());this.clear_background&&a.clearRect(0,0,b.width,b.height);this.bgcanvas==this.canvas?this.drawBackCanvas():a.drawImage(this.bgcanvas,0,0);if(this.onRender)this.onRender(b,a);this.show_info&&this.renderInfo(a);if(this.graph){a.save();this.ds.toCanvasContext(a);for(var b=this.computeVisibleNodes(null,this.visible_nodes),d=0;d> ";b.fillText(g+d.getTitle(), +0.5*a.width,40);b.restore()}d=!1;this.onRenderBackground&&(d=this.onRenderBackground(a,b));b.restore();b.setTransform(1,0,0,1,0,0);this.visible_links.length=0;if(this.graph){b.save();this.ds.toCanvasContext(b);if(this.background_image&&0.5this.ds.scale;if(this.live_mode){if(!a.flags.collapsed&&(b.shadowColor="transparent",a.onDrawForeground))a.onDrawForeground(b,this,this.canvas)}else{var r= +this.editor_alpha;b.globalAlpha=r;this.render_shadows&&!f?(b.shadowColor=h.DEFAULT_SHADOW_COLOR,b.shadowOffsetX=2*this.ds.scale,b.shadowOffsetY=2*this.ds.scale,b.shadowBlur=3*this.ds.scale):b.shadowColor="transparent";if(!a.flags.collapsed||!a.onDrawCollapsed||!0!=a.onDrawCollapsed(b,this)){var s=a._shape||h.BOX_SHAPE;y.set(a.size);var c=a.horizontal;if(a.flags.collapsed){b.font=this.inner_text_font;var k=a.getTitle?a.getTitle():a.title;null!=k&&(a._collapsed_width=Math.min(a.size[0],b.measureText(k).width+ +2*h.NODE_TITLE_HEIGHT),y[0]=a._collapsed_width,y[1]=0)}a.clip_area&&(b.save(),b.beginPath(),s==h.BOX_SHAPE?b.rect(0,0,y[0],y[1]):s==h.ROUND_SHAPE?b.roundRect(0,0,y[0],y[1],10):s==h.CIRCLE_SHAPE&&b.arc(0.5*y[0],0.5*y[1],0.5*y[0],0,2*Math.PI),b.clip());a.has_errors&&(g="red");this.drawNodeShape(a,b,y,d,g,a.is_selected,a.mouseOver);b.shadowColor="transparent";if(a.onDrawForeground)a.onDrawForeground(b,this,this.canvas);b.textAlign=c?"center":"left";b.font=this.inner_text_font;g=!f;s=this.connecting_output; +b.lineWidth=1;var k=0,e=new Float32Array(2);if(!a.flags.collapsed){if(a.inputs)for(d=0;dthis.ds.scale,k=a._shape||a.constructor.shape||h.ROUND_SHAPE,p=a.constructor.title_mode,q=!0;p==h.TRANSPARENT_TITLE?q=!1:p==h.AUTOHIDE_TITLE&& +s&&(q=!0);v[0]=0;v[1]=q?-f:0;v[2]=d[0]+1;v[3]=q?d[1]+f:d[1];s=b.globalAlpha;b.beginPath();k==h.BOX_SHAPE||c?b.fillRect(v[0],v[1],v[2],v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE?b.roundRect(v[0],v[1],v[2],v[3],this.round_radius,k==h.CARD_SHAPE?0:this.round_radius):k==h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0],0,2*Math.PI);b.fill();a.flags.collapsed||(b.shadowColor="transparent",b.fillStyle="rgba(0,0,0,0.2)",b.fillRect(0,-1,v[2],2));b.shadowColor="transparent";if(a.onDrawBackground)a.onDrawBackground(b, +this,this.canvas);if(q||p==h.TRANSPARENT_TITLE){if(a.onDrawTitleBar)a.onDrawTitleBar(b,f,d,this.ds.scale,g);else if(p!=h.TRANSPARENT_TITLE&&(a.constructor.title_color||this.render_title_colored)){q=a.constructor.title_color||g;a.flags.collapsed&&(b.shadowColor=h.DEFAULT_SHADOW_COLOR);if(this.use_gradients){var t=e.gradients[q];t||(t=e.gradients[q]=b.createLinearGradient(0,0,400,0),t.addColorStop(0,q),t.addColorStop(1,"#000"));b.fillStyle=t}else b.fillStyle=q;b.beginPath();k==h.BOX_SHAPE||c?b.rect(0, +-f,d[0]+1,f):k!=h.ROUND_SHAPE&&k!=h.CARD_SHAPE||b.roundRect(0,-f,d[0]+1,f,this.round_radius,a.flags.collapsed?this.round_radius:0);b.fill();b.shadowColor="transparent"}if(a.onDrawTitleBox)a.onDrawTitleBox(b,f,d,this.ds.scale);else k==h.ROUND_SHAPE||k==h.CIRCLE_SHAPE||k==h.CARD_SHAPE?(c&&(b.fillStyle="black",b.beginPath(),b.arc(0.5*f,-0.5*f,6,0,2*Math.PI),b.fill()),b.fillStyle=a.boxcolor||h.NODE_DEFAULT_BOXCOLOR,c?b.fillRect(0.5*f-5,-0.5*f-5,10,10):(b.beginPath(),b.arc(0.5*f,-0.5*f,5,0,2*Math.PI), +b.fill())):(c&&(b.fillStyle="black",b.fillRect(0.5*(f-10)-1,-0.5*(f+10)-1,12,12)),b.fillStyle=a.boxcolor||h.NODE_DEFAULT_BOXCOLOR,b.fillRect(0.5*(f-10),-0.5*(f+10),10,10));b.globalAlpha=s;if(a.onDrawTitleText)a.onDrawTitleText(b,f,d,this.ds.scale,this.title_text_font,r);!c&&(b.font=this.title_text_font,c=String(a.getTitle()))&&(b.fillStyle=r?"white":a.constructor.title_text_color||this.node_title_color,a.flags.collapsed?(b.textAlign="left",b.measureText(c),b.fillText(c.substr(0,20),f,h.NODE_TITLE_TEXT_Y- +f),b.textAlign="left"):(b.textAlign="left",b.fillText(c,f,h.NODE_TITLE_TEXT_Y-f)));if(a.onDrawTitle)a.onDrawTitle(b)}if(r){if(a.onBounding)a.onBounding(v);p==h.TRANSPARENT_TITLE&&(v[1]-=f,v[3]+=f);b.lineWidth=1;b.globalAlpha=0.8;b.beginPath();k==h.BOX_SHAPE?b.rect(-6+v[0],-6+v[1],12+v[2],12+v[3]):k==h.ROUND_SHAPE||k==h.CARD_SHAPE&&a.flags.collapsed?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius):k==h.CARD_SHAPE?b.roundRect(-6+v[0],-6+v[1],12+v[2],12+v[3],2*this.round_radius,2):k== +h.CIRCLE_SHAPE&&b.arc(0.5*d[0],0.5*d[1],0.5*d[0]+6,0,2*Math.PI);b.strokeStyle="#FFF";b.stroke();b.strokeStyle=g;b.globalAlpha=1}};var G=new Float32Array(4),p=new Float32Array(4),q=new Float32Array(2),k=new Float32Array(2);e.prototype.drawConnections=function(a){var b=h.getTime(),d=this.visible_area;G[0]=d[0]-20;G[1]=d[1]-20;G[2]=d[2]+40;G[3]=d[3]+40;a.lineWidth=this.connections_width;a.fillStyle="#AAA";a.strokeStyle="#AAA";a.globalAlpha=this.editor_alpha;for(var d=this.graph._nodes,g=0,f=d.length;g< +f;++g){var r=d[g];if(r.inputs&&r.inputs.length)for(var s=0;sp[2]&&(p[0]+=p[2],p[2]=Math.abs(p[2]));0>p[3]&&(p[1]+=p[3],p[3]=Math.abs(p[3]));if(u(p,G)){var n=e.outputs[z],z=r.inputs[s];if(n&& +z&&(e=n.dir||(e.horizontal?h.DOWN:h.RIGHT),z=z.dir||(r.horizontal?h.UP:h.LEFT),this.renderLink(a,l,t,c,!1,0,null,e,z),c&&c._last_time&&1E3>b-c._last_time)){var n=2-0.002*(b-c._last_time),K=a.globalAlpha;a.globalAlpha=K*n;this.renderLink(a,l,t,c,!0,n,"white",e,z);a.globalAlpha=K}}}}}}a.globalAlpha=1};e.prototype.renderLink=function(a,b,d,g,f,r,c,k,p,q){g&&this.visible_links.push(g);!c&&g&&(c=g.color||e.link_type_colors[g.type]);c||(c=this.default_link_color);null!=g&&this.highlighted_links[g.id]&& +(c="#FFF");k=k||h.RIGHT;p=p||h.LEFT;var z=C(b,d);this.render_connections_border&&0.6b[1]?0:Math.PI,a.save(),a.translate(t[0],t[1]),a.rotate(l),a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore(),a.save(),a.translate(q[0],q[1]),a.rotate(n), +a.beginPath(),a.moveTo(-5,-3),a.lineTo(0,7),a.lineTo(5,-3),a.fill(),a.restore()),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill());if(r)for(a.fillStyle=c,t=0;5>t;++t)r=(0.001*h.getTime()+0.2*t)%1,f=this.computeConnectionPoint(b,d,r,k,p),a.beginPath(),a.arc(f[0],f[1],5,0,2*Math.PI),a.fill()};e.prototype.computeConnectionPoint=function(a,b,d,g,f){g=g||h.RIGHT;f=f||h.LEFT;var r=C(a,b),c=[a[0],a[1]],k=[b[0],b[1]];switch(g){case h.LEFT:c[0]+=-0.25*r;break;case h.RIGHT:c[0]+=0.25*r;break;case h.UP:c[1]+= +-0.25*r;break;case h.DOWN:c[1]+=0.25*r}switch(f){case h.LEFT:k[0]+=-0.25*r;break;case h.RIGHT:k[0]+=0.25*r;break;case h.UP:k[1]+=-0.25*r;break;case h.DOWN:k[1]+=0.25*r}g=(1-d)*(1-d)*(1-d);f=3*(1-d)*(1-d)*d;r=3*(1-d)*d*d;d*=d*d;return[g*a[0]+f*c[0]+r*k[0]+d*b[0],g*a[1]+f*c[1]+r*k[1]+d*b[1]]};e.prototype.drawExecutionOrder=function(a){a.shadowColor="transparent";a.globalAlpha=0.25;a.textAlign="center";a.strokeStyle="white";a.globalAlpha=0.75;for(var b=this.visible_nodes,d=0;dt.last_y&&s +t.options.max&&(t.value=t.options.max);else if("mousedown"==d.type){var l=t.options.values;l&&l.constructor===Function&&(l=t.options.values(t,a));var z=null;"number"!=t.type&&(z=l.constructor===Array?l:Object.keys(l));c=40>c?-1:c>k-40?1:0;if("number"==t.type)t.value+=0.1*c*(t.options.step||1),null!=t.options.min&&t.valuet.options.max&&(t.value=t.options.max);else if(c)e=-1,e=l.constructor===Object?z.indexOf(String(t.value))+c:z.indexOf(t.value)+ +c,e>=z.length&&(e=z.length-1),0>e&&(e=0),t.value=l.constructor===Array?l[e]:e;else{var n=l!=z?Object.values(l):l;new h.ContextMenu(n,{scale:Math.max(1,this.ds.scale),event:d,className:"dark",callback:y.bind(t)},e);var y=function(a,b,d){l!=z&&(a=n.indexOf(a));this.value=a;f(this,a);p.dirty_canvas=!0;return!1}}}else"mouseup"==d.type&&"number"==t.type&&(c=40>c?-1:c>k-40?1:0,200>d.click_time&&0==c&&this.prompt("Value",t.value,function(a){this.value=Number(a);f(this,this.value)}.bind(t),d));g!=t.value&& +setTimeout(function(){f(this,this.value)}.bind(t),20);this.dirty_canvas=!0;break;case "toggle":"mousedown"==d.type&&(t.value=!t.value,setTimeout(function(){f(t,t.value)},20));break;case "string":case "text":"mousedown"==d.type&&this.prompt("Value",t.value,function(a){this.value=a;f(this,a)}.bind(t),d);break;default:t.mouse&&t.mouse(ctx,d,[c,s],a)}return t}}return null};e.prototype.drawGroups=function(a,b){if(this.graph){var d=this.graph._groups;b.save();b.globalAlpha=0.5*this.editor_alpha;for(var g= +0;gd&&0.01>b.editor_alpha&&(clearInterval(g),1>d&&(b.live_mode=!0));1"+ +q+""+a+"",value:q});if(p.length)return new h.ContextMenu(p,{event:d,callback:c,parentMenu:g,allow_html:!0,node:f},b),!1}};e.decodeHTML=function(a){var b=document.createElement("div");b.innerText=a;return b.innerHTML};e.onResizeNode=function(a,b,d,g,f){f&&(f.size=f.computeSize(),f.setDirtyCanvas(!0,!0))};e.prototype.showLinkMenu=function(a,b){var d=this;console.log(a);var g=new h.ContextMenu(["Add Node",null,"Delete"],{event:b,title:null!=a.data?a.data.constructor.name: +null,callback:function(b,h,c){switch(b){case "Add Node":e.onMenuAdd(null,null,c,g,function(b){console.log("node autoconnect");var f=d.graph.getNodeById(a.origin_id),g=d.graph.getNodeById(a.target_id);b.inputs&&b.inputs.length&&b.outputs&&b.outputs.length&&f.outputs[a.origin_slot].type==b.inputs[0].type&&b.outputs[0].type==g.inputs[0].type&&(f.connect(a.origin_slot,b,0),b.connect(0,g,a.target_slot),b.pos[0]-=0.5*b.size[0])});break;case "Delete":d.graph.removeLink(a.id)}}});return!1};e.onShowPropertyEditor= +function(a,b,d,g,f){function h(){var b=p.value;"Number"==a.type?b=Number(b):"Boolean"==a.type&&(b=Boolean(b));f[c]=b;k.parentNode&&k.parentNode.removeChild(k);f.setDirtyCanvas(!0,!0)}var c=a.property||"title";b=f[c];var k=document.createElement("div");k.className="graphdialog";k.innerHTML="";k.querySelector(".name").innerText=c;var p=k.querySelector("input");p&&(p.value=b,p.addEventListener("blur",function(a){this.focus()}), +p.addEventListener("keydown",function(a){13==a.keyCode&&(h(),a.preventDefault(),a.stopPropagation())}));b=e.active_canvas.canvas;d=b.getBoundingClientRect();var q=g=-20;d&&(g-=d.left,q-=d.top);event?(k.style.left=event.clientX+g+"px",k.style.top=event.clientY+q+"px"):(k.style.left=0.5*b.width+g+"px",k.style.top=0.5*b.height+q+"px");k.querySelector("button").addEventListener("click",h);b.parentNode.appendChild(k)};e.prototype.prompt=function(a,b,d,g){var f=this;a=a||"";var h=!1,c=document.createElement("div"); +c.className="graphdialog rounded";c.innerHTML=" ";c.close=function(){f.prompt_box=null;c.parentNode&&c.parentNode.removeChild(c)};1e.search_limit)break}}s=null;if(Array.prototype.filter)s=Object.keys(h.registered_node_types).filter(l);else for(k in s=[],h.registered_node_types)l(k)&&s.push(k);for(k=0;ke.search_limit);k++);var l=function(a){var b=h.registered_node_types[a];return p&&b.filter!=p?!1:-1!==a.toLowerCase().indexOf(d)}}}var f=this,c=e.active_canvas,k=c.canvas,p=k.ownerDocument||document, +q=document.createElement("div");q.className="litegraph litesearchbox graphdialog rounded";q.innerHTML="Search
";q.close=function(){f.search_box=null;p.body.focus();p.body.style.overflow="";setTimeout(function(){f.canvas.focus()},20);q.parentNode&&q.parentNode.removeChild(q)};var l=null;1k.height-200&&(z.style.maxHeight=k.height-a.layerY-20+"px");u.focus();return q};e.prototype.showEditPropertyValue=function(a,b,d){function g(){f(t.value)} +function f(f){"number"==typeof a.properties[b]&&(f=Number(f));if("array"==h||"object"==h)f=JSON.parse(f);a.properties[b]=f;a._graph&&a._graph._version++;if(a.onPropertyChanged)a.onPropertyChanged(b,f);if(d.onclose)d.onclose();e.close();a.setDirtyCanvas(!0,!0)}if(a&&void 0!==a.properties[b]){d=d||{};var c=a.getPropertyInfo(b),h=c.type,k="";if("string"==h||"number"==h||"array"==h||"object"==h)k="";else if("enum"==h&&c.values){var k=""}else if("boolean"==h)k="";else{console.warn("unknown type: "+h);return}var e=this.createDialog(""+b+""+k+"",d);if("enum"==h&&c.values){var t=e.querySelector("select");t.addEventListener("change", +function(a){f(a.target.value)})}else if("boolean"==h)(t=e.querySelector("input"))&&t.addEventListener("click",function(a){f(!!t.checked)});else if(t=e.querySelector("input"))t.addEventListener("blur",function(a){this.focus()}),q=void 0!==a.properties[b]?a.properties[b]:"",q=JSON.stringify(q),t.value=q,t.addEventListener("keydown",function(a){13==a.keyCode&&(g(),a.preventDefault(),a.stopPropagation())});e.querySelector("button").addEventListener("click",g);return e}};e.prototype.createDialog=function(a, +b){b=b||{};var d=document.createElement("div");d.className="graphdialog";d.innerHTML=a;var g=this.canvas.getBoundingClientRect(),f=-20,c=-20;g&&(f-=g.left,c-=g.top);b.position?(f+=b.position[0],c+=b.position[1]):b.event?(f+=b.event.clientX,c+=b.event.clientY):(f+=0.5*this.canvas.width,c+=0.5*this.canvas.height);d.style.left=f+"px";d.style.top=c+"px";this.canvas.parentNode.appendChild(d);d.close=function(){this.parentNode&&this.parentNode.removeChild(this)};return d};e.onMenuNodeCollapse=function(a, +b,d,g,f){f.collapse()};e.onMenuNodePin=function(a,b,d,g,f){f.pin()};e.onMenuNodeMode=function(a,b,d,g,f){new h.ContextMenu(["Always","On Event","On Trigger","Never"],{event:d,callback:function(a){if(f)switch(a){case "On Event":f.mode=h.ON_EVENT;break;case "On Trigger":f.mode=h.ON_TRIGGER;break;case "Never":f.mode=h.NEVER;break;default:f.mode=h.ALWAYS}},parentMenu:g,node:f});return!1};e.onMenuNodeColors=function(a,b,d,g,f){if(!f)throw"no node for color";b=[];b.push({value:null,content:"No color"}); +for(var c in e.node_colors)a=e.node_colors[c],a={value:c,content:""+c+""},b.push(a);new h.ContextMenu(b,{event:d,callback:function(a){f&&((a=a.value?e.node_colors[a.value]:null)?f.constructor===h.LGraphGroup?f.color=a.groupcolor:(f.color=a.color,f.bgcolor=a.bgcolor):(delete f.color,delete f.bgcolor),f.setDirtyCanvas(!0,!0))},parentMenu:g,node:f});return!1};e.onMenuNodeShapes= +function(a,b,d,g,f){if(!f)throw"no node passed";new h.ContextMenu(h.VALID_SHAPES,{event:d,callback:function(a){f&&(f.shape=a,f.setDirtyCanvas(!0))},parentMenu:g,node:f});return!1};e.onMenuNodeRemove=function(a,b,d,g,f){if(!f)throw"no node passed";!1!==f.removable&&(f.graph.remove(f),f.setDirtyCanvas(!0,!0))};e.onMenuNodeClone=function(a,b,d,g,f){!1!=f.clonable&&(a=f.clone())&&(a.pos=[f.pos[0]+5,f.pos[1]+5],f.graph.add(a),f.setDirtyCanvas(!0,!0))};e.node_colors={red:{color:"#322",bgcolor:"#533",groupcolor:"#A88"}, +brown:{color:"#332922",bgcolor:"#593930",groupcolor:"#b06634"},green:{color:"#232",bgcolor:"#353",groupcolor:"#8A8"},blue:{color:"#223",bgcolor:"#335",groupcolor:"#88A"},pale_blue:{color:"#2a363b",bgcolor:"#3f5159",groupcolor:"#3f789e"},cyan:{color:"#233",bgcolor:"#355",groupcolor:"#8AA"},purple:{color:"#323",bgcolor:"#535",groupcolor:"#a1309b"},yellow:{color:"#432",bgcolor:"#653",groupcolor:"#b58b2a"},black:{color:"#222",bgcolor:"#000",groupcolor:"#444"}};e.prototype.getCanvasMenuOptions=function(){var a= +null;this.getMenuOptions?a=this.getMenuOptions():(a=[{content:"Add Node",has_submenu:!0,callback:e.onMenuAdd},{content:"Add Group",callback:e.onGroupAdd}],this._graph_stack&&0Name",f),k=h.querySelector("input");k&&c&&(k.value=c.label||"");h.querySelector("button").addEventListener("click",function(a){k.value&& +(c&&(c.label=k.value),d.setDirty(!0));h.close()})}},extra:a};a&&(c.title=a.type);var k=null;a&&(k=a.getSlotInPosition(b.canvasX,b.canvasY),e.active_node=a);if(k){f=[];k&&k.output&&k.output.links&&k.output.links.length&&f.push({content:"Disconnect Links",slot:k});var p=k.input||k.output;f.push(p.locked?"Cannot remove":{content:"Remove Slot",slot:k});f.push(p.nameLocked?"Cannot rename":{content:"Rename Slot",slot:k});c.title=(k.input?k.input.type:k.output.type)||"*";k.input&&k.input.type==h.ACTION&& +(c.title="Action");k.output&&k.output.type==h.EVENT&&(c.title="Event")}else a?f=this.getNodeMenuOptions(a):(f=this.getCanvasMenuOptions(),(k=this.graph.getGroupOnPos(b.canvasX,b.canvasY))&&f.push(null,{content:"Edit Group",has_submenu:!0,submenu:{title:"Group",extra:k,options:this.getGroupMenuOptions(k)}}));f&&new h.ContextMenu(f,c,g)};"undefined"!=typeof window&&window.CanvasRenderingContext2D&&(window.CanvasRenderingContext2D.prototype.roundRect=function(a,b,d,g,f,c){void 0===f&&(f=5);void 0=== +c&&(c=f);this.moveTo(a+f,b);this.lineTo(a+d-f,b);this.quadraticCurveTo(a+d,b,a+d,b+f);this.lineTo(a+d,b+g-c);this.quadraticCurveTo(a+d,b+g,a+d-c,b+g);this.lineTo(a+c,b+g);this.quadraticCurveTo(a,b+g,a,b+g-c);this.lineTo(a,b+f);this.quadraticCurveTo(a,b,a+f,b)});h.compareObjects=function(a,b){for(var d in a)if(a[d]!=b[d])return!1;return!0};h.distance=C;h.colorToString=function(a){return"rgba("+Math.round(255*a[0]).toFixed()+","+Math.round(255*a[1]).toFixed()+","+Math.round(255*a[2]).toFixed()+","+ +(4==a.length?a[3].toFixed(2):"1.0")+")"};h.isInsideRectangle=w;h.growBounding=function(a,b,d){ba[2]&&(a[2]=b);da[3]&&(a[3]=d)};h.isInsideBounding=function(a,b){return a[0]b[1][0]||a[1]>b[1][1]?!1:!0};h.overlapBounding=u;h.hex2num=function(a){"#"==a.charAt(0)&&(a=a.slice(1));a=a.toUpperCase();for(var b=Array(3),d=0,g,f,c=0;6>c;c+=2)g="0123456789ABCDEF".indexOf(a.charAt(c)),f="0123456789ABCDEF".indexOf(a.charAt(c+1)),b[d]=16*g+f,d++;return b}; +h.num2hex=function(a){for(var b="#",d,g,f=0;3>f;f++)d=a[f]/16,g=a[f]%16,b+="0123456789ABCDEF".charAt(d)+"0123456789ABCDEF".charAt(g);return b};D.prototype.addItem=function(a,b,d){function g(a){var b=this.value;b&&b.has_submenu&&f.call(this,a)}function f(a){var b=this.value,f=!0;c.current_submenu&&c.current_submenu.close(a);if(d.callback){var g=d.callback.call(this,b,d,a,c,d.node);!0===g&&(f=!1)}if(b&&(b.callback&&!d.ignore_item_callbacks&&!0!==b.disabled&&(g=b.callback.call(this,b,d,a,c,d.extra), +!0===g&&(f=!1)),b.submenu)){if(!b.submenu.options)throw"ContextMenu submenu needs options";new c.constructor(b.submenu.options,{callback:b.submenu.callback,event:a,parentMenu:c,ignore_item_callbacks:b.submenu.ignore_item_callbacks,title:b.submenu.title,extra:b.submenu.extra,autoopen:d.autoopen});f=!1}f&&!c.lock&&c.close()}var c=this;d=d||{};var h=document.createElement("div");h.className="litemenu-entry submenu";var k=!1;if(null===b)h.classList.add("separator");else{h.innerHTML=b&&b.title?b.title: +a;if(h.value=b)b.disabled&&(k=!0,h.classList.add("disabled")),(b.submenu||b.has_submenu)&&h.classList.add("has_submenu");"function"==typeof b?(h.dataset.value=a,h.onclick_callback=b):h.dataset.value=b;b.className&&(h.className+=" "+b.className)}this.root.appendChild(h);k||h.addEventListener("click",f);d.autoopen&&h.addEventListener("mouseenter",g);return h};D.prototype.close=function(a,b){this.root.parentNode&&this.root.parentNode.removeChild(this.root);this.parentMenu&&!b&&(this.parentMenu.lock= +!1,this.parentMenu.current_submenu=null,void 0===a?this.parentMenu.close():a&&!D.isCursorOverElement(a,this.parentMenu.root)&&D.trigger(this.parentMenu.root,"mouseleave",a));this.current_submenu&&this.current_submenu.close(a,!0);this.root.closing_timer&&clearTimeout(this.root.closing_timer)};D.trigger=function(a,b,d,g){var f=document.createEvent("CustomEvent");f.initCustomEvent(b,!0,!0,d);f.srcElement=g;a.dispatchEvent?a.dispatchEvent(f):a.__events&&a.__events.dispatchEvent(f);return f};D.prototype.getTopMenu= +function(){return this.options.parentMenu?this.options.parentMenu.getTopMenu():this};D.prototype.getFirstEvent=function(){return this.options.parentMenu?this.options.parentMenu.getFirstEvent():this.options.event};D.isCursorOverElement=function(a,b){var d=a.clientX,g=a.clientY,f=b.getBoundingClientRect();return f?g>f.top&&gf.left&&dMath.abs(d))return g[1];d=(a-g[0])/d;return g[1]*(1-d)+f[1]*d}}return 0}};A.prototype.draw=function(a,b,d,g,f,c){if(d=this.points){this.size=b;var h=b[0]-2*this.margin;b=b[1]-2*this.margin;f=f||"#666";a.save();a.translate(this.margin,this.margin);g&&(a.fillStyle="#111",a.fillRect(0,0,h,b),a.fillStyle="#222",a.fillRect(0.5*h,0,1,b),a.strokeStyle="#333",a.strokeRect(0,0,h,b));a.strokeStyle= +f;c&&(a.globalAlpha=0.5);a.beginPath();for(g=0;ga[1])){var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=a[0]-this.margin,h=a[1]-this.margin;this.selected=this.getCloserPoint([c, +h],30/b.ds.scale);-1==this.selected&&(g=[c/g,1-h/f],d.push(g),d.sort(function(a,b){return a[0]-b[0]}),this.selected=d.indexOf(g),this.must_update=!0);if(-1!=this.selected)return!0}};A.prototype.onMouseMove=function(a,b){var d=this.points;if(d){var g=this.selected;if(!(0>g)){var f=(a[0]-this.margin)/(this.size[0]-2*this.margin),c=(a[1]-this.margin)/(this.size[1]-2*this.margin);this._nearest=this.getCloserPoint([a[0]-this.margin,a[1]-this.margin],30/b.ds.scale);var h=d[g];if(h){var k=0==g||g==d.length- +1;!k&&(-10>a[0]||a[0]>this.size[0]+10||-10>a[1]||a[1]>this.size[1]+10)?(d.splice(g,1),this.selected=-1):(h[0]=k?0==g?0:1:Math.clamp(f,0,1),h[1]=1-Math.clamp(c,0,1),d.sort(function(a,b){return a[0]-b[0]}),this.selected=d.indexOf(h),this.must_update=!0)}}}};A.prototype.onMouseUp=function(a,b){this.selected=-1;return!1};A.prototype.getCloserPoint=function(a,b){var d=this.points;if(!d)return-1;b=b||30;for(var g=this.size[0]-2*this.margin,f=this.size[1]-2*this.margin,c=d.length,h=[0,0],k=1E6,p=-1,q=0;q< +c;++q){var e=d[q];h[0]=e[0]*g;h[1]=(1-e[1])*f;e=vec2.distance(a,h);e>k||e>b||(p=q,k=e)}return p};h.CurveEditor=A;h.getParameterNames=function(a){return(a+"").replace(/[/][/].*$/gm,"").replace(/\s+/g,"").replace(/[/][*][^/*]*[*][/]/g,"").split("){",1)[0].replace(/^[^(]*[(]/,"").replace(/=[^,]+/g,"").split(",").filter(Boolean)};Math.clamp=function(a,b,d){return b>a?b:d body_rect.width - root_rect.width - 10) { + if (body_rect.width && left > body_rect.width - root_rect.width - 10) { left = body_rect.width - root_rect.width - 10; } - if (top > body_rect.height - root_rect.height - 10) { + if (body_rect.height && top > body_rect.height - root_rect.height - 10) { top = body_rect.height - root_rect.height - 10; } }