From bb7e4e6bb948983e2eea4ea062c4878d84af3197 Mon Sep 17 00:00:00 2001 From: inventivetalent Date: Mon, 19 Nov 2018 17:09:01 +0100 Subject: [PATCH 1/3] check if the slots are available, to catch any unwanted exceptions (#56) --- build/litegraph.js | 20139 +++++++++++++++++++-------------------- build/litegraph.min.js | 3980 ++++---- src/litegraph.js | 1 + 3 files changed, 11864 insertions(+), 12256 deletions(-) diff --git a/build/litegraph.js b/build/litegraph.js index 0acdb4083..3cffe7bc5 100644 --- a/build/litegraph.js +++ b/build/litegraph.js @@ -1,8511 +1,8510 @@ -//packer version - -(function(global){ -// ************************************************************* -// LiteGraph CLASS ******* -// ************************************************************* - -/* FYI: links are stored in graph.links with this structure per object -{ - id: number - type: string, - origin_id: number, - origin_slot: number, - target_id: number, - target_slot: number, - data: * -}; -*/ - -/** -* The Global Scope. It contains all the registered node classes. -* -* @class LiteGraph -* @constructor -*/ - -var LiteGraph = global.LiteGraph = { - - CANVAS_GRID_SIZE: 10, - - NODE_TITLE_HEIGHT: 20, - NODE_SLOT_HEIGHT: 15, - 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: "#444", - NODE_DEFAULT_BOXCOLOR: "#666", - NODE_DEFAULT_SHAPE: "box", - DEFAULT_SHADOW_COLOR: "rgba(0,0,0,0.5)", - - LINK_COLOR: "#AAD", - EVENT_LINK_COLOR: "#F85", - CONNECTING_LINK_COLOR: "#AFA", - - MAX_NUMBER_OF_NODES: 1000, //avoid infinite loops - DEFAULT_POSITION: [100,100],//default node position - VALID_SHAPES: ["default","box","round","card"], //,"circle" - - //shapes are used for nodes but also for slots - BOX_SHAPE: 1, - ROUND_SHAPE: 2, - CIRCLE_SHAPE: 3, - CARD_SHAPE: 4, - ARROW_SHAPE: 5, - - //enums - INPUT: 1, - OUTPUT: 2, - - EVENT: -1, //for outputs - ACTION: -1, //for inputs - - ALWAYS: 0, - ON_EVENT: 1, - NEVER: 2, - ON_TRIGGER: 3, - - UP: 1, - DOWN:2, - LEFT:3, - RIGHT:4, - CENTER:5, - - NORMAL_TITLE: 0, - NO_TITLE: 1, - TRANSPARENT_TITLE: 2, - AUTOHIDE_TITLE: 3, - - proxy: null, //used to redirect calls - node_images_path: "", - - debug: false, - throw_errors: true, - allow_scripts: true, - registered_node_types: {}, //nodetypes by string - node_types_by_file_extension: {}, //used for droping files in the canvas - Nodes: {}, //node types by classname - - /** - * Register a node class so it can be listed when the user wants to create a new one - * @method registerNodeType - * @param {String} type name of the node and path - * @param {Class} base_class class containing the structure of a node - */ - - registerNodeType: function(type, base_class) - { - if(!base_class.prototype) - throw("Cannot register a simple object, it must be a class with a prototype"); - base_class.type = type; - - if(LiteGraph.debug) - console.log("Node registered: " + type); - - var categories = type.split("/"); - var classname = base_class.name; - - var pos = type.lastIndexOf("/"); - base_class.category = type.substr(0,pos); - - if(!base_class.title) - base_class.title = classname; - //info.name = name.substr(pos+1,name.length - pos); - - //extend class - if(base_class.prototype) //is a class - for(var i in LGraphNode.prototype) - if(!base_class.prototype[i]) - base_class.prototype[i] = LGraphNode.prototype[i]; - - Object.defineProperty( base_class.prototype, "shape",{ - set: function(v) { - switch(v) - { - case "default": delete this._shape; break; - case "box": this._shape = LiteGraph.BOX_SHAPE; break; - case "round": this._shape = LiteGraph.ROUND_SHAPE; break; - case "circle": this._shape = LiteGraph.CIRCLE_SHAPE; break; - case "card": this._shape = LiteGraph.CARD_SHAPE; break; - default: - this._shape = v; - } - }, - get: function(v) - { - return this._shape; - }, - enumerable: true - }); - - this.registered_node_types[ type ] = base_class; - if(base_class.constructor.name) - this.Nodes[ classname ] = base_class; - - //warnings - if(base_class.prototype.onPropertyChange) - console.warn("LiteGraph node class " + type + " has onPropertyChange method, it must be called onPropertyChanged with d at the end"); - - if( base_class.supported_extensions ) - { - for(var i in base_class.supported_extensions ) - this.node_types_by_file_extension[ base_class.supported_extensions[i].toLowerCase() ] = base_class; - } - }, - - /** - * Create a new node type by passing a function, it wraps it with a propper class and generates inputs according to the parameters of the function. - * Useful to wrap simple methods that do not require properties, and that only process some input to generate an output. - * @method wrapFunctionAsNode - * @param {String} name node name with namespace (p.e.: 'math/sum') - * @param {Function} func - * @param {Array} param_types [optional] an array containing the type of every parameter, otherwise parameters will accept any type - * @param {String} return_type [optional] string with the return type, otherwise it will be generic - */ - wrapFunctionAsNode: function( name, func, param_types, return_type ) - { - var params = Array(func.length); - var code = ""; - var names = LiteGraph.getParameterNames( func ); - for(var i = 0; i < names.length; ++i) - code += "this.addInput('"+names[i]+"',"+(param_types && param_types[i] ? "'" + param_types[i] + "'" : "0") + ");\n"; - code += "this.addOutput('out',"+( return_type ? "'" + return_type + "'" : 0 )+");\n"; - var classobj = Function(code); - classobj.title = name.split("/").pop(); - classobj.desc = "Generated from " + func.name; - classobj.prototype.onExecute = function onExecute() - { - for(var i = 0; i < params.length; ++i) - params[i] = this.getInputData(i); - var r = func.apply( this, params ); - this.setOutputData(0,r); - } - this.registerNodeType( name, classobj ); - }, - - /** - * Adds this method to all nodetypes, existing and to be created - * (You can add it to LGraphNode.prototype but then existing node types wont have it) - * @method addNodeMethod - * @param {Function} func - */ - addNodeMethod: function( name, func ) - { - LGraphNode.prototype[name] = func; - for(var i in this.registered_node_types) - { - var type = this.registered_node_types[i]; - if(type.prototype[name]) - type.prototype["_" + name] = type.prototype[name]; //keep old in case of replacing - type.prototype[name] = func; - } - }, - - /** - * Create a node of a given type with a name. The node is not attached to any graph yet. - * @method createNode - * @param {String} type full name of the node class. p.e. "math/sin" - * @param {String} name a name to distinguish from other nodes - * @param {Object} options to set options - */ - - createNode: function( type, title, options ) - { - var base_class = this.registered_node_types[type]; - if (!base_class) - { - if(LiteGraph.debug) - console.log("GraphNode type \"" + type + "\" not registered."); - return null; - } - - var prototype = base_class.prototype || base_class; - - title = title || base_class.title || type; - - var node = new base_class( title ); - node.type = type; - - if(!node.title && title) node.title = title; - if(!node.properties) node.properties = {}; - if(!node.properties_info) node.properties_info = []; - if(!node.flags) node.flags = {}; - if(!node.size) node.size = node.computeSize(); - if(!node.pos) node.pos = LiteGraph.DEFAULT_POSITION.concat(); - if(!node.mode) node.mode = LiteGraph.ALWAYS; - - //extra options - if(options) - { - for(var i in options) - node[i] = options[i]; - } - - return node; - }, - - /** - * Returns a registered node type with a given name - * @method getNodeType - * @param {String} type full name of the node class. p.e. "math/sin" - * @return {Class} the node class - */ - - getNodeType: function(type) - { - return this.registered_node_types[type]; - }, - - - /** - * Returns a list of node types matching one category - * @method getNodeType - * @param {String} category category name - * @return {Array} array with all the node classes - */ - - getNodeTypesInCategory: function( category, filter ) - { - var r = []; - for(var i in this.registered_node_types) - { - var type = this.registered_node_types[i]; - if(filter && type.filter && type.filter != filter) - continue; - - if(category == "" ) - { - if (type.category == null) - r.push(type); - } - else if (type.category == category) - r.push(type); - } - - return r; - }, - - /** - * Returns a list with all the node type categories - * @method getNodeTypesCategories - * @return {Array} array with all the names of the categories - */ - - getNodeTypesCategories: function() - { - var categories = {"":1}; - for(var i in this.registered_node_types) - if(this.registered_node_types[i].category && !this.registered_node_types[i].skip_list) - categories[ this.registered_node_types[i].category ] = 1; - var result = []; - for(var i in categories) - result.push(i); - return result; - }, - - //debug purposes: reloads all the js scripts that matches a wilcard - reloadNodes: function (folder_wildcard) - { - var tmp = document.getElementsByTagName("script"); - //weird, this array changes by its own, so we use a copy - var script_files = []; - for(var i in tmp) - script_files.push(tmp[i]); - - - var docHeadObj = document.getElementsByTagName("head")[0]; - folder_wildcard = document.location.href + folder_wildcard; - - for(var i in script_files) - { - var src = script_files[i].src; - if( !src || src.substr(0,folder_wildcard.length ) != folder_wildcard) - continue; - - try - { - if(LiteGraph.debug) - console.log("Reloading: " + src); - var dynamicScript = document.createElement("script"); - dynamicScript.type = "text/javascript"; - dynamicScript.src = src; - docHeadObj.appendChild(dynamicScript); - docHeadObj.removeChild(script_files[i]); - } - catch (err) - { - if(LiteGraph.throw_errors) - throw err; - if(LiteGraph.debug) - console.log("Error while reloading " + src); - } - } - - if(LiteGraph.debug) - console.log("Nodes reloaded"); - }, - - //separated just to improve if it doesnt work - cloneObject: function(obj, target) - { - if(obj == null) return null; - var r = JSON.parse( JSON.stringify( obj ) ); - if(!target) return r; - - for(var i in r) - target[i] = r[i]; - return target; - }, - - isValidConnection: function( type_a, type_b ) - { - if( !type_a || //generic output - !type_b || //generic input - type_a == type_b || //same type (is valid for triggers) - type_a == LiteGraph.EVENT && type_b == LiteGraph.ACTION ) - return true; - - // Enforce string type to handle toLowerCase call (-1 number not ok) - type_a = String(type_a); - type_b = String(type_b); - type_a = type_a.toLowerCase(); - type_b = type_b.toLowerCase(); - - // For nodes supporting multiple connection types - if( type_a.indexOf(",") == -1 && type_b.indexOf(",") == -1 ) - return type_a == type_b; - - // Check all permutations to see if one is valid - var supported_types_a = type_a.split(","); - var supported_types_b = type_b.split(","); - for(var i = 0; i < supported_types_a.length; ++i) - for(var j = 0; j < supported_types_b.length; ++j) - if( supported_types_a[i] == supported_types_b[j] ) - return true; - - return false; - } -}; - -//timer that works everywhere -if(typeof(performance) != "undefined") - LiteGraph.getTime = performance.now.bind(performance); -else if(typeof(Date) != "undefined" && Date.now) - LiteGraph.getTime = Date.now.bind(Date); -else if(typeof(process) != "undefined") - LiteGraph.getTime = function(){ - var t = process.hrtime(); - return t[0]*0.001 + t[1]*(1e-6); - } -else - LiteGraph.getTime = function getTime() { return (new Date).getTime(); } - - - - - - -//********************************************************************************* -// LGraph CLASS -//********************************************************************************* - -/** -* LGraph is the class that contain a full graph. We instantiate one and add nodes to it, and then we can run the execution loop. -* -* @class LGraph -* @constructor -* @param {Object} o data from previous serialization [optional] -*/ - -function LGraph( o ) -{ - if (LiteGraph.debug) - console.log("Graph created"); - this.list_of_graphcanvas = null; - this.clear(); - - if(o) - this.configure(o); -} - -global.LGraph = LiteGraph.LGraph = LGraph; - -//default supported types -LGraph.supported_types = ["number","string","boolean"]; - -//used to know which types of connections support this graph (some graphs do not allow certain types) -LGraph.prototype.getSupportedTypes = function() { return this.supported_types || LGraph.supported_types; } - -LGraph.STATUS_STOPPED = 1; -LGraph.STATUS_RUNNING = 2; - -/** -* Removes all nodes from this graph -* @method clear -*/ - -LGraph.prototype.clear = function() -{ - this.stop(); - this.status = LGraph.STATUS_STOPPED; - - this.last_node_id = 1; - this.last_link_id = 1; - - this._version = -1; //used to detect changes - - //nodes - this._nodes = []; - this._nodes_by_id = {}; - this._nodes_in_order = []; //nodes that are executable sorted in execution order - this._nodes_executable = null; //nodes that contain onExecute - - //other scene stuff - this._groups = []; - - //links - this.links = {}; //container with all the links - - //iterations - this.iteration = 0; - - //custom data - this.config = {}; - - //timing - this.globaltime = 0; - this.runningtime = 0; - this.fixedtime = 0; - this.fixedtime_lapse = 0.01; - this.elapsed_time = 0.01; - this.last_update_time = 0; - this.starttime = 0; - - this.catch_errors = true; - - //subgraph_data - this.global_inputs = {}; - this.global_outputs = {}; - - //notify canvas to redraw - this.change(); - - this.sendActionToCanvas("clear"); -} - -/** -* Attach Canvas to this graph -* @method attachCanvas -* @param {GraphCanvas} graph_canvas -*/ - -LGraph.prototype.attachCanvas = function(graphcanvas) -{ - if(graphcanvas.constructor != LGraphCanvas) - throw("attachCanvas expects a LGraphCanvas instance"); - if(graphcanvas.graph && graphcanvas.graph != this) - graphcanvas.graph.detachCanvas( graphcanvas ); - - graphcanvas.graph = this; - if(!this.list_of_graphcanvas) - this.list_of_graphcanvas = []; - this.list_of_graphcanvas.push(graphcanvas); -} - -/** -* Detach Canvas from this graph -* @method detachCanvas -* @param {GraphCanvas} graph_canvas -*/ -LGraph.prototype.detachCanvas = function(graphcanvas) -{ - if(!this.list_of_graphcanvas) - return; - - var pos = this.list_of_graphcanvas.indexOf( graphcanvas ); - if(pos == -1) - return; - graphcanvas.graph = null; - this.list_of_graphcanvas.splice(pos,1); -} - -/** -* Starts running this graph every interval milliseconds. -* @method start -* @param {number} interval amount of milliseconds between executions, if 0 then it renders to the monitor refresh rate -*/ - -LGraph.prototype.start = function( interval ) -{ - if( this.status == LGraph.STATUS_RUNNING ) - return; - this.status = LGraph.STATUS_RUNNING; - - if(this.onPlayEvent) - this.onPlayEvent(); - - this.sendEventToAllNodes("onStart"); - - //launch - this.starttime = LiteGraph.getTime(); - this.last_update_time = this.starttime; - interval = interval || 0; - var that = this; - - if(interval == 0 && typeof(window) != "undefined" && window.requestAnimationFrame ) - { - function on_frame() - { - if(that.execution_timer_id != -1) - return; - window.requestAnimationFrame(on_frame); - that.runStep(1, !this.catch_errors ); - } - this.execution_timer_id = -1; - on_frame(); - } - else - this.execution_timer_id = setInterval( function() { - //execute - that.runStep(1, !this.catch_errors ); - },interval); -} - -/** -* Stops the execution loop of the graph -* @method stop execution -*/ - -LGraph.prototype.stop = function() -{ - if( this.status == LGraph.STATUS_STOPPED ) - return; - - this.status = LGraph.STATUS_STOPPED; - - if(this.onStopEvent) - this.onStopEvent(); - - if(this.execution_timer_id != null) - { - if( this.execution_timer_id != -1 ) - clearInterval(this.execution_timer_id); - this.execution_timer_id = null; - } - - this.sendEventToAllNodes("onStop"); -} - -/** -* Run N steps (cycles) of the graph -* @method runStep -* @param {number} num number of steps to run, default is 1 -*/ - -LGraph.prototype.runStep = function( num, do_not_catch_errors ) -{ - num = num || 1; - - var start = LiteGraph.getTime(); - this.globaltime = 0.001 * (start - this.starttime); - - var nodes = this._nodes_executable ? this._nodes_executable : this._nodes; - if(!nodes) - return; - - if( do_not_catch_errors ) - { - //iterations - for(var i = 0; i < num; i++) - { - for( var j = 0, l = nodes.length; j < l; ++j ) - { - var node = nodes[j]; - if( node.mode == LiteGraph.ALWAYS && node.onExecute ) - node.onExecute(); - } - - this.fixedtime += this.fixedtime_lapse; - if( this.onExecuteStep ) - this.onExecuteStep(); - } - - if( this.onAfterExecute ) - this.onAfterExecute(); - } - else - { - try - { - //iterations - for(var i = 0; i < num; i++) - { - for( var j = 0, l = nodes.length; j < l; ++j ) - { - var node = nodes[j]; - if( node.mode == LiteGraph.ALWAYS && node.onExecute ) - node.onExecute(); - } - - this.fixedtime += this.fixedtime_lapse; - if( this.onExecuteStep ) - this.onExecuteStep(); - } - - if( this.onAfterExecute ) - this.onAfterExecute(); - this.errors_in_execution = false; - } - catch (err) - { - this.errors_in_execution = true; - if(LiteGraph.throw_errors) - throw err; - if(LiteGraph.debug) - console.log("Error during execution: " + err); - this.stop(); - } - } - - var now = LiteGraph.getTime(); - var elapsed = now - start; - if (elapsed == 0) - elapsed = 1; - this.execution_time = 0.001 * elapsed; - this.globaltime += 0.001 * elapsed; - this.iteration += 1; - this.elapsed_time = (now - this.last_update_time) * 0.001; - this.last_update_time = now; -} - -/** -* Updates the graph execution order according to relevance of the nodes (nodes with only outputs have more relevance than -* nodes with only inputs. -* @method updateExecutionOrder -*/ -LGraph.prototype.updateExecutionOrder = function() -{ - this._nodes_in_order = this.computeExecutionOrder( false ); - this._nodes_executable = []; - for(var i = 0; i < this._nodes_in_order.length; ++i) - if( this._nodes_in_order[i].onExecute ) - this._nodes_executable.push( this._nodes_in_order[i] ); -} - -//This is more internal, it computes the order and returns it -LGraph.prototype.computeExecutionOrder = function( only_onExecute, set_level ) -{ - var L = []; - var S = []; - var M = {}; - var visited_links = {}; //to avoid repeating links - var remaining_links = {}; //to a - - //search for the nodes without inputs (starting nodes) - for (var i = 0, l = this._nodes.length; i < l; ++i) - { - var node = this._nodes[i]; - if( only_onExecute && !node.onExecute ) - continue; - - M[node.id] = node; //add to pending nodes - - var num = 0; //num of input connections - if(node.inputs) - for(var j = 0, l2 = node.inputs.length; j < l2; j++) - if(node.inputs[j] && node.inputs[j].link != null) - num += 1; - - if(num == 0) //is a starting node - { - S.push(node); - if(set_level) - node._level = 1; - } - else //num of input links - { - if(set_level) - node._level = 0; - remaining_links[node.id] = num; - } - } - - while(true) - { - if(S.length == 0) - break; - - //get an starting node - var node = S.shift(); - L.push(node); //add to ordered list - delete M[node.id]; //remove from the pending nodes - - if(!node.outputs) - continue; - - //for every output - for(var i = 0; i < node.outputs.length; i++) - { - var output = node.outputs[i]; - //not connected - if(output == null || output.links == null || output.links.length == 0) - continue; - - //for every connection - for(var j = 0; j < output.links.length; j++) - { - var link_id = output.links[j]; - var link = this.links[link_id]; - if(!link) - continue; - - //already visited link (ignore it) - if(visited_links[ link.id ]) - continue; - - var target_node = this.getNodeById( link.target_id ); - if(target_node == null) - { - visited_links[ link.id ] = true; - continue; - } - - if(set_level && (!target_node._level || target_node._level <= node._level)) - target_node._level = node._level + 1; - - visited_links[link.id] = true; //mark as visited - remaining_links[target_node.id] -= 1; //reduce the number of links remaining - if (remaining_links[ target_node.id ] == 0) - S.push(target_node); //if no more links, then add to starters array - } - } - } - - //the remaining ones (loops) - for(var i in M) - L.push( M[i] ); - - if( L.length != this._nodes.length && LiteGraph.debug ) - console.warn("something went wrong, nodes missing"); - - var l = L.length; - - //save order number in the node - for(var i = 0; i < l; ++i) - L[i].order = i; - - //sort now by priority - L = L.sort(function(A,B){ - var Ap = A.constructor.priority || A.priority || 0; - var Bp = B.constructor.priority || B.priority || 0; - if(Ap == Bp) - return A.order - B.order; - return Ap - Bp; - }); - - //save order number in the node, again... - for(var i = 0; i < l; ++i) - L[i].order = i; - - return L; -} - -/** -* Returns all the nodes that could affect this one (ancestors) by crawling all the inputs recursively. -* It doesnt include the node itself -* @method getAncestors -* @return {Array} an array with all the LGraphNodes that affect this node, in order of execution -*/ -LGraph.prototype.getAncestors = function( node ) -{ - var ancestors = []; - var pending = [node]; - var visited = {}; - - while (pending.length) - { - var current = pending.shift(); - if(!current.inputs) - continue; - if( !visited[ current.id ] && current != node ) - { - visited[ current.id ] = true; - ancestors.push( current ); - } - - for(var i = 0; i < current.inputs.length;++i) - { - var input = current.getInputNode(i); - if( input && ancestors.indexOf( input ) == -1) - { - pending.push( input ); - } - } - } - - ancestors.sort(function(a,b){ return a.order - b.order;}); - return ancestors; -} - -/** -* Positions every node in a more readable manner -* @method arrange -*/ -LGraph.prototype.arrange = function( margin ) -{ - margin = margin || 40; - - var nodes = this.computeExecutionOrder( false, true ); - var columns = []; - for(var i = 0; i < nodes.length; ++i) - { - var node = nodes[i]; - var col = node._level || 1; - if(!columns[col]) - columns[col] = []; - columns[col].push( node ); - } - - var x = margin; - - for(var i = 0; i < columns.length; ++i) - { - var column = columns[i]; - if(!column) - continue; - var max_size = 100; - var y = margin; - for(var j = 0; j < column.length; ++j) - { - var node = column[j]; - node.pos[0] = x; - node.pos[1] = y; - if(node.size[0] > max_size) - max_size = node.size[0]; - y += node.size[1] + margin; - } - x += max_size + margin; - } - - this.setDirtyCanvas(true,true); -} - - -/** -* Returns the amount of time the graph has been running in milliseconds -* @method getTime -* @return {number} number of milliseconds the graph has been running -*/ -LGraph.prototype.getTime = function() -{ - return this.globaltime; -} - -/** -* Returns the amount of time accumulated using the fixedtime_lapse var. This is used in context where the time increments should be constant -* @method getFixedTime -* @return {number} number of milliseconds the graph has been running -*/ - -LGraph.prototype.getFixedTime = function() -{ - return this.fixedtime; -} - -/** -* Returns the amount of time it took to compute the latest iteration. Take into account that this number could be not correct -* if the nodes are using graphical actions -* @method getElapsedTime -* @return {number} number of milliseconds it took the last cycle -*/ - -LGraph.prototype.getElapsedTime = function() -{ - return this.elapsed_time; -} - -/** -* Sends an event to all the nodes, useful to trigger stuff -* @method sendEventToAllNodes -* @param {String} eventname the name of the event (function to be called) -* @param {Array} params parameters in array format -*/ - -LGraph.prototype.sendEventToAllNodes = function( eventname, params, mode ) -{ - mode = mode || LiteGraph.ALWAYS; - - var nodes = this._nodes_in_order ? this._nodes_in_order : this._nodes; - if(!nodes) - return; - - for( var j = 0, l = nodes.length; j < l; ++j ) - { - var node = nodes[j]; - if(node[eventname] && node.mode == mode ) - { - if(params === undefined) - node[eventname](); - else if(params && params.constructor === Array) - node[eventname].apply( node, params ); - else - node[eventname](params); - } - } -} - -LGraph.prototype.sendActionToCanvas = function(action, params) -{ - if(!this.list_of_graphcanvas) - return; - - for(var i = 0; i < this.list_of_graphcanvas.length; ++i) - { - var c = this.list_of_graphcanvas[i]; - if( c[action] ) - c[action].apply(c, params); - } -} - -/** -* Adds a new node instasnce to this graph -* @method add -* @param {LGraphNode} node the instance of the node -*/ - -LGraph.prototype.add = function( node, skip_compute_order) -{ - if(!node) - return; - - //groups - if( node.constructor === LGraphGroup ) - { - this._groups.push( node ); - this.setDirtyCanvas(true); - this.change(); - node.graph = this; - this._version++; - return; - } - - //nodes - if(node.id != -1 && this._nodes_by_id[node.id] != null) - { - console.warn("LiteGraph: there is already a node with this ID, changing it"); - node.id = ++this.last_node_id; - } - - if(this._nodes.length >= LiteGraph.MAX_NUMBER_OF_NODES) - throw("LiteGraph: max number of nodes in a graph reached"); - - //give him an id - if(node.id == null || node.id == -1) - node.id = ++this.last_node_id; - else if (this.last_node_id < node.id) - this.last_node_id = node.id; - - - node.graph = this; - this._version++; - - this._nodes.push(node); - this._nodes_by_id[node.id] = node; - - if(node.onAdded) - node.onAdded( this ); - - if(this.config.align_to_grid) - node.alignToGrid(); - - if(!skip_compute_order) - this.updateExecutionOrder(); - - if(this.onNodeAdded) - this.onNodeAdded(node); - - - this.setDirtyCanvas(true); - this.change(); - - return node; //to chain actions -} - -/** -* Removes a node from the graph -* @method remove -* @param {LGraphNode} node the instance of the node -*/ - -LGraph.prototype.remove = function(node) -{ - if(node.constructor === LiteGraph.LGraphGroup) - { - var index = this._groups.indexOf(node); - if(index != -1) - this._groups.splice(index,1); - node.graph = null; - this._version++; - this.setDirtyCanvas(true,true); - this.change(); - return; - } - - if(this._nodes_by_id[node.id] == null) - return; //not found - - if(node.ignore_remove) - return; //cannot be removed - - //disconnect inputs - if(node.inputs) - for(var i = 0; i < node.inputs.length; i++) - { - var slot = node.inputs[i]; - if(slot.link != null) - node.disconnectInput(i); - } - - //disconnect outputs - if(node.outputs) - for(var i = 0; i < node.outputs.length; i++) - { - var slot = node.outputs[i]; - if(slot.links != null && slot.links.length) - node.disconnectOutput(i); - } - - //node.id = -1; //why? - - //callback - if(node.onRemoved) - node.onRemoved(); - - node.graph = null; - this._version++; - - //remove from canvas render - if(this.list_of_graphcanvas) - { - for(var i = 0; i < this.list_of_graphcanvas.length; ++i) - { - var canvas = this.list_of_graphcanvas[i]; - if(canvas.selected_nodes[node.id]) - delete canvas.selected_nodes[node.id]; - if(canvas.node_dragged == node) - canvas.node_dragged = null; - } - } - - //remove from containers - var pos = this._nodes.indexOf(node); - if(pos != -1) - this._nodes.splice(pos,1); - delete this._nodes_by_id[node.id]; - - if(this.onNodeRemoved) - this.onNodeRemoved(node); - - this.setDirtyCanvas(true,true); - this.change(); - - this.updateExecutionOrder(); -} - -/** -* Returns a node by its id. -* @method getNodeById -* @param {Number} id -*/ - -LGraph.prototype.getNodeById = function( id ) -{ - if( id == null ) - return null; - return this._nodes_by_id[ id ]; -} - -/** -* Returns a list of nodes that matches a class -* @method findNodesByClass -* @param {Class} classObject the class itself (not an string) -* @return {Array} a list with all the nodes of this type -*/ - -LGraph.prototype.findNodesByClass = function(classObject) -{ - var r = []; - for(var i = 0, l = this._nodes.length; i < l; ++i) - if(this._nodes[i].constructor === classObject) - r.push(this._nodes[i]); - return r; -} - -/** -* Returns a list of nodes that matches a type -* @method findNodesByType -* @param {String} type the name of the node type -* @return {Array} a list with all the nodes of this type -*/ - -LGraph.prototype.findNodesByType = function(type) -{ - var type = type.toLowerCase(); - var r = []; - for(var i = 0, l = this._nodes.length; i < l; ++i) - if(this._nodes[i].type.toLowerCase() == type ) - r.push(this._nodes[i]); - return r; -} - -/** -* Returns a list of nodes that matches a name -* @method findNodesByTitle -* @param {String} name the name of the node to search -* @return {Array} a list with all the nodes with this name -*/ - -LGraph.prototype.findNodesByTitle = function(title) -{ - var result = []; - for(var i = 0, l = this._nodes.length; i < l; ++i) - if(this._nodes[i].title == title) - result.push(this._nodes[i]); - return result; -} - -/** -* Returns the top-most node in this position of the canvas -* @method getNodeOnPos -* @param {number} x the x coordinate in canvas space -* @param {number} y the y coordinate in canvas space -* @param {Array} nodes_list a list with all the nodes to search from, by default is all the nodes in the graph -* @return {LGraphNode} the node at this position or null -*/ -LGraph.prototype.getNodeOnPos = function( x, y, nodes_list, margin ) -{ - nodes_list = nodes_list || this._nodes; - for (var i = nodes_list.length - 1; i >= 0; i--) - { - var n = nodes_list[i]; - if(n.isPointInside( x, y, margin )) - return n; - } - return null; -} - -/** -* Returns the top-most group in that position -* @method getGroupOnPos -* @param {number} x the x coordinate in canvas space -* @param {number} y the y coordinate in canvas space -* @return {LGraphGroup} the group or null -*/ -LGraph.prototype.getGroupOnPos = function(x,y) -{ - for (var i = this._groups.length - 1; i >= 0; i--) - { - var g = this._groups[i]; - if(g.isPointInside( x, y, 2, true )) - return g; - } - return null; -} - -// ********** GLOBALS ***************** - -/** -* Tell this graph it has a global graph input of this type -* @method addGlobalInput -* @param {String} name -* @param {String} type -* @param {*} value [optional] -*/ -LGraph.prototype.addGlobalInput = function(name, type, value) -{ - this.global_inputs[name] = { name: name, type: type, value: value }; - this._version++; - - if(this.onGlobalInputAdded) - this.onGlobalInputAdded(name, type); - - if(this.onGlobalsChange) - this.onGlobalsChange(); -} - -/** -* Assign a data to the global graph input -* @method setGlobalInputData -* @param {String} name -* @param {*} data -*/ -LGraph.prototype.setGlobalInputData = function(name, data) -{ - var input = this.global_inputs[name]; - if (!input) - return; - input.value = data; -} - -/** -* Assign a data to the global graph input (same as setGlobalInputData) -* @method setInputData -* @param {String} name -* @param {*} data -*/ -LGraph.prototype.setInputData = LGraph.prototype.setGlobalInputData; - - -/** -* Returns the current value of a global graph input -* @method getGlobalInputData -* @param {String} name -* @return {*} the data -*/ -LGraph.prototype.getGlobalInputData = function(name) -{ - var input = this.global_inputs[name]; - if (!input) - return null; - return input.value; -} - -/** -* Changes the name of a global graph input -* @method renameGlobalInput -* @param {String} old_name -* @param {String} new_name -*/ -LGraph.prototype.renameGlobalInput = function(old_name, name) -{ - if(name == old_name) - return; - - if(!this.global_inputs[old_name]) - return false; - - if(this.global_inputs[name]) - { - console.error("there is already one input with that name"); - return false; - } - - this.global_inputs[name] = this.global_inputs[old_name]; - delete this.global_inputs[old_name]; - this._version++; - - if(this.onGlobalInputRenamed) - this.onGlobalInputRenamed(old_name, name); - - if(this.onGlobalsChange) - this.onGlobalsChange(); -} - -/** -* Changes the type of a global graph input -* @method changeGlobalInputType -* @param {String} name -* @param {String} type -*/ -LGraph.prototype.changeGlobalInputType = function(name, type) -{ - if(!this.global_inputs[name]) - return false; - - if(this.global_inputs[name].type && this.global_inputs[name].type.toLowerCase() == type.toLowerCase() ) - return; - - this.global_inputs[name].type = type; - this._version++; - if(this.onGlobalInputTypeChanged) - this.onGlobalInputTypeChanged(name, type); -} - -/** -* Removes a global graph input -* @method removeGlobalInput -* @param {String} name -* @param {String} type -*/ -LGraph.prototype.removeGlobalInput = function(name) -{ - if(!this.global_inputs[name]) - return false; - - delete this.global_inputs[name]; - this._version++; - - if(this.onGlobalInputRemoved) - this.onGlobalInputRemoved(name); - - if(this.onGlobalsChange) - this.onGlobalsChange(); - return true; -} - -/** -* Creates a global graph output -* @method addGlobalOutput -* @param {String} name -* @param {String} type -* @param {*} value -*/ -LGraph.prototype.addGlobalOutput = function(name, type, value) -{ - this.global_outputs[name] = { name: name, type: type, value: value }; - this._version++; - - if(this.onGlobalOutputAdded) - this.onGlobalOutputAdded(name, type); - - if(this.onGlobalsChange) - this.onGlobalsChange(); -} - -/** -* Assign a data to the global output -* @method setGlobalOutputData -* @param {String} name -* @param {String} value -*/ -LGraph.prototype.setGlobalOutputData = function(name, value) -{ - var output = this.global_outputs[ name ]; - if (!output) - return; - output.value = value; -} - -/** -* Returns the current value of a global graph output -* @method getGlobalOutputData -* @param {String} name -* @return {*} the data -*/ -LGraph.prototype.getGlobalOutputData = function(name) -{ - var output = this.global_outputs[name]; - if (!output) - return null; - return output.value; -} - -/** -* Returns the current value of a global graph output (sames as getGlobalOutputData) -* @method getOutputData -* @param {String} name -* @return {*} the data -*/ -LGraph.prototype.getOutputData = LGraph.prototype.getGlobalOutputData; - - -/** -* Renames a global graph output -* @method renameGlobalOutput -* @param {String} old_name -* @param {String} new_name -*/ -LGraph.prototype.renameGlobalOutput = function(old_name, name) -{ - if(!this.global_outputs[old_name]) - return false; - - if(this.global_outputs[name]) - { - console.error("there is already one output with that name"); - return false; - } - - this.global_outputs[name] = this.global_outputs[old_name]; - delete this.global_outputs[old_name]; - this._version++; - - if(this.onGlobalOutputRenamed) - this.onGlobalOutputRenamed(old_name, name); - - if(this.onGlobalsChange) - this.onGlobalsChange(); -} - -/** -* Changes the type of a global graph output -* @method changeGlobalOutputType -* @param {String} name -* @param {String} type -*/ -LGraph.prototype.changeGlobalOutputType = function(name, type) -{ - if(!this.global_outputs[name]) - return false; - - if(this.global_outputs[name].type && this.global_outputs[name].type.toLowerCase() == type.toLowerCase() ) - return; - - this.global_outputs[name].type = type; - this._version++; - if(this.onGlobalOutputTypeChanged) - this.onGlobalOutputTypeChanged(name, type); -} - -/** -* Removes a global graph output -* @method removeGlobalOutput -* @param {String} name -*/ -LGraph.prototype.removeGlobalOutput = function(name) -{ - if(!this.global_outputs[name]) - return false; - delete this.global_outputs[name]; - this._version++; - - if(this.onGlobalOutputRemoved) - this.onGlobalOutputRemoved(name); - - if(this.onGlobalsChange) - this.onGlobalsChange(); - return true; -} - -LGraph.prototype.triggerInput = function(name,value) -{ - var nodes = this.findNodesByTitle(name); - for(var i = 0; i < nodes.length; ++i) - nodes[i].onTrigger(value); -} - -LGraph.prototype.setCallback = function(name,func) -{ - var nodes = this.findNodesByTitle(name); - for(var i = 0; i < nodes.length; ++i) - nodes[i].setTrigger(func); -} - - -LGraph.prototype.connectionChange = function( node ) -{ - this.updateExecutionOrder(); - if( this.onConnectionChange ) - this.onConnectionChange( node ); - this._version++; - this.sendActionToCanvas("onConnectionChange"); -} - -/** -* returns if the graph is in live mode -* @method isLive -*/ - -LGraph.prototype.isLive = function() -{ - if(!this.list_of_graphcanvas) - return false; - - for(var i = 0; i < this.list_of_graphcanvas.length; ++i) - { - var c = this.list_of_graphcanvas[i]; - if(c.live_mode) - return true; - } - return false; -} - -/* Called when something visually changed (not the graph!) */ -LGraph.prototype.change = function() -{ - if(LiteGraph.debug) - console.log("Graph changed"); - this.sendActionToCanvas("setDirty",[true,true]); - if(this.on_change) - this.on_change(this); -} - -LGraph.prototype.setDirtyCanvas = function(fg,bg) -{ - this.sendActionToCanvas("setDirty",[fg,bg]); -} - -//save and recover app state *************************************** -/** -* Creates a Object containing all the info about this graph, it can be serialized -* @method serialize -* @return {Object} value of the node -*/ -LGraph.prototype.serialize = function() -{ - var nodes_info = []; - for(var i = 0, l = this._nodes.length; i < l; ++i) - nodes_info.push( this._nodes[i].serialize() ); - - //pack link info into a non-verbose format - var links = []; - for(var i in this.links) //links is an OBJECT - { - var link = this.links[i]; - links.push([ link.id, link.origin_id, link.origin_slot, link.target_id, link.target_slot, link.type ]); - } - - var groups_info = []; - for(var i = 0; i < this._groups.length; ++i) - groups_info.push( this._groups[i].serialize() ); - - var data = { - last_node_id: this.last_node_id, - last_link_id: this.last_link_id, - nodes: nodes_info, - links: links, - groups: groups_info, - config: this.config - }; - - return data; -} - - -/** -* Configure a graph from a JSON string -* @method configure -* @param {String} str configure a graph from a JSON string -* @param {Boolean} returns if there was any error parsing -*/ -LGraph.prototype.configure = function( data, keep_old ) -{ - if(!data) - return; - - if(!keep_old) - this.clear(); - - var nodes = data.nodes; - - //decode links info (they are very verbose) - if(data.links && data.links.constructor === Array) - { - var links = []; - for(var i = 0; i < data.links.length; ++i) - { - var link = data.links[i]; - links[ link[0] ] = { id: link[0], origin_id: link[1], origin_slot: link[2], target_id: link[3], target_slot: link[4], type: link[5] }; - } - data.links = links; - } - - //copy all stored fields - for (var i in data) - this[i] = data[i]; - - var error = false; - - //create nodes - this._nodes = []; - if(nodes) - { - for(var i = 0, l = nodes.length; i < l; ++i) - { - var n_info = nodes[i]; //stored info - var node = LiteGraph.createNode( n_info.type, n_info.title ); - if(!node) - { - if(LiteGraph.debug) - console.log("Node not found: " + n_info.type); - error = true; - continue; - } - - node.id = n_info.id; //id it or it will create a new id - this.add(node, true); //add before configure, otherwise configure cannot create links - } - - //configure nodes afterwards so they can reach each other - for(var i = 0, l = nodes.length; i < l; ++i) - { - var n_info = nodes[i]; - var node = this.getNodeById( n_info.id ); - if(node) - node.configure( n_info ); - } - } - - //groups - this._groups.length = 0; - if( data.groups ) - for(var i = 0; i < data.groups.length; ++i ) - { - var group = new LiteGraph.LGraphGroup(); - group.configure( data.groups[i] ); - this.add( group ); - } - - this.updateExecutionOrder(); - this._version++; - this.setDirtyCanvas(true,true); - return error; -} - -LGraph.prototype.load = function(url) -{ - var that = this; - var req = new XMLHttpRequest(); - req.open('GET', url, true); - req.send(null); - req.onload = function (oEvent) { - if(req.status !== 200) - { - console.error("Error loading graph:",req.status,req.response); - return; - } - var data = JSON.parse( req.response ); - that.configure(data); - } - req.onerror = function(err) - { - console.error("Error loading graph:",err); - } -} - -LGraph.prototype.onNodeTrace = function(node, msg, color) -{ - //TODO -} - -// ************************************************************* -// Node CLASS ******* -// ************************************************************* - -/* - title: string - pos: [x,y] - size: [x,y] - - input|output: every connection - + { name:string, type:string, pos: [x,y]=Optional, direction: "input"|"output", links: Array }); - - flags: - + clip_area: if you render outside the node, it will be cliped - + unsafe_execution: not allowed for safe execution - + skip_repeated_outputs: when adding new outputs, it wont show if there is one already connected - + resizable: if set to false it wont be resizable with the mouse - - supported callbacks: - + onAdded: when added to graph - + onRemoved: when removed from graph - + onStart: when the graph starts playing - + onStop: when the graph stops playing - + onDrawForeground: render the inside widgets inside the node - + onDrawBackground: render the background area inside the node (only in edit mode) - + onMouseDown - + onMouseMove - + onMouseUp - + onMouseEnter - + onMouseLeave - + onExecute: execute the node - + onPropertyChanged: when a property is changed in the panel (return true to skip default behaviour) - + onGetInputs: returns an array of possible inputs - + onGetOutputs: returns an array of possible outputs - + onDblClick - + onSerialize - + onSelected - + onDeselected - + onDropItem : DOM item dropped over the node - + onDropFile : file dropped over the node - + onConnectInput : if returns false the incoming connection will be canceled - + onConnectionsChange : a connection changed (new one or removed) (LiteGraph.INPUT or LiteGraph.OUTPUT, slot, true if connected, link_info, input_info ) -*/ - -/** -* Base Class for all the node type classes -* @class LGraphNode -* @param {String} name a name for the node -*/ - -function LGraphNode(title) -{ - this._ctor(title); -} - -global.LGraphNode = LiteGraph.LGraphNode = LGraphNode; - -LGraphNode.prototype._ctor = function( title ) -{ - this.title = title || "Unnamed"; - this.size = [LiteGraph.NODE_WIDTH,60]; - this.graph = null; - - this._pos = new Float32Array(10,10); - - Object.defineProperty( this, "pos", { - set: function(v) - { - if(!v || v.length < 2) - return; - this._pos[0] = v[0]; - this._pos[1] = v[1]; - }, - get: function() - { - return this._pos; - }, - enumerable: true - }); - - this.id = -1; //not know till not added - this.type = null; - - //inputs available: array of inputs - this.inputs = []; - this.outputs = []; - this.connections = []; - - //local data - this.properties = {}; //for the values - this.properties_info = []; //for the info - - this.data = null; //persistent local data - this.flags = {}; -} - -/** -* configure a node from an object containing the serialized info -* @method configure -*/ -LGraphNode.prototype.configure = function(info) -{ - if(this.graph) - this.graph._version++; - - for (var j in info) - { - if(j == "console") - continue; - - if(j == "properties") - { - //i dont want to clone properties, I want to reuse the old container - for(var k in info.properties) - { - this.properties[k] = info.properties[k]; - if(this.onPropertyChanged) - this.onPropertyChanged(k,info.properties[k]); - } - continue; - } - - if(info[j] == null) - continue; - - else if (typeof(info[j]) == 'object') //object - { - if(this[j] && this[j].configure) - this[j].configure( info[j] ); - else - this[j] = LiteGraph.cloneObject(info[j], this[j]); - } - else //value - this[j] = info[j]; - } - - if(!info.title) - this.title = this.constructor.title; - - if(this.onConnectionsChange) - { - if(this.inputs) - for(var i = 0; i < this.inputs.length; ++i) - { - var input = this.inputs[i]; - var link_info = this.graph ? this.graph.links[ input.link ] : null; - this.onConnectionsChange( LiteGraph.INPUT, i, true, link_info, input ); //link_info has been created now, so its updated - } - - if(this.outputs) - for(var i = 0; i < this.outputs.length; ++i) - { - var output = this.outputs[i]; - if(!output.links) - continue; - for(var j = 0; j < output.links.length; ++j) - { - var link_info = this.graph ? this.graph.links[ output.links[j] ] : null; - this.onConnectionsChange( LiteGraph.OUTPUT, i, true, link_info, output ); //link_info has been created now, so its updated - } - } - } - - //FOR LEGACY, PLEASE REMOVE ON NEXT VERSION - for(var i in this.inputs) - { - var input = this.inputs[i]; - if(!input.link || !input.link.length ) - continue; - var link = input.link; - if(typeof(link) != "object") - continue; - input.link = link[0]; - if(this.graph) - this.graph.links[ link[0] ] = { - id: link[0], - origin_id: link[1], - origin_slot: link[2], - target_id: link[3], - target_slot: link[4] - }; - } - for(var i in this.outputs) - { - var output = this.outputs[i]; - if(!output.links || output.links.length == 0) - continue; - for(var j in output.links) - { - var link = output.links[j]; - if(typeof(link) != "object") - continue; - output.links[j] = link[0]; - } - } - - if( this.onConfigure ) - this.onConfigure( info ); -} - -/** -* serialize the content -* @method serialize -*/ - -LGraphNode.prototype.serialize = function() -{ - //create serialization object - var o = { - id: this.id, - type: this.type, - pos: this.pos, - size: this.size, - data: this.data, - flags: LiteGraph.cloneObject(this.flags), - mode: this.mode - }; - - if( this.inputs ) - o.inputs = this.inputs; - - if( this.outputs ) - { - //clear outputs last data (because data in connections is never serialized but stored inside the outputs info) - for(var i = 0; i < this.outputs.length; i++) - delete this.outputs[i]._data; - o.outputs = this.outputs; - } - - if( this.title && this.title != this.constructor.title ) - o.title = this.title; - - if( this.properties ) - o.properties = LiteGraph.cloneObject( this.properties ); - - if( !o.type ) - o.type = this.constructor.type; - - if( this.color ) - o.color = this.color; - if( this.bgcolor ) - o.bgcolor = this.bgcolor; - if( this.boxcolor ) - o.boxcolor = this.boxcolor; - if( this.shape ) - o.shape = this.shape; - - if(this.onSerialize) - { - if( this.onSerialize(o) ) - console.warn("node onSerialize shouldnt return anything, data should be stored in the object pass in the first parameter"); - } - - return o; -} - - -/* Creates a clone of this node */ -LGraphNode.prototype.clone = function() -{ - var node = LiteGraph.createNode(this.type); - - //we clone it because serialize returns shared containers - var data = LiteGraph.cloneObject( this.serialize() ); - - //remove links - if(data.inputs) - for(var i = 0; i < data.inputs.length; ++i) - data.inputs[i].link = null; - - if(data.outputs) - for(var i = 0; i < data.outputs.length; ++i) - { - if(data.outputs[i].links) - data.outputs[i].links.length = 0; - } - - delete data["id"]; - //remove links - node.configure(data); - - return node; -} - - -/** -* serialize and stringify -* @method toString -*/ - -LGraphNode.prototype.toString = function() -{ - return JSON.stringify( this.serialize() ); -} -//LGraphNode.prototype.unserialize = function(info) {} //this cannot be done from within, must be done in LiteGraph - - -/** -* get the title string -* @method getTitle -*/ - -LGraphNode.prototype.getTitle = function() -{ - return this.title || this.constructor.title; -} - - - -// Execution ************************* -/** -* sets the output data -* @method setOutputData -* @param {number} slot -* @param {*} data -*/ -LGraphNode.prototype.setOutputData = function(slot, data) -{ - if(!this.outputs) - return; - - //this maybe slow and a niche case - //if(slot && slot.constructor === String) - // slot = this.findOutputSlot(slot); - - if(slot == -1 || slot >= this.outputs.length) - return; - - var output_info = this.outputs[slot]; - if(!output_info) - return; - - //store data in the output itself in case we want to debug - output_info._data = data; - - //if there are connections, pass the data to the connections - if( this.outputs[slot].links ) - { - for(var i = 0; i < this.outputs[slot].links.length; i++) - { - var link_id = this.outputs[slot].links[i]; - this.graph.links[ link_id ].data = data; - } - } -} - -/** -* Retrieves the input data (data traveling through the connection) from one slot -* @method getInputData -* @param {number} slot -* @param {boolean} force_update if set to true it will force the connected node of this slot to output data into this link -* @return {*} data or if it is not connected returns undefined -*/ -LGraphNode.prototype.getInputData = function( slot, force_update ) -{ - if(!this.inputs) - return; //undefined; - - if(slot >= this.inputs.length || this.inputs[slot].link == null) - return; - - var link_id = this.inputs[slot].link; - var link = this.graph.links[ link_id ]; - if(!link) //bug: weird case but it happens sometimes - return null; - - if(!force_update) - return link.data; - - //special case: used to extract data from the incomming connection before the graph has been executed - var node = this.graph.getNodeById( link.origin_id ); - if(!node) - return link.data; - - if(node.updateOutputData) - node.updateOutputData( link.origin_slot ); - else if(node.onExecute) - node.onExecute(); - - return link.data; -} - -/** -* Retrieves the input data from one slot using its name instead of slot number -* @method getInputDataByName -* @param {String} slot_name -* @param {boolean} force_update if set to true it will force the connected node of this slot to output data into this link -* @return {*} data or if it is not connected returns null -*/ -LGraphNode.prototype.getInputDataByName = function( slot_name, force_update ) -{ - var slot = this.findInputSlot( slot_name ); - if( slot == -1 ) - return null; - return this.getInputData( slot, force_update ); -} - - -/** -* tells you if there is a connection in one input slot -* @method isInputConnected -* @param {number} slot -* @return {boolean} -*/ -LGraphNode.prototype.isInputConnected = function(slot) -{ - if(!this.inputs) - return false; - return (slot < this.inputs.length && this.inputs[slot].link != null); -} - -/** -* tells you info about an input connection (which node, type, etc) -* @method getInputInfo -* @param {number} slot -* @return {Object} object or null { link: id, name: string, type: string or 0 } -*/ -LGraphNode.prototype.getInputInfo = function(slot) -{ - if(!this.inputs) - return null; - if(slot < this.inputs.length) - return this.inputs[slot]; - return null; -} - -/** -* returns the node connected in the input slot -* @method getInputNode -* @param {number} slot -* @return {LGraphNode} node or null -*/ -LGraphNode.prototype.getInputNode = function( slot ) -{ - if(!this.inputs) - return null; - if(slot >= this.inputs.length) - return null; - var input = this.inputs[slot]; - if(!input || input.link === null) - return null; - var link_info = this.graph.links[ input.link ]; - if(!link_info) - return null; - return this.graph.getNodeById( link_info.origin_id ); -} - - -/** -* returns the value of an input with this name, otherwise checks if there is a property with that name -* @method getInputOrProperty -* @param {string} name -* @return {*} value -*/ -LGraphNode.prototype.getInputOrProperty = function( name ) -{ - if(!this.inputs || !this.inputs.length) - return this.properties ? this.properties[name] : null; - - for(var i = 0, l = this.inputs.length; i < l; ++i) - if(name == this.inputs[i].name) - { - var link_id = this.inputs[i].link; - var link = this.graph.links[ link_id ]; - return link ? link.data : null; - } - return this.properties[name]; -} - - - - -/** -* tells you the last output data that went in that slot -* @method getOutputData -* @param {number} slot -* @return {Object} object or null -*/ -LGraphNode.prototype.getOutputData = function(slot) -{ - if(!this.outputs) - return null; - if(slot >= this.outputs.length) - return null; - - var info = this.outputs[slot]; - return info._data; -} - - -/** -* tells you info about an output connection (which node, type, etc) -* @method getOutputInfo -* @param {number} slot -* @return {Object} object or null { name: string, type: string, links: [ ids of links in number ] } -*/ -LGraphNode.prototype.getOutputInfo = function(slot) -{ - if(!this.outputs) - return null; - if(slot < this.outputs.length) - return this.outputs[slot]; - return null; -} - - -/** -* tells you if there is a connection in one output slot -* @method isOutputConnected -* @param {number} slot -* @return {boolean} -*/ -LGraphNode.prototype.isOutputConnected = function(slot) -{ - if(!this.outputs) - return false; - return (slot < this.outputs.length && this.outputs[slot].links && this.outputs[slot].links.length); -} - -/** -* tells you if there is any connection in the output slots -* @method isAnyOutputConnected -* @return {boolean} -*/ -LGraphNode.prototype.isAnyOutputConnected = function() -{ - if(!this.outputs) - return false; - for(var i = 0; i < this.outputs.length; ++i) - if( this.outputs[i].links && this.outputs[i].links.length ) - return true; - return false; -} - - -/** -* retrieves all the nodes connected to this output slot -* @method getOutputNodes -* @param {number} slot -* @return {array} -*/ -LGraphNode.prototype.getOutputNodes = function(slot) -{ - if(!this.outputs || this.outputs.length == 0) - return null; - - if(slot >= this.outputs.length) - return null; - - var output = this.outputs[slot]; - if(!output.links || output.links.length == 0) - return null; - - var r = []; - for(var i = 0; i < output.links.length; i++) - { - var link_id = output.links[i]; - var link = this.graph.links[ link_id ]; - if(link) - { - var target_node = this.graph.getNodeById( link.target_id ); - if( target_node ) - r.push( target_node ); - } - } - return r; -} - -/** -* Triggers an event in this node, this will trigger any output with the same name -* @method trigger -* @param {String} event name ( "on_play", ... ) if action is equivalent to false then the event is send to all -* @param {*} param -*/ -LGraphNode.prototype.trigger = function( action, param ) -{ - if( !this.outputs || !this.outputs.length ) - return; - - if(this.graph) - this.graph._last_trigger_time = LiteGraph.getTime(); - - for(var i = 0; i < this.outputs.length; ++i) - { - var output = this.outputs[ i ]; - if(!output || output.type !== LiteGraph.EVENT || (action && output.name != action) ) - continue; - this.triggerSlot( i, param ); - } -} - -/** -* Triggers an slot event in this node -* @method triggerSlot -* @param {Number} slot the index of the output slot -* @param {*} param -*/ -LGraphNode.prototype.triggerSlot = function( slot, param ) -{ - if( !this.outputs ) - return; - - var output = this.outputs[ slot ]; - if( !output ) - return; - - var links = output.links; - if(!links || !links.length) - return; - - if(this.graph) - this.graph._last_trigger_time = LiteGraph.getTime(); - - //for every link attached here - for(var k = 0; k < links.length; ++k) - { - var link_info = this.graph.links[ links[k] ]; - if(!link_info) //not connected - continue; - var node = this.graph.getNodeById( link_info.target_id ); - if(!node) //node not found? - continue; - - //used to mark events in graph - link_info._last_time = LiteGraph.getTime(); - - var target_connection = node.inputs[ link_info.target_slot ]; - - if(node.onAction) - node.onAction( target_connection.name, param ); - else if(node.mode === LiteGraph.ON_TRIGGER) - { - if(node.onExecute) - node.onExecute(param); - } - } -} - -/** -* add a new property to this node -* @method addProperty -* @param {string} name -* @param {*} default_value -* @param {string} type string defining the output type ("vec3","number",...) -* @param {Object} extra_info this can be used to have special properties of the property (like values, etc) -*/ -LGraphNode.prototype.addProperty = function( name, default_value, type, extra_info ) -{ - var o = { name: name, type: type, default_value: default_value }; - if(extra_info) - for(var i in extra_info) - o[i] = extra_info[i]; - if(!this.properties_info) - this.properties_info = []; - this.properties_info.push(o); - if(!this.properties) - this.properties = {}; - this.properties[ name ] = default_value; - return o; -} - - -//connections - -/** -* add a new output slot to use in this node -* @method addOutput -* @param {string} name -* @param {string} type string defining the output type ("vec3","number",...) -* @param {Object} extra_info this can be used to have special properties of an output (label, special color, position, etc) -*/ -LGraphNode.prototype.addOutput = function(name,type,extra_info) -{ - var o = { name: name, type: type, links: null }; - if(extra_info) - for(var i in extra_info) - o[i] = extra_info[i]; - - if(!this.outputs) - this.outputs = []; - this.outputs.push(o); - if(this.onOutputAdded) - this.onOutputAdded(o); - this.size = this.computeSize(); - return o; -} - -/** -* add a new output slot to use in this node -* @method addOutputs -* @param {Array} array of triplets like [[name,type,extra_info],[...]] -*/ -LGraphNode.prototype.addOutputs = function(array) -{ - for(var i = 0; i < array.length; ++i) - { - var info = array[i]; - var o = {name:info[0],type:info[1],link:null}; - if(array[2]) - for(var j in info[2]) - o[j] = info[2][j]; - - if(!this.outputs) - this.outputs = []; - this.outputs.push(o); - if(this.onOutputAdded) - this.onOutputAdded(o); - } - - this.size = this.computeSize(); -} - -/** -* remove an existing output slot -* @method removeOutput -* @param {number} slot -*/ -LGraphNode.prototype.removeOutput = function(slot) -{ - this.disconnectOutput(slot); - this.outputs.splice(slot,1); - this.size = this.computeSize(); - if(this.onOutputRemoved) - this.onOutputRemoved(slot); -} - -/** -* add a new input slot to use in this node -* @method addInput -* @param {string} name -* @param {string} type string defining the input type ("vec3","number",...), it its a generic one use 0 -* @param {Object} extra_info this can be used to have special properties of an input (label, color, position, etc) -*/ -LGraphNode.prototype.addInput = function(name,type,extra_info) -{ - type = type || 0; - var o = {name:name,type:type,link:null}; - if(extra_info) - for(var i in extra_info) - o[i] = extra_info[i]; - - if(!this.inputs) - this.inputs = []; - this.inputs.push(o); - this.size = this.computeSize(); - if(this.onInputAdded) - this.onInputAdded(o); - return o; -} - -/** -* add several new input slots in this node -* @method addInputs -* @param {Array} array of triplets like [[name,type,extra_info],[...]] -*/ -LGraphNode.prototype.addInputs = function(array) -{ - for(var i = 0; i < array.length; ++i) - { - var info = array[i]; - var o = {name:info[0], type:info[1], link:null}; - if(array[2]) - for(var j in info[2]) - o[j] = info[2][j]; - - if(!this.inputs) - this.inputs = []; - this.inputs.push(o); - if(this.onInputAdded) - this.onInputAdded(o); - } - - this.size = this.computeSize(); -} - -/** -* remove an existing input slot -* @method removeInput -* @param {number} slot -*/ -LGraphNode.prototype.removeInput = function(slot) -{ - this.disconnectInput(slot); - this.inputs.splice(slot,1); - this.size = this.computeSize(); - if(this.onInputRemoved) - this.onInputRemoved(slot); -} - -/** -* add an special connection to this node (used for special kinds of graphs) -* @method addConnection -* @param {string} name -* @param {string} type string defining the input type ("vec3","number",...) -* @param {[x,y]} pos position of the connection inside the node -* @param {string} direction if is input or output -*/ -LGraphNode.prototype.addConnection = function(name,type,pos,direction) -{ - var o = { - name: name, - type: type, - pos: pos, - direction: direction, - links: null - }; - this.connections.push( o ); - return o; -} - -/** -* computes the size of a node according to its inputs and output slots -* @method computeSize -* @param {number} minHeight -* @return {number} the total size -*/ -LGraphNode.prototype.computeSize = function( minHeight, out ) -{ - var rows = Math.max( this.inputs ? this.inputs.length : 1, this.outputs ? this.outputs.length : 1); - var size = out || new Float32Array([0,0]); - rows = Math.max(rows, 1); - var font_size = LiteGraph.NODE_TEXT_SIZE; //although it should be graphcanvas.inner_text_font size - size[1] = (this.constructor.slot_start_y || 0) + rows * (font_size + 1) + 4; - if( this.widgets && this.widgets.length ) - size[1] += this.widgets.length * (LiteGraph.NODE_WIDGET_HEIGHT + 4) + 8; - - var font_size = font_size; - var title_width = compute_text_size( this.title ); - var input_width = 0; - var output_width = 0; - - if(this.inputs) - for(var i = 0, l = this.inputs.length; i < l; ++i) - { - var input = this.inputs[i]; - var text = input.label || input.name || ""; - var text_width = compute_text_size( text ); - if(input_width < text_width) - input_width = text_width; - } - - if(this.outputs) - for(var i = 0, l = this.outputs.length; i < l; ++i) - { - var output = this.outputs[i]; - var text = output.label || output.name || ""; - var text_width = compute_text_size( text ); - if(output_width < text_width) - output_width = text_width; - } - - size[0] = Math.max( input_width + output_width + 10, title_width ); - size[0] = Math.max( size[0], LiteGraph.NODE_WIDTH ); - if(this.widgets && this.widgets.length) - size[0] = Math.max( size[0], LiteGraph.NODE_WIDTH * 1.5 ); - - if(this.onResize) - this.onResize(size); - - function compute_text_size( text ) - { - if(!text) - return 0; - return font_size * text.length * 0.6; - } - - return size; -} - -/** -* Allows to pass -* -* @method addWidget -* @return {Float32Array[4]} the total size -*/ -LGraphNode.prototype.addWidget = function( type, name, value, callback, options ) -{ - if(!this.widgets) - this.widgets = []; - var w = { - type: type.toLowerCase(), - name: name, - value: value, - callback: callback, - options: options || {} - }; - - if(w.options.y !== undefined ) - w.y = w.options.y; - - if( !callback ) - console.warn("LiteGraph addWidget('button',...) without a callback"); - if( type == "combo" && !w.options.values ) - throw("LiteGraph addWidget('combo',...) requires to pass values in options: { values:['red','blue'] }"); - this.widgets.push(w); - return w; -} - - -/** -* returns the bounding of the object, used for rendering purposes -* bounding is: [topleft_cornerx, topleft_cornery, width, height] -* @method getBounding -* @return {Float32Array[4]} the total size -*/ -LGraphNode.prototype.getBounding = function( out ) -{ - out = out || new Float32Array(4); - out[0] = this.pos[0] - 4; - out[1] = this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT; - out[2] = this.size[0] + 4; - out[3] = this.size[1] + LiteGraph.NODE_TITLE_HEIGHT; - return out; -} - -/** -* checks if a point is inside the shape of a node -* @method isPointInside -* @param {number} x -* @param {number} y -* @return {boolean} -*/ -LGraphNode.prototype.isPointInside = function( x, y, margin, skip_title ) -{ - margin = margin || 0; - - var margin_top = this.graph && this.graph.isLive() ? 0 : 20; - if(skip_title) - margin_top = 0; - if(this.flags && this.flags.collapsed) - { - //if ( distance([x,y], [this.pos[0] + this.size[0]*0.5, this.pos[1] + this.size[1]*0.5]) < LiteGraph.NODE_COLLAPSED_RADIUS) - if( isInsideRectangle( x, y, this.pos[0] - margin, this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT - margin, (this._collapsed_width||LiteGraph.NODE_COLLAPSED_WIDTH) + 2 * margin, LiteGraph.NODE_TITLE_HEIGHT + 2 * margin ) ) - return true; - } - else if ( (this.pos[0] - 4 - margin) < x && (this.pos[0] + this.size[0] + 4 + margin) > x - && (this.pos[1] - margin_top - margin) < y && (this.pos[1] + this.size[1] + margin) > y) - return true; - return false; -} - -/** -* checks if a point is inside a node slot, and returns info about which slot -* @method getSlotInPosition -* @param {number} x -* @param {number} y -* @return {Object} if found the object contains { input|output: slot object, slot: number, link_pos: [x,y] } -*/ -LGraphNode.prototype.getSlotInPosition = function( x, y ) -{ - //search for inputs - if(this.inputs) - for(var i = 0, l = this.inputs.length; i < l; ++i) - { - var input = this.inputs[i]; - var link_pos = this.getConnectionPos( true,i ); - if( isInsideRectangle(x, y, link_pos[0] - 10, link_pos[1] - 5, 20,10) ) - return { input: input, slot: i, link_pos: link_pos, locked: input.locked }; - } - - if(this.outputs) - for(var i = 0, l = this.outputs.length; i < l; ++i) - { - var output = this.outputs[i]; - var link_pos = this.getConnectionPos(false,i); - if( isInsideRectangle(x, y, link_pos[0] - 10, link_pos[1] - 5, 20,10) ) - return { output: output, slot: i, link_pos: link_pos, locked: output.locked }; - } - - return null; -} - -/** -* returns the input slot with a given name (used for dynamic slots), -1 if not found -* @method findInputSlot -* @param {string} name the name of the slot -* @return {number} the slot (-1 if not found) -*/ -LGraphNode.prototype.findInputSlot = function(name) -{ - if(!this.inputs) - return -1; - for(var i = 0, l = this.inputs.length; i < l; ++i) - if(name == this.inputs[i].name) - return i; - return -1; -} - -/** -* returns the output slot with a given name (used for dynamic slots), -1 if not found -* @method findOutputSlot -* @param {string} name the name of the slot -* @return {number} the slot (-1 if not found) -*/ -LGraphNode.prototype.findOutputSlot = function(name) -{ - if(!this.outputs) return -1; - for(var i = 0, l = this.outputs.length; i < l; ++i) - if(name == this.outputs[i].name) - return i; - return -1; -} - -/** -* connect this node output to the input of another node -* @method connect -* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) -* @param {LGraphNode} node the target node -* @param {number_or_string} target_slot the input slot of the target node (could be the number of the slot or the string with the name of the slot, or -1 to connect a trigger) -* @return {boolean} if it was connected succesfully -*/ -LGraphNode.prototype.connect = function( slot, target_node, target_slot ) -{ - target_slot = target_slot || 0; - - if(!this.graph) //could be connected before adding it to a graph - { - console.log("Connect: Error, node doesnt belong to any graph. Nodes must be added first to a graph before connecting them."); //due to link ids being associated with graphs - return false; - } - - - //seek for the output slot - if( slot.constructor === String ) - { - slot = this.findOutputSlot(slot); - if(slot == -1) - { - if(LiteGraph.debug) - console.log("Connect: Error, no slot of name " + slot); - return false; - } - } - else if(!this.outputs || slot >= this.outputs.length) - { - if(LiteGraph.debug) - console.log("Connect: Error, slot number not found"); - return false; - } - - if(target_node && target_node.constructor === Number) - target_node = this.graph.getNodeById( target_node ); - if(!target_node) - throw("target node is null"); - - //avoid loopback - if(target_node == this) - return false; - - //you can specify the slot by name - if(target_slot.constructor === String) - { - target_slot = target_node.findInputSlot( target_slot ); - if(target_slot == -1) - { - if(LiteGraph.debug) - console.log("Connect: Error, no slot of name " + target_slot); - return false; - } - } - else if( target_slot === LiteGraph.EVENT ) - { - //search for first slot with event? - /* - //create input for trigger - var input = target_node.addInput("onTrigger", LiteGraph.EVENT ); - target_slot = target_node.inputs.length - 1; //last one is the one created - target_node.mode = LiteGraph.ON_TRIGGER; - */ - return false; - } - else if( !target_node.inputs || target_slot >= target_node.inputs.length ) - { - if(LiteGraph.debug) - console.log("Connect: Error, slot number not found"); - return false; - } - - //if there is something already plugged there, disconnect - if(target_node.inputs[ target_slot ].link != null ) - target_node.disconnectInput( target_slot ); - - //why here?? - //this.setDirtyCanvas(false,true); - //this.graph.connectionChange( this ); - - var output = this.outputs[slot]; - - //allows nodes to block connection - if(target_node.onConnectInput) - if( target_node.onConnectInput( target_slot, output.type, output ) === false) - return false; - - var input = target_node.inputs[target_slot]; - - if( LiteGraph.isValidConnection( output.type, input.type ) ) - { - var link_info = { - id: this.graph.last_link_id++, - type: input.type, - origin_id: this.id, - origin_slot: slot, - target_id: target_node.id, - target_slot: target_slot - }; - - //add to graph links list - this.graph.links[ link_info.id ] = link_info; - - //connect in output - if( output.links == null ) - output.links = []; - output.links.push( link_info.id ); - //connect in input - target_node.inputs[target_slot].link = link_info.id; - if(this.graph) - this.graph._version++; - if(this.onConnectionsChange) - this.onConnectionsChange( LiteGraph.OUTPUT, slot, true, link_info, output ); //link_info has been created now, so its updated - if(target_node.onConnectionsChange) - target_node.onConnectionsChange( LiteGraph.INPUT, target_slot, true, link_info, input ); - if( this.graph && this.graph.onNodeConnectionChange ) - { - this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, target_slot, this, slot ); - this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot, target_node, target_slot ); - } - } - - this.setDirtyCanvas(false,true); - this.graph.connectionChange( this ); - - return true; -} - -/** -* disconnect one output to an specific node -* @method disconnectOutput -* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) -* @param {LGraphNode} target_node the target node to which this slot is connected [Optional, if not target_node is specified all nodes will be disconnected] -* @return {boolean} if it was disconnected succesfully -*/ -LGraphNode.prototype.disconnectOutput = function( slot, target_node ) -{ - if( slot.constructor === String ) - { - slot = this.findOutputSlot(slot); - if(slot == -1) - { - if(LiteGraph.debug) - console.log("Connect: Error, no slot of name " + slot); - return false; - } - } - else if(!this.outputs || slot >= this.outputs.length) - { - if(LiteGraph.debug) - console.log("Connect: Error, slot number not found"); - return false; - } - - //get output slot - var output = this.outputs[slot]; - if(!output || !output.links || output.links.length == 0) - return false; - - //one of the output links in this slot - if(target_node) - { - if(target_node.constructor === Number) - target_node = this.graph.getNodeById( target_node ); - if(!target_node) - throw("Target Node not found"); - - for(var i = 0, l = output.links.length; i < l; i++) - { - var link_id = output.links[i]; - var link_info = this.graph.links[ link_id ]; - - //is the link we are searching for... - if( link_info.target_id == target_node.id ) - { - output.links.splice(i,1); //remove here - var input = target_node.inputs[ link_info.target_slot ]; - input.link = null; //remove there - delete this.graph.links[ link_id ]; //remove the link from the links pool - if(this.graph) - this.graph._version++; - if(target_node.onConnectionsChange) - target_node.onConnectionsChange( LiteGraph.INPUT, link_info.target_slot, false, link_info, input ); //link_info hasnt been modified so its ok - if(this.onConnectionsChange) - this.onConnectionsChange( LiteGraph.OUTPUT, slot, false, link_info, output ); - if( this.graph && this.graph.onNodeConnectionChange ) - this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot ); - if( this.graph && this.graph.onNodeConnectionChange ) - { - this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot ); - this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, link_info.target_slot ); - } - break; - } - } - } - else //all the links in this output slot - { - for(var i = 0, l = output.links.length; i < l; i++) - { - var link_id = output.links[i]; - var link_info = this.graph.links[ link_id ]; - if(!link_info) //bug: it happens sometimes - continue; - - var target_node = this.graph.getNodeById( link_info.target_id ); - var input = null; - if(this.graph) - this.graph._version++; - if(target_node) - { - input = target_node.inputs[ link_info.target_slot ]; - input.link = null; //remove other side link - if(target_node.onConnectionsChange) - target_node.onConnectionsChange( LiteGraph.INPUT, link_info.target_slot, false, link_info, input ); //link_info hasnt been modified so its ok - if( this.graph && this.graph.onNodeConnectionChange ) - this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, link_info.target_slot ); - } - delete this.graph.links[ link_id ]; //remove the link from the links pool - if(this.onConnectionsChange) - this.onConnectionsChange( LiteGraph.OUTPUT, slot, false, link_info, output ); - if( this.graph && this.graph.onNodeConnectionChange ) - { - this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot ); - this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, link_info.target_slot ); - } - } - output.links = null; - } - - - this.setDirtyCanvas(false,true); - this.graph.connectionChange( this ); - return true; -} - -/** -* disconnect one input -* @method disconnectInput -* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) -* @return {boolean} if it was disconnected succesfully -*/ -LGraphNode.prototype.disconnectInput = function( slot ) -{ - //seek for the output slot - if( slot.constructor === String ) - { - slot = this.findInputSlot(slot); - if(slot == -1) - { - if(LiteGraph.debug) - console.log("Connect: Error, no slot of name " + slot); - return false; - } - } - else if(!this.inputs || slot >= this.inputs.length) - { - if(LiteGraph.debug) - console.log("Connect: Error, slot number not found"); - return false; - } - - var input = this.inputs[slot]; - if(!input) - return false; - - var link_id = this.inputs[slot].link; - this.inputs[slot].link = null; - - //remove other side - var link_info = this.graph.links[ link_id ]; - if( link_info ) - { - var target_node = this.graph.getNodeById( link_info.origin_id ); - if(!target_node) - return false; - - var output = target_node.outputs[ link_info.origin_slot ]; - if(!output || !output.links || output.links.length == 0) - return false; - - //search in the inputs list for this link - for(var i = 0, l = output.links.length; i < l; i++) - { - if( output.links[i] == link_id ) - { - output.links.splice(i,1); - break; - } - } - - delete this.graph.links[ link_id ]; //remove from the pool - if(this.graph) - this.graph._version++; - if( this.onConnectionsChange ) - this.onConnectionsChange( LiteGraph.INPUT, slot, false, link_info, input ); - if( target_node.onConnectionsChange ) - target_node.onConnectionsChange( LiteGraph.OUTPUT, i, false, link_info, output ); - if( this.graph && this.graph.onNodeConnectionChange ) - { - this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, target_node, i ); - this.graph.onNodeConnectionChange( LiteGraph.INPUT, this, slot ); - } - } - - this.setDirtyCanvas(false,true); - this.graph.connectionChange( this ); - return true; -} - -/** -* returns the center of a connection point in canvas coords -* @method getConnectionPos -* @param {boolean} is_input true if if a input slot, false if it is an output -* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) -* @return {[x,y]} the position -**/ -LGraphNode.prototype.getConnectionPos = function( is_input, slot_number ) -{ - if(this.flags.collapsed) - { - if(is_input) - return [this.pos[0], this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT * 0.5]; - else - return [this.pos[0] + (this._collapsed_width || LiteGraph.NODE_COLLAPSED_WIDTH), this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT * 0.5]; - } - - if(is_input && slot_number == -1) - { - return [this.pos[0] + 10, this.pos[1] + 10]; - } - - //hardcoded pos - if(is_input && this.inputs && this.inputs.length > slot_number && this.inputs[slot_number].pos) - return [this.pos[0] + this.inputs[slot_number].pos[0],this.pos[1] + this.inputs[slot_number].pos[1]]; - else if(!is_input && this.outputs && this.outputs.length > slot_number && this.outputs[slot_number].pos) - return [this.pos[0] + this.outputs[slot_number].pos[0],this.pos[1] + this.outputs[slot_number].pos[1]]; - - //horizontal distributed slots - if(this.flags.horizontal) - { - if(is_input) - return [this.pos[0] + (slot_number + 0.5) * (this.size[0] / (this.inputs.length)), this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT ]; - return [this.pos[0] + (slot_number + 0.5) * (this.size[0] / (this.outputs.length)), this.pos[1] + this.size[1] ]; - } - - //default - if(is_input) - return [this.pos[0] , this.pos[1] + 10 + slot_number * LiteGraph.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0) ]; - return [this.pos[0] + this.size[0] + 1, this.pos[1] + 10 + slot_number * LiteGraph.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0)]; -} - -/* Force align to grid */ -LGraphNode.prototype.alignToGrid = function() -{ - this.pos[0] = LiteGraph.CANVAS_GRID_SIZE * Math.round(this.pos[0] / LiteGraph.CANVAS_GRID_SIZE); - this.pos[1] = LiteGraph.CANVAS_GRID_SIZE * Math.round(this.pos[1] / LiteGraph.CANVAS_GRID_SIZE); -} - - -/* Console output */ -LGraphNode.prototype.trace = function(msg) -{ - if(!this.console) - this.console = []; - this.console.push(msg); - if(this.console.length > LGraphNode.MAX_CONSOLE) - this.console.shift(); - - this.graph.onNodeTrace(this,msg); -} - -/* Forces to redraw or the main canvas (LGraphNode) or the bg canvas (links) */ -LGraphNode.prototype.setDirtyCanvas = function(dirty_foreground, dirty_background) -{ - if(!this.graph) - return; - this.graph.sendActionToCanvas("setDirty",[dirty_foreground, dirty_background]); -} - -LGraphNode.prototype.loadImage = function(url) -{ - var img = new Image(); - img.src = LiteGraph.node_images_path + url; - img.ready = false; - - var that = this; - img.onload = function() { - this.ready = true; - that.setDirtyCanvas(true); - } - return img; -} - -//safe LGraphNode action execution (not sure if safe) -/* -LGraphNode.prototype.executeAction = function(action) -{ - if(action == "") return false; - - if( action.indexOf(";") != -1 || action.indexOf("}") != -1) - { - this.trace("Error: Action contains unsafe characters"); - return false; - } - - var tokens = action.split("("); - var func_name = tokens[0]; - if( typeof(this[func_name]) != "function") - { - this.trace("Error: Action not found on node: " + func_name); - return false; - } - - var code = action; - - try - { - var _foo = eval; - eval = null; - (new Function("with(this) { " + code + "}")).call(this); - eval = _foo; - } - catch (err) - { - this.trace("Error executing action {" + action + "} :" + err); - return false; - } - - return true; -} -*/ - -/* Allows to get onMouseMove and onMouseUp events even if the mouse is out of focus */ -LGraphNode.prototype.captureInput = function(v) -{ - if(!this.graph || !this.graph.list_of_graphcanvas) - return; - - var list = this.graph.list_of_graphcanvas; - - for(var i = 0; i < list.length; ++i) - { - var c = list[i]; - //releasing somebody elses capture?! - if(!v && c.node_capturing_input != this) - continue; - - //change - c.node_capturing_input = v ? this : null; - } -} - -/** -* Collapse the node to make it smaller on the canvas -* @method collapse -**/ -LGraphNode.prototype.collapse = function( force ) -{ - this.graph._version++; - if(this.constructor.collapsable === false && !force) - return; - if(!this.flags.collapsed) - this.flags.collapsed = true; - else - this.flags.collapsed = false; - this.setDirtyCanvas(true,true); -} - -/** -* Forces the node to do not move or realign on Z -* @method pin -**/ - -LGraphNode.prototype.pin = function(v) -{ - this.graph._version++; - if(v === undefined) - this.flags.pinned = !this.flags.pinned; - else - this.flags.pinned = v; -} - -LGraphNode.prototype.localToScreen = function(x,y, graphcanvas) -{ - return [(x + this.pos[0]) * graphcanvas.scale + graphcanvas.offset[0], - (y + this.pos[1]) * graphcanvas.scale + graphcanvas.offset[1]]; -} - - - - -function LGraphGroup( title ) -{ - this._ctor( title ); -} - -global.LGraphGroup = LiteGraph.LGraphGroup = LGraphGroup; - -LGraphGroup.prototype._ctor = function( title ) -{ - this.title = title || "Group"; - this._bounding = new Float32Array([10,10,140,80]); - this._pos = this._bounding.subarray(0,2); - this._size = this._bounding.subarray(2,4); - this._nodes = []; - this.color = LGraphCanvas.node_colors.pale_blue ? LGraphCanvas.node_colors.pale_blue.groupcolor : "#AAA"; - this.graph = null; - - Object.defineProperty( this, "pos", { - set: function(v) - { - if(!v || v.length < 2) - return; - this._pos[0] = v[0]; - this._pos[1] = v[1]; - }, - get: function() - { - return this._pos; - }, - enumerable: true - }); - - Object.defineProperty( this, "size", { - set: function(v) - { - if(!v || v.length < 2) - return; - this._size[0] = Math.max(140,v[0]); - this._size[1] = Math.max(80,v[1]); - }, - get: function() - { - return this._size; - }, - enumerable: true - }); -} - -LGraphGroup.prototype.configure = function(o) -{ - this.title = o.title; - this._bounding.set( o.bounding ); - this.color = o.color; -} - -LGraphGroup.prototype.serialize = function() -{ - var b = this._bounding; - return { - title: this.title, - bounding: [ Math.round(b[0]), Math.round(b[1]), Math.round(b[2]), Math.round(b[3]) ], - color: this.color - }; -} - -LGraphGroup.prototype.move = function(deltax, deltay, ignore_nodes) -{ - this._pos[0] += deltax; - this._pos[1] += deltay; - if(ignore_nodes) - return; - for(var i = 0; i < this._nodes.length; ++i) - { - var node = this._nodes[i]; - node.pos[0] += deltax; - node.pos[1] += deltay; - } -} - -LGraphGroup.prototype.recomputeInsideNodes = function() -{ - this._nodes.length = 0; - var nodes = this.graph._nodes; - var node_bounding = new Float32Array(4); - - for(var i = 0; i < nodes.length; ++i) - { - var node = nodes[i]; - node.getBounding( node_bounding ); - if(!overlapBounding( this._bounding, node_bounding )) - continue; //out of the visible area - this._nodes.push( node ); - } -} - -LGraphGroup.prototype.isPointInside = LGraphNode.prototype.isPointInside; -LGraphGroup.prototype.setDirtyCanvas = LGraphNode.prototype.setDirtyCanvas; - -//********************************************************************************* -// LGraphCanvas: LGraph renderer CLASS -//********************************************************************************* - -/** -* This class is in charge of rendering one graph inside a canvas. And provides all the interaction required. -* Valid callbacks are: onNodeSelected, onNodeDeselected, onShowNodePanel, onNodeDblClicked -* -* @class LGraphCanvas -* @constructor -* @param {HTMLCanvas} canvas the canvas where you want to render (it accepts a selector in string format or the canvas element itself) -* @param {LGraph} graph [optional] -* @param {Object} options [optional] { skip_rendering, autoresize } -*/ -function LGraphCanvas( canvas, graph, options ) -{ - options = options || {}; - - //if(graph === undefined) - // throw ("No graph assigned"); - this.background_image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQBJREFUeNrs1rEKwjAUhlETUkj3vP9rdmr1Ysammk2w5wdxuLgcMHyptfawuZX4pJSWZTnfnu/lnIe/jNNxHHGNn//HNbbv+4dr6V+11uF527arU7+u63qfa/bnmh8sWLBgwYJlqRf8MEptXPBXJXa37BSl3ixYsGDBMliwFLyCV/DeLIMFCxYsWLBMwSt4Be/NggXLYMGCBUvBK3iNruC9WbBgwYJlsGApeAWv4L1ZBgsWLFiwYJmCV/AK3psFC5bBggULloJX8BpdwXuzYMGCBctgwVLwCl7Be7MMFixYsGDBsu8FH1FaSmExVfAxBa/gvVmwYMGCZbBg/W4vAQYA5tRF9QYlv/QAAAAASUVORK5CYII=' - - if(canvas && canvas.constructor === String ) - canvas = document.querySelector( canvas ); - - this.max_zoom = 10; - this.min_zoom = 0.1; - this.zoom_modify_alpha = true; //otherwise it generates ugly patterns when scaling down too much - - this.title_text_font = "bold "+LiteGraph.NODE_TEXT_SIZE+"px Arial"; - this.inner_text_font = "normal "+LiteGraph.NODE_SUBTEXT_SIZE+"px Arial"; - this.node_title_color = LiteGraph.NODE_TITLE_COLOR; - this.default_link_color = LiteGraph.LINK_COLOR; - this.default_connection_color = { - input_off: "#AAB", - input_on: "#7F7", - output_off: "#AAB", - output_on: "#7F7" - }; - - this.highquality_render = true; - this.use_gradients = false; //set to true to render titlebar with gradients - this.editor_alpha = 1; //used for transition - this.pause_rendering = false; - this.render_shadows = true; - this.clear_background = true; - - this.render_only_selected = true; - this.live_mode = false; - this.show_info = true; - this.allow_dragcanvas = true; - this.allow_dragnodes = true; - this.allow_interaction = true; //allow to control widgets, buttons, collapse, etc - this.allow_searchbox = true; - this.allow_reconnect_links = false; //allows to change a connection with having to redo it again - this.drag_mode = false; - this.dragging_rectangle = null; - - this.filter = null; //allows to filter to only accept some type of nodes in a graph - - this.always_render_background = false; - this.render_canvas_border = true; - this.render_connections_shadows = false; //too much cpu - this.render_connections_border = true; - this.render_curved_connections = true; - this.render_connection_arrows = true; - this.render_execution_order = false; - - this.canvas_mouse = [0,0]; //mouse in canvas graph coordinates, where 0,0 is the top-left corner of the blue rectangle - - //to personalize the search box - this.onSearchBox = null; - this.onSearchBoxSelection = null; - - this.connections_width = 3; - this.round_radius = 8; - - this.current_node = null; - this.node_widget = null; //used for widgets - this.last_mouse_position = [0,0]; - this.visible_area = new Float32Array(4); - - //link canvas and graph - if(graph) - graph.attachCanvas(this); - - this.setCanvas( canvas ); - this.clear(); - - if(!options.skip_render) - this.startRendering(); - - this.autoresize = options.autoresize; -} - -global.LGraphCanvas = LiteGraph.LGraphCanvas = LGraphCanvas; - -LGraphCanvas.link_type_colors = {"-1":"#F85",'number':"#AAC","node":"#DCA"}; -LGraphCanvas.gradients = {}; //cache of gradients - -/** -* clears all the data inside -* -* @method clear -*/ -LGraphCanvas.prototype.clear = function() -{ - this.frame = 0; - this.last_draw_time = 0; - this.render_time = 0; - this.fps = 0; - - this.scale = 1; - this.offset = [0,0]; - - this.dragging_rectangle = null; - - this.selected_nodes = {}; - this.selected_group = null; - - this.visible_nodes = []; - this.node_dragged = null; - this.node_over = null; - this.node_capturing_input = null; - this.connecting_node = null; - this.highlighted_links = {}; - - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - this.dirty_area = null; - - this.node_in_panel = null; - this.node_widget = null; - - this.last_mouse = [0,0]; - this.last_mouseclick = 0; - this.visible_area.set([0,0,0,0]); - - if(this.onClear) - this.onClear(); - //this.UIinit(); -} - -/** -* assigns a graph, you can reasign graphs to the same canvas -* -* @method setGraph -* @param {LGraph} graph -*/ -LGraphCanvas.prototype.setGraph = function( graph, skip_clear ) -{ - if(this.graph == graph) - return; - - if(!skip_clear) - this.clear(); - - if(!graph && this.graph) - { - this.graph.detachCanvas(this); - return; - } - - /* - if(this.graph) - this.graph.canvas = null; //remove old graph link to the canvas - this.graph = graph; - if(this.graph) - this.graph.canvas = this; - */ - graph.attachCanvas(this); - this.setDirty(true,true); -} - -/** -* opens a graph contained inside a node in the current graph -* -* @method openSubgraph -* @param {LGraph} graph -*/ -LGraphCanvas.prototype.openSubgraph = function(graph) -{ - if(!graph) - throw("graph cannot be null"); - - if(this.graph == graph) - throw("graph cannot be the same"); - - this.clear(); - - if(this.graph) - { - if(!this._graph_stack) - this._graph_stack = []; - this._graph_stack.push(this.graph); - } - - graph.attachCanvas(this); - this.setDirty(true,true); -} - -/** -* closes a subgraph contained inside a node -* -* @method closeSubgraph -* @param {LGraph} assigns a graph -*/ -LGraphCanvas.prototype.closeSubgraph = function() -{ - if(!this._graph_stack || this._graph_stack.length == 0) - return; - var graph = this._graph_stack.pop(); - this.selected_nodes = {}; - this.highlighted_links = {}; - graph.attachCanvas(this); - this.setDirty(true,true); -} - -/** -* assigns a canvas -* -* @method setCanvas -* @param {Canvas} assigns a canvas (also accepts the ID of the element (not a selector) -*/ -LGraphCanvas.prototype.setCanvas = function( canvas, skip_events ) -{ - var that = this; - - if(canvas) - { - if( canvas.constructor === String ) - { - canvas = document.getElementById(canvas); - if(!canvas) - throw("Error creating LiteGraph canvas: Canvas not found"); - } - } - - if(canvas === this.canvas) - return; - - if(!canvas && this.canvas) - { - //maybe detach events from old_canvas - if(!skip_events) - this.unbindEvents(); - } - - this.canvas = canvas; - - if(!canvas) - return; - - //this.canvas.tabindex = "1000"; - canvas.className += " lgraphcanvas"; - canvas.data = this; - - //bg canvas: used for non changing stuff - this.bgcanvas = null; - if(!this.bgcanvas) - { - this.bgcanvas = document.createElement("canvas"); - this.bgcanvas.width = this.canvas.width; - this.bgcanvas.height = this.canvas.height; - } - - if(canvas.getContext == null) - { - if( canvas.localName != "canvas" ) - throw("Element supplied for LGraphCanvas must be a element, you passed a " + canvas.localName ); - throw("This browser doesnt support Canvas"); - } - - var ctx = this.ctx = canvas.getContext("2d"); - if(ctx == null) - { - if(!canvas.webgl_enabled) - console.warn("This canvas seems to be WebGL, enabling WebGL renderer"); - this.enableWebGL(); - } - - //input: (move and up could be unbinded) - this._mousemove_callback = this.processMouseMove.bind(this); - this._mouseup_callback = this.processMouseUp.bind(this); - - if(!skip_events) - this.bindEvents(); -} - -//used in some events to capture them -LGraphCanvas.prototype._doNothing = function doNothing(e) { e.preventDefault(); return false; }; -LGraphCanvas.prototype._doReturnTrue = function doNothing(e) { e.preventDefault(); return true; }; - -/** -* binds mouse, keyboard, touch and drag events to the canvas -* @method bindEvents -**/ -LGraphCanvas.prototype.bindEvents = function() -{ - if( this._events_binded ) - { - console.warn("LGraphCanvas: events already binded"); - return; - } - - var canvas = this.canvas; - var ref_window = this.getCanvasWindow(); - var document = ref_window.document; //hack used when moving canvas between windows - - this._mousedown_callback = this.processMouseDown.bind(this); - this._mousewheel_callback = this.processMouseWheel.bind(this); - - canvas.addEventListener("mousedown", this._mousedown_callback, true ); //down do not need to store the binded - canvas.addEventListener("mousemove", this._mousemove_callback ); - canvas.addEventListener("mousewheel", this._mousewheel_callback, false); - - canvas.addEventListener("contextmenu", this._doNothing ); - canvas.addEventListener("DOMMouseScroll", this._mousewheel_callback, false); - - //touch events - //if( 'touchstart' in document.documentElement ) - { - canvas.addEventListener("touchstart", this.touchHandler, true); - canvas.addEventListener("touchmove", this.touchHandler, true); - canvas.addEventListener("touchend", this.touchHandler, true); - canvas.addEventListener("touchcancel", this.touchHandler, true); - } - - //Keyboard ****************** - this._key_callback = this.processKey.bind(this); - - canvas.addEventListener("keydown", this._key_callback, true ); - document.addEventListener("keyup", this._key_callback, true ); //in document, otherwise it doesnt fire keyup - - //Droping Stuff over nodes ************************************ - this._ondrop_callback = this.processDrop.bind(this); - - canvas.addEventListener("dragover", this._doNothing, false ); - canvas.addEventListener("dragend", this._doNothing, false ); - canvas.addEventListener("drop", this._ondrop_callback, false ); - canvas.addEventListener("dragenter", this._doReturnTrue, false ); - - this._events_binded = true; -} - -/** -* unbinds mouse events from the canvas -* @method unbindEvents -**/ -LGraphCanvas.prototype.unbindEvents = function() -{ - if( !this._events_binded ) - { - console.warn("LGraphCanvas: no events binded"); - return; - } - - var ref_window = this.getCanvasWindow(); - var document = ref_window.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 ); - document.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._mousedown_callback = null; - this._mousewheel_callback = null; - this._key_callback = null; - this._ondrop_callback = null; - - this._events_binded = false; -} - -LGraphCanvas.getFileExtension = function (url) -{ - var question = url.indexOf("?"); - if(question != -1) - url = url.substr(0,question); - var point = url.lastIndexOf("."); - if(point == -1) - return ""; - return url.substr(point+1).toLowerCase(); -} - -/** -* this function allows to render the canvas using WebGL instead of Canvas2D -* this is useful if you plant to render 3D objects inside your nodes, it uses litegl.js for webgl and canvas2DtoWebGL to emulate the Canvas2D calls in webGL -* @method enableWebGL -**/ -LGraphCanvas.prototype.enableWebGL = function() -{ - if(typeof(GL) === undefined) - throw("litegl.js must be included to use a WebGL canvas"); - if(typeof(enableWebGLCanvas) === undefined) - throw("webglCanvas.js must be included to use this feature"); - - this.gl = this.ctx = enableWebGLCanvas(this.canvas); - this.ctx.webgl = true; - this.bgcanvas = this.canvas; - this.bgctx = this.gl; - this.canvas.webgl_enabled = true; - - /* - GL.create({ canvas: this.bgcanvas }); - this.bgctx = enableWebGLCanvas( this.bgcanvas ); - window.gl = this.gl; - */ -} - - -/** -* marks as dirty the canvas, this way it will be rendered again -* -* @class LGraphCanvas -* @method setDirty -* @param {bool} fgcanvas if the foreground canvas is dirty (the one containing the nodes) -* @param {bool} bgcanvas if the background canvas is dirty (the one containing the wires) -*/ -LGraphCanvas.prototype.setDirty = function( fgcanvas, bgcanvas ) -{ - if(fgcanvas) - this.dirty_canvas = true; - if(bgcanvas) - this.dirty_bgcanvas = true; -} - -/** -* Used to attach the canvas in a popup -* -* @method getCanvasWindow -* @return {window} returns the window where the canvas is attached (the DOM root node) -*/ -LGraphCanvas.prototype.getCanvasWindow = function() -{ - if(!this.canvas) - return window; - var doc = this.canvas.ownerDocument; - return doc.defaultView || doc.parentWindow; -} - -/** -* starts rendering the content of the canvas when needed -* -* @method startRendering -*/ -LGraphCanvas.prototype.startRendering = function() -{ - if(this.is_rendering) - return; //already rendering - - this.is_rendering = true; - renderFrame.call(this); - - function renderFrame() - { - if(!this.pause_rendering) - this.draw(); - - var window = this.getCanvasWindow(); - if(this.is_rendering) - window.requestAnimationFrame( renderFrame.bind(this) ); - } -} - -/** -* stops rendering the content of the canvas (to save resources) -* -* @method stopRendering -*/ -LGraphCanvas.prototype.stopRendering = function() -{ - this.is_rendering = false; - /* - if(this.rendering_timer_id) - { - clearInterval(this.rendering_timer_id); - this.rendering_timer_id = null; - } - */ -} - -/* LiteGraphCanvas input */ - -LGraphCanvas.prototype.processMouseDown = function(e) -{ - if(!this.graph) - return; - - this.adjustMouseEvent(e); - - var ref_window = this.getCanvasWindow(); - var document = ref_window.document; - LGraphCanvas.active_canvas = this; - var that = this; - - //move mouse move event to the window in case it drags outside of the canvas - this.canvas.removeEventListener("mousemove", this._mousemove_callback ); - ref_window.document.addEventListener("mousemove", this._mousemove_callback, true ); //catch for the entire window - ref_window.document.addEventListener("mouseup", this._mouseup_callback, true ); - - var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes, 5 ); - var skip_dragging = false; - var skip_action = false; - var now = LiteGraph.getTime(); - var is_double_click = (now - this.last_mouseclick) < 300; - - this.canvas_mouse[0] = e.canvasX; - this.canvas_mouse[1] = e.canvasY; - - LiteGraph.closeAllContextMenus( ref_window ); - - if(e.which == 1) //left button mouse - { - if( e.ctrlKey ) - { - this.dragging_rectangle = new Float32Array(4); - this.dragging_rectangle[0] = e.canvasX; - this.dragging_rectangle[1] = e.canvasY; - this.dragging_rectangle[2] = 1; - this.dragging_rectangle[3] = 1; - skip_action = true; - } - - var clicking_canvas_bg = false; - - //when clicked on top of a node - //and it is not interactive - if( node && this.allow_interaction && !skip_action ) - { - if( !this.live_mode && !node.flags.pinned ) - this.bringToFront( node ); //if it wasnt selected? - - //not dragging mouse to connect two slots - if(!this.connecting_node && !node.flags.collapsed && !this.live_mode) - { - //Search for corner for resize - if( !skip_action && node.flags.resizable !== false && isInsideRectangle( e.canvasX, e.canvasY, node.pos[0] + node.size[0] - 5, node.pos[1] + node.size[1] - 5 ,10,10 )) - { - this.resizing_node = node; - this.canvas.style.cursor = "se-resize"; - skip_action = true; - } - else - { - //search for outputs - if(node.outputs) - for(var i = 0, l = node.outputs.length; i < l; ++i) - { - var output = node.outputs[i]; - var link_pos = node.getConnectionPos(false,i); - if( isInsideRectangle( e.canvasX, e.canvasY, link_pos[0] - 15, link_pos[1] - 10, 30,20) ) - { - this.connecting_node = node; - this.connecting_output = output; - this.connecting_pos = node.getConnectionPos(false,i); - this.connecting_slot = i; - - if( e.shiftKey ) - node.disconnectOutput(i); - - if (is_double_click) { - if (node.onOutputDblClick) - node.onOutputDblClick(i, e); - } else { - if (node.onOutputClick) - node.onOutputClick(i, e); - } - - skip_action = true; - break; - } - } - - //search for inputs - if(node.inputs) - for(var i = 0, l = node.inputs.length; i < l; ++i) - { - var input = node.inputs[i]; - var link_pos = node.getConnectionPos( true, i ); - if( isInsideRectangle(e.canvasX, e.canvasY, link_pos[0] - 15, link_pos[1] - 10, 30,20) ) - { - if (is_double_click) { - if (node.onInputDblClick) - node.onInputDblClick(i, e); - } else { - if (node.onInputClick) - node.onInputClick(i, e); - } - - if(input.link !== null) - { - var link_info = this.graph.links[ input.link ]; //before disconnecting - node.disconnectInput(i); - - if( this.allow_reconnect_links || e.shiftKey ) - { - this.connecting_node = this.graph._nodes_by_id[ link_info.origin_id ]; - this.connecting_slot = link_info.origin_slot; - this.connecting_output = this.connecting_node.outputs[ this.connecting_slot ]; - this.connecting_pos = this.connecting_node.getConnectionPos( false, this.connecting_slot); - } - - this.dirty_bgcanvas = true; - skip_action = true; - } - } - } - } //not resizing - } - - //Search for corner - if( !skip_action && isInsideRectangle(e.canvasX, e.canvasY, node.pos[0], node.pos[1] - LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT )) - { - node.collapse(); - skip_action = true; - } - - //it wasnt clicked on the links boxes - if(!skip_action) - { - var block_drag_node = false; - - //widgets - var widget = this.processNodeWidgets( node, this.canvas_mouse, e ); - if(widget) - { - block_drag_node = true; - this.node_widget = [node, widget]; - } - - //double clicking - if (is_double_click && this.selected_nodes[ node.id ]) - { - //double click node - if( node.onDblClick) - node.onDblClick(e); - this.processNodeDblClicked( node ); - block_drag_node = true; - } - - //if do not capture mouse - if( node.onMouseDown && node.onMouseDown( e, [e.canvasX - node.pos[0], e.canvasY - node.pos[1]], this ) ) - { - block_drag_node = true; - } - else if(this.live_mode) - { - clicking_canvas_bg = true; - block_drag_node = true; - } - - if(!block_drag_node) - { - if(this.allow_dragnodes) - this.node_dragged = node; - if(!this.selected_nodes[ node.id ]) - this.processNodeSelected( node, e ); - } - - this.dirty_canvas = true; - } - } - else //clicked outside of nodes - { - this.selected_group = this.graph.getGroupOnPos( e.canvasX, e.canvasY ); - this.selected_group_resizing = false; - if( this.selected_group ) - { - if( e.ctrlKey ) - this.dragging_rectangle = null; - - var dist = distance( [e.canvasX, e.canvasY], [ this.selected_group.pos[0] + this.selected_group.size[0], this.selected_group.pos[1] + this.selected_group.size[1] ] ); - if( (dist * this.scale) < 10 ) - this.selected_group_resizing = true; - else - this.selected_group.recomputeInsideNodes(); - } - - if( is_double_click ) - this.showSearchBox( e ); - - clicking_canvas_bg = true; - } - - if( !skip_action && clicking_canvas_bg && this.allow_dragcanvas ) - { - this.dragging_canvas = true; - } - } - else if (e.which == 2) //middle button - { - - } - else if (e.which == 3) //right button - { - this.processContextMenu( node, e ); - } - - //TODO - //if(this.node_selected != prev_selected) - // this.onNodeSelectionChange(this.node_selected); - - this.last_mouse[0] = e.localX; - this.last_mouse[1] = e.localY; - this.last_mouseclick = LiteGraph.getTime(); - this.last_mouse_dragging = true; - - /* - if( (this.dirty_canvas || this.dirty_bgcanvas) && this.rendering_timer_id == null) - this.draw(); - */ - - this.graph.change(); - - //this is to ensure to defocus(blur) if a text input element is on focus - if(!ref_window.document.activeElement || (ref_window.document.activeElement.nodeName.toLowerCase() != "input" && ref_window.document.activeElement.nodeName.toLowerCase() != "textarea")) - e.preventDefault(); - e.stopPropagation(); - - if(this.onMouseDown) - this.onMouseDown(e); - - return false; -} - -/** -* Called when a mouse move event has to be processed -* @method processMouseMove -**/ -LGraphCanvas.prototype.processMouseMove = function(e) -{ - if(this.autoresize) - this.resize(); - - if(!this.graph) - return; - - LGraphCanvas.active_canvas = this; - this.adjustMouseEvent(e); - var mouse = [e.localX, e.localY]; - var delta = [mouse[0] - this.last_mouse[0], mouse[1] - this.last_mouse[1]]; - this.last_mouse = mouse; - this.canvas_mouse[0] = e.canvasX; - this.canvas_mouse[1] = e.canvasY; - e.dragging = this.last_mouse_dragging; - - if( this.node_widget ) - { - this.processNodeWidgets( this.node_widget[0], this.canvas_mouse, e, this.node_widget[1] ); - this.dirty_canvas = true; - } - - if( this.dragging_rectangle ) - { - this.dragging_rectangle[2] = e.canvasX - this.dragging_rectangle[0]; - this.dragging_rectangle[3] = e.canvasY - this.dragging_rectangle[1]; - this.dirty_canvas = true; - } - else if (this.selected_group) //moving/resizing a group - { - if( this.selected_group_resizing ) - this.selected_group.size = [ e.canvasX - this.selected_group.pos[0], e.canvasY - this.selected_group.pos[1] ]; - else - { - var deltax = delta[0] / this.scale; - var deltay = delta[1] / this.scale; - this.selected_group.move( deltax, deltay, e.ctrlKey ); - if( this.selected_group._nodes.length) - this.dirty_canvas = true; - } - this.dirty_bgcanvas = true; - } - else if(this.dragging_canvas) - { - this.offset[0] += delta[0] / this.scale; - this.offset[1] += delta[1] / this.scale; - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - } - else if(this.allow_interaction) - { - if(this.connecting_node) - this.dirty_canvas = true; - - //get node over - var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes ); - - //remove mouseover flag - for(var i = 0, l = this.graph._nodes.length; i < l; ++i) - { - if(this.graph._nodes[i].mouseOver && node != this.graph._nodes[i]) - { - //mouse leave - this.graph._nodes[i].mouseOver = false; - if(this.node_over && this.node_over.onMouseLeave) - this.node_over.onMouseLeave(e); - this.node_over = null; - this.dirty_canvas = true; - } - } - - //mouse over a node - if(node) - { - //this.canvas.style.cursor = "move"; - if(!node.mouseOver) - { - //mouse enter - node.mouseOver = true; - this.node_over = node; - this.dirty_canvas = true; - - if(node.onMouseEnter) node.onMouseEnter(e); - } - - //in case the node wants to do something - if(node.onMouseMove) - node.onMouseMove(e, [e.canvasX - node.pos[0], e.canvasY - node.pos[1]], this); - - //if dragging a link - if(this.connecting_node) - { - var pos = this._highlight_input || [0,0]; //to store the output of isOverNodeInput - - //on top of input - if( this.isOverNodeBox( node, e.canvasX, e.canvasY ) ) - { - //mouse on top of the corner box, dont know what to do - } - else - { - //check if I have a slot below de mouse - var slot = this.isOverNodeInput( node, e.canvasX, e.canvasY, pos ); - if(slot != -1 && node.inputs[slot] ) - { - var slot_type = node.inputs[slot].type; - if( LiteGraph.isValidConnection( this.connecting_output.type, slot_type ) ) - this._highlight_input = pos; - } - else - this._highlight_input = null; - } - } - - //Search for corner - if(this.canvas) - { - if( isInsideRectangle(e.canvasX, e.canvasY, node.pos[0] + node.size[0] - 5, node.pos[1] + node.size[1] - 5 ,5,5 )) - this.canvas.style.cursor = "se-resize"; - else - this.canvas.style.cursor = ""; - } - } - else if(this.canvas) - this.canvas.style.cursor = ""; - - if(this.node_capturing_input && this.node_capturing_input != node && this.node_capturing_input.onMouseMove) - { - this.node_capturing_input.onMouseMove(e); - } - - - if(this.node_dragged && !this.live_mode) - { - for(var i in this.selected_nodes) - { - var n = this.selected_nodes[i]; - n.pos[0] += delta[0] / this.scale; - n.pos[1] += delta[1] / this.scale; - } - - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - } - - if(this.resizing_node && !this.live_mode) - { - //convert mouse to node space - this.resizing_node.size[0] = e.canvasX - this.resizing_node.pos[0]; - this.resizing_node.size[1] = e.canvasY - this.resizing_node.pos[1]; - - //constraint size - var max_slots = Math.max( this.resizing_node.inputs ? this.resizing_node.inputs.length : 0, this.resizing_node.outputs ? this.resizing_node.outputs.length : 0); - var min_height = max_slots * LiteGraph.NODE_SLOT_HEIGHT + ( this.resizing_node.widgets ? this.resizing_node.widgets.length : 0 ) * (LiteGraph.NODE_WIDGET_HEIGHT + 4 ) + 4; - if(this.resizing_node.size[1] < min_height ) - this.resizing_node.size[1] = min_height; - if(this.resizing_node.size[0] < LiteGraph.NODE_MIN_WIDTH) - this.resizing_node.size[0] = LiteGraph.NODE_MIN_WIDTH; - - this.canvas.style.cursor = "se-resize"; - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - } - } - - e.preventDefault(); - return false; -} - -/** -* Called when a mouse up event has to be processed -* @method processMouseUp -**/ -LGraphCanvas.prototype.processMouseUp = function(e) -{ - if(!this.graph) - return; - - var window = this.getCanvasWindow(); - var document = window.document; - LGraphCanvas.active_canvas = this; - - //restore the mousemove event back to the canvas - document.removeEventListener("mousemove", this._mousemove_callback, true ); - this.canvas.addEventListener("mousemove", this._mousemove_callback, true); - document.removeEventListener("mouseup", this._mouseup_callback, true ); - - this.adjustMouseEvent(e); - var now = LiteGraph.getTime(); - e.click_time = (now - this.last_mouseclick); - this.last_mouse_dragging = false; - - if (e.which == 1) //left button - { - this.node_widget = null; - - if( this.selected_group ) - { - var diffx = this.selected_group.pos[0] - Math.round( this.selected_group.pos[0] ); - var diffy = this.selected_group.pos[1] - Math.round( this.selected_group.pos[1] ); - this.selected_group.move( diffx, diffy, e.ctrlKey ); - this.selected_group.pos[0] = Math.round( this.selected_group.pos[0] ); - this.selected_group.pos[1] = Math.round( this.selected_group.pos[1] ); - if( this.selected_group._nodes.length ) - this.dirty_canvas = true; - this.selected_group = null; - } - this.selected_group_resizing = false; - - if( this.dragging_rectangle ) - { - if(this.graph) - { - var nodes = this.graph._nodes; - var node_bounding = new Float32Array(4); - this.deselectAllNodes(); - //compute bounding and flip if left to right - var w = Math.abs( this.dragging_rectangle[2] ); - var h = Math.abs( this.dragging_rectangle[3] ); - var startx = this.dragging_rectangle[2] < 0 ? this.dragging_rectangle[0] - w : this.dragging_rectangle[0]; - var starty = this.dragging_rectangle[3] < 0 ? this.dragging_rectangle[1] - h : this.dragging_rectangle[1]; - this.dragging_rectangle[0] = startx; this.dragging_rectangle[1] = starty; this.dragging_rectangle[2] = w; this.dragging_rectangle[3] = h; - - //test against all nodes (not visible becasue the rectangle maybe start outside - var to_select = []; - for(var i = 0; i < nodes.length; ++i) - { - var node = nodes[i]; - node.getBounding( node_bounding ); - if(!overlapBounding( this.dragging_rectangle, node_bounding )) - continue; //out of the visible area - to_select.push(node); - } - if(to_select.length) - this.selectNodes(to_select); - } - this.dragging_rectangle = null; - } - else if(this.connecting_node) //dragging a connection - { - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - - var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes ); - - //node below mouse - if(node) - { - if( this.connecting_output.type == LiteGraph.EVENT && this.isOverNodeBox( node, e.canvasX, e.canvasY ) ) - { - this.connecting_node.connect( this.connecting_slot, node, LiteGraph.EVENT ); - } - else - { - //slot below mouse? connect - var slot = this.isOverNodeInput(node, e.canvasX, e.canvasY); - if(slot != -1) - { - this.connecting_node.connect(this.connecting_slot, node, slot); - } - else - { //not on top of an input - var input = node.getInputInfo(0); - //auto connect - if(this.connecting_output.type == LiteGraph.EVENT) - this.connecting_node.connect( this.connecting_slot, node, LiteGraph.EVENT ); - else - if(input && !input.link && LiteGraph.isValidConnection( input.type && this.connecting_output.type ) ) - this.connecting_node.connect( this.connecting_slot, node, 0 ); - } - } - } - - this.connecting_output = null; - this.connecting_pos = null; - this.connecting_node = null; - this.connecting_slot = -1; - - }//not dragging connection - else if(this.resizing_node) - { - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - this.resizing_node = null; - } - else if(this.node_dragged) //node being dragged? - { - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - this.node_dragged.pos[0] = Math.round(this.node_dragged.pos[0]); - this.node_dragged.pos[1] = Math.round(this.node_dragged.pos[1]); - if(this.graph.config.align_to_grid) - this.node_dragged.alignToGrid(); - this.node_dragged = null; - } - else //no node being dragged - { - //get node over - var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes ); - if ( !node && e.click_time < 300 ) - this.deselectAllNodes(); - - this.dirty_canvas = true; - this.dragging_canvas = false; - - if( this.node_over && this.node_over.onMouseUp ) - this.node_over.onMouseUp(e, [e.canvasX - this.node_over.pos[0], e.canvasY - this.node_over.pos[1]], this ); - if( this.node_capturing_input && this.node_capturing_input.onMouseUp ) - this.node_capturing_input.onMouseUp(e, [e.canvasX - this.node_capturing_input.pos[0], e.canvasY - this.node_capturing_input.pos[1]] ); - } - } - else if (e.which == 2) //middle button - { - //trace("middle"); - this.dirty_canvas = true; - this.dragging_canvas = false; - } - else if (e.which == 3) //right button - { - //trace("right"); - this.dirty_canvas = true; - this.dragging_canvas = false; - } - - /* - if((this.dirty_canvas || this.dirty_bgcanvas) && this.rendering_timer_id == null) - this.draw(); - */ - - this.graph.change(); - - e.stopPropagation(); - e.preventDefault(); - return false; -} - -/** -* Called when a mouse wheel event has to be processed -* @method processMouseWheel -**/ -LGraphCanvas.prototype.processMouseWheel = function(e) -{ - if(!this.graph || !this.allow_dragcanvas) - return; - - var delta = (e.wheelDeltaY != null ? e.wheelDeltaY : e.detail * -60); - - this.adjustMouseEvent(e); - - var zoom = this.scale; - - if (delta > 0) - zoom *= 1.1; - else if (delta < 0) - zoom *= 1/(1.1); - - this.setZoom( zoom, [ e.localX, e.localY ] ); - - /* - if(this.rendering_timer_id == null) - this.draw(); - */ - - this.graph.change(); - - e.preventDefault(); - return false; // prevent default -} - -/** -* retuns true if a position (in graph space) is on top of a node little corner box -* @method isOverNodeBox -**/ -LGraphCanvas.prototype.isOverNodeBox = function( node, canvasx, canvasy ) -{ - var title_height = LiteGraph.NODE_TITLE_HEIGHT; - if( isInsideRectangle( canvasx, canvasy, node.pos[0] + 2, node.pos[1] + 2 - title_height, title_height - 4,title_height - 4) ) - return true; - return false; -} - -/** -* retuns true if a position (in graph space) is on top of a node input slot -* @method isOverNodeInput -**/ -LGraphCanvas.prototype.isOverNodeInput = function(node, canvasx, canvasy, slot_pos ) -{ - if(node.inputs) - for(var i = 0, l = node.inputs.length; i < l; ++i) - { - var input = node.inputs[i]; - var link_pos = node.getConnectionPos(true,i); - if( isInsideRectangle(canvasx, canvasy, link_pos[0] - 10, link_pos[1] - 5, 20,10) ) - { - if(slot_pos) - { - slot_pos[0] = link_pos[0]; - slot_pos[1] = link_pos[1]; - } - return i; - } - } - return -1; -} - -/** -* process a key event -* @method processKey -**/ -LGraphCanvas.prototype.processKey = function(e) -{ - if(!this.graph) - return; - - var block_default = false; - //console.log(e); //debug - - if(e.target.localName == "input") - return; - - if(e.type == "keydown") - { - if(e.keyCode == 32) //esc - { - this.dragging_canvas = true; - block_default = true; - } - - //select all Control A - if(e.keyCode == 65 && e.ctrlKey) - { - this.selectNodes(); - block_default = true; - } - - if(e.code == "KeyC" && (e.metaKey || e.ctrlKey) && !e.shiftKey ) //copy - { - if(this.selected_nodes) - { - this.copyToClipboard(); - block_default = true; - } - } - - if(e.code == "KeyV" && (e.metaKey || e.ctrlKey) && !e.shiftKey ) //paste - { - this.pasteFromClipboard(); - } - - //delete or backspace - if(e.keyCode == 46 || e.keyCode == 8) - { - if(e.target.localName != "input" && e.target.localName != "textarea") - { - this.deleteSelectedNodes(); - block_default = true; - } - } - - //collapse - //... - - //TODO - if(this.selected_nodes) - for (var i in this.selected_nodes) - if(this.selected_nodes[i].onKeyDown) - this.selected_nodes[i].onKeyDown(e); - } - else if( e.type == "keyup" ) - { - if(e.keyCode == 32) - this.dragging_canvas = false; - - if(this.selected_nodes) - for (var i in this.selected_nodes) - if(this.selected_nodes[i].onKeyUp) - this.selected_nodes[i].onKeyUp(e); - } - - this.graph.change(); - - if(block_default) - { - e.preventDefault(); - return false; - } -} - -LGraphCanvas.prototype.copyToClipboard = function() -{ - var clipboard_info = { - nodes: [], - links: [] - }; - var index = 0; - var selected_nodes_array = []; - for(var i in this.selected_nodes) - { - var node = this.selected_nodes[i]; - node._relative_id = index; - selected_nodes_array.push( node ); - index += 1; - } - - for(var i = 0; i < selected_nodes_array.length; ++i) - { - var node = selected_nodes_array[i]; - clipboard_info.nodes.push( node.clone().serialize() ); - if(node.inputs && node.inputs.length) - for(var j = 0; j < node.inputs.length; ++j) - { - var input = node.inputs[j]; - if(!input || input.link == null) - continue; - var link_info = this.graph.links[ input.link ]; - if(!link_info) - continue; - var target_node = this.graph.getNodeById( link_info.origin_id ); - if(!target_node || !this.selected_nodes[ target_node.id ] ) //improve this by allowing connections to non-selected nodes - continue; //not selected - clipboard_info.links.push([ target_node._relative_id, j, node._relative_id, link_info.target_slot ]); - } - } - localStorage.setItem( "litegrapheditor_clipboard", JSON.stringify( clipboard_info ) ); -} - -LGraphCanvas.prototype.pasteFromClipboard = function() -{ - var data = localStorage.getItem( "litegrapheditor_clipboard" ); - if(!data) - return; - - //create nodes - var clipboard_info = JSON.parse(data); - var nodes = []; - for(var i = 0; i < clipboard_info.nodes.length; ++i) - { - var node_data = clipboard_info.nodes[i]; - var node = LiteGraph.createNode( node_data.type ); - if(node) - { - node.configure(node_data); - node.pos[0] += 5; - node.pos[1] += 5; - this.graph.add( node ); - nodes.push( node ); - } - } - - //create links - for(var i = 0; i < clipboard_info.links.length; ++i) - { - var link_info = clipboard_info.links[i]; - var origin_node = nodes[ link_info[0] ]; - var target_node = nodes[ link_info[2] ]; - origin_node.connect( link_info[1], target_node, link_info[3] ); - } - - this.selectNodes( nodes ); -} - -/** -* process a item drop event on top the canvas -* @method processDrop -**/ -LGraphCanvas.prototype.processDrop = function(e) -{ - e.preventDefault(); - this.adjustMouseEvent(e); - - - var pos = [e.canvasX,e.canvasY]; - var node = this.graph.getNodeOnPos(pos[0],pos[1]); - - if(!node) - { - var r = null; - if(this.onDropItem) - r = this.onDropItem( event ); - if(!r) - this.checkDropItem(e); - return; - } - - if( node.onDropFile || node.onDropData ) - { - var files = e.dataTransfer.files; - if(files && files.length) - { - for(var i=0; i < files.length; i++) - { - var file = e.dataTransfer.files[0]; - var filename = file.name; - var ext = LGraphCanvas.getFileExtension( filename ); - //console.log(file); - - if(node.onDropFile) - node.onDropFile(file); - - if(node.onDropData) - { - //prepare reader - var reader = new FileReader(); - reader.onload = function (event) { - //console.log(event.target); - var data = event.target.result; - node.onDropData( data, filename, file ); - }; - - //read data - var type = file.type.split("/")[0]; - if(type == "text" || type == "") - reader.readAsText(file); - else if (type == "image") - reader.readAsDataURL(file); - else - reader.readAsArrayBuffer(file); - } - } - } - } - - if(node.onDropItem) - { - if( node.onDropItem( event ) ) - return true; - } - - if(this.onDropItem) - return this.onDropItem( event ); - - return false; -} - -//called if the graph doesnt have a default drop item behaviour -LGraphCanvas.prototype.checkDropItem = function(e) -{ - if(e.dataTransfer.files.length) - { - var file = e.dataTransfer.files[0]; - var ext = LGraphCanvas.getFileExtension( file.name ).toLowerCase(); - var nodetype = LiteGraph.node_types_by_file_extension[ext]; - if(nodetype) - { - var node = LiteGraph.createNode( nodetype.type ); - node.pos = [e.canvasX, e.canvasY]; - this.graph.add( node ); - if( node.onDropFile ) - node.onDropFile( file ); - } - } -} - - -LGraphCanvas.prototype.processNodeDblClicked = function(n) -{ - if(this.onShowNodePanel) - this.onShowNodePanel(n); - - if(this.onNodeDblClicked) - this.onNodeDblClicked(n); - - this.setDirty(true); -} - -LGraphCanvas.prototype.processNodeSelected = function(node,e) -{ - this.selectNode( node, e && e.shiftKey ); - if(this.onNodeSelected) - this.onNodeSelected(node); -} - -LGraphCanvas.prototype.processNodeDeselected = function(node) -{ - this.deselectNode(node); - if(this.onNodeDeselected) - this.onNodeDeselected(node); -} - -/** -* selects a given node (or adds it to the current selection) -* @method selectNode -**/ -LGraphCanvas.prototype.selectNode = function( node, add_to_current_selection ) -{ - if(node == null) - this.deselectAllNodes(); - else - this.selectNodes([node], add_to_current_selection ); -} - -/** -* selects several nodes (or adds them to the current selection) -* @method selectNodes -**/ -LGraphCanvas.prototype.selectNodes = function( nodes, add_to_current_selection ) -{ - if(!add_to_current_selection) - this.deselectAllNodes(); - - nodes = nodes || this.graph._nodes; - for(var i = 0; i < nodes.length; ++i) - { - var node = nodes[i]; - if(node.selected) - continue; - - if( !node.selected && node.onSelected ) - node.onSelected(); - node.selected = true; - this.selected_nodes[ node.id ] = node; - - if(node.inputs) - for(var j = 0; j < node.inputs.length; ++j) - this.highlighted_links[ node.inputs[j].link ] = true; - if(node.outputs) - for(var j = 0; j < node.outputs.length; ++j) - { - var out = node.outputs[j]; - if( out.links ) - for(var k = 0; k < out.links.length; ++k) - this.highlighted_links[ out.links[k] ] = true; - } - - } - - this.setDirty(true); -} - -/** -* removes a node from the current selection -* @method deselectNode -**/ -LGraphCanvas.prototype.deselectNode = function( node ) -{ - if(!node.selected) - return; - if(node.onDeselected) - node.onDeselected(); - node.selected = false; - - //remove highlighted - if(node.inputs) - for(var i = 0; i < node.inputs.length; ++i) - delete this.highlighted_links[ node.inputs[i].link ]; - if(node.outputs) - for(var i = 0; i < node.outputs.length; ++i) - { - var out = node.outputs[i]; - if( out.links ) - for(var j = 0; j < out.links.length; ++j) - delete this.highlighted_links[ out.links[j] ]; - } -} - -/** -* removes all nodes from the current selection -* @method deselectAllNodes -**/ -LGraphCanvas.prototype.deselectAllNodes = function() -{ - if(!this.graph) - return; - var nodes = this.graph._nodes; - for(var i = 0, l = nodes.length; i < l; ++i) - { - var node = nodes[i]; - if(!node.selected) - continue; - if(node.onDeselected) - node.onDeselected(); - node.selected = false; - } - this.selected_nodes = {}; - this.highlighted_links = {}; - this.setDirty(true); -} - -/** -* deletes all nodes in the current selection from the graph -* @method deleteSelectedNodes -**/ -LGraphCanvas.prototype.deleteSelectedNodes = function() -{ - for(var i in this.selected_nodes) - { - var m = this.selected_nodes[i]; - //if(m == this.node_in_panel) this.showNodePanel(null); - this.graph.remove(m); - } - this.selected_nodes = {}; - this.highlighted_links = {}; - this.setDirty(true); -} - -/** -* centers the camera on a given node -* @method centerOnNode -**/ -LGraphCanvas.prototype.centerOnNode = function(node) -{ - this.offset[0] = -node.pos[0] - node.size[0] * 0.5 + (this.canvas.width * 0.5 / this.scale); - this.offset[1] = -node.pos[1] - node.size[1] * 0.5 + (this.canvas.height * 0.5 / this.scale); - this.setDirty(true,true); -} - -/** -* adds some useful properties to a mouse event, like the position in graph coordinates -* @method adjustMouseEvent -**/ -LGraphCanvas.prototype.adjustMouseEvent = function(e) -{ - if(this.canvas) - { - var b = this.canvas.getBoundingClientRect(); - e.localX = e.pageX - b.left; - e.localY = e.pageY - b.top; - } - else - { - e.localX = e.pageX; - e.localY = e.pageY; - } - - e.deltaX = e.localX - this.last_mouse_position[0]; - e.deltaY = e.localY - this.last_mouse_position[1]; - - this.last_mouse_position[0] = e.localX; - this.last_mouse_position[1] = e.localY; - - e.canvasX = e.localX / this.scale - this.offset[0]; - e.canvasY = e.localY / this.scale - this.offset[1]; -} - -/** -* changes the zoom level of the graph (default is 1), you can pass also a place used to pivot the zoom -* @method setZoom -**/ -LGraphCanvas.prototype.setZoom = function(value, zooming_center) -{ - if(!zooming_center && this.canvas) - zooming_center = [this.canvas.width * 0.5,this.canvas.height * 0.5]; - - var center = this.convertOffsetToCanvas( zooming_center ); - - this.scale = value; - - if(this.scale > this.max_zoom) - this.scale = this.max_zoom; - else if(this.scale < this.min_zoom) - this.scale = this.min_zoom; - - var new_center = this.convertOffsetToCanvas( zooming_center ); - var delta_offset = [new_center[0] - center[0], new_center[1] - center[1]]; - - this.offset[0] += delta_offset[0]; - this.offset[1] += delta_offset[1]; - - this.dirty_canvas = true; - this.dirty_bgcanvas = true; -} - -/** -* converts a coordinate in canvas2D space to graphcanvas space (NAME IS CONFUSION, SHOULD BE THE OTHER WAY AROUND) -* @method convertOffsetToCanvas -**/ -LGraphCanvas.prototype.convertOffsetToCanvas = function( pos, out ) -{ - out = out || []; - out[0] = pos[0] / this.scale - this.offset[0]; - out[1] = pos[1] / this.scale - this.offset[1]; - return out; -} - -/** -* converts a coordinate in graphcanvas space to canvas2D space (NAME IS CONFUSION, SHOULD BE THE OTHER WAY AROUND) -* @method convertCanvasToOffset -**/ -LGraphCanvas.prototype.convertCanvasToOffset = function( pos, out ) -{ - out = out || []; - out[0] = (pos[0] + this.offset[0]) * this.scale; - out[1] = (pos[1] + this.offset[1]) * this.scale; - return out; -} - -LGraphCanvas.prototype.convertEventToCanvas = function(e) -{ - var rect = this.canvas.getBoundingClientRect(); - return this.convertOffsetToCanvas([e.pageX - rect.left,e.pageY - rect.top]); -} - -/** -* brings a node to front (above all other nodes) -* @method bringToFront -**/ -LGraphCanvas.prototype.bringToFront = function(node) -{ - var i = this.graph._nodes.indexOf(node); - if(i == -1) return; - - this.graph._nodes.splice(i,1); - this.graph._nodes.push(node); -} - -/** -* sends a node to the back (below all other nodes) -* @method sendToBack -**/ -LGraphCanvas.prototype.sendToBack = function(node) -{ - var i = this.graph._nodes.indexOf(node); - if(i == -1) return; - - this.graph._nodes.splice(i,1); - this.graph._nodes.unshift(node); -} - -/* Interaction */ - - - -/* LGraphCanvas render */ -var temp = new Float32Array(4); - -/** -* checks which nodes are visible (inside the camera area) -* @method computeVisibleNodes -**/ -LGraphCanvas.prototype.computeVisibleNodes = function( nodes, out ) -{ - var visible_nodes = out || []; - visible_nodes.length = 0; - nodes = nodes || this.graph._nodes; - for(var i = 0, l = nodes.length; i < l; ++i) - { - var n = nodes[i]; - - //skip rendering nodes in live mode - if(this.live_mode && !n.onDrawBackground && !n.onDrawForeground) - continue; - - if(!overlapBounding( this.visible_area, n.getBounding( temp ) )) - continue; //out of the visible area - - visible_nodes.push(n); - } - return visible_nodes; -} - -/** -* renders the whole canvas content, by rendering in two separated canvas, one containing the background grid and the connections, and one containing the nodes) -* @method draw -**/ -LGraphCanvas.prototype.draw = function(force_canvas, force_bgcanvas) -{ - if(!this.canvas) - return; - - //fps counting - var now = LiteGraph.getTime(); - this.render_time = (now - this.last_draw_time)*0.001; - this.last_draw_time = now; - - if(this.graph) - { - var startx = -this.offset[0]; - var starty = -this.offset[1]; - var endx = startx + this.canvas.width / this.scale; - var endy = starty + this.canvas.height / this.scale; - this.visible_area[0] = startx; - this.visible_area[1] = starty; - this.visible_area[2] = endx - startx; - this.visible_area[3] = endy - starty; - } - - if(this.dirty_bgcanvas || force_bgcanvas || this.always_render_background || (this.graph && this.graph._last_trigger_time && (now - this.graph._last_trigger_time) < 1000) ) - this.drawBackCanvas(); - - if(this.dirty_canvas || force_canvas) - this.drawFrontCanvas(); - - this.fps = this.render_time ? (1.0 / this.render_time) : 0; - this.frame += 1; -} - -/** -* draws the front canvas (the one containing all the nodes) -* @method drawFrontCanvas -**/ -LGraphCanvas.prototype.drawFrontCanvas = function() -{ - this.dirty_canvas = false; - - if(!this.ctx) - this.ctx = this.bgcanvas.getContext("2d"); - var ctx = this.ctx; - if(!ctx) //maybe is using webgl... - return; - - if(ctx.start2D) - ctx.start2D(); - - var canvas = this.canvas; - - //reset in case of error - ctx.restore(); - ctx.setTransform(1, 0, 0, 1, 0, 0); - - //clip dirty area if there is one, otherwise work in full canvas - if(this.dirty_area) - { - ctx.save(); - ctx.beginPath(); - ctx.rect(this.dirty_area[0],this.dirty_area[1],this.dirty_area[2],this.dirty_area[3]); - ctx.clip(); - } - - //clear - //canvas.width = canvas.width; - if(this.clear_background) - ctx.clearRect(0,0,canvas.width, canvas.height); - - //draw bg canvas - if(this.bgcanvas == this.canvas) - this.drawBackCanvas(); - else - ctx.drawImage(this.bgcanvas,0,0); - - //rendering - if(this.onRender) - this.onRender(canvas, ctx); - - //info widget - if(this.show_info) - this.renderInfo(ctx); - - if(this.graph) - { - //apply transformations - ctx.save(); - ctx.scale(this.scale,this.scale); - ctx.translate( this.offset[0],this.offset[1] ); - - //draw nodes - var drawn_nodes = 0; - var visible_nodes = this.computeVisibleNodes( null, this.visible_nodes ); - - for (var i = 0; i < visible_nodes.length; ++i) - { - var node = visible_nodes[i]; - - //transform coords system - ctx.save(); - ctx.translate( node.pos[0], node.pos[1] ); - - //Draw - this.drawNode( node, ctx ); - drawn_nodes += 1; - - //Restore - ctx.restore(); - } - - //on top (debug) - if( this.render_execution_order) - this.drawExecutionOrder(ctx); - - - //connections ontop? - if(this.graph.config.links_ontop) - if(!this.live_mode) - this.drawConnections(ctx); - - //current connection (the one being dragged by the mouse) - if(this.connecting_pos != null) - { - ctx.lineWidth = this.connections_width; - var link_color = null; - switch( this.connecting_output.type ) - { - case LiteGraph.EVENT: link_color = LiteGraph.EVENT_LINK_COLOR; break; - default: - link_color = LiteGraph.CONNECTING_LINK_COLOR; - } - //the connection being dragged by the mouse - this.renderLink( ctx, this.connecting_pos, [this.canvas_mouse[0],this.canvas_mouse[1]], null, false, null, link_color, this.connecting_output.dir || (this.connecting_node.flags.horizontal ? LiteGraph.DOWN : LiteGraph.RIGHT), LiteGraph.CENTER ); - - ctx.beginPath(); - if( this.connecting_output.type === LiteGraph.EVENT || this.connecting_output.shape === LiteGraph.BOX_SHAPE ) - ctx.rect( (this.connecting_pos[0] - 6) + 0.5, (this.connecting_pos[1] - 5) + 0.5,14,10); - else - ctx.arc( this.connecting_pos[0], this.connecting_pos[1],4,0,Math.PI*2); - ctx.fill(); - - ctx.fillStyle = "#ffcc00"; - if(this._highlight_input) - { - ctx.beginPath(); - ctx.arc( this._highlight_input[0], this._highlight_input[1],6,0,Math.PI*2); - ctx.fill(); - } - } - - if( this.dragging_rectangle ) - { - ctx.strokeStyle = "#FFF"; - ctx.strokeRect( this.dragging_rectangle[0], this.dragging_rectangle[1], this.dragging_rectangle[2], this.dragging_rectangle[3] ); - } - - - ctx.restore(); - } - - if(this.dirty_area) - { - ctx.restore(); - //this.dirty_area = null; - } - - if(ctx.finish2D) //this is a function I use in webgl renderer - ctx.finish2D(); -} - -/** -* draws some useful stats in the corner of the canvas -* @method renderInfo -**/ -LGraphCanvas.prototype.renderInfo = function( ctx, x, y ) -{ - x = x || 0; - y = y || 0; - - ctx.save(); - ctx.translate( x, y ); - - ctx.font = "10px Arial"; - ctx.fillStyle = "#888"; - if(this.graph) - { - ctx.fillText( "T: " + this.graph.globaltime.toFixed(2)+"s",5,13*1 ); - ctx.fillText( "I: " + this.graph.iteration,5,13*2 ); - ctx.fillText( "N: " + this.graph._nodes.length + " [" + this.visible_nodes.length + "]",5,13*3 ); - ctx.fillText( "V: " + this.graph._version,5,13*4 ); - ctx.fillText( "FPS:" + this.fps.toFixed(2),5,13*5 ); - } - else - ctx.fillText( "No graph selected",5,13*1 ); - ctx.restore(); -} - -/** -* draws the back canvas (the one containing the background and the connections) -* @method drawBackCanvas -**/ -LGraphCanvas.prototype.drawBackCanvas = function() -{ - var canvas = this.bgcanvas; - if(canvas.width != this.canvas.width || - canvas.height != this.canvas.height) - { - canvas.width = this.canvas.width; - canvas.height = this.canvas.height; - } - - if(!this.bgctx) - this.bgctx = this.bgcanvas.getContext("2d"); - var ctx = this.bgctx; - if(ctx.start) - ctx.start(); - - //clear - if(this.clear_background) - ctx.clearRect(0,0,canvas.width, canvas.height); - - if(this._graph_stack && this._graph_stack.length) - { - ctx.save(); - var parent_graph = this._graph_stack[ this._graph_stack.length - 1]; - var subgraph_node = this.graph._subgraph_node; - ctx.strokeStyle = subgraph_node.bgcolor; - ctx.lineWidth = 10; - ctx.strokeRect(1,1,canvas.width-2,canvas.height-2); - ctx.lineWidth = 1; - ctx.font = "40px Arial" - ctx.textAlign = "center"; - ctx.fillStyle = subgraph_node.bgcolor; - ctx.fillText( subgraph_node.getTitle(), canvas.width * 0.5, 40 ); - ctx.restore(); - } - - var bg_already_painted = false; - if(this.onRenderBackground) - bg_already_painted = this.onRenderBackground( canvas, ctx ); - - //reset in case of error - ctx.restore(); - ctx.setTransform(1, 0, 0, 1, 0, 0); - - if(this.graph) - { - //apply transformations - ctx.save(); - ctx.scale(this.scale,this.scale); - ctx.translate(this.offset[0],this.offset[1]); - - //render BG - if(this.background_image && this.scale > 0.5 && !bg_already_painted) - { - if (this.zoom_modify_alpha) - ctx.globalAlpha = (1.0 - 0.5 / this.scale) * this.editor_alpha; - else - ctx.globalAlpha = this.editor_alpha; - ctx.imageSmoothingEnabled = ctx.mozImageSmoothingEnabled = ctx.imageSmoothingEnabled = false; - if(!this._bg_img || this._bg_img.name != this.background_image) - { - this._bg_img = new Image(); - this._bg_img.name = this.background_image; - this._bg_img.src = this.background_image; - var that = this; - this._bg_img.onload = function() { - that.draw(true,true); - } - } - - var pattern = null; - if(this._pattern == null && this._bg_img.width > 0) - { - pattern = ctx.createPattern( this._bg_img, 'repeat' ); - this._pattern_img = this._bg_img; - this._pattern = pattern; - } - else - pattern = this._pattern; - if(pattern) - { - ctx.fillStyle = pattern; - ctx.fillRect(this.visible_area[0],this.visible_area[1],this.visible_area[2],this.visible_area[3]); - ctx.fillStyle = "transparent"; - } - - ctx.globalAlpha = 1.0; - ctx.imageSmoothingEnabled = ctx.mozImageSmoothingEnabled = ctx.imageSmoothingEnabled = true; - } - - //groups - if(this.graph._groups.length && !this.live_mode) - this.drawGroups(canvas, ctx); - - if(this.onBackgroundRender) - this.onBackgroundRender(canvas, ctx); - - //DEBUG: show clipping area - //ctx.fillStyle = "red"; - //ctx.fillRect( this.visible_area[0] + 10, this.visible_area[1] + 10, this.visible_area[2] - 20, this.visible_area[3] - 20); - - //bg - if (this.render_canvas_border) { - ctx.strokeStyle = "#235"; - ctx.strokeRect(0,0,canvas.width,canvas.height); - } - - if(this.render_connections_shadows) - { - ctx.shadowColor = "#000"; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; - ctx.shadowBlur = 6; - } - else - ctx.shadowColor = "rgba(0,0,0,0)"; - - //draw connections - if(!this.live_mode) - this.drawConnections(ctx); - - ctx.shadowColor = "rgba(0,0,0,0)"; - - //restore state - ctx.restore(); - } - - if(ctx.finish) - ctx.finish(); - - this.dirty_bgcanvas = false; - this.dirty_canvas = true; //to force to repaint the front canvas with the bgcanvas -} - -var temp_vec2 = new Float32Array(2); - -/** -* draws the given node inside the canvas -* @method drawNode -**/ -LGraphCanvas.prototype.drawNode = function(node, ctx ) -{ - var glow = false; - this.current_node = node; - - var color = node.color || node.constructor.color || LiteGraph.NODE_DEFAULT_COLOR; - var bgcolor = node.bgcolor || node.constructor.bgcolor || LiteGraph.NODE_DEFAULT_BGCOLOR; - - //shadow and glow - if (node.mouseOver) - glow = true; - - //only render if it forces it to do it - if(this.live_mode) - { - if(!node.flags.collapsed) - { - ctx.shadowColor = "transparent"; - if(node.onDrawForeground) - node.onDrawForeground(ctx, this, this.canvas ); - } - - return; - } - - var editor_alpha = this.editor_alpha; - ctx.globalAlpha = editor_alpha; - - if(this.render_shadows) - { - ctx.shadowColor = LiteGraph.DEFAULT_SHADOW_COLOR; - ctx.shadowOffsetX = 2 * this.scale; - ctx.shadowOffsetY = 2 * this.scale; - ctx.shadowBlur = 3 * this.scale; - } - else - ctx.shadowColor = "transparent"; - - //custom draw collapsed method (draw after shadows because they are affected) - if(node.flags.collapsed && node.onDrawCollaped && node.onDrawCollapsed(ctx, this) == true) - return; - - //clip if required (mask) - var shape = node._shape || LiteGraph.BOX_SHAPE; - var size = temp_vec2; - temp_vec2.set( node.size ); - if( node.flags.collapsed ) - { - ctx.font = this.inner_text_font; - var title = node.getTitle ? node.getTitle() : node.title; - node._collapsed_width = Math.min( node.size[0], ctx.measureText(title).width + 40 );//LiteGraph.NODE_COLLAPSED_WIDTH; - size[0] = node._collapsed_width; - size[1] = 0; - } - - if( node.flags.clip_area ) //Start clipping - { - ctx.save(); - ctx.beginPath(); - if(shape == LiteGraph.BOX_SHAPE) - ctx.rect(0,0,size[0], size[1]); - else if (shape == LiteGraph.ROUND_SHAPE) - ctx.roundRect(0,0,size[0], size[1],10); - else if (shape == LiteGraph.CIRCLE_SHAPE) - ctx.arc(size[0] * 0.5, size[1] * 0.5, size[0] * 0.5, 0, Math.PI*2); - ctx.clip(); - } - - //draw shape - this.drawNodeShape( node, ctx, size, color, bgcolor, node.selected, node.mouseOver ); - ctx.shadowColor = "transparent"; - - //connection slots - ctx.textAlign = node.flags.horizontal ? "center" : "left"; - ctx.font = this.inner_text_font; - - var render_text = this.scale > 0.6; - - var out_slot = this.connecting_output; - ctx.lineWidth = 1; - - var max_y = 0; - - //render inputs and outputs - if(!node.flags.collapsed) - { - //input connection slots - if(node.inputs) - for(var i = 0; i < node.inputs.length; i++) - { - var slot = node.inputs[i]; - - ctx.globalAlpha = editor_alpha; - //change opacity of incompatible slots when dragging a connection - if ( this.connecting_node && LiteGraph.isValidConnection( slot.type && out_slot.type ) ) - ctx.globalAlpha = 0.4 * editor_alpha; - - ctx.fillStyle = slot.link != null ? (slot.color_on || this.default_connection_color.input_on) : (slot.color_off || this.default_connection_color.input_off); - - var pos = node.getConnectionPos( true, i ); - pos[0] -= node.pos[0]; - pos[1] -= node.pos[1]; - if( max_y < pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5 ) - max_y = pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5; - - ctx.beginPath(); - - if (slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { - ctx.rect((pos[0] - 6) + 0.5, (pos[1] - 5) + 0.5, 14, 10); - } else if (slot.shape === LiteGraph.ARROW_SHAPE) { - ctx.moveTo(pos[0] + 8, pos[1] + 0.5); - ctx.lineTo(pos[0] - 4, (pos[1] + 6) + 0.5); - ctx.lineTo(pos[0] - 4, (pos[1] - 6) + 0.5); - ctx.closePath(); - } else { - ctx.arc(pos[0], pos[1], 4, 0, Math.PI * 2); - } - - ctx.fill(); - - //render name - if(render_text) - { - var text = slot.label != null ? slot.label : slot.name; - if(text) - { - ctx.fillStyle = LiteGraph.NODE_TEXT_COLOR; - if( node.flags.horizontal || slot.dir == LiteGraph.UP ) - ctx.fillText(text,pos[0],pos[1] - 10); - else - ctx.fillText(text,pos[0] + 10,pos[1] + 5); - } - } - } - - //output connection slots - if(this.connecting_node) - ctx.globalAlpha = 0.4 * editor_alpha; - - ctx.textAlign = node.flags.horizontal ? "center" : "right"; - ctx.strokeStyle = "black"; - if(node.outputs) - for(var i = 0; i < node.outputs.length; i++) - { - var slot = node.outputs[i]; - - var pos = node.getConnectionPos(false,i); - pos[0] -= node.pos[0]; - pos[1] -= node.pos[1]; - if( max_y < pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5) - max_y = pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5; - - ctx.fillStyle = slot.links && slot.links.length ? (slot.color_on || this.default_connection_color.output_on) : (slot.color_off || this.default_connection_color.output_off); - ctx.beginPath(); - //ctx.rect( node.size[0] - 14,i*14,10,10); - - if (slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { - ctx.rect((pos[0] - 6) + 0.5,(pos[1] - 5) + 0.5,14,10); - } else if (slot.shape === LiteGraph.ARROW_SHAPE) { - ctx.moveTo(pos[0] + 8, pos[1] + 0.5); - ctx.lineTo(pos[0] - 4, (pos[1] + 6) + 0.5); - ctx.lineTo(pos[0] - 4, (pos[1] - 6) + 0.5); - ctx.closePath(); - } else { - ctx.arc(pos[0], pos[1], 4, 0, Math.PI * 2); - } - - //trigger - //if(slot.node_id != null && slot.slot == -1) - // ctx.fillStyle = "#F85"; - - //if(slot.links != null && slot.links.length) - ctx.fill(); - ctx.stroke(); - - //render output name - if(render_text) - { - var text = slot.label != null ? slot.label : slot.name; - if(text) - { - ctx.fillStyle = LiteGraph.NODE_TEXT_COLOR; - if( node.flags.horizontal || slot.dir == LiteGraph.DOWN ) - ctx.fillText(text,pos[0],pos[1] - 8); - else - ctx.fillText(text, pos[0] - 10,pos[1] + 5); - } - } - } - - ctx.textAlign = "left"; - ctx.globalAlpha = 1; - - if(node.widgets) - { - if( node.flags.horizontal || node.flags.widgets_up ) - max_y = 2; - this.drawNodeWidgets( node, max_y, ctx, (this.node_widget && this.node_widget[0] == node) ? this.node_widget[1] : null ); - } - - //draw foreground - if(node.onDrawForeground) - node.onDrawForeground( ctx, this, this.canvas ); - } - else //if collapsed - { - if(node.inputs) - { - for(var i = 0; i < node.inputs.length; i++) - { - var slot = node.inputs[i]; - if( slot.link == null ) - continue; - ctx.fillStyle = slot.color_on || this.default_connection_color.input_on; - ctx.beginPath(); - if ( slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { - ctx.rect(0.5, 4 - LiteGraph.NODE_TITLE_HEIGHT + 0.5,14,LiteGraph.NODE_TITLE_HEIGHT - 8); - } else if (slot.shape === LiteGraph.ARROW_SHAPE) { - ctx.moveTo(8, LiteGraph.NODE_TITLE_HEIGHT * -0.5); - ctx.lineTo(-4, LiteGraph.NODE_TITLE_HEIGHT * -0.8); - ctx.lineTo(-4, LiteGraph.NODE_TITLE_HEIGHT * -0.2); - ctx.closePath(); - } else { - ctx.arc(0, LiteGraph.NODE_TITLE_HEIGHT * -0.5, 4, 0, Math.PI * 2); - } - ctx.fill(); - break; - } - } - - if(node.outputs) - { - for(var i = 0; i < node.outputs.length; i++) - { - var slot = node.outputs[i]; - if(!slot.links || !slot.links.length) - continue; - ctx.fillStyle = slot.color_on || this.default_connection_color.output_on; - ctx.strokeStyle = "black"; - ctx.beginPath(); - if (slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { - ctx.rect( node._collapsed_width - 4 + 0.5, 4 - LiteGraph.NODE_TITLE_HEIGHT + 0.5,14,LiteGraph.NODE_TITLE_HEIGHT - 8); - } else if (slot.shape === LiteGraph.ARROW_SHAPE) { - ctx.moveTo(node._collapsed_width + 6, LiteGraph.NODE_TITLE_HEIGHT * -0.5); - ctx.lineTo(node._collapsed_width - 6, LiteGraph.NODE_TITLE_HEIGHT * -0.8); - ctx.lineTo(node._collapsed_width - 6, LiteGraph.NODE_TITLE_HEIGHT * -0.2); - ctx.closePath(); - } else { - ctx.arc(node._collapsed_width, LiteGraph.NODE_TITLE_HEIGHT * -0.5, 4, 0, Math.PI * 2); - } - ctx.fill(); - ctx.stroke(); - } - } - - } - - if(node.flags.clip_area) - ctx.restore(); - - ctx.globalAlpha = 1.0; -} - -/** -* draws the shape of the given node in the canvas -* @method drawNodeShape -**/ -LGraphCanvas.prototype.drawNodeShape = function( node, ctx, size, fgcolor, bgcolor, selected, mouse_over ) -{ - //bg rect - ctx.strokeStyle = fgcolor; - ctx.fillStyle = bgcolor; - - var title_height = LiteGraph.NODE_TITLE_HEIGHT; - - //render node area depending on shape - var shape = node._shape || node.constructor.shape || LiteGraph.BOX_SHAPE; - var title_mode = node.constructor.title_mode; - - var render_title = true; - if( title_mode == LiteGraph.TRANSPARENT_TITLE ) - render_title = false; - else if( title_mode == LiteGraph.AUTOHIDE_TITLE && mouse_over) - render_title = true; - - var areax = 0; - var areay = render_title ? -title_height : 0; - var areaw = size[0]+1; - var areah = render_title ? size[1] + title_height : size[1]; - - //full node shape - if(!node.flags.collapsed) - { - ctx.beginPath(); - if(shape == LiteGraph.BOX_SHAPE || this.scale < 0.5) - ctx.fillRect( areax, areay, areaw, areah ); - else if (shape == LiteGraph.ROUND_SHAPE || shape == LiteGraph.CARD_SHAPE) - ctx.roundRect( areax, areay, areaw, areah, this.round_radius, shape == LiteGraph.CARD_SHAPE ? 0 : this.round_radius); - else if (shape == LiteGraph.CIRCLE_SHAPE) - ctx.arc(size[0] * 0.5, size[1] * 0.5, size[0] * 0.5, 0, Math.PI*2); - ctx.fill(); - } - ctx.shadowColor = "transparent"; - - //image - if (node.bgImage && node.bgImage.width) - ctx.drawImage( node.bgImage, (size[0] - node.bgImage.width) * 0.5 , (size[1] - node.bgImage.height) * 0.5); - - if(node.bgImageUrl && !node.bgImage) - node.bgImage = node.loadImage(node.bgImageUrl); - - if( node.onDrawBackground ) - node.onDrawBackground( ctx, this, this.canvas ); - - //title bg (remember, it is rendered ABOVE the node) - if(render_title || title_mode == LiteGraph.TRANSPARENT_TITLE ) - { - //title bar - if(title_mode != LiteGraph.TRANSPARENT_TITLE) //!node.flags.collapsed) - { - if(node.flags.collapsed) - ctx.shadowColor = LiteGraph.DEFAULT_SHADOW_COLOR; - - //* gradient test - if(this.use_gradients) - { - var grad = LGraphCanvas.gradients[ fgcolor ]; - if(!grad) - { - grad = LGraphCanvas.gradients[ fgcolor ] = ctx.createLinearGradient(0,0,400,0); - grad.addColorStop(0, fgcolor); - grad.addColorStop(1, "#000"); - } - ctx.fillStyle = grad; - } - else - ctx.fillStyle = fgcolor; - - var old_alpha = ctx.globalAlpha; - //ctx.globalAlpha = 0.5 * old_alpha; - ctx.beginPath(); - if(shape == LiteGraph.BOX_SHAPE || this.scale < 0.5) - ctx.rect(0, -title_height, size[0]+1, title_height); - else if ( shape == LiteGraph.ROUND_SHAPE || shape == LiteGraph.CARD_SHAPE ) - ctx.roundRect(0,-title_height,size[0]+1, title_height, this.round_radius, node.flags.collapsed ? this.round_radius : 0); - ctx.fill(); - ctx.shadowColor = "transparent"; - } - - //title box - if (shape == LiteGraph.ROUND_SHAPE || shape == LiteGraph.CIRCLE_SHAPE || shape == LiteGraph.CARD_SHAPE) - { - if( this.scale > 0.5 ) - { - ctx.fillStyle = "black"; - ctx.beginPath(); - ctx.arc(title_height *0.5, title_height * -0.5, (title_height - 8) *0.5,0,Math.PI*2); - ctx.fill(); - } - - ctx.fillStyle = node.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR; - ctx.beginPath(); - ctx.arc(title_height *0.5, title_height * -0.5, (title_height - 8) *0.4,0,Math.PI*2); - ctx.fill(); - } - else - { - if( this.scale > 0.5 ) - { - ctx.fillStyle = "black"; - ctx.fillRect(4,-title_height + 4,title_height - 8,title_height - 8); - } - ctx.fillStyle = node.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR; - ctx.fillRect(5,-title_height + 5,title_height - 10,title_height - 10); - } - ctx.globalAlpha = old_alpha; - - //title text - if( this.scale > 0.5 ) - { - ctx.font = this.title_text_font; - var title = node.getTitle(); - if(title) - { - if(selected) - ctx.fillStyle = "white"; - else - ctx.fillStyle = node.constructor.title_text_color || this.node_title_color; - if( node.flags.collapsed ) - { - ctx.textAlign = "center"; - var measure = ctx.measureText(title); - ctx.fillText( title, title_height + measure.width * 0.5, -title_height * 0.2 ); - ctx.textAlign = "left"; - } - else - { - ctx.textAlign = "left"; - ctx.fillText( title, title_height, -title_height * 0.2 ); - } - } - } - - if(node.onDrawTitle) - node.onDrawTitle(ctx); - } - - //render selection marker - if(selected) - { - if( title_mode == LiteGraph.TRANSPARENT_TITLE ) - { - areay -= title_height; - areah += title_height; - } - ctx.lineWidth = 1; - ctx.globalAlpha = 0.8; - ctx.beginPath(); - if(shape == LiteGraph.BOX_SHAPE) - ctx.rect(-6 + areax,-6 + areay, 12 + areaw, 12 + areah ); - else if (shape == LiteGraph.ROUND_SHAPE || (shape == LiteGraph.CARD_SHAPE && node.flags.collapsed) ) - ctx.roundRect(-6 + areax,-6 + areay, 12 + areaw, 12 + areah , this.round_radius * 2); - else if (shape == LiteGraph.CARD_SHAPE) - ctx.roundRect(-6 + areax,-6 + areay, 12 + areaw, 12 + areah , this.round_radius * 2, 2); - else if (shape == LiteGraph.CIRCLE_SHAPE) - ctx.arc(size[0] * 0.5, size[1] * 0.5, size[0] * 0.5 + 6, 0, Math.PI*2); - ctx.strokeStyle = "#FFF"; - ctx.stroke(); - ctx.strokeStyle = fgcolor; - ctx.globalAlpha = 1; - } -} - -/** -* draws every connection visible in the canvas -* OPTIMIZE THIS: precatch connections position instead of recomputing them every time -* @method drawConnections -**/ -LGraphCanvas.prototype.drawConnections = function(ctx) -{ - var now = LiteGraph.getTime(); - var visible_area = this.visible_area; - var margin_area = new Float32Array([visible_area[0] - 20, visible_area[1] - 20, visible_area[2] + 40, visible_area[3] + 40 ]); - var link_bounding = new Float32Array(4); - - //draw connections - ctx.lineWidth = this.connections_width; - - ctx.fillStyle = "#AAA"; - ctx.strokeStyle = "#AAA"; - ctx.globalAlpha = this.editor_alpha; - //for every node - var nodes = this.graph._nodes; - for (var n = 0, l = nodes.length; n < l; ++n) - { - var node = nodes[n]; - //for every input (we render just inputs because it is easier as every slot can only have one input) - if(!node.inputs || !node.inputs.length) - continue; - - for(var i = 0; i < node.inputs.length; ++i) - { - var input = node.inputs[i]; - if(!input || input.link == null) - continue; - var link_id = input.link; - var link = this.graph.links[ link_id ]; - if(!link) - continue; - - //find link info - var start_node = this.graph.getNodeById( link.origin_id ); - if(start_node == null) continue; - var start_node_slot = link.origin_slot; - var start_node_slotpos = null; - if(start_node_slot == -1) - start_node_slotpos = [start_node.pos[0] + 10, start_node.pos[1] + 10]; - else - start_node_slotpos = start_node.getConnectionPos(false, start_node_slot); - var end_node_slotpos = node.getConnectionPos(true,i); - - //compute link bounding - link_bounding[0] = start_node_slotpos[0]; - link_bounding[1] = start_node_slotpos[1]; - link_bounding[2] = end_node_slotpos[0] - start_node_slotpos[0]; - link_bounding[3] = end_node_slotpos[1] - start_node_slotpos[1]; - if( link_bounding[2] < 0 ){ - link_bounding[0] += link_bounding[2]; - link_bounding[2] = Math.abs( link_bounding[2] ); - } - if( link_bounding[3] < 0 ){ - link_bounding[1] += link_bounding[3]; - link_bounding[3] = Math.abs( link_bounding[3] ); - } - - //skip links outside of the visible area of the canvas - if( !overlapBounding( link_bounding, margin_area ) ) - continue; - - var start_slot = start_node.outputs[start_node_slot]; - var end_slot = node.inputs[i]; - var start_dir = start_slot.dir || (start_node.flags.horizontal ? LiteGraph.DOWN : LiteGraph.RIGHT); - var end_dir = end_slot.dir || (node.flags.horizontal ? LiteGraph.UP : LiteGraph.LEFT); - - this.renderLink( ctx, start_node_slotpos, end_node_slotpos, link, false, 0, null, start_dir, end_dir ); - - //event triggered rendered on top - if(link && link._last_time && (now - link._last_time) < 1000 ) - { - var f = 2.0 - (now - link._last_time) * 0.002; - var color = "rgba(255,255,255, " + f.toFixed(2) + ")"; - this.renderLink( ctx, start_node_slotpos, end_node_slotpos, link, true, f, color, start_dir, end_dir ); - } - } - } - ctx.globalAlpha = 1; -} - -/** -* draws a link between two points -* @method renderLink -**/ -LGraphCanvas.prototype.renderLink = function( ctx, a, b, link, skip_border, flow, color, start_dir, end_dir ) -{ - if(!this.highquality_render) - { - ctx.beginPath(); - ctx.moveTo(a[0],a[1]); - ctx.lineTo(b[0],b[1]); - ctx.stroke(); - return; - } - - start_dir = start_dir || LiteGraph.RIGHT; - end_dir = end_dir || LiteGraph.LEFT; - - var dist = distance(a,b); - - if(this.render_connections_border && this.scale > 0.6) - ctx.lineWidth = this.connections_width + 4; - - //choose color - if( !color && link ) - color = LGraphCanvas.link_type_colors[ link.type ]; - if( !color ) - color = this.default_link_color; - - if( link != null && this.highlighted_links[ link.id ] ) - color = "#FFF"; - - //begin line shape - ctx.beginPath(); - - if(this.render_curved_connections) //splines - { - ctx.moveTo(a[0],a[1]); - var start_offset_x = 0; - var start_offset_y = 0; - var end_offset_x = 0; - var end_offset_y = 0; - switch(start_dir) - { - case LiteGraph.LEFT: start_offset_x = dist*-0.25; break; - case LiteGraph.RIGHT: start_offset_x = dist*0.25; break; - case LiteGraph.UP: start_offset_y = dist*-0.25; break; - case LiteGraph.DOWN: start_offset_y = dist*0.25; break; - } - switch(end_dir) - { - case LiteGraph.LEFT: end_offset_x = dist*-0.25; break; - case LiteGraph.RIGHT: end_offset_x = dist*0.25; break; - case LiteGraph.UP: end_offset_y = dist*-0.25; break; - case LiteGraph.DOWN: end_offset_y = dist*0.25; break; - } - ctx.bezierCurveTo(a[0] + start_offset_x, a[1] + start_offset_y, - b[0] + end_offset_x , b[1] + end_offset_y, - b[0], b[1] ); - } - else //lines - { - ctx.moveTo(a[0]+10,a[1]); - ctx.lineTo(((a[0]+10) + (b[0]-10))*0.5,a[1]); - ctx.lineTo(((a[0]+10) + (b[0]-10))*0.5,b[1]); - ctx.lineTo(b[0]-10,b[1]); - } - - //rendering the outline of the connection can be a little bit slow - if(this.render_connections_border && this.scale > 0.6 && !skip_border) - { - ctx.strokeStyle = "rgba(0,0,0,0.5)"; - ctx.stroke(); - } - - ctx.lineWidth = this.connections_width; - ctx.fillStyle = ctx.strokeStyle = color; - ctx.stroke(); - //end line shape - - //render arrow in the middle - if( this.render_connection_arrows && this.scale >= 0.6 ) - { - //render arrow - if(this.render_connection_arrows && this.scale > 0.6) - { - //compute two points in the connection - var pos = this.computeConnectionPoint(a, b, 0.5, start_dir, end_dir); - var pos2 = this.computeConnectionPoint(a, b, 0.51, start_dir, end_dir); - - //compute the angle between them so the arrow points in the right direction - var angle = 0; - if(this.render_curved_connections) - angle = -Math.atan2( pos2[0] - pos[0], pos2[1] - pos[1]); - else - angle = b[1] > a[1] ? 0 : Math.PI; - - //render arrow - ctx.save(); - ctx.translate(pos[0],pos[1]); - ctx.rotate(angle); - ctx.beginPath(); - ctx.moveTo(-5,-5); - ctx.lineTo(0,+5); - ctx.lineTo(+5,-5); - ctx.fill(); - ctx.restore(); - } - } - - //render flowing points - if(flow) - { - for(var i = 0; i < 5; ++i) - { - var f = (LiteGraph.getTime() * 0.001 + (i * 0.2)) % 1; - var pos = this.computeConnectionPoint(a,b,f, start_dir, end_dir); - ctx.beginPath(); - ctx.arc(pos[0],pos[1],5,0,2*Math.PI); - ctx.fill(); - } - } -} - -LGraphCanvas.prototype.computeConnectionPoint = function(a,b,t,start_dir,end_dir) -{ - start_dir = start_dir || LiteGraph.RIGHT; - end_dir = end_dir || LiteGraph.LEFT; - - var dist = distance(a,b); - var p0 = a; - var p1 = [ a[0], a[1] ]; - var p2 = [ b[0], b[1] ]; - var p3 = b; - - switch(start_dir) - { - case LiteGraph.LEFT: p1[0] += dist*-0.25; break; - case LiteGraph.RIGHT: p1[0] += dist*0.25; break; - case LiteGraph.UP: p1[1] += dist*-0.25; break; - case LiteGraph.DOWN: p1[1] += dist*0.25; break; - } - switch(end_dir) - { - case LiteGraph.LEFT: p2[0] += dist*-0.25; break; - case LiteGraph.RIGHT: p2[0] += dist*0.25; break; - case LiteGraph.UP: p2[1] += dist*-0.25; break; - case LiteGraph.DOWN: p2[1] += dist*0.25; break; - } - - var c1 = (1-t)*(1-t)*(1-t); - var c2 = 3*((1-t)*(1-t))*t; - var c3 = 3*(1-t)*(t*t); - var c4 = t*t*t; - - var x = c1*p0[0] + c2*p1[0] + c3*p2[0] + c4*p3[0]; - var y = c1*p0[1] + c2*p1[1] + c3*p2[1] + c4*p3[1]; - return [x,y]; -} - -LGraphCanvas.prototype.drawExecutionOrder = function(ctx) -{ - ctx.shadowColor = "transparent"; - ctx.globalAlpha = 0.25; - - ctx.textAlign = "center"; - ctx.strokeStyle = "white"; - ctx.globalAlpha = 0.75; - - var visible_nodes = this.visible_nodes; - for (var i = 0; i < visible_nodes.length; ++i) - { - var node = visible_nodes[i]; - ctx.fillStyle = "black"; - ctx.fillRect( node.pos[0] - LiteGraph.NODE_TITLE_HEIGHT, node.pos[1] - LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT ); - if(node.order == 0) - ctx.strokeRect( node.pos[0] - LiteGraph.NODE_TITLE_HEIGHT + 0.5, node.pos[1] - LiteGraph.NODE_TITLE_HEIGHT + 0.5, LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT ); - ctx.fillStyle = "#FFF"; - ctx.fillText( node.order, node.pos[0] + LiteGraph.NODE_TITLE_HEIGHT * -0.5, node.pos[1] - 6 ); - } - ctx.globalAlpha = 1; -} - - -/** -* draws the widgets stored inside a node -* @method drawNodeWidgets -**/ -LGraphCanvas.prototype.drawNodeWidgets = function( node, posY, ctx, active_widget ) -{ - if(!node.widgets || !node.widgets.length) - return 0; - var width = node.size[0]; - var widgets = node.widgets; - posY += 2; - var H = LiteGraph.NODE_WIDGET_HEIGHT; - var show_text = this.scale > 0.5; - ctx.save(); - ctx.globalAlpha = this.editor_alpha; - - for(var i = 0; i < widgets.length; ++i) - { - var w = widgets[i]; - var y = posY; - if(w.y) - y = w.y; - w.last_y = y; - ctx.strokeStyle = "#AAA"; - ctx.fillStyle = "#222"; - ctx.textAlign = "left"; - - switch( w.type ) - { - case "button": - if(w.clicked) - { - ctx.fillStyle = "#AAA"; - w.clicked = false; - this.dirty_canvas = true; - } - ctx.fillRect(10,y,width-20,H); - ctx.strokeRect(10,y,width-20,H); - if(show_text) - { - ctx.textAlign = "center"; - ctx.fillStyle = "#AAA"; - ctx.fillText( w.name, width*0.5, y + H*0.7 ); - } - break; - case "toggle": - ctx.textAlign = "left"; - ctx.strokeStyle = "#AAA"; - ctx.fillStyle = "#111"; - ctx.beginPath(); - ctx.roundRect( 10, posY, width - 20, H,H*0.5 ); - ctx.fill(); - ctx.stroke(); - ctx.fillStyle = w.value ? "#89A" : "#333"; - ctx.beginPath(); - ctx.arc( width - 20, y + H*0.5, H * 0.36, 0, Math.PI * 2 ); - ctx.fill(); - if(show_text) - { - ctx.fillStyle = "#999"; - if(w.name != null) - ctx.fillText( w.name, 20, y + H*0.7 ); - ctx.fillStyle = w.value ? "#DDD" : "#888"; - ctx.textAlign = "right"; - ctx.fillText( w.value ? (w.options.on || "true") : (w.options.off || "false"), width - 30, y + H*0.7 ); - } - break; - case "slider": - ctx.fillStyle = "#111"; - ctx.fillRect(10,y,width-20,H); - var range = w.options.max - w.options.min; - var nvalue = (w.value - w.options.min) / range; - ctx.fillStyle = active_widget == w ? "#89A" : "#678"; - ctx.fillRect(10,y,nvalue*(width-20),H); - ctx.strokeRect(10,y,width-20,H); - if(show_text) - { - ctx.textAlign = "center"; - ctx.fillStyle = "#DDD"; - ctx.fillText( w.name + " " + Number(w.value).toFixed(3), width*0.5, y + H*0.7 ); - } - break; - case "number": - case "combo": - ctx.textAlign = "left"; - ctx.strokeStyle = "#AAA"; - ctx.fillStyle = "#111"; - ctx.beginPath(); - ctx.roundRect( 10, posY, width - 20, H,H*0.5 ); - ctx.fill(); - ctx.stroke(); - if(show_text) - { - ctx.fillStyle = "#AAA"; - ctx.beginPath(); - ctx.moveTo( 26, posY + 5 ); - ctx.lineTo( 16, posY + H*0.5 ); - ctx.lineTo( 26, posY + H - 5 ); - ctx.moveTo( width - 26, posY + 5 ); - ctx.lineTo( width - 16, posY + H*0.5 ); - ctx.lineTo( width - 26, posY + H - 5 ); - ctx.fill(); - ctx.fillStyle = "#999"; - ctx.fillText( w.name, 30, y + H*0.7 ); - ctx.fillStyle = "#DDD"; - ctx.textAlign = "right"; - if(w.type == "number") - ctx.fillText( Number(w.value).toFixed( w.options.precision !== undefined ? w.options.precision : 3), width - 40, y + H*0.7 ); - else - ctx.fillText( w.value, width - 40, y + H*0.7 ); - } - break; - case "text": - ctx.textAlign = "left"; - ctx.strokeStyle = "#AAA"; - ctx.fillStyle = "#111"; - ctx.beginPath(); - ctx.roundRect( 10, posY, width - 20, H,H*0.5 ); - ctx.fill(); - ctx.stroke(); - if(show_text) - { - ctx.fillStyle = "#999"; - if(w.name != null) - ctx.fillText( w.name, 20, y + H*0.7 ); - ctx.fillStyle = "#DDD"; - ctx.textAlign = "right"; - ctx.fillText( w.value, width - 20, y + H*0.7 ); - } - break; - default: - break; - } - posY += H + 4; - } - ctx.restore(); -} - -/** -* process an event on widgets -* @method processNodeWidgets -**/ -LGraphCanvas.prototype.processNodeWidgets = function( node, pos, event, active_widget ) -{ - if(!node.widgets || !node.widgets.length) - return null; - - var x = pos[0] - node.pos[0]; - var y = pos[1] - node.pos[1]; - var width = node.size[0]; - var that = this; - - for(var i = 0; i < node.widgets.length; ++i) - { - var w = node.widgets[i]; - if( w == active_widget || (x > 6 && x < (width - 12) && y > w.last_y && y < (w.last_y + LiteGraph.NODE_WIDGET_HEIGHT)) ) - { - //inside widget - switch( w.type ) - { - case "button": - if(w.callback) - setTimeout( function(){ w.callback( w, that, node, pos ); }, 20 ); - w.clicked = true; - this.dirty_canvas = true; - break; - case "slider": - var range = w.options.max - w.options.min; - var nvalue = Math.clamp( (x - 10) / (width - 20), 0, 1); - w.value = w.options.min + (w.options.max - w.options.min) * nvalue; - if(w.callback) - setTimeout( function(){ w.callback( w.value, that, node, pos ); }, 20 ); - this.dirty_canvas = true; - break; - case "number": - case "combo": - if(event.type == "mousemove" && w.type == "number") - { - w.value += (event.deltaX * 0.1) * (w.options.step || 1); - if(w.options.min != null && w.value < w.options.min) - w.value = w.options.min; - if(w.options.max != null && w.value > w.options.max) - w.value = w.options.max; - } - else if( event.type == "mousedown" ) - { - var delta = ( x < 40 ? -1 : ( x > width - 40 ? 1 : 0) ); - if (w.type == "number") - { - w.value += delta * 0.1 * (w.options.step || 1); - if(w.options.min != null && w.value < w.options.min) - w.value = w.options.min; - if(w.options.max != null && w.value > w.options.max) - w.value = w.options.max; - } - else if(delta) - { - var index = w.options.values.indexOf( w.value ) + delta; - if( index >= w.options.values.length ) - index = 0; - if( index < 0 ) - index = w.options.values.length - 1; - w.value = w.options.values[ index ]; - } - } - if(w.callback) - setTimeout( (function(){ this.callback( this.value, that, node, pos ); }).bind(w), 20 ); - this.dirty_canvas = true; - break; - case "toggle": - if( event.type == "mousedown" ) - w.value = !w.value; - break; - case "text": - if( event.type == "mousedown" ) - this.prompt( "Value", w.value, (function(v){ this.value = v; }).bind(w), event ); - break; - } - - return w; - } - } - return null; -} - -/** -* draws every group area in the background -* @method drawGroups -**/ -LGraphCanvas.prototype.drawGroups = function(canvas, ctx) -{ - if(!this.graph) - return; - - var groups = this.graph._groups; - - ctx.save(); - ctx.globalAlpha = 0.5 * this.editor_alpha; - ctx.font = "24px Arial"; - - for(var i = 0; i < groups.length; ++i) - { - var group = groups[i]; - - if(!overlapBounding( this.visible_area, group._bounding )) - continue; //out of the visible area - - ctx.fillStyle = group.color || "#335"; - ctx.strokeStyle = group.color || "#335"; - var pos = group._pos; - var size = group._size; - ctx.globalAlpha = 0.25 * this.editor_alpha; - ctx.beginPath(); - ctx.rect( pos[0] + 0.5, pos[1] + 0.5, size[0], size[1] ); - ctx.fill(); - ctx.globalAlpha = this.editor_alpha;; - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo( pos[0] + size[0], pos[1] + size[1] ); - ctx.lineTo( pos[0] + size[0] - 10, pos[1] + size[1] ); - ctx.lineTo( pos[0] + size[0], pos[1] + size[1] - 10 ); - ctx.fill(); - - ctx.fillText( group.title, pos[0] + 4, pos[1] + 24 ); - } - - ctx.restore(); -} - -/** -* resizes the canvas to a given size, if no size is passed, then it tries to fill the parentNode -* @method resize -**/ -LGraphCanvas.prototype.resize = function(width, height) -{ - if(!width && !height) - { - var parent = this.canvas.parentNode; - width = parent.offsetWidth; - height = parent.offsetHeight; - } - - if(this.canvas.width == width && this.canvas.height == height) - return; - - this.canvas.width = width; - this.canvas.height = height; - this.bgcanvas.width = this.canvas.width; - this.bgcanvas.height = this.canvas.height; - this.setDirty(true,true); -} - -/** -* switches to live mode (node shapes are not rendered, only the content) -* this feature was designed when graphs where meant to create user interfaces -* @method switchLiveMode -**/ -LGraphCanvas.prototype.switchLiveMode = function(transition) -{ - if(!transition) - { - this.live_mode = !this.live_mode; - this.dirty_canvas = true; - this.dirty_bgcanvas = true; - return; - } - - var self = this; - var delta = this.live_mode ? 1.1 : 0.9; - if(this.live_mode) - { - this.live_mode = false; - this.editor_alpha = 0.1; - } - - var t = setInterval(function() { - self.editor_alpha *= delta; - self.dirty_canvas = true; - self.dirty_bgcanvas = true; - - if(delta < 1 && self.editor_alpha < 0.01) - { - clearInterval(t); - if(delta < 1) - self.live_mode = true; - } - if(delta > 1 && self.editor_alpha > 0.99) - { - clearInterval(t); - self.editor_alpha = 1; - } - },1); -} - -LGraphCanvas.prototype.onNodeSelectionChange = function(node) -{ - return; //disabled -} - -LGraphCanvas.prototype.touchHandler = function(event) -{ - //alert("foo"); - var touches = event.changedTouches, - first = touches[0], - type = ""; - - switch(event.type) - { - case "touchstart": type = "mousedown"; break; - case "touchmove": type = "mousemove"; break; - case "touchend": type = "mouseup"; break; - default: return; - } - - //initMouseEvent(type, canBubble, cancelable, view, clickCount, - // screenX, screenY, clientX, clientY, ctrlKey, - // altKey, shiftKey, metaKey, button, relatedTarget); - - var window = this.getCanvasWindow(); - var document = window.document; - - var simulatedEvent = document.createEvent("MouseEvent"); - simulatedEvent.initMouseEvent(type, true, true, window, 1, - first.screenX, first.screenY, - first.clientX, first.clientY, false, - false, false, false, 0/*left*/, null); - first.target.dispatchEvent(simulatedEvent); - event.preventDefault(); -} - -/* CONTEXT MENU ********************/ - -LGraphCanvas.onGroupAdd = function(info,entry,mouse_event) -{ - var canvas = LGraphCanvas.active_canvas; - var ref_window = canvas.getCanvasWindow(); - - var group = new LiteGraph.LGraphGroup(); - group.pos = canvas.convertEventToCanvas( mouse_event ); - canvas.graph.add( group ); -} - -LGraphCanvas.onMenuAdd = function( node, options, e, prev_menu ) -{ - var canvas = LGraphCanvas.active_canvas; - var ref_window = canvas.getCanvasWindow(); - - var values = LiteGraph.getNodeTypesCategories(); - var entries = []; - for(var i in values) - if(values[i]) - entries.push({ value: values[i], content: values[i], has_submenu: true }); - - //show categories - var menu = new LiteGraph.ContextMenu( entries, { event: e, callback: inner_clicked, parentMenu: prev_menu }, ref_window); - - function inner_clicked( v, option, e ) - { - var category = v.value; - var node_types = LiteGraph.getNodeTypesInCategory( category, canvas.filter ); - var values = []; - for(var i in node_types) - if (!node_types[i].skip_list) - values.push( { content: node_types[i].title, value: node_types[i].type }); - - new LiteGraph.ContextMenu( values, {event: e, callback: inner_create, parentMenu: menu }, ref_window); - return false; - } - - function inner_create( v, e ) - { - var first_event = prev_menu.getFirstEvent(); - var node = LiteGraph.createNode( v.value ); - if(node) - { - node.pos = canvas.convertEventToCanvas( first_event ); - canvas.graph.add( node ); - } - } - - return false; -} - -LGraphCanvas.onMenuCollapseAll = function() -{ - -} - - -LGraphCanvas.onMenuNodeEdit = function() -{ - -} - -LGraphCanvas.showMenuNodeOptionalInputs = function( v, options, e, prev_menu, node ) -{ - if(!node) - return; - - var that = this; - var canvas = LGraphCanvas.active_canvas; - var ref_window = canvas.getCanvasWindow(); - - var options = node.optional_inputs; - if(node.onGetInputs) - options = node.onGetInputs(); - - var entries = []; - if(options) - for (var i in options) - { - var entry = options[i]; - if(!entry) - { - entries.push(null); - continue; - } - var label = entry[0]; - if(entry[2] && entry[2].label) - label = entry[2].label; - var data = {content: label, value: entry}; - if(entry[1] == LiteGraph.ACTION) - data.className = "event"; - entries.push(data); - } - - if(this.onMenuNodeInputs) - entries = this.onMenuNodeInputs( entries ); - - if(!entries.length) - return; - - var menu = new LiteGraph.ContextMenu(entries, { event: e, callback: inner_clicked, parentMenu: prev_menu, node: node }, ref_window); - - function inner_clicked(v, e, prev) - { - if(!node) - return; - - if(v.callback) - v.callback.call( that, node, v, e, prev ); - - if(v.value) - { - node.addInput(v.value[0],v.value[1], v.value[2]); - node.setDirtyCanvas(true,true); - } - } - - return false; -} - -LGraphCanvas.showMenuNodeOptionalOutputs = function( v, options, e, prev_menu, node ) -{ - if(!node) - return; - - var that = this; - var canvas = LGraphCanvas.active_canvas; - var ref_window = canvas.getCanvasWindow(); - - var options = node.optional_outputs; - if(node.onGetOutputs) - options = node.onGetOutputs(); - - var entries = []; - if(options) - for (var i in options) - { - var entry = options[i]; - if(!entry) //separator? - { - entries.push(null); - continue; - } - - if(node.flags && node.flags.skip_repeated_outputs && node.findOutputSlot(entry[0]) != -1) - continue; //skip the ones already on - var label = entry[0]; - if(entry[2] && entry[2].label) - label = entry[2].label; - var data = {content: label, value: entry}; - if(entry[1] == LiteGraph.EVENT) - data.className = "event"; - entries.push(data); - } - - if(this.onMenuNodeOutputs) - entries = this.onMenuNodeOutputs( entries ); - - if(!entries.length) - return; - - var menu = new LiteGraph.ContextMenu(entries, {event: e, callback: inner_clicked, parentMenu: prev_menu, node: node }, ref_window); - - function inner_clicked( v, e, prev ) - { - if(!node) - return; - - if(v.callback) - v.callback.call( that, node, v, e, prev ); - - if(!v.value) - return; - - var value = v.value[1]; - - if(value && (value.constructor === Object || value.constructor === Array)) //submenu why? - { - var entries = []; - for(var i in value) - entries.push({ content: i, value: value[i]}); - new LiteGraph.ContextMenu( entries, { event: e, callback: inner_clicked, parentMenu: prev_menu, node: node }); - return false; - } - else - { - node.addOutput( v.value[0], v.value[1], v.value[2]); - node.setDirtyCanvas(true,true); - } - - } - - return false; -} - -LGraphCanvas.onShowMenuNodeProperties = function( value, options, e, prev_menu, node ) -{ - if(!node || !node.properties) - return; - - var that = this; - var canvas = LGraphCanvas.active_canvas; - var ref_window = canvas.getCanvasWindow(); - - var entries = []; - for (var i in node.properties) - { - var value = node.properties[i] !== undefined ? node.properties[i] : " "; - //value could contain invalid html characters, clean that - value = LGraphCanvas.decodeHTML(value); - entries.push({content: "" + i + "" + "" + value + "", value: i}); - } - if(!entries.length) - return; - - var menu = new LiteGraph.ContextMenu(entries, {event: e, callback: inner_clicked, parentMenu: prev_menu, allow_html: true, node: node },ref_window); - - function inner_clicked( v, options, e, prev ) - { - if(!node) - return; - var rect = this.getBoundingClientRect(); - canvas.showEditPropertyValue( node, v.value, { position: [rect.left, rect.top] }); - } - - return false; -} - -LGraphCanvas.decodeHTML = function( str ) -{ - var e = document.createElement("div"); - e.innerText = str; - return e.innerHTML; -} - -LGraphCanvas.onResizeNode = function( value, options, e, menu, node ) -{ - if(!node) - return; - node.size = node.computeSize(); - node.setDirtyCanvas(true,true); -} - - -LGraphCanvas.onShowTitleEditor = function( value, options, e, menu, node ) -{ - var input_html = ""; - - var dialog = document.createElement("div"); - dialog.className = "graphdialog"; - dialog.innerHTML = "Title"; - var input = dialog.querySelector("input"); - if(input) - { - input.value = node.title; - input.addEventListener("blur", function(e){ - this.focus(); - }); - input.addEventListener("keydown", function(e){ - if(e.keyCode != 13) - return; - inner(); - e.preventDefault(); - e.stopPropagation(); - }); - } - - var graphcanvas = LGraphCanvas.active_canvas; - var canvas = graphcanvas.canvas; - - var rect = canvas.getBoundingClientRect(); - var offsetx = -20; - var offsety = -20; - if(rect) - { - offsetx -= rect.left; - offsety -= rect.top; - } - - if( event ) - { - dialog.style.left = (event.pageX + offsetx) + "px"; - dialog.style.top = (event.pageY + offsety)+ "px"; - } - else - { - dialog.style.left = (canvas.width * 0.5 + offsetx) + "px"; - dialog.style.top = (canvas.height * 0.5 + offsety) + "px"; - } - - var button = dialog.querySelector("button"); - button.addEventListener("click", inner ); - canvas.parentNode.appendChild( dialog ); - - function inner() - { - setValue( input.value ); - } - - function setValue(value) - { - node.title = value; - dialog.parentNode.removeChild( dialog ); - node.setDirtyCanvas(true,true); - } -} - -LGraphCanvas.prototype.prompt = function( title, value, callback, event ) -{ - var that = this; - var input_html = ""; - title = title || ""; - - var dialog = document.createElement("div"); - dialog.className = "graphdialog rounded"; - dialog.innerHTML = " "; - dialog.close = function() - { - that.prompt_box = null; - dialog.parentNode.removeChild( dialog ); - } - - dialog.addEventListener("mouseleave",function(e){ - dialog.close(); - }); - - if(that.prompt_box) - that.prompt_box.close(); - that.prompt_box = dialog; - - var first = null; - var timeout = null; - var selected = null; - - var name_element = dialog.querySelector(".name"); - name_element.innerText = title; - var value_element = dialog.querySelector(".value"); - value_element.value = value; - - var input = dialog.querySelector("input"); - input.addEventListener("keydown", function(e){ - if(e.keyCode == 27) //ESC - dialog.close(); - else if(e.keyCode == 13) - { - if( callback ) - callback( this.value ); - dialog.close(); - } - else - return; - e.preventDefault(); - e.stopPropagation(); - }); - - var button = dialog.querySelector("button"); - button.addEventListener("click", function(e){ - if( callback ) - callback( input.value ); - that.setDirty(true); - dialog.close(); - }); - - var graphcanvas = LGraphCanvas.active_canvas; - var canvas = graphcanvas.canvas; - - var rect = canvas.getBoundingClientRect(); - var offsetx = -20; - var offsety = -20; - if(rect) - { - offsetx -= rect.left; - offsety -= rect.top; - } - - if( event ) - { - dialog.style.left = (event.pageX + offsetx) + "px"; - dialog.style.top = (event.pageY + offsety)+ "px"; - } - else - { - dialog.style.left = (canvas.width * 0.5 + offsetx) + "px"; - dialog.style.top = (canvas.height * 0.5 + offsety) + "px"; - } - - canvas.parentNode.appendChild( dialog ); - setTimeout( function(){ input.focus(); },10 ); - - return dialog; -} - - -LGraphCanvas.search_filter = false; -LGraphCanvas.search_limit = -1; -LGraphCanvas.prototype.showSearchBox = function(event) -{ - var that = this; - var input_html = ""; - - var dialog = document.createElement("div"); - dialog.className = "litegraph litesearchbox graphdialog rounded"; - dialog.innerHTML = "Search
"; - dialog.close = function() - { - that.search_box = null; - dialog.parentNode.removeChild( dialog ); - } - - dialog.addEventListener("mouseleave",function(e){ - dialog.close(); - }); - - if(that.search_box) - that.search_box.close(); - that.search_box = dialog; - - var helper = dialog.querySelector(".helper"); - - var first = null; - var timeout = null; - var selected = null; - - var input = dialog.querySelector("input"); - if(input) - { - input.addEventListener("blur", function(e){ - this.focus(); - }); - input.addEventListener("keydown", function(e){ - - if(e.keyCode == 38) //UP - changeSelection(false); - else if(e.keyCode == 40) //DOWN - changeSelection(true); - else if(e.keyCode == 27) //ESC - dialog.close(); - else if(e.keyCode == 13) - { - if(selected) - select( selected.innerHTML ) - else if(first) - select(first); - else - dialog.close(); - } - else - { - if(timeout) - clearInterval(timeout); - timeout = setTimeout( refreshHelper, 10 ); - return; - } - e.preventDefault(); - e.stopPropagation(); - }); - } - - var graphcanvas = LGraphCanvas.active_canvas; - var canvas = graphcanvas.canvas; - - var rect = canvas.getBoundingClientRect(); - var offsetx = -20; - var offsety = -20; - if(rect) - { - offsetx -= rect.left; - offsety -= rect.top; - } - - if( event ) - { - dialog.style.left = (event.pageX + offsetx) + "px"; - dialog.style.top = (event.pageY + offsety)+ "px"; - } - else - { - dialog.style.left = (canvas.width * 0.5 + offsetx) + "px"; - dialog.style.top = (canvas.height * 0.5 + offsety) + "px"; - } - - canvas.parentNode.appendChild( dialog ); - input.focus(); - - function select( name ) - { - if(name) - { - if( that.onSearchBoxSelection ) - that.onSearchBoxSelection( name, event, graphcanvas ); - else - { - var node = LiteGraph.createNode( name ); - if(node) - { - node.pos = graphcanvas.convertEventToCanvas( event ); - graphcanvas.graph.add( node ); - } - } - } - - dialog.close(); - } - - function changeSelection( forward ) - { - var prev = selected; - if(selected) - selected.classList.remove("selected"); - if(!selected) - selected = forward ? helper.childNodes[0] : helper.childNodes[ helper.childNodes.length ]; - else - { - selected = forward ? selected.nextSibling : selected.previousSibling; - if(!selected) - selected = prev; - } - if(!selected) - return; - selected.classList.add("selected"); - selected.scrollIntoView(); - } - - function refreshHelper() { - timeout = null; - var str = input.value; - first = null; - helper.innerHTML = ""; - if (!str) - return; - - if (that.onSearchBox){ - that.onSearchBox(help, str, graphcanvas); - } else { - function addResult(result) { - var help = document.createElement("div"); - if (!first) first = result; - help.innerText = result; - help.className = "litegraph lite-search-item"; - help.addEventListener("click", function (e) { - select(this.innerText); - }); - helper.appendChild(help); - } - let c = 0; - if(LGraphCanvas.search_filter) { - str = str.toLowerCase(); - - var keys = Object.keys(LiteGraph.registered_node_types); - var filtered = keys.filter(function (item) { - return item.toLowerCase().indexOf(str) !== -1; - }); - for(var i = 0; i < filtered.length; i++) { - addResult(filtered[i]); - if(LGraphCanvas.search_limit !== -1 && c++ > LGraphCanvas.search_limit) break; - } - } else { - for (var i in LiteGraph.registered_node_types) { - if (i.indexOf(str) != -1) { - addResult(i); - if(LGraphCanvas.search_limit !== -1 && c++ > LGraphCanvas.search_limit) break; - } - } - } - } - } - - return dialog; -} - -LGraphCanvas.prototype.showEditPropertyValue = function( node, property, options ) -{ - if(!node || node.properties[ property ] === undefined ) - return; - - options = options || {}; - var that = this; - - var type = "string"; - - if(node.properties[ property ] !== null) - type = typeof(node.properties[ property ]); - - //for arrays - if(type == "object") - { - if( node.properties[ property ].length ) - type = "array"; - } - - var info = null; - if(node.getPropertyInfo) - info = node.getPropertyInfo(property); - if(node.properties_info) - { - for(var i = 0; i < node.properties_info.length; ++i) - { - if( node.properties_info[i].name == property ) - { - info = node.properties_info[i]; - break; - } - } - } - - if(info !== undefined && info !== null && info.type ) - type = info.type; - - var input_html = ""; - - if(type == "string" || type == "number" || type == "array") - input_html = ""; - else if(type == "enum" && info.values) - { - input_html = ""; - } - else if(type == "boolean") - { - input_html = ""; - } - else - { - console.warn("unknown type: " + type ); - return; - } - - var dialog = this.createDialog( "" + property + ""+input_html+"" , options ); - - if(type == "enum" && info.values) - { - var input = dialog.querySelector("select"); - input.addEventListener("change", function(e){ - setValue( e.target.value ); - //var index = e.target.value; - //setValue( e.options[e.selectedIndex].value ); - }); - } - else if(type == "boolean") - { - var input = dialog.querySelector("input"); - if(input) - { - input.addEventListener("click", function(e){ - setValue( !!input.checked ); - }); - } - } - else - { - var input = dialog.querySelector("input"); - if(input) - { - input.addEventListener("blur", function(e){ - this.focus(); - }); - input.value = node.properties[ property ] !== undefined ? node.properties[ property ] : ""; - input.addEventListener("keydown", function(e){ - if(e.keyCode != 13) - return; - inner(); - e.preventDefault(); - e.stopPropagation(); - }); - } - } - - var button = dialog.querySelector("button"); - button.addEventListener("click", inner ); - - function inner() - { - setValue( input.value ); - } - - function setValue(value) - { - if(typeof( node.properties[ property ] ) == "number") - value = Number(value); - if(type == "array") - value = value.split(",").map(Number); - node.properties[ property ] = value; - if(node._graph) - node._graph._version++; - if(node.onPropertyChanged) - node.onPropertyChanged( property, value ); - dialog.close(); - node.setDirtyCanvas(true,true); - } -} - -LGraphCanvas.prototype.createDialog = function( html, options ) -{ - options = options || {}; - - var dialog = document.createElement("div"); - dialog.className = "graphdialog"; - dialog.innerHTML = html; - - var rect = this.canvas.getBoundingClientRect(); - var offsetx = -20; - var offsety = -20; - if(rect) - { - offsetx -= rect.left; - offsety -= rect.top; - } - - if( options.position ) - { - offsetx += options.position[0]; - offsety += options.position[1]; - } - else if( options.event ) - { - offsetx += options.event.pageX; - offsety += options.event.pageY; - } - else //centered - { - offsetx += this.canvas.width * 0.5; - offsety += this.canvas.height * 0.5; - } - - dialog.style.left = offsetx + "px"; - dialog.style.top = offsety + "px"; - - this.canvas.parentNode.appendChild( dialog ); - - dialog.close = function() - { - if(this.parentNode) - this.parentNode.removeChild( this ); - } - - return dialog; -} - -LGraphCanvas.onMenuNodeCollapse = function( value, options, e, menu, node ) -{ - node.collapse(); -} - -LGraphCanvas.onMenuNodePin = function( value, options, e, menu, node ) -{ - node.pin(); -} - -LGraphCanvas.onMenuNodeMode = function( value, options, e, menu, node ) -{ - new LiteGraph.ContextMenu(["Always","On Event","On Trigger","Never"], {event: e, callback: inner_clicked, parentMenu: menu, node: node }); - - function inner_clicked(v) - { - if(!node) - return; - switch(v) - { - case "On Event": node.mode = LiteGraph.ON_EVENT; break; - case "On Trigger": node.mode = LiteGraph.ON_TRIGGER; break; - case "Never": node.mode = LiteGraph.NEVER; break; - case "Always": - default: - node.mode = LiteGraph.ALWAYS; break; - } - } - - return false; -} - -LGraphCanvas.onMenuNodeColors = function( value, options, e, menu, node ) -{ - if(!node) - throw("no node for color"); - - var values = []; - values.push({ value:null, content:"No color" }); - - for(var i in LGraphCanvas.node_colors) - { - var color = LGraphCanvas.node_colors[i]; - var value = { value:i, content:""+i+"" }; - values.push(value); - } - new LiteGraph.ContextMenu( values, { event: e, callback: inner_clicked, parentMenu: menu, node: node }); - - function inner_clicked(v) - { - if(!node) - return; - - var color = v.value ? LGraphCanvas.node_colors[ v.value ] : null; - if(color) - { - if(node.constructor === LiteGraph.LGraphGroup) - node.color = color.groupcolor; - else - { - node.color = color.color; - node.bgcolor = color.bgcolor; - } - } - else - { - delete node.color; - delete node.bgcolor; - } - node.setDirtyCanvas(true,true); - } - - return false; -} - -LGraphCanvas.onMenuNodeShapes = function( value, options, e, menu, node ) -{ - if(!node) - throw("no node passed"); - - new LiteGraph.ContextMenu( LiteGraph.VALID_SHAPES, { event: e, callback: inner_clicked, parentMenu: menu, node: node }); - - function inner_clicked(v) - { - if(!node) - return; - node.shape = v; - node.setDirtyCanvas(true); - } - - return false; -} - -LGraphCanvas.onMenuNodeRemove = function( value, options, e, menu, node ) -{ - if(!node) - throw("no node passed"); - - if(node.removable === false) - return; - - node.graph.remove(node); - node.setDirtyCanvas(true,true); -} - -LGraphCanvas.onMenuNodeClone = function( value, options, e, menu, node ) -{ - if(node.clonable == false) return; - var newnode = node.clone(); - if(!newnode) - return; - newnode.pos = [node.pos[0]+5,node.pos[1]+5]; - node.graph.add(newnode); - node.setDirtyCanvas(true,true); -} - -LGraphCanvas.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" } -}; - -LGraphCanvas.prototype.getCanvasMenuOptions = function() -{ - var options = null; - if(this.getMenuOptions) - options = this.getMenuOptions(); - else - { - options = [ - { content:"Add Node", has_submenu: true, callback: LGraphCanvas.onMenuAdd }, - { content:"Add Group", callback: LGraphCanvas.onGroupAdd } - //{content:"Collapse All", callback: LGraphCanvas.onMenuCollapseAll } - ]; - - if(this._graph_stack && this._graph_stack.length > 0) - options.push(null,{content:"Close subgraph", callback: this.closeSubgraph.bind(this) }); - } - - if(this.getExtraMenuOptions) - { - var extra = this.getExtraMenuOptions(this,options); - if(extra) - options = options.concat( extra ); - } - - return options; -} - -//called by processContextMenu to extract the menu list -LGraphCanvas.prototype.getNodeMenuOptions = function( node ) -{ - var options = null; - - if(node.getMenuOptions) - options = node.getMenuOptions(this); - else - options = [ - {content:"Inputs", has_submenu: true, disabled:true, callback: LGraphCanvas.showMenuNodeOptionalInputs }, - {content:"Outputs", has_submenu: true, disabled:true, callback: LGraphCanvas.showMenuNodeOptionalOutputs }, - null, - {content:"Properties", has_submenu: true, callback: LGraphCanvas.onShowMenuNodeProperties }, - null, - {content:"Title", callback: LGraphCanvas.onShowTitleEditor }, - {content:"Mode", has_submenu: true, callback: LGraphCanvas.onMenuNodeMode }, - {content:"Resize", callback: LGraphCanvas.onResizeNode }, - {content:"Collapse", callback: LGraphCanvas.onMenuNodeCollapse }, - {content:"Pin", callback: LGraphCanvas.onMenuNodePin }, - {content:"Colors", has_submenu: true, callback: LGraphCanvas.onMenuNodeColors }, - {content:"Shapes", has_submenu: true, callback: LGraphCanvas.onMenuNodeShapes }, - null - ]; - - if(node.getExtraMenuOptions) - { - var extra = node.getExtraMenuOptions(this); - if(extra) - { - extra.push(null); - options = extra.concat( options ); - } - } - - if( node.clonable !== false ) - options.push({content:"Clone", callback: LGraphCanvas.onMenuNodeClone }); - if( node.removable !== false ) - options.push(null,{content:"Remove", callback: LGraphCanvas.onMenuNodeRemove }); - - if(node.onGetInputs) - { - var inputs = node.onGetInputs(); - if(inputs && inputs.length) - options[0].disabled = false; - } - - if(node.onGetOutputs) - { - var outputs = node.onGetOutputs(); - if(outputs && outputs.length ) - options[1].disabled = false; - } - - if(node.graph && node.graph.onGetNodeMenuOptions ) - node.graph.onGetNodeMenuOptions( options, node ); - - return options; -} - -LGraphCanvas.prototype.getGroupMenuOptions = function( node ) -{ - var o = [ - {content:"Title", callback: LGraphCanvas.onShowTitleEditor }, - {content:"Color", has_submenu: true, callback: LGraphCanvas.onMenuNodeColors }, - null, - {content:"Remove", callback: LGraphCanvas.onMenuNodeRemove } - ]; - - return o; -} - -LGraphCanvas.prototype.processContextMenu = function( node, event ) -{ - var that = this; - var canvas = LGraphCanvas.active_canvas; - var ref_window = canvas.getCanvasWindow(); - - var menu_info = null; - var options = { event: event, callback: inner_option_clicked, extra: node }; - - //check if mouse is in input - var slot = null; - if(node) - { - slot = node.getSlotInPosition( event.canvasX, event.canvasY ); - LGraphCanvas.active_node = node; - } - - if(slot) //on slot - { - menu_info = []; - if(slot && slot.output && slot.output.links && slot.output.links.length) - menu_info.push( { content: "Disconnect Links", slot: slot } ); - menu_info.push( slot.locked ? "Cannot remove" : { content: "Remove Slot", slot: slot } ); - menu_info.push( slot.nameLocked ? "Cannot rename" : { content: "Rename Slot", slot: slot } ); - options.title = (slot.input ? slot.input.type : slot.output.type) || "*"; - if(slot.input && slot.input.type == LiteGraph.ACTION) - options.title = "Action"; - if(slot.output && slot.output.type == LiteGraph.EVENT) - options.title = "Event"; - } - else - { - if( node ) //on node - menu_info = this.getNodeMenuOptions(node); - else - { - menu_info = this.getCanvasMenuOptions(); - var group = this.graph.getGroupOnPos( event.canvasX, event.canvasY ); - if( group ) //on group - menu_info.push(null,{content:"Edit Group", has_submenu: true, submenu: { title:"Group", extra: group, options: this.getGroupMenuOptions( group ) }}); - } - } - - //show menu - if(!menu_info) - return; - - var menu = new LiteGraph.ContextMenu( menu_info, options, ref_window ); - - function inner_option_clicked( v, options, e ) - { - if(!v) - return; - - if(v.content == "Remove Slot") - { - var info = v.slot; - if(info.input) - node.removeInput( info.slot ); - else if(info.output) - node.removeOutput( info.slot ); - return; - } - else if(v.content == "Disconnect Links") - { - var info = v.slot; - if(info.output) - node.disconnectOutput( info.slot ); - else if(info.input) - node.disconnectInput( info.slot ); - return; - } - else if( v.content == "Rename Slot") - { - var info = v.slot; - var slot_info = info.input ? node.getInputInfo( info.slot ) : node.getOutputInfo( info.slot ); - var dialog = that.createDialog( "Name" , options ); - var input = dialog.querySelector("input"); - if(input && slot_info){ - input.value = slot_info.label; - } - dialog.querySelector("button").addEventListener("click",function(e){ - if(input.value) - { - if( slot_info ) - slot_info.label = input.value; - that.setDirty(true); - } - dialog.close(); - }); - } - - //if(v.callback) - // return v.callback.call(that, node, options, e, menu, that, event ); - } -} - - - - - - -//API ************************************************* -//like rect but rounded corners -if(this.CanvasRenderingContext2D) -CanvasRenderingContext2D.prototype.roundRect = function (x, y, width, height, radius, radius_low) { - if ( radius === undefined ) { - radius = 5; - } - - if(radius_low === undefined) - radius_low = radius; - - this.moveTo(x + radius, y); - this.lineTo(x + width - radius, y); - this.quadraticCurveTo(x + width, y, x + width, y + radius); - - this.lineTo(x + width, y + height - radius_low); - this.quadraticCurveTo(x + width, y + height, x + width - radius_low, y + height); - this.lineTo(x + radius_low, y + height); - this.quadraticCurveTo(x, y + height, x, y + height - radius_low); - this.lineTo(x, y + radius); - this.quadraticCurveTo(x, y, x + radius, y); -} - -function compareObjects(a,b) -{ - for(var i in a) - if(a[i] != b[i]) - return false; - return true; -} -LiteGraph.compareObjects = compareObjects; - -function distance(a,b) -{ - return Math.sqrt( (b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]) ); -} -LiteGraph.distance = distance; - -function colorToString(c) -{ - return "rgba(" + Math.round(c[0] * 255).toFixed() + "," + Math.round(c[1] * 255).toFixed() + "," + Math.round(c[2] * 255).toFixed() + "," + (c.length == 4 ? c[3].toFixed(2) : "1.0") + ")"; -} -LiteGraph.colorToString = colorToString; - -function isInsideRectangle( x,y, left, top, width, height) -{ - if (left < x && (left + width) > x && - top < y && (top + height) > y) - return true; - return false; -} -LiteGraph.isInsideRectangle = isInsideRectangle; - -//[minx,miny,maxx,maxy] -function growBounding( bounding, x,y) -{ - if(x < bounding[0]) - bounding[0] = x; - else if(x > bounding[2]) - bounding[2] = x; - - if(y < bounding[1]) - bounding[1] = y; - else if(y > bounding[3]) - bounding[3] = y; -} -LiteGraph.growBounding = growBounding; - -//point inside boundin box -function isInsideBounding(p,bb) -{ - if (p[0] < bb[0][0] || - p[1] < bb[0][1] || - p[0] > bb[1][0] || - p[1] > bb[1][1]) - return false; - return true; -} -LiteGraph.isInsideBounding = isInsideBounding; - -//boundings overlap, format: [ startx, starty, width, height ] -function overlapBounding(a,b) -{ - var A_end_x = a[0] + a[2]; - var A_end_y = a[1] + a[3]; - var B_end_x = b[0] + b[2]; - var B_end_y = b[1] + b[3]; - - if ( a[0] > B_end_x || - a[1] > B_end_y || - A_end_x < b[0] || - A_end_y < b[1]) - return false; - return true; -} -LiteGraph.overlapBounding = overlapBounding; - -//Convert a hex value to its decimal value - the inputted hex must be in the -// format of a hex triplet - the kind we use for HTML colours. The function -// will return an array with three values. -function hex2num(hex) { - if(hex.charAt(0) == "#") hex = hex.slice(1); //Remove the '#' char - if there is one. - hex = hex.toUpperCase(); - var hex_alphabets = "0123456789ABCDEF"; - var value = new Array(3); - var k = 0; - var int1,int2; - for(var i=0;i<6;i+=2) { - int1 = hex_alphabets.indexOf(hex.charAt(i)); - int2 = hex_alphabets.indexOf(hex.charAt(i+1)); - value[k] = (int1 * 16) + int2; - k++; - } - return(value); -} - -LiteGraph.hex2num = hex2num; - -//Give a array with three values as the argument and the function will return -// the corresponding hex triplet. -function num2hex(triplet) { - var hex_alphabets = "0123456789ABCDEF"; - var hex = "#"; - var int1,int2; - for(var i=0;i<3;i++) { - int1 = triplet[i] / 16; - int2 = triplet[i] % 16; - - hex += hex_alphabets.charAt(int1) + hex_alphabets.charAt(int2); - } - return(hex); -} - -LiteGraph.num2hex = num2hex; - -/* LiteGraph GUI elements used for canvas editing *************************************/ - -/** -* ContextMenu from LiteGUI -* -* @class ContextMenu -* @constructor -* @param {Array} values (allows object { title: "Nice text", callback: function ... }) -* @param {Object} options [optional] Some options:\ -* - title: title to show on top of the menu -* - callback: function to call when an option is clicked, it receives the item information -* - ignore_item_callbacks: ignores the callback inside the item, it just calls the options.callback -* - event: you can pass a MouseEvent, this way the ContextMenu appears in that position -*/ -function ContextMenu( values, options ) -{ - options = options || {}; - this.options = options; - var that = this; - - //to link a menu with its parent - if(options.parentMenu) - { - if( options.parentMenu.constructor !== this.constructor ) - { - console.error("parentMenu must be of class ContextMenu, ignoring it"); - options.parentMenu = null; - } - else - { - this.parentMenu = options.parentMenu; - this.parentMenu.lock = true; - this.parentMenu.current_submenu = this; - } - } - - if(options.event && options.event.constructor !== MouseEvent && options.event.constructor !== CustomEvent) - { - console.error("Event passed to ContextMenu is not of type MouseEvent or CustomEvent. Ignoring it."); - options.event = null; - } - - var root = document.createElement("div"); - root.className = "litegraph litecontextmenu litemenubar-panel"; - root.style.minWidth = 100; - root.style.minHeight = 100; - root.style.pointerEvents = "none"; - setTimeout( function() { root.style.pointerEvents = "auto"; },100); //delay so the mouse up event is not caugh by this element - - //this prevents the default context browser menu to open in case this menu was created when pressing right button - root.addEventListener("mouseup", function(e){ - e.preventDefault(); return true; - }, true); - root.addEventListener("contextmenu", function(e) { - if(e.button != 2) //right button - return false; - e.preventDefault(); - return false; - },true); - - root.addEventListener("mousedown", function(e){ - if(e.button == 2) - { - that.close(); - e.preventDefault(); return true; - } - }, true); - - function on_mouse_wheel(e) - { - var pos = parseInt( root.style.top ); - root.style.top = (pos + e.deltaY * 0.1).toFixed() + "px"; - e.preventDefault(); - return true; - } - - root.addEventListener("wheel", on_mouse_wheel, true); - root.addEventListener("mousewheel", on_mouse_wheel, true); - - - this.root = root; - - //title - if(options.title) - { - var element = document.createElement("div"); - element.className = "litemenu-title"; - element.innerHTML = options.title; - root.appendChild(element); - } - - //entries - var num = 0; - for(var i in values) - { - var name = values.constructor == Array ? values[i] : i; - if( name != null && name.constructor !== String ) - name = name.content === undefined ? String(name) : name.content; - var value = values[i]; - this.addItem( name, value, options ); - num++; - } - - //close on leave - root.addEventListener("mouseleave", function(e) { - if(that.lock) - return; - that.close(e); - }); - - //insert before checking position - var root_document = document; - if(options.event) - root_document = options.event.target.ownerDocument; - - if(!root_document) - root_document = document; - root_document.body.appendChild(root); - - //compute best position - var left = options.left || 0; - var top = options.top || 0; - if(options.event) - { - left = (options.event.pageX - 10); - top = (options.event.pageY - 10); - if(options.title) - top -= 20; - - if(options.parentMenu) - { - var rect = options.parentMenu.root.getBoundingClientRect(); - left = rect.left + rect.width; - } - - var body_rect = document.body.getBoundingClientRect(); - var root_rect = root.getBoundingClientRect(); - - if(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)) - top = (body_rect.height - root_rect.height - 10); - } - - root.style.left = left + "px"; - root.style.top = top + "px"; -} - -ContextMenu.prototype.addItem = function( name, value, options ) -{ - var that = this; - options = options || {}; - - var element = document.createElement("div"); - element.className = "litemenu-entry submenu"; - - var disabled = false; - - if(value === null) - { - element.classList.add("separator"); - //element.innerHTML = "
" - //continue; - } - else - { - element.innerHTML = value && value.title ? value.title : name; - element.value = value; - - if(value) - { - if(value.disabled) - { - disabled = true; - element.classList.add("disabled"); - } - if(value.submenu || value.has_submenu) - element.classList.add("has_submenu"); - } - - if(typeof(value) == "function") - { - element.dataset["value"] = name; - element.onclick_callback = value; - } - else - element.dataset["value"] = value; - - if(value.className) - element.className += " " + value.className; - } - - this.root.appendChild(element); - if(!disabled) - element.addEventListener("click", inner_onclick); - if(options.autoopen) - element.addEventListener("mouseenter", inner_over); - - function inner_over(e) - { - var value = this.value; - if(!value || !value.has_submenu) - return; - inner_onclick.call(this,e); - } - - //menu option clicked - function inner_onclick(e) { - var value = this.value; - var close_parent = true; - - if(that.current_submenu) - that.current_submenu.close(e); - - //global callback - if(options.callback) - { - var r = options.callback.call( this, value, options, e, that, options.node ); - if(r === true) - close_parent = false; - } - - //special cases - if(value) - { - if (value.callback && !options.ignore_item_callbacks && value.disabled !== true ) //item callback - { - var r = value.callback.call( this, value, options, e, that, options.extra ); - if(r === true) - close_parent = false; - } - if(value.submenu) - { - if(!value.submenu.options) - throw("ContextMenu submenu needs options"); - var submenu = new that.constructor( value.submenu.options, { - callback: value.submenu.callback, - event: e, - parentMenu: that, - ignore_item_callbacks: value.submenu.ignore_item_callbacks, - title: value.submenu.title, - extra: value.submenu.extra, - autoopen: options.autoopen - }); - close_parent = false; - } - } - - if(close_parent && !that.lock) - that.close(); - } - - return element; -} - -ContextMenu.prototype.close = function(e, ignore_parent_menu) -{ - if(this.root.parentNode) - this.root.parentNode.removeChild( this.root ); - if(this.parentMenu && !ignore_parent_menu) - { - this.parentMenu.lock = false; - this.parentMenu.current_submenu = null; - if( e === undefined ) - this.parentMenu.close(); - else if( e && !ContextMenu.isCursorOverElement( e, this.parentMenu.root) ) - { - ContextMenu.trigger( this.parentMenu.root, "mouseleave", e ); - } - } - if(this.current_submenu) - this.current_submenu.close(e, true); -} - -//this code is used to trigger events easily (used in the context menu mouseleave -ContextMenu.trigger = function( element, event_name, params, origin ) -{ - var evt = document.createEvent( 'CustomEvent' ); - evt.initCustomEvent( event_name, true,true, params ); //canBubble, cancelable, detail - evt.srcElement = origin; - if( element.dispatchEvent ) - element.dispatchEvent( evt ); - else if( element.__events ) - element.__events.dispatchEvent( evt ); - //else nothing seems binded here so nothing to do - return evt; -} - -//returns the top most menu -ContextMenu.prototype.getTopMenu = function() -{ - if( this.options.parentMenu ) - return this.options.parentMenu.getTopMenu(); - return this; -} - -ContextMenu.prototype.getFirstEvent = function() -{ - if( this.options.parentMenu ) - return this.options.parentMenu.getFirstEvent(); - return this.options.event; -} - - - -ContextMenu.isCursorOverElement = function( event, element ) -{ - var left = event.pageX; - var top = event.pageY; - var rect = element.getBoundingClientRect(); - if(!rect) - return false; - if(top > rect.top && top < (rect.top + rect.height) && - left > rect.left && left < (rect.left + rect.width) ) - return true; - return false; -} - - - -LiteGraph.ContextMenu = ContextMenu; - -LiteGraph.closeAllContextMenus = function( ref_window ) -{ - ref_window = ref_window || window; - - var elements = ref_window.document.querySelectorAll(".litecontextmenu"); - if(!elements.length) - return; - - var result = []; - for(var i = 0; i < elements.length; i++) - result.push(elements[i]); - - for(var i in result) - { - if(result[i].close) - result[i].close(); - else if(result[i].parentNode) - result[i].parentNode.removeChild( result[i] ); - } -} - -LiteGraph.extendClass = function ( target, origin ) -{ - for(var i in origin) //copy class properties - { - if(target.hasOwnProperty(i)) - continue; - target[i] = origin[i]; - } - - if(origin.prototype) //copy prototype properties - for(var i in origin.prototype) //only enumerables - { - if(!origin.prototype.hasOwnProperty(i)) - continue; - - if(target.prototype.hasOwnProperty(i)) //avoid overwritting existing ones - continue; - - //copy getters - if(origin.prototype.__lookupGetter__(i)) - target.prototype.__defineGetter__(i, origin.prototype.__lookupGetter__(i)); - else - target.prototype[i] = origin.prototype[i]; - - //and setters - if(origin.prototype.__lookupSetter__(i)) - target.prototype.__defineSetter__(i, origin.prototype.__lookupSetter__(i)); - } -} - -//used to create nodes from wrapping functions -LiteGraph.getParameterNames = function(func) { - return (func + '') - .replace(/[/][/].*$/mg,'') // strip single-line comments - .replace(/\s+/g, '') // strip white space - .replace(/[/][*][^/*]*[*][/]/g, '') // strip multi-line comments /**/ - .split('){', 1)[0].replace(/^[^(]*[(]/, '') // extract the parameters - .replace(/=[^,]+/g, '') // strip any ES6 defaults - .split(',').filter(Boolean); // split & filter [""] -} - -Math.clamp = function(v,a,b) { return (a > v ? a : (b < v ? b : v)); } - -if( typeof(window) != "undefined" && !window["requestAnimationFrame"] ) -{ - window.requestAnimationFrame = window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - (function( callback ){ - window.setTimeout(callback, 1000 / 60); - }); -} - -})(this); - -if(typeof(exports) != "undefined") - exports.LiteGraph = this.LiteGraph; - -//basic nodes -(function(global){ -var LiteGraph = global.LiteGraph; - -//Constant -function Time() -{ - this.addOutput("in ms","number"); - this.addOutput("in sec","number"); -} - -Time.title = "Time"; -Time.desc = "Time"; - -Time.prototype.onExecute = function() -{ - this.setOutputData(0, this.graph.globaltime * 1000 ); - this.setOutputData(1, this.graph.globaltime ); -} - -LiteGraph.registerNodeType("basic/time", Time); - - -//Subgraph: a node that contains a graph -function Subgraph() -{ - var that = this; - this.size = [120,80]; - - //create inner graph - this.subgraph = new LGraph(); - this.subgraph._subgraph_node = this; - this.subgraph._is_subgraph = true; - - this.subgraph.onGlobalInputAdded = this.onSubgraphNewGlobalInput.bind(this); - this.subgraph.onGlobalInputRenamed = this.onSubgraphRenamedGlobalInput.bind(this); - this.subgraph.onGlobalInputTypeChanged = this.onSubgraphTypeChangeGlobalInput.bind(this); - - this.subgraph.onGlobalOutputAdded = this.onSubgraphNewGlobalOutput.bind(this); - this.subgraph.onGlobalOutputRenamed = this.onSubgraphRenamedGlobalOutput.bind(this); - this.subgraph.onGlobalOutputTypeChanged = this.onSubgraphTypeChangeGlobalOutput.bind(this); - - this.color = "#335"; - this.bgcolor = "#557"; -} - -Subgraph.title = "Subgraph"; -Subgraph.desc = "Graph inside a node"; - -Subgraph.prototype.onDrawTitle = function(ctx) -{ - if(this.flags.collapsed) - return; - - ctx.fillStyle = "#AAA"; - var w = LiteGraph.NODE_TITLE_HEIGHT; - var x = this.size[0] - w; - ctx.fillRect( x, -w, w,w ); - ctx.fillStyle = "#333"; - ctx.beginPath(); - ctx.moveTo( x+w*0.2, -w*0.6 ); - ctx.lineTo( x+w*0.8, -w*0.6 ); - ctx.lineTo( x+w*0.5, -w*0.3 ); - ctx.fill(); -} - -Subgraph.prototype.onMouseDown = function(e,pos,graphcanvas) -{ - if( !this.flags.collapsed && pos[0] > this.size[0] - LiteGraph.NODE_TITLE_HEIGHT && pos[1] < 0 ) - { - var that = this; - setTimeout(function(){ graphcanvas.openSubgraph( that.subgraph ); },10 ); - } -} - -Subgraph.prototype.onSubgraphNewGlobalInput = function(name, type) -{ - //add input to the node - this.addInput(name, type); -} - -Subgraph.prototype.onSubgraphRenamedGlobalInput = function(oldname, name) -{ - var slot = this.findInputSlot( oldname ); - if(slot == -1) - return; - var info = this.getInputInfo(slot); - info.name = name; -} - -Subgraph.prototype.onSubgraphTypeChangeGlobalInput = function(name, type) -{ - var slot = this.findInputSlot( name ); - if(slot == -1) - return; - var info = this.getInputInfo(slot); - info.type = type; -} - - -Subgraph.prototype.onSubgraphNewGlobalOutput = function(name, type) -{ - //add output to the node - this.addOutput(name, type); -} - - -Subgraph.prototype.onSubgraphRenamedGlobalOutput = function(oldname, name) -{ - var slot = this.findOutputSlot( oldname ); - if(slot == -1) - return; - var info = this.getOutputInfo(slot); - info.name = name; -} - -Subgraph.prototype.onSubgraphTypeChangeGlobalOutput = function(name, type) -{ - var slot = this.findOutputSlot( name ); - if(slot == -1) - return; - var info = this.getOutputInfo(slot); - info.type = type; -} - - -Subgraph.prototype.getExtraMenuOptions = function(graphcanvas) -{ - var that = this; - return [ {content:"Open", callback: - function() { - graphcanvas.openSubgraph( that.subgraph ); - } - }]; -} - -Subgraph.prototype.onResize = function(size) -{ - size[1] += 20; -} - -Subgraph.prototype.onExecute = function() -{ - //send inputs to subgraph global inputs - if(this.inputs) - for(var i = 0; i < this.inputs.length; i++) - { - var input = this.inputs[i]; - var value = this.getInputData(i); - this.subgraph.setGlobalInputData( input.name, value ); - } - - //execute - this.subgraph.runStep(); - - //send subgraph global outputs to outputs - if(this.outputs) - for(var i = 0; i < this.outputs.length; i++) - { - var output = this.outputs[i]; - var value = this.subgraph.getGlobalOutputData( output.name ); - this.setOutputData(i, value); - } -} - -Subgraph.prototype.configure = function(o) -{ - LGraphNode.prototype.configure.call(this, o); - //this.subgraph.configure(o.graph); -} - -Subgraph.prototype.serialize = function() -{ - var data = LGraphNode.prototype.serialize.call(this); - data.subgraph = this.subgraph.serialize(); - return data; -} - -Subgraph.prototype.clone = function() -{ - var node = LiteGraph.createNode(this.type); - var data = this.serialize(); - delete data["id"]; - delete data["inputs"]; - delete data["outputs"]; - node.configure(data); - return node; -} - - -LiteGraph.registerNodeType("graph/subgraph", Subgraph ); - - -//Input for a subgraph -function GlobalInput() -{ - - //random name to avoid problems with other outputs when added - var input_name = "input_" + (Math.random()*1000).toFixed(); - - this.addOutput(input_name, null ); - - this.properties = { name: input_name, type: null }; - - var that = this; - - Object.defineProperty( this.properties, "name", { - get: function() { - return input_name; - }, - set: function(v) { - if(v == "") - return; - - var info = that.getOutputInfo(0); - if(info.name == v) - return; - info.name = v; - if(that.graph) - that.graph.renameGlobalInput(input_name, v); - input_name = v; - }, - enumerable: true - }); - - Object.defineProperty( this.properties, "type", { - get: function() { return that.outputs[0].type; }, - set: function(v) { - that.outputs[0].type = v; - if(that.graph) - that.graph.changeGlobalInputType(input_name, that.outputs[0].type); - }, - enumerable: true - }); -} - -GlobalInput.title = "Input"; -GlobalInput.desc = "Input of the graph"; - -//When added to graph tell the graph this is a new global input -GlobalInput.prototype.onAdded = function() -{ - this.graph.addGlobalInput( this.properties.name, this.properties.type ); -} - -GlobalInput.prototype.onExecute = function() -{ - var name = this.properties.name; - - //read from global input - var data = this.graph.global_inputs[name]; - if(!data) return; - - //put through output - this.setOutputData(0,data.value); -} - -LiteGraph.registerNodeType("graph/input", GlobalInput); - - - -//Output for a subgraph -function GlobalOutput() -{ - //random name to avoid problems with other outputs when added - var output_name = "output_" + (Math.random()*1000).toFixed(); - - this.addInput(output_name, null); - - this._value = null; - - this.properties = {name: output_name, type: null }; - - var that = this; - - Object.defineProperty(this.properties, "name", { - get: function() { - return output_name; - }, - set: function(v) { - if(v == "") - return; - - var info = that.getInputInfo(0); - if(info.name == v) - return; - info.name = v; - if(that.graph) - that.graph.renameGlobalOutput(output_name, v); - output_name = v; - }, - enumerable: true - }); - - Object.defineProperty(this.properties, "type", { - get: function() { return that.inputs[0].type; }, - set: function(v) { - that.inputs[0].type = v; - if(that.graph) - that.graph.changeGlobalInputType( output_name, that.inputs[0].type ); - }, - enumerable: true - }); -} - -GlobalOutput.title = "Output"; -GlobalOutput.desc = "Output of the graph"; - -GlobalOutput.prototype.onAdded = function() -{ - var name = this.graph.addGlobalOutput( this.properties.name, this.properties.type ); -} - -GlobalOutput.prototype.getValue = function() -{ - return this._value; -} - -GlobalOutput.prototype.onExecute = function() -{ - this._value = this.getInputData(0); - this.graph.setGlobalOutputData( this.properties.name, this._value ); -} - -LiteGraph.registerNodeType("graph/output", GlobalOutput); - - - -//Constant -function Constant() -{ - this.addOutput("value","number"); - this.addProperty( "value", 1.0 ); - this.editable = { property:"value", type:"number" }; -} - -Constant.title = "Const"; -Constant.desc = "Constant value"; - - -Constant.prototype.setValue = function(v) -{ - if( typeof(v) == "string") v = parseFloat(v); - this.properties["value"] = v; - this.setDirtyCanvas(true); -}; - -Constant.prototype.onExecute = function() -{ - this.setOutputData(0, parseFloat( this.properties["value"] ) ); -} - -Constant.prototype.onDrawBackground = function(ctx) -{ - //show the current value - this.outputs[0].label = this.properties["value"].toFixed(3); -} - -LiteGraph.registerNodeType("basic/const", Constant); - - -//Watch a value in the editor -function Watch() -{ - this.size = [60,20]; - this.addInput("value",0,{label:""}); - this.value = 0; -} - -Watch.title = "Watch"; -Watch.desc = "Show value of input"; - -Watch.prototype.onExecute = function() -{ - if( this.inputs[0] ) - this.value = this.getInputData(0); -} - -Watch.toString = function( o ) -{ - if( o == null ) - return "null"; - else if (o.constructor === Number ) - return o.toFixed(3); - else if (o.constructor === Array ) - { - var str = "["; - for(var i = 0; i < o.length; ++i) - str += Watch.toString(o[i]) + ((i+1) != o.length ? "," : ""); - str += "]"; - return str; - } - else - return String(o); -} - -Watch.prototype.onDrawBackground = function(ctx) -{ - //show the current value - this.inputs[0].label = Watch.toString(this.value); -} - -LiteGraph.registerNodeType("basic/watch", Watch); - -//Watch a value in the editor -function Pass() -{ - this.addInput("in",0); - this.addOutput("out",0); - this.size = [40,20]; -} - -Pass.title = "Pass"; -Pass.desc = "Allows to connect different types"; - -Pass.prototype.onExecute = function() -{ - this.setOutputData( 0, this.getInputData(0) ); -} - -LiteGraph.registerNodeType("basic/pass", Pass); - - -//Show value inside the debug console -function Console() -{ - this.mode = LiteGraph.ON_EVENT; - this.size = [60,20]; - this.addProperty( "msg", "" ); - this.addInput("log", LiteGraph.EVENT); - this.addInput("msg",0); -} - -Console.title = "Console"; -Console.desc = "Show value inside the console"; - -Console.prototype.onAction = function(action, param) -{ - if(action == "log") - console.log( param ); - else if(action == "warn") - console.warn( param ); - else if(action == "error") - console.error( param ); -} - -Console.prototype.onExecute = function() -{ - var msg = this.getInputData(1); - if(msg !== null) - this.properties.msg = msg; - console.log(msg); -} - -Console.prototype.onGetInputs = function() -{ - return [["log",LiteGraph.ACTION],["warn",LiteGraph.ACTION],["error",LiteGraph.ACTION]]; -} - -LiteGraph.registerNodeType("basic/console", Console ); - - - -//Show value inside the debug console -function NodeScript() -{ - this.size = [60,20]; - this.addProperty( "onExecute", "" ); - this.addInput("in", ""); - this.addInput("in2", ""); - this.addOutput("out", ""); - this.addOutput("out2", ""); - - this._func = null; -} - -NodeScript.title = "Script"; -NodeScript.desc = "executes a code"; - -NodeScript.widgets_info = { - "onExecute": { type:"code" } -}; - -NodeScript.prototype.onPropertyChanged = function(name,value) -{ - if(name == "onExecute" && LiteGraph.allow_scripts ) - { - this._func = null; - try - { - this._func = new Function( value ); - } - catch (err) - { - console.error("Error parsing script"); - console.error(err); - } - } -} - -NodeScript.prototype.onExecute = function() -{ - if(!this._func) - return; - - try - { - this._func.call(this); - } - catch (err) - { - console.error("Error in script"); - console.error(err); - } -} - -LiteGraph.registerNodeType("basic/script", NodeScript ); - - -})(this); +(function(global){ +// ************************************************************* +// LiteGraph CLASS ******* +// ************************************************************* + +/* FYI: links are stored in graph.links with this structure per object +{ + id: number + type: string, + origin_id: number, + origin_slot: number, + target_id: number, + target_slot: number, + data: * +}; +*/ + +/** +* The Global Scope. It contains all the registered node classes. +* +* @class LiteGraph +* @constructor +*/ + +var LiteGraph = global.LiteGraph = { + + CANVAS_GRID_SIZE: 10, + + NODE_TITLE_HEIGHT: 20, + NODE_SLOT_HEIGHT: 15, + 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: "#444", + NODE_DEFAULT_BOXCOLOR: "#666", + NODE_DEFAULT_SHAPE: "box", + DEFAULT_SHADOW_COLOR: "rgba(0,0,0,0.5)", + + LINK_COLOR: "#AAD", + EVENT_LINK_COLOR: "#F85", + CONNECTING_LINK_COLOR: "#AFA", + + MAX_NUMBER_OF_NODES: 1000, //avoid infinite loops + DEFAULT_POSITION: [100,100],//default node position + VALID_SHAPES: ["default","box","round","card"], //,"circle" + + //shapes are used for nodes but also for slots + BOX_SHAPE: 1, + ROUND_SHAPE: 2, + CIRCLE_SHAPE: 3, + CARD_SHAPE: 4, + ARROW_SHAPE: 5, + + //enums + INPUT: 1, + OUTPUT: 2, + + EVENT: -1, //for outputs + ACTION: -1, //for inputs + + ALWAYS: 0, + ON_EVENT: 1, + NEVER: 2, + ON_TRIGGER: 3, + + UP: 1, + DOWN:2, + LEFT:3, + RIGHT:4, + CENTER:5, + + NORMAL_TITLE: 0, + NO_TITLE: 1, + TRANSPARENT_TITLE: 2, + AUTOHIDE_TITLE: 3, + + proxy: null, //used to redirect calls + node_images_path: "", + + debug: false, + throw_errors: true, + allow_scripts: true, + registered_node_types: {}, //nodetypes by string + node_types_by_file_extension: {}, //used for droping files in the canvas + Nodes: {}, //node types by classname + + /** + * Register a node class so it can be listed when the user wants to create a new one + * @method registerNodeType + * @param {String} type name of the node and path + * @param {Class} base_class class containing the structure of a node + */ + + registerNodeType: function(type, base_class) + { + if(!base_class.prototype) + throw("Cannot register a simple object, it must be a class with a prototype"); + base_class.type = type; + + if(LiteGraph.debug) + console.log("Node registered: " + type); + + var categories = type.split("/"); + var classname = base_class.name; + + var pos = type.lastIndexOf("/"); + base_class.category = type.substr(0,pos); + + if(!base_class.title) + base_class.title = classname; + //info.name = name.substr(pos+1,name.length - pos); + + //extend class + if(base_class.prototype) //is a class + for(var i in LGraphNode.prototype) + if(!base_class.prototype[i]) + base_class.prototype[i] = LGraphNode.prototype[i]; + + Object.defineProperty( base_class.prototype, "shape",{ + set: function(v) { + switch(v) + { + case "default": delete this._shape; break; + case "box": this._shape = LiteGraph.BOX_SHAPE; break; + case "round": this._shape = LiteGraph.ROUND_SHAPE; break; + case "circle": this._shape = LiteGraph.CIRCLE_SHAPE; break; + case "card": this._shape = LiteGraph.CARD_SHAPE; break; + default: + this._shape = v; + } + }, + get: function(v) + { + return this._shape; + }, + enumerable: true + }); + + this.registered_node_types[ type ] = base_class; + if(base_class.constructor.name) + this.Nodes[ classname ] = base_class; + + //warnings + if(base_class.prototype.onPropertyChange) + console.warn("LiteGraph node class " + type + " has onPropertyChange method, it must be called onPropertyChanged with d at the end"); + + if( base_class.supported_extensions ) + { + for(var i in base_class.supported_extensions ) + this.node_types_by_file_extension[ base_class.supported_extensions[i].toLowerCase() ] = base_class; + } + }, + + /** + * Create a new node type by passing a function, it wraps it with a propper class and generates inputs according to the parameters of the function. + * Useful to wrap simple methods that do not require properties, and that only process some input to generate an output. + * @method wrapFunctionAsNode + * @param {String} name node name with namespace (p.e.: 'math/sum') + * @param {Function} func + * @param {Array} param_types [optional] an array containing the type of every parameter, otherwise parameters will accept any type + * @param {String} return_type [optional] string with the return type, otherwise it will be generic + */ + wrapFunctionAsNode: function( name, func, param_types, return_type ) + { + var params = Array(func.length); + var code = ""; + var names = LiteGraph.getParameterNames( func ); + for(var i = 0; i < names.length; ++i) + code += "this.addInput('"+names[i]+"',"+(param_types && param_types[i] ? "'" + param_types[i] + "'" : "0") + ");\n"; + code += "this.addOutput('out',"+( return_type ? "'" + return_type + "'" : 0 )+");\n"; + var classobj = Function(code); + classobj.title = name.split("/").pop(); + classobj.desc = "Generated from " + func.name; + classobj.prototype.onExecute = function onExecute() + { + for(var i = 0; i < params.length; ++i) + params[i] = this.getInputData(i); + var r = func.apply( this, params ); + this.setOutputData(0,r); + } + this.registerNodeType( name, classobj ); + }, + + /** + * Adds this method to all nodetypes, existing and to be created + * (You can add it to LGraphNode.prototype but then existing node types wont have it) + * @method addNodeMethod + * @param {Function} func + */ + addNodeMethod: function( name, func ) + { + LGraphNode.prototype[name] = func; + for(var i in this.registered_node_types) + { + var type = this.registered_node_types[i]; + if(type.prototype[name]) + type.prototype["_" + name] = type.prototype[name]; //keep old in case of replacing + type.prototype[name] = func; + } + }, + + /** + * Create a node of a given type with a name. The node is not attached to any graph yet. + * @method createNode + * @param {String} type full name of the node class. p.e. "math/sin" + * @param {String} name a name to distinguish from other nodes + * @param {Object} options to set options + */ + + createNode: function( type, title, options ) + { + var base_class = this.registered_node_types[type]; + if (!base_class) + { + if(LiteGraph.debug) + console.log("GraphNode type \"" + type + "\" not registered."); + return null; + } + + var prototype = base_class.prototype || base_class; + + title = title || base_class.title || type; + + var node = new base_class( title ); + node.type = type; + + if(!node.title && title) node.title = title; + if(!node.properties) node.properties = {}; + if(!node.properties_info) node.properties_info = []; + if(!node.flags) node.flags = {}; + if(!node.size) node.size = node.computeSize(); + if(!node.pos) node.pos = LiteGraph.DEFAULT_POSITION.concat(); + if(!node.mode) node.mode = LiteGraph.ALWAYS; + + //extra options + if(options) + { + for(var i in options) + node[i] = options[i]; + } + + return node; + }, + + /** + * Returns a registered node type with a given name + * @method getNodeType + * @param {String} type full name of the node class. p.e. "math/sin" + * @return {Class} the node class + */ + + getNodeType: function(type) + { + return this.registered_node_types[type]; + }, + + + /** + * Returns a list of node types matching one category + * @method getNodeType + * @param {String} category category name + * @return {Array} array with all the node classes + */ + + getNodeTypesInCategory: function( category, filter ) + { + var r = []; + for(var i in this.registered_node_types) + { + var type = this.registered_node_types[i]; + if(filter && type.filter && type.filter != filter) + continue; + + if(category == "" ) + { + if (type.category == null) + r.push(type); + } + else if (type.category == category) + r.push(type); + } + + return r; + }, + + /** + * Returns a list with all the node type categories + * @method getNodeTypesCategories + * @return {Array} array with all the names of the categories + */ + + getNodeTypesCategories: function() + { + var categories = {"":1}; + for(var i in this.registered_node_types) + if(this.registered_node_types[i].category && !this.registered_node_types[i].skip_list) + categories[ this.registered_node_types[i].category ] = 1; + var result = []; + for(var i in categories) + result.push(i); + return result; + }, + + //debug purposes: reloads all the js scripts that matches a wilcard + reloadNodes: function (folder_wildcard) + { + var tmp = document.getElementsByTagName("script"); + //weird, this array changes by its own, so we use a copy + var script_files = []; + for(var i in tmp) + script_files.push(tmp[i]); + + + var docHeadObj = document.getElementsByTagName("head")[0]; + folder_wildcard = document.location.href + folder_wildcard; + + for(var i in script_files) + { + var src = script_files[i].src; + if( !src || src.substr(0,folder_wildcard.length ) != folder_wildcard) + continue; + + try + { + if(LiteGraph.debug) + console.log("Reloading: " + src); + var dynamicScript = document.createElement("script"); + dynamicScript.type = "text/javascript"; + dynamicScript.src = src; + docHeadObj.appendChild(dynamicScript); + docHeadObj.removeChild(script_files[i]); + } + catch (err) + { + if(LiteGraph.throw_errors) + throw err; + if(LiteGraph.debug) + console.log("Error while reloading " + src); + } + } + + if(LiteGraph.debug) + console.log("Nodes reloaded"); + }, + + //separated just to improve if it doesnt work + cloneObject: function(obj, target) + { + if(obj == null) return null; + var r = JSON.parse( JSON.stringify( obj ) ); + if(!target) return r; + + for(var i in r) + target[i] = r[i]; + return target; + }, + + isValidConnection: function( type_a, type_b ) + { + if( !type_a || //generic output + !type_b || //generic input + type_a == type_b || //same type (is valid for triggers) + type_a == LiteGraph.EVENT && type_b == LiteGraph.ACTION ) + return true; + + // Enforce string type to handle toLowerCase call (-1 number not ok) + type_a = String(type_a); + type_b = String(type_b); + type_a = type_a.toLowerCase(); + type_b = type_b.toLowerCase(); + + // For nodes supporting multiple connection types + if( type_a.indexOf(",") == -1 && type_b.indexOf(",") == -1 ) + return type_a == type_b; + + // Check all permutations to see if one is valid + var supported_types_a = type_a.split(","); + var supported_types_b = type_b.split(","); + for(var i = 0; i < supported_types_a.length; ++i) + for(var j = 0; j < supported_types_b.length; ++j) + if( supported_types_a[i] == supported_types_b[j] ) + return true; + + return false; + } +}; + +//timer that works everywhere +if(typeof(performance) != "undefined") + LiteGraph.getTime = performance.now.bind(performance); +else if(typeof(Date) != "undefined" && Date.now) + LiteGraph.getTime = Date.now.bind(Date); +else if(typeof(process) != "undefined") + LiteGraph.getTime = function(){ + var t = process.hrtime(); + return t[0]*0.001 + t[1]*(1e-6); + } +else + LiteGraph.getTime = function getTime() { return (new Date).getTime(); } + + + + + + +//********************************************************************************* +// LGraph CLASS +//********************************************************************************* + +/** +* LGraph is the class that contain a full graph. We instantiate one and add nodes to it, and then we can run the execution loop. +* +* @class LGraph +* @constructor +* @param {Object} o data from previous serialization [optional] +*/ + +function LGraph( o ) +{ + if (LiteGraph.debug) + console.log("Graph created"); + this.list_of_graphcanvas = null; + this.clear(); + + if(o) + this.configure(o); +} + +global.LGraph = LiteGraph.LGraph = LGraph; + +//default supported types +LGraph.supported_types = ["number","string","boolean"]; + +//used to know which types of connections support this graph (some graphs do not allow certain types) +LGraph.prototype.getSupportedTypes = function() { return this.supported_types || LGraph.supported_types; } + +LGraph.STATUS_STOPPED = 1; +LGraph.STATUS_RUNNING = 2; + +/** +* Removes all nodes from this graph +* @method clear +*/ + +LGraph.prototype.clear = function() +{ + this.stop(); + this.status = LGraph.STATUS_STOPPED; + + this.last_node_id = 1; + this.last_link_id = 1; + + this._version = -1; //used to detect changes + + //nodes + this._nodes = []; + this._nodes_by_id = {}; + this._nodes_in_order = []; //nodes that are executable sorted in execution order + this._nodes_executable = null; //nodes that contain onExecute + + //other scene stuff + this._groups = []; + + //links + this.links = {}; //container with all the links + + //iterations + this.iteration = 0; + + //custom data + this.config = {}; + + //timing + this.globaltime = 0; + this.runningtime = 0; + this.fixedtime = 0; + this.fixedtime_lapse = 0.01; + this.elapsed_time = 0.01; + this.last_update_time = 0; + this.starttime = 0; + + this.catch_errors = true; + + //subgraph_data + this.global_inputs = {}; + this.global_outputs = {}; + + //notify canvas to redraw + this.change(); + + this.sendActionToCanvas("clear"); +} + +/** +* Attach Canvas to this graph +* @method attachCanvas +* @param {GraphCanvas} graph_canvas +*/ + +LGraph.prototype.attachCanvas = function(graphcanvas) +{ + if(graphcanvas.constructor != LGraphCanvas) + throw("attachCanvas expects a LGraphCanvas instance"); + if(graphcanvas.graph && graphcanvas.graph != this) + graphcanvas.graph.detachCanvas( graphcanvas ); + + graphcanvas.graph = this; + if(!this.list_of_graphcanvas) + this.list_of_graphcanvas = []; + this.list_of_graphcanvas.push(graphcanvas); +} + +/** +* Detach Canvas from this graph +* @method detachCanvas +* @param {GraphCanvas} graph_canvas +*/ +LGraph.prototype.detachCanvas = function(graphcanvas) +{ + if(!this.list_of_graphcanvas) + return; + + var pos = this.list_of_graphcanvas.indexOf( graphcanvas ); + if(pos == -1) + return; + graphcanvas.graph = null; + this.list_of_graphcanvas.splice(pos,1); +} + +/** +* Starts running this graph every interval milliseconds. +* @method start +* @param {number} interval amount of milliseconds between executions, if 0 then it renders to the monitor refresh rate +*/ + +LGraph.prototype.start = function( interval ) +{ + if( this.status == LGraph.STATUS_RUNNING ) + return; + this.status = LGraph.STATUS_RUNNING; + + if(this.onPlayEvent) + this.onPlayEvent(); + + this.sendEventToAllNodes("onStart"); + + //launch + this.starttime = LiteGraph.getTime(); + this.last_update_time = this.starttime; + interval = interval || 0; + var that = this; + + if(interval == 0 && typeof(window) != "undefined" && window.requestAnimationFrame ) + { + function on_frame() + { + if(that.execution_timer_id != -1) + return; + window.requestAnimationFrame(on_frame); + that.runStep(1, !this.catch_errors ); + } + this.execution_timer_id = -1; + on_frame(); + } + else + this.execution_timer_id = setInterval( function() { + //execute + that.runStep(1, !this.catch_errors ); + },interval); +} + +/** +* Stops the execution loop of the graph +* @method stop execution +*/ + +LGraph.prototype.stop = function() +{ + if( this.status == LGraph.STATUS_STOPPED ) + return; + + this.status = LGraph.STATUS_STOPPED; + + if(this.onStopEvent) + this.onStopEvent(); + + if(this.execution_timer_id != null) + { + if( this.execution_timer_id != -1 ) + clearInterval(this.execution_timer_id); + this.execution_timer_id = null; + } + + this.sendEventToAllNodes("onStop"); +} + +/** +* Run N steps (cycles) of the graph +* @method runStep +* @param {number} num number of steps to run, default is 1 +*/ + +LGraph.prototype.runStep = function( num, do_not_catch_errors ) +{ + num = num || 1; + + var start = LiteGraph.getTime(); + this.globaltime = 0.001 * (start - this.starttime); + + var nodes = this._nodes_executable ? this._nodes_executable : this._nodes; + if(!nodes) + return; + + if( do_not_catch_errors ) + { + //iterations + for(var i = 0; i < num; i++) + { + for( var j = 0, l = nodes.length; j < l; ++j ) + { + var node = nodes[j]; + if( node.mode == LiteGraph.ALWAYS && node.onExecute ) + node.onExecute(); + } + + this.fixedtime += this.fixedtime_lapse; + if( this.onExecuteStep ) + this.onExecuteStep(); + } + + if( this.onAfterExecute ) + this.onAfterExecute(); + } + else + { + try + { + //iterations + for(var i = 0; i < num; i++) + { + for( var j = 0, l = nodes.length; j < l; ++j ) + { + var node = nodes[j]; + if( node.mode == LiteGraph.ALWAYS && node.onExecute ) + node.onExecute(); + } + + this.fixedtime += this.fixedtime_lapse; + if( this.onExecuteStep ) + this.onExecuteStep(); + } + + if( this.onAfterExecute ) + this.onAfterExecute(); + this.errors_in_execution = false; + } + catch (err) + { + this.errors_in_execution = true; + if(LiteGraph.throw_errors) + throw err; + if(LiteGraph.debug) + console.log("Error during execution: " + err); + this.stop(); + } + } + + var now = LiteGraph.getTime(); + var elapsed = now - start; + if (elapsed == 0) + elapsed = 1; + this.execution_time = 0.001 * elapsed; + this.globaltime += 0.001 * elapsed; + this.iteration += 1; + this.elapsed_time = (now - this.last_update_time) * 0.001; + this.last_update_time = now; +} + +/** +* Updates the graph execution order according to relevance of the nodes (nodes with only outputs have more relevance than +* nodes with only inputs. +* @method updateExecutionOrder +*/ +LGraph.prototype.updateExecutionOrder = function() +{ + this._nodes_in_order = this.computeExecutionOrder( false ); + this._nodes_executable = []; + for(var i = 0; i < this._nodes_in_order.length; ++i) + if( this._nodes_in_order[i].onExecute ) + this._nodes_executable.push( this._nodes_in_order[i] ); +} + +//This is more internal, it computes the order and returns it +LGraph.prototype.computeExecutionOrder = function( only_onExecute, set_level ) +{ + var L = []; + var S = []; + var M = {}; + var visited_links = {}; //to avoid repeating links + var remaining_links = {}; //to a + + //search for the nodes without inputs (starting nodes) + for (var i = 0, l = this._nodes.length; i < l; ++i) + { + var node = this._nodes[i]; + if( only_onExecute && !node.onExecute ) + continue; + + M[node.id] = node; //add to pending nodes + + var num = 0; //num of input connections + if(node.inputs) + for(var j = 0, l2 = node.inputs.length; j < l2; j++) + if(node.inputs[j] && node.inputs[j].link != null) + num += 1; + + if(num == 0) //is a starting node + { + S.push(node); + if(set_level) + node._level = 1; + } + else //num of input links + { + if(set_level) + node._level = 0; + remaining_links[node.id] = num; + } + } + + while(true) + { + if(S.length == 0) + break; + + //get an starting node + var node = S.shift(); + L.push(node); //add to ordered list + delete M[node.id]; //remove from the pending nodes + + if(!node.outputs) + continue; + + //for every output + for(var i = 0; i < node.outputs.length; i++) + { + var output = node.outputs[i]; + //not connected + if(output == null || output.links == null || output.links.length == 0) + continue; + + //for every connection + for(var j = 0; j < output.links.length; j++) + { + var link_id = output.links[j]; + var link = this.links[link_id]; + if(!link) + continue; + + //already visited link (ignore it) + if(visited_links[ link.id ]) + continue; + + var target_node = this.getNodeById( link.target_id ); + if(target_node == null) + { + visited_links[ link.id ] = true; + continue; + } + + if(set_level && (!target_node._level || target_node._level <= node._level)) + target_node._level = node._level + 1; + + visited_links[link.id] = true; //mark as visited + remaining_links[target_node.id] -= 1; //reduce the number of links remaining + if (remaining_links[ target_node.id ] == 0) + S.push(target_node); //if no more links, then add to starters array + } + } + } + + //the remaining ones (loops) + for(var i in M) + L.push( M[i] ); + + if( L.length != this._nodes.length && LiteGraph.debug ) + console.warn("something went wrong, nodes missing"); + + var l = L.length; + + //save order number in the node + for(var i = 0; i < l; ++i) + L[i].order = i; + + //sort now by priority + L = L.sort(function(A,B){ + var Ap = A.constructor.priority || A.priority || 0; + var Bp = B.constructor.priority || B.priority || 0; + if(Ap == Bp) + return A.order - B.order; + return Ap - Bp; + }); + + //save order number in the node, again... + for(var i = 0; i < l; ++i) + L[i].order = i; + + return L; +} + +/** +* Returns all the nodes that could affect this one (ancestors) by crawling all the inputs recursively. +* It doesnt include the node itself +* @method getAncestors +* @return {Array} an array with all the LGraphNodes that affect this node, in order of execution +*/ +LGraph.prototype.getAncestors = function( node ) +{ + var ancestors = []; + var pending = [node]; + var visited = {}; + + while (pending.length) + { + var current = pending.shift(); + if(!current.inputs) + continue; + if( !visited[ current.id ] && current != node ) + { + visited[ current.id ] = true; + ancestors.push( current ); + } + + for(var i = 0; i < current.inputs.length;++i) + { + var input = current.getInputNode(i); + if( input && ancestors.indexOf( input ) == -1) + { + pending.push( input ); + } + } + } + + ancestors.sort(function(a,b){ return a.order - b.order;}); + return ancestors; +} + +/** +* Positions every node in a more readable manner +* @method arrange +*/ +LGraph.prototype.arrange = function( margin ) +{ + margin = margin || 40; + + var nodes = this.computeExecutionOrder( false, true ); + var columns = []; + for(var i = 0; i < nodes.length; ++i) + { + var node = nodes[i]; + var col = node._level || 1; + if(!columns[col]) + columns[col] = []; + columns[col].push( node ); + } + + var x = margin; + + for(var i = 0; i < columns.length; ++i) + { + var column = columns[i]; + if(!column) + continue; + var max_size = 100; + var y = margin; + for(var j = 0; j < column.length; ++j) + { + var node = column[j]; + node.pos[0] = x; + node.pos[1] = y; + if(node.size[0] > max_size) + max_size = node.size[0]; + y += node.size[1] + margin; + } + x += max_size + margin; + } + + this.setDirtyCanvas(true,true); +} + + +/** +* Returns the amount of time the graph has been running in milliseconds +* @method getTime +* @return {number} number of milliseconds the graph has been running +*/ +LGraph.prototype.getTime = function() +{ + return this.globaltime; +} + +/** +* Returns the amount of time accumulated using the fixedtime_lapse var. This is used in context where the time increments should be constant +* @method getFixedTime +* @return {number} number of milliseconds the graph has been running +*/ + +LGraph.prototype.getFixedTime = function() +{ + return this.fixedtime; +} + +/** +* Returns the amount of time it took to compute the latest iteration. Take into account that this number could be not correct +* if the nodes are using graphical actions +* @method getElapsedTime +* @return {number} number of milliseconds it took the last cycle +*/ + +LGraph.prototype.getElapsedTime = function() +{ + return this.elapsed_time; +} + +/** +* Sends an event to all the nodes, useful to trigger stuff +* @method sendEventToAllNodes +* @param {String} eventname the name of the event (function to be called) +* @param {Array} params parameters in array format +*/ + +LGraph.prototype.sendEventToAllNodes = function( eventname, params, mode ) +{ + mode = mode || LiteGraph.ALWAYS; + + var nodes = this._nodes_in_order ? this._nodes_in_order : this._nodes; + if(!nodes) + return; + + for( var j = 0, l = nodes.length; j < l; ++j ) + { + var node = nodes[j]; + if(node[eventname] && node.mode == mode ) + { + if(params === undefined) + node[eventname](); + else if(params && params.constructor === Array) + node[eventname].apply( node, params ); + else + node[eventname](params); + } + } +} + +LGraph.prototype.sendActionToCanvas = function(action, params) +{ + if(!this.list_of_graphcanvas) + return; + + for(var i = 0; i < this.list_of_graphcanvas.length; ++i) + { + var c = this.list_of_graphcanvas[i]; + if( c[action] ) + c[action].apply(c, params); + } +} + +/** +* Adds a new node instasnce to this graph +* @method add +* @param {LGraphNode} node the instance of the node +*/ + +LGraph.prototype.add = function( node, skip_compute_order) +{ + if(!node) + return; + + //groups + if( node.constructor === LGraphGroup ) + { + this._groups.push( node ); + this.setDirtyCanvas(true); + this.change(); + node.graph = this; + this._version++; + return; + } + + //nodes + if(node.id != -1 && this._nodes_by_id[node.id] != null) + { + console.warn("LiteGraph: there is already a node with this ID, changing it"); + node.id = ++this.last_node_id; + } + + if(this._nodes.length >= LiteGraph.MAX_NUMBER_OF_NODES) + throw("LiteGraph: max number of nodes in a graph reached"); + + //give him an id + if(node.id == null || node.id == -1) + node.id = ++this.last_node_id; + else if (this.last_node_id < node.id) + this.last_node_id = node.id; + + + node.graph = this; + this._version++; + + this._nodes.push(node); + this._nodes_by_id[node.id] = node; + + if(node.onAdded) + node.onAdded( this ); + + if(this.config.align_to_grid) + node.alignToGrid(); + + if(!skip_compute_order) + this.updateExecutionOrder(); + + if(this.onNodeAdded) + this.onNodeAdded(node); + + + this.setDirtyCanvas(true); + this.change(); + + return node; //to chain actions +} + +/** +* Removes a node from the graph +* @method remove +* @param {LGraphNode} node the instance of the node +*/ + +LGraph.prototype.remove = function(node) +{ + if(node.constructor === LiteGraph.LGraphGroup) + { + var index = this._groups.indexOf(node); + if(index != -1) + this._groups.splice(index,1); + node.graph = null; + this._version++; + this.setDirtyCanvas(true,true); + this.change(); + return; + } + + if(this._nodes_by_id[node.id] == null) + return; //not found + + if(node.ignore_remove) + return; //cannot be removed + + //disconnect inputs + if(node.inputs) + for(var i = 0; i < node.inputs.length; i++) + { + var slot = node.inputs[i]; + if(slot.link != null) + node.disconnectInput(i); + } + + //disconnect outputs + if(node.outputs) + for(var i = 0; i < node.outputs.length; i++) + { + var slot = node.outputs[i]; + if(slot.links != null && slot.links.length) + node.disconnectOutput(i); + } + + //node.id = -1; //why? + + //callback + if(node.onRemoved) + node.onRemoved(); + + node.graph = null; + this._version++; + + //remove from canvas render + if(this.list_of_graphcanvas) + { + for(var i = 0; i < this.list_of_graphcanvas.length; ++i) + { + var canvas = this.list_of_graphcanvas[i]; + if(canvas.selected_nodes[node.id]) + delete canvas.selected_nodes[node.id]; + if(canvas.node_dragged == node) + canvas.node_dragged = null; + } + } + + //remove from containers + var pos = this._nodes.indexOf(node); + if(pos != -1) + this._nodes.splice(pos,1); + delete this._nodes_by_id[node.id]; + + if(this.onNodeRemoved) + this.onNodeRemoved(node); + + this.setDirtyCanvas(true,true); + this.change(); + + this.updateExecutionOrder(); +} + +/** +* Returns a node by its id. +* @method getNodeById +* @param {Number} id +*/ + +LGraph.prototype.getNodeById = function( id ) +{ + if( id == null ) + return null; + return this._nodes_by_id[ id ]; +} + +/** +* Returns a list of nodes that matches a class +* @method findNodesByClass +* @param {Class} classObject the class itself (not an string) +* @return {Array} a list with all the nodes of this type +*/ + +LGraph.prototype.findNodesByClass = function(classObject) +{ + var r = []; + for(var i = 0, l = this._nodes.length; i < l; ++i) + if(this._nodes[i].constructor === classObject) + r.push(this._nodes[i]); + return r; +} + +/** +* Returns a list of nodes that matches a type +* @method findNodesByType +* @param {String} type the name of the node type +* @return {Array} a list with all the nodes of this type +*/ + +LGraph.prototype.findNodesByType = function(type) +{ + var type = type.toLowerCase(); + var r = []; + for(var i = 0, l = this._nodes.length; i < l; ++i) + if(this._nodes[i].type.toLowerCase() == type ) + r.push(this._nodes[i]); + return r; +} + +/** +* Returns a list of nodes that matches a name +* @method findNodesByTitle +* @param {String} name the name of the node to search +* @return {Array} a list with all the nodes with this name +*/ + +LGraph.prototype.findNodesByTitle = function(title) +{ + var result = []; + for(var i = 0, l = this._nodes.length; i < l; ++i) + if(this._nodes[i].title == title) + result.push(this._nodes[i]); + return result; +} + +/** +* Returns the top-most node in this position of the canvas +* @method getNodeOnPos +* @param {number} x the x coordinate in canvas space +* @param {number} y the y coordinate in canvas space +* @param {Array} nodes_list a list with all the nodes to search from, by default is all the nodes in the graph +* @return {LGraphNode} the node at this position or null +*/ +LGraph.prototype.getNodeOnPos = function( x, y, nodes_list, margin ) +{ + nodes_list = nodes_list || this._nodes; + for (var i = nodes_list.length - 1; i >= 0; i--) + { + var n = nodes_list[i]; + if(n.isPointInside( x, y, margin )) + return n; + } + return null; +} + +/** +* Returns the top-most group in that position +* @method getGroupOnPos +* @param {number} x the x coordinate in canvas space +* @param {number} y the y coordinate in canvas space +* @return {LGraphGroup} the group or null +*/ +LGraph.prototype.getGroupOnPos = function(x,y) +{ + for (var i = this._groups.length - 1; i >= 0; i--) + { + var g = this._groups[i]; + if(g.isPointInside( x, y, 2, true )) + return g; + } + return null; +} + +// ********** GLOBALS ***************** + +/** +* Tell this graph it has a global graph input of this type +* @method addGlobalInput +* @param {String} name +* @param {String} type +* @param {*} value [optional] +*/ +LGraph.prototype.addGlobalInput = function(name, type, value) +{ + this.global_inputs[name] = { name: name, type: type, value: value }; + this._version++; + + if(this.onGlobalInputAdded) + this.onGlobalInputAdded(name, type); + + if(this.onGlobalsChange) + this.onGlobalsChange(); +} + +/** +* Assign a data to the global graph input +* @method setGlobalInputData +* @param {String} name +* @param {*} data +*/ +LGraph.prototype.setGlobalInputData = function(name, data) +{ + var input = this.global_inputs[name]; + if (!input) + return; + input.value = data; +} + +/** +* Assign a data to the global graph input (same as setGlobalInputData) +* @method setInputData +* @param {String} name +* @param {*} data +*/ +LGraph.prototype.setInputData = LGraph.prototype.setGlobalInputData; + + +/** +* Returns the current value of a global graph input +* @method getGlobalInputData +* @param {String} name +* @return {*} the data +*/ +LGraph.prototype.getGlobalInputData = function(name) +{ + var input = this.global_inputs[name]; + if (!input) + return null; + return input.value; +} + +/** +* Changes the name of a global graph input +* @method renameGlobalInput +* @param {String} old_name +* @param {String} new_name +*/ +LGraph.prototype.renameGlobalInput = function(old_name, name) +{ + if(name == old_name) + return; + + if(!this.global_inputs[old_name]) + return false; + + if(this.global_inputs[name]) + { + console.error("there is already one input with that name"); + return false; + } + + this.global_inputs[name] = this.global_inputs[old_name]; + delete this.global_inputs[old_name]; + this._version++; + + if(this.onGlobalInputRenamed) + this.onGlobalInputRenamed(old_name, name); + + if(this.onGlobalsChange) + this.onGlobalsChange(); +} + +/** +* Changes the type of a global graph input +* @method changeGlobalInputType +* @param {String} name +* @param {String} type +*/ +LGraph.prototype.changeGlobalInputType = function(name, type) +{ + if(!this.global_inputs[name]) + return false; + + if(this.global_inputs[name].type && this.global_inputs[name].type.toLowerCase() == type.toLowerCase() ) + return; + + this.global_inputs[name].type = type; + this._version++; + if(this.onGlobalInputTypeChanged) + this.onGlobalInputTypeChanged(name, type); +} + +/** +* Removes a global graph input +* @method removeGlobalInput +* @param {String} name +* @param {String} type +*/ +LGraph.prototype.removeGlobalInput = function(name) +{ + if(!this.global_inputs[name]) + return false; + + delete this.global_inputs[name]; + this._version++; + + if(this.onGlobalInputRemoved) + this.onGlobalInputRemoved(name); + + if(this.onGlobalsChange) + this.onGlobalsChange(); + return true; +} + +/** +* Creates a global graph output +* @method addGlobalOutput +* @param {String} name +* @param {String} type +* @param {*} value +*/ +LGraph.prototype.addGlobalOutput = function(name, type, value) +{ + this.global_outputs[name] = { name: name, type: type, value: value }; + this._version++; + + if(this.onGlobalOutputAdded) + this.onGlobalOutputAdded(name, type); + + if(this.onGlobalsChange) + this.onGlobalsChange(); +} + +/** +* Assign a data to the global output +* @method setGlobalOutputData +* @param {String} name +* @param {String} value +*/ +LGraph.prototype.setGlobalOutputData = function(name, value) +{ + var output = this.global_outputs[ name ]; + if (!output) + return; + output.value = value; +} + +/** +* Returns the current value of a global graph output +* @method getGlobalOutputData +* @param {String} name +* @return {*} the data +*/ +LGraph.prototype.getGlobalOutputData = function(name) +{ + var output = this.global_outputs[name]; + if (!output) + return null; + return output.value; +} + +/** +* Returns the current value of a global graph output (sames as getGlobalOutputData) +* @method getOutputData +* @param {String} name +* @return {*} the data +*/ +LGraph.prototype.getOutputData = LGraph.prototype.getGlobalOutputData; + + +/** +* Renames a global graph output +* @method renameGlobalOutput +* @param {String} old_name +* @param {String} new_name +*/ +LGraph.prototype.renameGlobalOutput = function(old_name, name) +{ + if(!this.global_outputs[old_name]) + return false; + + if(this.global_outputs[name]) + { + console.error("there is already one output with that name"); + return false; + } + + this.global_outputs[name] = this.global_outputs[old_name]; + delete this.global_outputs[old_name]; + this._version++; + + if(this.onGlobalOutputRenamed) + this.onGlobalOutputRenamed(old_name, name); + + if(this.onGlobalsChange) + this.onGlobalsChange(); +} + +/** +* Changes the type of a global graph output +* @method changeGlobalOutputType +* @param {String} name +* @param {String} type +*/ +LGraph.prototype.changeGlobalOutputType = function(name, type) +{ + if(!this.global_outputs[name]) + return false; + + if(this.global_outputs[name].type && this.global_outputs[name].type.toLowerCase() == type.toLowerCase() ) + return; + + this.global_outputs[name].type = type; + this._version++; + if(this.onGlobalOutputTypeChanged) + this.onGlobalOutputTypeChanged(name, type); +} + +/** +* Removes a global graph output +* @method removeGlobalOutput +* @param {String} name +*/ +LGraph.prototype.removeGlobalOutput = function(name) +{ + if(!this.global_outputs[name]) + return false; + delete this.global_outputs[name]; + this._version++; + + if(this.onGlobalOutputRemoved) + this.onGlobalOutputRemoved(name); + + if(this.onGlobalsChange) + this.onGlobalsChange(); + return true; +} + +LGraph.prototype.triggerInput = function(name,value) +{ + var nodes = this.findNodesByTitle(name); + for(var i = 0; i < nodes.length; ++i) + nodes[i].onTrigger(value); +} + +LGraph.prototype.setCallback = function(name,func) +{ + var nodes = this.findNodesByTitle(name); + for(var i = 0; i < nodes.length; ++i) + nodes[i].setTrigger(func); +} + + +LGraph.prototype.connectionChange = function( node ) +{ + this.updateExecutionOrder(); + if( this.onConnectionChange ) + this.onConnectionChange( node ); + this._version++; + this.sendActionToCanvas("onConnectionChange"); +} + +/** +* returns if the graph is in live mode +* @method isLive +*/ + +LGraph.prototype.isLive = function() +{ + if(!this.list_of_graphcanvas) + return false; + + for(var i = 0; i < this.list_of_graphcanvas.length; ++i) + { + var c = this.list_of_graphcanvas[i]; + if(c.live_mode) + return true; + } + return false; +} + +/* Called when something visually changed (not the graph!) */ +LGraph.prototype.change = function() +{ + if(LiteGraph.debug) + console.log("Graph changed"); + this.sendActionToCanvas("setDirty",[true,true]); + if(this.on_change) + this.on_change(this); +} + +LGraph.prototype.setDirtyCanvas = function(fg,bg) +{ + this.sendActionToCanvas("setDirty",[fg,bg]); +} + +//save and recover app state *************************************** +/** +* Creates a Object containing all the info about this graph, it can be serialized +* @method serialize +* @return {Object} value of the node +*/ +LGraph.prototype.serialize = function() +{ + var nodes_info = []; + for(var i = 0, l = this._nodes.length; i < l; ++i) + nodes_info.push( this._nodes[i].serialize() ); + + //pack link info into a non-verbose format + var links = []; + for(var i in this.links) //links is an OBJECT + { + var link = this.links[i]; + links.push([ link.id, link.origin_id, link.origin_slot, link.target_id, link.target_slot, link.type ]); + } + + var groups_info = []; + for(var i = 0; i < this._groups.length; ++i) + groups_info.push( this._groups[i].serialize() ); + + var data = { + last_node_id: this.last_node_id, + last_link_id: this.last_link_id, + nodes: nodes_info, + links: links, + groups: groups_info, + config: this.config + }; + + return data; +} + + +/** +* Configure a graph from a JSON string +* @method configure +* @param {String} str configure a graph from a JSON string +* @param {Boolean} returns if there was any error parsing +*/ +LGraph.prototype.configure = function( data, keep_old ) +{ + if(!data) + return; + + if(!keep_old) + this.clear(); + + var nodes = data.nodes; + + //decode links info (they are very verbose) + if(data.links && data.links.constructor === Array) + { + var links = []; + for(var i = 0; i < data.links.length; ++i) + { + var link = data.links[i]; + links[ link[0] ] = { id: link[0], origin_id: link[1], origin_slot: link[2], target_id: link[3], target_slot: link[4], type: link[5] }; + } + data.links = links; + } + + //copy all stored fields + for (var i in data) + this[i] = data[i]; + + var error = false; + + //create nodes + this._nodes = []; + if(nodes) + { + for(var i = 0, l = nodes.length; i < l; ++i) + { + var n_info = nodes[i]; //stored info + var node = LiteGraph.createNode( n_info.type, n_info.title ); + if(!node) + { + if(LiteGraph.debug) + console.log("Node not found: " + n_info.type); + error = true; + continue; + } + + node.id = n_info.id; //id it or it will create a new id + this.add(node, true); //add before configure, otherwise configure cannot create links + } + + //configure nodes afterwards so they can reach each other + for(var i = 0, l = nodes.length; i < l; ++i) + { + var n_info = nodes[i]; + var node = this.getNodeById( n_info.id ); + if(node) + node.configure( n_info ); + } + } + + //groups + this._groups.length = 0; + if( data.groups ) + for(var i = 0; i < data.groups.length; ++i ) + { + var group = new LiteGraph.LGraphGroup(); + group.configure( data.groups[i] ); + this.add( group ); + } + + this.updateExecutionOrder(); + this._version++; + this.setDirtyCanvas(true,true); + return error; +} + +LGraph.prototype.load = function(url) +{ + var that = this; + var req = new XMLHttpRequest(); + req.open('GET', url, true); + req.send(null); + req.onload = function (oEvent) { + if(req.status !== 200) + { + console.error("Error loading graph:",req.status,req.response); + return; + } + var data = JSON.parse( req.response ); + that.configure(data); + } + req.onerror = function(err) + { + console.error("Error loading graph:",err); + } +} + +LGraph.prototype.onNodeTrace = function(node, msg, color) +{ + //TODO +} + +// ************************************************************* +// Node CLASS ******* +// ************************************************************* + +/* + title: string + pos: [x,y] + size: [x,y] + + input|output: every connection + + { name:string, type:string, pos: [x,y]=Optional, direction: "input"|"output", links: Array }); + + flags: + + clip_area: if you render outside the node, it will be cliped + + unsafe_execution: not allowed for safe execution + + skip_repeated_outputs: when adding new outputs, it wont show if there is one already connected + + resizable: if set to false it wont be resizable with the mouse + + supported callbacks: + + onAdded: when added to graph + + onRemoved: when removed from graph + + onStart: when the graph starts playing + + onStop: when the graph stops playing + + onDrawForeground: render the inside widgets inside the node + + onDrawBackground: render the background area inside the node (only in edit mode) + + onMouseDown + + onMouseMove + + onMouseUp + + onMouseEnter + + onMouseLeave + + onExecute: execute the node + + onPropertyChanged: when a property is changed in the panel (return true to skip default behaviour) + + onGetInputs: returns an array of possible inputs + + onGetOutputs: returns an array of possible outputs + + onDblClick + + onSerialize + + onSelected + + onDeselected + + onDropItem : DOM item dropped over the node + + onDropFile : file dropped over the node + + onConnectInput : if returns false the incoming connection will be canceled + + onConnectionsChange : a connection changed (new one or removed) (LiteGraph.INPUT or LiteGraph.OUTPUT, slot, true if connected, link_info, input_info ) +*/ + +/** +* Base Class for all the node type classes +* @class LGraphNode +* @param {String} name a name for the node +*/ + +function LGraphNode(title) +{ + this._ctor(title); +} + +global.LGraphNode = LiteGraph.LGraphNode = LGraphNode; + +LGraphNode.prototype._ctor = function( title ) +{ + this.title = title || "Unnamed"; + this.size = [LiteGraph.NODE_WIDTH,60]; + this.graph = null; + + this._pos = new Float32Array(10,10); + + Object.defineProperty( this, "pos", { + set: function(v) + { + if(!v || v.length < 2) + return; + this._pos[0] = v[0]; + this._pos[1] = v[1]; + }, + get: function() + { + return this._pos; + }, + enumerable: true + }); + + this.id = -1; //not know till not added + this.type = null; + + //inputs available: array of inputs + this.inputs = []; + this.outputs = []; + this.connections = []; + + //local data + this.properties = {}; //for the values + this.properties_info = []; //for the info + + this.data = null; //persistent local data + this.flags = {}; +} + +/** +* configure a node from an object containing the serialized info +* @method configure +*/ +LGraphNode.prototype.configure = function(info) +{ + if(this.graph) + this.graph._version++; + + for (var j in info) + { + if(j == "console") + continue; + + if(j == "properties") + { + //i dont want to clone properties, I want to reuse the old container + for(var k in info.properties) + { + this.properties[k] = info.properties[k]; + if(this.onPropertyChanged) + this.onPropertyChanged(k,info.properties[k]); + } + continue; + } + + if(info[j] == null) + continue; + + else if (typeof(info[j]) == 'object') //object + { + if(this[j] && this[j].configure) + this[j].configure( info[j] ); + else + this[j] = LiteGraph.cloneObject(info[j], this[j]); + } + else //value + this[j] = info[j]; + } + + if(!info.title) + this.title = this.constructor.title; + + if(this.onConnectionsChange) + { + if(this.inputs) + for(var i = 0; i < this.inputs.length; ++i) + { + var input = this.inputs[i]; + var link_info = this.graph ? this.graph.links[ input.link ] : null; + this.onConnectionsChange( LiteGraph.INPUT, i, true, link_info, input ); //link_info has been created now, so its updated + } + + if(this.outputs) + for(var i = 0; i < this.outputs.length; ++i) + { + var output = this.outputs[i]; + if(!output.links) + continue; + for(var j = 0; j < output.links.length; ++j) + { + var link_info = this.graph ? this.graph.links[ output.links[j] ] : null; + this.onConnectionsChange( LiteGraph.OUTPUT, i, true, link_info, output ); //link_info has been created now, so its updated + } + } + } + + //FOR LEGACY, PLEASE REMOVE ON NEXT VERSION + for(var i in this.inputs) + { + var input = this.inputs[i]; + if(!input.link || !input.link.length ) + continue; + var link = input.link; + if(typeof(link) != "object") + continue; + input.link = link[0]; + if(this.graph) + this.graph.links[ link[0] ] = { + id: link[0], + origin_id: link[1], + origin_slot: link[2], + target_id: link[3], + target_slot: link[4] + }; + } + for(var i in this.outputs) + { + var output = this.outputs[i]; + if(!output.links || output.links.length == 0) + continue; + for(var j in output.links) + { + var link = output.links[j]; + if(typeof(link) != "object") + continue; + output.links[j] = link[0]; + } + } + + if( this.onConfigure ) + this.onConfigure( info ); +} + +/** +* serialize the content +* @method serialize +*/ + +LGraphNode.prototype.serialize = function() +{ + //create serialization object + var o = { + id: this.id, + type: this.type, + pos: this.pos, + size: this.size, + data: this.data, + flags: LiteGraph.cloneObject(this.flags), + mode: this.mode + }; + + if( this.inputs ) + o.inputs = this.inputs; + + if( this.outputs ) + { + //clear outputs last data (because data in connections is never serialized but stored inside the outputs info) + for(var i = 0; i < this.outputs.length; i++) + delete this.outputs[i]._data; + o.outputs = this.outputs; + } + + if( this.title && this.title != this.constructor.title ) + o.title = this.title; + + if( this.properties ) + o.properties = LiteGraph.cloneObject( this.properties ); + + if( !o.type ) + o.type = this.constructor.type; + + if( this.color ) + o.color = this.color; + if( this.bgcolor ) + o.bgcolor = this.bgcolor; + if( this.boxcolor ) + o.boxcolor = this.boxcolor; + if( this.shape ) + o.shape = this.shape; + + if(this.onSerialize) + { + if( this.onSerialize(o) ) + console.warn("node onSerialize shouldnt return anything, data should be stored in the object pass in the first parameter"); + } + + return o; +} + + +/* Creates a clone of this node */ +LGraphNode.prototype.clone = function() +{ + var node = LiteGraph.createNode(this.type); + + //we clone it because serialize returns shared containers + var data = LiteGraph.cloneObject( this.serialize() ); + + //remove links + if(data.inputs) + for(var i = 0; i < data.inputs.length; ++i) + data.inputs[i].link = null; + + if(data.outputs) + for(var i = 0; i < data.outputs.length; ++i) + { + if(data.outputs[i].links) + data.outputs[i].links.length = 0; + } + + delete data["id"]; + //remove links + node.configure(data); + + return node; +} + + +/** +* serialize and stringify +* @method toString +*/ + +LGraphNode.prototype.toString = function() +{ + return JSON.stringify( this.serialize() ); +} +//LGraphNode.prototype.unserialize = function(info) {} //this cannot be done from within, must be done in LiteGraph + + +/** +* get the title string +* @method getTitle +*/ + +LGraphNode.prototype.getTitle = function() +{ + return this.title || this.constructor.title; +} + + + +// Execution ************************* +/** +* sets the output data +* @method setOutputData +* @param {number} slot +* @param {*} data +*/ +LGraphNode.prototype.setOutputData = function(slot, data) +{ + if(!this.outputs) + return; + + //this maybe slow and a niche case + //if(slot && slot.constructor === String) + // slot = this.findOutputSlot(slot); + + if(slot == -1 || slot >= this.outputs.length) + return; + + var output_info = this.outputs[slot]; + if(!output_info) + return; + + //store data in the output itself in case we want to debug + output_info._data = data; + + //if there are connections, pass the data to the connections + if( this.outputs[slot].links ) + { + for(var i = 0; i < this.outputs[slot].links.length; i++) + { + var link_id = this.outputs[slot].links[i]; + this.graph.links[ link_id ].data = data; + } + } +} + +/** +* Retrieves the input data (data traveling through the connection) from one slot +* @method getInputData +* @param {number} slot +* @param {boolean} force_update if set to true it will force the connected node of this slot to output data into this link +* @return {*} data or if it is not connected returns undefined +*/ +LGraphNode.prototype.getInputData = function( slot, force_update ) +{ + if(!this.inputs) + return; //undefined; + + if(slot >= this.inputs.length || this.inputs[slot].link == null) + return; + + var link_id = this.inputs[slot].link; + var link = this.graph.links[ link_id ]; + if(!link) //bug: weird case but it happens sometimes + return null; + + if(!force_update) + return link.data; + + //special case: used to extract data from the incomming connection before the graph has been executed + var node = this.graph.getNodeById( link.origin_id ); + if(!node) + return link.data; + + if(node.updateOutputData) + node.updateOutputData( link.origin_slot ); + else if(node.onExecute) + node.onExecute(); + + return link.data; +} + +/** +* Retrieves the input data from one slot using its name instead of slot number +* @method getInputDataByName +* @param {String} slot_name +* @param {boolean} force_update if set to true it will force the connected node of this slot to output data into this link +* @return {*} data or if it is not connected returns null +*/ +LGraphNode.prototype.getInputDataByName = function( slot_name, force_update ) +{ + var slot = this.findInputSlot( slot_name ); + if( slot == -1 ) + return null; + return this.getInputData( slot, force_update ); +} + + +/** +* tells you if there is a connection in one input slot +* @method isInputConnected +* @param {number} slot +* @return {boolean} +*/ +LGraphNode.prototype.isInputConnected = function(slot) +{ + if(!this.inputs) + return false; + return (slot < this.inputs.length && this.inputs[slot].link != null); +} + +/** +* tells you info about an input connection (which node, type, etc) +* @method getInputInfo +* @param {number} slot +* @return {Object} object or null { link: id, name: string, type: string or 0 } +*/ +LGraphNode.prototype.getInputInfo = function(slot) +{ + if(!this.inputs) + return null; + if(slot < this.inputs.length) + return this.inputs[slot]; + return null; +} + +/** +* returns the node connected in the input slot +* @method getInputNode +* @param {number} slot +* @return {LGraphNode} node or null +*/ +LGraphNode.prototype.getInputNode = function( slot ) +{ + if(!this.inputs) + return null; + if(slot >= this.inputs.length) + return null; + var input = this.inputs[slot]; + if(!input || input.link === null) + return null; + var link_info = this.graph.links[ input.link ]; + if(!link_info) + return null; + return this.graph.getNodeById( link_info.origin_id ); +} + + +/** +* returns the value of an input with this name, otherwise checks if there is a property with that name +* @method getInputOrProperty +* @param {string} name +* @return {*} value +*/ +LGraphNode.prototype.getInputOrProperty = function( name ) +{ + if(!this.inputs || !this.inputs.length) + return this.properties ? this.properties[name] : null; + + for(var i = 0, l = this.inputs.length; i < l; ++i) + if(name == this.inputs[i].name) + { + var link_id = this.inputs[i].link; + var link = this.graph.links[ link_id ]; + return link ? link.data : null; + } + return this.properties[name]; +} + + + + +/** +* tells you the last output data that went in that slot +* @method getOutputData +* @param {number} slot +* @return {Object} object or null +*/ +LGraphNode.prototype.getOutputData = function(slot) +{ + if(!this.outputs) + return null; + if(slot >= this.outputs.length) + return null; + + var info = this.outputs[slot]; + return info._data; +} + + +/** +* tells you info about an output connection (which node, type, etc) +* @method getOutputInfo +* @param {number} slot +* @return {Object} object or null { name: string, type: string, links: [ ids of links in number ] } +*/ +LGraphNode.prototype.getOutputInfo = function(slot) +{ + if(!this.outputs) + return null; + if(slot < this.outputs.length) + return this.outputs[slot]; + return null; +} + + +/** +* tells you if there is a connection in one output slot +* @method isOutputConnected +* @param {number} slot +* @return {boolean} +*/ +LGraphNode.prototype.isOutputConnected = function(slot) +{ + if(!this.outputs) + return false; + return (slot < this.outputs.length && this.outputs[slot].links && this.outputs[slot].links.length); +} + +/** +* tells you if there is any connection in the output slots +* @method isAnyOutputConnected +* @return {boolean} +*/ +LGraphNode.prototype.isAnyOutputConnected = function() +{ + if(!this.outputs) + return false; + for(var i = 0; i < this.outputs.length; ++i) + if( this.outputs[i].links && this.outputs[i].links.length ) + return true; + return false; +} + + +/** +* retrieves all the nodes connected to this output slot +* @method getOutputNodes +* @param {number} slot +* @return {array} +*/ +LGraphNode.prototype.getOutputNodes = function(slot) +{ + if(!this.outputs || this.outputs.length == 0) + return null; + + if(slot >= this.outputs.length) + return null; + + var output = this.outputs[slot]; + if(!output.links || output.links.length == 0) + return null; + + var r = []; + for(var i = 0; i < output.links.length; i++) + { + var link_id = output.links[i]; + var link = this.graph.links[ link_id ]; + if(link) + { + var target_node = this.graph.getNodeById( link.target_id ); + if( target_node ) + r.push( target_node ); + } + } + return r; +} + +/** +* Triggers an event in this node, this will trigger any output with the same name +* @method trigger +* @param {String} event name ( "on_play", ... ) if action is equivalent to false then the event is send to all +* @param {*} param +*/ +LGraphNode.prototype.trigger = function( action, param ) +{ + if( !this.outputs || !this.outputs.length ) + return; + + if(this.graph) + this.graph._last_trigger_time = LiteGraph.getTime(); + + for(var i = 0; i < this.outputs.length; ++i) + { + var output = this.outputs[ i ]; + if(!output || output.type !== LiteGraph.EVENT || (action && output.name != action) ) + continue; + this.triggerSlot( i, param ); + } +} + +/** +* Triggers an slot event in this node +* @method triggerSlot +* @param {Number} slot the index of the output slot +* @param {*} param +*/ +LGraphNode.prototype.triggerSlot = function( slot, param ) +{ + if( !this.outputs ) + return; + + var output = this.outputs[ slot ]; + if( !output ) + return; + + var links = output.links; + if(!links || !links.length) + return; + + if(this.graph) + this.graph._last_trigger_time = LiteGraph.getTime(); + + //for every link attached here + for(var k = 0; k < links.length; ++k) + { + var link_info = this.graph.links[ links[k] ]; + if(!link_info) //not connected + continue; + var node = this.graph.getNodeById( link_info.target_id ); + if(!node) //node not found? + continue; + + //used to mark events in graph + link_info._last_time = LiteGraph.getTime(); + + var target_connection = node.inputs[ link_info.target_slot ]; + + if(node.onAction) + node.onAction( target_connection.name, param ); + else if(node.mode === LiteGraph.ON_TRIGGER) + { + if(node.onExecute) + node.onExecute(param); + } + } +} + +/** +* add a new property to this node +* @method addProperty +* @param {string} name +* @param {*} default_value +* @param {string} type string defining the output type ("vec3","number",...) +* @param {Object} extra_info this can be used to have special properties of the property (like values, etc) +*/ +LGraphNode.prototype.addProperty = function( name, default_value, type, extra_info ) +{ + var o = { name: name, type: type, default_value: default_value }; + if(extra_info) + for(var i in extra_info) + o[i] = extra_info[i]; + if(!this.properties_info) + this.properties_info = []; + this.properties_info.push(o); + if(!this.properties) + this.properties = {}; + this.properties[ name ] = default_value; + return o; +} + + +//connections + +/** +* add a new output slot to use in this node +* @method addOutput +* @param {string} name +* @param {string} type string defining the output type ("vec3","number",...) +* @param {Object} extra_info this can be used to have special properties of an output (label, special color, position, etc) +*/ +LGraphNode.prototype.addOutput = function(name,type,extra_info) +{ + var o = { name: name, type: type, links: null }; + if(extra_info) + for(var i in extra_info) + o[i] = extra_info[i]; + + if(!this.outputs) + this.outputs = []; + this.outputs.push(o); + if(this.onOutputAdded) + this.onOutputAdded(o); + this.size = this.computeSize(); + return o; +} + +/** +* add a new output slot to use in this node +* @method addOutputs +* @param {Array} array of triplets like [[name,type,extra_info],[...]] +*/ +LGraphNode.prototype.addOutputs = function(array) +{ + for(var i = 0; i < array.length; ++i) + { + var info = array[i]; + var o = {name:info[0],type:info[1],link:null}; + if(array[2]) + for(var j in info[2]) + o[j] = info[2][j]; + + if(!this.outputs) + this.outputs = []; + this.outputs.push(o); + if(this.onOutputAdded) + this.onOutputAdded(o); + } + + this.size = this.computeSize(); +} + +/** +* remove an existing output slot +* @method removeOutput +* @param {number} slot +*/ +LGraphNode.prototype.removeOutput = function(slot) +{ + this.disconnectOutput(slot); + this.outputs.splice(slot,1); + this.size = this.computeSize(); + if(this.onOutputRemoved) + this.onOutputRemoved(slot); +} + +/** +* add a new input slot to use in this node +* @method addInput +* @param {string} name +* @param {string} type string defining the input type ("vec3","number",...), it its a generic one use 0 +* @param {Object} extra_info this can be used to have special properties of an input (label, color, position, etc) +*/ +LGraphNode.prototype.addInput = function(name,type,extra_info) +{ + type = type || 0; + var o = {name:name,type:type,link:null}; + if(extra_info) + for(var i in extra_info) + o[i] = extra_info[i]; + + if(!this.inputs) + this.inputs = []; + this.inputs.push(o); + this.size = this.computeSize(); + if(this.onInputAdded) + this.onInputAdded(o); + return o; +} + +/** +* add several new input slots in this node +* @method addInputs +* @param {Array} array of triplets like [[name,type,extra_info],[...]] +*/ +LGraphNode.prototype.addInputs = function(array) +{ + for(var i = 0; i < array.length; ++i) + { + var info = array[i]; + var o = {name:info[0], type:info[1], link:null}; + if(array[2]) + for(var j in info[2]) + o[j] = info[2][j]; + + if(!this.inputs) + this.inputs = []; + this.inputs.push(o); + if(this.onInputAdded) + this.onInputAdded(o); + } + + this.size = this.computeSize(); +} + +/** +* remove an existing input slot +* @method removeInput +* @param {number} slot +*/ +LGraphNode.prototype.removeInput = function(slot) +{ + this.disconnectInput(slot); + this.inputs.splice(slot,1); + this.size = this.computeSize(); + if(this.onInputRemoved) + this.onInputRemoved(slot); +} + +/** +* add an special connection to this node (used for special kinds of graphs) +* @method addConnection +* @param {string} name +* @param {string} type string defining the input type ("vec3","number",...) +* @param {[x,y]} pos position of the connection inside the node +* @param {string} direction if is input or output +*/ +LGraphNode.prototype.addConnection = function(name,type,pos,direction) +{ + var o = { + name: name, + type: type, + pos: pos, + direction: direction, + links: null + }; + this.connections.push( o ); + return o; +} + +/** +* computes the size of a node according to its inputs and output slots +* @method computeSize +* @param {number} minHeight +* @return {number} the total size +*/ +LGraphNode.prototype.computeSize = function( minHeight, out ) +{ + var rows = Math.max( this.inputs ? this.inputs.length : 1, this.outputs ? this.outputs.length : 1); + var size = out || new Float32Array([0,0]); + rows = Math.max(rows, 1); + var font_size = LiteGraph.NODE_TEXT_SIZE; //although it should be graphcanvas.inner_text_font size + size[1] = (this.constructor.slot_start_y || 0) + rows * (font_size + 1) + 4; + if( this.widgets && this.widgets.length ) + size[1] += this.widgets.length * (LiteGraph.NODE_WIDGET_HEIGHT + 4) + 8; + + var font_size = font_size; + var title_width = compute_text_size( this.title ); + var input_width = 0; + var output_width = 0; + + if(this.inputs) + for(var i = 0, l = this.inputs.length; i < l; ++i) + { + var input = this.inputs[i]; + var text = input.label || input.name || ""; + var text_width = compute_text_size( text ); + if(input_width < text_width) + input_width = text_width; + } + + if(this.outputs) + for(var i = 0, l = this.outputs.length; i < l; ++i) + { + var output = this.outputs[i]; + var text = output.label || output.name || ""; + var text_width = compute_text_size( text ); + if(output_width < text_width) + output_width = text_width; + } + + size[0] = Math.max( input_width + output_width + 10, title_width ); + size[0] = Math.max( size[0], LiteGraph.NODE_WIDTH ); + if(this.widgets && this.widgets.length) + size[0] = Math.max( size[0], LiteGraph.NODE_WIDTH * 1.5 ); + + if(this.onResize) + this.onResize(size); + + function compute_text_size( text ) + { + if(!text) + return 0; + return font_size * text.length * 0.6; + } + + return size; +} + +/** +* Allows to pass +* +* @method addWidget +* @return {Float32Array[4]} the total size +*/ +LGraphNode.prototype.addWidget = function( type, name, value, callback, options ) +{ + if(!this.widgets) + this.widgets = []; + var w = { + type: type.toLowerCase(), + name: name, + value: value, + callback: callback, + options: options || {} + }; + + if(w.options.y !== undefined ) + w.y = w.options.y; + + if( !callback ) + console.warn("LiteGraph addWidget('button',...) without a callback"); + if( type == "combo" && !w.options.values ) + throw("LiteGraph addWidget('combo',...) requires to pass values in options: { values:['red','blue'] }"); + this.widgets.push(w); + return w; +} + + +/** +* returns the bounding of the object, used for rendering purposes +* bounding is: [topleft_cornerx, topleft_cornery, width, height] +* @method getBounding +* @return {Float32Array[4]} the total size +*/ +LGraphNode.prototype.getBounding = function( out ) +{ + out = out || new Float32Array(4); + out[0] = this.pos[0] - 4; + out[1] = this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT; + out[2] = this.size[0] + 4; + out[3] = this.size[1] + LiteGraph.NODE_TITLE_HEIGHT; + return out; +} + +/** +* checks if a point is inside the shape of a node +* @method isPointInside +* @param {number} x +* @param {number} y +* @return {boolean} +*/ +LGraphNode.prototype.isPointInside = function( x, y, margin, skip_title ) +{ + margin = margin || 0; + + var margin_top = this.graph && this.graph.isLive() ? 0 : 20; + if(skip_title) + margin_top = 0; + if(this.flags && this.flags.collapsed) + { + //if ( distance([x,y], [this.pos[0] + this.size[0]*0.5, this.pos[1] + this.size[1]*0.5]) < LiteGraph.NODE_COLLAPSED_RADIUS) + if( isInsideRectangle( x, y, this.pos[0] - margin, this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT - margin, (this._collapsed_width||LiteGraph.NODE_COLLAPSED_WIDTH) + 2 * margin, LiteGraph.NODE_TITLE_HEIGHT + 2 * margin ) ) + return true; + } + else if ( (this.pos[0] - 4 - margin) < x && (this.pos[0] + this.size[0] + 4 + margin) > x + && (this.pos[1] - margin_top - margin) < y && (this.pos[1] + this.size[1] + margin) > y) + return true; + return false; +} + +/** +* checks if a point is inside a node slot, and returns info about which slot +* @method getSlotInPosition +* @param {number} x +* @param {number} y +* @return {Object} if found the object contains { input|output: slot object, slot: number, link_pos: [x,y] } +*/ +LGraphNode.prototype.getSlotInPosition = function( x, y ) +{ + //search for inputs + if(this.inputs) + for(var i = 0, l = this.inputs.length; i < l; ++i) + { + var input = this.inputs[i]; + var link_pos = this.getConnectionPos( true,i ); + if( isInsideRectangle(x, y, link_pos[0] - 10, link_pos[1] - 5, 20,10) ) + return { input: input, slot: i, link_pos: link_pos, locked: input.locked }; + } + + if(this.outputs) + for(var i = 0, l = this.outputs.length; i < l; ++i) + { + var output = this.outputs[i]; + var link_pos = this.getConnectionPos(false,i); + if( isInsideRectangle(x, y, link_pos[0] - 10, link_pos[1] - 5, 20,10) ) + return { output: output, slot: i, link_pos: link_pos, locked: output.locked }; + } + + return null; +} + +/** +* returns the input slot with a given name (used for dynamic slots), -1 if not found +* @method findInputSlot +* @param {string} name the name of the slot +* @return {number} the slot (-1 if not found) +*/ +LGraphNode.prototype.findInputSlot = function(name) +{ + if(!this.inputs) + return -1; + for(var i = 0, l = this.inputs.length; i < l; ++i) + if(name == this.inputs[i].name) + return i; + return -1; +} + +/** +* returns the output slot with a given name (used for dynamic slots), -1 if not found +* @method findOutputSlot +* @param {string} name the name of the slot +* @return {number} the slot (-1 if not found) +*/ +LGraphNode.prototype.findOutputSlot = function(name) +{ + if(!this.outputs) return -1; + for(var i = 0, l = this.outputs.length; i < l; ++i) + if(name == this.outputs[i].name) + return i; + return -1; +} + +/** +* connect this node output to the input of another node +* @method connect +* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) +* @param {LGraphNode} node the target node +* @param {number_or_string} target_slot the input slot of the target node (could be the number of the slot or the string with the name of the slot, or -1 to connect a trigger) +* @return {boolean} if it was connected succesfully +*/ +LGraphNode.prototype.connect = function( slot, target_node, target_slot ) +{ + target_slot = target_slot || 0; + + if(!this.graph) //could be connected before adding it to a graph + { + console.log("Connect: Error, node doesnt belong to any graph. Nodes must be added first to a graph before connecting them."); //due to link ids being associated with graphs + return false; + } + + + //seek for the output slot + if( slot.constructor === String ) + { + slot = this.findOutputSlot(slot); + if(slot == -1) + { + if(LiteGraph.debug) + console.log("Connect: Error, no slot of name " + slot); + return false; + } + } + else if(!this.outputs || slot >= this.outputs.length) + { + if(LiteGraph.debug) + console.log("Connect: Error, slot number not found"); + return false; + } + + if(target_node && target_node.constructor === Number) + target_node = this.graph.getNodeById( target_node ); + if(!target_node) + throw("target node is null"); + + //avoid loopback + if(target_node == this) + return false; + + //you can specify the slot by name + if(target_slot.constructor === String) + { + target_slot = target_node.findInputSlot( target_slot ); + if(target_slot == -1) + { + if(LiteGraph.debug) + console.log("Connect: Error, no slot of name " + target_slot); + return false; + } + } + else if( target_slot === LiteGraph.EVENT ) + { + //search for first slot with event? + /* + //create input for trigger + var input = target_node.addInput("onTrigger", LiteGraph.EVENT ); + target_slot = target_node.inputs.length - 1; //last one is the one created + target_node.mode = LiteGraph.ON_TRIGGER; + */ + return false; + } + else if( !target_node.inputs || target_slot >= target_node.inputs.length ) + { + if(LiteGraph.debug) + console.log("Connect: Error, slot number not found"); + return false; + } + + //if there is something already plugged there, disconnect + if(target_node.inputs[ target_slot ].link != null ) + target_node.disconnectInput( target_slot ); + + //why here?? + //this.setDirtyCanvas(false,true); + //this.graph.connectionChange( this ); + + var output = this.outputs[slot]; + + //allows nodes to block connection + if(target_node.onConnectInput) + if( target_node.onConnectInput( target_slot, output.type, output ) === false) + return false; + + var input = target_node.inputs[target_slot]; + + if( LiteGraph.isValidConnection( output.type, input.type ) ) + { + var link_info = { + id: this.graph.last_link_id++, + type: input.type, + origin_id: this.id, + origin_slot: slot, + target_id: target_node.id, + target_slot: target_slot + }; + + //add to graph links list + this.graph.links[ link_info.id ] = link_info; + + //connect in output + if( output.links == null ) + output.links = []; + output.links.push( link_info.id ); + //connect in input + target_node.inputs[target_slot].link = link_info.id; + if(this.graph) + this.graph._version++; + if(this.onConnectionsChange) + this.onConnectionsChange( LiteGraph.OUTPUT, slot, true, link_info, output ); //link_info has been created now, so its updated + if(target_node.onConnectionsChange) + target_node.onConnectionsChange( LiteGraph.INPUT, target_slot, true, link_info, input ); + if( this.graph && this.graph.onNodeConnectionChange ) + { + this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, target_slot, this, slot ); + this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot, target_node, target_slot ); + } + } + + this.setDirtyCanvas(false,true); + this.graph.connectionChange( this ); + + return true; +} + +/** +* disconnect one output to an specific node +* @method disconnectOutput +* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) +* @param {LGraphNode} target_node the target node to which this slot is connected [Optional, if not target_node is specified all nodes will be disconnected] +* @return {boolean} if it was disconnected succesfully +*/ +LGraphNode.prototype.disconnectOutput = function( slot, target_node ) +{ + if( slot.constructor === String ) + { + slot = this.findOutputSlot(slot); + if(slot == -1) + { + if(LiteGraph.debug) + console.log("Connect: Error, no slot of name " + slot); + return false; + } + } + else if(!this.outputs || slot >= this.outputs.length) + { + if(LiteGraph.debug) + console.log("Connect: Error, slot number not found"); + return false; + } + + //get output slot + var output = this.outputs[slot]; + if(!output || !output.links || output.links.length == 0) + return false; + + //one of the output links in this slot + if(target_node) + { + if(target_node.constructor === Number) + target_node = this.graph.getNodeById( target_node ); + if(!target_node) + throw("Target Node not found"); + + for(var i = 0, l = output.links.length; i < l; i++) + { + var link_id = output.links[i]; + var link_info = this.graph.links[ link_id ]; + + //is the link we are searching for... + if( link_info.target_id == target_node.id ) + { + output.links.splice(i,1); //remove here + var input = target_node.inputs[ link_info.target_slot ]; + input.link = null; //remove there + delete this.graph.links[ link_id ]; //remove the link from the links pool + if(this.graph) + this.graph._version++; + if(target_node.onConnectionsChange) + target_node.onConnectionsChange( LiteGraph.INPUT, link_info.target_slot, false, link_info, input ); //link_info hasnt been modified so its ok + if(this.onConnectionsChange) + this.onConnectionsChange( LiteGraph.OUTPUT, slot, false, link_info, output ); + if( this.graph && this.graph.onNodeConnectionChange ) + this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot ); + if( this.graph && this.graph.onNodeConnectionChange ) + { + this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot ); + this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, link_info.target_slot ); + } + break; + } + } + } + else //all the links in this output slot + { + for(var i = 0, l = output.links.length; i < l; i++) + { + var link_id = output.links[i]; + var link_info = this.graph.links[ link_id ]; + if(!link_info) //bug: it happens sometimes + continue; + + var target_node = this.graph.getNodeById( link_info.target_id ); + var input = null; + if(this.graph) + this.graph._version++; + if(target_node) + { + input = target_node.inputs[ link_info.target_slot ]; + input.link = null; //remove other side link + if(target_node.onConnectionsChange) + target_node.onConnectionsChange( LiteGraph.INPUT, link_info.target_slot, false, link_info, input ); //link_info hasnt been modified so its ok + if( this.graph && this.graph.onNodeConnectionChange ) + this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, link_info.target_slot ); + } + delete this.graph.links[ link_id ]; //remove the link from the links pool + if(this.onConnectionsChange) + this.onConnectionsChange( LiteGraph.OUTPUT, slot, false, link_info, output ); + if( this.graph && this.graph.onNodeConnectionChange ) + { + this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, this, slot ); + this.graph.onNodeConnectionChange( LiteGraph.INPUT, target_node, link_info.target_slot ); + } + } + output.links = null; + } + + + this.setDirtyCanvas(false,true); + this.graph.connectionChange( this ); + return true; +} + +/** +* disconnect one input +* @method disconnectInput +* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) +* @return {boolean} if it was disconnected succesfully +*/ +LGraphNode.prototype.disconnectInput = function( slot ) +{ + //seek for the output slot + if( slot.constructor === String ) + { + slot = this.findInputSlot(slot); + if(slot == -1) + { + if(LiteGraph.debug) + console.log("Connect: Error, no slot of name " + slot); + return false; + } + } + else if(!this.inputs || slot >= this.inputs.length) + { + if(LiteGraph.debug) + console.log("Connect: Error, slot number not found"); + return false; + } + + var input = this.inputs[slot]; + if(!input) + return false; + + var link_id = this.inputs[slot].link; + this.inputs[slot].link = null; + + //remove other side + var link_info = this.graph.links[ link_id ]; + if( link_info ) + { + var target_node = this.graph.getNodeById( link_info.origin_id ); + if(!target_node) + return false; + + var output = target_node.outputs[ link_info.origin_slot ]; + if(!output || !output.links || output.links.length == 0) + return false; + + //search in the inputs list for this link + for(var i = 0, l = output.links.length; i < l; i++) + { + if( output.links[i] == link_id ) + { + output.links.splice(i,1); + break; + } + } + + delete this.graph.links[ link_id ]; //remove from the pool + if(this.graph) + this.graph._version++; + if( this.onConnectionsChange ) + this.onConnectionsChange( LiteGraph.INPUT, slot, false, link_info, input ); + if( target_node.onConnectionsChange ) + target_node.onConnectionsChange( LiteGraph.OUTPUT, i, false, link_info, output ); + if( this.graph && this.graph.onNodeConnectionChange ) + { + this.graph.onNodeConnectionChange( LiteGraph.OUTPUT, target_node, i ); + this.graph.onNodeConnectionChange( LiteGraph.INPUT, this, slot ); + } + } + + this.setDirtyCanvas(false,true); + this.graph.connectionChange( this ); + return true; +} + +/** +* returns the center of a connection point in canvas coords +* @method getConnectionPos +* @param {boolean} is_input true if if a input slot, false if it is an output +* @param {number_or_string} slot (could be the number of the slot or the string with the name of the slot) +* @return {[x,y]} the position +**/ +LGraphNode.prototype.getConnectionPos = function( is_input, slot_number ) +{ + if(this.flags.collapsed) + { + if(is_input) + return [this.pos[0], this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT * 0.5]; + else + return [this.pos[0] + (this._collapsed_width || LiteGraph.NODE_COLLAPSED_WIDTH), this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT * 0.5]; + } + + if(is_input && slot_number == -1) + { + return [this.pos[0] + 10, this.pos[1] + 10]; + } + + //hardcoded pos + if(is_input && this.inputs && this.inputs.length > slot_number && this.inputs[slot_number].pos) + return [this.pos[0] + this.inputs[slot_number].pos[0],this.pos[1] + this.inputs[slot_number].pos[1]]; + else if(!is_input && this.outputs && this.outputs.length > slot_number && this.outputs[slot_number].pos) + return [this.pos[0] + this.outputs[slot_number].pos[0],this.pos[1] + this.outputs[slot_number].pos[1]]; + + //horizontal distributed slots + if(this.flags.horizontal) + { + if(is_input) + return [this.pos[0] + (slot_number + 0.5) * (this.size[0] / (this.inputs.length)), this.pos[1] - LiteGraph.NODE_TITLE_HEIGHT ]; + return [this.pos[0] + (slot_number + 0.5) * (this.size[0] / (this.outputs.length)), this.pos[1] + this.size[1] ]; + } + + //default + if(is_input) + return [this.pos[0] , this.pos[1] + 10 + slot_number * LiteGraph.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0) ]; + return [this.pos[0] + this.size[0] + 1, this.pos[1] + 10 + slot_number * LiteGraph.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0)]; +} + +/* Force align to grid */ +LGraphNode.prototype.alignToGrid = function() +{ + this.pos[0] = LiteGraph.CANVAS_GRID_SIZE * Math.round(this.pos[0] / LiteGraph.CANVAS_GRID_SIZE); + this.pos[1] = LiteGraph.CANVAS_GRID_SIZE * Math.round(this.pos[1] / LiteGraph.CANVAS_GRID_SIZE); +} + + +/* Console output */ +LGraphNode.prototype.trace = function(msg) +{ + if(!this.console) + this.console = []; + this.console.push(msg); + if(this.console.length > LGraphNode.MAX_CONSOLE) + this.console.shift(); + + this.graph.onNodeTrace(this,msg); +} + +/* Forces to redraw or the main canvas (LGraphNode) or the bg canvas (links) */ +LGraphNode.prototype.setDirtyCanvas = function(dirty_foreground, dirty_background) +{ + if(!this.graph) + return; + this.graph.sendActionToCanvas("setDirty",[dirty_foreground, dirty_background]); +} + +LGraphNode.prototype.loadImage = function(url) +{ + var img = new Image(); + img.src = LiteGraph.node_images_path + url; + img.ready = false; + + var that = this; + img.onload = function() { + this.ready = true; + that.setDirtyCanvas(true); + } + return img; +} + +//safe LGraphNode action execution (not sure if safe) +/* +LGraphNode.prototype.executeAction = function(action) +{ + if(action == "") return false; + + if( action.indexOf(";") != -1 || action.indexOf("}") != -1) + { + this.trace("Error: Action contains unsafe characters"); + return false; + } + + var tokens = action.split("("); + var func_name = tokens[0]; + if( typeof(this[func_name]) != "function") + { + this.trace("Error: Action not found on node: " + func_name); + return false; + } + + var code = action; + + try + { + var _foo = eval; + eval = null; + (new Function("with(this) { " + code + "}")).call(this); + eval = _foo; + } + catch (err) + { + this.trace("Error executing action {" + action + "} :" + err); + return false; + } + + return true; +} +*/ + +/* Allows to get onMouseMove and onMouseUp events even if the mouse is out of focus */ +LGraphNode.prototype.captureInput = function(v) +{ + if(!this.graph || !this.graph.list_of_graphcanvas) + return; + + var list = this.graph.list_of_graphcanvas; + + for(var i = 0; i < list.length; ++i) + { + var c = list[i]; + //releasing somebody elses capture?! + if(!v && c.node_capturing_input != this) + continue; + + //change + c.node_capturing_input = v ? this : null; + } +} + +/** +* Collapse the node to make it smaller on the canvas +* @method collapse +**/ +LGraphNode.prototype.collapse = function( force ) +{ + this.graph._version++; + if(this.constructor.collapsable === false && !force) + return; + if(!this.flags.collapsed) + this.flags.collapsed = true; + else + this.flags.collapsed = false; + this.setDirtyCanvas(true,true); +} + +/** +* Forces the node to do not move or realign on Z +* @method pin +**/ + +LGraphNode.prototype.pin = function(v) +{ + this.graph._version++; + if(v === undefined) + this.flags.pinned = !this.flags.pinned; + else + this.flags.pinned = v; +} + +LGraphNode.prototype.localToScreen = function(x,y, graphcanvas) +{ + return [(x + this.pos[0]) * graphcanvas.scale + graphcanvas.offset[0], + (y + this.pos[1]) * graphcanvas.scale + graphcanvas.offset[1]]; +} + + + + +function LGraphGroup( title ) +{ + this._ctor( title ); +} + +global.LGraphGroup = LiteGraph.LGraphGroup = LGraphGroup; + +LGraphGroup.prototype._ctor = function( title ) +{ + this.title = title || "Group"; + this._bounding = new Float32Array([10,10,140,80]); + this._pos = this._bounding.subarray(0,2); + this._size = this._bounding.subarray(2,4); + this._nodes = []; + this.color = LGraphCanvas.node_colors.pale_blue ? LGraphCanvas.node_colors.pale_blue.groupcolor : "#AAA"; + this.graph = null; + + Object.defineProperty( this, "pos", { + set: function(v) + { + if(!v || v.length < 2) + return; + this._pos[0] = v[0]; + this._pos[1] = v[1]; + }, + get: function() + { + return this._pos; + }, + enumerable: true + }); + + Object.defineProperty( this, "size", { + set: function(v) + { + if(!v || v.length < 2) + return; + this._size[0] = Math.max(140,v[0]); + this._size[1] = Math.max(80,v[1]); + }, + get: function() + { + return this._size; + }, + enumerable: true + }); +} + +LGraphGroup.prototype.configure = function(o) +{ + this.title = o.title; + this._bounding.set( o.bounding ); + this.color = o.color; +} + +LGraphGroup.prototype.serialize = function() +{ + var b = this._bounding; + return { + title: this.title, + bounding: [ Math.round(b[0]), Math.round(b[1]), Math.round(b[2]), Math.round(b[3]) ], + color: this.color + }; +} + +LGraphGroup.prototype.move = function(deltax, deltay, ignore_nodes) +{ + this._pos[0] += deltax; + this._pos[1] += deltay; + if(ignore_nodes) + return; + for(var i = 0; i < this._nodes.length; ++i) + { + var node = this._nodes[i]; + node.pos[0] += deltax; + node.pos[1] += deltay; + } +} + +LGraphGroup.prototype.recomputeInsideNodes = function() +{ + this._nodes.length = 0; + var nodes = this.graph._nodes; + var node_bounding = new Float32Array(4); + + for(var i = 0; i < nodes.length; ++i) + { + var node = nodes[i]; + node.getBounding( node_bounding ); + if(!overlapBounding( this._bounding, node_bounding )) + continue; //out of the visible area + this._nodes.push( node ); + } +} + +LGraphGroup.prototype.isPointInside = LGraphNode.prototype.isPointInside; +LGraphGroup.prototype.setDirtyCanvas = LGraphNode.prototype.setDirtyCanvas; + +//********************************************************************************* +// LGraphCanvas: LGraph renderer CLASS +//********************************************************************************* + +/** +* This class is in charge of rendering one graph inside a canvas. And provides all the interaction required. +* Valid callbacks are: onNodeSelected, onNodeDeselected, onShowNodePanel, onNodeDblClicked +* +* @class LGraphCanvas +* @constructor +* @param {HTMLCanvas} canvas the canvas where you want to render (it accepts a selector in string format or the canvas element itself) +* @param {LGraph} graph [optional] +* @param {Object} options [optional] { skip_rendering, autoresize } +*/ +function LGraphCanvas( canvas, graph, options ) +{ + options = options || {}; + + //if(graph === undefined) + // throw ("No graph assigned"); + this.background_image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQBJREFUeNrs1rEKwjAUhlETUkj3vP9rdmr1Ysammk2w5wdxuLgcMHyptfawuZX4pJSWZTnfnu/lnIe/jNNxHHGNn//HNbbv+4dr6V+11uF527arU7+u63qfa/bnmh8sWLBgwYJlqRf8MEptXPBXJXa37BSl3ixYsGDBMliwFLyCV/DeLIMFCxYsWLBMwSt4Be/NggXLYMGCBUvBK3iNruC9WbBgwYJlsGApeAWv4L1ZBgsWLFiwYJmCV/AK3psFC5bBggULloJX8BpdwXuzYMGCBctgwVLwCl7Be7MMFixYsGDBsu8FH1FaSmExVfAxBa/gvVmwYMGCZbBg/W4vAQYA5tRF9QYlv/QAAAAASUVORK5CYII=' + + if(canvas && canvas.constructor === String ) + canvas = document.querySelector( canvas ); + + this.max_zoom = 10; + this.min_zoom = 0.1; + this.zoom_modify_alpha = true; //otherwise it generates ugly patterns when scaling down too much + + this.title_text_font = "bold "+LiteGraph.NODE_TEXT_SIZE+"px Arial"; + this.inner_text_font = "normal "+LiteGraph.NODE_SUBTEXT_SIZE+"px Arial"; + this.node_title_color = LiteGraph.NODE_TITLE_COLOR; + this.default_link_color = LiteGraph.LINK_COLOR; + this.default_connection_color = { + input_off: "#AAB", + input_on: "#7F7", + output_off: "#AAB", + output_on: "#7F7" + }; + + this.highquality_render = true; + this.use_gradients = false; //set to true to render titlebar with gradients + this.editor_alpha = 1; //used for transition + this.pause_rendering = false; + this.render_shadows = true; + this.clear_background = true; + + this.render_only_selected = true; + this.live_mode = false; + this.show_info = true; + this.allow_dragcanvas = true; + this.allow_dragnodes = true; + this.allow_interaction = true; //allow to control widgets, buttons, collapse, etc + this.allow_searchbox = true; + this.allow_reconnect_links = false; //allows to change a connection with having to redo it again + this.drag_mode = false; + this.dragging_rectangle = null; + + this.filter = null; //allows to filter to only accept some type of nodes in a graph + + this.always_render_background = false; + this.render_canvas_border = true; + this.render_connections_shadows = false; //too much cpu + this.render_connections_border = true; + this.render_curved_connections = true; + this.render_connection_arrows = true; + this.render_execution_order = false; + + this.canvas_mouse = [0,0]; //mouse in canvas graph coordinates, where 0,0 is the top-left corner of the blue rectangle + + //to personalize the search box + this.onSearchBox = null; + this.onSearchBoxSelection = null; + + this.connections_width = 3; + this.round_radius = 8; + + this.current_node = null; + this.node_widget = null; //used for widgets + this.last_mouse_position = [0,0]; + this.visible_area = new Float32Array(4); + + //link canvas and graph + if(graph) + graph.attachCanvas(this); + + this.setCanvas( canvas ); + this.clear(); + + if(!options.skip_render) + this.startRendering(); + + this.autoresize = options.autoresize; +} + +global.LGraphCanvas = LiteGraph.LGraphCanvas = LGraphCanvas; + +LGraphCanvas.link_type_colors = {"-1":"#F85",'number':"#AAC","node":"#DCA"}; +LGraphCanvas.gradients = {}; //cache of gradients + +/** +* clears all the data inside +* +* @method clear +*/ +LGraphCanvas.prototype.clear = function() +{ + this.frame = 0; + this.last_draw_time = 0; + this.render_time = 0; + this.fps = 0; + + this.scale = 1; + this.offset = [0,0]; + + this.dragging_rectangle = null; + + this.selected_nodes = {}; + this.selected_group = null; + + this.visible_nodes = []; + this.node_dragged = null; + this.node_over = null; + this.node_capturing_input = null; + this.connecting_node = null; + this.highlighted_links = {}; + + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + this.dirty_area = null; + + this.node_in_panel = null; + this.node_widget = null; + + this.last_mouse = [0,0]; + this.last_mouseclick = 0; + this.visible_area.set([0,0,0,0]); + + if(this.onClear) + this.onClear(); + //this.UIinit(); +} + +/** +* assigns a graph, you can reasign graphs to the same canvas +* +* @method setGraph +* @param {LGraph} graph +*/ +LGraphCanvas.prototype.setGraph = function( graph, skip_clear ) +{ + if(this.graph == graph) + return; + + if(!skip_clear) + this.clear(); + + if(!graph && this.graph) + { + this.graph.detachCanvas(this); + return; + } + + /* + if(this.graph) + this.graph.canvas = null; //remove old graph link to the canvas + this.graph = graph; + if(this.graph) + this.graph.canvas = this; + */ + graph.attachCanvas(this); + this.setDirty(true,true); +} + +/** +* opens a graph contained inside a node in the current graph +* +* @method openSubgraph +* @param {LGraph} graph +*/ +LGraphCanvas.prototype.openSubgraph = function(graph) +{ + if(!graph) + throw("graph cannot be null"); + + if(this.graph == graph) + throw("graph cannot be the same"); + + this.clear(); + + if(this.graph) + { + if(!this._graph_stack) + this._graph_stack = []; + this._graph_stack.push(this.graph); + } + + graph.attachCanvas(this); + this.setDirty(true,true); +} + +/** +* closes a subgraph contained inside a node +* +* @method closeSubgraph +* @param {LGraph} assigns a graph +*/ +LGraphCanvas.prototype.closeSubgraph = function() +{ + if(!this._graph_stack || this._graph_stack.length == 0) + return; + var graph = this._graph_stack.pop(); + this.selected_nodes = {}; + this.highlighted_links = {}; + graph.attachCanvas(this); + this.setDirty(true,true); +} + +/** +* assigns a canvas +* +* @method setCanvas +* @param {Canvas} assigns a canvas (also accepts the ID of the element (not a selector) +*/ +LGraphCanvas.prototype.setCanvas = function( canvas, skip_events ) +{ + var that = this; + + if(canvas) + { + if( canvas.constructor === String ) + { + canvas = document.getElementById(canvas); + if(!canvas) + throw("Error creating LiteGraph canvas: Canvas not found"); + } + } + + if(canvas === this.canvas) + return; + + if(!canvas && this.canvas) + { + //maybe detach events from old_canvas + if(!skip_events) + this.unbindEvents(); + } + + this.canvas = canvas; + + if(!canvas) + return; + + //this.canvas.tabindex = "1000"; + canvas.className += " lgraphcanvas"; + canvas.data = this; + + //bg canvas: used for non changing stuff + this.bgcanvas = null; + if(!this.bgcanvas) + { + this.bgcanvas = document.createElement("canvas"); + this.bgcanvas.width = this.canvas.width; + this.bgcanvas.height = this.canvas.height; + } + + if(canvas.getContext == null) + { + if( canvas.localName != "canvas" ) + throw("Element supplied for LGraphCanvas must be a element, you passed a " + canvas.localName ); + throw("This browser doesnt support Canvas"); + } + + var ctx = this.ctx = canvas.getContext("2d"); + if(ctx == null) + { + if(!canvas.webgl_enabled) + console.warn("This canvas seems to be WebGL, enabling WebGL renderer"); + this.enableWebGL(); + } + + //input: (move and up could be unbinded) + this._mousemove_callback = this.processMouseMove.bind(this); + this._mouseup_callback = this.processMouseUp.bind(this); + + if(!skip_events) + this.bindEvents(); +} + +//used in some events to capture them +LGraphCanvas.prototype._doNothing = function doNothing(e) { e.preventDefault(); return false; }; +LGraphCanvas.prototype._doReturnTrue = function doNothing(e) { e.preventDefault(); return true; }; + +/** +* binds mouse, keyboard, touch and drag events to the canvas +* @method bindEvents +**/ +LGraphCanvas.prototype.bindEvents = function() +{ + if( this._events_binded ) + { + console.warn("LGraphCanvas: events already binded"); + return; + } + + var canvas = this.canvas; + var ref_window = this.getCanvasWindow(); + var document = ref_window.document; //hack used when moving canvas between windows + + this._mousedown_callback = this.processMouseDown.bind(this); + this._mousewheel_callback = this.processMouseWheel.bind(this); + + canvas.addEventListener("mousedown", this._mousedown_callback, true ); //down do not need to store the binded + canvas.addEventListener("mousemove", this._mousemove_callback ); + canvas.addEventListener("mousewheel", this._mousewheel_callback, false); + + canvas.addEventListener("contextmenu", this._doNothing ); + canvas.addEventListener("DOMMouseScroll", this._mousewheel_callback, false); + + //touch events + //if( 'touchstart' in document.documentElement ) + { + canvas.addEventListener("touchstart", this.touchHandler, true); + canvas.addEventListener("touchmove", this.touchHandler, true); + canvas.addEventListener("touchend", this.touchHandler, true); + canvas.addEventListener("touchcancel", this.touchHandler, true); + } + + //Keyboard ****************** + this._key_callback = this.processKey.bind(this); + + canvas.addEventListener("keydown", this._key_callback, true ); + document.addEventListener("keyup", this._key_callback, true ); //in document, otherwise it doesnt fire keyup + + //Droping Stuff over nodes ************************************ + this._ondrop_callback = this.processDrop.bind(this); + + canvas.addEventListener("dragover", this._doNothing, false ); + canvas.addEventListener("dragend", this._doNothing, false ); + canvas.addEventListener("drop", this._ondrop_callback, false ); + canvas.addEventListener("dragenter", this._doReturnTrue, false ); + + this._events_binded = true; +} + +/** +* unbinds mouse events from the canvas +* @method unbindEvents +**/ +LGraphCanvas.prototype.unbindEvents = function() +{ + if( !this._events_binded ) + { + console.warn("LGraphCanvas: no events binded"); + return; + } + + var ref_window = this.getCanvasWindow(); + var document = ref_window.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 ); + document.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._mousedown_callback = null; + this._mousewheel_callback = null; + this._key_callback = null; + this._ondrop_callback = null; + + this._events_binded = false; +} + +LGraphCanvas.getFileExtension = function (url) +{ + var question = url.indexOf("?"); + if(question != -1) + url = url.substr(0,question); + var point = url.lastIndexOf("."); + if(point == -1) + return ""; + return url.substr(point+1).toLowerCase(); +} + +/** +* this function allows to render the canvas using WebGL instead of Canvas2D +* this is useful if you plant to render 3D objects inside your nodes, it uses litegl.js for webgl and canvas2DtoWebGL to emulate the Canvas2D calls in webGL +* @method enableWebGL +**/ +LGraphCanvas.prototype.enableWebGL = function() +{ + if(typeof(GL) === undefined) + throw("litegl.js must be included to use a WebGL canvas"); + if(typeof(enableWebGLCanvas) === undefined) + throw("webglCanvas.js must be included to use this feature"); + + this.gl = this.ctx = enableWebGLCanvas(this.canvas); + this.ctx.webgl = true; + this.bgcanvas = this.canvas; + this.bgctx = this.gl; + this.canvas.webgl_enabled = true; + + /* + GL.create({ canvas: this.bgcanvas }); + this.bgctx = enableWebGLCanvas( this.bgcanvas ); + window.gl = this.gl; + */ +} + + +/** +* marks as dirty the canvas, this way it will be rendered again +* +* @class LGraphCanvas +* @method setDirty +* @param {bool} fgcanvas if the foreground canvas is dirty (the one containing the nodes) +* @param {bool} bgcanvas if the background canvas is dirty (the one containing the wires) +*/ +LGraphCanvas.prototype.setDirty = function( fgcanvas, bgcanvas ) +{ + if(fgcanvas) + this.dirty_canvas = true; + if(bgcanvas) + this.dirty_bgcanvas = true; +} + +/** +* Used to attach the canvas in a popup +* +* @method getCanvasWindow +* @return {window} returns the window where the canvas is attached (the DOM root node) +*/ +LGraphCanvas.prototype.getCanvasWindow = function() +{ + if(!this.canvas) + return window; + var doc = this.canvas.ownerDocument; + return doc.defaultView || doc.parentWindow; +} + +/** +* starts rendering the content of the canvas when needed +* +* @method startRendering +*/ +LGraphCanvas.prototype.startRendering = function() +{ + if(this.is_rendering) + return; //already rendering + + this.is_rendering = true; + renderFrame.call(this); + + function renderFrame() + { + if(!this.pause_rendering) + this.draw(); + + var window = this.getCanvasWindow(); + if(this.is_rendering) + window.requestAnimationFrame( renderFrame.bind(this) ); + } +} + +/** +* stops rendering the content of the canvas (to save resources) +* +* @method stopRendering +*/ +LGraphCanvas.prototype.stopRendering = function() +{ + this.is_rendering = false; + /* + if(this.rendering_timer_id) + { + clearInterval(this.rendering_timer_id); + this.rendering_timer_id = null; + } + */ +} + +/* LiteGraphCanvas input */ + +LGraphCanvas.prototype.processMouseDown = function(e) +{ + if(!this.graph) + return; + + this.adjustMouseEvent(e); + + var ref_window = this.getCanvasWindow(); + var document = ref_window.document; + LGraphCanvas.active_canvas = this; + var that = this; + + //move mouse move event to the window in case it drags outside of the canvas + this.canvas.removeEventListener("mousemove", this._mousemove_callback ); + ref_window.document.addEventListener("mousemove", this._mousemove_callback, true ); //catch for the entire window + ref_window.document.addEventListener("mouseup", this._mouseup_callback, true ); + + var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes, 5 ); + var skip_dragging = false; + var skip_action = false; + var now = LiteGraph.getTime(); + var is_double_click = (now - this.last_mouseclick) < 300; + + this.canvas_mouse[0] = e.canvasX; + this.canvas_mouse[1] = e.canvasY; + + LiteGraph.closeAllContextMenus( ref_window ); + + if(e.which == 1) //left button mouse + { + if( e.ctrlKey ) + { + this.dragging_rectangle = new Float32Array(4); + this.dragging_rectangle[0] = e.canvasX; + this.dragging_rectangle[1] = e.canvasY; + this.dragging_rectangle[2] = 1; + this.dragging_rectangle[3] = 1; + skip_action = true; + } + + var clicking_canvas_bg = false; + + //when clicked on top of a node + //and it is not interactive + if( node && this.allow_interaction && !skip_action ) + { + if( !this.live_mode && !node.flags.pinned ) + this.bringToFront( node ); //if it wasnt selected? + + //not dragging mouse to connect two slots + if(!this.connecting_node && !node.flags.collapsed && !this.live_mode) + { + //Search for corner for resize + if( !skip_action && node.flags.resizable !== false && isInsideRectangle( e.canvasX, e.canvasY, node.pos[0] + node.size[0] - 5, node.pos[1] + node.size[1] - 5 ,10,10 )) + { + this.resizing_node = node; + this.canvas.style.cursor = "se-resize"; + skip_action = true; + } + else + { + //search for outputs + if(node.outputs) + for(var i = 0, l = node.outputs.length; i < l; ++i) + { + var output = node.outputs[i]; + var link_pos = node.getConnectionPos(false,i); + if( isInsideRectangle( e.canvasX, e.canvasY, link_pos[0] - 15, link_pos[1] - 10, 30,20) ) + { + this.connecting_node = node; + this.connecting_output = output; + this.connecting_pos = node.getConnectionPos(false,i); + this.connecting_slot = i; + + if( e.shiftKey ) + node.disconnectOutput(i); + + if (is_double_click) { + if (node.onOutputDblClick) + node.onOutputDblClick(i, e); + } else { + if (node.onOutputClick) + node.onOutputClick(i, e); + } + + skip_action = true; + break; + } + } + + //search for inputs + if(node.inputs) + for(var i = 0, l = node.inputs.length; i < l; ++i) + { + var input = node.inputs[i]; + var link_pos = node.getConnectionPos( true, i ); + if( isInsideRectangle(e.canvasX, e.canvasY, link_pos[0] - 15, link_pos[1] - 10, 30,20) ) + { + if (is_double_click) { + if (node.onInputDblClick) + node.onInputDblClick(i, e); + } else { + if (node.onInputClick) + node.onInputClick(i, e); + } + + if(input.link !== null) + { + var link_info = this.graph.links[ input.link ]; //before disconnecting + node.disconnectInput(i); + + if( this.allow_reconnect_links || e.shiftKey ) + { + this.connecting_node = this.graph._nodes_by_id[ link_info.origin_id ]; + this.connecting_slot = link_info.origin_slot; + this.connecting_output = this.connecting_node.outputs[ this.connecting_slot ]; + this.connecting_pos = this.connecting_node.getConnectionPos( false, this.connecting_slot); + } + + this.dirty_bgcanvas = true; + skip_action = true; + } + } + } + } //not resizing + } + + //Search for corner + if( !skip_action && isInsideRectangle(e.canvasX, e.canvasY, node.pos[0], node.pos[1] - LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT )) + { + node.collapse(); + skip_action = true; + } + + //it wasnt clicked on the links boxes + if(!skip_action) + { + var block_drag_node = false; + + //widgets + var widget = this.processNodeWidgets( node, this.canvas_mouse, e ); + if(widget) + { + block_drag_node = true; + this.node_widget = [node, widget]; + } + + //double clicking + if (is_double_click && this.selected_nodes[ node.id ]) + { + //double click node + if( node.onDblClick) + node.onDblClick(e); + this.processNodeDblClicked( node ); + block_drag_node = true; + } + + //if do not capture mouse + if( node.onMouseDown && node.onMouseDown( e, [e.canvasX - node.pos[0], e.canvasY - node.pos[1]], this ) ) + { + block_drag_node = true; + } + else if(this.live_mode) + { + clicking_canvas_bg = true; + block_drag_node = true; + } + + if(!block_drag_node) + { + if(this.allow_dragnodes) + this.node_dragged = node; + if(!this.selected_nodes[ node.id ]) + this.processNodeSelected( node, e ); + } + + this.dirty_canvas = true; + } + } + else //clicked outside of nodes + { + this.selected_group = this.graph.getGroupOnPos( e.canvasX, e.canvasY ); + this.selected_group_resizing = false; + if( this.selected_group ) + { + if( e.ctrlKey ) + this.dragging_rectangle = null; + + var dist = distance( [e.canvasX, e.canvasY], [ this.selected_group.pos[0] + this.selected_group.size[0], this.selected_group.pos[1] + this.selected_group.size[1] ] ); + if( (dist * this.scale) < 10 ) + this.selected_group_resizing = true; + else + this.selected_group.recomputeInsideNodes(); + } + + if( is_double_click ) + this.showSearchBox( e ); + + clicking_canvas_bg = true; + } + + if( !skip_action && clicking_canvas_bg && this.allow_dragcanvas ) + { + this.dragging_canvas = true; + } + } + else if (e.which == 2) //middle button + { + + } + else if (e.which == 3) //right button + { + this.processContextMenu( node, e ); + } + + //TODO + //if(this.node_selected != prev_selected) + // this.onNodeSelectionChange(this.node_selected); + + this.last_mouse[0] = e.localX; + this.last_mouse[1] = e.localY; + this.last_mouseclick = LiteGraph.getTime(); + this.last_mouse_dragging = true; + + /* + if( (this.dirty_canvas || this.dirty_bgcanvas) && this.rendering_timer_id == null) + this.draw(); + */ + + this.graph.change(); + + //this is to ensure to defocus(blur) if a text input element is on focus + if(!ref_window.document.activeElement || (ref_window.document.activeElement.nodeName.toLowerCase() != "input" && ref_window.document.activeElement.nodeName.toLowerCase() != "textarea")) + e.preventDefault(); + e.stopPropagation(); + + if(this.onMouseDown) + this.onMouseDown(e); + + return false; +} + +/** +* Called when a mouse move event has to be processed +* @method processMouseMove +**/ +LGraphCanvas.prototype.processMouseMove = function(e) +{ + if(this.autoresize) + this.resize(); + + if(!this.graph) + return; + + LGraphCanvas.active_canvas = this; + this.adjustMouseEvent(e); + var mouse = [e.localX, e.localY]; + var delta = [mouse[0] - this.last_mouse[0], mouse[1] - this.last_mouse[1]]; + this.last_mouse = mouse; + this.canvas_mouse[0] = e.canvasX; + this.canvas_mouse[1] = e.canvasY; + e.dragging = this.last_mouse_dragging; + + if( this.node_widget ) + { + this.processNodeWidgets( this.node_widget[0], this.canvas_mouse, e, this.node_widget[1] ); + this.dirty_canvas = true; + } + + if( this.dragging_rectangle ) + { + this.dragging_rectangle[2] = e.canvasX - this.dragging_rectangle[0]; + this.dragging_rectangle[3] = e.canvasY - this.dragging_rectangle[1]; + this.dirty_canvas = true; + } + else if (this.selected_group) //moving/resizing a group + { + if( this.selected_group_resizing ) + this.selected_group.size = [ e.canvasX - this.selected_group.pos[0], e.canvasY - this.selected_group.pos[1] ]; + else + { + var deltax = delta[0] / this.scale; + var deltay = delta[1] / this.scale; + this.selected_group.move( deltax, deltay, e.ctrlKey ); + if( this.selected_group._nodes.length) + this.dirty_canvas = true; + } + this.dirty_bgcanvas = true; + } + else if(this.dragging_canvas) + { + this.offset[0] += delta[0] / this.scale; + this.offset[1] += delta[1] / this.scale; + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + } + else if(this.allow_interaction) + { + if(this.connecting_node) + this.dirty_canvas = true; + + //get node over + var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes ); + + //remove mouseover flag + for(var i = 0, l = this.graph._nodes.length; i < l; ++i) + { + if(this.graph._nodes[i].mouseOver && node != this.graph._nodes[i]) + { + //mouse leave + this.graph._nodes[i].mouseOver = false; + if(this.node_over && this.node_over.onMouseLeave) + this.node_over.onMouseLeave(e); + this.node_over = null; + this.dirty_canvas = true; + } + } + + //mouse over a node + if(node) + { + //this.canvas.style.cursor = "move"; + if(!node.mouseOver) + { + //mouse enter + node.mouseOver = true; + this.node_over = node; + this.dirty_canvas = true; + + if(node.onMouseEnter) node.onMouseEnter(e); + } + + //in case the node wants to do something + if(node.onMouseMove) + node.onMouseMove(e, [e.canvasX - node.pos[0], e.canvasY - node.pos[1]], this); + + //if dragging a link + if(this.connecting_node) + { + var pos = this._highlight_input || [0,0]; //to store the output of isOverNodeInput + + //on top of input + if( this.isOverNodeBox( node, e.canvasX, e.canvasY ) ) + { + //mouse on top of the corner box, dont know what to do + } + else + { + //check if I have a slot below de mouse + var slot = this.isOverNodeInput( node, e.canvasX, e.canvasY, pos ); + if(slot != -1 && node.inputs[slot] ) + { + var slot_type = node.inputs[slot].type; + if( LiteGraph.isValidConnection( this.connecting_output.type, slot_type ) ) + this._highlight_input = pos; + } + else + this._highlight_input = null; + } + } + + //Search for corner + if(this.canvas) + { + if( isInsideRectangle(e.canvasX, e.canvasY, node.pos[0] + node.size[0] - 5, node.pos[1] + node.size[1] - 5 ,5,5 )) + this.canvas.style.cursor = "se-resize"; + else + this.canvas.style.cursor = ""; + } + } + else if(this.canvas) + this.canvas.style.cursor = ""; + + if(this.node_capturing_input && this.node_capturing_input != node && this.node_capturing_input.onMouseMove) + { + this.node_capturing_input.onMouseMove(e); + } + + + if(this.node_dragged && !this.live_mode) + { + for(var i in this.selected_nodes) + { + var n = this.selected_nodes[i]; + n.pos[0] += delta[0] / this.scale; + n.pos[1] += delta[1] / this.scale; + } + + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + } + + if(this.resizing_node && !this.live_mode) + { + //convert mouse to node space + this.resizing_node.size[0] = e.canvasX - this.resizing_node.pos[0]; + this.resizing_node.size[1] = e.canvasY - this.resizing_node.pos[1]; + + //constraint size + var max_slots = Math.max( this.resizing_node.inputs ? this.resizing_node.inputs.length : 0, this.resizing_node.outputs ? this.resizing_node.outputs.length : 0); + var min_height = max_slots * LiteGraph.NODE_SLOT_HEIGHT + ( this.resizing_node.widgets ? this.resizing_node.widgets.length : 0 ) * (LiteGraph.NODE_WIDGET_HEIGHT + 4 ) + 4; + if(this.resizing_node.size[1] < min_height ) + this.resizing_node.size[1] = min_height; + if(this.resizing_node.size[0] < LiteGraph.NODE_MIN_WIDTH) + this.resizing_node.size[0] = LiteGraph.NODE_MIN_WIDTH; + + this.canvas.style.cursor = "se-resize"; + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + } + } + + e.preventDefault(); + return false; +} + +/** +* Called when a mouse up event has to be processed +* @method processMouseUp +**/ +LGraphCanvas.prototype.processMouseUp = function(e) +{ + if(!this.graph) + return; + + var window = this.getCanvasWindow(); + var document = window.document; + LGraphCanvas.active_canvas = this; + + //restore the mousemove event back to the canvas + document.removeEventListener("mousemove", this._mousemove_callback, true ); + this.canvas.addEventListener("mousemove", this._mousemove_callback, true); + document.removeEventListener("mouseup", this._mouseup_callback, true ); + + this.adjustMouseEvent(e); + var now = LiteGraph.getTime(); + e.click_time = (now - this.last_mouseclick); + this.last_mouse_dragging = false; + + if (e.which == 1) //left button + { + this.node_widget = null; + + if( this.selected_group ) + { + var diffx = this.selected_group.pos[0] - Math.round( this.selected_group.pos[0] ); + var diffy = this.selected_group.pos[1] - Math.round( this.selected_group.pos[1] ); + this.selected_group.move( diffx, diffy, e.ctrlKey ); + this.selected_group.pos[0] = Math.round( this.selected_group.pos[0] ); + this.selected_group.pos[1] = Math.round( this.selected_group.pos[1] ); + if( this.selected_group._nodes.length ) + this.dirty_canvas = true; + this.selected_group = null; + } + this.selected_group_resizing = false; + + if( this.dragging_rectangle ) + { + if(this.graph) + { + var nodes = this.graph._nodes; + var node_bounding = new Float32Array(4); + this.deselectAllNodes(); + //compute bounding and flip if left to right + var w = Math.abs( this.dragging_rectangle[2] ); + var h = Math.abs( this.dragging_rectangle[3] ); + var startx = this.dragging_rectangle[2] < 0 ? this.dragging_rectangle[0] - w : this.dragging_rectangle[0]; + var starty = this.dragging_rectangle[3] < 0 ? this.dragging_rectangle[1] - h : this.dragging_rectangle[1]; + this.dragging_rectangle[0] = startx; this.dragging_rectangle[1] = starty; this.dragging_rectangle[2] = w; this.dragging_rectangle[3] = h; + + //test against all nodes (not visible becasue the rectangle maybe start outside + var to_select = []; + for(var i = 0; i < nodes.length; ++i) + { + var node = nodes[i]; + node.getBounding( node_bounding ); + if(!overlapBounding( this.dragging_rectangle, node_bounding )) + continue; //out of the visible area + to_select.push(node); + } + if(to_select.length) + this.selectNodes(to_select); + } + this.dragging_rectangle = null; + } + else if(this.connecting_node) //dragging a connection + { + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + + var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes ); + + //node below mouse + if(node) + { + if( this.connecting_output.type == LiteGraph.EVENT && this.isOverNodeBox( node, e.canvasX, e.canvasY ) ) + { + this.connecting_node.connect( this.connecting_slot, node, LiteGraph.EVENT ); + } + else + { + //slot below mouse? connect + var slot = this.isOverNodeInput(node, e.canvasX, e.canvasY); + if(slot != -1) + { + this.connecting_node.connect(this.connecting_slot, node, slot); + } + else + { //not on top of an input + var input = node.getInputInfo(0); + //auto connect + if(this.connecting_output.type == LiteGraph.EVENT) + this.connecting_node.connect( this.connecting_slot, node, LiteGraph.EVENT ); + else + if(input && !input.link && LiteGraph.isValidConnection( input.type && this.connecting_output.type ) ) + this.connecting_node.connect( this.connecting_slot, node, 0 ); + } + } + } + + this.connecting_output = null; + this.connecting_pos = null; + this.connecting_node = null; + this.connecting_slot = -1; + + }//not dragging connection + else if(this.resizing_node) + { + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + this.resizing_node = null; + } + else if(this.node_dragged) //node being dragged? + { + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + this.node_dragged.pos[0] = Math.round(this.node_dragged.pos[0]); + this.node_dragged.pos[1] = Math.round(this.node_dragged.pos[1]); + if(this.graph.config.align_to_grid) + this.node_dragged.alignToGrid(); + this.node_dragged = null; + } + else //no node being dragged + { + //get node over + var node = this.graph.getNodeOnPos( e.canvasX, e.canvasY, this.visible_nodes ); + if ( !node && e.click_time < 300 ) + this.deselectAllNodes(); + + this.dirty_canvas = true; + this.dragging_canvas = false; + + if( this.node_over && this.node_over.onMouseUp ) + this.node_over.onMouseUp(e, [e.canvasX - this.node_over.pos[0], e.canvasY - this.node_over.pos[1]], this ); + if( this.node_capturing_input && this.node_capturing_input.onMouseUp ) + this.node_capturing_input.onMouseUp(e, [e.canvasX - this.node_capturing_input.pos[0], e.canvasY - this.node_capturing_input.pos[1]] ); + } + } + else if (e.which == 2) //middle button + { + //trace("middle"); + this.dirty_canvas = true; + this.dragging_canvas = false; + } + else if (e.which == 3) //right button + { + //trace("right"); + this.dirty_canvas = true; + this.dragging_canvas = false; + } + + /* + if((this.dirty_canvas || this.dirty_bgcanvas) && this.rendering_timer_id == null) + this.draw(); + */ + + this.graph.change(); + + e.stopPropagation(); + e.preventDefault(); + return false; +} + +/** +* Called when a mouse wheel event has to be processed +* @method processMouseWheel +**/ +LGraphCanvas.prototype.processMouseWheel = function(e) +{ + if(!this.graph || !this.allow_dragcanvas) + return; + + var delta = (e.wheelDeltaY != null ? e.wheelDeltaY : e.detail * -60); + + this.adjustMouseEvent(e); + + var zoom = this.scale; + + if (delta > 0) + zoom *= 1.1; + else if (delta < 0) + zoom *= 1/(1.1); + + this.setZoom( zoom, [ e.localX, e.localY ] ); + + /* + if(this.rendering_timer_id == null) + this.draw(); + */ + + this.graph.change(); + + e.preventDefault(); + return false; // prevent default +} + +/** +* retuns true if a position (in graph space) is on top of a node little corner box +* @method isOverNodeBox +**/ +LGraphCanvas.prototype.isOverNodeBox = function( node, canvasx, canvasy ) +{ + var title_height = LiteGraph.NODE_TITLE_HEIGHT; + if( isInsideRectangle( canvasx, canvasy, node.pos[0] + 2, node.pos[1] + 2 - title_height, title_height - 4,title_height - 4) ) + return true; + return false; +} + +/** +* retuns true if a position (in graph space) is on top of a node input slot +* @method isOverNodeInput +**/ +LGraphCanvas.prototype.isOverNodeInput = function(node, canvasx, canvasy, slot_pos ) +{ + if(node.inputs) + for(var i = 0, l = node.inputs.length; i < l; ++i) + { + var input = node.inputs[i]; + var link_pos = node.getConnectionPos(true,i); + if( isInsideRectangle(canvasx, canvasy, link_pos[0] - 10, link_pos[1] - 5, 20,10) ) + { + if(slot_pos) + { + slot_pos[0] = link_pos[0]; + slot_pos[1] = link_pos[1]; + } + return i; + } + } + return -1; +} + +/** +* process a key event +* @method processKey +**/ +LGraphCanvas.prototype.processKey = function(e) +{ + if(!this.graph) + return; + + var block_default = false; + //console.log(e); //debug + + if(e.target.localName == "input") + return; + + if(e.type == "keydown") + { + if(e.keyCode == 32) //esc + { + this.dragging_canvas = true; + block_default = true; + } + + //select all Control A + if(e.keyCode == 65 && e.ctrlKey) + { + this.selectNodes(); + block_default = true; + } + + if(e.code == "KeyC" && (e.metaKey || e.ctrlKey) && !e.shiftKey ) //copy + { + if(this.selected_nodes) + { + this.copyToClipboard(); + block_default = true; + } + } + + if(e.code == "KeyV" && (e.metaKey || e.ctrlKey) && !e.shiftKey ) //paste + { + this.pasteFromClipboard(); + } + + //delete or backspace + if(e.keyCode == 46 || e.keyCode == 8) + { + if(e.target.localName != "input" && e.target.localName != "textarea") + { + this.deleteSelectedNodes(); + block_default = true; + } + } + + //collapse + //... + + //TODO + if(this.selected_nodes) + for (var i in this.selected_nodes) + if(this.selected_nodes[i].onKeyDown) + this.selected_nodes[i].onKeyDown(e); + } + else if( e.type == "keyup" ) + { + if(e.keyCode == 32) + this.dragging_canvas = false; + + if(this.selected_nodes) + for (var i in this.selected_nodes) + if(this.selected_nodes[i].onKeyUp) + this.selected_nodes[i].onKeyUp(e); + } + + this.graph.change(); + + if(block_default) + { + e.preventDefault(); + return false; + } +} + +LGraphCanvas.prototype.copyToClipboard = function() +{ + var clipboard_info = { + nodes: [], + links: [] + }; + var index = 0; + var selected_nodes_array = []; + for(var i in this.selected_nodes) + { + var node = this.selected_nodes[i]; + node._relative_id = index; + selected_nodes_array.push( node ); + index += 1; + } + + for(var i = 0; i < selected_nodes_array.length; ++i) + { + var node = selected_nodes_array[i]; + clipboard_info.nodes.push( node.clone().serialize() ); + if(node.inputs && node.inputs.length) + for(var j = 0; j < node.inputs.length; ++j) + { + var input = node.inputs[j]; + if(!input || input.link == null) + continue; + var link_info = this.graph.links[ input.link ]; + if(!link_info) + continue; + var target_node = this.graph.getNodeById( link_info.origin_id ); + if(!target_node || !this.selected_nodes[ target_node.id ] ) //improve this by allowing connections to non-selected nodes + continue; //not selected + clipboard_info.links.push([ target_node._relative_id, j, node._relative_id, link_info.target_slot ]); + } + } + localStorage.setItem( "litegrapheditor_clipboard", JSON.stringify( clipboard_info ) ); +} + +LGraphCanvas.prototype.pasteFromClipboard = function() +{ + var data = localStorage.getItem( "litegrapheditor_clipboard" ); + if(!data) + return; + + //create nodes + var clipboard_info = JSON.parse(data); + var nodes = []; + for(var i = 0; i < clipboard_info.nodes.length; ++i) + { + var node_data = clipboard_info.nodes[i]; + var node = LiteGraph.createNode( node_data.type ); + if(node) + { + node.configure(node_data); + node.pos[0] += 5; + node.pos[1] += 5; + this.graph.add( node ); + nodes.push( node ); + } + } + + //create links + for(var i = 0; i < clipboard_info.links.length; ++i) + { + var link_info = clipboard_info.links[i]; + var origin_node = nodes[ link_info[0] ]; + var target_node = nodes[ link_info[2] ]; + origin_node.connect( link_info[1], target_node, link_info[3] ); + } + + this.selectNodes( nodes ); +} + +/** +* process a item drop event on top the canvas +* @method processDrop +**/ +LGraphCanvas.prototype.processDrop = function(e) +{ + e.preventDefault(); + this.adjustMouseEvent(e); + + + var pos = [e.canvasX,e.canvasY]; + var node = this.graph.getNodeOnPos(pos[0],pos[1]); + + if(!node) + { + var r = null; + if(this.onDropItem) + r = this.onDropItem( event ); + if(!r) + this.checkDropItem(e); + return; + } + + if( node.onDropFile || node.onDropData ) + { + var files = e.dataTransfer.files; + if(files && files.length) + { + for(var i=0; i < files.length; i++) + { + var file = e.dataTransfer.files[0]; + var filename = file.name; + var ext = LGraphCanvas.getFileExtension( filename ); + //console.log(file); + + if(node.onDropFile) + node.onDropFile(file); + + if(node.onDropData) + { + //prepare reader + var reader = new FileReader(); + reader.onload = function (event) { + //console.log(event.target); + var data = event.target.result; + node.onDropData( data, filename, file ); + }; + + //read data + var type = file.type.split("/")[0]; + if(type == "text" || type == "") + reader.readAsText(file); + else if (type == "image") + reader.readAsDataURL(file); + else + reader.readAsArrayBuffer(file); + } + } + } + } + + if(node.onDropItem) + { + if( node.onDropItem( event ) ) + return true; + } + + if(this.onDropItem) + return this.onDropItem( event ); + + return false; +} + +//called if the graph doesnt have a default drop item behaviour +LGraphCanvas.prototype.checkDropItem = function(e) +{ + if(e.dataTransfer.files.length) + { + var file = e.dataTransfer.files[0]; + var ext = LGraphCanvas.getFileExtension( file.name ).toLowerCase(); + var nodetype = LiteGraph.node_types_by_file_extension[ext]; + if(nodetype) + { + var node = LiteGraph.createNode( nodetype.type ); + node.pos = [e.canvasX, e.canvasY]; + this.graph.add( node ); + if( node.onDropFile ) + node.onDropFile( file ); + } + } +} + + +LGraphCanvas.prototype.processNodeDblClicked = function(n) +{ + if(this.onShowNodePanel) + this.onShowNodePanel(n); + + if(this.onNodeDblClicked) + this.onNodeDblClicked(n); + + this.setDirty(true); +} + +LGraphCanvas.prototype.processNodeSelected = function(node,e) +{ + this.selectNode( node, e && e.shiftKey ); + if(this.onNodeSelected) + this.onNodeSelected(node); +} + +LGraphCanvas.prototype.processNodeDeselected = function(node) +{ + this.deselectNode(node); + if(this.onNodeDeselected) + this.onNodeDeselected(node); +} + +/** +* selects a given node (or adds it to the current selection) +* @method selectNode +**/ +LGraphCanvas.prototype.selectNode = function( node, add_to_current_selection ) +{ + if(node == null) + this.deselectAllNodes(); + else + this.selectNodes([node], add_to_current_selection ); +} + +/** +* selects several nodes (or adds them to the current selection) +* @method selectNodes +**/ +LGraphCanvas.prototype.selectNodes = function( nodes, add_to_current_selection ) +{ + if(!add_to_current_selection) + this.deselectAllNodes(); + + nodes = nodes || this.graph._nodes; + for(var i = 0; i < nodes.length; ++i) + { + var node = nodes[i]; + if(node.selected) + continue; + + if( !node.selected && node.onSelected ) + node.onSelected(); + node.selected = true; + this.selected_nodes[ node.id ] = node; + + if(node.inputs) + for(var j = 0; j < node.inputs.length; ++j) + this.highlighted_links[ node.inputs[j].link ] = true; + if(node.outputs) + for(var j = 0; j < node.outputs.length; ++j) + { + var out = node.outputs[j]; + if( out.links ) + for(var k = 0; k < out.links.length; ++k) + this.highlighted_links[ out.links[k] ] = true; + } + + } + + this.setDirty(true); +} + +/** +* removes a node from the current selection +* @method deselectNode +**/ +LGraphCanvas.prototype.deselectNode = function( node ) +{ + if(!node.selected) + return; + if(node.onDeselected) + node.onDeselected(); + node.selected = false; + + //remove highlighted + if(node.inputs) + for(var i = 0; i < node.inputs.length; ++i) + delete this.highlighted_links[ node.inputs[i].link ]; + if(node.outputs) + for(var i = 0; i < node.outputs.length; ++i) + { + var out = node.outputs[i]; + if( out.links ) + for(var j = 0; j < out.links.length; ++j) + delete this.highlighted_links[ out.links[j] ]; + } +} + +/** +* removes all nodes from the current selection +* @method deselectAllNodes +**/ +LGraphCanvas.prototype.deselectAllNodes = function() +{ + if(!this.graph) + return; + var nodes = this.graph._nodes; + for(var i = 0, l = nodes.length; i < l; ++i) + { + var node = nodes[i]; + if(!node.selected) + continue; + if(node.onDeselected) + node.onDeselected(); + node.selected = false; + } + this.selected_nodes = {}; + this.highlighted_links = {}; + this.setDirty(true); +} + +/** +* deletes all nodes in the current selection from the graph +* @method deleteSelectedNodes +**/ +LGraphCanvas.prototype.deleteSelectedNodes = function() +{ + for(var i in this.selected_nodes) + { + var m = this.selected_nodes[i]; + //if(m == this.node_in_panel) this.showNodePanel(null); + this.graph.remove(m); + } + this.selected_nodes = {}; + this.highlighted_links = {}; + this.setDirty(true); +} + +/** +* centers the camera on a given node +* @method centerOnNode +**/ +LGraphCanvas.prototype.centerOnNode = function(node) +{ + this.offset[0] = -node.pos[0] - node.size[0] * 0.5 + (this.canvas.width * 0.5 / this.scale); + this.offset[1] = -node.pos[1] - node.size[1] * 0.5 + (this.canvas.height * 0.5 / this.scale); + this.setDirty(true,true); +} + +/** +* adds some useful properties to a mouse event, like the position in graph coordinates +* @method adjustMouseEvent +**/ +LGraphCanvas.prototype.adjustMouseEvent = function(e) +{ + if(this.canvas) + { + var b = this.canvas.getBoundingClientRect(); + e.localX = e.pageX - b.left; + e.localY = e.pageY - b.top; + } + else + { + e.localX = e.pageX; + e.localY = e.pageY; + } + + e.deltaX = e.localX - this.last_mouse_position[0]; + e.deltaY = e.localY - this.last_mouse_position[1]; + + this.last_mouse_position[0] = e.localX; + this.last_mouse_position[1] = e.localY; + + e.canvasX = e.localX / this.scale - this.offset[0]; + e.canvasY = e.localY / this.scale - this.offset[1]; +} + +/** +* changes the zoom level of the graph (default is 1), you can pass also a place used to pivot the zoom +* @method setZoom +**/ +LGraphCanvas.prototype.setZoom = function(value, zooming_center) +{ + if(!zooming_center && this.canvas) + zooming_center = [this.canvas.width * 0.5,this.canvas.height * 0.5]; + + var center = this.convertOffsetToCanvas( zooming_center ); + + this.scale = value; + + if(this.scale > this.max_zoom) + this.scale = this.max_zoom; + else if(this.scale < this.min_zoom) + this.scale = this.min_zoom; + + var new_center = this.convertOffsetToCanvas( zooming_center ); + var delta_offset = [new_center[0] - center[0], new_center[1] - center[1]]; + + this.offset[0] += delta_offset[0]; + this.offset[1] += delta_offset[1]; + + this.dirty_canvas = true; + this.dirty_bgcanvas = true; +} + +/** +* converts a coordinate in canvas2D space to graphcanvas space (NAME IS CONFUSION, SHOULD BE THE OTHER WAY AROUND) +* @method convertOffsetToCanvas +**/ +LGraphCanvas.prototype.convertOffsetToCanvas = function( pos, out ) +{ + out = out || []; + out[0] = pos[0] / this.scale - this.offset[0]; + out[1] = pos[1] / this.scale - this.offset[1]; + return out; +} + +/** +* converts a coordinate in graphcanvas space to canvas2D space (NAME IS CONFUSION, SHOULD BE THE OTHER WAY AROUND) +* @method convertCanvasToOffset +**/ +LGraphCanvas.prototype.convertCanvasToOffset = function( pos, out ) +{ + out = out || []; + out[0] = (pos[0] + this.offset[0]) * this.scale; + out[1] = (pos[1] + this.offset[1]) * this.scale; + return out; +} + +LGraphCanvas.prototype.convertEventToCanvas = function(e) +{ + var rect = this.canvas.getBoundingClientRect(); + return this.convertOffsetToCanvas([e.pageX - rect.left,e.pageY - rect.top]); +} + +/** +* brings a node to front (above all other nodes) +* @method bringToFront +**/ +LGraphCanvas.prototype.bringToFront = function(node) +{ + var i = this.graph._nodes.indexOf(node); + if(i == -1) return; + + this.graph._nodes.splice(i,1); + this.graph._nodes.push(node); +} + +/** +* sends a node to the back (below all other nodes) +* @method sendToBack +**/ +LGraphCanvas.prototype.sendToBack = function(node) +{ + var i = this.graph._nodes.indexOf(node); + if(i == -1) return; + + this.graph._nodes.splice(i,1); + this.graph._nodes.unshift(node); +} + +/* Interaction */ + + + +/* LGraphCanvas render */ +var temp = new Float32Array(4); + +/** +* checks which nodes are visible (inside the camera area) +* @method computeVisibleNodes +**/ +LGraphCanvas.prototype.computeVisibleNodes = function( nodes, out ) +{ + var visible_nodes = out || []; + visible_nodes.length = 0; + nodes = nodes || this.graph._nodes; + for(var i = 0, l = nodes.length; i < l; ++i) + { + var n = nodes[i]; + + //skip rendering nodes in live mode + if(this.live_mode && !n.onDrawBackground && !n.onDrawForeground) + continue; + + if(!overlapBounding( this.visible_area, n.getBounding( temp ) )) + continue; //out of the visible area + + visible_nodes.push(n); + } + return visible_nodes; +} + +/** +* renders the whole canvas content, by rendering in two separated canvas, one containing the background grid and the connections, and one containing the nodes) +* @method draw +**/ +LGraphCanvas.prototype.draw = function(force_canvas, force_bgcanvas) +{ + if(!this.canvas) + return; + + //fps counting + var now = LiteGraph.getTime(); + this.render_time = (now - this.last_draw_time)*0.001; + this.last_draw_time = now; + + if(this.graph) + { + var startx = -this.offset[0]; + var starty = -this.offset[1]; + var endx = startx + this.canvas.width / this.scale; + var endy = starty + this.canvas.height / this.scale; + this.visible_area[0] = startx; + this.visible_area[1] = starty; + this.visible_area[2] = endx - startx; + this.visible_area[3] = endy - starty; + } + + if(this.dirty_bgcanvas || force_bgcanvas || this.always_render_background || (this.graph && this.graph._last_trigger_time && (now - this.graph._last_trigger_time) < 1000) ) + this.drawBackCanvas(); + + if(this.dirty_canvas || force_canvas) + this.drawFrontCanvas(); + + this.fps = this.render_time ? (1.0 / this.render_time) : 0; + this.frame += 1; +} + +/** +* draws the front canvas (the one containing all the nodes) +* @method drawFrontCanvas +**/ +LGraphCanvas.prototype.drawFrontCanvas = function() +{ + this.dirty_canvas = false; + + if(!this.ctx) + this.ctx = this.bgcanvas.getContext("2d"); + var ctx = this.ctx; + if(!ctx) //maybe is using webgl... + return; + + if(ctx.start2D) + ctx.start2D(); + + var canvas = this.canvas; + + //reset in case of error + ctx.restore(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + + //clip dirty area if there is one, otherwise work in full canvas + if(this.dirty_area) + { + ctx.save(); + ctx.beginPath(); + ctx.rect(this.dirty_area[0],this.dirty_area[1],this.dirty_area[2],this.dirty_area[3]); + ctx.clip(); + } + + //clear + //canvas.width = canvas.width; + if(this.clear_background) + ctx.clearRect(0,0,canvas.width, canvas.height); + + //draw bg canvas + if(this.bgcanvas == this.canvas) + this.drawBackCanvas(); + else + ctx.drawImage(this.bgcanvas,0,0); + + //rendering + if(this.onRender) + this.onRender(canvas, ctx); + + //info widget + if(this.show_info) + this.renderInfo(ctx); + + if(this.graph) + { + //apply transformations + ctx.save(); + ctx.scale(this.scale,this.scale); + ctx.translate( this.offset[0],this.offset[1] ); + + //draw nodes + var drawn_nodes = 0; + var visible_nodes = this.computeVisibleNodes( null, this.visible_nodes ); + + for (var i = 0; i < visible_nodes.length; ++i) + { + var node = visible_nodes[i]; + + //transform coords system + ctx.save(); + ctx.translate( node.pos[0], node.pos[1] ); + + //Draw + this.drawNode( node, ctx ); + drawn_nodes += 1; + + //Restore + ctx.restore(); + } + + //on top (debug) + if( this.render_execution_order) + this.drawExecutionOrder(ctx); + + + //connections ontop? + if(this.graph.config.links_ontop) + if(!this.live_mode) + this.drawConnections(ctx); + + //current connection (the one being dragged by the mouse) + if(this.connecting_pos != null) + { + ctx.lineWidth = this.connections_width; + var link_color = null; + switch( this.connecting_output.type ) + { + case LiteGraph.EVENT: link_color = LiteGraph.EVENT_LINK_COLOR; break; + default: + link_color = LiteGraph.CONNECTING_LINK_COLOR; + } + //the connection being dragged by the mouse + this.renderLink( ctx, this.connecting_pos, [this.canvas_mouse[0],this.canvas_mouse[1]], null, false, null, link_color, this.connecting_output.dir || (this.connecting_node.flags.horizontal ? LiteGraph.DOWN : LiteGraph.RIGHT), LiteGraph.CENTER ); + + ctx.beginPath(); + if( this.connecting_output.type === LiteGraph.EVENT || this.connecting_output.shape === LiteGraph.BOX_SHAPE ) + ctx.rect( (this.connecting_pos[0] - 6) + 0.5, (this.connecting_pos[1] - 5) + 0.5,14,10); + else + ctx.arc( this.connecting_pos[0], this.connecting_pos[1],4,0,Math.PI*2); + ctx.fill(); + + ctx.fillStyle = "#ffcc00"; + if(this._highlight_input) + { + ctx.beginPath(); + ctx.arc( this._highlight_input[0], this._highlight_input[1],6,0,Math.PI*2); + ctx.fill(); + } + } + + if( this.dragging_rectangle ) + { + ctx.strokeStyle = "#FFF"; + ctx.strokeRect( this.dragging_rectangle[0], this.dragging_rectangle[1], this.dragging_rectangle[2], this.dragging_rectangle[3] ); + } + + + ctx.restore(); + } + + if(this.dirty_area) + { + ctx.restore(); + //this.dirty_area = null; + } + + if(ctx.finish2D) //this is a function I use in webgl renderer + ctx.finish2D(); +} + +/** +* draws some useful stats in the corner of the canvas +* @method renderInfo +**/ +LGraphCanvas.prototype.renderInfo = function( ctx, x, y ) +{ + x = x || 0; + y = y || 0; + + ctx.save(); + ctx.translate( x, y ); + + ctx.font = "10px Arial"; + ctx.fillStyle = "#888"; + if(this.graph) + { + ctx.fillText( "T: " + this.graph.globaltime.toFixed(2)+"s",5,13*1 ); + ctx.fillText( "I: " + this.graph.iteration,5,13*2 ); + ctx.fillText( "N: " + this.graph._nodes.length + " [" + this.visible_nodes.length + "]",5,13*3 ); + ctx.fillText( "V: " + this.graph._version,5,13*4 ); + ctx.fillText( "FPS:" + this.fps.toFixed(2),5,13*5 ); + } + else + ctx.fillText( "No graph selected",5,13*1 ); + ctx.restore(); +} + +/** +* draws the back canvas (the one containing the background and the connections) +* @method drawBackCanvas +**/ +LGraphCanvas.prototype.drawBackCanvas = function() +{ + var canvas = this.bgcanvas; + if(canvas.width != this.canvas.width || + canvas.height != this.canvas.height) + { + canvas.width = this.canvas.width; + canvas.height = this.canvas.height; + } + + if(!this.bgctx) + this.bgctx = this.bgcanvas.getContext("2d"); + var ctx = this.bgctx; + if(ctx.start) + ctx.start(); + + //clear + if(this.clear_background) + ctx.clearRect(0,0,canvas.width, canvas.height); + + if(this._graph_stack && this._graph_stack.length) + { + ctx.save(); + var parent_graph = this._graph_stack[ this._graph_stack.length - 1]; + var subgraph_node = this.graph._subgraph_node; + ctx.strokeStyle = subgraph_node.bgcolor; + ctx.lineWidth = 10; + ctx.strokeRect(1,1,canvas.width-2,canvas.height-2); + ctx.lineWidth = 1; + ctx.font = "40px Arial" + ctx.textAlign = "center"; + ctx.fillStyle = subgraph_node.bgcolor; + ctx.fillText( subgraph_node.getTitle(), canvas.width * 0.5, 40 ); + ctx.restore(); + } + + var bg_already_painted = false; + if(this.onRenderBackground) + bg_already_painted = this.onRenderBackground( canvas, ctx ); + + //reset in case of error + ctx.restore(); + ctx.setTransform(1, 0, 0, 1, 0, 0); + + if(this.graph) + { + //apply transformations + ctx.save(); + ctx.scale(this.scale,this.scale); + ctx.translate(this.offset[0],this.offset[1]); + + //render BG + if(this.background_image && this.scale > 0.5 && !bg_already_painted) + { + if (this.zoom_modify_alpha) + ctx.globalAlpha = (1.0 - 0.5 / this.scale) * this.editor_alpha; + else + ctx.globalAlpha = this.editor_alpha; + ctx.imageSmoothingEnabled = ctx.mozImageSmoothingEnabled = ctx.imageSmoothingEnabled = false; + if(!this._bg_img || this._bg_img.name != this.background_image) + { + this._bg_img = new Image(); + this._bg_img.name = this.background_image; + this._bg_img.src = this.background_image; + var that = this; + this._bg_img.onload = function() { + that.draw(true,true); + } + } + + var pattern = null; + if(this._pattern == null && this._bg_img.width > 0) + { + pattern = ctx.createPattern( this._bg_img, 'repeat' ); + this._pattern_img = this._bg_img; + this._pattern = pattern; + } + else + pattern = this._pattern; + if(pattern) + { + ctx.fillStyle = pattern; + ctx.fillRect(this.visible_area[0],this.visible_area[1],this.visible_area[2],this.visible_area[3]); + ctx.fillStyle = "transparent"; + } + + ctx.globalAlpha = 1.0; + ctx.imageSmoothingEnabled = ctx.mozImageSmoothingEnabled = ctx.imageSmoothingEnabled = true; + } + + //groups + if(this.graph._groups.length && !this.live_mode) + this.drawGroups(canvas, ctx); + + if(this.onBackgroundRender) + this.onBackgroundRender(canvas, ctx); + + //DEBUG: show clipping area + //ctx.fillStyle = "red"; + //ctx.fillRect( this.visible_area[0] + 10, this.visible_area[1] + 10, this.visible_area[2] - 20, this.visible_area[3] - 20); + + //bg + if (this.render_canvas_border) { + ctx.strokeStyle = "#235"; + ctx.strokeRect(0,0,canvas.width,canvas.height); + } + + if(this.render_connections_shadows) + { + ctx.shadowColor = "#000"; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.shadowBlur = 6; + } + else + ctx.shadowColor = "rgba(0,0,0,0)"; + + //draw connections + if(!this.live_mode) + this.drawConnections(ctx); + + ctx.shadowColor = "rgba(0,0,0,0)"; + + //restore state + ctx.restore(); + } + + if(ctx.finish) + ctx.finish(); + + this.dirty_bgcanvas = false; + this.dirty_canvas = true; //to force to repaint the front canvas with the bgcanvas +} + +var temp_vec2 = new Float32Array(2); + +/** +* draws the given node inside the canvas +* @method drawNode +**/ +LGraphCanvas.prototype.drawNode = function(node, ctx ) +{ + var glow = false; + this.current_node = node; + + var color = node.color || node.constructor.color || LiteGraph.NODE_DEFAULT_COLOR; + var bgcolor = node.bgcolor || node.constructor.bgcolor || LiteGraph.NODE_DEFAULT_BGCOLOR; + + //shadow and glow + if (node.mouseOver) + glow = true; + + //only render if it forces it to do it + if(this.live_mode) + { + if(!node.flags.collapsed) + { + ctx.shadowColor = "transparent"; + if(node.onDrawForeground) + node.onDrawForeground(ctx, this, this.canvas ); + } + + return; + } + + var editor_alpha = this.editor_alpha; + ctx.globalAlpha = editor_alpha; + + if(this.render_shadows) + { + ctx.shadowColor = LiteGraph.DEFAULT_SHADOW_COLOR; + ctx.shadowOffsetX = 2 * this.scale; + ctx.shadowOffsetY = 2 * this.scale; + ctx.shadowBlur = 3 * this.scale; + } + else + ctx.shadowColor = "transparent"; + + //custom draw collapsed method (draw after shadows because they are affected) + if(node.flags.collapsed && node.onDrawCollaped && node.onDrawCollapsed(ctx, this) == true) + return; + + //clip if required (mask) + var shape = node._shape || LiteGraph.BOX_SHAPE; + var size = temp_vec2; + temp_vec2.set( node.size ); + if( node.flags.collapsed ) + { + ctx.font = this.inner_text_font; + var title = node.getTitle ? node.getTitle() : node.title; + node._collapsed_width = Math.min( node.size[0], ctx.measureText(title).width + 40 );//LiteGraph.NODE_COLLAPSED_WIDTH; + size[0] = node._collapsed_width; + size[1] = 0; + } + + if( node.flags.clip_area ) //Start clipping + { + ctx.save(); + ctx.beginPath(); + if(shape == LiteGraph.BOX_SHAPE) + ctx.rect(0,0,size[0], size[1]); + else if (shape == LiteGraph.ROUND_SHAPE) + ctx.roundRect(0,0,size[0], size[1],10); + else if (shape == LiteGraph.CIRCLE_SHAPE) + ctx.arc(size[0] * 0.5, size[1] * 0.5, size[0] * 0.5, 0, Math.PI*2); + ctx.clip(); + } + + //draw shape + this.drawNodeShape( node, ctx, size, color, bgcolor, node.selected, node.mouseOver ); + ctx.shadowColor = "transparent"; + + //connection slots + ctx.textAlign = node.flags.horizontal ? "center" : "left"; + ctx.font = this.inner_text_font; + + var render_text = this.scale > 0.6; + + var out_slot = this.connecting_output; + ctx.lineWidth = 1; + + var max_y = 0; + + //render inputs and outputs + if(!node.flags.collapsed) + { + //input connection slots + if(node.inputs) + for(var i = 0; i < node.inputs.length; i++) + { + var slot = node.inputs[i]; + + ctx.globalAlpha = editor_alpha; + //change opacity of incompatible slots when dragging a connection + if ( this.connecting_node && LiteGraph.isValidConnection( slot.type && out_slot.type ) ) + ctx.globalAlpha = 0.4 * editor_alpha; + + ctx.fillStyle = slot.link != null ? (slot.color_on || this.default_connection_color.input_on) : (slot.color_off || this.default_connection_color.input_off); + + var pos = node.getConnectionPos( true, i ); + pos[0] -= node.pos[0]; + pos[1] -= node.pos[1]; + if( max_y < pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5 ) + max_y = pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5; + + ctx.beginPath(); + + if (slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { + ctx.rect((pos[0] - 6) + 0.5, (pos[1] - 5) + 0.5, 14, 10); + } else if (slot.shape === LiteGraph.ARROW_SHAPE) { + ctx.moveTo(pos[0] + 8, pos[1] + 0.5); + ctx.lineTo(pos[0] - 4, (pos[1] + 6) + 0.5); + ctx.lineTo(pos[0] - 4, (pos[1] - 6) + 0.5); + ctx.closePath(); + } else { + ctx.arc(pos[0], pos[1], 4, 0, Math.PI * 2); + } + + ctx.fill(); + + //render name + if(render_text) + { + var text = slot.label != null ? slot.label : slot.name; + if(text) + { + ctx.fillStyle = LiteGraph.NODE_TEXT_COLOR; + if( node.flags.horizontal || slot.dir == LiteGraph.UP ) + ctx.fillText(text,pos[0],pos[1] - 10); + else + ctx.fillText(text,pos[0] + 10,pos[1] + 5); + } + } + } + + //output connection slots + if(this.connecting_node) + ctx.globalAlpha = 0.4 * editor_alpha; + + ctx.textAlign = node.flags.horizontal ? "center" : "right"; + ctx.strokeStyle = "black"; + if(node.outputs) + for(var i = 0; i < node.outputs.length; i++) + { + var slot = node.outputs[i]; + + var pos = node.getConnectionPos(false,i); + pos[0] -= node.pos[0]; + pos[1] -= node.pos[1]; + if( max_y < pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5) + max_y = pos[1] + LiteGraph.NODE_SLOT_HEIGHT*0.5; + + ctx.fillStyle = slot.links && slot.links.length ? (slot.color_on || this.default_connection_color.output_on) : (slot.color_off || this.default_connection_color.output_off); + ctx.beginPath(); + //ctx.rect( node.size[0] - 14,i*14,10,10); + + if (slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { + ctx.rect((pos[0] - 6) + 0.5,(pos[1] - 5) + 0.5,14,10); + } else if (slot.shape === LiteGraph.ARROW_SHAPE) { + ctx.moveTo(pos[0] + 8, pos[1] + 0.5); + ctx.lineTo(pos[0] - 4, (pos[1] + 6) + 0.5); + ctx.lineTo(pos[0] - 4, (pos[1] - 6) + 0.5); + ctx.closePath(); + } else { + ctx.arc(pos[0], pos[1], 4, 0, Math.PI * 2); + } + + //trigger + //if(slot.node_id != null && slot.slot == -1) + // ctx.fillStyle = "#F85"; + + //if(slot.links != null && slot.links.length) + ctx.fill(); + ctx.stroke(); + + //render output name + if(render_text) + { + var text = slot.label != null ? slot.label : slot.name; + if(text) + { + ctx.fillStyle = LiteGraph.NODE_TEXT_COLOR; + if( node.flags.horizontal || slot.dir == LiteGraph.DOWN ) + ctx.fillText(text,pos[0],pos[1] - 8); + else + ctx.fillText(text, pos[0] - 10,pos[1] + 5); + } + } + } + + ctx.textAlign = "left"; + ctx.globalAlpha = 1; + + if(node.widgets) + { + if( node.flags.horizontal || node.flags.widgets_up ) + max_y = 2; + this.drawNodeWidgets( node, max_y, ctx, (this.node_widget && this.node_widget[0] == node) ? this.node_widget[1] : null ); + } + + //draw foreground + if(node.onDrawForeground) + node.onDrawForeground( ctx, this, this.canvas ); + } + else //if collapsed + { + if(node.inputs) + { + for(var i = 0; i < node.inputs.length; i++) + { + var slot = node.inputs[i]; + if( slot.link == null ) + continue; + ctx.fillStyle = slot.color_on || this.default_connection_color.input_on; + ctx.beginPath(); + if ( slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { + ctx.rect(0.5, 4 - LiteGraph.NODE_TITLE_HEIGHT + 0.5,14,LiteGraph.NODE_TITLE_HEIGHT - 8); + } else if (slot.shape === LiteGraph.ARROW_SHAPE) { + ctx.moveTo(8, LiteGraph.NODE_TITLE_HEIGHT * -0.5); + ctx.lineTo(-4, LiteGraph.NODE_TITLE_HEIGHT * -0.8); + ctx.lineTo(-4, LiteGraph.NODE_TITLE_HEIGHT * -0.2); + ctx.closePath(); + } else { + ctx.arc(0, LiteGraph.NODE_TITLE_HEIGHT * -0.5, 4, 0, Math.PI * 2); + } + ctx.fill(); + break; + } + } + + if(node.outputs) + { + for(var i = 0; i < node.outputs.length; i++) + { + var slot = node.outputs[i]; + if(!slot.links || !slot.links.length) + continue; + ctx.fillStyle = slot.color_on || this.default_connection_color.output_on; + ctx.strokeStyle = "black"; + ctx.beginPath(); + if (slot.type === LiteGraph.EVENT || slot.shape === LiteGraph.BOX_SHAPE) { + ctx.rect( node._collapsed_width - 4 + 0.5, 4 - LiteGraph.NODE_TITLE_HEIGHT + 0.5,14,LiteGraph.NODE_TITLE_HEIGHT - 8); + } else if (slot.shape === LiteGraph.ARROW_SHAPE) { + ctx.moveTo(node._collapsed_width + 6, LiteGraph.NODE_TITLE_HEIGHT * -0.5); + ctx.lineTo(node._collapsed_width - 6, LiteGraph.NODE_TITLE_HEIGHT * -0.8); + ctx.lineTo(node._collapsed_width - 6, LiteGraph.NODE_TITLE_HEIGHT * -0.2); + ctx.closePath(); + } else { + ctx.arc(node._collapsed_width, LiteGraph.NODE_TITLE_HEIGHT * -0.5, 4, 0, Math.PI * 2); + } + ctx.fill(); + ctx.stroke(); + } + } + + } + + if(node.flags.clip_area) + ctx.restore(); + + ctx.globalAlpha = 1.0; +} + +/** +* draws the shape of the given node in the canvas +* @method drawNodeShape +**/ +LGraphCanvas.prototype.drawNodeShape = function( node, ctx, size, fgcolor, bgcolor, selected, mouse_over ) +{ + //bg rect + ctx.strokeStyle = fgcolor; + ctx.fillStyle = bgcolor; + + var title_height = LiteGraph.NODE_TITLE_HEIGHT; + + //render node area depending on shape + var shape = node._shape || node.constructor.shape || LiteGraph.BOX_SHAPE; + var title_mode = node.constructor.title_mode; + + var render_title = true; + if( title_mode == LiteGraph.TRANSPARENT_TITLE ) + render_title = false; + else if( title_mode == LiteGraph.AUTOHIDE_TITLE && mouse_over) + render_title = true; + + var areax = 0; + var areay = render_title ? -title_height : 0; + var areaw = size[0]+1; + var areah = render_title ? size[1] + title_height : size[1]; + + //full node shape + if(!node.flags.collapsed) + { + ctx.beginPath(); + if(shape == LiteGraph.BOX_SHAPE || this.scale < 0.5) + ctx.fillRect( areax, areay, areaw, areah ); + else if (shape == LiteGraph.ROUND_SHAPE || shape == LiteGraph.CARD_SHAPE) + ctx.roundRect( areax, areay, areaw, areah, this.round_radius, shape == LiteGraph.CARD_SHAPE ? 0 : this.round_radius); + else if (shape == LiteGraph.CIRCLE_SHAPE) + ctx.arc(size[0] * 0.5, size[1] * 0.5, size[0] * 0.5, 0, Math.PI*2); + ctx.fill(); + } + ctx.shadowColor = "transparent"; + + //image + if (node.bgImage && node.bgImage.width) + ctx.drawImage( node.bgImage, (size[0] - node.bgImage.width) * 0.5 , (size[1] - node.bgImage.height) * 0.5); + + if(node.bgImageUrl && !node.bgImage) + node.bgImage = node.loadImage(node.bgImageUrl); + + if( node.onDrawBackground ) + node.onDrawBackground( ctx, this, this.canvas ); + + //title bg (remember, it is rendered ABOVE the node) + if(render_title || title_mode == LiteGraph.TRANSPARENT_TITLE ) + { + //title bar + if(title_mode != LiteGraph.TRANSPARENT_TITLE) //!node.flags.collapsed) + { + if(node.flags.collapsed) + ctx.shadowColor = LiteGraph.DEFAULT_SHADOW_COLOR; + + //* gradient test + if(this.use_gradients) + { + var grad = LGraphCanvas.gradients[ fgcolor ]; + if(!grad) + { + grad = LGraphCanvas.gradients[ fgcolor ] = ctx.createLinearGradient(0,0,400,0); + grad.addColorStop(0, fgcolor); + grad.addColorStop(1, "#000"); + } + ctx.fillStyle = grad; + } + else + ctx.fillStyle = fgcolor; + + var old_alpha = ctx.globalAlpha; + //ctx.globalAlpha = 0.5 * old_alpha; + ctx.beginPath(); + if(shape == LiteGraph.BOX_SHAPE || this.scale < 0.5) + ctx.rect(0, -title_height, size[0]+1, title_height); + else if ( shape == LiteGraph.ROUND_SHAPE || shape == LiteGraph.CARD_SHAPE ) + ctx.roundRect(0,-title_height,size[0]+1, title_height, this.round_radius, node.flags.collapsed ? this.round_radius : 0); + ctx.fill(); + ctx.shadowColor = "transparent"; + } + + //title box + if (shape == LiteGraph.ROUND_SHAPE || shape == LiteGraph.CIRCLE_SHAPE || shape == LiteGraph.CARD_SHAPE) + { + if( this.scale > 0.5 ) + { + ctx.fillStyle = "black"; + ctx.beginPath(); + ctx.arc(title_height *0.5, title_height * -0.5, (title_height - 8) *0.5,0,Math.PI*2); + ctx.fill(); + } + + ctx.fillStyle = node.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR; + ctx.beginPath(); + ctx.arc(title_height *0.5, title_height * -0.5, (title_height - 8) *0.4,0,Math.PI*2); + ctx.fill(); + } + else + { + if( this.scale > 0.5 ) + { + ctx.fillStyle = "black"; + ctx.fillRect(4,-title_height + 4,title_height - 8,title_height - 8); + } + ctx.fillStyle = node.boxcolor || LiteGraph.NODE_DEFAULT_BOXCOLOR; + ctx.fillRect(5,-title_height + 5,title_height - 10,title_height - 10); + } + ctx.globalAlpha = old_alpha; + + //title text + if( this.scale > 0.5 ) + { + ctx.font = this.title_text_font; + var title = node.getTitle(); + if(title) + { + if(selected) + ctx.fillStyle = "white"; + else + ctx.fillStyle = node.constructor.title_text_color || this.node_title_color; + if( node.flags.collapsed ) + { + ctx.textAlign = "center"; + var measure = ctx.measureText(title); + ctx.fillText( title, title_height + measure.width * 0.5, -title_height * 0.2 ); + ctx.textAlign = "left"; + } + else + { + ctx.textAlign = "left"; + ctx.fillText( title, title_height, -title_height * 0.2 ); + } + } + } + + if(node.onDrawTitle) + node.onDrawTitle(ctx); + } + + //render selection marker + if(selected) + { + if( title_mode == LiteGraph.TRANSPARENT_TITLE ) + { + areay -= title_height; + areah += title_height; + } + ctx.lineWidth = 1; + ctx.globalAlpha = 0.8; + ctx.beginPath(); + if(shape == LiteGraph.BOX_SHAPE) + ctx.rect(-6 + areax,-6 + areay, 12 + areaw, 12 + areah ); + else if (shape == LiteGraph.ROUND_SHAPE || (shape == LiteGraph.CARD_SHAPE && node.flags.collapsed) ) + ctx.roundRect(-6 + areax,-6 + areay, 12 + areaw, 12 + areah , this.round_radius * 2); + else if (shape == LiteGraph.CARD_SHAPE) + ctx.roundRect(-6 + areax,-6 + areay, 12 + areaw, 12 + areah , this.round_radius * 2, 2); + else if (shape == LiteGraph.CIRCLE_SHAPE) + ctx.arc(size[0] * 0.5, size[1] * 0.5, size[0] * 0.5 + 6, 0, Math.PI*2); + ctx.strokeStyle = "#FFF"; + ctx.stroke(); + ctx.strokeStyle = fgcolor; + ctx.globalAlpha = 1; + } +} + +/** +* draws every connection visible in the canvas +* OPTIMIZE THIS: precatch connections position instead of recomputing them every time +* @method drawConnections +**/ +LGraphCanvas.prototype.drawConnections = function(ctx) +{ + var now = LiteGraph.getTime(); + var visible_area = this.visible_area; + var margin_area = new Float32Array([visible_area[0] - 20, visible_area[1] - 20, visible_area[2] + 40, visible_area[3] + 40 ]); + var link_bounding = new Float32Array(4); + + //draw connections + ctx.lineWidth = this.connections_width; + + ctx.fillStyle = "#AAA"; + ctx.strokeStyle = "#AAA"; + ctx.globalAlpha = this.editor_alpha; + //for every node + var nodes = this.graph._nodes; + for (var n = 0, l = nodes.length; n < l; ++n) + { + var node = nodes[n]; + //for every input (we render just inputs because it is easier as every slot can only have one input) + if(!node.inputs || !node.inputs.length) + continue; + + for(var i = 0; i < node.inputs.length; ++i) + { + var input = node.inputs[i]; + if(!input || input.link == null) + continue; + var link_id = input.link; + var link = this.graph.links[ link_id ]; + if(!link) + continue; + + //find link info + var start_node = this.graph.getNodeById( link.origin_id ); + if(start_node == null) continue; + var start_node_slot = link.origin_slot; + var start_node_slotpos = null; + if(start_node_slot == -1) + start_node_slotpos = [start_node.pos[0] + 10, start_node.pos[1] + 10]; + else + start_node_slotpos = start_node.getConnectionPos(false, start_node_slot); + var end_node_slotpos = node.getConnectionPos(true,i); + + //compute link bounding + link_bounding[0] = start_node_slotpos[0]; + link_bounding[1] = start_node_slotpos[1]; + link_bounding[2] = end_node_slotpos[0] - start_node_slotpos[0]; + link_bounding[3] = end_node_slotpos[1] - start_node_slotpos[1]; + if( link_bounding[2] < 0 ){ + link_bounding[0] += link_bounding[2]; + link_bounding[2] = Math.abs( link_bounding[2] ); + } + if( link_bounding[3] < 0 ){ + link_bounding[1] += link_bounding[3]; + link_bounding[3] = Math.abs( link_bounding[3] ); + } + + //skip links outside of the visible area of the canvas + if( !overlapBounding( link_bounding, margin_area ) ) + continue; + + var start_slot = start_node.outputs[start_node_slot]; + var end_slot = node.inputs[i]; + if(!start_slot || !end_slot) continue; + var start_dir = start_slot.dir || (start_node.flags.horizontal ? LiteGraph.DOWN : LiteGraph.RIGHT); + var end_dir = end_slot.dir || (node.flags.horizontal ? LiteGraph.UP : LiteGraph.LEFT); + + this.renderLink( ctx, start_node_slotpos, end_node_slotpos, link, false, 0, null, start_dir, end_dir ); + + //event triggered rendered on top + if(link && link._last_time && (now - link._last_time) < 1000 ) + { + var f = 2.0 - (now - link._last_time) * 0.002; + var color = "rgba(255,255,255, " + f.toFixed(2) + ")"; + this.renderLink( ctx, start_node_slotpos, end_node_slotpos, link, true, f, color, start_dir, end_dir ); + } + } + } + ctx.globalAlpha = 1; +} + +/** +* draws a link between two points +* @method renderLink +**/ +LGraphCanvas.prototype.renderLink = function( ctx, a, b, link, skip_border, flow, color, start_dir, end_dir ) +{ + if(!this.highquality_render) + { + ctx.beginPath(); + ctx.moveTo(a[0],a[1]); + ctx.lineTo(b[0],b[1]); + ctx.stroke(); + return; + } + + start_dir = start_dir || LiteGraph.RIGHT; + end_dir = end_dir || LiteGraph.LEFT; + + var dist = distance(a,b); + + if(this.render_connections_border && this.scale > 0.6) + ctx.lineWidth = this.connections_width + 4; + + //choose color + if( !color && link ) + color = LGraphCanvas.link_type_colors[ link.type ]; + if( !color ) + color = this.default_link_color; + + if( link != null && this.highlighted_links[ link.id ] ) + color = "#FFF"; + + //begin line shape + ctx.beginPath(); + + if(this.render_curved_connections) //splines + { + ctx.moveTo(a[0],a[1]); + var start_offset_x = 0; + var start_offset_y = 0; + var end_offset_x = 0; + var end_offset_y = 0; + switch(start_dir) + { + case LiteGraph.LEFT: start_offset_x = dist*-0.25; break; + case LiteGraph.RIGHT: start_offset_x = dist*0.25; break; + case LiteGraph.UP: start_offset_y = dist*-0.25; break; + case LiteGraph.DOWN: start_offset_y = dist*0.25; break; + } + switch(end_dir) + { + case LiteGraph.LEFT: end_offset_x = dist*-0.25; break; + case LiteGraph.RIGHT: end_offset_x = dist*0.25; break; + case LiteGraph.UP: end_offset_y = dist*-0.25; break; + case LiteGraph.DOWN: end_offset_y = dist*0.25; break; + } + ctx.bezierCurveTo(a[0] + start_offset_x, a[1] + start_offset_y, + b[0] + end_offset_x , b[1] + end_offset_y, + b[0], b[1] ); + } + else //lines + { + ctx.moveTo(a[0]+10,a[1]); + ctx.lineTo(((a[0]+10) + (b[0]-10))*0.5,a[1]); + ctx.lineTo(((a[0]+10) + (b[0]-10))*0.5,b[1]); + ctx.lineTo(b[0]-10,b[1]); + } + + //rendering the outline of the connection can be a little bit slow + if(this.render_connections_border && this.scale > 0.6 && !skip_border) + { + ctx.strokeStyle = "rgba(0,0,0,0.5)"; + ctx.stroke(); + } + + ctx.lineWidth = this.connections_width; + ctx.fillStyle = ctx.strokeStyle = color; + ctx.stroke(); + //end line shape + + //render arrow in the middle + if( this.render_connection_arrows && this.scale >= 0.6 ) + { + //render arrow + if(this.render_connection_arrows && this.scale > 0.6) + { + //compute two points in the connection + var pos = this.computeConnectionPoint(a, b, 0.5, start_dir, end_dir); + var pos2 = this.computeConnectionPoint(a, b, 0.51, start_dir, end_dir); + + //compute the angle between them so the arrow points in the right direction + var angle = 0; + if(this.render_curved_connections) + angle = -Math.atan2( pos2[0] - pos[0], pos2[1] - pos[1]); + else + angle = b[1] > a[1] ? 0 : Math.PI; + + //render arrow + ctx.save(); + ctx.translate(pos[0],pos[1]); + ctx.rotate(angle); + ctx.beginPath(); + ctx.moveTo(-5,-5); + ctx.lineTo(0,+5); + ctx.lineTo(+5,-5); + ctx.fill(); + ctx.restore(); + } + } + + //render flowing points + if(flow) + { + for(var i = 0; i < 5; ++i) + { + var f = (LiteGraph.getTime() * 0.001 + (i * 0.2)) % 1; + var pos = this.computeConnectionPoint(a,b,f, start_dir, end_dir); + ctx.beginPath(); + ctx.arc(pos[0],pos[1],5,0,2*Math.PI); + ctx.fill(); + } + } +} + +LGraphCanvas.prototype.computeConnectionPoint = function(a,b,t,start_dir,end_dir) +{ + start_dir = start_dir || LiteGraph.RIGHT; + end_dir = end_dir || LiteGraph.LEFT; + + var dist = distance(a,b); + var p0 = a; + var p1 = [ a[0], a[1] ]; + var p2 = [ b[0], b[1] ]; + var p3 = b; + + switch(start_dir) + { + case LiteGraph.LEFT: p1[0] += dist*-0.25; break; + case LiteGraph.RIGHT: p1[0] += dist*0.25; break; + case LiteGraph.UP: p1[1] += dist*-0.25; break; + case LiteGraph.DOWN: p1[1] += dist*0.25; break; + } + switch(end_dir) + { + case LiteGraph.LEFT: p2[0] += dist*-0.25; break; + case LiteGraph.RIGHT: p2[0] += dist*0.25; break; + case LiteGraph.UP: p2[1] += dist*-0.25; break; + case LiteGraph.DOWN: p2[1] += dist*0.25; break; + } + + var c1 = (1-t)*(1-t)*(1-t); + var c2 = 3*((1-t)*(1-t))*t; + var c3 = 3*(1-t)*(t*t); + var c4 = t*t*t; + + var x = c1*p0[0] + c2*p1[0] + c3*p2[0] + c4*p3[0]; + var y = c1*p0[1] + c2*p1[1] + c3*p2[1] + c4*p3[1]; + return [x,y]; +} + +LGraphCanvas.prototype.drawExecutionOrder = function(ctx) +{ + ctx.shadowColor = "transparent"; + ctx.globalAlpha = 0.25; + + ctx.textAlign = "center"; + ctx.strokeStyle = "white"; + ctx.globalAlpha = 0.75; + + var visible_nodes = this.visible_nodes; + for (var i = 0; i < visible_nodes.length; ++i) + { + var node = visible_nodes[i]; + ctx.fillStyle = "black"; + ctx.fillRect( node.pos[0] - LiteGraph.NODE_TITLE_HEIGHT, node.pos[1] - LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT ); + if(node.order == 0) + ctx.strokeRect( node.pos[0] - LiteGraph.NODE_TITLE_HEIGHT + 0.5, node.pos[1] - LiteGraph.NODE_TITLE_HEIGHT + 0.5, LiteGraph.NODE_TITLE_HEIGHT, LiteGraph.NODE_TITLE_HEIGHT ); + ctx.fillStyle = "#FFF"; + ctx.fillText( node.order, node.pos[0] + LiteGraph.NODE_TITLE_HEIGHT * -0.5, node.pos[1] - 6 ); + } + ctx.globalAlpha = 1; +} + + +/** +* draws the widgets stored inside a node +* @method drawNodeWidgets +**/ +LGraphCanvas.prototype.drawNodeWidgets = function( node, posY, ctx, active_widget ) +{ + if(!node.widgets || !node.widgets.length) + return 0; + var width = node.size[0]; + var widgets = node.widgets; + posY += 2; + var H = LiteGraph.NODE_WIDGET_HEIGHT; + var show_text = this.scale > 0.5; + ctx.save(); + ctx.globalAlpha = this.editor_alpha; + + for(var i = 0; i < widgets.length; ++i) + { + var w = widgets[i]; + var y = posY; + if(w.y) + y = w.y; + w.last_y = y; + ctx.strokeStyle = "#AAA"; + ctx.fillStyle = "#222"; + ctx.textAlign = "left"; + + switch( w.type ) + { + case "button": + if(w.clicked) + { + ctx.fillStyle = "#AAA"; + w.clicked = false; + this.dirty_canvas = true; + } + ctx.fillRect(10,y,width-20,H); + ctx.strokeRect(10,y,width-20,H); + if(show_text) + { + ctx.textAlign = "center"; + ctx.fillStyle = "#AAA"; + ctx.fillText( w.name, width*0.5, y + H*0.7 ); + } + break; + case "toggle": + ctx.textAlign = "left"; + ctx.strokeStyle = "#AAA"; + ctx.fillStyle = "#111"; + ctx.beginPath(); + ctx.roundRect( 10, posY, width - 20, H,H*0.5 ); + ctx.fill(); + ctx.stroke(); + ctx.fillStyle = w.value ? "#89A" : "#333"; + ctx.beginPath(); + ctx.arc( width - 20, y + H*0.5, H * 0.36, 0, Math.PI * 2 ); + ctx.fill(); + if(show_text) + { + ctx.fillStyle = "#999"; + if(w.name != null) + ctx.fillText( w.name, 20, y + H*0.7 ); + ctx.fillStyle = w.value ? "#DDD" : "#888"; + ctx.textAlign = "right"; + ctx.fillText( w.value ? (w.options.on || "true") : (w.options.off || "false"), width - 30, y + H*0.7 ); + } + break; + case "slider": + ctx.fillStyle = "#111"; + ctx.fillRect(10,y,width-20,H); + var range = w.options.max - w.options.min; + var nvalue = (w.value - w.options.min) / range; + ctx.fillStyle = active_widget == w ? "#89A" : "#678"; + ctx.fillRect(10,y,nvalue*(width-20),H); + ctx.strokeRect(10,y,width-20,H); + if(show_text) + { + ctx.textAlign = "center"; + ctx.fillStyle = "#DDD"; + ctx.fillText( w.name + " " + Number(w.value).toFixed(3), width*0.5, y + H*0.7 ); + } + break; + case "number": + case "combo": + ctx.textAlign = "left"; + ctx.strokeStyle = "#AAA"; + ctx.fillStyle = "#111"; + ctx.beginPath(); + ctx.roundRect( 10, posY, width - 20, H,H*0.5 ); + ctx.fill(); + ctx.stroke(); + if(show_text) + { + ctx.fillStyle = "#AAA"; + ctx.beginPath(); + ctx.moveTo( 26, posY + 5 ); + ctx.lineTo( 16, posY + H*0.5 ); + ctx.lineTo( 26, posY + H - 5 ); + ctx.moveTo( width - 26, posY + 5 ); + ctx.lineTo( width - 16, posY + H*0.5 ); + ctx.lineTo( width - 26, posY + H - 5 ); + ctx.fill(); + ctx.fillStyle = "#999"; + ctx.fillText( w.name, 30, y + H*0.7 ); + ctx.fillStyle = "#DDD"; + ctx.textAlign = "right"; + if(w.type == "number") + ctx.fillText( Number(w.value).toFixed( w.options.precision !== undefined ? w.options.precision : 3), width - 40, y + H*0.7 ); + else + ctx.fillText( w.value, width - 40, y + H*0.7 ); + } + break; + case "text": + ctx.textAlign = "left"; + ctx.strokeStyle = "#AAA"; + ctx.fillStyle = "#111"; + ctx.beginPath(); + ctx.roundRect( 10, posY, width - 20, H,H*0.5 ); + ctx.fill(); + ctx.stroke(); + if(show_text) + { + ctx.fillStyle = "#999"; + if(w.name != null) + ctx.fillText( w.name, 20, y + H*0.7 ); + ctx.fillStyle = "#DDD"; + ctx.textAlign = "right"; + ctx.fillText( w.value, width - 20, y + H*0.7 ); + } + break; + default: + break; + } + posY += H + 4; + } + ctx.restore(); +} + +/** +* process an event on widgets +* @method processNodeWidgets +**/ +LGraphCanvas.prototype.processNodeWidgets = function( node, pos, event, active_widget ) +{ + if(!node.widgets || !node.widgets.length) + return null; + + var x = pos[0] - node.pos[0]; + var y = pos[1] - node.pos[1]; + var width = node.size[0]; + var that = this; + + for(var i = 0; i < node.widgets.length; ++i) + { + var w = node.widgets[i]; + if( w == active_widget || (x > 6 && x < (width - 12) && y > w.last_y && y < (w.last_y + LiteGraph.NODE_WIDGET_HEIGHT)) ) + { + //inside widget + switch( w.type ) + { + case "button": + if(w.callback) + setTimeout( function(){ w.callback( w, that, node, pos ); }, 20 ); + w.clicked = true; + this.dirty_canvas = true; + break; + case "slider": + var range = w.options.max - w.options.min; + var nvalue = Math.clamp( (x - 10) / (width - 20), 0, 1); + w.value = w.options.min + (w.options.max - w.options.min) * nvalue; + if(w.callback) + setTimeout( function(){ w.callback( w.value, that, node, pos ); }, 20 ); + this.dirty_canvas = true; + break; + case "number": + case "combo": + if(event.type == "mousemove" && w.type == "number") + { + w.value += (event.deltaX * 0.1) * (w.options.step || 1); + if(w.options.min != null && w.value < w.options.min) + w.value = w.options.min; + if(w.options.max != null && w.value > w.options.max) + w.value = w.options.max; + } + else if( event.type == "mousedown" ) + { + var delta = ( x < 40 ? -1 : ( x > width - 40 ? 1 : 0) ); + if (w.type == "number") + { + w.value += delta * 0.1 * (w.options.step || 1); + if(w.options.min != null && w.value < w.options.min) + w.value = w.options.min; + if(w.options.max != null && w.value > w.options.max) + w.value = w.options.max; + } + else if(delta) + { + var index = w.options.values.indexOf( w.value ) + delta; + if( index >= w.options.values.length ) + index = 0; + if( index < 0 ) + index = w.options.values.length - 1; + w.value = w.options.values[ index ]; + } + } + if(w.callback) + setTimeout( (function(){ this.callback( this.value, that, node, pos ); }).bind(w), 20 ); + this.dirty_canvas = true; + break; + case "toggle": + if( event.type == "mousedown" ) + w.value = !w.value; + break; + case "text": + if( event.type == "mousedown" ) + this.prompt( "Value", w.value, (function(v){ this.value = v; }).bind(w), event ); + break; + } + + return w; + } + } + return null; +} + +/** +* draws every group area in the background +* @method drawGroups +**/ +LGraphCanvas.prototype.drawGroups = function(canvas, ctx) +{ + if(!this.graph) + return; + + var groups = this.graph._groups; + + ctx.save(); + ctx.globalAlpha = 0.5 * this.editor_alpha; + ctx.font = "24px Arial"; + + for(var i = 0; i < groups.length; ++i) + { + var group = groups[i]; + + if(!overlapBounding( this.visible_area, group._bounding )) + continue; //out of the visible area + + ctx.fillStyle = group.color || "#335"; + ctx.strokeStyle = group.color || "#335"; + var pos = group._pos; + var size = group._size; + ctx.globalAlpha = 0.25 * this.editor_alpha; + ctx.beginPath(); + ctx.rect( pos[0] + 0.5, pos[1] + 0.5, size[0], size[1] ); + ctx.fill(); + ctx.globalAlpha = this.editor_alpha;; + ctx.stroke(); + + ctx.beginPath(); + ctx.moveTo( pos[0] + size[0], pos[1] + size[1] ); + ctx.lineTo( pos[0] + size[0] - 10, pos[1] + size[1] ); + ctx.lineTo( pos[0] + size[0], pos[1] + size[1] - 10 ); + ctx.fill(); + + ctx.fillText( group.title, pos[0] + 4, pos[1] + 24 ); + } + + ctx.restore(); +} + +/** +* resizes the canvas to a given size, if no size is passed, then it tries to fill the parentNode +* @method resize +**/ +LGraphCanvas.prototype.resize = function(width, height) +{ + if(!width && !height) + { + var parent = this.canvas.parentNode; + width = parent.offsetWidth; + height = parent.offsetHeight; + } + + if(this.canvas.width == width && this.canvas.height == height) + return; + + this.canvas.width = width; + this.canvas.height = height; + this.bgcanvas.width = this.canvas.width; + this.bgcanvas.height = this.canvas.height; + this.setDirty(true,true); +} + +/** +* switches to live mode (node shapes are not rendered, only the content) +* this feature was designed when graphs where meant to create user interfaces +* @method switchLiveMode +**/ +LGraphCanvas.prototype.switchLiveMode = function(transition) +{ + if(!transition) + { + this.live_mode = !this.live_mode; + this.dirty_canvas = true; + this.dirty_bgcanvas = true; + return; + } + + var self = this; + var delta = this.live_mode ? 1.1 : 0.9; + if(this.live_mode) + { + this.live_mode = false; + this.editor_alpha = 0.1; + } + + var t = setInterval(function() { + self.editor_alpha *= delta; + self.dirty_canvas = true; + self.dirty_bgcanvas = true; + + if(delta < 1 && self.editor_alpha < 0.01) + { + clearInterval(t); + if(delta < 1) + self.live_mode = true; + } + if(delta > 1 && self.editor_alpha > 0.99) + { + clearInterval(t); + self.editor_alpha = 1; + } + },1); +} + +LGraphCanvas.prototype.onNodeSelectionChange = function(node) +{ + return; //disabled +} + +LGraphCanvas.prototype.touchHandler = function(event) +{ + //alert("foo"); + var touches = event.changedTouches, + first = touches[0], + type = ""; + + switch(event.type) + { + case "touchstart": type = "mousedown"; break; + case "touchmove": type = "mousemove"; break; + case "touchend": type = "mouseup"; break; + default: return; + } + + //initMouseEvent(type, canBubble, cancelable, view, clickCount, + // screenX, screenY, clientX, clientY, ctrlKey, + // altKey, shiftKey, metaKey, button, relatedTarget); + + var window = this.getCanvasWindow(); + var document = window.document; + + var simulatedEvent = document.createEvent("MouseEvent"); + simulatedEvent.initMouseEvent(type, true, true, window, 1, + first.screenX, first.screenY, + first.clientX, first.clientY, false, + false, false, false, 0/*left*/, null); + first.target.dispatchEvent(simulatedEvent); + event.preventDefault(); +} + +/* CONTEXT MENU ********************/ + +LGraphCanvas.onGroupAdd = function(info,entry,mouse_event) +{ + var canvas = LGraphCanvas.active_canvas; + var ref_window = canvas.getCanvasWindow(); + + var group = new LiteGraph.LGraphGroup(); + group.pos = canvas.convertEventToCanvas( mouse_event ); + canvas.graph.add( group ); +} + +LGraphCanvas.onMenuAdd = function( node, options, e, prev_menu ) +{ + var canvas = LGraphCanvas.active_canvas; + var ref_window = canvas.getCanvasWindow(); + + var values = LiteGraph.getNodeTypesCategories(); + var entries = []; + for(var i in values) + if(values[i]) + entries.push({ value: values[i], content: values[i], has_submenu: true }); + + //show categories + var menu = new LiteGraph.ContextMenu( entries, { event: e, callback: inner_clicked, parentMenu: prev_menu }, ref_window); + + function inner_clicked( v, option, e ) + { + var category = v.value; + var node_types = LiteGraph.getNodeTypesInCategory( category, canvas.filter ); + var values = []; + for(var i in node_types) + if (!node_types[i].skip_list) + values.push( { content: node_types[i].title, value: node_types[i].type }); + + new LiteGraph.ContextMenu( values, {event: e, callback: inner_create, parentMenu: menu }, ref_window); + return false; + } + + function inner_create( v, e ) + { + var first_event = prev_menu.getFirstEvent(); + var node = LiteGraph.createNode( v.value ); + if(node) + { + node.pos = canvas.convertEventToCanvas( first_event ); + canvas.graph.add( node ); + } + } + + return false; +} + +LGraphCanvas.onMenuCollapseAll = function() +{ + +} + + +LGraphCanvas.onMenuNodeEdit = function() +{ + +} + +LGraphCanvas.showMenuNodeOptionalInputs = function( v, options, e, prev_menu, node ) +{ + if(!node) + return; + + var that = this; + var canvas = LGraphCanvas.active_canvas; + var ref_window = canvas.getCanvasWindow(); + + var options = node.optional_inputs; + if(node.onGetInputs) + options = node.onGetInputs(); + + var entries = []; + if(options) + for (var i in options) + { + var entry = options[i]; + if(!entry) + { + entries.push(null); + continue; + } + var label = entry[0]; + if(entry[2] && entry[2].label) + label = entry[2].label; + var data = {content: label, value: entry}; + if(entry[1] == LiteGraph.ACTION) + data.className = "event"; + entries.push(data); + } + + if(this.onMenuNodeInputs) + entries = this.onMenuNodeInputs( entries ); + + if(!entries.length) + return; + + var menu = new LiteGraph.ContextMenu(entries, { event: e, callback: inner_clicked, parentMenu: prev_menu, node: node }, ref_window); + + function inner_clicked(v, e, prev) + { + if(!node) + return; + + if(v.callback) + v.callback.call( that, node, v, e, prev ); + + if(v.value) + { + node.addInput(v.value[0],v.value[1], v.value[2]); + node.setDirtyCanvas(true,true); + } + } + + return false; +} + +LGraphCanvas.showMenuNodeOptionalOutputs = function( v, options, e, prev_menu, node ) +{ + if(!node) + return; + + var that = this; + var canvas = LGraphCanvas.active_canvas; + var ref_window = canvas.getCanvasWindow(); + + var options = node.optional_outputs; + if(node.onGetOutputs) + options = node.onGetOutputs(); + + var entries = []; + if(options) + for (var i in options) + { + var entry = options[i]; + if(!entry) //separator? + { + entries.push(null); + continue; + } + + if(node.flags && node.flags.skip_repeated_outputs && node.findOutputSlot(entry[0]) != -1) + continue; //skip the ones already on + var label = entry[0]; + if(entry[2] && entry[2].label) + label = entry[2].label; + var data = {content: label, value: entry}; + if(entry[1] == LiteGraph.EVENT) + data.className = "event"; + entries.push(data); + } + + if(this.onMenuNodeOutputs) + entries = this.onMenuNodeOutputs( entries ); + + if(!entries.length) + return; + + var menu = new LiteGraph.ContextMenu(entries, {event: e, callback: inner_clicked, parentMenu: prev_menu, node: node }, ref_window); + + function inner_clicked( v, e, prev ) + { + if(!node) + return; + + if(v.callback) + v.callback.call( that, node, v, e, prev ); + + if(!v.value) + return; + + var value = v.value[1]; + + if(value && (value.constructor === Object || value.constructor === Array)) //submenu why? + { + var entries = []; + for(var i in value) + entries.push({ content: i, value: value[i]}); + new LiteGraph.ContextMenu( entries, { event: e, callback: inner_clicked, parentMenu: prev_menu, node: node }); + return false; + } + else + { + node.addOutput( v.value[0], v.value[1], v.value[2]); + node.setDirtyCanvas(true,true); + } + + } + + return false; +} + +LGraphCanvas.onShowMenuNodeProperties = function( value, options, e, prev_menu, node ) +{ + if(!node || !node.properties) + return; + + var that = this; + var canvas = LGraphCanvas.active_canvas; + var ref_window = canvas.getCanvasWindow(); + + var entries = []; + for (var i in node.properties) + { + var value = node.properties[i] !== undefined ? node.properties[i] : " "; + //value could contain invalid html characters, clean that + value = LGraphCanvas.decodeHTML(value); + entries.push({content: "" + i + "" + "" + value + "", value: i}); + } + if(!entries.length) + return; + + var menu = new LiteGraph.ContextMenu(entries, {event: e, callback: inner_clicked, parentMenu: prev_menu, allow_html: true, node: node },ref_window); + + function inner_clicked( v, options, e, prev ) + { + if(!node) + return; + var rect = this.getBoundingClientRect(); + canvas.showEditPropertyValue( node, v.value, { position: [rect.left, rect.top] }); + } + + return false; +} + +LGraphCanvas.decodeHTML = function( str ) +{ + var e = document.createElement("div"); + e.innerText = str; + return e.innerHTML; +} + +LGraphCanvas.onResizeNode = function( value, options, e, menu, node ) +{ + if(!node) + return; + node.size = node.computeSize(); + node.setDirtyCanvas(true,true); +} + + +LGraphCanvas.onShowTitleEditor = function( value, options, e, menu, node ) +{ + var input_html = ""; + + var dialog = document.createElement("div"); + dialog.className = "graphdialog"; + dialog.innerHTML = "Title"; + var input = dialog.querySelector("input"); + if(input) + { + input.value = node.title; + input.addEventListener("blur", function(e){ + this.focus(); + }); + input.addEventListener("keydown", function(e){ + if(e.keyCode != 13) + return; + inner(); + e.preventDefault(); + e.stopPropagation(); + }); + } + + var graphcanvas = LGraphCanvas.active_canvas; + var canvas = graphcanvas.canvas; + + var rect = canvas.getBoundingClientRect(); + var offsetx = -20; + var offsety = -20; + if(rect) + { + offsetx -= rect.left; + offsety -= rect.top; + } + + if( event ) + { + dialog.style.left = (event.pageX + offsetx) + "px"; + dialog.style.top = (event.pageY + offsety)+ "px"; + } + else + { + dialog.style.left = (canvas.width * 0.5 + offsetx) + "px"; + dialog.style.top = (canvas.height * 0.5 + offsety) + "px"; + } + + var button = dialog.querySelector("button"); + button.addEventListener("click", inner ); + canvas.parentNode.appendChild( dialog ); + + function inner() + { + setValue( input.value ); + } + + function setValue(value) + { + node.title = value; + dialog.parentNode.removeChild( dialog ); + node.setDirtyCanvas(true,true); + } +} + +LGraphCanvas.prototype.prompt = function( title, value, callback, event ) +{ + var that = this; + var input_html = ""; + title = title || ""; + + var dialog = document.createElement("div"); + dialog.className = "graphdialog rounded"; + dialog.innerHTML = " "; + dialog.close = function() + { + that.prompt_box = null; + dialog.parentNode.removeChild( dialog ); + } + + dialog.addEventListener("mouseleave",function(e){ + dialog.close(); + }); + + if(that.prompt_box) + that.prompt_box.close(); + that.prompt_box = dialog; + + var first = null; + var timeout = null; + var selected = null; + + var name_element = dialog.querySelector(".name"); + name_element.innerText = title; + var value_element = dialog.querySelector(".value"); + value_element.value = value; + + var input = dialog.querySelector("input"); + input.addEventListener("keydown", function(e){ + if(e.keyCode == 27) //ESC + dialog.close(); + else if(e.keyCode == 13) + { + if( callback ) + callback( this.value ); + dialog.close(); + } + else + return; + e.preventDefault(); + e.stopPropagation(); + }); + + var button = dialog.querySelector("button"); + button.addEventListener("click", function(e){ + if( callback ) + callback( input.value ); + that.setDirty(true); + dialog.close(); + }); + + var graphcanvas = LGraphCanvas.active_canvas; + var canvas = graphcanvas.canvas; + + var rect = canvas.getBoundingClientRect(); + var offsetx = -20; + var offsety = -20; + if(rect) + { + offsetx -= rect.left; + offsety -= rect.top; + } + + if( event ) + { + dialog.style.left = (event.pageX + offsetx) + "px"; + dialog.style.top = (event.pageY + offsety)+ "px"; + } + else + { + dialog.style.left = (canvas.width * 0.5 + offsetx) + "px"; + dialog.style.top = (canvas.height * 0.5 + offsety) + "px"; + } + + canvas.parentNode.appendChild( dialog ); + setTimeout( function(){ input.focus(); },10 ); + + return dialog; +} + + +LGraphCanvas.search_filter = false; +LGraphCanvas.search_limit = -1; +LGraphCanvas.prototype.showSearchBox = function(event) +{ + var that = this; + var input_html = ""; + + var dialog = document.createElement("div"); + dialog.className = "litegraph litesearchbox graphdialog rounded"; + dialog.innerHTML = "Search
"; + dialog.close = function() + { + that.search_box = null; + dialog.parentNode.removeChild( dialog ); + } + + dialog.addEventListener("mouseleave",function(e){ + dialog.close(); + }); + + if(that.search_box) + that.search_box.close(); + that.search_box = dialog; + + var helper = dialog.querySelector(".helper"); + + var first = null; + var timeout = null; + var selected = null; + + var input = dialog.querySelector("input"); + if(input) + { + input.addEventListener("blur", function(e){ + this.focus(); + }); + input.addEventListener("keydown", function(e){ + + if(e.keyCode == 38) //UP + changeSelection(false); + else if(e.keyCode == 40) //DOWN + changeSelection(true); + else if(e.keyCode == 27) //ESC + dialog.close(); + else if(e.keyCode == 13) + { + if(selected) + select( selected.innerHTML ) + else if(first) + select(first); + else + dialog.close(); + } + else + { + if(timeout) + clearInterval(timeout); + timeout = setTimeout( refreshHelper, 10 ); + return; + } + e.preventDefault(); + e.stopPropagation(); + }); + } + + var graphcanvas = LGraphCanvas.active_canvas; + var canvas = graphcanvas.canvas; + + var rect = canvas.getBoundingClientRect(); + var offsetx = -20; + var offsety = -20; + if(rect) + { + offsetx -= rect.left; + offsety -= rect.top; + } + + if( event ) + { + dialog.style.left = (event.pageX + offsetx) + "px"; + dialog.style.top = (event.pageY + offsety)+ "px"; + } + else + { + dialog.style.left = (canvas.width * 0.5 + offsetx) + "px"; + dialog.style.top = (canvas.height * 0.5 + offsety) + "px"; + } + + canvas.parentNode.appendChild( dialog ); + input.focus(); + + function select( name ) + { + if(name) + { + if( that.onSearchBoxSelection ) + that.onSearchBoxSelection( name, event, graphcanvas ); + else + { + var node = LiteGraph.createNode( name ); + if(node) + { + node.pos = graphcanvas.convertEventToCanvas( event ); + graphcanvas.graph.add( node ); + } + } + } + + dialog.close(); + } + + function changeSelection( forward ) + { + var prev = selected; + if(selected) + selected.classList.remove("selected"); + if(!selected) + selected = forward ? helper.childNodes[0] : helper.childNodes[ helper.childNodes.length ]; + else + { + selected = forward ? selected.nextSibling : selected.previousSibling; + if(!selected) + selected = prev; + } + if(!selected) + return; + selected.classList.add("selected"); + selected.scrollIntoView(); + } + + function refreshHelper() { + timeout = null; + var str = input.value; + first = null; + helper.innerHTML = ""; + if (!str) + return; + + if (that.onSearchBox){ + that.onSearchBox(help, str, graphcanvas); + } else { + function addResult(result) { + var help = document.createElement("div"); + if (!first) first = result; + help.innerText = result; + help.className = "litegraph lite-search-item"; + help.addEventListener("click", function (e) { + select(this.innerText); + }); + helper.appendChild(help); + } + let c = 0; + if(LGraphCanvas.search_filter) { + str = str.toLowerCase(); + + var keys = Object.keys(LiteGraph.registered_node_types); + var filtered = keys.filter(function (item) { + return item.toLowerCase().indexOf(str) !== -1; + }); + for(var i = 0; i < filtered.length; i++) { + addResult(filtered[i]); + if(LGraphCanvas.search_limit !== -1 && c++ > LGraphCanvas.search_limit) break; + } + } else { + for (var i in LiteGraph.registered_node_types) { + if (i.indexOf(str) != -1) { + addResult(i); + if(LGraphCanvas.search_limit !== -1 && c++ > LGraphCanvas.search_limit) break; + } + } + } + } + } + + return dialog; +} + +LGraphCanvas.prototype.showEditPropertyValue = function( node, property, options ) +{ + if(!node || node.properties[ property ] === undefined ) + return; + + options = options || {}; + var that = this; + + var type = "string"; + + if(node.properties[ property ] !== null) + type = typeof(node.properties[ property ]); + + //for arrays + if(type == "object") + { + if( node.properties[ property ].length ) + type = "array"; + } + + var info = null; + if(node.getPropertyInfo) + info = node.getPropertyInfo(property); + if(node.properties_info) + { + for(var i = 0; i < node.properties_info.length; ++i) + { + if( node.properties_info[i].name == property ) + { + info = node.properties_info[i]; + break; + } + } + } + + if(info !== undefined && info !== null && info.type ) + type = info.type; + + var input_html = ""; + + if(type == "string" || type == "number" || type == "array") + input_html = ""; + else if(type == "enum" && info.values) + { + input_html = ""; + } + else if(type == "boolean") + { + input_html = ""; + } + else + { + console.warn("unknown type: " + type ); + return; + } + + var dialog = this.createDialog( "" + property + ""+input_html+"" , options ); + + if(type == "enum" && info.values) + { + var input = dialog.querySelector("select"); + input.addEventListener("change", function(e){ + setValue( e.target.value ); + //var index = e.target.value; + //setValue( e.options[e.selectedIndex].value ); + }); + } + else if(type == "boolean") + { + var input = dialog.querySelector("input"); + if(input) + { + input.addEventListener("click", function(e){ + setValue( !!input.checked ); + }); + } + } + else + { + var input = dialog.querySelector("input"); + if(input) + { + input.addEventListener("blur", function(e){ + this.focus(); + }); + input.value = node.properties[ property ] !== undefined ? node.properties[ property ] : ""; + input.addEventListener("keydown", function(e){ + if(e.keyCode != 13) + return; + inner(); + e.preventDefault(); + e.stopPropagation(); + }); + } + } + + var button = dialog.querySelector("button"); + button.addEventListener("click", inner ); + + function inner() + { + setValue( input.value ); + } + + function setValue(value) + { + if(typeof( node.properties[ property ] ) == "number") + value = Number(value); + if(type == "array") + value = value.split(",").map(Number); + node.properties[ property ] = value; + if(node._graph) + node._graph._version++; + if(node.onPropertyChanged) + node.onPropertyChanged( property, value ); + dialog.close(); + node.setDirtyCanvas(true,true); + } +} + +LGraphCanvas.prototype.createDialog = function( html, options ) +{ + options = options || {}; + + var dialog = document.createElement("div"); + dialog.className = "graphdialog"; + dialog.innerHTML = html; + + var rect = this.canvas.getBoundingClientRect(); + var offsetx = -20; + var offsety = -20; + if(rect) + { + offsetx -= rect.left; + offsety -= rect.top; + } + + if( options.position ) + { + offsetx += options.position[0]; + offsety += options.position[1]; + } + else if( options.event ) + { + offsetx += options.event.pageX; + offsety += options.event.pageY; + } + else //centered + { + offsetx += this.canvas.width * 0.5; + offsety += this.canvas.height * 0.5; + } + + dialog.style.left = offsetx + "px"; + dialog.style.top = offsety + "px"; + + this.canvas.parentNode.appendChild( dialog ); + + dialog.close = function() + { + if(this.parentNode) + this.parentNode.removeChild( this ); + } + + return dialog; +} + +LGraphCanvas.onMenuNodeCollapse = function( value, options, e, menu, node ) +{ + node.collapse(); +} + +LGraphCanvas.onMenuNodePin = function( value, options, e, menu, node ) +{ + node.pin(); +} + +LGraphCanvas.onMenuNodeMode = function( value, options, e, menu, node ) +{ + new LiteGraph.ContextMenu(["Always","On Event","On Trigger","Never"], {event: e, callback: inner_clicked, parentMenu: menu, node: node }); + + function inner_clicked(v) + { + if(!node) + return; + switch(v) + { + case "On Event": node.mode = LiteGraph.ON_EVENT; break; + case "On Trigger": node.mode = LiteGraph.ON_TRIGGER; break; + case "Never": node.mode = LiteGraph.NEVER; break; + case "Always": + default: + node.mode = LiteGraph.ALWAYS; break; + } + } + + return false; +} + +LGraphCanvas.onMenuNodeColors = function( value, options, e, menu, node ) +{ + if(!node) + throw("no node for color"); + + var values = []; + values.push({ value:null, content:"No color" }); + + for(var i in LGraphCanvas.node_colors) + { + var color = LGraphCanvas.node_colors[i]; + var value = { value:i, content:""+i+"" }; + values.push(value); + } + new LiteGraph.ContextMenu( values, { event: e, callback: inner_clicked, parentMenu: menu, node: node }); + + function inner_clicked(v) + { + if(!node) + return; + + var color = v.value ? LGraphCanvas.node_colors[ v.value ] : null; + if(color) + { + if(node.constructor === LiteGraph.LGraphGroup) + node.color = color.groupcolor; + else + { + node.color = color.color; + node.bgcolor = color.bgcolor; + } + } + else + { + delete node.color; + delete node.bgcolor; + } + node.setDirtyCanvas(true,true); + } + + return false; +} + +LGraphCanvas.onMenuNodeShapes = function( value, options, e, menu, node ) +{ + if(!node) + throw("no node passed"); + + new LiteGraph.ContextMenu( LiteGraph.VALID_SHAPES, { event: e, callback: inner_clicked, parentMenu: menu, node: node }); + + function inner_clicked(v) + { + if(!node) + return; + node.shape = v; + node.setDirtyCanvas(true); + } + + return false; +} + +LGraphCanvas.onMenuNodeRemove = function( value, options, e, menu, node ) +{ + if(!node) + throw("no node passed"); + + if(node.removable === false) + return; + + node.graph.remove(node); + node.setDirtyCanvas(true,true); +} + +LGraphCanvas.onMenuNodeClone = function( value, options, e, menu, node ) +{ + if(node.clonable == false) return; + var newnode = node.clone(); + if(!newnode) + return; + newnode.pos = [node.pos[0]+5,node.pos[1]+5]; + node.graph.add(newnode); + node.setDirtyCanvas(true,true); +} + +LGraphCanvas.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" } +}; + +LGraphCanvas.prototype.getCanvasMenuOptions = function() +{ + var options = null; + if(this.getMenuOptions) + options = this.getMenuOptions(); + else + { + options = [ + { content:"Add Node", has_submenu: true, callback: LGraphCanvas.onMenuAdd }, + { content:"Add Group", callback: LGraphCanvas.onGroupAdd } + //{content:"Collapse All", callback: LGraphCanvas.onMenuCollapseAll } + ]; + + if(this._graph_stack && this._graph_stack.length > 0) + options.push(null,{content:"Close subgraph", callback: this.closeSubgraph.bind(this) }); + } + + if(this.getExtraMenuOptions) + { + var extra = this.getExtraMenuOptions(this,options); + if(extra) + options = options.concat( extra ); + } + + return options; +} + +//called by processContextMenu to extract the menu list +LGraphCanvas.prototype.getNodeMenuOptions = function( node ) +{ + var options = null; + + if(node.getMenuOptions) + options = node.getMenuOptions(this); + else + options = [ + {content:"Inputs", has_submenu: true, disabled:true, callback: LGraphCanvas.showMenuNodeOptionalInputs }, + {content:"Outputs", has_submenu: true, disabled:true, callback: LGraphCanvas.showMenuNodeOptionalOutputs }, + null, + {content:"Properties", has_submenu: true, callback: LGraphCanvas.onShowMenuNodeProperties }, + null, + {content:"Title", callback: LGraphCanvas.onShowTitleEditor }, + {content:"Mode", has_submenu: true, callback: LGraphCanvas.onMenuNodeMode }, + {content:"Resize", callback: LGraphCanvas.onResizeNode }, + {content:"Collapse", callback: LGraphCanvas.onMenuNodeCollapse }, + {content:"Pin", callback: LGraphCanvas.onMenuNodePin }, + {content:"Colors", has_submenu: true, callback: LGraphCanvas.onMenuNodeColors }, + {content:"Shapes", has_submenu: true, callback: LGraphCanvas.onMenuNodeShapes }, + null + ]; + + if(node.getExtraMenuOptions) + { + var extra = node.getExtraMenuOptions(this); + if(extra) + { + extra.push(null); + options = extra.concat( options ); + } + } + + if( node.clonable !== false ) + options.push({content:"Clone", callback: LGraphCanvas.onMenuNodeClone }); + if( node.removable !== false ) + options.push(null,{content:"Remove", callback: LGraphCanvas.onMenuNodeRemove }); + + if(node.onGetInputs) + { + var inputs = node.onGetInputs(); + if(inputs && inputs.length) + options[0].disabled = false; + } + + if(node.onGetOutputs) + { + var outputs = node.onGetOutputs(); + if(outputs && outputs.length ) + options[1].disabled = false; + } + + if(node.graph && node.graph.onGetNodeMenuOptions ) + node.graph.onGetNodeMenuOptions( options, node ); + + return options; +} + +LGraphCanvas.prototype.getGroupMenuOptions = function( node ) +{ + var o = [ + {content:"Title", callback: LGraphCanvas.onShowTitleEditor }, + {content:"Color", has_submenu: true, callback: LGraphCanvas.onMenuNodeColors }, + null, + {content:"Remove", callback: LGraphCanvas.onMenuNodeRemove } + ]; + + return o; +} + +LGraphCanvas.prototype.processContextMenu = function( node, event ) +{ + var that = this; + var canvas = LGraphCanvas.active_canvas; + var ref_window = canvas.getCanvasWindow(); + + var menu_info = null; + var options = { event: event, callback: inner_option_clicked, extra: node }; + + //check if mouse is in input + var slot = null; + if(node) + { + slot = node.getSlotInPosition( event.canvasX, event.canvasY ); + LGraphCanvas.active_node = node; + } + + if(slot) //on slot + { + menu_info = []; + if(slot && slot.output && slot.output.links && slot.output.links.length) + menu_info.push( { content: "Disconnect Links", slot: slot } ); + menu_info.push( slot.locked ? "Cannot remove" : { content: "Remove Slot", slot: slot } ); + menu_info.push( slot.nameLocked ? "Cannot rename" : { content: "Rename Slot", slot: slot } ); + options.title = (slot.input ? slot.input.type : slot.output.type) || "*"; + if(slot.input && slot.input.type == LiteGraph.ACTION) + options.title = "Action"; + if(slot.output && slot.output.type == LiteGraph.EVENT) + options.title = "Event"; + } + else + { + if( node ) //on node + menu_info = this.getNodeMenuOptions(node); + else + { + menu_info = this.getCanvasMenuOptions(); + var group = this.graph.getGroupOnPos( event.canvasX, event.canvasY ); + if( group ) //on group + menu_info.push(null,{content:"Edit Group", has_submenu: true, submenu: { title:"Group", extra: group, options: this.getGroupMenuOptions( group ) }}); + } + } + + //show menu + if(!menu_info) + return; + + var menu = new LiteGraph.ContextMenu( menu_info, options, ref_window ); + + function inner_option_clicked( v, options, e ) + { + if(!v) + return; + + if(v.content == "Remove Slot") + { + var info = v.slot; + if(info.input) + node.removeInput( info.slot ); + else if(info.output) + node.removeOutput( info.slot ); + return; + } + else if(v.content == "Disconnect Links") + { + var info = v.slot; + if(info.output) + node.disconnectOutput( info.slot ); + else if(info.input) + node.disconnectInput( info.slot ); + return; + } + else if( v.content == "Rename Slot") + { + var info = v.slot; + var slot_info = info.input ? node.getInputInfo( info.slot ) : node.getOutputInfo( info.slot ); + var dialog = that.createDialog( "Name" , options ); + var input = dialog.querySelector("input"); + if(input && slot_info){ + input.value = slot_info.label; + } + dialog.querySelector("button").addEventListener("click",function(e){ + if(input.value) + { + if( slot_info ) + slot_info.label = input.value; + that.setDirty(true); + } + dialog.close(); + }); + } + + //if(v.callback) + // return v.callback.call(that, node, options, e, menu, that, event ); + } +} + + + + + + +//API ************************************************* +//like rect but rounded corners +if(this.CanvasRenderingContext2D) +CanvasRenderingContext2D.prototype.roundRect = function (x, y, width, height, radius, radius_low) { + if ( radius === undefined ) { + radius = 5; + } + + if(radius_low === undefined) + radius_low = radius; + + this.moveTo(x + radius, y); + this.lineTo(x + width - radius, y); + this.quadraticCurveTo(x + width, y, x + width, y + radius); + + this.lineTo(x + width, y + height - radius_low); + this.quadraticCurveTo(x + width, y + height, x + width - radius_low, y + height); + this.lineTo(x + radius_low, y + height); + this.quadraticCurveTo(x, y + height, x, y + height - radius_low); + this.lineTo(x, y + radius); + this.quadraticCurveTo(x, y, x + radius, y); +} + +function compareObjects(a,b) +{ + for(var i in a) + if(a[i] != b[i]) + return false; + return true; +} +LiteGraph.compareObjects = compareObjects; + +function distance(a,b) +{ + return Math.sqrt( (b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]) ); +} +LiteGraph.distance = distance; + +function colorToString(c) +{ + return "rgba(" + Math.round(c[0] * 255).toFixed() + "," + Math.round(c[1] * 255).toFixed() + "," + Math.round(c[2] * 255).toFixed() + "," + (c.length == 4 ? c[3].toFixed(2) : "1.0") + ")"; +} +LiteGraph.colorToString = colorToString; + +function isInsideRectangle( x,y, left, top, width, height) +{ + if (left < x && (left + width) > x && + top < y && (top + height) > y) + return true; + return false; +} +LiteGraph.isInsideRectangle = isInsideRectangle; + +//[minx,miny,maxx,maxy] +function growBounding( bounding, x,y) +{ + if(x < bounding[0]) + bounding[0] = x; + else if(x > bounding[2]) + bounding[2] = x; + + if(y < bounding[1]) + bounding[1] = y; + else if(y > bounding[3]) + bounding[3] = y; +} +LiteGraph.growBounding = growBounding; + +//point inside boundin box +function isInsideBounding(p,bb) +{ + if (p[0] < bb[0][0] || + p[1] < bb[0][1] || + p[0] > bb[1][0] || + p[1] > bb[1][1]) + return false; + return true; +} +LiteGraph.isInsideBounding = isInsideBounding; + +//boundings overlap, format: [ startx, starty, width, height ] +function overlapBounding(a,b) +{ + var A_end_x = a[0] + a[2]; + var A_end_y = a[1] + a[3]; + var B_end_x = b[0] + b[2]; + var B_end_y = b[1] + b[3]; + + if ( a[0] > B_end_x || + a[1] > B_end_y || + A_end_x < b[0] || + A_end_y < b[1]) + return false; + return true; +} +LiteGraph.overlapBounding = overlapBounding; + +//Convert a hex value to its decimal value - the inputted hex must be in the +// format of a hex triplet - the kind we use for HTML colours. The function +// will return an array with three values. +function hex2num(hex) { + if(hex.charAt(0) == "#") hex = hex.slice(1); //Remove the '#' char - if there is one. + hex = hex.toUpperCase(); + var hex_alphabets = "0123456789ABCDEF"; + var value = new Array(3); + var k = 0; + var int1,int2; + for(var i=0;i<6;i+=2) { + int1 = hex_alphabets.indexOf(hex.charAt(i)); + int2 = hex_alphabets.indexOf(hex.charAt(i+1)); + value[k] = (int1 * 16) + int2; + k++; + } + return(value); +} + +LiteGraph.hex2num = hex2num; + +//Give a array with three values as the argument and the function will return +// the corresponding hex triplet. +function num2hex(triplet) { + var hex_alphabets = "0123456789ABCDEF"; + var hex = "#"; + var int1,int2; + for(var i=0;i<3;i++) { + int1 = triplet[i] / 16; + int2 = triplet[i] % 16; + + hex += hex_alphabets.charAt(int1) + hex_alphabets.charAt(int2); + } + return(hex); +} + +LiteGraph.num2hex = num2hex; + +/* LiteGraph GUI elements used for canvas editing *************************************/ + +/** +* ContextMenu from LiteGUI +* +* @class ContextMenu +* @constructor +* @param {Array} values (allows object { title: "Nice text", callback: function ... }) +* @param {Object} options [optional] Some options:\ +* - title: title to show on top of the menu +* - callback: function to call when an option is clicked, it receives the item information +* - ignore_item_callbacks: ignores the callback inside the item, it just calls the options.callback +* - event: you can pass a MouseEvent, this way the ContextMenu appears in that position +*/ +function ContextMenu( values, options ) +{ + options = options || {}; + this.options = options; + var that = this; + + //to link a menu with its parent + if(options.parentMenu) + { + if( options.parentMenu.constructor !== this.constructor ) + { + console.error("parentMenu must be of class ContextMenu, ignoring it"); + options.parentMenu = null; + } + else + { + this.parentMenu = options.parentMenu; + this.parentMenu.lock = true; + this.parentMenu.current_submenu = this; + } + } + + if(options.event && options.event.constructor !== MouseEvent && options.event.constructor !== CustomEvent) + { + console.error("Event passed to ContextMenu is not of type MouseEvent or CustomEvent. Ignoring it."); + options.event = null; + } + + var root = document.createElement("div"); + root.className = "litegraph litecontextmenu litemenubar-panel"; + root.style.minWidth = 100; + root.style.minHeight = 100; + root.style.pointerEvents = "none"; + setTimeout( function() { root.style.pointerEvents = "auto"; },100); //delay so the mouse up event is not caugh by this element + + //this prevents the default context browser menu to open in case this menu was created when pressing right button + root.addEventListener("mouseup", function(e){ + e.preventDefault(); return true; + }, true); + root.addEventListener("contextmenu", function(e) { + if(e.button != 2) //right button + return false; + e.preventDefault(); + return false; + },true); + + root.addEventListener("mousedown", function(e){ + if(e.button == 2) + { + that.close(); + e.preventDefault(); return true; + } + }, true); + + function on_mouse_wheel(e) + { + var pos = parseInt( root.style.top ); + root.style.top = (pos + e.deltaY * 0.1).toFixed() + "px"; + e.preventDefault(); + return true; + } + + root.addEventListener("wheel", on_mouse_wheel, true); + root.addEventListener("mousewheel", on_mouse_wheel, true); + + + this.root = root; + + //title + if(options.title) + { + var element = document.createElement("div"); + element.className = "litemenu-title"; + element.innerHTML = options.title; + root.appendChild(element); + } + + //entries + var num = 0; + for(var i in values) + { + var name = values.constructor == Array ? values[i] : i; + if( name != null && name.constructor !== String ) + name = name.content === undefined ? String(name) : name.content; + var value = values[i]; + this.addItem( name, value, options ); + num++; + } + + //close on leave + root.addEventListener("mouseleave", function(e) { + if(that.lock) + return; + that.close(e); + }); + + //insert before checking position + var root_document = document; + if(options.event) + root_document = options.event.target.ownerDocument; + + if(!root_document) + root_document = document; + root_document.body.appendChild(root); + + //compute best position + var left = options.left || 0; + var top = options.top || 0; + if(options.event) + { + left = (options.event.pageX - 10); + top = (options.event.pageY - 10); + if(options.title) + top -= 20; + + if(options.parentMenu) + { + var rect = options.parentMenu.root.getBoundingClientRect(); + left = rect.left + rect.width; + } + + var body_rect = document.body.getBoundingClientRect(); + var root_rect = root.getBoundingClientRect(); + + if(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)) + top = (body_rect.height - root_rect.height - 10); + } + + root.style.left = left + "px"; + root.style.top = top + "px"; +} + +ContextMenu.prototype.addItem = function( name, value, options ) +{ + var that = this; + options = options || {}; + + var element = document.createElement("div"); + element.className = "litemenu-entry submenu"; + + var disabled = false; + + if(value === null) + { + element.classList.add("separator"); + //element.innerHTML = "
" + //continue; + } + else + { + element.innerHTML = value && value.title ? value.title : name; + element.value = value; + + if(value) + { + if(value.disabled) + { + disabled = true; + element.classList.add("disabled"); + } + if(value.submenu || value.has_submenu) + element.classList.add("has_submenu"); + } + + if(typeof(value) == "function") + { + element.dataset["value"] = name; + element.onclick_callback = value; + } + else + element.dataset["value"] = value; + + if(value.className) + element.className += " " + value.className; + } + + this.root.appendChild(element); + if(!disabled) + element.addEventListener("click", inner_onclick); + if(options.autoopen) + element.addEventListener("mouseenter", inner_over); + + function inner_over(e) + { + var value = this.value; + if(!value || !value.has_submenu) + return; + inner_onclick.call(this,e); + } + + //menu option clicked + function inner_onclick(e) { + var value = this.value; + var close_parent = true; + + if(that.current_submenu) + that.current_submenu.close(e); + + //global callback + if(options.callback) + { + var r = options.callback.call( this, value, options, e, that, options.node ); + if(r === true) + close_parent = false; + } + + //special cases + if(value) + { + if (value.callback && !options.ignore_item_callbacks && value.disabled !== true ) //item callback + { + var r = value.callback.call( this, value, options, e, that, options.extra ); + if(r === true) + close_parent = false; + } + if(value.submenu) + { + if(!value.submenu.options) + throw("ContextMenu submenu needs options"); + var submenu = new that.constructor( value.submenu.options, { + callback: value.submenu.callback, + event: e, + parentMenu: that, + ignore_item_callbacks: value.submenu.ignore_item_callbacks, + title: value.submenu.title, + extra: value.submenu.extra, + autoopen: options.autoopen + }); + close_parent = false; + } + } + + if(close_parent && !that.lock) + that.close(); + } + + return element; +} + +ContextMenu.prototype.close = function(e, ignore_parent_menu) +{ + if(this.root.parentNode) + this.root.parentNode.removeChild( this.root ); + if(this.parentMenu && !ignore_parent_menu) + { + this.parentMenu.lock = false; + this.parentMenu.current_submenu = null; + if( e === undefined ) + this.parentMenu.close(); + else if( e && !ContextMenu.isCursorOverElement( e, this.parentMenu.root) ) + { + ContextMenu.trigger( this.parentMenu.root, "mouseleave", e ); + } + } + if(this.current_submenu) + this.current_submenu.close(e, true); +} + +//this code is used to trigger events easily (used in the context menu mouseleave +ContextMenu.trigger = function( element, event_name, params, origin ) +{ + var evt = document.createEvent( 'CustomEvent' ); + evt.initCustomEvent( event_name, true,true, params ); //canBubble, cancelable, detail + evt.srcElement = origin; + if( element.dispatchEvent ) + element.dispatchEvent( evt ); + else if( element.__events ) + element.__events.dispatchEvent( evt ); + //else nothing seems binded here so nothing to do + return evt; +} + +//returns the top most menu +ContextMenu.prototype.getTopMenu = function() +{ + if( this.options.parentMenu ) + return this.options.parentMenu.getTopMenu(); + return this; +} + +ContextMenu.prototype.getFirstEvent = function() +{ + if( this.options.parentMenu ) + return this.options.parentMenu.getFirstEvent(); + return this.options.event; +} + + + +ContextMenu.isCursorOverElement = function( event, element ) +{ + var left = event.pageX; + var top = event.pageY; + var rect = element.getBoundingClientRect(); + if(!rect) + return false; + if(top > rect.top && top < (rect.top + rect.height) && + left > rect.left && left < (rect.left + rect.width) ) + return true; + return false; +} + + + +LiteGraph.ContextMenu = ContextMenu; + +LiteGraph.closeAllContextMenus = function( ref_window ) +{ + ref_window = ref_window || window; + + var elements = ref_window.document.querySelectorAll(".litecontextmenu"); + if(!elements.length) + return; + + var result = []; + for(var i = 0; i < elements.length; i++) + result.push(elements[i]); + + for(var i in result) + { + if(result[i].close) + result[i].close(); + else if(result[i].parentNode) + result[i].parentNode.removeChild( result[i] ); + } +} + +LiteGraph.extendClass = function ( target, origin ) +{ + for(var i in origin) //copy class properties + { + if(target.hasOwnProperty(i)) + continue; + target[i] = origin[i]; + } + + if(origin.prototype) //copy prototype properties + for(var i in origin.prototype) //only enumerables + { + if(!origin.prototype.hasOwnProperty(i)) + continue; + + if(target.prototype.hasOwnProperty(i)) //avoid overwritting existing ones + continue; + + //copy getters + if(origin.prototype.__lookupGetter__(i)) + target.prototype.__defineGetter__(i, origin.prototype.__lookupGetter__(i)); + else + target.prototype[i] = origin.prototype[i]; + + //and setters + if(origin.prototype.__lookupSetter__(i)) + target.prototype.__defineSetter__(i, origin.prototype.__lookupSetter__(i)); + } +} + +//used to create nodes from wrapping functions +LiteGraph.getParameterNames = function(func) { + return (func + '') + .replace(/[/][/].*$/mg,'') // strip single-line comments + .replace(/\s+/g, '') // strip white space + .replace(/[/][*][^/*]*[*][/]/g, '') // strip multi-line comments /**/ + .split('){', 1)[0].replace(/^[^(]*[(]/, '') // extract the parameters + .replace(/=[^,]+/g, '') // strip any ES6 defaults + .split(',').filter(Boolean); // split & filter [""] +} + +Math.clamp = function(v,a,b) { return (a > v ? a : (b < v ? b : v)); } + +if( typeof(window) != "undefined" && !window["requestAnimationFrame"] ) +{ + window.requestAnimationFrame = window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + (function( callback ){ + window.setTimeout(callback, 1000 / 60); + }); +} + +})(this); + +if(typeof(exports) != "undefined") + exports.LiteGraph = this.LiteGraph; + +//basic nodes +(function(global){ +var LiteGraph = global.LiteGraph; + +//Constant +function Time() +{ + this.addOutput("in ms","number"); + this.addOutput("in sec","number"); +} + +Time.title = "Time"; +Time.desc = "Time"; + +Time.prototype.onExecute = function() +{ + this.setOutputData(0, this.graph.globaltime * 1000 ); + this.setOutputData(1, this.graph.globaltime ); +} + +LiteGraph.registerNodeType("basic/time", Time); + + +//Subgraph: a node that contains a graph +function Subgraph() +{ + var that = this; + this.size = [120,80]; + + //create inner graph + this.subgraph = new LGraph(); + this.subgraph._subgraph_node = this; + this.subgraph._is_subgraph = true; + + this.subgraph.onGlobalInputAdded = this.onSubgraphNewGlobalInput.bind(this); + this.subgraph.onGlobalInputRenamed = this.onSubgraphRenamedGlobalInput.bind(this); + this.subgraph.onGlobalInputTypeChanged = this.onSubgraphTypeChangeGlobalInput.bind(this); + + this.subgraph.onGlobalOutputAdded = this.onSubgraphNewGlobalOutput.bind(this); + this.subgraph.onGlobalOutputRenamed = this.onSubgraphRenamedGlobalOutput.bind(this); + this.subgraph.onGlobalOutputTypeChanged = this.onSubgraphTypeChangeGlobalOutput.bind(this); + + this.color = "#335"; + this.bgcolor = "#557"; +} + +Subgraph.title = "Subgraph"; +Subgraph.desc = "Graph inside a node"; + +Subgraph.prototype.onDrawTitle = function(ctx) +{ + if(this.flags.collapsed) + return; + + ctx.fillStyle = "#AAA"; + var w = LiteGraph.NODE_TITLE_HEIGHT; + var x = this.size[0] - w; + ctx.fillRect( x, -w, w,w ); + ctx.fillStyle = "#333"; + ctx.beginPath(); + ctx.moveTo( x+w*0.2, -w*0.6 ); + ctx.lineTo( x+w*0.8, -w*0.6 ); + ctx.lineTo( x+w*0.5, -w*0.3 ); + ctx.fill(); +} + +Subgraph.prototype.onMouseDown = function(e,pos,graphcanvas) +{ + if( !this.flags.collapsed && pos[0] > this.size[0] - LiteGraph.NODE_TITLE_HEIGHT && pos[1] < 0 ) + { + var that = this; + setTimeout(function(){ graphcanvas.openSubgraph( that.subgraph ); },10 ); + } +} + +Subgraph.prototype.onSubgraphNewGlobalInput = function(name, type) +{ + //add input to the node + this.addInput(name, type); +} + +Subgraph.prototype.onSubgraphRenamedGlobalInput = function(oldname, name) +{ + var slot = this.findInputSlot( oldname ); + if(slot == -1) + return; + var info = this.getInputInfo(slot); + info.name = name; +} + +Subgraph.prototype.onSubgraphTypeChangeGlobalInput = function(name, type) +{ + var slot = this.findInputSlot( name ); + if(slot == -1) + return; + var info = this.getInputInfo(slot); + info.type = type; +} + + +Subgraph.prototype.onSubgraphNewGlobalOutput = function(name, type) +{ + //add output to the node + this.addOutput(name, type); +} + + +Subgraph.prototype.onSubgraphRenamedGlobalOutput = function(oldname, name) +{ + var slot = this.findOutputSlot( oldname ); + if(slot == -1) + return; + var info = this.getOutputInfo(slot); + info.name = name; +} + +Subgraph.prototype.onSubgraphTypeChangeGlobalOutput = function(name, type) +{ + var slot = this.findOutputSlot( name ); + if(slot == -1) + return; + var info = this.getOutputInfo(slot); + info.type = type; +} + + +Subgraph.prototype.getExtraMenuOptions = function(graphcanvas) +{ + var that = this; + return [ {content:"Open", callback: + function() { + graphcanvas.openSubgraph( that.subgraph ); + } + }]; +} + +Subgraph.prototype.onResize = function(size) +{ + size[1] += 20; +} + +Subgraph.prototype.onExecute = function() +{ + //send inputs to subgraph global inputs + if(this.inputs) + for(var i = 0; i < this.inputs.length; i++) + { + var input = this.inputs[i]; + var value = this.getInputData(i); + this.subgraph.setGlobalInputData( input.name, value ); + } + + //execute + this.subgraph.runStep(); + + //send subgraph global outputs to outputs + if(this.outputs) + for(var i = 0; i < this.outputs.length; i++) + { + var output = this.outputs[i]; + var value = this.subgraph.getGlobalOutputData( output.name ); + this.setOutputData(i, value); + } +} + +Subgraph.prototype.configure = function(o) +{ + LGraphNode.prototype.configure.call(this, o); + //this.subgraph.configure(o.graph); +} + +Subgraph.prototype.serialize = function() +{ + var data = LGraphNode.prototype.serialize.call(this); + data.subgraph = this.subgraph.serialize(); + return data; +} + +Subgraph.prototype.clone = function() +{ + var node = LiteGraph.createNode(this.type); + var data = this.serialize(); + delete data["id"]; + delete data["inputs"]; + delete data["outputs"]; + node.configure(data); + return node; +} + + +LiteGraph.registerNodeType("graph/subgraph", Subgraph ); + + +//Input for a subgraph +function GlobalInput() +{ + + //random name to avoid problems with other outputs when added + var input_name = "input_" + (Math.random()*1000).toFixed(); + + this.addOutput(input_name, null ); + + this.properties = { name: input_name, type: null }; + + var that = this; + + Object.defineProperty( this.properties, "name", { + get: function() { + return input_name; + }, + set: function(v) { + if(v == "") + return; + + var info = that.getOutputInfo(0); + if(info.name == v) + return; + info.name = v; + if(that.graph) + that.graph.renameGlobalInput(input_name, v); + input_name = v; + }, + enumerable: true + }); + + Object.defineProperty( this.properties, "type", { + get: function() { return that.outputs[0].type; }, + set: function(v) { + that.outputs[0].type = v; + if(that.graph) + that.graph.changeGlobalInputType(input_name, that.outputs[0].type); + }, + enumerable: true + }); +} + +GlobalInput.title = "Input"; +GlobalInput.desc = "Input of the graph"; + +//When added to graph tell the graph this is a new global input +GlobalInput.prototype.onAdded = function() +{ + this.graph.addGlobalInput( this.properties.name, this.properties.type ); +} + +GlobalInput.prototype.onExecute = function() +{ + var name = this.properties.name; + + //read from global input + var data = this.graph.global_inputs[name]; + if(!data) return; + + //put through output + this.setOutputData(0,data.value); +} + +LiteGraph.registerNodeType("graph/input", GlobalInput); + + + +//Output for a subgraph +function GlobalOutput() +{ + //random name to avoid problems with other outputs when added + var output_name = "output_" + (Math.random()*1000).toFixed(); + + this.addInput(output_name, null); + + this._value = null; + + this.properties = {name: output_name, type: null }; + + var that = this; + + Object.defineProperty(this.properties, "name", { + get: function() { + return output_name; + }, + set: function(v) { + if(v == "") + return; + + var info = that.getInputInfo(0); + if(info.name == v) + return; + info.name = v; + if(that.graph) + that.graph.renameGlobalOutput(output_name, v); + output_name = v; + }, + enumerable: true + }); + + Object.defineProperty(this.properties, "type", { + get: function() { return that.inputs[0].type; }, + set: function(v) { + that.inputs[0].type = v; + if(that.graph) + that.graph.changeGlobalInputType( output_name, that.inputs[0].type ); + }, + enumerable: true + }); +} + +GlobalOutput.title = "Output"; +GlobalOutput.desc = "Output of the graph"; + +GlobalOutput.prototype.onAdded = function() +{ + var name = this.graph.addGlobalOutput( this.properties.name, this.properties.type ); +} + +GlobalOutput.prototype.getValue = function() +{ + return this._value; +} + +GlobalOutput.prototype.onExecute = function() +{ + this._value = this.getInputData(0); + this.graph.setGlobalOutputData( this.properties.name, this._value ); +} + +LiteGraph.registerNodeType("graph/output", GlobalOutput); + + + +//Constant +function Constant() +{ + this.addOutput("value","number"); + this.addProperty( "value", 1.0 ); + this.editable = { property:"value", type:"number" }; +} + +Constant.title = "Const"; +Constant.desc = "Constant value"; + + +Constant.prototype.setValue = function(v) +{ + if( typeof(v) == "string") v = parseFloat(v); + this.properties["value"] = v; + this.setDirtyCanvas(true); +}; + +Constant.prototype.onExecute = function() +{ + this.setOutputData(0, parseFloat( this.properties["value"] ) ); +} + +Constant.prototype.onDrawBackground = function(ctx) +{ + //show the current value + this.outputs[0].label = this.properties["value"].toFixed(3); +} + +LiteGraph.registerNodeType("basic/const", Constant); + + +//Watch a value in the editor +function Watch() +{ + this.size = [60,20]; + this.addInput("value",0,{label:""}); + this.value = 0; +} + +Watch.title = "Watch"; +Watch.desc = "Show value of input"; + +Watch.prototype.onExecute = function() +{ + if( this.inputs[0] ) + this.value = this.getInputData(0); +} + +Watch.toString = function( o ) +{ + if( o == null ) + return "null"; + else if (o.constructor === Number ) + return o.toFixed(3); + else if (o.constructor === Array ) + { + var str = "["; + for(var i = 0; i < o.length; ++i) + str += Watch.toString(o[i]) + ((i+1) != o.length ? "," : ""); + str += "]"; + return str; + } + else + return String(o); +} + +Watch.prototype.onDrawBackground = function(ctx) +{ + //show the current value + this.inputs[0].label = Watch.toString(this.value); +} + +LiteGraph.registerNodeType("basic/watch", Watch); + +//Watch a value in the editor +function Pass() +{ + this.addInput("in",0); + this.addOutput("out",0); + this.size = [40,20]; +} + +Pass.title = "Pass"; +Pass.desc = "Allows to connect different types"; + +Pass.prototype.onExecute = function() +{ + this.setOutputData( 0, this.getInputData(0) ); +} + +LiteGraph.registerNodeType("basic/pass", Pass); + + +//Show value inside the debug console +function Console() +{ + this.mode = LiteGraph.ON_EVENT; + this.size = [60,20]; + this.addProperty( "msg", "" ); + this.addInput("log", LiteGraph.EVENT); + this.addInput("msg",0); +} + +Console.title = "Console"; +Console.desc = "Show value inside the console"; + +Console.prototype.onAction = function(action, param) +{ + if(action == "log") + console.log( param ); + else if(action == "warn") + console.warn( param ); + else if(action == "error") + console.error( param ); +} + +Console.prototype.onExecute = function() +{ + var msg = this.getInputData(1); + if(msg !== null) + this.properties.msg = msg; + console.log(msg); +} + +Console.prototype.onGetInputs = function() +{ + return [["log",LiteGraph.ACTION],["warn",LiteGraph.ACTION],["error",LiteGraph.ACTION]]; +} + +LiteGraph.registerNodeType("basic/console", Console ); + + + +//Show value inside the debug console +function NodeScript() +{ + this.size = [60,20]; + this.addProperty( "onExecute", "" ); + this.addInput("in", ""); + this.addInput("in2", ""); + this.addOutput("out", ""); + this.addOutput("out2", ""); + + this._func = null; +} + +NodeScript.title = "Script"; +NodeScript.desc = "executes a code"; + +NodeScript.widgets_info = { + "onExecute": { type:"code" } +}; + +NodeScript.prototype.onPropertyChanged = function(name,value) +{ + if(name == "onExecute" && LiteGraph.allow_scripts ) + { + this._func = null; + try + { + this._func = new Function( value ); + } + catch (err) + { + console.error("Error parsing script"); + console.error(err); + } + } +} + +NodeScript.prototype.onExecute = function() +{ + if(!this._func) + return; + + try + { + this._func.call(this); + } + catch (err) + { + console.error("Error in script"); + console.error(err); + } +} + +LiteGraph.registerNodeType("basic/script", NodeScript ); + + +})(this); //event related nodes (function(global){ var LiteGraph = global.LiteGraph; @@ -8679,733 +8678,733 @@ TimerEvent.prototype.onGetOutputs = function() LiteGraph.registerNodeType("events/timer", TimerEvent ); -})(this); -//widgets -(function(global){ -var LiteGraph = global.LiteGraph; - - /* Button ****************/ - - function WidgetButton() - { - this.addOutput( "clicked", LiteGraph.EVENT ); - this.addProperty( "text","" ); - this.addProperty( "font_size", 40 ); - this.addProperty( "message", "" ); - this.size = [64,84]; - } - - WidgetButton.title = "Button"; - WidgetButton.desc = "Triggers an event"; - - WidgetButton.font = "Arial"; - WidgetButton.prototype.onDrawForeground = function(ctx) - { - if(this.flags.collapsed) - return; - - //ctx.font = "40px Arial"; - //ctx.textAlign = "center"; - ctx.fillStyle = "black"; - ctx.fillRect(1,1,this.size[0] - 3, this.size[1] - 3); - ctx.fillStyle = "#AAF"; - ctx.fillRect(0,0,this.size[0] - 3, this.size[1] - 3); - ctx.fillStyle = this.clicked ? "white" : (this.mouseOver ? "#668" : "#334"); - ctx.fillRect(1,1,this.size[0] - 4, this.size[1] - 4); - - if( this.properties.text || this.properties.text === 0 ) - { - var font_size = this.properties.font_size || 30; - ctx.textAlign = "center"; - ctx.fillStyle = this.clicked ? "black" : "white"; - ctx.font = font_size + "px " + WidgetButton.font; - ctx.fillText( this.properties.text, this.size[0] * 0.5, this.size[1] * 0.5 + font_size * 0.3 ); - ctx.textAlign = "left"; - } - } - - WidgetButton.prototype.onMouseDown = function(e, local_pos) - { - if(local_pos[0] > 1 && local_pos[1] > 1 && local_pos[0] < (this.size[0] - 2) && local_pos[1] < (this.size[1] - 2) ) - { - this.clicked = true; - this.trigger( "clicked", this.properties.message ); - return true; - } - } - - WidgetButton.prototype.onMouseUp = function(e) - { - this.clicked = false; - } - - - LiteGraph.registerNodeType("widget/button", WidgetButton ); - - - function WidgetToggle() - { - this.addInput( "", "boolean" ); - this.addInput( "e", LiteGraph.ACTION ); - this.addOutput( "v", "boolean" ); - this.addOutput( "e", LiteGraph.EVENT ); - this.properties = { font: "", value: false }; - this.size = [124,64]; - } - - WidgetToggle.title = "Toggle"; - WidgetToggle.desc = "Toggles between true or false"; - - WidgetToggle.prototype.onDrawForeground = function(ctx) - { - if(this.flags.collapsed) - return; - - var size = this.size[1] * 0.5; - var margin = 0.25; - var h = this.size[1] * 0.8; - - ctx.fillStyle = "#AAA"; - ctx.fillRect(10, h - size,size,size); - - ctx.fillStyle = this.properties.value ? "#AEF" : "#000"; - ctx.fillRect(10+size*margin,h - size + size*margin,size*(1-margin*2),size*(1-margin*2)); - - ctx.textAlign = "left"; - ctx.font = this.properties.font || ((size * 0.8).toFixed(0) + "px Arial"); - ctx.fillStyle = "#AAA"; - ctx.fillText( this.title, size + 20, h * 0.85 ); - ctx.textAlign = "left"; - } - - WidgetToggle.prototype.onAction = function(action) - { - this.properties.value = !this.properties.value; - this.trigger( "e", this.properties.value ); - } - - WidgetToggle.prototype.onExecute = function() - { - var v = this.getInputData(0); - if( v != null ) - this.properties.value = v; - this.setOutputData( 0, this.properties.value ); - } - - WidgetToggle.prototype.onMouseDown = function(e, local_pos) - { - if(local_pos[0] > 1 && local_pos[1] > 1 && local_pos[0] < (this.size[0] - 2) && local_pos[1] < (this.size[1] - 2) ) - { - this.properties.value = !this.properties.value; - this.graph._version++; - this.trigger( "e", this.properties.value ); - return true; - } - } - - LiteGraph.registerNodeType("widget/toggle", WidgetToggle ); - - /* Number ****************/ - - function WidgetNumber() - { - this.addOutput("",'number'); - this.size = [74,54]; - this.properties = {min:-1000,max:1000,value:1,step:1}; - this.old_y = -1; - this._remainder = 0; - this._precision = 0; - this.mouse_captured = false; - } - - WidgetNumber.title = "Number"; - WidgetNumber.desc = "Widget to select number value"; - - WidgetNumber.pixels_threshold = 10; - WidgetNumber.markers_color = "#666"; - - WidgetNumber.prototype.onDrawForeground = function(ctx) - { - var x = this.size[0]*0.5; - var h = this.size[1]; - if(h > 30) - { - ctx.fillStyle = WidgetNumber.markers_color; - ctx.beginPath(); ctx.moveTo(x,h*0.1); ctx.lineTo(x+h*0.1,h*0.2); ctx.lineTo(x+h*-0.1,h*0.2); ctx.fill(); - ctx.beginPath(); ctx.moveTo(x,h*0.9); ctx.lineTo(x+h*0.1,h*0.8); ctx.lineTo(x+h*-0.1,h*0.8); ctx.fill(); - ctx.font = (h * 0.7).toFixed(1) + "px Arial"; - } - else - ctx.font = (h * 0.8).toFixed(1) + "px Arial"; - - ctx.textAlign = "center"; - ctx.font = (h * 0.7).toFixed(1) + "px Arial"; - ctx.fillStyle = "#EEE"; - ctx.fillText( this.properties.value.toFixed( this._precision ), x, h * 0.75 ); - } - - WidgetNumber.prototype.onExecute = function() - { - this.setOutputData(0, this.properties.value ); - } - - WidgetNumber.prototype.onPropertyChanged = function(name,value) - { - var t = (this.properties.step + "").split("."); - this._precision = t.length > 1 ? t[1].length : 0; - } - - WidgetNumber.prototype.onMouseDown = function(e, pos) - { - if(pos[1] < 0) - return; - - this.old_y = e.canvasY; - this.captureInput(true); - this.mouse_captured = true; - - return true; - } - - WidgetNumber.prototype.onMouseMove = function(e) - { - if(!this.mouse_captured) - return; - - var delta = this.old_y - e.canvasY; - if(e.shiftKey) - delta *= 10; - if(e.metaKey || e.altKey) - delta *= 0.1; - this.old_y = e.canvasY; - - var steps = (this._remainder + delta / WidgetNumber.pixels_threshold); - this._remainder = steps % 1; - steps = steps|0; - - var v = Math.clamp( this.properties.value + steps * this.properties.step, this.properties.min, this.properties.max ); - this.properties.value = v; - this.graph._version++; - this.setDirtyCanvas(true); - } - - WidgetNumber.prototype.onMouseUp = function(e,pos) - { - if(e.click_time < 200) - { - var steps = pos[1] > this.size[1] * 0.5 ? -1 : 1; - this.properties.value = Math.clamp( this.properties.value + steps * this.properties.step, this.properties.min, this.properties.max ); - this.graph._version++; - this.setDirtyCanvas(true); - } - - if( this.mouse_captured ) - { - this.mouse_captured = false; - this.captureInput(false); - } - } - - LiteGraph.registerNodeType("widget/number", WidgetNumber ); - - - /* Knob ****************/ - - function WidgetKnob() - { - this.addOutput("",'number'); - this.size = [64,84]; - this.properties = {min:0,max:1,value:0.5,wcolor:"#7AF",size:50}; - } - - WidgetKnob.title = "Knob"; - WidgetKnob.desc = "Circular controller"; - WidgetKnob.widgets = [{name:"increase",text:"+",type:"minibutton"},{name:"decrease",text:"-",type:"minibutton"}]; - - - WidgetKnob.prototype.onAdded = function() - { - this.value = (this.properties["value"] - this.properties["min"]) / (this.properties["max"] - this.properties["min"]); - - this.imgbg = this.loadImage("imgs/knob_bg.png"); - this.imgfg = this.loadImage("imgs/knob_fg.png"); - } - - WidgetKnob.prototype.onDrawImageKnob = function(ctx) - { - if(!this.imgfg || !this.imgfg.width) return; - - var d = this.imgbg.width*0.5; - var scale = this.size[0] / this.imgfg.width; - - ctx.save(); - ctx.translate(0,20); - ctx.scale(scale,scale); - ctx.drawImage(this.imgbg,0,0); - //ctx.drawImage(this.imgfg,0,20); - - ctx.translate(d,d); - ctx.rotate(this.value * (Math.PI*2) * 6/8 + Math.PI * 10/8); - //ctx.rotate(this.value * (Math.PI*2)); - ctx.translate(-d,-d); - ctx.drawImage(this.imgfg,0,0); - - ctx.restore(); - - if(this.title) - { - ctx.font = "bold 16px Criticized,Tahoma"; - ctx.fillStyle="rgba(100,100,100,0.8)"; - ctx.textAlign = "center"; - ctx.fillText(this.title.toUpperCase(), this.size[0] * 0.5, 18 ); - ctx.textAlign = "left"; - } - } - - WidgetKnob.prototype.onDrawVectorKnob = function(ctx) - { - if(!this.imgfg || !this.imgfg.width) return; - - //circle around - ctx.lineWidth = 1; - ctx.strokeStyle= this.mouseOver ? "#FFF" : "#AAA"; - ctx.fillStyle="#000"; - ctx.beginPath(); - ctx.arc(this.size[0] * 0.5,this.size[1] * 0.5 + 10,this.properties.size * 0.5,0,Math.PI*2,true); - ctx.stroke(); - - if(this.value > 0) - { - ctx.strokeStyle=this.properties["wcolor"]; - ctx.lineWidth = (this.properties.size * 0.2); - ctx.beginPath(); - ctx.arc(this.size[0] * 0.5,this.size[1] * 0.5 + 10,this.properties.size * 0.35,Math.PI * -0.5 + Math.PI*2 * this.value,Math.PI * -0.5,true); - ctx.stroke(); - ctx.lineWidth = 1; - } - - ctx.font = (this.properties.size * 0.2) + "px Arial"; - ctx.fillStyle="#AAA"; - ctx.textAlign = "center"; - - var str = this.properties["value"]; - if(typeof(str) == 'number') - str = str.toFixed(2); - - ctx.fillText(str,this.size[0] * 0.5,this.size[1]*0.65); - ctx.textAlign = "left"; - } - - WidgetKnob.prototype.onDrawForeground = function(ctx) - { - this.onDrawImageKnob(ctx); - } - - WidgetKnob.prototype.onExecute = function() - { - this.setOutputData(0, this.properties["value"] ); - - this.boxcolor = LiteGraph.colorToString([this.value,this.value,this.value]); - } - - WidgetKnob.prototype.onMouseDown = function(e) - { - if(!this.imgfg || !this.imgfg.width) return; - - //this.center = [this.imgbg.width * 0.5, this.imgbg.height * 0.5 + 20]; - //this.radius = this.imgbg.width * 0.5; - this.center = [this.size[0] * 0.5, this.size[1] * 0.5 + 20]; - this.radius = this.size[0] * 0.5; - - if(e.canvasY - this.pos[1] < 20 || LiteGraph.distance([e.canvasX,e.canvasY],[this.pos[0] + this.center[0],this.pos[1] + this.center[1]]) > this.radius) - return false; - - this.oldmouse = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; - this.captureInput(true); - - /* - var tmp = this.localToScreenSpace(0,0); - this.trace(tmp[0] + "," + tmp[1]); */ - return true; - } - - WidgetKnob.prototype.onMouseMove = function(e) - { - if(!this.oldmouse) return; - - var m = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; - - var v = this.value; - v -= (m[1] - this.oldmouse[1]) * 0.01; - if(v > 1.0) v = 1.0; - else if(v < 0.0) v = 0.0; - - this.value = v; - this.properties["value"] = this.properties["min"] + (this.properties["max"] - this.properties["min"]) * this.value; - - this.oldmouse = m; - this.setDirtyCanvas(true); - } - - WidgetKnob.prototype.onMouseUp = function(e) - { - if(this.oldmouse) - { - this.oldmouse = null; - this.captureInput(false); - } - } - - WidgetKnob.prototype.onMouseLeave = function(e) - { - //this.oldmouse = null; - } - - WidgetKnob.prototype.onPropertyChanged = function(name,value) - { - if(name=="wcolor") - this.properties[name] = value; - else if(name=="size") - { - value = parseInt(value); - this.properties[name] = value; - this.size = [value+4,value+24]; - this.setDirtyCanvas(true,true); - } - else if(name=="min" || name=="max" || name=="value") - { - this.properties[name] = parseFloat(value); - } - else - return false; - return true; - } - - LiteGraph.registerNodeType("widget/knob", WidgetKnob); - - //Show value inside the debug console - function WidgetSliderGUI() - { - this.addOutput("","number"); - this.properties = { - value: 0.5, - min: 0, - max: 1, - text: "V" - }; - var that = this; - this.size = [80,60]; - this.slider = this.addWidget("slider","V", this.properties.value, function(v){ that.properties.value = v; }, this.properties ); - } - - WidgetSliderGUI.title = "Internal Slider"; - - WidgetSliderGUI.prototype.onPropertyChanged = function(name,value) - { - if(name == "value") - this.slider.value = value; - } - - WidgetSliderGUI.prototype.onExecute = function() - { - this.setOutputData(0,this.properties.value); - } - - - LiteGraph.registerNodeType("widget/internal_slider", WidgetSliderGUI ); - - //Widget H SLIDER - function WidgetHSlider() - { - this.size = [160,26]; - this.addOutput("",'number'); - this.properties = {wcolor:"#7AF",min:0,max:1,value:0.5}; - } - - WidgetHSlider.title = "H.Slider"; - WidgetHSlider.desc = "Linear slider controller"; - - WidgetHSlider.prototype.onAdded = function() - { - this.value = 0.5; - this.imgfg = this.loadImage("imgs/slider_fg.png"); - } - - WidgetHSlider.prototype.onDrawVectorial = function(ctx) - { - if(!this.imgfg || !this.imgfg.width) return; - - //border - ctx.lineWidth = 1; - ctx.strokeStyle= this.mouseOver ? "#FFF" : "#AAA"; - ctx.fillStyle="#000"; - ctx.beginPath(); - ctx.rect(2,0,this.size[0]-4,20); - ctx.stroke(); - - ctx.fillStyle=this.properties["wcolor"]; - ctx.beginPath(); - ctx.rect(2+(this.size[0]-4-20)*this.value,0, 20,20); - ctx.fill(); - } - - WidgetHSlider.prototype.onDrawImage = function(ctx) - { - if(!this.imgfg || !this.imgfg.width) - return; - - //border - ctx.lineWidth = 1; - ctx.fillStyle="#000"; - ctx.fillRect(2,9,this.size[0]-4,2); - - ctx.strokeStyle= "#333"; - ctx.beginPath(); - ctx.moveTo(2,9); - ctx.lineTo(this.size[0]-4,9); - ctx.stroke(); - - ctx.strokeStyle= "#AAA"; - ctx.beginPath(); - ctx.moveTo(2,11); - ctx.lineTo(this.size[0]-4,11); - ctx.stroke(); - - ctx.drawImage(this.imgfg, 2+(this.size[0]-4)*this.value - this.imgfg.width*0.5,-this.imgfg.height*0.5 + 10); - }, - - WidgetHSlider.prototype.onDrawForeground = function(ctx) - { - this.onDrawImage(ctx); - } - - WidgetHSlider.prototype.onExecute = function() - { - this.properties["value"] = this.properties["min"] + (this.properties["max"] - this.properties["min"]) * this.value; - this.setOutputData(0, this.properties["value"] ); - this.boxcolor = LiteGraph.colorToString([this.value,this.value,this.value]); - } - - WidgetHSlider.prototype.onMouseDown = function(e) - { - if(e.canvasY - this.pos[1] < 0) - return false; - - this.oldmouse = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; - this.captureInput(true); - return true; - } - - WidgetHSlider.prototype.onMouseMove = function(e) - { - if(!this.oldmouse) return; - - var m = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; - - var v = this.value; - var delta = (m[0] - this.oldmouse[0]); - v += delta / this.size[0]; - if(v > 1.0) v = 1.0; - else if(v < 0.0) v = 0.0; - - this.value = v; - - this.oldmouse = m; - this.setDirtyCanvas(true); - } - - WidgetHSlider.prototype.onMouseUp = function(e) - { - this.oldmouse = null; - this.captureInput(false); - } - - WidgetHSlider.prototype.onMouseLeave = function(e) - { - //this.oldmouse = null; - } - - WidgetHSlider.prototype.onPropertyChanged = function(name,value) - { - if(name=="wcolor") - this.properties[name] = value; - else - return false; - return true; - } - - LiteGraph.registerNodeType("widget/hslider", WidgetHSlider ); - - - function WidgetProgress() - { - this.size = [160,26]; - this.addInput("",'number'); - this.properties = {min:0,max:1,value:0,wcolor:"#AAF"}; - } - - WidgetProgress.title = "Progress"; - WidgetProgress.desc = "Shows data in linear progress"; - - WidgetProgress.prototype.onExecute = function() - { - var v = this.getInputData(0); - if( v != undefined ) - this.properties["value"] = v; - } - - WidgetProgress.prototype.onDrawForeground = function(ctx) - { - //border - ctx.lineWidth = 1; - ctx.fillStyle=this.properties.wcolor; - var v = (this.properties.value - this.properties.min) / (this.properties.max - this.properties.min); - v = Math.min(1,v); - v = Math.max(0,v); - ctx.fillRect(2,2,(this.size[0]-4)*v,this.size[1]-4); - } - - LiteGraph.registerNodeType("widget/progress", WidgetProgress); - - - function WidgetText() - { - this.addInputs("",0); - this.properties = { value:"...",font:"Arial", fontsize:18, color:"#AAA", align:"left", glowSize:0, decimals:1 }; - } - - WidgetText.title = "Text"; - WidgetText.desc = "Shows the input value"; - WidgetText.widgets = [{name:"resize",text:"Resize box",type:"button"},{name:"led_text",text:"LED",type:"minibutton"},{name:"normal_text",text:"Normal",type:"minibutton"}]; - - WidgetText.prototype.onDrawForeground = function(ctx) - { - //ctx.fillStyle="#000"; - //ctx.fillRect(0,0,100,60); - ctx.fillStyle = this.properties["color"]; - var v = this.properties["value"]; - - if(this.properties["glowSize"]) - { - ctx.shadowColor = this.properties["color"]; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; - ctx.shadowBlur = this.properties["glowSize"]; - } - else - ctx.shadowColor = "transparent"; - - var fontsize = this.properties["fontsize"]; - - ctx.textAlign = this.properties["align"]; - ctx.font = fontsize.toString() + "px " + this.properties["font"]; - this.str = typeof(v) == 'number' ? v.toFixed(this.properties["decimals"]) : v; - - if( typeof(this.str) == 'string') - { - var lines = this.str.split("\\n"); - for(var i in lines) - ctx.fillText(lines[i],this.properties["align"] == "left" ? 15 : this.size[0] - 15, fontsize * -0.15 + fontsize * (parseInt(i)+1) ); - } - - ctx.shadowColor = "transparent"; - this.last_ctx = ctx; - ctx.textAlign = "left"; - } - - WidgetText.prototype.onExecute = function() - { - var v = this.getInputData(0); - if(v != null) - this.properties["value"] = v; - //this.setDirtyCanvas(true); - } - - WidgetText.prototype.resize = function() - { - if(!this.last_ctx) return; - - var lines = this.str.split("\\n"); - this.last_ctx.font = this.properties["fontsize"] + "px " + this.properties["font"]; - var max = 0; - for(var i in lines) - { - var w = this.last_ctx.measureText(lines[i]).width; - if(max < w) max = w; - } - this.size[0] = max + 20; - this.size[1] = 4 + lines.length * this.properties["fontsize"]; - - this.setDirtyCanvas(true); - } - - WidgetText.prototype.onPropertyChanged = function(name,value) - { - this.properties[name] = value; - this.str = typeof(value) == 'number' ? value.toFixed(3) : value; - //this.resize(); - return true; - } - - LiteGraph.registerNodeType("widget/text", WidgetText ); - - - function WidgetPanel() - { - this.size = [200,100]; - this.properties = {borderColor:"#ffffff",bgcolorTop:"#f0f0f0",bgcolorBottom:"#e0e0e0",shadowSize:2, borderRadius:3}; - } - - WidgetPanel.title = "Panel"; - WidgetPanel.desc = "Non interactive panel"; - WidgetPanel.widgets = [{name:"update",text:"Update",type:"button"}]; - - - WidgetPanel.prototype.createGradient = function(ctx) - { - if(this.properties["bgcolorTop"] == "" || this.properties["bgcolorBottom"] == "") - { - this.lineargradient = 0; - return; - } - - this.lineargradient = ctx.createLinearGradient(0,0,0,this.size[1]); - this.lineargradient.addColorStop(0,this.properties["bgcolorTop"]); - this.lineargradient.addColorStop(1,this.properties["bgcolorBottom"]); - } - - WidgetPanel.prototype.onDrawForeground = function(ctx) - { - if(this.lineargradient == null) - this.createGradient(ctx); - - if(!this.lineargradient) - return; - - ctx.lineWidth = 1; - ctx.strokeStyle = this.properties["borderColor"]; - //ctx.fillStyle = "#ebebeb"; - ctx.fillStyle = this.lineargradient; - - if(this.properties["shadowSize"]) - { - ctx.shadowColor = "#000"; - ctx.shadowOffsetX = 0; - ctx.shadowOffsetY = 0; - ctx.shadowBlur = this.properties["shadowSize"]; - } - else - ctx.shadowColor = "transparent"; - - ctx.roundRect(0,0,this.size[0]-1,this.size[1]-1,this.properties["shadowSize"]); - ctx.fill(); - ctx.shadowColor = "transparent"; - ctx.stroke(); - } - - LiteGraph.registerNodeType("widget/panel", WidgetPanel ); - -})(this); +})(this); +//widgets +(function(global){ +var LiteGraph = global.LiteGraph; + + /* Button ****************/ + + function WidgetButton() + { + this.addOutput( "clicked", LiteGraph.EVENT ); + this.addProperty( "text","" ); + this.addProperty( "font_size", 40 ); + this.addProperty( "message", "" ); + this.size = [64,84]; + } + + WidgetButton.title = "Button"; + WidgetButton.desc = "Triggers an event"; + + WidgetButton.font = "Arial"; + WidgetButton.prototype.onDrawForeground = function(ctx) + { + if(this.flags.collapsed) + return; + + //ctx.font = "40px Arial"; + //ctx.textAlign = "center"; + ctx.fillStyle = "black"; + ctx.fillRect(1,1,this.size[0] - 3, this.size[1] - 3); + ctx.fillStyle = "#AAF"; + ctx.fillRect(0,0,this.size[0] - 3, this.size[1] - 3); + ctx.fillStyle = this.clicked ? "white" : (this.mouseOver ? "#668" : "#334"); + ctx.fillRect(1,1,this.size[0] - 4, this.size[1] - 4); + + if( this.properties.text || this.properties.text === 0 ) + { + var font_size = this.properties.font_size || 30; + ctx.textAlign = "center"; + ctx.fillStyle = this.clicked ? "black" : "white"; + ctx.font = font_size + "px " + WidgetButton.font; + ctx.fillText( this.properties.text, this.size[0] * 0.5, this.size[1] * 0.5 + font_size * 0.3 ); + ctx.textAlign = "left"; + } + } + + WidgetButton.prototype.onMouseDown = function(e, local_pos) + { + if(local_pos[0] > 1 && local_pos[1] > 1 && local_pos[0] < (this.size[0] - 2) && local_pos[1] < (this.size[1] - 2) ) + { + this.clicked = true; + this.trigger( "clicked", this.properties.message ); + return true; + } + } + + WidgetButton.prototype.onMouseUp = function(e) + { + this.clicked = false; + } + + + LiteGraph.registerNodeType("widget/button", WidgetButton ); + + + function WidgetToggle() + { + this.addInput( "", "boolean" ); + this.addInput( "e", LiteGraph.ACTION ); + this.addOutput( "v", "boolean" ); + this.addOutput( "e", LiteGraph.EVENT ); + this.properties = { font: "", value: false }; + this.size = [124,64]; + } + + WidgetToggle.title = "Toggle"; + WidgetToggle.desc = "Toggles between true or false"; + + WidgetToggle.prototype.onDrawForeground = function(ctx) + { + if(this.flags.collapsed) + return; + + var size = this.size[1] * 0.5; + var margin = 0.25; + var h = this.size[1] * 0.8; + + ctx.fillStyle = "#AAA"; + ctx.fillRect(10, h - size,size,size); + + ctx.fillStyle = this.properties.value ? "#AEF" : "#000"; + ctx.fillRect(10+size*margin,h - size + size*margin,size*(1-margin*2),size*(1-margin*2)); + + ctx.textAlign = "left"; + ctx.font = this.properties.font || ((size * 0.8).toFixed(0) + "px Arial"); + ctx.fillStyle = "#AAA"; + ctx.fillText( this.title, size + 20, h * 0.85 ); + ctx.textAlign = "left"; + } + + WidgetToggle.prototype.onAction = function(action) + { + this.properties.value = !this.properties.value; + this.trigger( "e", this.properties.value ); + } + + WidgetToggle.prototype.onExecute = function() + { + var v = this.getInputData(0); + if( v != null ) + this.properties.value = v; + this.setOutputData( 0, this.properties.value ); + } + + WidgetToggle.prototype.onMouseDown = function(e, local_pos) + { + if(local_pos[0] > 1 && local_pos[1] > 1 && local_pos[0] < (this.size[0] - 2) && local_pos[1] < (this.size[1] - 2) ) + { + this.properties.value = !this.properties.value; + this.graph._version++; + this.trigger( "e", this.properties.value ); + return true; + } + } + + LiteGraph.registerNodeType("widget/toggle", WidgetToggle ); + + /* Number ****************/ + + function WidgetNumber() + { + this.addOutput("",'number'); + this.size = [74,54]; + this.properties = {min:-1000,max:1000,value:1,step:1}; + this.old_y = -1; + this._remainder = 0; + this._precision = 0; + this.mouse_captured = false; + } + + WidgetNumber.title = "Number"; + WidgetNumber.desc = "Widget to select number value"; + + WidgetNumber.pixels_threshold = 10; + WidgetNumber.markers_color = "#666"; + + WidgetNumber.prototype.onDrawForeground = function(ctx) + { + var x = this.size[0]*0.5; + var h = this.size[1]; + if(h > 30) + { + ctx.fillStyle = WidgetNumber.markers_color; + ctx.beginPath(); ctx.moveTo(x,h*0.1); ctx.lineTo(x+h*0.1,h*0.2); ctx.lineTo(x+h*-0.1,h*0.2); ctx.fill(); + ctx.beginPath(); ctx.moveTo(x,h*0.9); ctx.lineTo(x+h*0.1,h*0.8); ctx.lineTo(x+h*-0.1,h*0.8); ctx.fill(); + ctx.font = (h * 0.7).toFixed(1) + "px Arial"; + } + else + ctx.font = (h * 0.8).toFixed(1) + "px Arial"; + + ctx.textAlign = "center"; + ctx.font = (h * 0.7).toFixed(1) + "px Arial"; + ctx.fillStyle = "#EEE"; + ctx.fillText( this.properties.value.toFixed( this._precision ), x, h * 0.75 ); + } + + WidgetNumber.prototype.onExecute = function() + { + this.setOutputData(0, this.properties.value ); + } + + WidgetNumber.prototype.onPropertyChanged = function(name,value) + { + var t = (this.properties.step + "").split("."); + this._precision = t.length > 1 ? t[1].length : 0; + } + + WidgetNumber.prototype.onMouseDown = function(e, pos) + { + if(pos[1] < 0) + return; + + this.old_y = e.canvasY; + this.captureInput(true); + this.mouse_captured = true; + + return true; + } + + WidgetNumber.prototype.onMouseMove = function(e) + { + if(!this.mouse_captured) + return; + + var delta = this.old_y - e.canvasY; + if(e.shiftKey) + delta *= 10; + if(e.metaKey || e.altKey) + delta *= 0.1; + this.old_y = e.canvasY; + + var steps = (this._remainder + delta / WidgetNumber.pixels_threshold); + this._remainder = steps % 1; + steps = steps|0; + + var v = Math.clamp( this.properties.value + steps * this.properties.step, this.properties.min, this.properties.max ); + this.properties.value = v; + this.graph._version++; + this.setDirtyCanvas(true); + } + + WidgetNumber.prototype.onMouseUp = function(e,pos) + { + if(e.click_time < 200) + { + var steps = pos[1] > this.size[1] * 0.5 ? -1 : 1; + this.properties.value = Math.clamp( this.properties.value + steps * this.properties.step, this.properties.min, this.properties.max ); + this.graph._version++; + this.setDirtyCanvas(true); + } + + if( this.mouse_captured ) + { + this.mouse_captured = false; + this.captureInput(false); + } + } + + LiteGraph.registerNodeType("widget/number", WidgetNumber ); + + + /* Knob ****************/ + + function WidgetKnob() + { + this.addOutput("",'number'); + this.size = [64,84]; + this.properties = {min:0,max:1,value:0.5,wcolor:"#7AF",size:50}; + } + + WidgetKnob.title = "Knob"; + WidgetKnob.desc = "Circular controller"; + WidgetKnob.widgets = [{name:"increase",text:"+",type:"minibutton"},{name:"decrease",text:"-",type:"minibutton"}]; + + + WidgetKnob.prototype.onAdded = function() + { + this.value = (this.properties["value"] - this.properties["min"]) / (this.properties["max"] - this.properties["min"]); + + this.imgbg = this.loadImage("imgs/knob_bg.png"); + this.imgfg = this.loadImage("imgs/knob_fg.png"); + } + + WidgetKnob.prototype.onDrawImageKnob = function(ctx) + { + if(!this.imgfg || !this.imgfg.width) return; + + var d = this.imgbg.width*0.5; + var scale = this.size[0] / this.imgfg.width; + + ctx.save(); + ctx.translate(0,20); + ctx.scale(scale,scale); + ctx.drawImage(this.imgbg,0,0); + //ctx.drawImage(this.imgfg,0,20); + + ctx.translate(d,d); + ctx.rotate(this.value * (Math.PI*2) * 6/8 + Math.PI * 10/8); + //ctx.rotate(this.value * (Math.PI*2)); + ctx.translate(-d,-d); + ctx.drawImage(this.imgfg,0,0); + + ctx.restore(); + + if(this.title) + { + ctx.font = "bold 16px Criticized,Tahoma"; + ctx.fillStyle="rgba(100,100,100,0.8)"; + ctx.textAlign = "center"; + ctx.fillText(this.title.toUpperCase(), this.size[0] * 0.5, 18 ); + ctx.textAlign = "left"; + } + } + + WidgetKnob.prototype.onDrawVectorKnob = function(ctx) + { + if(!this.imgfg || !this.imgfg.width) return; + + //circle around + ctx.lineWidth = 1; + ctx.strokeStyle= this.mouseOver ? "#FFF" : "#AAA"; + ctx.fillStyle="#000"; + ctx.beginPath(); + ctx.arc(this.size[0] * 0.5,this.size[1] * 0.5 + 10,this.properties.size * 0.5,0,Math.PI*2,true); + ctx.stroke(); + + if(this.value > 0) + { + ctx.strokeStyle=this.properties["wcolor"]; + ctx.lineWidth = (this.properties.size * 0.2); + ctx.beginPath(); + ctx.arc(this.size[0] * 0.5,this.size[1] * 0.5 + 10,this.properties.size * 0.35,Math.PI * -0.5 + Math.PI*2 * this.value,Math.PI * -0.5,true); + ctx.stroke(); + ctx.lineWidth = 1; + } + + ctx.font = (this.properties.size * 0.2) + "px Arial"; + ctx.fillStyle="#AAA"; + ctx.textAlign = "center"; + + var str = this.properties["value"]; + if(typeof(str) == 'number') + str = str.toFixed(2); + + ctx.fillText(str,this.size[0] * 0.5,this.size[1]*0.65); + ctx.textAlign = "left"; + } + + WidgetKnob.prototype.onDrawForeground = function(ctx) + { + this.onDrawImageKnob(ctx); + } + + WidgetKnob.prototype.onExecute = function() + { + this.setOutputData(0, this.properties["value"] ); + + this.boxcolor = LiteGraph.colorToString([this.value,this.value,this.value]); + } + + WidgetKnob.prototype.onMouseDown = function(e) + { + if(!this.imgfg || !this.imgfg.width) return; + + //this.center = [this.imgbg.width * 0.5, this.imgbg.height * 0.5 + 20]; + //this.radius = this.imgbg.width * 0.5; + this.center = [this.size[0] * 0.5, this.size[1] * 0.5 + 20]; + this.radius = this.size[0] * 0.5; + + if(e.canvasY - this.pos[1] < 20 || LiteGraph.distance([e.canvasX,e.canvasY],[this.pos[0] + this.center[0],this.pos[1] + this.center[1]]) > this.radius) + return false; + + this.oldmouse = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; + this.captureInput(true); + + /* + var tmp = this.localToScreenSpace(0,0); + this.trace(tmp[0] + "," + tmp[1]); */ + return true; + } + + WidgetKnob.prototype.onMouseMove = function(e) + { + if(!this.oldmouse) return; + + var m = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; + + var v = this.value; + v -= (m[1] - this.oldmouse[1]) * 0.01; + if(v > 1.0) v = 1.0; + else if(v < 0.0) v = 0.0; + + this.value = v; + this.properties["value"] = this.properties["min"] + (this.properties["max"] - this.properties["min"]) * this.value; + + this.oldmouse = m; + this.setDirtyCanvas(true); + } + + WidgetKnob.prototype.onMouseUp = function(e) + { + if(this.oldmouse) + { + this.oldmouse = null; + this.captureInput(false); + } + } + + WidgetKnob.prototype.onMouseLeave = function(e) + { + //this.oldmouse = null; + } + + WidgetKnob.prototype.onPropertyChanged = function(name,value) + { + if(name=="wcolor") + this.properties[name] = value; + else if(name=="size") + { + value = parseInt(value); + this.properties[name] = value; + this.size = [value+4,value+24]; + this.setDirtyCanvas(true,true); + } + else if(name=="min" || name=="max" || name=="value") + { + this.properties[name] = parseFloat(value); + } + else + return false; + return true; + } + + LiteGraph.registerNodeType("widget/knob", WidgetKnob); + + //Show value inside the debug console + function WidgetSliderGUI() + { + this.addOutput("","number"); + this.properties = { + value: 0.5, + min: 0, + max: 1, + text: "V" + }; + var that = this; + this.size = [80,60]; + this.slider = this.addWidget("slider","V", this.properties.value, function(v){ that.properties.value = v; }, this.properties ); + } + + WidgetSliderGUI.title = "Internal Slider"; + + WidgetSliderGUI.prototype.onPropertyChanged = function(name,value) + { + if(name == "value") + this.slider.value = value; + } + + WidgetSliderGUI.prototype.onExecute = function() + { + this.setOutputData(0,this.properties.value); + } + + + LiteGraph.registerNodeType("widget/internal_slider", WidgetSliderGUI ); + + //Widget H SLIDER + function WidgetHSlider() + { + this.size = [160,26]; + this.addOutput("",'number'); + this.properties = {wcolor:"#7AF",min:0,max:1,value:0.5}; + } + + WidgetHSlider.title = "H.Slider"; + WidgetHSlider.desc = "Linear slider controller"; + + WidgetHSlider.prototype.onAdded = function() + { + this.value = 0.5; + this.imgfg = this.loadImage("imgs/slider_fg.png"); + } + + WidgetHSlider.prototype.onDrawVectorial = function(ctx) + { + if(!this.imgfg || !this.imgfg.width) return; + + //border + ctx.lineWidth = 1; + ctx.strokeStyle= this.mouseOver ? "#FFF" : "#AAA"; + ctx.fillStyle="#000"; + ctx.beginPath(); + ctx.rect(2,0,this.size[0]-4,20); + ctx.stroke(); + + ctx.fillStyle=this.properties["wcolor"]; + ctx.beginPath(); + ctx.rect(2+(this.size[0]-4-20)*this.value,0, 20,20); + ctx.fill(); + } + + WidgetHSlider.prototype.onDrawImage = function(ctx) + { + if(!this.imgfg || !this.imgfg.width) + return; + + //border + ctx.lineWidth = 1; + ctx.fillStyle="#000"; + ctx.fillRect(2,9,this.size[0]-4,2); + + ctx.strokeStyle= "#333"; + ctx.beginPath(); + ctx.moveTo(2,9); + ctx.lineTo(this.size[0]-4,9); + ctx.stroke(); + + ctx.strokeStyle= "#AAA"; + ctx.beginPath(); + ctx.moveTo(2,11); + ctx.lineTo(this.size[0]-4,11); + ctx.stroke(); + + ctx.drawImage(this.imgfg, 2+(this.size[0]-4)*this.value - this.imgfg.width*0.5,-this.imgfg.height*0.5 + 10); + }, + + WidgetHSlider.prototype.onDrawForeground = function(ctx) + { + this.onDrawImage(ctx); + } + + WidgetHSlider.prototype.onExecute = function() + { + this.properties["value"] = this.properties["min"] + (this.properties["max"] - this.properties["min"]) * this.value; + this.setOutputData(0, this.properties["value"] ); + this.boxcolor = LiteGraph.colorToString([this.value,this.value,this.value]); + } + + WidgetHSlider.prototype.onMouseDown = function(e) + { + if(e.canvasY - this.pos[1] < 0) + return false; + + this.oldmouse = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; + this.captureInput(true); + return true; + } + + WidgetHSlider.prototype.onMouseMove = function(e) + { + if(!this.oldmouse) return; + + var m = [ e.canvasX - this.pos[0], e.canvasY - this.pos[1] ]; + + var v = this.value; + var delta = (m[0] - this.oldmouse[0]); + v += delta / this.size[0]; + if(v > 1.0) v = 1.0; + else if(v < 0.0) v = 0.0; + + this.value = v; + + this.oldmouse = m; + this.setDirtyCanvas(true); + } + + WidgetHSlider.prototype.onMouseUp = function(e) + { + this.oldmouse = null; + this.captureInput(false); + } + + WidgetHSlider.prototype.onMouseLeave = function(e) + { + //this.oldmouse = null; + } + + WidgetHSlider.prototype.onPropertyChanged = function(name,value) + { + if(name=="wcolor") + this.properties[name] = value; + else + return false; + return true; + } + + LiteGraph.registerNodeType("widget/hslider", WidgetHSlider ); + + + function WidgetProgress() + { + this.size = [160,26]; + this.addInput("",'number'); + this.properties = {min:0,max:1,value:0,wcolor:"#AAF"}; + } + + WidgetProgress.title = "Progress"; + WidgetProgress.desc = "Shows data in linear progress"; + + WidgetProgress.prototype.onExecute = function() + { + var v = this.getInputData(0); + if( v != undefined ) + this.properties["value"] = v; + } + + WidgetProgress.prototype.onDrawForeground = function(ctx) + { + //border + ctx.lineWidth = 1; + ctx.fillStyle=this.properties.wcolor; + var v = (this.properties.value - this.properties.min) / (this.properties.max - this.properties.min); + v = Math.min(1,v); + v = Math.max(0,v); + ctx.fillRect(2,2,(this.size[0]-4)*v,this.size[1]-4); + } + + LiteGraph.registerNodeType("widget/progress", WidgetProgress); + + + function WidgetText() + { + this.addInputs("",0); + this.properties = { value:"...",font:"Arial", fontsize:18, color:"#AAA", align:"left", glowSize:0, decimals:1 }; + } + + WidgetText.title = "Text"; + WidgetText.desc = "Shows the input value"; + WidgetText.widgets = [{name:"resize",text:"Resize box",type:"button"},{name:"led_text",text:"LED",type:"minibutton"},{name:"normal_text",text:"Normal",type:"minibutton"}]; + + WidgetText.prototype.onDrawForeground = function(ctx) + { + //ctx.fillStyle="#000"; + //ctx.fillRect(0,0,100,60); + ctx.fillStyle = this.properties["color"]; + var v = this.properties["value"]; + + if(this.properties["glowSize"]) + { + ctx.shadowColor = this.properties["color"]; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.shadowBlur = this.properties["glowSize"]; + } + else + ctx.shadowColor = "transparent"; + + var fontsize = this.properties["fontsize"]; + + ctx.textAlign = this.properties["align"]; + ctx.font = fontsize.toString() + "px " + this.properties["font"]; + this.str = typeof(v) == 'number' ? v.toFixed(this.properties["decimals"]) : v; + + if( typeof(this.str) == 'string') + { + var lines = this.str.split("\\n"); + for(var i in lines) + ctx.fillText(lines[i],this.properties["align"] == "left" ? 15 : this.size[0] - 15, fontsize * -0.15 + fontsize * (parseInt(i)+1) ); + } + + ctx.shadowColor = "transparent"; + this.last_ctx = ctx; + ctx.textAlign = "left"; + } + + WidgetText.prototype.onExecute = function() + { + var v = this.getInputData(0); + if(v != null) + this.properties["value"] = v; + //this.setDirtyCanvas(true); + } + + WidgetText.prototype.resize = function() + { + if(!this.last_ctx) return; + + var lines = this.str.split("\\n"); + this.last_ctx.font = this.properties["fontsize"] + "px " + this.properties["font"]; + var max = 0; + for(var i in lines) + { + var w = this.last_ctx.measureText(lines[i]).width; + if(max < w) max = w; + } + this.size[0] = max + 20; + this.size[1] = 4 + lines.length * this.properties["fontsize"]; + + this.setDirtyCanvas(true); + } + + WidgetText.prototype.onPropertyChanged = function(name,value) + { + this.properties[name] = value; + this.str = typeof(value) == 'number' ? value.toFixed(3) : value; + //this.resize(); + return true; + } + + LiteGraph.registerNodeType("widget/text", WidgetText ); + + + function WidgetPanel() + { + this.size = [200,100]; + this.properties = {borderColor:"#ffffff",bgcolorTop:"#f0f0f0",bgcolorBottom:"#e0e0e0",shadowSize:2, borderRadius:3}; + } + + WidgetPanel.title = "Panel"; + WidgetPanel.desc = "Non interactive panel"; + WidgetPanel.widgets = [{name:"update",text:"Update",type:"button"}]; + + + WidgetPanel.prototype.createGradient = function(ctx) + { + if(this.properties["bgcolorTop"] == "" || this.properties["bgcolorBottom"] == "") + { + this.lineargradient = 0; + return; + } + + this.lineargradient = ctx.createLinearGradient(0,0,0,this.size[1]); + this.lineargradient.addColorStop(0,this.properties["bgcolorTop"]); + this.lineargradient.addColorStop(1,this.properties["bgcolorBottom"]); + } + + WidgetPanel.prototype.onDrawForeground = function(ctx) + { + if(this.lineargradient == null) + this.createGradient(ctx); + + if(!this.lineargradient) + return; + + ctx.lineWidth = 1; + ctx.strokeStyle = this.properties["borderColor"]; + //ctx.fillStyle = "#ebebeb"; + ctx.fillStyle = this.lineargradient; + + if(this.properties["shadowSize"]) + { + ctx.shadowColor = "#000"; + ctx.shadowOffsetX = 0; + ctx.shadowOffsetY = 0; + ctx.shadowBlur = this.properties["shadowSize"]; + } + else + ctx.shadowColor = "transparent"; + + ctx.roundRect(0,0,this.size[0]-1,this.size[1]-1,this.properties["shadowSize"]); + ctx.fill(); + ctx.shadowColor = "transparent"; + ctx.stroke(); + } + + LiteGraph.registerNodeType("widget/panel", WidgetPanel ); + +})(this); (function(global){ var LiteGraph = global.LiteGraph; @@ -9612,7 +9611,7 @@ GamepadInput.prototype.onGetOutputs = function() { LiteGraph.registerNodeType("input/gamepad", GamepadInput ); -})(this); +})(this); (function(global){ var LiteGraph = global.LiteGraph; @@ -10696,835 +10695,835 @@ if(global.glMatrix) } //glMatrix -})(this); -(function(global){ -var LiteGraph = global.LiteGraph; - -function Selector() -{ - this.addInput("sel","boolean"); - this.addOutput("value","number"); - this.properties = { A:0, B:1 }; - this.size = [60,20]; -} - -Selector.title = "Selector"; -Selector.desc = "outputs A if selector is true, B if selector is false"; - -Selector.prototype.onExecute = function() -{ - var cond = this.getInputData(0); - if(cond === undefined) - return; - - for(var i = 1; i < this.inputs.length; i++) - { - var input = this.inputs[i]; - var v = this.getInputData(i); - if(v === undefined) - continue; - this.properties[input.name] = v; - } - - var A = this.properties.A; - var B = this.properties.B; - this.setOutputData(0, cond ? A : B ); -} - -Selector.prototype.onGetInputs = function() { - return [["A",0],["B",0]]; -} - -LiteGraph.registerNodeType("logic/selector", Selector); - -})(this); -(function(global){ -var LiteGraph = global.LiteGraph; - -function GraphicsPlot() -{ - this.addInput("A","Number"); - this.addInput("B","Number"); - this.addInput("C","Number"); - this.addInput("D","Number"); - - this.values = [[],[],[],[]]; - this.properties = { scale: 2 }; -} - -GraphicsPlot.title = "Plot"; -GraphicsPlot.desc = "Plots data over time"; -GraphicsPlot.colors = ["#FFF","#F99","#9F9","#99F"]; - -GraphicsPlot.prototype.onExecute = function(ctx) -{ - if(this.flags.collapsed) - return; - - var size = this.size; - - for(var i = 0; i < 4; ++i) - { - var v = this.getInputData(i); - if(v == null) - continue; - var values = this.values[i]; - values.push(v); - if(values.length > size[0]) - values.shift(); - } -} - -GraphicsPlot.prototype.onDrawBackground = function(ctx) -{ - if(this.flags.collapsed) - return; - - var size = this.size; - - var scale = 0.5 * size[1] / this.properties.scale; - var colors = GraphicsPlot.colors; - var offset = size[1] * 0.5; - - ctx.fillStyle = "#000"; - ctx.fillRect(0,0, size[0],size[1]); - ctx.strokeStyle = "#555"; - ctx.beginPath(); - ctx.moveTo(0, offset); - ctx.lineTo(size[0], offset); - ctx.stroke(); - - for(var i = 0; i < 4; ++i) - { - var values = this.values[i]; - ctx.strokeStyle = colors[i]; - ctx.beginPath(); - var v = values[0] * scale * -1 + offset; - ctx.moveTo(0, Math.clamp( v, 0, size[1]) ); - for(var j = 1; j < values.length && j < size[0]; ++j) - { - var v = values[j] * scale * -1 + offset; - ctx.lineTo( j, Math.clamp( v, 0, size[1]) ); - } - ctx.stroke(); - } -} - -LiteGraph.registerNodeType("graphics/plot", GraphicsPlot); - - -function GraphicsImage() -{ - this.addOutput("frame","image"); - this.properties = {"url":""}; -} - -GraphicsImage.title = "Image"; -GraphicsImage.desc = "Image loader"; -GraphicsImage.widgets = [{name:"load",text:"Load",type:"button"}]; - -GraphicsImage.supported_extensions = ["jpg","jpeg","png","gif"]; - -GraphicsImage.prototype.onAdded = function() -{ - if(this.properties["url"] != "" && this.img == null) - { - this.loadImage( this.properties["url"] ); - } -} - -GraphicsImage.prototype.onDrawBackground = function(ctx) -{ - if(this.img && this.size[0] > 5 && this.size[1] > 5) - ctx.drawImage(this.img, 0,0,this.size[0],this.size[1]); -} - - -GraphicsImage.prototype.onExecute = function() -{ - if(!this.img) - this.boxcolor = "#000"; - if(this.img && this.img.width) - this.setOutputData(0,this.img); - else - this.setOutputData(0,null); - if(this.img && this.img.dirty) - this.img.dirty = false; -} - -GraphicsImage.prototype.onPropertyChanged = function(name,value) -{ - this.properties[name] = value; - if (name == "url" && value != "") - this.loadImage(value); - - return true; -} - -GraphicsImage.prototype.loadImage = function( url, callback ) -{ - if(url == "") - { - this.img = null; - return; - } - - this.img = document.createElement("img"); - - if(url.substr(0,4) == "http" && LiteGraph.proxy) - url = LiteGraph.proxy + url.substr( url.indexOf(":") + 3 ); - - this.img.src = url; - this.boxcolor = "#F95"; - var that = this; - this.img.onload = function() - { - if(callback) - callback(this); - that.trace("Image loaded, size: " + that.img.width + "x" + that.img.height ); - this.dirty = true; - that.boxcolor = "#9F9"; - that.setDirtyCanvas(true); - } -} - -GraphicsImage.prototype.onWidget = function(e,widget) -{ - if(widget.name == "load") - { - this.loadImage(this.properties["url"]); - } -} - -GraphicsImage.prototype.onDropFile = function(file) -{ - var that = this; - if(this._url) - URL.revokeObjectURL( this._url ); - this._url = URL.createObjectURL( file ); - this.properties.url = this._url; - this.loadImage( this._url, function(img){ - that.size[1] = (img.height / img.width) * that.size[0]; - }); -} - -LiteGraph.registerNodeType("graphics/image", GraphicsImage); - - - -function ColorPalette() -{ - this.addInput("f","number"); - this.addOutput("Color","color"); - this.properties = {colorA:"#444444",colorB:"#44AAFF",colorC:"#44FFAA",colorD:"#FFFFFF"}; - -} - -ColorPalette.title = "Palette"; -ColorPalette.desc = "Generates a color"; - -ColorPalette.prototype.onExecute = function() -{ - var c = []; - - if (this.properties.colorA != null) - c.push( hex2num( this.properties.colorA ) ); - if (this.properties.colorB != null) - c.push( hex2num( this.properties.colorB ) ); - if (this.properties.colorC != null) - c.push( hex2num( this.properties.colorC ) ); - if (this.properties.colorD != null) - c.push( hex2num( this.properties.colorD ) ); - - var f = this.getInputData(0); - if(f == null) f = 0.5; - if (f > 1.0) - f = 1.0; - else if (f < 0.0) - f = 0.0; - - if(c.length == 0) - return; - - var result = [0,0,0]; - if(f == 0) - result = c[0]; - else if(f == 1) - result = c[ c.length - 1]; - else - { - var pos = (c.length - 1)* f; - var c1 = c[ Math.floor(pos) ]; - var c2 = c[ Math.floor(pos)+1 ]; - var t = pos - Math.floor(pos); - result[0] = c1[0] * (1-t) + c2[0] * (t); - result[1] = c1[1] * (1-t) + c2[1] * (t); - result[2] = c1[2] * (1-t) + c2[2] * (t); - } - - /* - c[0] = 1.0 - Math.abs( Math.sin( 0.1 * reModular.getTime() * Math.PI) ); - c[1] = Math.abs( Math.sin( 0.07 * reModular.getTime() * Math.PI) ); - c[2] = Math.abs( Math.sin( 0.01 * reModular.getTime() * Math.PI) ); - */ - - for(var i in result) - result[i] /= 255; - - this.boxcolor = colorToString(result); - this.setOutputData(0, result); -} - - -LiteGraph.registerNodeType("color/palette", ColorPalette ); - - -function ImageFrame() -{ - this.addInput("","image"); - this.size = [200,200]; -} - -ImageFrame.title = "Frame"; -ImageFrame.desc = "Frame viewerew"; -ImageFrame.widgets = [{name:"resize",text:"Resize box",type:"button"},{name:"view",text:"View Image",type:"button"}]; - - -ImageFrame.prototype.onDrawBackground = function(ctx) -{ - if(this.frame) - ctx.drawImage(this.frame, 0,0,this.size[0],this.size[1]); -} - -ImageFrame.prototype.onExecute = function() -{ - this.frame = this.getInputData(0); - this.setDirtyCanvas(true); -} - -ImageFrame.prototype.onWidget = function(e,widget) -{ - if(widget.name == "resize" && this.frame) - { - var width = this.frame.width; - var height = this.frame.height; - - if(!width && this.frame.videoWidth != null ) - { - width = this.frame.videoWidth; - height = this.frame.videoHeight; - } - - if(width && height) - this.size = [width, height]; - this.setDirtyCanvas(true,true); - } - else if(widget.name == "view") - this.show(); -} - -ImageFrame.prototype.show = function() -{ - //var str = this.canvas.toDataURL("image/png"); - if(showElement && this.frame) - showElement(this.frame); -} - - -LiteGraph.registerNodeType("graphics/frame", ImageFrame ); - - - -/* -LiteGraph.registerNodeType("visualization/graph", { - desc: "Shows a graph of the inputs", - - inputs: [["",0],["",0],["",0],["",0]], - size: [200,200], - properties: {min:-1,max:1,bgColor:"#000"}, - onDrawBackground: function(ctx) - { - var colors = ["#FFF","#FAA","#AFA","#AAF"]; - - if(this.properties.bgColor != null && this.properties.bgColor != "") - { - ctx.fillStyle="#000"; - ctx.fillRect(2,2,this.size[0] - 4, this.size[1]-4); - } - - if(this.data) - { - var min = this.properties["min"]; - var max = this.properties["max"]; - - for(var i in this.data) - { - var data = this.data[i]; - if(!data) continue; - - if(this.getInputInfo(i) == null) continue; - - ctx.strokeStyle = colors[i]; - ctx.beginPath(); - - var d = data.length / this.size[0]; - for(var j = 0; j < data.length; j += d) - { - var value = data[ Math.floor(j) ]; - value = (value - min) / (max - min); - if (value > 1.0) value = 1.0; - else if(value < 0) value = 0; - - if(j == 0) - ctx.moveTo( j / d, (this.size[1] - 5) - (this.size[1] - 10) * value); - else - ctx.lineTo( j / d, (this.size[1] - 5) - (this.size[1] - 10) * value); - } - - ctx.stroke(); - } - } - - //ctx.restore(); - }, - - onExecute: function() - { - if(!this.data) this.data = []; - - for(var i in this.inputs) - { - var value = this.getInputData(i); - - if(typeof(value) == "number") - { - value = value ? value : 0; - if(!this.data[i]) - this.data[i] = []; - this.data[i].push(value); - - if(this.data[i].length > (this.size[1] - 4)) - this.data[i] = this.data[i].slice(1,this.data[i].length); - } - else - this.data[i] = value; - } - - if(this.data.length) - this.setDirtyCanvas(true); - } - }); -*/ - -function ImageFade() -{ - this.addInputs([["img1","image"],["img2","image"],["fade","number"]]); - this.addOutput("","image"); - this.properties = {fade:0.5,width:512,height:512}; -} - -ImageFade.title = "Image fade"; -ImageFade.desc = "Fades between images"; -ImageFade.widgets = [{name:"resizeA",text:"Resize to A",type:"button"},{name:"resizeB",text:"Resize to B",type:"button"}]; - -ImageFade.prototype.onAdded = function() -{ - this.createCanvas(); - var ctx = this.canvas.getContext("2d"); - ctx.fillStyle = "#000"; - ctx.fillRect(0,0,this.properties["width"],this.properties["height"]); -} - -ImageFade.prototype.createCanvas = function() -{ - this.canvas = document.createElement("canvas"); - this.canvas.width = this.properties["width"]; - this.canvas.height = this.properties["height"]; -} - -ImageFade.prototype.onExecute = function() -{ - var ctx = this.canvas.getContext("2d"); - this.canvas.width = this.canvas.width; - - var A = this.getInputData(0); - if (A != null) - { - ctx.drawImage(A,0,0,this.canvas.width, this.canvas.height); - } - - var fade = this.getInputData(2); - if(fade == null) - fade = this.properties["fade"]; - else - this.properties["fade"] = fade; - - ctx.globalAlpha = fade; - var B = this.getInputData(1); - if (B != null) - { - ctx.drawImage(B,0,0,this.canvas.width, this.canvas.height); - } - ctx.globalAlpha = 1.0; - - this.setOutputData(0,this.canvas); - this.setDirtyCanvas(true); -} - -LiteGraph.registerNodeType("graphics/imagefade", ImageFade); - - - -function ImageCrop() -{ - this.addInput("","image"); - this.addOutput("","image"); - this.properties = {width:256,height:256,x:0,y:0,scale:1.0 }; - this.size = [50,20]; -} - -ImageCrop.title = "Crop"; -ImageCrop.desc = "Crop Image"; - -ImageCrop.prototype.onAdded = function() -{ - this.createCanvas(); -} - -ImageCrop.prototype.createCanvas = function() -{ - this.canvas = document.createElement("canvas"); - this.canvas.width = this.properties["width"]; - this.canvas.height = this.properties["height"]; -} - -ImageCrop.prototype.onExecute = function() -{ - var input = this.getInputData(0); - if(!input) - return; - - if(input.width) - { - var ctx = this.canvas.getContext("2d"); - - ctx.drawImage(input, -this.properties["x"],-this.properties["y"], input.width * this.properties["scale"], input.height * this.properties["scale"]); - this.setOutputData(0,this.canvas); - } - else - this.setOutputData(0,null); -} - -ImageCrop.prototype.onDrawBackground = function(ctx) -{ - if(this.flags.collapsed) - return; - if(this.canvas) - ctx.drawImage( this.canvas, 0,0,this.canvas.width,this.canvas.height, 0,0, this.size[0], this.size[1] ); -} - -ImageCrop.prototype.onPropertyChanged = function(name,value) -{ - this.properties[name] = value; - - if(name == "scale") - { - this.properties[name] = parseFloat(value); - if(this.properties[name] == 0) - { - this.trace("Error in scale"); - this.properties[name] = 1.0; - } - } - else - this.properties[name] = parseInt(value); - - this.createCanvas(); - - return true; -} - -LiteGraph.registerNodeType("graphics/cropImage", ImageCrop ); - - -function ImageVideo() -{ - this.addInput("t","number"); - this.addOutputs([["frame","image"],["t","number"],["d","number"]]); - this.properties = { url:"", use_proxy: true }; -} - -ImageVideo.title = "Video"; -ImageVideo.desc = "Video playback"; -ImageVideo.widgets = [{name:"play",text:"PLAY",type:"minibutton"},{name:"stop",text:"STOP",type:"minibutton"},{name:"demo",text:"Demo video",type:"button"},{name:"mute",text:"Mute video",type:"button"}]; - -ImageVideo.prototype.onExecute = function() -{ - if(!this.properties.url) - return; - - if(this.properties.url != this._video_url) - this.loadVideo(this.properties.url); - - if(!this._video || this._video.width == 0) - return; - - var t = this.getInputData(0); - if(t && t >= 0 && t <= 1.0) - { - this._video.currentTime = t * this._video.duration; - this._video.pause(); - } - - this._video.dirty = true; - this.setOutputData(0,this._video); - this.setOutputData(1,this._video.currentTime); - this.setOutputData(2,this._video.duration); - this.setDirtyCanvas(true); -} - -ImageVideo.prototype.onStart = function() -{ - this.play(); -} - -ImageVideo.prototype.onStop = function() -{ - this.stop(); -} - -ImageVideo.prototype.loadVideo = function(url) -{ - this._video_url = url; - - if(this.properties.use_proxy && url.substr(0,4) == "http" && LiteGraph.proxy ) - url = LiteGraph.proxy + url.substr( url.indexOf(":") + 3 ); - - this._video = document.createElement("video"); - this._video.src = url; - this._video.type = "type=video/mp4"; - - this._video.muted = true; - this._video.autoplay = true; - - var that = this; - this._video.addEventListener("loadedmetadata",function(e) { - //onload - that.trace("Duration: " + this.duration + " seconds"); - that.trace("Size: " + this.videoWidth + "," + this.videoHeight); - that.setDirtyCanvas(true); - this.width = this.videoWidth; - this.height = this.videoHeight; - }); - this._video.addEventListener("progress",function(e) { - //onload - //that.trace("loading..."); - }); - this._video.addEventListener("error",function(e) { - console.log("Error loading video: " + this.src); - that.trace("Error loading video: " + this.src); - if (this.error) { - switch (this.error.code) { - case this.error.MEDIA_ERR_ABORTED: - that.trace("You stopped the video."); - break; - case this.error.MEDIA_ERR_NETWORK: - that.trace("Network error - please try again later."); - break; - case this.error.MEDIA_ERR_DECODE: - that.trace("Video is broken.."); - break; - case this.error.MEDIA_ERR_SRC_NOT_SUPPORTED: - that.trace("Sorry, your browser can't play this video."); - break; - } - } - }); - - this._video.addEventListener("ended",function(e) { - that.trace("Ended."); - this.play(); //loop - }); - - //document.body.appendChild(this.video); -} - -ImageVideo.prototype.onPropertyChanged = function(name,value) -{ - this.properties[name] = value; - if (name == "url" && value != "") - this.loadVideo(value); - - return true; -} - -ImageVideo.prototype.play = function() -{ - if(this._video) - this._video.play(); -} - -ImageVideo.prototype.playPause = function() -{ - if(!this._video) - return; - if(this._video.paused) - this.play(); - else - this.pause(); -} - -ImageVideo.prototype.stop = function() -{ - if(!this._video) - return; - this._video.pause(); - this._video.currentTime = 0; -} - -ImageVideo.prototype.pause = function() -{ - if(!this._video) - return; - this.trace("Video paused"); - this._video.pause(); -} - -ImageVideo.prototype.onWidget = function(e,widget) -{ - /* - if(widget.name == "demo") - { - this.loadVideo(); - } - else if(widget.name == "play") - { - if(this._video) - this.playPause(); - } - if(widget.name == "stop") - { - this.stop(); - } - else if(widget.name == "mute") - { - if(this._video) - this._video.muted = !this._video.muted; - } - */ -} - -LiteGraph.registerNodeType("graphics/video", ImageVideo ); - - -// Texture Webcam ***************************************** -function ImageWebcam() -{ - this.addOutput("Webcam","image"); - this.properties = {}; -} - -ImageWebcam.title = "Webcam"; -ImageWebcam.desc = "Webcam image"; - - -ImageWebcam.prototype.openStream = function() -{ - //Vendor prefixes hell - navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); - window.URL = window.URL || window.webkitURL; - - if (!navigator.getUserMedia) { - //console.log('getUserMedia() is not supported in your browser, use chrome and enable WebRTC from about://flags'); - return; - } - - this._waiting_confirmation = true; - - // Not showing vendor prefixes. - navigator.getUserMedia({video: true}, this.streamReady.bind(this), onFailSoHard); - - var that = this; - function onFailSoHard(e) { - console.log('Webcam rejected', e); - that._webcam_stream = false; - that.box_color = "red"; - }; -} - -ImageWebcam.prototype.onRemoved = function() -{ - if(this._webcam_stream) - { - this._webcam_stream.stop(); - this._webcam_stream = null; - this._video = null; - } -} - -ImageWebcam.prototype.streamReady = function(localMediaStream) -{ - this._webcam_stream = localMediaStream; - //this._waiting_confirmation = false; - - var video = this._video; - if(!video) - { - video = document.createElement("video"); - video.autoplay = true; - video.src = window.URL.createObjectURL(localMediaStream); - this._video = video; - //document.body.appendChild( video ); //debug - //when video info is loaded (size and so) - video.onloadedmetadata = function(e) { - // Ready to go. Do some stuff. - console.log(e); - }; - } -}, - -ImageWebcam.prototype.onExecute = function() -{ - if(this._webcam_stream == null && !this._waiting_confirmation) - this.openStream(); - - if(!this._video || !this._video.videoWidth) return; - - this._video.width = this._video.videoWidth; - this._video.height = this._video.videoHeight; - this.setOutputData(0, this._video); -} - -ImageWebcam.prototype.getExtraMenuOptions = function(graphcanvas) -{ - var that = this; - var txt = !that.properties.show ? "Show Frame" : "Hide Frame"; - return [ {content: txt, callback: - function() { - that.properties.show = !that.properties.show; - } - }]; -} - -ImageWebcam.prototype.onDrawBackground = function(ctx) -{ - if(this.flags.collapsed || this.size[1] <= 20 || !this.properties.show) - return; - - if(!this._video) - return; - - //render to graph canvas - ctx.save(); - ctx.drawImage(this._video, 0, 0, this.size[0], this.size[1]); - ctx.restore(); -} - -LiteGraph.registerNodeType("graphics/webcam", ImageWebcam ); - - -})(this); - +})(this); +(function(global){ +var LiteGraph = global.LiteGraph; + +function Selector() +{ + this.addInput("sel","boolean"); + this.addOutput("value","number"); + this.properties = { A:0, B:1 }; + this.size = [60,20]; +} + +Selector.title = "Selector"; +Selector.desc = "outputs A if selector is true, B if selector is false"; + +Selector.prototype.onExecute = function() +{ + var cond = this.getInputData(0); + if(cond === undefined) + return; + + for(var i = 1; i < this.inputs.length; i++) + { + var input = this.inputs[i]; + var v = this.getInputData(i); + if(v === undefined) + continue; + this.properties[input.name] = v; + } + + var A = this.properties.A; + var B = this.properties.B; + this.setOutputData(0, cond ? A : B ); +} + +Selector.prototype.onGetInputs = function() { + return [["A",0],["B",0]]; +} + +LiteGraph.registerNodeType("logic/selector", Selector); + +})(this); +(function(global){ +var LiteGraph = global.LiteGraph; + +function GraphicsPlot() +{ + this.addInput("A","Number"); + this.addInput("B","Number"); + this.addInput("C","Number"); + this.addInput("D","Number"); + + this.values = [[],[],[],[]]; + this.properties = { scale: 2 }; +} + +GraphicsPlot.title = "Plot"; +GraphicsPlot.desc = "Plots data over time"; +GraphicsPlot.colors = ["#FFF","#F99","#9F9","#99F"]; + +GraphicsPlot.prototype.onExecute = function(ctx) +{ + if(this.flags.collapsed) + return; + + var size = this.size; + + for(var i = 0; i < 4; ++i) + { + var v = this.getInputData(i); + if(v == null) + continue; + var values = this.values[i]; + values.push(v); + if(values.length > size[0]) + values.shift(); + } +} + +GraphicsPlot.prototype.onDrawBackground = function(ctx) +{ + if(this.flags.collapsed) + return; + + var size = this.size; + + var scale = 0.5 * size[1] / this.properties.scale; + var colors = GraphicsPlot.colors; + var offset = size[1] * 0.5; + + ctx.fillStyle = "#000"; + ctx.fillRect(0,0, size[0],size[1]); + ctx.strokeStyle = "#555"; + ctx.beginPath(); + ctx.moveTo(0, offset); + ctx.lineTo(size[0], offset); + ctx.stroke(); + + for(var i = 0; i < 4; ++i) + { + var values = this.values[i]; + ctx.strokeStyle = colors[i]; + ctx.beginPath(); + var v = values[0] * scale * -1 + offset; + ctx.moveTo(0, Math.clamp( v, 0, size[1]) ); + for(var j = 1; j < values.length && j < size[0]; ++j) + { + var v = values[j] * scale * -1 + offset; + ctx.lineTo( j, Math.clamp( v, 0, size[1]) ); + } + ctx.stroke(); + } +} + +LiteGraph.registerNodeType("graphics/plot", GraphicsPlot); + + +function GraphicsImage() +{ + this.addOutput("frame","image"); + this.properties = {"url":""}; +} + +GraphicsImage.title = "Image"; +GraphicsImage.desc = "Image loader"; +GraphicsImage.widgets = [{name:"load",text:"Load",type:"button"}]; + +GraphicsImage.supported_extensions = ["jpg","jpeg","png","gif"]; + +GraphicsImage.prototype.onAdded = function() +{ + if(this.properties["url"] != "" && this.img == null) + { + this.loadImage( this.properties["url"] ); + } +} + +GraphicsImage.prototype.onDrawBackground = function(ctx) +{ + if(this.img && this.size[0] > 5 && this.size[1] > 5) + ctx.drawImage(this.img, 0,0,this.size[0],this.size[1]); +} + + +GraphicsImage.prototype.onExecute = function() +{ + if(!this.img) + this.boxcolor = "#000"; + if(this.img && this.img.width) + this.setOutputData(0,this.img); + else + this.setOutputData(0,null); + if(this.img && this.img.dirty) + this.img.dirty = false; +} + +GraphicsImage.prototype.onPropertyChanged = function(name,value) +{ + this.properties[name] = value; + if (name == "url" && value != "") + this.loadImage(value); + + return true; +} + +GraphicsImage.prototype.loadImage = function( url, callback ) +{ + if(url == "") + { + this.img = null; + return; + } + + this.img = document.createElement("img"); + + if(url.substr(0,4) == "http" && LiteGraph.proxy) + url = LiteGraph.proxy + url.substr( url.indexOf(":") + 3 ); + + this.img.src = url; + this.boxcolor = "#F95"; + var that = this; + this.img.onload = function() + { + if(callback) + callback(this); + that.trace("Image loaded, size: " + that.img.width + "x" + that.img.height ); + this.dirty = true; + that.boxcolor = "#9F9"; + that.setDirtyCanvas(true); + } +} + +GraphicsImage.prototype.onWidget = function(e,widget) +{ + if(widget.name == "load") + { + this.loadImage(this.properties["url"]); + } +} + +GraphicsImage.prototype.onDropFile = function(file) +{ + var that = this; + if(this._url) + URL.revokeObjectURL( this._url ); + this._url = URL.createObjectURL( file ); + this.properties.url = this._url; + this.loadImage( this._url, function(img){ + that.size[1] = (img.height / img.width) * that.size[0]; + }); +} + +LiteGraph.registerNodeType("graphics/image", GraphicsImage); + + + +function ColorPalette() +{ + this.addInput("f","number"); + this.addOutput("Color","color"); + this.properties = {colorA:"#444444",colorB:"#44AAFF",colorC:"#44FFAA",colorD:"#FFFFFF"}; + +} + +ColorPalette.title = "Palette"; +ColorPalette.desc = "Generates a color"; + +ColorPalette.prototype.onExecute = function() +{ + var c = []; + + if (this.properties.colorA != null) + c.push( hex2num( this.properties.colorA ) ); + if (this.properties.colorB != null) + c.push( hex2num( this.properties.colorB ) ); + if (this.properties.colorC != null) + c.push( hex2num( this.properties.colorC ) ); + if (this.properties.colorD != null) + c.push( hex2num( this.properties.colorD ) ); + + var f = this.getInputData(0); + if(f == null) f = 0.5; + if (f > 1.0) + f = 1.0; + else if (f < 0.0) + f = 0.0; + + if(c.length == 0) + return; + + var result = [0,0,0]; + if(f == 0) + result = c[0]; + else if(f == 1) + result = c[ c.length - 1]; + else + { + var pos = (c.length - 1)* f; + var c1 = c[ Math.floor(pos) ]; + var c2 = c[ Math.floor(pos)+1 ]; + var t = pos - Math.floor(pos); + result[0] = c1[0] * (1-t) + c2[0] * (t); + result[1] = c1[1] * (1-t) + c2[1] * (t); + result[2] = c1[2] * (1-t) + c2[2] * (t); + } + + /* + c[0] = 1.0 - Math.abs( Math.sin( 0.1 * reModular.getTime() * Math.PI) ); + c[1] = Math.abs( Math.sin( 0.07 * reModular.getTime() * Math.PI) ); + c[2] = Math.abs( Math.sin( 0.01 * reModular.getTime() * Math.PI) ); + */ + + for(var i in result) + result[i] /= 255; + + this.boxcolor = colorToString(result); + this.setOutputData(0, result); +} + + +LiteGraph.registerNodeType("color/palette", ColorPalette ); + + +function ImageFrame() +{ + this.addInput("","image"); + this.size = [200,200]; +} + +ImageFrame.title = "Frame"; +ImageFrame.desc = "Frame viewerew"; +ImageFrame.widgets = [{name:"resize",text:"Resize box",type:"button"},{name:"view",text:"View Image",type:"button"}]; + + +ImageFrame.prototype.onDrawBackground = function(ctx) +{ + if(this.frame) + ctx.drawImage(this.frame, 0,0,this.size[0],this.size[1]); +} + +ImageFrame.prototype.onExecute = function() +{ + this.frame = this.getInputData(0); + this.setDirtyCanvas(true); +} + +ImageFrame.prototype.onWidget = function(e,widget) +{ + if(widget.name == "resize" && this.frame) + { + var width = this.frame.width; + var height = this.frame.height; + + if(!width && this.frame.videoWidth != null ) + { + width = this.frame.videoWidth; + height = this.frame.videoHeight; + } + + if(width && height) + this.size = [width, height]; + this.setDirtyCanvas(true,true); + } + else if(widget.name == "view") + this.show(); +} + +ImageFrame.prototype.show = function() +{ + //var str = this.canvas.toDataURL("image/png"); + if(showElement && this.frame) + showElement(this.frame); +} + + +LiteGraph.registerNodeType("graphics/frame", ImageFrame ); + + + +/* +LiteGraph.registerNodeType("visualization/graph", { + desc: "Shows a graph of the inputs", + + inputs: [["",0],["",0],["",0],["",0]], + size: [200,200], + properties: {min:-1,max:1,bgColor:"#000"}, + onDrawBackground: function(ctx) + { + var colors = ["#FFF","#FAA","#AFA","#AAF"]; + + if(this.properties.bgColor != null && this.properties.bgColor != "") + { + ctx.fillStyle="#000"; + ctx.fillRect(2,2,this.size[0] - 4, this.size[1]-4); + } + + if(this.data) + { + var min = this.properties["min"]; + var max = this.properties["max"]; + + for(var i in this.data) + { + var data = this.data[i]; + if(!data) continue; + + if(this.getInputInfo(i) == null) continue; + + ctx.strokeStyle = colors[i]; + ctx.beginPath(); + + var d = data.length / this.size[0]; + for(var j = 0; j < data.length; j += d) + { + var value = data[ Math.floor(j) ]; + value = (value - min) / (max - min); + if (value > 1.0) value = 1.0; + else if(value < 0) value = 0; + + if(j == 0) + ctx.moveTo( j / d, (this.size[1] - 5) - (this.size[1] - 10) * value); + else + ctx.lineTo( j / d, (this.size[1] - 5) - (this.size[1] - 10) * value); + } + + ctx.stroke(); + } + } + + //ctx.restore(); + }, + + onExecute: function() + { + if(!this.data) this.data = []; + + for(var i in this.inputs) + { + var value = this.getInputData(i); + + if(typeof(value) == "number") + { + value = value ? value : 0; + if(!this.data[i]) + this.data[i] = []; + this.data[i].push(value); + + if(this.data[i].length > (this.size[1] - 4)) + this.data[i] = this.data[i].slice(1,this.data[i].length); + } + else + this.data[i] = value; + } + + if(this.data.length) + this.setDirtyCanvas(true); + } + }); +*/ + +function ImageFade() +{ + this.addInputs([["img1","image"],["img2","image"],["fade","number"]]); + this.addOutput("","image"); + this.properties = {fade:0.5,width:512,height:512}; +} + +ImageFade.title = "Image fade"; +ImageFade.desc = "Fades between images"; +ImageFade.widgets = [{name:"resizeA",text:"Resize to A",type:"button"},{name:"resizeB",text:"Resize to B",type:"button"}]; + +ImageFade.prototype.onAdded = function() +{ + this.createCanvas(); + var ctx = this.canvas.getContext("2d"); + ctx.fillStyle = "#000"; + ctx.fillRect(0,0,this.properties["width"],this.properties["height"]); +} + +ImageFade.prototype.createCanvas = function() +{ + this.canvas = document.createElement("canvas"); + this.canvas.width = this.properties["width"]; + this.canvas.height = this.properties["height"]; +} + +ImageFade.prototype.onExecute = function() +{ + var ctx = this.canvas.getContext("2d"); + this.canvas.width = this.canvas.width; + + var A = this.getInputData(0); + if (A != null) + { + ctx.drawImage(A,0,0,this.canvas.width, this.canvas.height); + } + + var fade = this.getInputData(2); + if(fade == null) + fade = this.properties["fade"]; + else + this.properties["fade"] = fade; + + ctx.globalAlpha = fade; + var B = this.getInputData(1); + if (B != null) + { + ctx.drawImage(B,0,0,this.canvas.width, this.canvas.height); + } + ctx.globalAlpha = 1.0; + + this.setOutputData(0,this.canvas); + this.setDirtyCanvas(true); +} + +LiteGraph.registerNodeType("graphics/imagefade", ImageFade); + + + +function ImageCrop() +{ + this.addInput("","image"); + this.addOutput("","image"); + this.properties = {width:256,height:256,x:0,y:0,scale:1.0 }; + this.size = [50,20]; +} + +ImageCrop.title = "Crop"; +ImageCrop.desc = "Crop Image"; + +ImageCrop.prototype.onAdded = function() +{ + this.createCanvas(); +} + +ImageCrop.prototype.createCanvas = function() +{ + this.canvas = document.createElement("canvas"); + this.canvas.width = this.properties["width"]; + this.canvas.height = this.properties["height"]; +} + +ImageCrop.prototype.onExecute = function() +{ + var input = this.getInputData(0); + if(!input) + return; + + if(input.width) + { + var ctx = this.canvas.getContext("2d"); + + ctx.drawImage(input, -this.properties["x"],-this.properties["y"], input.width * this.properties["scale"], input.height * this.properties["scale"]); + this.setOutputData(0,this.canvas); + } + else + this.setOutputData(0,null); +} + +ImageCrop.prototype.onDrawBackground = function(ctx) +{ + if(this.flags.collapsed) + return; + if(this.canvas) + ctx.drawImage( this.canvas, 0,0,this.canvas.width,this.canvas.height, 0,0, this.size[0], this.size[1] ); +} + +ImageCrop.prototype.onPropertyChanged = function(name,value) +{ + this.properties[name] = value; + + if(name == "scale") + { + this.properties[name] = parseFloat(value); + if(this.properties[name] == 0) + { + this.trace("Error in scale"); + this.properties[name] = 1.0; + } + } + else + this.properties[name] = parseInt(value); + + this.createCanvas(); + + return true; +} + +LiteGraph.registerNodeType("graphics/cropImage", ImageCrop ); + + +function ImageVideo() +{ + this.addInput("t","number"); + this.addOutputs([["frame","image"],["t","number"],["d","number"]]); + this.properties = { url:"", use_proxy: true }; +} + +ImageVideo.title = "Video"; +ImageVideo.desc = "Video playback"; +ImageVideo.widgets = [{name:"play",text:"PLAY",type:"minibutton"},{name:"stop",text:"STOP",type:"minibutton"},{name:"demo",text:"Demo video",type:"button"},{name:"mute",text:"Mute video",type:"button"}]; + +ImageVideo.prototype.onExecute = function() +{ + if(!this.properties.url) + return; + + if(this.properties.url != this._video_url) + this.loadVideo(this.properties.url); + + if(!this._video || this._video.width == 0) + return; + + var t = this.getInputData(0); + if(t && t >= 0 && t <= 1.0) + { + this._video.currentTime = t * this._video.duration; + this._video.pause(); + } + + this._video.dirty = true; + this.setOutputData(0,this._video); + this.setOutputData(1,this._video.currentTime); + this.setOutputData(2,this._video.duration); + this.setDirtyCanvas(true); +} + +ImageVideo.prototype.onStart = function() +{ + this.play(); +} + +ImageVideo.prototype.onStop = function() +{ + this.stop(); +} + +ImageVideo.prototype.loadVideo = function(url) +{ + this._video_url = url; + + if(this.properties.use_proxy && url.substr(0,4) == "http" && LiteGraph.proxy ) + url = LiteGraph.proxy + url.substr( url.indexOf(":") + 3 ); + + this._video = document.createElement("video"); + this._video.src = url; + this._video.type = "type=video/mp4"; + + this._video.muted = true; + this._video.autoplay = true; + + var that = this; + this._video.addEventListener("loadedmetadata",function(e) { + //onload + that.trace("Duration: " + this.duration + " seconds"); + that.trace("Size: " + this.videoWidth + "," + this.videoHeight); + that.setDirtyCanvas(true); + this.width = this.videoWidth; + this.height = this.videoHeight; + }); + this._video.addEventListener("progress",function(e) { + //onload + //that.trace("loading..."); + }); + this._video.addEventListener("error",function(e) { + console.log("Error loading video: " + this.src); + that.trace("Error loading video: " + this.src); + if (this.error) { + switch (this.error.code) { + case this.error.MEDIA_ERR_ABORTED: + that.trace("You stopped the video."); + break; + case this.error.MEDIA_ERR_NETWORK: + that.trace("Network error - please try again later."); + break; + case this.error.MEDIA_ERR_DECODE: + that.trace("Video is broken.."); + break; + case this.error.MEDIA_ERR_SRC_NOT_SUPPORTED: + that.trace("Sorry, your browser can't play this video."); + break; + } + } + }); + + this._video.addEventListener("ended",function(e) { + that.trace("Ended."); + this.play(); //loop + }); + + //document.body.appendChild(this.video); +} + +ImageVideo.prototype.onPropertyChanged = function(name,value) +{ + this.properties[name] = value; + if (name == "url" && value != "") + this.loadVideo(value); + + return true; +} + +ImageVideo.prototype.play = function() +{ + if(this._video) + this._video.play(); +} + +ImageVideo.prototype.playPause = function() +{ + if(!this._video) + return; + if(this._video.paused) + this.play(); + else + this.pause(); +} + +ImageVideo.prototype.stop = function() +{ + if(!this._video) + return; + this._video.pause(); + this._video.currentTime = 0; +} + +ImageVideo.prototype.pause = function() +{ + if(!this._video) + return; + this.trace("Video paused"); + this._video.pause(); +} + +ImageVideo.prototype.onWidget = function(e,widget) +{ + /* + if(widget.name == "demo") + { + this.loadVideo(); + } + else if(widget.name == "play") + { + if(this._video) + this.playPause(); + } + if(widget.name == "stop") + { + this.stop(); + } + else if(widget.name == "mute") + { + if(this._video) + this._video.muted = !this._video.muted; + } + */ +} + +LiteGraph.registerNodeType("graphics/video", ImageVideo ); + + +// Texture Webcam ***************************************** +function ImageWebcam() +{ + this.addOutput("Webcam","image"); + this.properties = {}; +} + +ImageWebcam.title = "Webcam"; +ImageWebcam.desc = "Webcam image"; + + +ImageWebcam.prototype.openStream = function() +{ + //Vendor prefixes hell + navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); + window.URL = window.URL || window.webkitURL; + + if (!navigator.getUserMedia) { + //console.log('getUserMedia() is not supported in your browser, use chrome and enable WebRTC from about://flags'); + return; + } + + this._waiting_confirmation = true; + + // Not showing vendor prefixes. + navigator.getUserMedia({video: true}, this.streamReady.bind(this), onFailSoHard); + + var that = this; + function onFailSoHard(e) { + console.log('Webcam rejected', e); + that._webcam_stream = false; + that.box_color = "red"; + }; +} + +ImageWebcam.prototype.onRemoved = function() +{ + if(this._webcam_stream) + { + this._webcam_stream.stop(); + this._webcam_stream = null; + this._video = null; + } +} + +ImageWebcam.prototype.streamReady = function(localMediaStream) +{ + this._webcam_stream = localMediaStream; + //this._waiting_confirmation = false; + + var video = this._video; + if(!video) + { + video = document.createElement("video"); + video.autoplay = true; + video.src = window.URL.createObjectURL(localMediaStream); + this._video = video; + //document.body.appendChild( video ); //debug + //when video info is loaded (size and so) + video.onloadedmetadata = function(e) { + // Ready to go. Do some stuff. + console.log(e); + }; + } +}, + +ImageWebcam.prototype.onExecute = function() +{ + if(this._webcam_stream == null && !this._waiting_confirmation) + this.openStream(); + + if(!this._video || !this._video.videoWidth) return; + + this._video.width = this._video.videoWidth; + this._video.height = this._video.videoHeight; + this.setOutputData(0, this._video); +} + +ImageWebcam.prototype.getExtraMenuOptions = function(graphcanvas) +{ + var that = this; + var txt = !that.properties.show ? "Show Frame" : "Hide Frame"; + return [ {content: txt, callback: + function() { + that.properties.show = !that.properties.show; + } + }]; +} + +ImageWebcam.prototype.onDrawBackground = function(ctx) +{ + if(this.flags.collapsed || this.size[1] <= 20 || !this.properties.show) + return; + + if(!this._video) + return; + + //render to graph canvas + ctx.save(); + ctx.drawImage(this._video, 0, 0, this.size[0], this.size[1]); + ctx.restore(); +} + +LiteGraph.registerNodeType("graphics/webcam", ImageWebcam ); + + +})(this); + (function(global){ var LiteGraph = global.LiteGraph; @@ -14784,7 +14783,7 @@ LGraphTextureKuwaharaFilter.pixel_shader = "\n\ } //litegl.js defined -})(this); +})(this); (function(global){ var LiteGraph = global.LiteGraph; @@ -15461,7 +15460,7 @@ if(typeof(GL) != "undefined") global.LGraphFXVigneting = LGraphFXVigneting; } -})(this); +})(this); (function( global ) { var LiteGraph = global.LiteGraph; @@ -16169,7 +16168,7 @@ LiteGraph.registerNodeType("midi/cc", LGMIDICC); function now() { return window.performance.now() } -})( this ); +})( this ); (function( global ) { var LiteGraph = global.LiteGraph; @@ -17425,7 +17424,7 @@ LiteGraph.registerNodeType("audio/destination", LGAudioDestination); -})( this ); +})( this ); //event related nodes (function(global){ var LiteGraph = global.LiteGraph; @@ -17684,4 +17683,4 @@ LGSillyClient.prototype.onGetOutputs = function() LiteGraph.registerNodeType("network/sillyclient", LGSillyClient ); -})(this); +})(this); \ No newline at end of file diff --git a/build/litegraph.min.js b/build/litegraph.min.js index 26f54b391..9d32facd4 100755 --- a/build/litegraph.min.js +++ b/build/litegraph.min.js @@ -3,39 +3,39 @@ $jscomp.scope = {}; $jscomp.ASSUME_ES5 = !1; $jscomp.ASSUME_NO_NATIVE_MAP = !1; $jscomp.ASSUME_NO_NATIVE_SET = !1; -$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(u, f, h) { - u != Array.prototype && u != Object.prototype && (u[f] = h.value); +$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(v, f, l) { + v != Array.prototype && v != Object.prototype && (v[f] = l.value); }; -$jscomp.getGlobal = function(u) { - return "undefined" != typeof window && window === u ? u : "undefined" != typeof global && null != global ? global : u; +$jscomp.getGlobal = function(v) { + return "undefined" != typeof window && window === v ? v : "undefined" != typeof global && null != global ? global : v; }; $jscomp.global = $jscomp.getGlobal(this); -$jscomp.polyfill = function(u, f, h, n) { +$jscomp.polyfill = function(v, f, l, m) { if (f) { - h = $jscomp.global; - u = u.split("."); - for (n = 0; n < u.length - 1; n++) { - var d = u[n]; - d in h || (h[d] = {}); - h = h[d]; + l = $jscomp.global; + v = v.split("."); + for (m = 0; m < v.length - 1; m++) { + var d = v[m]; + d in l || (l[d] = {}); + l = l[d]; } - u = u[u.length - 1]; - n = h[u]; - f = f(n); - f != n && null != f && $jscomp.defineProperty(h, u, {configurable:!0, writable:!0, value:f}); + v = v[v.length - 1]; + m = l[v]; + f = f(m); + f != m && null != f && $jscomp.defineProperty(l, v, {configurable:!0, writable:!0, value:f}); } }; -$jscomp.polyfill("Array.prototype.fill", function(u) { - return u ? u : function(f, h, n) { +$jscomp.polyfill("Array.prototype.fill", function(v) { + return v ? v : function(f, l, m) { var d = this.length || 0; - 0 > h && (h = Math.max(0, d + h)); - if (null == n || n > d) { - n = d; + 0 > l && (l = Math.max(0, d + l)); + if (null == m || m > d) { + m = d; } - n = Number(n); - 0 > n && (n = Math.max(0, d + n)); - for (h = Number(h || 0); h < n; h++) { - this[h] = f; + m = Number(m); + 0 > m && (m = Math.max(0, d + m)); + for (l = Number(l || 0); l < m; l++) { + this[l] = f; } return this; }; @@ -47,78 +47,78 @@ $jscomp.initSymbol = function() { $jscomp.global.Symbol || ($jscomp.global.Symbol = $jscomp.Symbol); }; $jscomp.Symbol = function() { - var u = 0; + var v = 0; return function(f) { - return $jscomp.SYMBOL_PREFIX + (f || "") + u++; + return $jscomp.SYMBOL_PREFIX + (f || "") + v++; }; }(); $jscomp.initSymbolIterator = function() { $jscomp.initSymbol(); - var u = $jscomp.global.Symbol.iterator; - u || (u = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); - "function" != typeof Array.prototype[u] && $jscomp.defineProperty(Array.prototype, u, {configurable:!0, writable:!0, value:function() { + var v = $jscomp.global.Symbol.iterator; + v || (v = $jscomp.global.Symbol.iterator = $jscomp.global.Symbol("iterator")); + "function" != typeof Array.prototype[v] && $jscomp.defineProperty(Array.prototype, v, {configurable:!0, writable:!0, value:function() { return $jscomp.arrayIterator(this); }}); $jscomp.initSymbolIterator = function() { }; }; -$jscomp.arrayIterator = function(u) { +$jscomp.arrayIterator = function(v) { var f = 0; return $jscomp.iteratorPrototype(function() { - return f < u.length ? {done:!1, value:u[f++]} : {done:!0}; + return f < v.length ? {done:!1, value:v[f++]} : {done:!0}; }); }; -$jscomp.iteratorPrototype = function(u) { +$jscomp.iteratorPrototype = function(v) { $jscomp.initSymbolIterator(); - u = {next:u}; - u[$jscomp.global.Symbol.iterator] = function() { + v = {next:v}; + v[$jscomp.global.Symbol.iterator] = function() { return this; }; - return u; + return v; }; -$jscomp.iteratorFromArray = function(u, f) { +$jscomp.iteratorFromArray = function(v, f) { $jscomp.initSymbolIterator(); - u instanceof String && (u += ""); - var h = 0, n = {next:function() { - if (h < u.length) { - var d = h++; - return {value:f(d, u[d]), done:!1}; + v instanceof String && (v += ""); + var l = 0, m = {next:function() { + if (l < v.length) { + var d = l++; + return {value:f(d, v[d]), done:!1}; } - n.next = function() { + m.next = function() { return {done:!0, value:void 0}; }; - return n.next(); + return m.next(); }}; - n[Symbol.iterator] = function() { - return n; + m[Symbol.iterator] = function() { + return m; }; - return n; + return m; }; -$jscomp.polyfill("Array.prototype.values", function(u) { - return u ? u : function() { - return $jscomp.iteratorFromArray(this, function(f, h) { - return h; +$jscomp.polyfill("Array.prototype.values", function(v) { + return v ? v : function() { + return $jscomp.iteratorFromArray(this, function(f, l) { + return l; }); }; }, "es8", "es3"); -$jscomp.polyfill("Array.prototype.keys", function(u) { - return u ? u : function() { +$jscomp.polyfill("Array.prototype.keys", function(v) { + return v ? v : function() { return $jscomp.iteratorFromArray(this, function(f) { return f; }); }; }, "es6", "es3"); -(function(u) { +(function(v) { function f(a) { - k.debug && console.log("Graph created"); + h.debug && console.log("Graph created"); this.list_of_graphcanvas = null; this.clear(); a && this.configure(a); } - function h(a) { + function l(a) { this._ctor(a); } - function n(a) { + function m(a) { this._ctor(a); } function d(a, b, e) { @@ -128,10 +128,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.max_zoom = 10; this.min_zoom = 0.1; this.zoom_modify_alpha = !0; - this.title_text_font = "bold " + k.NODE_TEXT_SIZE + "px Arial"; - this.inner_text_font = "normal " + k.NODE_SUBTEXT_SIZE + "px Arial"; - this.node_title_color = k.NODE_TITLE_COLOR; - this.default_link_color = k.LINK_COLOR; + this.title_text_font = "bold " + h.NODE_TEXT_SIZE + "px Arial"; + this.inner_text_font = "normal " + h.NODE_SUBTEXT_SIZE + "px Arial"; + this.node_title_color = h.NODE_TITLE_COLOR; + this.default_link_color = h.LINK_COLOR; this.default_connection_color = {input_off:"#AAB", input_on:"#7F7", output_off:"#AAB", output_on:"#7F7"}; this.highquality_render = !0; this.use_gradients = !1; @@ -140,7 +140,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.render_only_selected = this.clear_background = this.render_shadows = !0; this.live_mode = !1; this.allow_searchbox = this.allow_interaction = this.allow_dragnodes = this.allow_dragcanvas = this.show_info = !0; - this.drag_mode = !1; + this.drag_mode = this.allow_reconnect_links = !1; this.filter = this.dragging_rectangle = null; this.always_render_background = !1; this.render_canvas_border = !0; @@ -153,23 +153,24 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.round_radius = 8; this.node_widget = this.current_node = null; this.last_mouse_position = [0, 0]; + this.visible_area = new Float32Array(4); b && b.attachCanvas(this); this.setCanvas(a); this.clear(); e.skip_render || this.startRendering(); this.autoresize = e.autoresize; } - function q(a, b) { + function r(a, b) { return Math.sqrt((b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1])); } - function t(a, b, e, c, g, l) { - return e < a && e + g > a && c < b && c + l > b ? !0 : !1; + function u(a, b, e, c, g, k) { + return e < a && e + g > a && c < b && c + k > b ? !0 : !1; } - function v(a, b) { + function w(a, b) { var e = a[0] + a[2], c = a[1] + a[3], g = b[1] + b[3]; return a[0] > b[0] + b[2] || a[1] > g || e < b[0] || c < b[1] ? !1 : !0; } - function w(a, b) { + function x(a, b) { function e(a) { var b = parseInt(g.style.top); g.style.top = (b + 0.1 * a.deltaY).toFixed() + "px"; @@ -208,17 +209,17 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { g.addEventListener("mousewheel", e, !0); this.root = g; if (b.title) { - var l = document.createElement("div"); - l.className = "litemenu-title"; - l.innerHTML = b.title; - g.appendChild(l); + var k = document.createElement("div"); + k.className = "litemenu-title"; + k.innerHTML = b.title; + g.appendChild(k); } - l = 0; + k = 0; for (var p in a) { - var k = a.constructor == Array ? a[p] : p; - null != k && k.constructor !== String && (k = void 0 === k.content ? String(k) : k.content); - this.addItem(k, a[p], b); - l++; + var h = a.constructor == Array ? a[p] : p; + null != h && h.constructor !== String && (h = void 0 === h.content ? String(h) : h.content); + this.addItem(h, a[p], b); + k++; } g.addEventListener("mouseleave", function(a) { c.lock || c.close(a); @@ -229,25 +230,25 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.body.appendChild(g); p = b.left || 0; a = b.top || 0; - b.event && (p = b.event.pageX - 10, a = b.event.pageY - 10, b.title && (a -= 20), b.parentMenu && (b = b.parentMenu.root.getBoundingClientRect(), p = b.left + b.width), b = document.body.getBoundingClientRect(), l = g.getBoundingClientRect(), p > b.width - l.width - 10 && (p = b.width - l.width - 10), a > b.height - l.height - 10 && (a = b.height - l.height - 10)); + b.event && (p = b.event.pageX - 10, a = b.event.pageY - 10, b.title && (a -= 20), b.parentMenu && (b = b.parentMenu.root.getBoundingClientRect(), p = b.left + b.width), b = document.body.getBoundingClientRect(), k = g.getBoundingClientRect(), p > b.width - k.width - 10 && (p = b.width - k.width - 10), a > b.height - k.height - 10 && (a = b.height - k.height - 10)); g.style.left = p + "px"; g.style.top = a + "px"; } - var k = u.LiteGraph = {CANVAS_GRID_SIZE:10, NODE_TITLE_HEIGHT:20, NODE_SLOT_HEIGHT:15, 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:"#444", NODE_DEFAULT_BOXCOLOR:"#666", NODE_DEFAULT_SHAPE:"box", DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0.5)", LINK_COLOR:"#AAD", EVENT_LINK_COLOR:"#F85", CONNECTING_LINK_COLOR:"#AFA", + var h = v.LiteGraph = {CANVAS_GRID_SIZE:10, NODE_TITLE_HEIGHT:20, NODE_SLOT_HEIGHT:15, 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:"#444", NODE_DEFAULT_BOXCOLOR:"#666", NODE_DEFAULT_SHAPE:"box", DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0.5)", LINK_COLOR:"#AAD", EVENT_LINK_COLOR:"#F85", CONNECTING_LINK_COLOR:"#AFA", MAX_NUMBER_OF_NODES:1000, 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, NORMAL_TITLE:0, NO_TITLE:1, TRANSPARENT_TITLE:2, AUTOHIDE_TITLE:3, proxy:null, node_images_path:"", debug:!1, throw_errors:!0, allow_scripts:!0, registered_node_types:{}, node_types_by_file_extension:{}, Nodes:{}, registerNodeType:function(a, b) { if (!b.prototype) { throw "Cannot register a simple object, it must be a class with a prototype"; } b.type = a; - k.debug && console.log("Node registered: " + a); + h.debug && console.log("Node registered: " + a); a.split("/"); var e = b.name, c = a.lastIndexOf("/"); b.category = a.substr(0, c); b.title || (b.title = e); if (b.prototype) { - for (var g in h.prototype) { - b.prototype[g] || (b.prototype[g] = h.prototype[g]); + for (var g in l.prototype) { + b.prototype[g] || (b.prototype[g] = l.prototype[g]); } } Object.defineProperty(b.prototype, "shape", {set:function(a) { @@ -256,16 +257,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { delete this._shape; break; case "box": - this._shape = k.BOX_SHAPE; + this._shape = h.BOX_SHAPE; break; case "round": - this._shape = k.ROUND_SHAPE; + this._shape = h.ROUND_SHAPE; break; case "circle": - this._shape = k.CIRCLE_SHAPE; + this._shape = h.CIRCLE_SHAPE; break; case "card": - this._shape = k.CARD_SHAPE; + this._shape = h.CARD_SHAPE; break; default: this._shape = a; @@ -282,10 +283,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }, wrapFunctionAsNode:function(a, b, e, c) { - for (var g = Array(b.length), l = "", z = k.getParameterNames(b), d = 0; d < z.length; ++d) { - l += "this.addInput('" + z[d] + "'," + (e && e[d] ? "'" + e[d] + "'" : "0") + ");\n"; + for (var g = Array(b.length), k = "", z = h.getParameterNames(b), d = 0; d < z.length; ++d) { + k += "this.addInput('" + z[d] + "'," + (e && e[d] ? "'" + e[d] + "'" : "0") + ");\n"; } - e = Function(l + ("this.addOutput('out'," + (c ? "'" + c + "'" : 0) + ");\n")); + e = Function(k + ("this.addOutput('out'," + (c ? "'" + c + "'" : 0) + ");\n")); e.title = a.split("/").pop(); e.desc = "Generated from " + b.name; e.prototype.onExecute = function() { @@ -297,7 +298,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; this.registerNodeType(a, e); }, addNodeMethod:function(a, b) { - h.prototype[a] = b; + l.prototype[a] = b; for (var e in this.registered_node_types) { var c = this.registered_node_types[e]; c.prototype[a] && (c.prototype["_" + a] = c.prototype[a]); @@ -306,7 +307,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }, createNode:function(a, b, e) { var c = this.registered_node_types[a]; if (!c) { - return k.debug && console.log('GraphNode type "' + a + '" not registered.'), null; + return h.debug && console.log('GraphNode type "' + a + '" not registered.'), null; } b = b || c.title || a; c = new c(b); @@ -316,8 +317,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.properties_info || (c.properties_info = []); c.flags || (c.flags = {}); c.size || (c.size = c.computeSize()); - c.pos || (c.pos = k.DEFAULT_POSITION.concat()); - c.mode || (c.mode = k.ALWAYS); + c.pos || (c.pos = h.DEFAULT_POSITION.concat()); + c.mode || (c.mode = h.ALWAYS); if (e) { for (var g in e) { c[g] = e[g]; @@ -354,21 +355,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var g = e[c].src; if (g && g.substr(0, a.length) == a) { try { - k.debug && console.log("Reloading: " + g); - var l = document.createElement("script"); - l.type = "text/javascript"; - l.src = g; - b.appendChild(l); + h.debug && console.log("Reloading: " + g); + var k = document.createElement("script"); + k.type = "text/javascript"; + k.src = g; + b.appendChild(k); b.removeChild(e[c]); } catch (p) { - if (k.throw_errors) { + if (h.throw_errors) { throw p; } - k.debug && console.log("Error while reloading " + g); + h.debug && console.log("Error while reloading " + g); } } } - k.debug && console.log("Nodes reloaded"); + h.debug && console.log("Nodes reloaded"); }, cloneObject:function(a, b) { if (null == a) { return null; @@ -382,7 +383,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return b; }, isValidConnection:function(a, b) { - if (!a || !b || a == b || a == k.EVENT && b == k.ACTION) { + if (!a || !b || a == b || a == h.EVENT && b == h.ACTION) { return !0; } a = String(a); @@ -403,13 +404,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return !1; }}; - k.getTime = "undefined" != typeof performance ? performance.now.bind(performance) : "undefined" != typeof Date && Date.now ? Date.now.bind(Date) : "undefined" != typeof process ? function() { + h.getTime = "undefined" != typeof performance ? performance.now.bind(performance) : "undefined" != typeof Date && Date.now ? Date.now.bind(Date) : "undefined" != typeof process ? function() { var a = process.hrtime(); return 0.001 * a[0] + 1e-6 * a[1]; } : function() { return (new Date).getTime(); }; - u.LGraph = k.LGraph = f; + v.LGraph = h.LGraph = f; f.supported_types = ["number", "string", "boolean"]; f.prototype.getSupportedTypes = function() { return this.supported_types || f.supported_types; @@ -460,11 +461,20 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.onPlayEvent(); } this.sendEventToAllNodes("onStart"); - this.last_update_time = this.starttime = k.getTime(); + this.last_update_time = this.starttime = h.getTime(); + a = a || 0; var b = this; - this.execution_timer_id = setInterval(function() { - b.runStep(1, !this.catch_errors); - }, a || 1); + if (0 == a && "undefined" != typeof window && window.requestAnimationFrame) { + var e = function() { + -1 == b.execution_timer_id && (window.requestAnimationFrame(e), b.runStep(1, !this.catch_errors)); + }; + this.execution_timer_id = -1; + e(); + } else { + this.execution_timer_id = setInterval(function() { + b.runStep(1, !this.catch_errors); + }, a); + } } }; f.prototype.stop = function() { @@ -473,22 +483,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (this.onStopEvent) { this.onStopEvent(); } - null != this.execution_timer_id && clearInterval(this.execution_timer_id); - this.execution_timer_id = null; + null != this.execution_timer_id && (-1 != this.execution_timer_id && clearInterval(this.execution_timer_id), this.execution_timer_id = null); this.sendEventToAllNodes("onStop"); } }; f.prototype.runStep = function(a, b) { a = a || 1; - var e = k.getTime(); + var e = h.getTime(); this.globaltime = 0.001 * (e - this.starttime); var c = this._nodes_executable ? this._nodes_executable : this._nodes; if (c) { if (b) { for (var g = 0; g < a; g++) { - for (var l = 0, p = c.length; l < p; ++l) { - var d = c[l]; - if (d.mode == k.ALWAYS && d.onExecute) { + for (var k = 0, p = c.length; k < p; ++k) { + var d = c[k]; + if (d.mode == h.ALWAYS && d.onExecute) { d.onExecute(); } } @@ -503,9 +512,9 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } else { try { for (g = 0; g < a; g++) { - l = 0; - for (p = c.length; l < p; ++l) { - if (d = c[l], d.mode == k.ALWAYS && d.onExecute) { + k = 0; + for (p = c.length; k < p; ++k) { + if (d = c[k], d.mode == h.ALWAYS && d.onExecute) { d.onExecute(); } } @@ -520,14 +529,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.errors_in_execution = !1; } catch (G) { this.errors_in_execution = !0; - if (k.throw_errors) { + if (h.throw_errors) { throw G; } - k.debug && console.log("Error during execution: " + G); + h.debug && console.log("Error during execution: " + G); this.stop(); } } - a = k.getTime(); + a = h.getTime(); e = a - e; 0 == e && (e = 1); this.execution_time = 0.001 * e; @@ -545,25 +554,25 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } }; f.prototype.computeExecutionOrder = function(a, b) { - for (var e = [], c = [], g = {}, l = {}, p = {}, d = 0, m = this._nodes.length; d < m; ++d) { + for (var e = [], c = [], g = {}, k = {}, p = {}, d = 0, n = this._nodes.length; d < n; ++d) { var f = this._nodes[d]; if (!a || f.onExecute) { g[f.id] = f; - var n = 0; + var m = 0; if (f.inputs) { - for (var h = 0, q = f.inputs.length; h < q; h++) { - f.inputs[h] && null != f.inputs[h].link && (n += 1); + for (var l = 0, r = f.inputs.length; l < r; l++) { + f.inputs[l] && null != f.inputs[l].link && (m += 1); } } - 0 == n ? (c.push(f), b && (f._level = 1)) : (b && (f._level = 0), p[f.id] = n); + 0 == m ? (c.push(f), b && (f._level = 1)) : (b && (f._level = 0), p[f.id] = m); } } for (; 0 != c.length;) { if (f = c.shift(), e.push(f), delete g[f.id], f.outputs) { for (d = 0; d < f.outputs.length; d++) { if (a = f.outputs[d], null != a && null != a.links && 0 != a.links.length) { - for (h = 0; h < a.links.length; h++) { - (m = this.links[a.links[h]]) && !l[m.id] && (n = this.getNodeById(m.target_id), null == n ? l[m.id] = !0 : (b && (!n._level || n._level <= f._level) && (n._level = f._level + 1), l[m.id] = !0, --p[n.id], 0 == p[n.id] && c.push(n))); + for (l = 0; l < a.links.length; l++) { + (n = this.links[a.links[l]]) && !k[n.id] && (m = this.getNodeById(n.target_id), null == m ? k[n.id] = !0 : (b && (!m._level || m._level <= f._level) && (m._level = f._level + 1), k[n.id] = !0, --p[m.id], 0 == p[m.id] && c.push(m))); } } } @@ -572,16 +581,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { for (d in g) { e.push(g[d]); } - e.length != this._nodes.length && k.debug && console.warn("something went wrong, nodes missing"); - m = e.length; - for (d = 0; d < m; ++d) { + e.length != this._nodes.length && h.debug && console.warn("something went wrong, nodes missing"); + n = e.length; + for (d = 0; d < n; ++d) { e[d].order = d; } e = e.sort(function(a, b) { var e = a.constructor.priority || a.priority || 0, c = b.constructor.priority || b.priority || 0; return e == c ? a.order - b.order : e - c; }); - for (d = 0; d < m; ++d) { + for (d = 0; d < n; ++d) { e[d].order = d; } return e; @@ -591,8 +600,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var g = e.shift(); if (g.inputs) { c[g.id] || g == a || (c[g.id] = !0, b.push(g)); - for (var l = 0; l < g.inputs.length; ++l) { - var p = g.getInputNode(l); + for (var k = 0; k < g.inputs.length; ++k) { + var p = g.getInputNode(k); p && -1 == b.indexOf(p) && e.push(p); } } @@ -605,15 +614,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.prototype.arrange = function(a) { a = a || 40; for (var b = this.computeExecutionOrder(!1, !0), e = [], c = 0; c < b.length; ++c) { - var g = b[c], l = g._level || 1; - e[l] || (e[l] = []); - e[l].push(g); + var g = b[c], k = g._level || 1; + e[k] || (e[k] = []); + e[k].push(g); } b = a; for (c = 0; c < e.length; ++c) { - if (l = e[c]) { - for (var p = 100, k = a, d = 0; d < l.length; ++d) { - g = l[d], g.pos[0] = b, g.pos[1] = k, g.size[0] > p && (p = g.size[0]), k += g.size[1] + a; + if (k = e[c]) { + for (var p = 100, h = a, d = 0; d < k.length; ++d) { + g = k[d], g.pos[0] = b, g.pos[1] = h, g.size[0] > p && (p = g.size[0]), h += g.size[1] + a; } b += p + a; } @@ -630,10 +639,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return this.elapsed_time; }; f.prototype.sendEventToAllNodes = function(a, b, e) { - e = e || k.ALWAYS; + e = e || h.ALWAYS; var c = this._nodes_in_order ? this._nodes_in_order : this._nodes; if (c) { - for (var g = 0, l = c.length; g < l; ++g) { + for (var g = 0, k = c.length; g < k; ++g) { var p = c[g]; if (p[a] && p.mode == e) { if (void 0 === b) { @@ -659,11 +668,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; f.prototype.add = function(a, b) { if (a) { - if (a.constructor === n) { + if (a.constructor === m) { this._groups.push(a), this.setDirtyCanvas(!0), this.change(), a.graph = this, this._version++; } else { -1 != a.id && null != this._nodes_by_id[a.id] && (console.warn("LiteGraph: there is already a node with this ID, changing it"), a.id = ++this.last_node_id); - if (this._nodes.length >= k.MAX_NUMBER_OF_NODES) { + if (this._nodes.length >= 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); @@ -686,7 +695,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } }; f.prototype.remove = function(a) { - if (a.constructor === k.LGraphGroup) { + if (a.constructor === h.LGraphGroup) { var b = this._groups.indexOf(a); -1 != b && this._groups.splice(b, 1); a.graph = null; @@ -750,12 +759,12 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return b; }; - f.prototype.getNodeOnPos = function(a, b, e) { + f.prototype.getNodeOnPos = function(a, b, e, c) { e = e || this._nodes; - for (var c = e.length - 1; 0 <= c; c--) { - var g = e[c]; - if (g.isPointInside(a, b, 2)) { - return g; + for (var g = e.length - 1; 0 <= g; g--) { + var k = e[g]; + if (k.isPointInside(a, b, c)) { + return k; } } return null; @@ -763,7 +772,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.prototype.getGroupOnPos = function(a, b) { for (var e = this._groups.length - 1; 0 <= e; e--) { var c = this._groups[e]; - if (c.isPointInside(a, b, 2)) { + if (c.isPointInside(a, b, 2, !0)) { return c; } } @@ -923,7 +932,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return !1; }; f.prototype.change = function() { - k.debug && console.log("Graph changed"); + h.debug && console.log("Graph changed"); this.sendActionToCanvas("setDirty", [!0, !0]); if (this.on_change) { this.on_change(this); @@ -966,18 +975,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (b) { c = 0; for (g = b.length; c < g; ++c) { - var l = b[c], p = k.createNode(l.type, l.title); - p ? (p.id = l.id, this.add(p, !0)) : (k.debug && console.log("Node not found: " + l.type), e = !0); + var k = b[c], p = h.createNode(k.type, k.title); + p ? (p.id = k.id, this.add(p, !0)) : (h.debug && console.log("Node not found: " + k.type), e = !0); } c = 0; for (g = b.length; c < g; ++c) { - l = b[c], (p = this.getNodeById(l.id)) && p.configure(l); + k = b[c], (p = this.getNodeById(k.id)) && p.configure(k); } } this._groups.length = 0; if (a.groups) { for (c = 0; c < a.groups.length; ++c) { - b = new k.LGraphGroup, b.configure(a.groups[c]), this.add(b); + b = new h.LGraphGroup, b.configure(a.groups[c]), this.add(b); } } this.updateExecutionOrder(); @@ -999,10 +1008,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; f.prototype.onNodeTrace = function(a, b, e) { }; - u.LGraphNode = k.LGraphNode = h; - h.prototype._ctor = function(a) { + v.LGraphNode = h.LGraphNode = l; + l.prototype._ctor = function(a) { this.title = a || "Unnamed"; - this.size = [k.NODE_WIDTH, 60]; + this.size = [h.NODE_WIDTH, 60]; this.graph = null; this._pos = new Float32Array(10, 10); Object.defineProperty(this, "pos", {set:function(a) { @@ -1020,7 +1029,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.data = null; this.flags = {}; }; - h.prototype.configure = function(a) { + l.prototype.configure = function(a) { this.graph && this.graph._version++; for (var b in a) { if ("console" != b) { @@ -1031,7 +1040,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } } else { - null != a[b] && ("object" == typeof a[b] ? this[b] && this[b].configure ? this[b].configure(a[b]) : this[b] = k.cloneObject(a[b], this[b]) : this[b] = a[b]); + 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]); } } } @@ -1041,14 +1050,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { for (var c = 0; c < this.inputs.length; ++c) { e = this.inputs[c]; var g = this.graph ? this.graph.links[e.link] : null; - this.onConnectionsChange(k.INPUT, c, !0, g, e); + this.onConnectionsChange(h.INPUT, c, !0, g, e); } } if (this.outputs) { for (c = 0; c < this.outputs.length; ++c) { if (e = this.outputs[c], e.links) { for (b = 0; b < e.links.length; ++b) { - g = this.graph ? this.graph.links[e.links[b]] : null, this.onConnectionsChange(k.OUTPUT, c, !0, g, e); + g = this.graph ? this.graph.links[e.links[b]] : null, this.onConnectionsChange(h.OUTPUT, c, !0, g, e); } } } @@ -1068,8 +1077,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.onConfigure(a); } }; - h.prototype.serialize = function() { - var a = {id:this.id, type:this.type, pos:this.pos, size:this.size, data:this.data, flags:k.cloneObject(this.flags), mode:this.mode}; + l.prototype.serialize = function() { + var a = {id:this.id, type:this.type, pos:this.pos, size:this.size, data:this.data, flags:h.cloneObject(this.flags), mode:this.mode}; this.inputs && (a.inputs = this.inputs); if (this.outputs) { for (var b = 0; b < this.outputs.length; b++) { @@ -1078,19 +1087,17 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.outputs = this.outputs; } this.title && this.title != this.constructor.title && (a.title = this.title); - this.properties && (a.properties = k.cloneObject(this.properties)); + this.properties && (a.properties = h.cloneObject(this.properties)); a.type || (a.type = this.constructor.type); this.color && (a.color = this.color); this.bgcolor && (a.bgcolor = this.bgcolor); this.boxcolor && (a.boxcolor = this.boxcolor); this.shape && (a.shape = this.shape); - if (this.onSerialize) { - this.onSerialize(a); - } + this.onSerialize && this.onSerialize(a) && console.warn("node onSerialize shouldnt return anything, data should be stored in the object pass in the first parameter"); return a; }; - h.prototype.clone = function() { - var a = k.createNode(this.type), b = k.cloneObject(this.serialize()); + l.prototype.clone = function() { + var a = h.createNode(this.type), b = h.cloneObject(this.serialize()); if (b.inputs) { for (var e = 0; e < b.inputs.length; ++e) { b.inputs[e].link = null; @@ -1105,13 +1112,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.configure(b); return a; }; - h.prototype.toString = function() { + l.prototype.toString = function() { return JSON.stringify(this.serialize()); }; - h.prototype.getTitle = function() { + l.prototype.getTitle = function() { return this.title || this.constructor.title; }; - h.prototype.setOutputData = function(a, b) { + l.prototype.setOutputData = function(a, b) { if (this.outputs && !(-1 == a || a >= this.outputs.length)) { var e = this.outputs[a]; if (e && (e._data = b, this.outputs[a].links)) { @@ -1121,7 +1128,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - h.prototype.getInputData = function(a, b) { + l.prototype.getInputData = function(a, b) { if (this.inputs && !(a >= this.inputs.length || null == this.inputs[a].link)) { a = this.graph.links[this.inputs[a].link]; if (!a) { @@ -1144,24 +1151,24 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return a.data; } }; - h.prototype.getInputDataByName = function(a, b) { + l.prototype.getInputDataByName = function(a, b) { a = this.findInputSlot(a); return -1 == a ? null : this.getInputData(a, b); }; - h.prototype.isInputConnected = function(a) { + l.prototype.isInputConnected = function(a) { return this.inputs ? a < this.inputs.length && null != this.inputs[a].link : !1; }; - h.prototype.getInputInfo = function(a) { + l.prototype.getInputInfo = function(a) { return this.inputs ? a < this.inputs.length ? this.inputs[a] : null : null; }; - h.prototype.getInputNode = function(a) { + l.prototype.getInputNode = function(a) { if (!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; }; - h.prototype.getInputOrProperty = function(a) { + l.prototype.getInputOrProperty = function(a) { if (!this.inputs || !this.inputs.length) { return this.properties ? this.properties[a] : null; } @@ -1172,16 +1179,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return this.properties[a]; }; - h.prototype.getOutputData = function(a) { + l.prototype.getOutputData = function(a) { return !this.outputs || a >= this.outputs.length ? null : this.outputs[a]._data; }; - h.prototype.getOutputInfo = function(a) { + l.prototype.getOutputInfo = function(a) { return this.outputs ? a < this.outputs.length ? this.outputs[a] : null : null; }; - h.prototype.isOutputConnected = function(a) { + l.prototype.isOutputConnected = function(a) { return this.outputs ? a < this.outputs.length && this.outputs[a].links && this.outputs[a].links.length : !1; }; - h.prototype.isAnyOutputConnected = function() { + l.prototype.isAnyOutputConnected = function() { if (!this.outputs) { return !1; } @@ -1192,7 +1199,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return !1; }; - h.prototype.getOutputNodes = function(a) { + l.prototype.getOutputNodes = function(a) { if (!this.outputs || 0 == this.outputs.length || a >= this.outputs.length) { return null; } @@ -1206,27 +1213,27 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return b; }; - h.prototype.trigger = function(a, b) { + l.prototype.trigger = function(a, b) { if (this.outputs && this.outputs.length) { - this.graph && (this.graph._last_trigger_time = k.getTime()); + this.graph && (this.graph._last_trigger_time = h.getTime()); for (var e = 0; e < this.outputs.length; ++e) { var c = this.outputs[e]; - !c || c.type !== k.EVENT || a && c.name != a || this.triggerSlot(e, b); + !c || c.type !== h.EVENT || a && c.name != a || this.triggerSlot(e, b); } } }; - h.prototype.triggerSlot = function(a, b) { + l.prototype.triggerSlot = function(a, b) { if (this.outputs && (a = this.outputs[a]) && (a = a.links) && a.length) { - this.graph && (this.graph._last_trigger_time = k.getTime()); + this.graph && (this.graph._last_trigger_time = h.getTime()); for (var e = 0; e < a.length; ++e) { var c = this.graph.links[a[e]]; if (c) { var g = this.graph.getNodeById(c.target_id); if (g) { - if (c._last_time = k.getTime(), c = g.inputs[c.target_slot], g.onAction) { + if (c._last_time = h.getTime(), c = g.inputs[c.target_slot], g.onAction) { g.onAction(c.name, b); } else { - if (g.mode === k.ON_TRIGGER && g.onExecute) { + if (g.mode === h.ON_TRIGGER && g.onExecute) { g.onExecute(b); } } @@ -1235,7 +1242,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - h.prototype.addProperty = function(a, b, e, c) { + l.prototype.addProperty = function(a, b, e, c) { e = {name:a, type:e, default_value:b}; if (c) { for (var g in c) { @@ -1248,7 +1255,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.properties[a] = b; return e; }; - h.prototype.addOutput = function(a, b, e) { + l.prototype.addOutput = function(a, b, e) { a = {name:a, type:b, links:null}; if (e) { for (var c in e) { @@ -1263,7 +1270,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.size = this.computeSize(); return a; }; - h.prototype.addOutputs = function(a) { + l.prototype.addOutputs = function(a) { for (var b = 0; b < a.length; ++b) { var e = a[b], c = {name:e[0], type:e[1], link:null}; if (a[2]) { @@ -1279,7 +1286,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } this.size = this.computeSize(); }; - h.prototype.removeOutput = function(a) { + l.prototype.removeOutput = function(a) { this.disconnectOutput(a); this.outputs.splice(a, 1); this.size = this.computeSize(); @@ -1287,7 +1294,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.onOutputRemoved(a); } }; - h.prototype.addInput = function(a, b, e) { + l.prototype.addInput = function(a, b, e) { a = {name:a, type:b || 0, link:null}; if (e) { for (var c in e) { @@ -1302,7 +1309,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return a; }; - h.prototype.addInputs = function(a) { + l.prototype.addInputs = function(a) { for (var b = 0; b < a.length; ++b) { var e = a[b], c = {name:e[0], type:e[1], link:null}; if (a[2]) { @@ -1318,7 +1325,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } this.size = this.computeSize(); }; - h.prototype.removeInput = function(a) { + l.prototype.removeInput = function(a) { this.disconnectInput(a); this.inputs.splice(a, 1); this.size = this.computeSize(); @@ -1326,93 +1333,97 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.onInputRemoved(a); } }; - h.prototype.addConnection = function(a, b, e, c) { + l.prototype.addConnection = function(a, b, e, c) { a = {name:a, type:b, pos:e, direction:c, links:null}; this.connections.push(a); return a; }; - h.prototype.computeSize = function(a, b) { + l.prototype.computeSize = function(a, b) { function e(a) { return a ? c * a.length * 0.6 : 0; } a = Math.max(this.inputs ? this.inputs.length : 1, this.outputs ? this.outputs.length : 1); b = b || new Float32Array([0, 0]); a = Math.max(a, 1); - var c = k.NODE_TEXT_SIZE; - b[1] = (this.constructor.slot_start_y || 0) + a * (c + 1) + (this.widgets ? this.widgets.length : 0) * (k.NODE_WIDGET_HEIGHT + 4) + 4; + var c = h.NODE_TEXT_SIZE; + b[1] = (this.constructor.slot_start_y || 0) + a * (c + 1) + 4; + this.widgets && this.widgets.length && (b[1] += this.widgets.length * (h.NODE_WIDGET_HEIGHT + 4) + 8); a = e(this.title); - var g = 0, l = 0; + var g = 0, k = 0; if (this.inputs) { for (var p = 0, d = this.inputs.length; p < d; ++p) { - var m = this.inputs[p]; - m = m.label || m.name || ""; - m = e(m); - g < m && (g = m); + var n = this.inputs[p]; + n = n.label || n.name || ""; + n = e(n); + g < n && (g = n); } } if (this.outputs) { for (p = 0, d = this.outputs.length; p < d; ++p) { - m = this.outputs[p], m = m.label || m.name || "", m = e(m), l < m && (l = m); + n = this.outputs[p], n = n.label || n.name || "", n = e(n), k < n && (k = n); } } - b[0] = Math.max(g + l + 10, a); - b[0] = Math.max(b[0], k.NODE_WIDTH); + b[0] = Math.max(g + k + 10, a); + b[0] = Math.max(b[0], h.NODE_WIDTH); + this.widgets && this.widgets.length && (b[0] = Math.max(b[0], 1.5 * h.NODE_WIDTH)); if (this.onResize) { this.onResize(b); } return b; }; - h.prototype.addWidget = function(a, b, e, c, g) { + l.prototype.addWidget = function(a, b, e, c, g) { this.widgets || (this.widgets = []); b = {type:a.toLowerCase(), name:b, value:e, callback:c, options:g || {}}; void 0 !== b.options.y && (b.y = b.options.y); + c || console.warn("LiteGraph addWidget('button',...) without a callback"); if ("combo" == a && !b.options.values) { throw "LiteGraph addWidget('combo',...) requires to pass values in options: { values:['red','blue'] }"; } this.widgets.push(b); return b; }; - h.prototype.getBounding = function(a) { + l.prototype.getBounding = function(a) { a = a || new Float32Array(4); a[0] = this.pos[0] - 4; - a[1] = this.pos[1] - k.NODE_TITLE_HEIGHT; + a[1] = this.pos[1] - h.NODE_TITLE_HEIGHT; a[2] = this.size[0] + 4; - a[3] = this.size[1] + k.NODE_TITLE_HEIGHT; + a[3] = this.size[1] + h.NODE_TITLE_HEIGHT; return a; }; - h.prototype.isPointInside = function(a, b, e) { + l.prototype.isPointInside = function(a, b, e, c) { e = e || 0; - var c = this.graph && this.graph.isLive() ? 0 : 20; + var g = this.graph && this.graph.isLive() ? 0 : 20; + c && (g = 0); if (this.flags && this.flags.collapsed) { - if (t(a, b, this.pos[0] - e, this.pos[1] - k.NODE_TITLE_HEIGHT - e, (this._collapsed_width || k.NODE_COLLAPSED_WIDTH) + 2 * e, k.NODE_TITLE_HEIGHT + 2 * e)) { + if (u(a, b, this.pos[0] - e, this.pos[1] - h.NODE_TITLE_HEIGHT - e, (this._collapsed_width || h.NODE_COLLAPSED_WIDTH) + 2 * e, h.NODE_TITLE_HEIGHT + 2 * e)) { return !0; } } else { - if (this.pos[0] - 4 - e < a && this.pos[0] + this.size[0] + 4 + e > a && this.pos[1] - c - e < b && this.pos[1] + this.size[1] + e > b) { + if (this.pos[0] - 4 - e < a && this.pos[0] + this.size[0] + 4 + e > a && this.pos[1] - g - e < b && this.pos[1] + this.size[1] + e > b) { return !0; } } return !1; }; - h.prototype.getSlotInPosition = function(a, b) { + l.prototype.getSlotInPosition = function(a, b) { if (this.inputs) { for (var e = 0, c = this.inputs.length; e < c; ++e) { - var g = this.inputs[e], l = this.getConnectionPos(!0, e); - if (t(a, b, l[0] - 10, l[1] - 5, 20, 10)) { - return {input:g, slot:e, link_pos:l, locked:g.locked}; + var g = this.inputs[e], k = this.getConnectionPos(!0, e); + if (u(a, b, k[0] - 10, k[1] - 5, 20, 10)) { + return {input:g, slot:e, link_pos:k, locked:g.locked}; } } } if (this.outputs) { for (e = 0, c = this.outputs.length; e < c; ++e) { - if (g = this.outputs[e], l = this.getConnectionPos(!1, e), t(a, b, l[0] - 10, l[1] - 5, 20, 10)) { - return {output:g, slot:e, link_pos:l, locked:g.locked}; + if (g = this.outputs[e], k = this.getConnectionPos(!1, e), u(a, b, k[0] - 10, k[1] - 5, 20, 10)) { + return {output:g, slot:e, link_pos:k, locked:g.locked}; } } } return null; }; - h.prototype.findInputSlot = function(a) { + l.prototype.findInputSlot = function(a) { if (!this.inputs) { return -1; } @@ -1423,7 +1434,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return -1; }; - h.prototype.findOutputSlot = function(a) { + l.prototype.findOutputSlot = function(a) { if (!this.outputs) { return -1; } @@ -1434,18 +1445,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return -1; }; - h.prototype.connect = function(a, b, e) { + l.prototype.connect = function(a, b, e) { e = e || 0; if (!this.graph) { return console.log("Connect: Error, node doesnt belong to any graph. Nodes must be added first to a graph before connecting them."), !1; } if (a.constructor === String) { if (a = this.findOutputSlot(a), -1 == a) { - return k.debug && console.log("Connect: Error, no slot of name " + a), !1; + return h.debug && console.log("Connect: Error, no slot of name " + a), !1; } } else { if (!this.outputs || a >= this.outputs.length) { - return k.debug && console.log("Connect: Error, slot number not found"), !1; + return h.debug && console.log("Connect: Error, slot number not found"), !1; } } b && b.constructor === Number && (b = this.graph.getNodeById(b)); @@ -1457,14 +1468,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } if (e.constructor === String) { if (e = b.findInputSlot(e), -1 == e) { - return k.debug && console.log("Connect: Error, no slot of name " + e), !1; + return h.debug && console.log("Connect: Error, no slot of name " + e), !1; } } else { - if (e === k.EVENT) { + if (e === h.EVENT) { return !1; } if (!b.inputs || e >= b.inputs.length) { - return k.debug && console.log("Connect: Error, slot number not found"), !1; + return h.debug && console.log("Connect: Error, slot number not found"), !1; } } null != b.inputs[e].link && b.disconnectInput(e); @@ -1473,39 +1484,37 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return !1; } var g = b.inputs[e]; - if (k.isValidConnection(c.type, g.type)) { - var l = {id:this.graph.last_link_id++, type:g.type, origin_id:this.id, origin_slot:a, target_id:b.id, target_slot:e}; - this.graph.links[l.id] = l; + if (h.isValidConnection(c.type, g.type)) { + var k = {id:this.graph.last_link_id++, type:g.type, origin_id:this.id, origin_slot:a, target_id:b.id, target_slot:e}; + this.graph.links[k.id] = k; null == c.links && (c.links = []); - c.links.push(l.id); - b.inputs[e].link = l.id; + c.links.push(k.id); + b.inputs[e].link = k.id; this.graph && this.graph._version++; if (this.onConnectionsChange) { - this.onConnectionsChange(k.OUTPUT, a, !0, l, c); + this.onConnectionsChange(h.OUTPUT, a, !0, k, c); } if (b.onConnectionsChange) { - b.onConnectionsChange(k.INPUT, e, !0, l, g); - } - if (this.graph && this.graph.onNodeConnectionChange) { - this.graph.onNodeConnectionChange(k.OUTPUT, this, a, b, e); + b.onConnectionsChange(h.INPUT, e, !0, k, g); } + this.graph && this.graph.onNodeConnectionChange && (this.graph.onNodeConnectionChange(h.INPUT, b, e, this, a), this.graph.onNodeConnectionChange(h.OUTPUT, this, a, b, e)); } this.setDirtyCanvas(!1, !0); this.graph.connectionChange(this); return !0; }; - h.prototype.disconnectOutput = function(a, b) { + l.prototype.disconnectOutput = function(a, b) { if (a.constructor === String) { if (a = this.findOutputSlot(a), -1 == a) { - return k.debug && console.log("Connect: Error, no slot of name " + a), !1; + return h.debug && console.log("Connect: Error, no slot of name " + a), !1; } } else { if (!this.outputs || a >= this.outputs.length) { - return k.debug && console.log("Connect: Error, slot number not found"), !1; + return h.debug && console.log("Connect: Error, slot number not found"), !1; } } var e = this.outputs[a]; - if (!e.links || 0 == e.links.length) { + if (!e || !e.links || 0 == e.links.length) { return !1; } if (b) { @@ -1514,51 +1523,47 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { throw "Target Node not found"; } for (var c = 0, g = e.links.length; c < g; c++) { - var l = e.links[c], p = this.graph.links[l]; + var k = e.links[c], p = this.graph.links[k]; if (p.target_id == b.id) { e.links.splice(c, 1); var d = b.inputs[p.target_slot]; d.link = null; - delete this.graph.links[l]; + delete this.graph.links[k]; this.graph && this.graph._version++; if (b.onConnectionsChange) { - b.onConnectionsChange(k.INPUT, p.target_slot, !1, p, d); + b.onConnectionsChange(h.INPUT, p.target_slot, !1, p, d); } if (this.onConnectionsChange) { - this.onConnectionsChange(k.OUTPUT, a, !1, p, e); + this.onConnectionsChange(h.OUTPUT, a, !1, p, e); } if (this.graph && this.graph.onNodeConnectionChange) { - this.graph.onNodeConnectionChange(k.OUTPUT, this, a); - } - if (this.graph && this.graph.onNodeConnectionChange) { - this.graph.onNodeConnectionChange(k.INPUT, b, p.target_slot); + this.graph.onNodeConnectionChange(h.OUTPUT, this, a); } + this.graph && this.graph.onNodeConnectionChange && (this.graph.onNodeConnectionChange(h.OUTPUT, this, a), this.graph.onNodeConnectionChange(h.INPUT, b, p.target_slot)); break; } } } else { c = 0; for (g = e.links.length; c < g; c++) { - if (l = e.links[c], p = this.graph.links[l]) { + if (k = e.links[c], p = this.graph.links[k]) { b = this.graph.getNodeById(p.target_id); this.graph && this.graph._version++; if (b) { d = b.inputs[p.target_slot]; d.link = null; if (b.onConnectionsChange) { - b.onConnectionsChange(k.INPUT, p.target_slot, !1, p, d); + b.onConnectionsChange(h.INPUT, p.target_slot, !1, p, d); } if (this.graph && this.graph.onNodeConnectionChange) { - this.graph.onNodeConnectionChange(k.INPUT, b, p.target_slot); + this.graph.onNodeConnectionChange(h.INPUT, b, p.target_slot); } } - delete this.graph.links[l]; + delete this.graph.links[k]; if (this.onConnectionsChange) { - this.onConnectionsChange(k.OUTPUT, a, !1, p, e); - } - if (this.graph && this.graph.onNodeConnectionChange) { - this.graph.onNodeConnectionChange(k.OUTPUT, this, a); + this.onConnectionsChange(h.OUTPUT, a, !1, p, e); } + this.graph && this.graph.onNodeConnectionChange && (this.graph.onNodeConnectionChange(h.OUTPUT, this, a), this.graph.onNodeConnectionChange(h.INPUT, b, p.target_slot)); } } e.links = null; @@ -1567,14 +1572,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.graph.connectionChange(this); return !0; }; - h.prototype.disconnectInput = function(a) { + l.prototype.disconnectInput = function(a) { if (a.constructor === String) { if (a = this.findInputSlot(a), -1 == a) { - return k.debug && console.log("Connect: Error, no slot of name " + a), !1; + return h.debug && console.log("Connect: Error, no slot of name " + a), !1; } } else { if (!this.inputs || a >= this.inputs.length) { - return k.debug && console.log("Connect: Error, slot number not found"), !1; + return h.debug && console.log("Connect: Error, slot number not found"), !1; } } var b = this.inputs[a]; @@ -1589,49 +1594,50 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (!g) { return !1; } - var l = g.outputs[c.origin_slot]; - if (!l || !l.links || 0 == l.links.length) { + var k = g.outputs[c.origin_slot]; + if (!k || !k.links || 0 == k.links.length) { return !1; } - for (var p = 0, d = l.links.length; p < d; p++) { - if (l.links[p] == e) { - l.links.splice(p, 1); + for (var p = 0, d = k.links.length; p < d; p++) { + if (k.links[p] == e) { + k.links.splice(p, 1); break; } } delete this.graph.links[e]; this.graph && this.graph._version++; if (this.onConnectionsChange) { - this.onConnectionsChange(k.INPUT, a, !1, c, b); + this.onConnectionsChange(h.INPUT, a, !1, c, b); } if (g.onConnectionsChange) { - g.onConnectionsChange(k.OUTPUT, p, !1, c, l); + g.onConnectionsChange(h.OUTPUT, p, !1, c, k); } + this.graph && this.graph.onNodeConnectionChange && (this.graph.onNodeConnectionChange(h.OUTPUT, g, p), this.graph.onNodeConnectionChange(h.INPUT, this, a)); } this.setDirtyCanvas(!1, !0); this.graph.connectionChange(this); return !0; }; - h.prototype.getConnectionPos = function(a, b) { - return this.flags.collapsed ? a ? [this.pos[0], this.pos[1] - 0.5 * k.NODE_TITLE_HEIGHT] : [this.pos[0] + (this._collapsed_width || k.NODE_COLLAPSED_WIDTH), this.pos[1] - 0.5 * k.NODE_TITLE_HEIGHT] : a && -1 == b ? [this.pos[0] + 10, this.pos[1] + 10] : a && this.inputs.length > b && this.inputs[b].pos ? [this.pos[0] + this.inputs[b].pos[0], this.pos[1] + this.inputs[b].pos[1]] : !a && this.outputs.length > b && this.outputs[b].pos ? [this.pos[0] + this.outputs[b].pos[0], this.pos[1] + this.outputs[b].pos[1]] : - this.flags.horizontal ? a ? [this.pos[0] + this.size[0] / this.inputs.length * (b + 0.5), this.pos[1] - k.NODE_TITLE_HEIGHT] : [this.pos[0] + this.size[0] / this.outputs.length * (b + 0.5), this.pos[1] + this.size[1]] : a ? [this.pos[0], this.pos[1] + 10 + b * k.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0)] : [this.pos[0] + this.size[0] + 1, this.pos[1] + 10 + b * k.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0)]; + l.prototype.getConnectionPos = function(a, b) { + return this.flags.collapsed ? a ? [this.pos[0], this.pos[1] - 0.5 * h.NODE_TITLE_HEIGHT] : [this.pos[0] + (this._collapsed_width || h.NODE_COLLAPSED_WIDTH), this.pos[1] - 0.5 * h.NODE_TITLE_HEIGHT] : a && -1 == b ? [this.pos[0] + 10, this.pos[1] + 10] : a && this.inputs && this.inputs.length > b && this.inputs[b].pos ? [this.pos[0] + this.inputs[b].pos[0], this.pos[1] + this.inputs[b].pos[1]] : !a && this.outputs && this.outputs.length > b && this.outputs[b].pos ? [this.pos[0] + this.outputs[b].pos[0], + this.pos[1] + this.outputs[b].pos[1]] : this.flags.horizontal ? a ? [this.pos[0] + this.size[0] / this.inputs.length * (b + 0.5), this.pos[1] - h.NODE_TITLE_HEIGHT] : [this.pos[0] + this.size[0] / this.outputs.length * (b + 0.5), this.pos[1] + this.size[1]] : a ? [this.pos[0], this.pos[1] + 10 + b * h.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0)] : [this.pos[0] + this.size[0] + 1, this.pos[1] + 10 + b * h.NODE_SLOT_HEIGHT + (this.constructor.slot_start_y || 0)]; }; - h.prototype.alignToGrid = function() { - this.pos[0] = k.CANVAS_GRID_SIZE * Math.round(this.pos[0] / k.CANVAS_GRID_SIZE); - this.pos[1] = k.CANVAS_GRID_SIZE * Math.round(this.pos[1] / k.CANVAS_GRID_SIZE); + l.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); }; - h.prototype.trace = function(a) { + l.prototype.trace = function(a) { this.console || (this.console = []); this.console.push(a); - this.console.length > h.MAX_CONSOLE && this.console.shift(); + this.console.length > l.MAX_CONSOLE && this.console.shift(); this.graph.onNodeTrace(this, a); }; - h.prototype.setDirtyCanvas = function(a, b) { + l.prototype.setDirtyCanvas = function(a, b) { this.graph && this.graph.sendActionToCanvas("setDirty", [a, b]); }; - h.prototype.loadImage = function(a) { + l.prototype.loadImage = function(a) { var b = new Image; - b.src = k.node_images_path + a; + b.src = h.node_images_path + a; b.ready = !1; var e = this; b.onload = function() { @@ -1640,7 +1646,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; return b; }; - h.prototype.captureInput = function(a) { + l.prototype.captureInput = function(a) { if (this.graph && this.graph.list_of_graphcanvas) { for (var b = this.graph.list_of_graphcanvas, e = 0; e < b.length; ++e) { var c = b[e]; @@ -1650,21 +1656,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - h.prototype.collapse = function(a) { + l.prototype.collapse = function(a) { this.graph._version++; if (!1 !== this.constructor.collapsable || a) { this.flags.collapsed = this.flags.collapsed ? !1 : !0, this.setDirtyCanvas(!0, !0); } }; - h.prototype.pin = function(a) { + l.prototype.pin = function(a) { this.graph._version++; this.flags.pinned = void 0 === a ? !this.flags.pinned : a; }; - h.prototype.localToScreen = function(a, b, e) { + l.prototype.localToScreen = function(a, b, e) { return [(a + this.pos[0]) * e.scale + e.offset[0], (b + this.pos[1]) * e.scale + e.offset[1]]; }; - u.LGraphGroup = k.LGraphGroup = n; - n.prototype._ctor = function(a) { + v.LGraphGroup = h.LGraphGroup = m; + m.prototype._ctor = function(a) { this.title = a || "Group"; this._bounding = new Float32Array([10, 10, 140, 80]); this._pos = this._bounding.subarray(0, 2); @@ -1683,16 +1689,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return this._size; }, enumerable:!0}); }; - n.prototype.configure = function(a) { + m.prototype.configure = function(a) { this.title = a.title; this._bounding.set(a.bounding); this.color = a.color; }; - n.prototype.serialize = function() { + m.prototype.serialize = function() { var a = this._bounding; - return {title:this.title, bounding:[a[0], a[1], a[2], a[3]], color:this.color}; + return {title:this.title, bounding:[Math.round(a[0]), Math.round(a[1]), Math.round(a[2]), Math.round(a[3])], color:this.color}; }; - n.prototype.move = function(a, b, e) { + m.prototype.move = function(a, b, e) { this._pos[0] += a; this._pos[1] += b; if (!e) { @@ -1703,17 +1709,17 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - n.prototype.recomputeInsideNodes = function() { + m.prototype.recomputeInsideNodes = function() { this._nodes.length = 0; for (var a = this.graph._nodes, b = new Float32Array(4), e = 0; e < a.length; ++e) { var c = a[e]; c.getBounding(b); - v(this._bounding, b) && this._nodes.push(c); + w(this._bounding, b) && this._nodes.push(c); } }; - n.prototype.isPointInside = h.prototype.isPointInside; - n.prototype.setDirtyCanvas = h.prototype.setDirtyCanvas; - u.LGraphCanvas = k.LGraphCanvas = d; + m.prototype.isPointInside = l.prototype.isPointInside; + m.prototype.setDirtyCanvas = l.prototype.setDirtyCanvas; + v.LGraphCanvas = h.LGraphCanvas = d; d.link_type_colors = {"-1":"#F85", number:"#AAC", node:"#DCA"}; d.gradients = {}; d.prototype.clear = function() { @@ -1730,6 +1736,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { 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(); } @@ -1878,61 +1885,72 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.canvas.removeEventListener("mousemove", this._mousemove_callback); b.document.addEventListener("mousemove", this._mousemove_callback, !0); b.document.addEventListener("mouseup", this._mouseup_callback, !0); - var e = this.graph.getNodeOnPos(a.canvasX, a.canvasY, this.visible_nodes), c = !1, g = 300 > k.getTime() - this.last_mouseclick; + var e = this.graph.getNodeOnPos(a.canvasX, a.canvasY, this.visible_nodes, 5), c = !1, g = 300 > h.getTime() - this.last_mouseclick; this.canvas_mouse[0] = a.canvasX; this.canvas_mouse[1] = a.canvasY; - k.closeAllContextMenus(b); + h.closeAllContextMenus(b); 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, c = !0); - var l = !1; + var k = !1; if (e && this.allow_interaction && !c) { this.live_mode || e.flags.pinned || this.bringToFront(e); if (!this.connecting_node && !e.flags.collapsed && !this.live_mode) { - if (e.outputs) { - for (var p = 0, m = e.outputs.length; p < m; ++p) { - var f = e.outputs[p], x = e.getConnectionPos(!1, p); - if (t(a.canvasX, a.canvasY, x[0] - 10, x[1] - 5, 20, 10)) { - this.connecting_node = e; - this.connecting_output = f; - this.connecting_pos = e.getConnectionPos(!1, p); - this.connecting_slot = p; - if (g) { - if (e.onOutputDblClick) { - e.onOutputDblClick(p, a); + if (!c && !1 !== e.flags.resizable && u(a.canvasX, a.canvasY, e.pos[0] + e.size[0] - 5, e.pos[1] + e.size[1] - 5, 10, 10)) { + this.resizing_node = e, this.canvas.style.cursor = "se-resize", c = !0; + } else { + if (e.outputs) { + for (var p = 0, n = e.outputs.length; p < n; ++p) { + var f = e.outputs[p], q = e.getConnectionPos(!1, p); + if (u(a.canvasX, a.canvasY, q[0] - 15, q[1] - 10, 30, 20)) { + this.connecting_node = e; + this.connecting_output = f; + this.connecting_pos = e.getConnectionPos(!1, p); + this.connecting_slot = p; + a.shiftKey && e.disconnectOutput(p); + if (g) { + if (e.onOutputDblClick) { + e.onOutputDblClick(p, a); + } + } else { + if (e.onOutputClick) { + e.onOutputClick(p, a); + } } - } else { - if (e.onOutputClick) { - e.onOutputClick(p, a); + c = !0; + break; + } + } + } + if (e.inputs) { + for (p = 0, n = e.inputs.length; p < n; ++p) { + if (f = e.inputs[p], q = e.getConnectionPos(!0, p), u(a.canvasX, a.canvasY, q[0] - 15, q[1] - 10, 30, 20)) { + if (g) { + if (e.onInputDblClick) { + e.onInputDblClick(p, a); + } + } else { + if (e.onInputClick) { + e.onInputClick(p, a); + } + } + if (null !== f.link) { + c = this.graph.links[f.link]; + e.disconnectInput(p); + if (this.allow_reconnect_links || a.shiftKey) { + this.connecting_node = this.graph._nodes_by_id[c.origin_id], this.connecting_slot = c.origin_slot, this.connecting_output = this.connecting_node.outputs[this.connecting_slot], this.connecting_pos = this.connecting_node.getConnectionPos(!1, this.connecting_slot); + } + c = this.dirty_bgcanvas = !0; } } - c = !0; - break; } } } - if (e.inputs) { - for (p = 0, m = e.inputs.length; p < m; ++p) { - if (f = e.inputs[p], x = e.getConnectionPos(!0, p), t(a.canvasX, a.canvasY, x[0] - 10, x[1] - 5, 20, 10)) { - if (g) { - if (e.onInputDblClick) { - e.onInputDblClick(p, a); - } - } else { - if (e.onInputClick) { - e.onInputClick(p, a); - } - } - null !== f.link && (e.disconnectInput(p), c = this.dirty_bgcanvas = !0); - } - } - } - !c && !1 !== e.flags.resizable && t(a.canvasX, a.canvasY, e.pos[0] + e.size[0] - 5, e.pos[1] + e.size[1] - 5, 5, 5) && (this.resizing_node = e, this.canvas.style.cursor = "se-resize", c = !0); } - !c && t(a.canvasX, a.canvasY, e.pos[0], e.pos[1] - k.NODE_TITLE_HEIGHT, k.NODE_TITLE_HEIGHT, k.NODE_TITLE_HEIGHT) && (e.collapse(), c = !0); + !c && u(a.canvasX, a.canvasY, e.pos[0], e.pos[1] - h.NODE_TITLE_HEIGHT, h.NODE_TITLE_HEIGHT, h.NODE_TITLE_HEIGHT) && (e.collapse(), c = !0); if (!c) { p = !1; - if (m = this.processNodeWidgets(e, this.canvas_mouse, a)) { - p = !0, this.node_widget = [e, m]; + if (n = this.processNodeWidgets(e, this.canvas_mouse, a)) { + p = !0, this.node_widget = [e, n]; } if (g && this.selected_nodes[e.id]) { if (e.onDblClick) { @@ -1941,20 +1959,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.processNodeDblClicked(e); p = !0; } - e.onMouseDown && e.onMouseDown(a, [a.canvasX - e.pos[0], a.canvasY - e.pos[1]]) ? p = !0 : this.live_mode && (p = l = !0); + e.onMouseDown && e.onMouseDown(a, [a.canvasX - e.pos[0], a.canvasY - e.pos[1]], this) ? p = !0 : this.live_mode && (p = k = !0); p || (this.allow_dragnodes && (this.node_dragged = e), this.selected_nodes[e.id] || this.processNodeSelected(e, a)); this.dirty_canvas = !0; } } else { - this.selected_group = this.graph.getGroupOnPos(a.canvasX, a.canvasY), this.selected_group_resizing = !1, this.selected_group && (a.ctrlKey && (this.dragging_rectangle = null), 10 > q([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.scale ? this.selected_group_resizing = !0 : this.selected_group.recomputeInsideNodes()), g && this.showSearchBox(a), l = !0; + this.selected_group = this.graph.getGroupOnPos(a.canvasX, a.canvasY), this.selected_group_resizing = !1, this.selected_group && (a.ctrlKey && (this.dragging_rectangle = null), 10 > r([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.scale ? this.selected_group_resizing = !0 : this.selected_group.recomputeInsideNodes()), g && this.showSearchBox(a), k = !0; } - !c && l && this.allow_dragcanvas && (this.dragging_canvas = !0); + !c && k && this.allow_dragcanvas && (this.dragging_canvas = !0); } else { 2 != a.which && 3 == a.which && this.processContextMenu(e, a); } this.last_mouse[0] = a.localX; this.last_mouse[1] = a.localY; - this.last_mouseclick = k.getTime(); + 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(); @@ -1973,6 +1992,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { 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; @@ -2002,15 +2022,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.onMouseEnter(a); } if (c.onMouseMove) { - c.onMouseMove(a); + c.onMouseMove(a, [a.canvasX - c.pos[0], a.canvasY - c.pos[1]], this); } if (this.connecting_node && (g = this._highlight_input || [0, 0], !this.isOverNodeBox(c, a.canvasX, a.canvasY))) { - var l = this.isOverNodeInput(c, a.canvasX, a.canvasY, g); - -1 != l && c.inputs[l] ? k.isValidConnection(this.connecting_output.type, c.inputs[l].type) && (this._highlight_input = g) : this._highlight_input = null; + var k = this.isOverNodeInput(c, a.canvasX, a.canvasY, g); + -1 != k && c.inputs[k] ? h.isValidConnection(this.connecting_output.type, c.inputs[k].type) && (this._highlight_input = g) : this._highlight_input = null; } - this.canvas && (t(a.canvasX, a.canvasY, c.pos[0] + c.size[0] - 5, c.pos[1] + c.size[1] - 5, 5, 5) ? this.canvas.style.cursor = "se-resize" : this.canvas.style.cursor = null); + this.canvas && (u(a.canvasX, a.canvasY, c.pos[0] + c.size[0] - 5, c.pos[1] + c.size[1] - 5, 5, 5) ? this.canvas.style.cursor = "se-resize" : this.canvas.style.cursor = ""); } else { - this.canvas && (this.canvas.style.cursor = null); + this.canvas && (this.canvas.style.cursor = ""); } if (this.node_capturing_input && this.node_capturing_input != c && this.node_capturing_input.onMouseMove) { this.node_capturing_input.onMouseMove(a); @@ -2021,8 +2041,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } 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], e = Math.max(this.resizing_node.inputs ? this.resizing_node.inputs.length : 0, this.resizing_node.outputs ? this.resizing_node.outputs.length : 0) * k.NODE_SLOT_HEIGHT + (this.resizing_node.widgets ? this.resizing_node.widgets.length : 0) * (k.NODE_WIDGET_HEIGHT + 4) + 4, this.resizing_node.size[1] < e && (this.resizing_node.size[1] = - e), this.resizing_node.size[0] < k.NODE_MIN_WIDTH && (this.resizing_node.size[0] = k.NODE_MIN_WIDTH), this.canvas.style.cursor = "se-resize", 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], e = 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] < e && (this.resizing_node.size[1] = + e), this.resizing_node.size[0] < h.NODE_MIN_WIDTH && (this.resizing_node.size[0] = h.NODE_MIN_WIDTH), this.canvas.style.cursor = "se-resize", this.dirty_bgcanvas = this.dirty_canvas = !0); } } } @@ -2039,28 +2059,34 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.canvas.addEventListener("mousemove", this._mousemove_callback, !0); b.removeEventListener("mouseup", this._mouseup_callback, !0); this.adjustMouseEvent(a); - b = k.getTime(); + b = h.getTime(); a.click_time = b - this.last_mouseclick; + this.last_mouse_dragging = !1; if (1 == a.which) { - if (this.selected_group = this.node_widget = null, this.selected_group_resizing = !1, this.dragging_rectangle) { + if (this.node_widget = null, this.selected_group && (this.selected_group.move(this.selected_group.pos[0] - Math.round(this.selected_group.pos[0]), this.selected_group.pos[1] - Math.round(this.selected_group.pos[1]), a.ctrlKey), this.selected_group.pos[0] = Math.round(this.selected_group.pos[0]), this.selected_group.pos[1] = Math.round(this.selected_group.pos[1]), this.selected_group._nodes.length && (this.dirty_canvas = !0), this.selected_group = null), this.selected_group_resizing = !1, + this.dragging_rectangle) { if (this.graph) { - var c = this.graph._nodes, m = new Float32Array(4); + b = this.graph._nodes; + var e = new Float32Array(4); this.deselectAllNodes(); - 0 > this.dragging_rectangle[2] && (this.dragging_rectangle[0] += this.dragging_rectangle[2]); - 0 > this.dragging_rectangle[3] && (this.dragging_rectangle[1] += this.dragging_rectangle[3]); - this.dragging_rectangle[2] = Math.abs(this.dragging_rectangle[2] * this.scale); - this.dragging_rectangle[3] = Math.abs(this.dragging_rectangle[3] * this.scale); - for (var g = 0; g < c.length; ++g) { - b = c[g], b.getBounding(m), v(this.dragging_rectangle, m) && this.selectNode(b, !0); + var c = Math.abs(this.dragging_rectangle[2]), g = Math.abs(this.dragging_rectangle[3]), k = 0 > this.dragging_rectangle[3] ? this.dragging_rectangle[1] - g : this.dragging_rectangle[1]; + this.dragging_rectangle[0] = 0 > this.dragging_rectangle[2] ? this.dragging_rectangle[0] - c : this.dragging_rectangle[0]; + this.dragging_rectangle[1] = k; + this.dragging_rectangle[2] = c; + this.dragging_rectangle[3] = g; + g = []; + for (k = 0; k < b.length; ++k) { + c = b[k], c.getBounding(e), w(this.dragging_rectangle, e) && g.push(c); } + g.length && this.selectNodes(g); } this.dragging_rectangle = null; } else { if (this.connecting_node) { this.dirty_bgcanvas = this.dirty_canvas = !0; - if (b = this.graph.getNodeOnPos(a.canvasX, a.canvasY, this.visible_nodes)) { - this.connecting_output.type == k.EVENT && this.isOverNodeBox(b, a.canvasX, a.canvasY) ? this.connecting_node.connect(this.connecting_slot, b, k.EVENT) : (c = this.isOverNodeInput(b, a.canvasX, a.canvasY), -1 != c ? this.connecting_node.connect(this.connecting_slot, b, c) : (c = b.getInputInfo(0), this.connecting_output.type == k.EVENT ? this.connecting_node.connect(this.connecting_slot, b, k.EVENT) : c && !c.link && k.isValidConnection(c.type && this.connecting_output.type) && this.connecting_node.connect(this.connecting_slot, - b, 0))); + if (c = this.graph.getNodeOnPos(a.canvasX, a.canvasY, this.visible_nodes)) { + this.connecting_output.type == h.EVENT && this.isOverNodeBox(c, a.canvasX, a.canvasY) ? this.connecting_node.connect(this.connecting_slot, c, h.EVENT) : (b = this.isOverNodeInput(c, a.canvasX, a.canvasY), -1 != b ? this.connecting_node.connect(this.connecting_slot, c, b) : (b = c.getInputInfo(0), this.connecting_output.type == h.EVENT ? this.connecting_node.connect(this.connecting_slot, c, h.EVENT) : b && !b.link && h.isValidConnection(b.type && this.connecting_output.type) && this.connecting_node.connect(this.connecting_slot, + c, 0))); } this.connecting_node = this.connecting_pos = this.connecting_output = null; this.connecting_slot = -1; @@ -2071,12 +2097,12 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (this.node_dragged) { 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(), this.node_dragged = null; } else { - b = this.graph.getNodeOnPos(a.canvasX, a.canvasY, this.visible_nodes); - !b && 300 > a.click_time && this.deselectAllNodes(); + c = this.graph.getNodeOnPos(a.canvasX, a.canvasY, this.visible_nodes); + !c && 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.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]]); @@ -2107,14 +2133,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } }; d.prototype.isOverNodeBox = function(a, b, c) { - var e = k.NODE_TITLE_HEIGHT; - return t(b, c, a.pos[0] + 2, a.pos[1] + 2 - e, e - 4, e - 4) ? !0 : !1; + var e = h.NODE_TITLE_HEIGHT; + return u(b, c, a.pos[0] + 2, a.pos[1] + 2 - e, e - 4, e - 4) ? !0 : !1; }; d.prototype.isOverNodeInput = function(a, b, c, d) { if (a.inputs) { - for (var e = 0, l = a.inputs.length; e < l; ++e) { + for (var e = 0, k = a.inputs.length; e < k; ++e) { var p = a.getConnectionPos(!0, e); - if (t(b, c, p[0] - 10, p[1] - 5, 20, 10)) { + if (u(b, c, p[0] - 10, p[1] - 5, 20, 10)) { return d && (d[0] = p[0], d[1] = p[1]), e; } } @@ -2126,14 +2152,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var b = !1; if ("input" != a.target.localName) { if ("keydown" == a.type) { - 32 == a.keyCode && (b = this.dragging_canvas = !0); - 65 == a.keyCode && a.ctrlKey && (this.selectNodes(), b = !0); - "KeyC" == a.code && (a.metaKey || a.ctrlKey) && !a.shiftKey && this.selected_nodes && (this.copyToClipboard(), b = !0); - "KeyV" != a.code || !a.metaKey && !a.ctrlKey || a.shiftKey || this.pasteFromClipboard(); - if (46 == a.keyCode || 8 == a.keyCode) { - this.deleteSelectedNodes(), b = !0; - } - if (this.selected_nodes) { + if (32 == a.keyCode && (b = this.dragging_canvas = !0), 65 == a.keyCode && a.ctrlKey && (this.selectNodes(), b = !0), "KeyC" == a.code && (a.metaKey || a.ctrlKey) && !a.shiftKey && this.selected_nodes && (this.copyToClipboard(), b = !0), "KeyV" != a.code || !a.metaKey && !a.ctrlKey || a.shiftKey || this.pasteFromClipboard(), 46 != a.keyCode && 8 != a.keyCode || "input" == a.target.localName || "textarea" == a.target.localName || (this.deleteSelectedNodes(), b = !0), this.selected_nodes) { for (var c in this.selected_nodes) { if (this.selected_nodes[c].onKeyDown) { this.selected_nodes[c].onKeyDown(a); @@ -2167,10 +2186,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { for (d = 0; d < c.length; ++d) { if (g = c[d], a.nodes.push(g.clone().serialize()), g.inputs && g.inputs.length) { for (b = 0; b < g.inputs.length; ++b) { - var l = g.inputs[b]; - if (l && null != l.link && (l = this.graph.links[l.link])) { - var p = this.graph.getNodeById(l.origin_id); - p && this.selected_nodes[p.id] && a.links.push([p._relative_id, b, g._relative_id, l.target_slot]); + var k = g.inputs[b]; + if (k && null != k.link && (k = this.graph.links[k.link])) { + var p = this.graph.getNodeById(k.origin_id); + p && this.selected_nodes[p.id] && a.links.push([p._relative_id, b, g._relative_id, k.target_slot]); } } } @@ -2182,7 +2201,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (a) { a = JSON.parse(a); for (var b = [], c = 0; c < a.nodes.length; ++c) { - var d = a.nodes[c], g = k.createNode(d.type); + var d = a.nodes[c], g = h.createNode(d.type); g && (g.configure(d), g.pos[0] += 5, g.pos[1] += 5, this.graph.add(g), b.push(g)); } for (c = 0; c < a.links.length; ++c) { @@ -2197,19 +2216,19 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var b = [a.canvasX, a.canvasY], c = this.graph.getNodeOnPos(b[0], b[1]); if (c) { if ((c.onDropFile || c.onDropData) && (b = a.dataTransfer.files) && b.length) { - for (var k = 0; k < b.length; k++) { - var g = a.dataTransfer.files[0], l = g.name; - d.getFileExtension(l); + for (var h = 0; h < b.length; h++) { + var g = a.dataTransfer.files[0], k = g.name; + d.getFileExtension(k); if (c.onDropFile) { c.onDropFile(g); } if (c.onDropData) { var p = new FileReader; p.onload = function(a) { - c.onDropData(a.target.result, l, g); + c.onDropData(a.target.result, k, g); }; - var m = g.type.split("/")[0]; - "text" == m || "" == m ? p.readAsText(g) : "image" == m ? p.readAsDataURL(g) : p.readAsArrayBuffer(g); + var n = g.type.split("/")[0]; + "text" == n || "" == n ? p.readAsText(g) : "image" == n ? p.readAsDataURL(g) : p.readAsArrayBuffer(g); } } } @@ -2222,8 +2241,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.prototype.checkDropItem = function(a) { if (a.dataTransfer.files.length) { var b = a.dataTransfer.files[0], c = d.getFileExtension(b.name).toLowerCase(); - if (c = k.node_types_by_file_extension[c]) { - if (c = k.createNode(c.type), c.pos = [a.canvasX, a.canvasY], this.graph.add(c), c.onDropFile) { + if (c = h.node_types_by_file_extension[c]) { + if (c = h.createNode(c.type), c.pos = [a.canvasX, a.canvasY], this.graph.add(c), c.onDropFile) { c.onDropFile(b); } } @@ -2273,8 +2292,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { for (d = 0; d < c.outputs.length; ++d) { var g = c.outputs[d]; if (g.links) { - for (var l = 0; l < g.links.length; ++l) { - this.highlighted_links[g.links[l]] = !0; + for (var k = 0; k < g.links.length; ++k) { + this.highlighted_links[g.links[k]] = !0; } } } @@ -2385,25 +2404,28 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var b = this.graph._nodes.indexOf(a); -1 != b && (this.graph._nodes.splice(b, 1), this.graph._nodes.unshift(a)); }; - var m = new Float32Array(4); + var n = new Float32Array(4); d.prototype.computeVisibleNodes = function(a, b) { b = b || []; b.length = 0; a = a || this.graph._nodes; for (var c = 0, d = a.length; c < d; ++c) { var g = a[c]; - (!this.live_mode || g.onDrawBackground || g.onDrawForeground) && v(this.visible_area, g.getBounding(m)) && b.push(g); + (!this.live_mode || g.onDrawBackground || g.onDrawForeground) && w(this.visible_area, g.getBounding(n)) && b.push(g); } return b; }; d.prototype.draw = function(a, b) { if (this.canvas) { - var c = k.getTime(); + var c = h.getTime(); this.render_time = 0.001 * (c - this.last_draw_time); this.last_draw_time = c; if (this.graph) { - var d = [-this.offset[0], -this.offset[1]], g = [d[0] + this.canvas.width / this.scale, d[1] + this.canvas.height / this.scale]; - this.visible_area = new Float32Array([d[0], d[1], g[0] - d[0], g[1] - d[1]]); + var d = -this.offset[0], g = -this.offset[1], k = d + this.canvas.width / this.scale, p = g + this.canvas.height / this.scale; + this.visible_area[0] = d; + this.visible_area[1] = g; + this.visible_area[2] = k - d; + this.visible_area[3] = p - g; } (this.dirty_bgcanvas || b || this.always_render_background || this.graph && this.graph._last_trigger_time && 1000 > c - this.graph._last_trigger_time) && this.drawBackCanvas(); (this.dirty_canvas || a) && this.drawFrontCanvas(); @@ -2444,15 +2466,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (null != this.connecting_pos) { a.lineWidth = this.connections_width; switch(this.connecting_output.type) { - case k.EVENT: - b = k.EVENT_LINK_COLOR; + case h.EVENT: + b = h.EVENT_LINK_COLOR; break; default: - b = k.CONNECTING_LINK_COLOR; + b = h.CONNECTING_LINK_COLOR; } - this.renderLink(a, this.connecting_pos, [this.canvas_mouse[0], this.canvas_mouse[1]], null, !1, null, b, this.connecting_output.dir || (this.connecting_node.flags.horizontal ? k.DOWN : k.RIGHT), k.CENTER); + this.renderLink(a, this.connecting_pos, [this.canvas_mouse[0], this.canvas_mouse[1]], null, !1, null, b, this.connecting_output.dir || (this.connecting_node.flags.horizontal ? h.DOWN : h.RIGHT), h.CENTER); a.beginPath(); - this.connecting_output.type === k.EVENT || this.connecting_output.shape === k.BOX_SHAPE ? a.rect(this.connecting_pos[0] - 6 + 0.5, this.connecting_pos[1] - 5 + 0.5, 14, 10) : a.arc(this.connecting_pos[0], this.connecting_pos[1], 4, 0, 2 * Math.PI); + this.connecting_output.type === h.EVENT || this.connecting_output.shape === h.BOX_SHAPE ? a.rect(this.connecting_pos[0] - 6 + 0.5, this.connecting_pos[1] - 5 + 0.5, 14, 10) : a.arc(this.connecting_pos[0], this.connecting_pos[1], 4, 0, 2 * Math.PI); a.fill(); a.fillStyle = "#ffcc00"; this._highlight_input && (a.beginPath(), a.arc(this._highlight_input[0], this._highlight_input[1], 6, 0, 2 * Math.PI), a.fill()); @@ -2471,7 +2493,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.translate(b, c); a.font = "10px Arial"; a.fillStyle = "#888"; - this.graph ? (a.fillText("T: " + this.graph.globaltime.toFixed(2) + "s", 5, 13), a.fillText("I: " + this.graph.iteration, 5, 26), a.fillText("V: " + this.graph._version, 5, 39), a.fillText("FPS:" + this.fps.toFixed(2), 5, 52)) : a.fillText("No graph selected", 5, 13); + this.graph ? (a.fillText("T: " + this.graph.globaltime.toFixed(2) + "s", 5, 13), a.fillText("I: " + this.graph.iteration, 5, 26), a.fillText("N: " + this.graph._nodes.length + " [" + this.visible_nodes.length + "]", 5, 39), a.fillText("V: " + this.graph._version, 5, 52), a.fillText("FPS:" + this.fps.toFixed(2), 5, 65)) : a.fillText("No graph selected", 5, 13); a.restore(); }; d.prototype.drawBackCanvas = function() { @@ -2483,8 +2505,20 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var b = this.bgctx; b.start && b.start(); this.clear_background && b.clearRect(0, 0, a.width, a.height); - this._graph_stack && this._graph_stack.length && (b.strokeStyle = this._graph_stack[this._graph_stack.length - 1].bgcolor, b.lineWidth = 10, b.strokeRect(1, 1, a.width - 2, a.height - 2), b.lineWidth = 1); - var c = !1; + if (this._graph_stack && this._graph_stack.length) { + b.save(); + var c = this.graph._subgraph_node; + b.strokeStyle = c.bgcolor; + b.lineWidth = 10; + b.strokeRect(1, 1, a.width - 2, a.height - 2); + b.lineWidth = 1; + b.font = "40px Arial"; + b.textAlign = "center"; + b.fillStyle = c.bgcolor; + b.fillText(c.getTitle(), 0.5 * a.width, 40); + b.restore(); + } + c = !1; this.onRenderBackground && (c = this.onRenderBackground(a, b)); b.restore(); b.setTransform(1, 0, 0, 1, 0, 0); @@ -2527,17 +2561,17 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var c = new Float32Array(2); d.prototype.drawNode = function(a, b) { this.current_node = a; - var e = a.color || a.constructor.color || k.NODE_DEFAULT_COLOR, d = a.bgcolor || a.constructor.bgcolor || k.NODE_DEFAULT_BGCOLOR; + var e = a.color || a.constructor.color || h.NODE_DEFAULT_COLOR, d = a.bgcolor || a.constructor.bgcolor || h.NODE_DEFAULT_BGCOLOR; if (this.live_mode) { if (!a.flags.collapsed && (b.shadowColor = "transparent", a.onDrawForeground)) { - a.onDrawForeground(b, this); + a.onDrawForeground(b, this, this.canvas); } } else { var g = this.editor_alpha; b.globalAlpha = g; - this.render_shadows ? (b.shadowColor = k.DEFAULT_SHADOW_COLOR, b.shadowOffsetX = 2 * this.scale, b.shadowOffsetY = 2 * this.scale, b.shadowBlur = 3 * this.scale) : b.shadowColor = "transparent"; + this.render_shadows ? (b.shadowColor = h.DEFAULT_SHADOW_COLOR, b.shadowOffsetX = 2 * this.scale, b.shadowOffsetY = 2 * this.scale, b.shadowBlur = 3 * this.scale) : b.shadowColor = "transparent"; if (!a.flags.collapsed || !a.onDrawCollaped || 1 != a.onDrawCollapsed(b, this)) { - var l = a._shape || k.BOX_SHAPE; + var k = a._shape || h.BOX_SHAPE; c.set(a.size); if (a.flags.collapsed) { b.font = this.inner_text_font; @@ -2546,7 +2580,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c[0] = a._collapsed_width; c[1] = 0; } - a.flags.clip_area && (b.save(), b.beginPath(), l == k.BOX_SHAPE ? b.rect(0, 0, c[0], c[1]) : l == k.ROUND_SHAPE ? b.roundRect(0, 0, c[0], c[1], 10) : l == k.CIRCLE_SHAPE && b.arc(0.5 * c[0], 0.5 * c[1], 0.5 * c[0], 0, 2 * Math.PI), b.clip()); + a.flags.clip_area && (b.save(), b.beginPath(), k == h.BOX_SHAPE ? b.rect(0, 0, c[0], c[1]) : k == h.ROUND_SHAPE ? b.roundRect(0, 0, c[0], c[1], 10) : k == h.CIRCLE_SHAPE && b.arc(0.5 * c[0], 0.5 * c[1], 0.5 * c[0], 0, 2 * Math.PI), b.clip()); this.drawNodeShape(a, b, c, e, d, a.selected, a.mouseOver); b.shadowColor = "transparent"; b.textAlign = a.flags.horizontal ? "center" : "left"; @@ -2554,14 +2588,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { e = 0.6 < this.scale; d = this.connecting_output; b.lineWidth = 1; - l = 0; + k = 0; if (a.flags.collapsed) { if (a.inputs) { for (p = 0; p < a.inputs.length; p++) { - if (m = a.inputs[p], null != m.link) { - b.fillStyle = m.color_on || this.default_connection_color.input_on; + if (n = a.inputs[p], null != n.link) { + b.fillStyle = n.color_on || this.default_connection_color.input_on; b.beginPath(); - m.type === k.EVENT || m.shape === k.BOX_SHAPE ? b.rect(0.5, 4 - k.NODE_TITLE_HEIGHT + 0.5, 14, k.NODE_TITLE_HEIGHT - 8) : m.shape === k.ARROW_SHAPE ? (b.moveTo(8, -0.5 * k.NODE_TITLE_HEIGHT), b.lineTo(-4, -0.8 * k.NODE_TITLE_HEIGHT), b.lineTo(-4, -0.2 * k.NODE_TITLE_HEIGHT), b.closePath()) : b.arc(0, -0.5 * k.NODE_TITLE_HEIGHT, 4, 0, 2 * Math.PI); + n.type === h.EVENT || n.shape === h.BOX_SHAPE ? b.rect(0.5, 4 - h.NODE_TITLE_HEIGHT + 0.5, 14, h.NODE_TITLE_HEIGHT - 8) : n.shape === h.ARROW_SHAPE ? (b.moveTo(8, -0.5 * h.NODE_TITLE_HEIGHT), b.lineTo(-4, -0.8 * h.NODE_TITLE_HEIGHT), b.lineTo(-4, -0.2 * h.NODE_TITLE_HEIGHT), b.closePath()) : b.arc(0, -0.5 * h.NODE_TITLE_HEIGHT, 4, 0, 2 * Math.PI); b.fill(); break; } @@ -2569,27 +2603,27 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } if (a.outputs) { for (p = 0; p < a.outputs.length; p++) { - m = a.outputs[p], m.links && m.links.length && (b.fillStyle = m.color_on || this.default_connection_color.output_on, b.strokeStyle = "black", b.beginPath(), m.type === k.EVENT || m.shape === k.BOX_SHAPE ? b.rect(a._collapsed_width - 4 + 0.5, 4 - k.NODE_TITLE_HEIGHT + 0.5, 14, k.NODE_TITLE_HEIGHT - 8) : m.shape === k.ARROW_SHAPE ? (b.moveTo(a._collapsed_width + 6, -0.5 * k.NODE_TITLE_HEIGHT), b.lineTo(a._collapsed_width - 6, -0.8 * k.NODE_TITLE_HEIGHT), b.lineTo(a._collapsed_width - - 6, -0.2 * k.NODE_TITLE_HEIGHT), b.closePath()) : b.arc(a._collapsed_width, -0.5 * k.NODE_TITLE_HEIGHT, 4, 0, 2 * Math.PI), b.fill(), b.stroke()); + n = a.outputs[p], n.links && n.links.length && (b.fillStyle = n.color_on || this.default_connection_color.output_on, b.strokeStyle = "black", b.beginPath(), n.type === h.EVENT || n.shape === h.BOX_SHAPE ? b.rect(a._collapsed_width - 4 + 0.5, 4 - h.NODE_TITLE_HEIGHT + 0.5, 14, h.NODE_TITLE_HEIGHT - 8) : n.shape === h.ARROW_SHAPE ? (b.moveTo(a._collapsed_width + 6, -0.5 * h.NODE_TITLE_HEIGHT), b.lineTo(a._collapsed_width - 6, -0.8 * h.NODE_TITLE_HEIGHT), b.lineTo(a._collapsed_width - + 6, -0.2 * h.NODE_TITLE_HEIGHT), b.closePath()) : b.arc(a._collapsed_width, -0.5 * h.NODE_TITLE_HEIGHT, 4, 0, 2 * Math.PI), b.fill(), b.stroke()); } } } else { if (a.inputs) { for (p = 0; p < a.inputs.length; p++) { - var m = a.inputs[p]; + var n = a.inputs[p]; b.globalAlpha = g; - this.connecting_node && k.isValidConnection(m.type && d.type) && (b.globalAlpha = 0.4 * g); - b.fillStyle = null != m.link ? m.color_on || this.default_connection_color.input_on : m.color_off || this.default_connection_color.input_off; + this.connecting_node && h.isValidConnection(n.type && d.type) && (b.globalAlpha = 0.4 * g); + b.fillStyle = null != n.link ? n.color_on || this.default_connection_color.input_on : n.color_off || this.default_connection_color.input_off; var f = a.getConnectionPos(!0, p); f[0] -= a.pos[0]; f[1] -= a.pos[1]; - l < f[1] + 0.5 * k.NODE_SLOT_HEIGHT && (l = f[1] + 0.5 * k.NODE_SLOT_HEIGHT); + k < f[1] + 0.5 * h.NODE_SLOT_HEIGHT && (k = f[1] + 0.5 * h.NODE_SLOT_HEIGHT); b.beginPath(); - m.type === k.EVENT || m.shape === k.BOX_SHAPE ? b.rect(f[0] - 6 + 0.5, f[1] - 5 + 0.5, 14, 10) : m.shape === k.ARROW_SHAPE ? (b.moveTo(f[0] + 8, f[1] + 0.5), b.lineTo(f[0] - 4, f[1] + 6 + 0.5), b.lineTo(f[0] - 4, f[1] - 6 + 0.5), b.closePath()) : b.arc(f[0], f[1], 4, 0, 2 * Math.PI); + n.type === h.EVENT || n.shape === h.BOX_SHAPE ? b.rect(f[0] - 6 + 0.5, f[1] - 5 + 0.5, 14, 10) : n.shape === h.ARROW_SHAPE ? (b.moveTo(f[0] + 8, f[1] + 0.5), b.lineTo(f[0] - 4, f[1] + 6 + 0.5), b.lineTo(f[0] - 4, f[1] - 6 + 0.5), b.closePath()) : b.arc(f[0], f[1], 4, 0, 2 * Math.PI); b.fill(); if (e) { - var x = null != m.label ? m.label : m.name; - x && (b.fillStyle = k.NODE_TEXT_COLOR, a.flags.horizontal || m.dir == k.UP ? b.fillText(x, f[0], f[1] - 10) : b.fillText(x, f[0] + 10, f[1] + 5)); + var q = null != n.label ? n.label : n.name; + q && (b.fillStyle = h.NODE_TEXT_COLOR, a.flags.horizontal || n.dir == h.UP ? b.fillText(q, f[0], f[1] - 10) : b.fillText(q, f[0] + 10, f[1] + 5)); } } } @@ -2598,9 +2632,9 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b.strokeStyle = "black"; if (a.outputs) { for (p = 0; p < a.outputs.length; p++) { - if (m = a.outputs[p], f = a.getConnectionPos(!1, p), f[0] -= a.pos[0], f[1] -= a.pos[1], l < f[1] + 0.5 * k.NODE_SLOT_HEIGHT && (l = f[1] + 0.5 * k.NODE_SLOT_HEIGHT), b.fillStyle = m.links && m.links.length ? m.color_on || this.default_connection_color.output_on : m.color_off || this.default_connection_color.output_off, b.beginPath(), m.type === k.EVENT || m.shape === k.BOX_SHAPE ? b.rect(f[0] - 6 + 0.5, f[1] - 5 + 0.5, 14, 10) : m.shape === k.ARROW_SHAPE ? (b.moveTo(f[0] + 8, f[1] + - 0.5), b.lineTo(f[0] - 4, f[1] + 6 + 0.5), b.lineTo(f[0] - 4, f[1] - 6 + 0.5), b.closePath()) : b.arc(f[0], f[1], 4, 0, 2 * Math.PI), b.fill(), b.stroke(), e && (x = null != m.label ? m.label : m.name)) { - b.fillStyle = k.NODE_TEXT_COLOR, a.flags.horizontal || m.dir == k.DOWN ? b.fillText(x, f[0], f[1] - 8) : b.fillText(x, f[0] - 10, f[1] + 5); + if (n = a.outputs[p], f = a.getConnectionPos(!1, p), f[0] -= a.pos[0], f[1] -= a.pos[1], k < f[1] + 0.5 * h.NODE_SLOT_HEIGHT && (k = f[1] + 0.5 * h.NODE_SLOT_HEIGHT), b.fillStyle = n.links && n.links.length ? n.color_on || this.default_connection_color.output_on : n.color_off || this.default_connection_color.output_off, b.beginPath(), n.type === h.EVENT || n.shape === h.BOX_SHAPE ? b.rect(f[0] - 6 + 0.5, f[1] - 5 + 0.5, 14, 10) : n.shape === h.ARROW_SHAPE ? (b.moveTo(f[0] + 8, f[1] + + 0.5), b.lineTo(f[0] - 4, f[1] + 6 + 0.5), b.lineTo(f[0] - 4, f[1] - 6 + 0.5), b.closePath()) : b.arc(f[0], f[1], 4, 0, 2 * Math.PI), b.fill(), b.stroke(), e && (q = null != n.label ? n.label : n.name)) { + b.fillStyle = h.NODE_TEXT_COLOR, a.flags.horizontal || n.dir == h.DOWN ? b.fillText(q, f[0], f[1] - 8) : b.fillText(q, f[0] - 10, f[1] + 5); } } } @@ -2608,82 +2642,94 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b.globalAlpha = 1; if (a.widgets) { if (a.flags.horizontal || a.flags.widgets_up) { - l = 2; + k = 2; } - this.drawNodeWidgets(a, l, b, this.node_widget && this.node_widget[0] == a ? this.node_widget[1] : null); + this.drawNodeWidgets(a, k, b, this.node_widget && this.node_widget[0] == a ? this.node_widget[1] : null); + } + if (a.onDrawForeground) { + a.onDrawForeground(b, this, this.canvas); } - a.onDrawForeground && (a.gui_rects && (a.gui_rects.length = 0), a.onDrawForeground(b, this)); } a.flags.clip_area && b.restore(); b.globalAlpha = 1.0; } } }; - d.prototype.drawNodeShape = function(a, b, c, m, g, l, p) { - b.strokeStyle = m; + d.prototype.drawNodeShape = function(a, b, c, n, g, k, p) { + b.strokeStyle = n; b.fillStyle = g; - g = k.NODE_TITLE_HEIGHT; - var e = a._shape || a.constructor.shape || k.BOX_SHAPE, f = a.constructor.title_mode, x = !0; - f == k.TRANSPARENT_TITLE ? x = !1 : f == k.AUTOHIDE_TITLE && p && (x = !0); - p = x ? -g : 0; - var n = c[0] + 1, h = x ? c[1] + g : c[1]; - a.flags.collapsed || (e == k.BOX_SHAPE || 0.5 > this.scale ? (b.beginPath(), b.rect(0, p, n, h), b.fill()) : e == k.ROUND_SHAPE || e == k.CARD_SHAPE ? (b.beginPath(), b.roundRect(0, p, n, h, this.round_radius, e == k.CARD_SHAPE ? 0 : this.round_radius), b.fill()) : e == k.CIRCLE_SHAPE && (b.beginPath(), b.arc(0.5 * c[0], 0.5 * c[1], 0.5 * c[0], 0, 2 * Math.PI), b.fill())); + g = h.NODE_TITLE_HEIGHT; + var e = a._shape || a.constructor.shape || h.BOX_SHAPE, f = a.constructor.title_mode, q = !0; + f == h.TRANSPARENT_TITLE ? q = !1 : f == h.AUTOHIDE_TITLE && p && (q = !0); + p = q ? -g : 0; + var m = c[0] + 1, l = q ? c[1] + g : c[1]; + a.flags.collapsed || (b.beginPath(), e == h.BOX_SHAPE || 0.5 > this.scale ? b.fillRect(0, p, m, l) : e == h.ROUND_SHAPE || e == h.CARD_SHAPE ? b.roundRect(0, p, m, l, this.round_radius, e == h.CARD_SHAPE ? 0 : this.round_radius) : e == h.CIRCLE_SHAPE && b.arc(0.5 * c[0], 0.5 * c[1], 0.5 * c[0], 0, 2 * Math.PI), b.fill()); b.shadowColor = "transparent"; a.bgImage && a.bgImage.width && b.drawImage(a.bgImage, 0.5 * (c[0] - a.bgImage.width), 0.5 * (c[1] - a.bgImage.height)); a.bgImageUrl && !a.bgImage && (a.bgImage = a.loadImage(a.bgImageUrl)); - a.onDrawBackground && (a.gui_rects && (a.gui_rects.length = 0), a.onDrawBackground(b, this)); - if (x || f == k.TRANSPARENT_TITLE) { - if (f != k.TRANSPARENT_TITLE) { - a.flags.collapsed && (b.shadowColor = k.DEFAULT_SHADOW_COLOR); + if (a.onDrawBackground) { + a.onDrawBackground(b, this, this.canvas); + } + if (q || f == h.TRANSPARENT_TITLE) { + if (f != h.TRANSPARENT_TITLE) { + a.flags.collapsed && (b.shadowColor = h.DEFAULT_SHADOW_COLOR); if (this.use_gradients) { - var q = d.gradients[m]; - q || (q = d.gradients[m] = b.createLinearGradient(0, 0, 400, 0), q.addColorStop(0, m), q.addColorStop(1, "#000")); - b.fillStyle = q; + var r = d.gradients[n]; + r || (r = d.gradients[n] = b.createLinearGradient(0, 0, 400, 0), r.addColorStop(0, n), r.addColorStop(1, "#000")); + b.fillStyle = r; } else { - b.fillStyle = m; + b.fillStyle = n; } - q = b.globalAlpha; + r = b.globalAlpha; b.beginPath(); - if (e == k.BOX_SHAPE || 0.5 > this.scale) { - b.rect(0, -g, c[0] + 1, g), b.fill(); - } else { - if (e == k.ROUND_SHAPE || e == k.CARD_SHAPE) { - b.roundRect(0, -g, c[0] + 1, g, this.round_radius, a.flags.collapsed ? this.round_radius : 0), b.fill(); - } - } + e == h.BOX_SHAPE || 0.5 > this.scale ? b.rect(0, -g, c[0] + 1, g) : (e == h.ROUND_SHAPE || e == h.CARD_SHAPE) && b.roundRect(0, -g, c[0] + 1, g, this.round_radius, a.flags.collapsed ? this.round_radius : 0); + b.fill(); b.shadowColor = "transparent"; } - e == k.ROUND_SHAPE || e == k.CIRCLE_SHAPE || e == k.CARD_SHAPE ? (0.5 < this.scale && (b.fillStyle = "black", b.beginPath(), b.arc(0.5 * g, -0.5 * g, 0.5 * (g - 8), 0, 2 * Math.PI), b.fill()), b.fillStyle = a.boxcolor || k.NODE_DEFAULT_BOXCOLOR, b.beginPath(), b.arc(0.5 * g, -0.5 * g, 0.4 * (g - 8), 0, 2 * Math.PI), b.fill()) : (0.5 < this.scale && (b.fillStyle = "black", b.fillRect(4, -g + 4, g - 8, g - 8)), b.fillStyle = a.boxcolor || k.NODE_DEFAULT_BOXCOLOR, b.fillRect(5, -g + 5, g - 10, + e == h.ROUND_SHAPE || e == h.CIRCLE_SHAPE || e == h.CARD_SHAPE ? (0.5 < this.scale && (b.fillStyle = "black", b.beginPath(), b.arc(0.5 * g, -0.5 * g, 0.5 * (g - 8), 0, 2 * Math.PI), b.fill()), b.fillStyle = a.boxcolor || h.NODE_DEFAULT_BOXCOLOR, b.beginPath(), b.arc(0.5 * g, -0.5 * g, 0.4 * (g - 8), 0, 2 * Math.PI), b.fill()) : (0.5 < this.scale && (b.fillStyle = "black", b.fillRect(4, -g + 4, g - 8, g - 8)), b.fillStyle = a.boxcolor || h.NODE_DEFAULT_BOXCOLOR, b.fillRect(5, -g + 5, g - 10, g - 10)); - b.globalAlpha = q; - 0.5 < this.scale && (b.font = this.title_text_font, q = a.getTitle()) && (b.fillStyle = l ? "white" : a.constructor.title_text_color || this.node_title_color, a.flags.collapsed ? (b.textAlign = "center", x = b.measureText(q), b.fillText(q, g + 0.5 * x.width, 0.2 * -g), b.textAlign = "left") : (b.textAlign = "left", b.fillText(q, g, 0.2 * -g))); + b.globalAlpha = r; + 0.5 < this.scale && (b.font = this.title_text_font, r = a.getTitle()) && (b.fillStyle = k ? "white" : a.constructor.title_text_color || this.node_title_color, a.flags.collapsed ? (b.textAlign = "center", q = b.measureText(r), b.fillText(r, g + 0.5 * q.width, 0.2 * -g), b.textAlign = "left") : (b.textAlign = "left", b.fillText(r, g, 0.2 * -g))); + if (a.onDrawTitle) { + a.onDrawTitle(b); + } } - l && (f == k.TRANSPARENT_TITLE && (p -= g, h += g), b.lineWidth = 1, b.globalAlpha = 0.8, b.beginPath(), e == k.BOX_SHAPE ? b.rect(-6, -6 + p, 12 + n, 12 + h) : e == k.ROUND_SHAPE || e == k.CARD_SHAPE && a.flags.collapsed ? b.roundRect(-6, -6 + p, 12 + n, 12 + h, 2 * this.round_radius) : e == k.CARD_SHAPE ? b.roundRect(-6, -6 + p, 12 + n, 12 + h, 2 * this.round_radius, 2) : e == k.CIRCLE_SHAPE && b.arc(0.5 * c[0], 0.5 * c[1], 0.5 * c[0] + 6, 0, 2 * Math.PI), b.strokeStyle = "#FFF", b.stroke(), - b.strokeStyle = m, b.globalAlpha = 1); + k && (f == h.TRANSPARENT_TITLE && (p -= g, l += g), b.lineWidth = 1, b.globalAlpha = 0.8, b.beginPath(), e == h.BOX_SHAPE ? b.rect(-6, -6 + p, 12 + m, 12 + l) : e == h.ROUND_SHAPE || e == h.CARD_SHAPE && a.flags.collapsed ? b.roundRect(-6, -6 + p, 12 + m, 12 + l, 2 * this.round_radius) : e == h.CARD_SHAPE ? b.roundRect(-6, -6 + p, 12 + m, 12 + l, 2 * this.round_radius, 2) : e == h.CIRCLE_SHAPE && b.arc(0.5 * c[0], 0.5 * c[1], 0.5 * c[0] + 6, 0, 2 * Math.PI), b.strokeStyle = "#FFF", b.stroke(), + b.strokeStyle = n, b.globalAlpha = 1); }; d.prototype.drawConnections = function(a) { - var b = k.getTime(); + var b = h.getTime(), c = this.visible_area; + c = new Float32Array([c[0] - 20, c[1] - 20, c[2] + 40, c[3] + 40]); + var d = new Float32Array(4); a.lineWidth = this.connections_width; a.fillStyle = "#AAA"; a.strokeStyle = "#AAA"; a.globalAlpha = this.editor_alpha; - for (var c = 0, d = this.graph._nodes.length; c < d; ++c) { - var g = this.graph._nodes[c]; - if (g.inputs && g.inputs.length) { - for (var l = 0; l < g.inputs.length; ++l) { - var p = g.inputs[l]; - if (p && null != p.link && (p = this.graph.links[p.link])) { - var m = this.graph.getNodeById(p.origin_id); + for (var g = this.graph._nodes, k = 0, p = g.length; k < p; ++k) { + var n = g[k]; + if (n.inputs && n.inputs.length) { + for (var f = 0; f < n.inputs.length; ++f) { + var q = n.inputs[f]; + if (q && null != q.link && (q = this.graph.links[q.link])) { + var m = this.graph.getNodeById(q.origin_id); if (null != m) { - var f = p.origin_slot; - var x = -1 == f ? [m.pos[0] + 10, m.pos[1] + 10] : m.getConnectionPos(!1, f); - var n = g.getConnectionPos(!0, l); - m = m.outputs[f].dir || (m.flags.horizontal ? k.DOWN : k.RIGHT); - f = g.inputs[l].dir || (g.flags.horizontal ? k.UP : k.LEFT); - this.renderLink(a, x, n, p, !1, 0, null, m, f); - if (p && p._last_time && 1000 > b - p._last_time) { - var h = 2.0 - 0.002 * (b - p._last_time), q = "rgba(255,255,255, " + h.toFixed(2) + ")"; - this.renderLink(a, x, n, p, !0, h, q, m, f); + var l = q.origin_slot; + var r = -1 == l ? [m.pos[0] + 10, m.pos[1] + 10] : m.getConnectionPos(!1, l); + var u = n.getConnectionPos(!0, f); + d[0] = r[0]; + d[1] = r[1]; + d[2] = u[0] - r[0]; + d[3] = u[1] - r[1]; + 0 > d[2] && (d[0] += d[2], d[2] = Math.abs(d[2])); + 0 > d[3] && (d[1] += d[3], d[3] = Math.abs(d[3])); + if (w(d, c)) { + var v = m.outputs[l]; + l = n.inputs[f]; + if (v && l && (m = v.dir || (m.flags.horizontal ? h.DOWN : h.RIGHT), l = l.dir || (n.flags.horizontal ? h.UP : h.LEFT), this.renderLink(a, r, u, q, !1, 0, null, m, l), q && q._last_time && 1000 > b - q._last_time)) { + v = 2.0 - 0.002 * (b - q._last_time); + var x = "rgba(255,255,255, " + v.toFixed(2) + ")"; + this.renderLink(a, r, u, q, !0, v, x, m, l); + } } } } @@ -2692,46 +2738,46 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } a.globalAlpha = 1; }; - d.prototype.renderLink = function(a, b, c, m, g, l, p, f, n) { + d.prototype.renderLink = function(a, b, c, n, g, k, p, f, m) { if (this.highquality_render) { - f = f || k.RIGHT; - n = n || k.LEFT; - var e = q(b, c); + f = f || h.RIGHT; + m = m || h.LEFT; + var e = r(b, c); this.render_connections_border && 0.6 < this.scale && (a.lineWidth = this.connections_width + 4); - !p && m && (p = d.link_type_colors[m.type]); + !p && n && (p = d.link_type_colors[n.type]); p || (p = this.default_link_color); - null != m && this.highlighted_links[m.id] && (p = "#FFF"); + null != n && this.highlighted_links[n.id] && (p = "#FFF"); a.beginPath(); if (this.render_curved_connections) { a.moveTo(b[0], b[1]); - var h = m = 0, A = 0, t = 0; + var l = n = 0, A = 0, u = 0; switch(f) { - case k.LEFT: - m = -0.25 * e; + case h.LEFT: + n = -0.25 * e; break; - case k.RIGHT: - m = 0.25 * e; + case h.RIGHT: + n = 0.25 * e; break; - case k.UP: - h = -0.25 * e; + case h.UP: + l = -0.25 * e; break; - case k.DOWN: - h = 0.25 * e; + case h.DOWN: + l = 0.25 * e; } - switch(n) { - case k.LEFT: + switch(m) { + case h.LEFT: A = -0.25 * e; break; - case k.RIGHT: + case h.RIGHT: A = 0.25 * e; break; - case k.UP: - t = -0.25 * e; + case h.UP: + u = -0.25 * e; break; - case k.DOWN: - t = 0.25 * e; + case h.DOWN: + u = 0.25 * e; } - a.bezierCurveTo(b[0] + m, b[1] + h, c[0] + A, c[1] + t, c[0], c[1]); + a.bezierCurveTo(b[0] + n, b[1] + l, c[0] + A, c[1] + u, c[0], c[1]); } else { a.moveTo(b[0] + 10, b[1]), a.lineTo(0.5 * (b[0] + 10 + (c[0] - 10)), b[1]), a.lineTo(0.5 * (b[0] + 10 + (c[0] - 10)), c[1]), a.lineTo(c[0] - 10, c[1]); } @@ -2739,10 +2785,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.lineWidth = this.connections_width; a.fillStyle = a.strokeStyle = p; a.stroke(); - this.render_connection_arrows && 0.6 <= this.scale && this.render_connection_arrows && 0.6 < this.scale && (g = this.computeConnectionPoint(b, c, 0.5, f, n), p = this.computeConnectionPoint(b, c, 0.51, f, n), p = this.render_curved_connections ? -Math.atan2(p[0] - g[0], p[1] - g[1]) : c[1] > b[1] ? 0 : Math.PI, a.save(), a.translate(g[0], g[1]), a.rotate(p), a.beginPath(), a.moveTo(-5, -5), a.lineTo(0, 5), a.lineTo(5, -5), a.fill(), a.restore()); - if (l) { - for (l = 0; 5 > l; ++l) { - g = (0.001 * k.getTime() + 0.2 * l) % 1, g = this.computeConnectionPoint(b, c, g, f, n), a.beginPath(), a.arc(g[0], g[1], 5, 0, 2 * Math.PI), a.fill(); + this.render_connection_arrows && 0.6 <= this.scale && this.render_connection_arrows && 0.6 < this.scale && (g = this.computeConnectionPoint(b, c, 0.5, f, m), p = this.computeConnectionPoint(b, c, 0.51, f, m), p = this.render_curved_connections ? -Math.atan2(p[0] - g[0], p[1] - g[1]) : c[1] > b[1] ? 0 : Math.PI, a.save(), a.translate(g[0], g[1]), a.rotate(p), a.beginPath(), a.moveTo(-5, -5), a.lineTo(0, 5), a.lineTo(5, -5), a.fill(), a.restore()); + if (k) { + for (k = 0; 5 > k; ++k) { + g = (0.001 * h.getTime() + 0.2 * k) % 1, g = this.computeConnectionPoint(b, c, g, f, m), a.beginPath(), a.arc(g[0], g[1], 5, 0, 2 * Math.PI), a.fill(); } } } else { @@ -2750,40 +2796,40 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } }; d.prototype.computeConnectionPoint = function(a, b, c, d, g) { - d = d || k.RIGHT; - g = g || k.LEFT; - var e = q(a, b), m = [a[0], a[1]], f = [b[0], b[1]]; + d = d || h.RIGHT; + g = g || h.LEFT; + var e = r(a, b), n = [a[0], a[1]], f = [b[0], b[1]]; switch(d) { - case k.LEFT: - m[0] += -0.25 * e; + case h.LEFT: + n[0] += -0.25 * e; break; - case k.RIGHT: - m[0] += 0.25 * e; + case h.RIGHT: + n[0] += 0.25 * e; break; - case k.UP: - m[1] += -0.25 * e; + case h.UP: + n[1] += -0.25 * e; break; - case k.DOWN: - m[1] += 0.25 * e; + case h.DOWN: + n[1] += 0.25 * e; } switch(g) { - case k.LEFT: + case h.LEFT: f[0] += -0.25 * e; break; - case k.RIGHT: + case h.RIGHT: f[0] += 0.25 * e; break; - case k.UP: + case h.UP: f[1] += -0.25 * e; break; - case k.DOWN: + case h.DOWN: f[1] += 0.25 * e; } d = (1 - c) * (1 - c) * (1 - c); g = 3 * (1 - c) * (1 - c) * c; e = 3 * (1 - c) * c * c; c *= c * c; - return [d * a[0] + g * m[0] + e * f[0] + c * b[0], d * a[1] + g * m[1] + e * f[1] + c * b[1]]; + return [d * a[0] + g * n[0] + e * f[0] + c * b[0], d * a[1] + g * n[1] + e * f[1] + c * b[1]]; }; d.prototype.drawExecutionOrder = function(a) { a.shadowColor = "transparent"; @@ -2794,10 +2840,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { for (var b = this.visible_nodes, c = 0; c < b.length; ++c) { var d = b[c]; a.fillStyle = "black"; - a.fillRect(d.pos[0] - k.NODE_TITLE_HEIGHT, d.pos[1] - k.NODE_TITLE_HEIGHT, k.NODE_TITLE_HEIGHT, k.NODE_TITLE_HEIGHT); - 0 == d.order && a.strokeRect(d.pos[0] - k.NODE_TITLE_HEIGHT + 0.5, d.pos[1] - k.NODE_TITLE_HEIGHT + 0.5, k.NODE_TITLE_HEIGHT, k.NODE_TITLE_HEIGHT); + a.fillRect(d.pos[0] - h.NODE_TITLE_HEIGHT, d.pos[1] - h.NODE_TITLE_HEIGHT, h.NODE_TITLE_HEIGHT, h.NODE_TITLE_HEIGHT); + 0 == d.order && a.strokeRect(d.pos[0] - h.NODE_TITLE_HEIGHT + 0.5, d.pos[1] - h.NODE_TITLE_HEIGHT + 0.5, h.NODE_TITLE_HEIGHT, h.NODE_TITLE_HEIGHT); a.fillStyle = "#FFF"; - a.fillText(d.order, d.pos[0] + -0.5 * k.NODE_TITLE_HEIGHT, d.pos[1] - 6); + a.fillText(d.order, d.pos[0] + -0.5 * h.NODE_TITLE_HEIGHT, d.pos[1] - 6); } a.globalAlpha = 1; }; @@ -2808,31 +2854,45 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var e = a.size[0]; a = a.widgets; b += 2; - var l = k.NODE_WIDGET_HEIGHT, m = 0.5 < this.scale; + var k = h.NODE_WIDGET_HEIGHT, n = 0.5 < this.scale; c.save(); c.globalAlpha = this.editor_alpha; for (var f = 0; f < a.length; ++f) { - var n = a[f], h = b; - n.y && (h = n.y); - n.last_y = h; + var m = a[f], q = b; + m.y && (q = m.y); + m.last_y = q; c.strokeStyle = "#AAA"; c.fillStyle = "#222"; c.textAlign = "left"; - switch(n.type) { + switch(m.type) { case "button": - n.clicked && (c.fillStyle = "#AAA", n.clicked = !1, this.dirty_canvas = !0); - c.fillRect(10, h, e - 20, l); - c.strokeRect(10, h, e - 20, l); - m && (c.textAlign = "center", c.fillStyle = "#AAA", c.fillText(n.name, 0.5 * e, h + 0.7 * l)); + m.clicked && (c.fillStyle = "#AAA", m.clicked = !1, this.dirty_canvas = !0); + c.fillRect(10, q, e - 20, k); + c.strokeRect(10, q, e - 20, k); + n && (c.textAlign = "center", c.fillStyle = "#AAA", c.fillText(m.name, 0.5 * e, q + 0.7 * k)); + break; + case "toggle": + c.textAlign = "left"; + c.strokeStyle = "#AAA"; + c.fillStyle = "#111"; + c.beginPath(); + c.roundRect(10, b, e - 20, k, 0.5 * k); + c.fill(); + c.stroke(); + c.fillStyle = m.value ? "#89A" : "#333"; + c.beginPath(); + c.arc(e - 20, q + 0.5 * k, 0.36 * k, 0, 2 * Math.PI); + c.fill(); + n && (c.fillStyle = "#999", null != m.name && c.fillText(m.name, 20, q + 0.7 * k), c.fillStyle = m.value ? "#DDD" : "#888", c.textAlign = "right", c.fillText(m.value ? m.options.on || "true" : m.options.off || "false", e - 30, q + 0.7 * k)); break; case "slider": c.fillStyle = "#111"; - c.fillRect(10, h, e - 20, l); - var q = (n.value - n.options.min) / (n.options.max - n.options.min); - c.fillStyle = d == n ? "#89A" : "#678"; - c.fillRect(10, h, q * (e - 20), l); - c.strokeRect(10, h, e - 20, l); - m && (c.textAlign = "center", c.fillStyle = "#DDD", c.fillText(n.name + " " + Number(n.value).toFixed(3), 0.5 * e, h + 0.7 * l)); + c.fillRect(10, q, e - 20, k); + var l = (m.value - m.options.min) / (m.options.max - m.options.min); + c.fillStyle = d == m ? "#89A" : "#678"; + c.fillRect(10, q, l * (e - 20), k); + c.strokeRect(10, q, e - 20, k); + n && (c.textAlign = "center", c.fillStyle = "#DDD", c.fillText(m.name + " " + Number(m.value).toFixed(3), 0.5 * e, q + 0.7 * k)); break; case "number": case "combo": @@ -2840,24 +2900,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.strokeStyle = "#AAA"; c.fillStyle = "#111"; c.beginPath(); - c.roundRect(10, b, e - 20, l, 0.5 * l); + c.roundRect(10, b, e - 20, k, 0.5 * k); c.fill(); c.stroke(); - c.fillStyle = "#AAA"; - c.beginPath(); - c.moveTo(26, b + 5); - c.lineTo(16, b + 0.5 * l); - c.lineTo(26, b + l - 5); - c.moveTo(e - 26, b + 5); - c.lineTo(e - 16, b + 0.5 * l); - c.lineTo(e - 26, b + l - 5); - c.fill(); - m && (c.fillStyle = "#999", c.fillText(n.name, 30, h + 0.7 * l), c.fillStyle = "#DDD", c.textAlign = "right", "number" == n.type ? c.fillText(Number(n.value).toFixed(void 0 !== n.options.precision ? n.options.precision : 3), e - 40, h + 0.7 * l) : c.fillText(n.value, e - 40, h + 0.7 * l)); + n && (c.fillStyle = "#AAA", c.beginPath(), c.moveTo(26, b + 5), c.lineTo(16, b + 0.5 * k), c.lineTo(26, b + k - 5), c.moveTo(e - 26, b + 5), c.lineTo(e - 16, b + 0.5 * k), c.lineTo(e - 26, b + k - 5), c.fill(), c.fillStyle = "#999", c.fillText(m.name, 30, q + 0.7 * k), c.fillStyle = "#DDD", c.textAlign = "right", "number" == m.type ? c.fillText(Number(m.value).toFixed(void 0 !== m.options.precision ? m.options.precision : 3), e - 40, q + 0.7 * k) : c.fillText(m.value, e - 40, q + 0.7 * + k)); break; case "text": - c.textAlign = "left", c.strokeStyle = "#AAA", c.fillStyle = "#111", c.beginPath(), c.roundRect(10, b, e - 20, l, 0.5 * l), c.fill(), c.stroke(), m && (c.fillStyle = "#999", null != n.name && c.fillText(n.name, 20, h + 0.7 * l), c.fillStyle = "#DDD", c.textAlign = "right", c.fillText(n.value, e - 20, h + 0.7 * l)); + c.textAlign = "left", c.strokeStyle = "#AAA", c.fillStyle = "#111", c.beginPath(), c.roundRect(10, b, e - 20, k, 0.5 * k), c.fill(), c.stroke(), n && (c.fillStyle = "#999", null != m.name && c.fillText(m.name, 20, q + 0.7 * k), c.fillStyle = "#DDD", c.textAlign = "right", c.fillText(m.value, e - 20, q + 0.7 * k)); } - b += l + 4; + b += k + 4; } c.restore(); }; @@ -2865,39 +2917,42 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (!a.widgets || !a.widgets.length) { return null; } - for (var e = b[0] - a.pos[0], l = b[1] - a.pos[1], m = a.size[0], f = this, n = 0; n < a.widgets.length; ++n) { - var h = a.widgets[n]; - if (h == d || 6 < e && e < m - 12 && l > h.last_y && l < h.last_y + k.NODE_WIDGET_HEIGHT) { - switch(h.type) { + for (var e = b[0] - a.pos[0], k = b[1] - a.pos[1], n = a.size[0], f = this, m = 0; m < a.widgets.length; ++m) { + var q = a.widgets[m]; + if (q == d || 6 < e && e < n - 12 && k > q.last_y && k < q.last_y + h.NODE_WIDGET_HEIGHT) { + switch(q.type) { case "button": - h.callback && setTimeout(function() { - h.callback(h, f, a, b); + q.callback && setTimeout(function() { + q.callback(q, f, a, b); }, 20); - this.dirty_canvas = h.clicked = !0; + this.dirty_canvas = q.clicked = !0; break; case "slider": - c = Math.clamp((e - 10) / (m - 20), 0, 1); - h.value = h.options.min + (h.options.max - h.options.min) * c; - h.callback && setTimeout(function() { - h.callback(h.value, f, a, b); + c = Math.clamp((e - 10) / (n - 20), 0, 1); + q.value = q.options.min + (q.options.max - q.options.min) * c; + q.callback && setTimeout(function() { + q.callback(q.value, f, a, b); }, 20); this.dirty_canvas = !0; break; case "number": case "combo": - "mousemove" == c.type && "number" == h.type ? (h.value += 0.1 * c.deltaX * (h.options.step || 1), null != h.options.min && h.value < h.options.min && (h.value = h.options.min), null != h.options.max && h.value > h.options.max && (h.value = h.options.max)) : "mousedown" == c.type && (c = 40 > e ? -1 : e > m - 40 ? 1 : 0, "number" == h.type ? (h.value += 0.1 * c * (h.options.step || 1), null != h.options.min && h.value < h.options.min && (h.value = h.options.min), null != h.options.max && - h.value > h.options.max && (h.value = h.options.max)) : c && (c = h.options.values.indexOf(h.value) + c, c >= h.options.values.length && (c = 0), 0 > c && (c = h.options.values.length - 1), h.value = h.options.values[c])); - h.callback && setTimeout(function() { + "mousemove" == c.type && "number" == q.type ? (q.value += 0.1 * c.deltaX * (q.options.step || 1), null != q.options.min && q.value < q.options.min && (q.value = q.options.min), null != q.options.max && q.value > q.options.max && (q.value = q.options.max)) : "mousedown" == c.type && (c = 40 > e ? -1 : e > n - 40 ? 1 : 0, "number" == q.type ? (q.value += 0.1 * c * (q.options.step || 1), null != q.options.min && q.value < q.options.min && (q.value = q.options.min), null != q.options.max && + q.value > q.options.max && (q.value = q.options.max)) : c && (c = q.options.values.indexOf(q.value) + c, c >= q.options.values.length && (c = 0), 0 > c && (c = q.options.values.length - 1), q.value = q.options.values[c])); + q.callback && setTimeout(function() { this.callback(this.value, f, a, b); - }.bind(h), 20); + }.bind(q), 20); this.dirty_canvas = !0; break; + case "toggle": + "mousedown" == c.type && (q.value = !q.value); + break; case "text": - "mousedown" == c.type && this.prompt("Value", h.value, function(a) { + "mousedown" == c.type && this.prompt("Value", q.value, function(a) { this.value = a; - }.bind(h), c); + }.bind(q), c); } - return h; + return q; } } return null; @@ -2910,20 +2965,20 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b.font = "24px Arial"; for (var c = 0; c < a.length; ++c) { var d = a[c]; - if (v(this.visible_area, d._bounding)) { + if (w(this.visible_area, d._bounding)) { b.fillStyle = d.color || "#335"; b.strokeStyle = d.color || "#335"; - var g = d._pos, l = d._size; + var g = d._pos, k = d._size; b.globalAlpha = 0.25 * this.editor_alpha; b.beginPath(); - b.rect(g[0] + 0.5, g[1] + 0.5, l[0], l[1]); + b.rect(g[0] + 0.5, g[1] + 0.5, k[0], k[1]); b.fill(); b.globalAlpha = this.editor_alpha; b.stroke(); b.beginPath(); - b.moveTo(g[0] + l[0], g[1] + l[1]); - b.lineTo(g[0] + l[0] - 10, g[1] + l[1]); - b.lineTo(g[0] + l[0], g[1] + l[1] - 10); + b.moveTo(g[0] + k[0], g[1] + k[1]); + b.lineTo(g[0] + k[0] - 10, g[1] + k[1]); + b.lineTo(g[0] + k[0], g[1] + k[1] - 10); b.fill(); b.fillText(d.title, g[0] + 4, g[1] + 24); } @@ -2977,39 +3032,39 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.onGroupAdd = function(a, b, c) { a = d.active_canvas; a.getCanvasWindow(); - b = new k.LGraphGroup; + b = new h.LGraphGroup; b.pos = a.convertEventToCanvas(c); a.graph.add(b); }; - d.onMenuAdd = function(a, b, c, m) { + d.onMenuAdd = function(a, b, c, n) { function e(a, b) { - b = m.getFirstEvent(); - if (a = k.createNode(a.value)) { - a.pos = l.convertEventToCanvas(b), l.graph.add(a); + b = n.getFirstEvent(); + if (a = h.createNode(a.value)) { + a.pos = k.convertEventToCanvas(b), k.graph.add(a); } } - var l = d.active_canvas, f = l.getCanvasWindow(); - a = k.getNodeTypesCategories(); + var k = d.active_canvas, f = k.getCanvasWindow(); + a = h.getNodeTypesCategories(); b = []; - for (var h in a) { - a[h] && b.push({value:a[h], content:a[h], has_submenu:!0}); + for (var m in a) { + a[m] && b.push({value:a[m], content:a[m], has_submenu:!0}); } - var n = new k.ContextMenu(b, {event:c, callback:function(a, b, c) { - a = k.getNodeTypesInCategory(a.value, l.filter); + var l = new h.ContextMenu(b, {event:c, callback:function(a, b, c) { + a = h.getNodeTypesInCategory(a.value, k.filter); b = []; for (var g in a) { - b.push({content:a[g].title, value:a[g].type}); + a[g].skip_list || b.push({content:a[g].title, value:a[g].type}); } - new k.ContextMenu(b, {event:c, callback:e, parentMenu:n}, f); + new h.ContextMenu(b, {event:c, callback:e, parentMenu:l}, f); return !1; - }, parentMenu:m}, f); + }, parentMenu:n}, f); return !1; }; d.onMenuCollapseAll = function() { }; d.onMenuNodeEdit = function() { }; - d.showMenuNodeOptionalInputs = function(a, b, c, m, g) { + d.showMenuNodeOptionalInputs = function(a, b, c, n, g) { if (g) { var e = this; a = d.active_canvas.getCanvasWindow(); @@ -3017,13 +3072,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { g.onGetInputs && (b = g.onGetInputs()); var f = []; if (b) { - for (var h in b) { - var n = b[h]; - if (n) { - var q = n[0]; - n[2] && n[2].label && (q = n[2].label); - q = {content:q, value:n}; - n[1] == k.ACTION && (q.className = "event"); + for (var m in b) { + var l = b[m]; + if (l) { + var q = l[0]; + l[2] && l[2].label && (q = l[2].label); + q = {content:q, value:l}; + l[1] == h.ACTION && (q.className = "event"); f.push(q); } else { f.push(null); @@ -3032,23 +3087,23 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } this.onMenuNodeInputs && (f = this.onMenuNodeInputs(f)); if (f.length) { - return new k.ContextMenu(f, {event:c, callback:function(a, b, c) { + return new h.ContextMenu(f, {event:c, callback:function(a, b, c) { g && (a.callback && a.callback.call(e, g, a, b, c), a.value && (g.addInput(a.value[0], a.value[1], a.value[2]), g.setDirtyCanvas(!0, !0))); - }, parentMenu:m, node:g}, a), !1; + }, parentMenu:n, node:g}, a), !1; } } }; - d.showMenuNodeOptionalOutputs = function(a, b, c, m, g) { + d.showMenuNodeOptionalOutputs = function(a, b, c, n, g) { function e(a, b, c) { if (g && (a.callback && a.callback.call(f, g, a, b, c), a.value)) { if (c = a.value[1], !c || c.constructor !== Object && c.constructor !== Array) { g.addOutput(a.value[0], a.value[1], a.value[2]), g.setDirtyCanvas(!0, !0); } else { a = []; - for (var l in c) { - a.push({content:l, value:c[l]}); + for (var k in c) { + a.push({content:k, value:c[k]}); } - new k.ContextMenu(a, {event:b, callback:e, parentMenu:m, node:g}); + new h.ContextMenu(a, {event:b, callback:e, parentMenu:n, node:g}); return !1; } } @@ -3058,41 +3113,41 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a = d.active_canvas.getCanvasWindow(); b = g.optional_outputs; g.onGetOutputs && (b = g.onGetOutputs()); - var h = []; + var m = []; if (b) { - for (var n in b) { - var q = b[n]; + for (var l in b) { + var q = b[l]; if (!q) { - h.push(null); + m.push(null); } else { if (!g.flags || !g.flags.skip_repeated_outputs || -1 == g.findOutputSlot(q[0])) { - var t = q[0]; - q[2] && q[2].label && (t = q[2].label); - t = {content:t, value:q}; - q[1] == k.EVENT && (t.className = "event"); - h.push(t); + var r = q[0]; + q[2] && q[2].label && (r = q[2].label); + r = {content:r, value:q}; + q[1] == h.EVENT && (r.className = "event"); + m.push(r); } } } } - this.onMenuNodeOutputs && (h = this.onMenuNodeOutputs(h)); - if (h.length) { - return new k.ContextMenu(h, {event:c, callback:e, parentMenu:m, node:g}, a), !1; + this.onMenuNodeOutputs && (m = this.onMenuNodeOutputs(m)); + if (m.length) { + return new h.ContextMenu(m, {event:c, callback:e, parentMenu:n, node:g}, a), !1; } } }; - d.onShowMenuNodeProperties = function(a, b, c, m, g) { + d.onShowMenuNodeProperties = function(a, b, c, n, g) { if (g && g.properties) { var e = d.active_canvas; b = e.getCanvasWindow(); - var f = [], h; - for (h in g.properties) { - a = void 0 !== g.properties[h] ? g.properties[h] : " ", a = d.decodeHTML(a), f.push({content:"" + h + "" + a + "", value:h}); + var f = [], m; + for (m in g.properties) { + a = void 0 !== g.properties[m] ? g.properties[m] : " ", a = d.decodeHTML(a), f.push({content:"" + m + "" + a + "", value:m}); } if (f.length) { - return new k.ContextMenu(f, {event:c, callback:function(a, b, c, l) { + return new h.ContextMenu(f, {event:c, callback:function(a, b, c, k) { g && (b = this.getBoundingClientRect(), e.showEditPropertyValue(g, a.value, {position:[b.left, b.top]})); - }, parentMenu:m, allow_html:!0, node:g}, b), !1; + }, parentMenu:n, allow_html:!0, node:g}, b), !1; } } }; @@ -3104,53 +3159,53 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.onResizeNode = function(a, b, c, d, g) { g && (g.size = g.computeSize(), g.setDirtyCanvas(!0, !0)); }; - d.onShowTitleEditor = function(a, b, c, m, g) { + d.onShowTitleEditor = function(a, b, c, n, g) { function e() { - g.title = k.value; + g.title = h.value; f.parentNode.removeChild(f); g.setDirtyCanvas(!0, !0); } var f = document.createElement("div"); f.className = "graphdialog"; f.innerHTML = "Title"; - var k = f.querySelector("input"); - k && (k.value = g.title, k.addEventListener("blur", function(a) { + var h = f.querySelector("input"); + h && (h.value = g.title, h.addEventListener("blur", function(a) { this.focus(); - }), k.addEventListener("keydown", function(a) { + }), h.addEventListener("keydown", function(a) { 13 == a.keyCode && (e(), a.preventDefault(), a.stopPropagation()); })); a = d.active_canvas.canvas; b = a.getBoundingClientRect(); - m = c = -20; - b && (c -= b.left, m -= b.top); - event ? (f.style.left = event.pageX + c + "px", f.style.top = event.pageY + m + "px") : (f.style.left = 0.5 * a.width + c + "px", f.style.top = 0.5 * a.height + m + "px"); + n = c = -20; + b && (c -= b.left, n -= b.top); + event ? (f.style.left = event.pageX + c + "px", f.style.top = event.pageY + n + "px") : (f.style.left = 0.5 * a.width + c + "px", f.style.top = 0.5 * a.height + n + "px"); f.querySelector("button").addEventListener("click", e); a.parentNode.appendChild(f); }; - d.prototype.prompt = function(a, b, c, m) { + d.prototype.prompt = function(a, b, c, n) { var e = this; a = a || ""; - var l = document.createElement("div"); - l.className = "graphdialog rounded"; - l.innerHTML = " "; - l.close = function() { + var k = document.createElement("div"); + k.className = "graphdialog rounded"; + k.innerHTML = " "; + k.close = function() { e.prompt_box = null; - l.parentNode.removeChild(l); + k.parentNode.removeChild(k); }; - l.addEventListener("mouseleave", function(a) { - l.close(); + k.addEventListener("mouseleave", function(a) { + k.close(); }); e.prompt_box && e.prompt_box.close(); - e.prompt_box = l; - l.querySelector(".name").innerText = a; - l.querySelector(".value").value = b; - var f = l.querySelector("input"); + e.prompt_box = k; + k.querySelector(".name").innerText = a; + k.querySelector(".value").value = b; + var f = k.querySelector("input"); f.addEventListener("keydown", function(a) { if (27 == a.keyCode) { - l.close(); + k.close(); } else { if (13 == a.keyCode) { - c && c(this.value), l.close(); + c && c(this.value), k.close(); } else { return; } @@ -3158,21 +3213,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.preventDefault(); a.stopPropagation(); }); - l.querySelector("button").addEventListener("click", function(a) { + k.querySelector("button").addEventListener("click", function(a) { c && c(f.value); e.setDirty(!0); - l.close(); + k.close(); }); a = d.active_canvas.canvas; b = a.getBoundingClientRect(); - var k = -20, h = -20; - b && (k -= b.left, h -= b.top); - m ? (l.style.left = m.pageX + k + "px", l.style.top = m.pageY + h + "px") : (l.style.left = 0.5 * a.width + k + "px", l.style.top = 0.5 * a.height + h + "px"); - a.parentNode.appendChild(l); + var h = -20, m = -20; + b && (h -= b.left, m -= b.top); + n ? (k.style.left = n.pageX + h + "px", k.style.top = n.pageY + m + "px") : (k.style.left = 0.5 * a.width + h + "px", k.style.top = 0.5 * a.height + m + "px"); + a.parentNode.appendChild(k); setTimeout(function() { f.focus(); }, 10); - return l; + return k; }; d.search_filter = !1; d.search_limit = -1; @@ -3180,14 +3235,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { function b(b) { if (b) { if (g.onSearchBoxSelection) { - g.onSearchBoxSelection(b, a, v); + g.onSearchBoxSelection(b, a, u); } else { - if (b = k.createNode(b)) { - b.pos = v.convertEventToCanvas(a), v.graph.add(b); + if (b = h.createNode(b)) { + b.pos = u.convertEventToCanvas(a), u.graph.add(b); } } } - l.close(); + k.close(); } function c(a) { var b = q; @@ -3195,18 +3250,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { q ? (q = a ? q.nextSibling : q.previousSibling) || (q = b) : q = a ? f.childNodes[0] : f.childNodes[f.childNodes.length]; q && (q.classList.add("selected"), q.scrollIntoView()); } - function m() { - n = null; - var a = t.value; - h = null; + function n() { + l = null; + var a = r.value; + m = null; f.innerHTML = ""; if (a) { if (g.onSearchBox) { - g.onSearchBox(help, a, v); + g.onSearchBox(help, a, u); } else { var c = function(a) { var c = document.createElement("div"); - h || (h = a); + m || (m = a); c.innerText = a; c.className = "litegraph lite-search-item"; c.addEventListener("click", function(a) { @@ -3216,12 +3271,12 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }, e = 0; if (d.search_filter) { a = a.toLowerCase(); - for (var l = Object.keys(k.registered_node_types).filter(function(b) { + for (var k = Object.keys(h.registered_node_types).filter(function(b) { return -1 !== b.toLowerCase().indexOf(a); - }), K = 0; K < l.length && !(c(l[K]), -1 !== d.search_limit && e++ > d.search_limit); K++) { + }), K = 0; K < k.length && !(c(k[K]), -1 !== d.search_limit && e++ > d.search_limit); K++) { } } else { - for (K in k.registered_node_types) { + for (K in h.registered_node_types) { if (-1 != K.indexOf(a) && (c(K), -1 !== d.search_limit && e++ > d.search_limit)) { break; } @@ -3230,22 +3285,22 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } } - var g = this, l = document.createElement("div"); - l.className = "litegraph litesearchbox graphdialog rounded"; - l.innerHTML = "Search
"; - l.close = function() { + var g = this, k = document.createElement("div"); + k.className = "litegraph litesearchbox graphdialog rounded"; + k.innerHTML = "Search
"; + k.close = function() { g.search_box = null; - l.parentNode.removeChild(l); + k.parentNode.removeChild(k); }; - l.addEventListener("mouseleave", function(a) { - l.close(); + k.addEventListener("mouseleave", function(a) { + k.close(); }); g.search_box && g.search_box.close(); - g.search_box = l; - var f = l.querySelector(".helper"), h = null, n = null, q = null, t = l.querySelector("input"); - t && (t.addEventListener("blur", function(a) { + g.search_box = k; + var f = k.querySelector(".helper"), m = null, l = null, q = null, r = k.querySelector("input"); + r && (r.addEventListener("blur", function(a) { this.focus(); - }), t.addEventListener("keydown", function(a) { + }), r.addEventListener("keydown", function(a) { if (38 == a.keyCode) { c(!1); } else { @@ -3253,13 +3308,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c(!0); } else { if (27 == a.keyCode) { - l.close(); + k.close(); } else { if (13 == a.keyCode) { - q ? b(q.innerHTML) : h ? b(h) : l.close(); + q ? b(q.innerHTML) : m ? b(m) : k.close(); } else { - n && clearInterval(n); - n = setTimeout(m, 10); + l && clearInterval(l); + l = setTimeout(n, 10); return; } } @@ -3268,86 +3323,86 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.preventDefault(); a.stopPropagation(); })); - var v = d.active_canvas, u = v.canvas, w = u.getBoundingClientRect(), B = -20, D = -20; - w && (B -= w.left, D -= w.top); - a ? (l.style.left = a.pageX + B + "px", l.style.top = a.pageY + D + "px") : (l.style.left = 0.5 * u.width + B + "px", l.style.top = 0.5 * u.height + D + "px"); - u.parentNode.appendChild(l); - t.focus(); - return l; + var u = d.active_canvas, w = u.canvas, v = w.getBoundingClientRect(), x = -20, D = -20; + v && (x -= v.left, D -= v.top); + a ? (k.style.left = a.pageX + x + "px", k.style.top = a.pageY + D + "px") : (k.style.left = 0.5 * w.width + x + "px", k.style.top = 0.5 * w.height + D + "px"); + w.parentNode.appendChild(k); + r.focus(); + return k; }; d.prototype.showEditPropertyValue = function(a, b, c) { function e() { - g(n.value); + g(l.value); } function g(c) { "number" == typeof a.properties[b] && (c = Number(c)); - "array" == l && (c = c.split(",").map(Number)); + "array" == k && (c = c.split(",").map(Number)); a.properties[b] = c; a._graph && a._graph._version++; if (a.onPropertyChanged) { a.onPropertyChanged(b, c); } - h.close(); + m.close(); a.setDirtyCanvas(!0, !0); } if (a && void 0 !== a.properties[b]) { c = c || {}; - var l = "string"; - null !== a.properties[b] && (l = typeof a.properties[b]); - "object" == l && a.properties[b].length && (l = "array"); + var k = "string"; + null !== a.properties[b] && (k = typeof a.properties[b]); + "object" == k && a.properties[b].length && (k = "array"); var d = null; a.getPropertyInfo && (d = a.getPropertyInfo(b)); if (a.properties_info) { - for (var m = 0; m < a.properties_info.length; ++m) { - if (a.properties_info[m].name == b) { - d = a.properties_info[m]; + for (var n = 0; n < a.properties_info.length; ++n) { + if (a.properties_info[n].name == b) { + d = a.properties_info[n]; break; } } } - void 0 !== d && null !== d && d.type && (l = d.type); + void 0 !== d && null !== d && d.type && (k = d.type); var f = ""; - if ("string" == l || "number" == l || "array" == l) { + if ("string" == k || "number" == k || "array" == k) { f = ""; } else { - if ("enum" == l && d.values) { + if ("enum" == k && d.values) { f = ""; } else { - if ("boolean" == l) { + if ("boolean" == k) { f = ""; } else { - console.warn("unknown type: " + l); + console.warn("unknown type: " + k); return; } } } - var h = this.createDialog("" + b + "" + f + "", c); - if ("enum" == l && d.values) { - var n = h.querySelector("select"); - n.addEventListener("change", function(a) { + var m = this.createDialog("" + b + "" + f + "", c); + if ("enum" == k && d.values) { + var l = m.querySelector("select"); + l.addEventListener("change", function(a) { g(a.target.value); }); } else { - if ("boolean" == l) { - (n = h.querySelector("input")) && n.addEventListener("click", function(a) { - g(!!n.checked); + if ("boolean" == k) { + (l = m.querySelector("input")) && l.addEventListener("click", function(a) { + g(!!l.checked); }); } else { - if (n = h.querySelector("input")) { - n.addEventListener("blur", function(a) { + if (l = m.querySelector("input")) { + l.addEventListener("blur", function(a) { this.focus(); - }), n.value = void 0 !== a.properties[b] ? a.properties[b] : "", n.addEventListener("keydown", function(a) { + }), l.value = void 0 !== a.properties[b] ? a.properties[b] : "", l.addEventListener("keydown", function(a) { 13 == a.keyCode && (e(), a.preventDefault(), a.stopPropagation()); }); } } } - h.querySelector("button").addEventListener("click", e); + m.querySelector("button").addEventListener("click", e); } }; d.prototype.createDialog = function(a, b) { @@ -3374,26 +3429,26 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { g.pin(); }; d.onMenuNodeMode = function(a, b, c, d, g) { - new k.ContextMenu(["Always", "On Event", "On Trigger", "Never"], {event:c, callback:function(a) { + new h.ContextMenu(["Always", "On Event", "On Trigger", "Never"], {event:c, callback:function(a) { if (g) { switch(a) { case "On Event": - g.mode = k.ON_EVENT; + g.mode = h.ON_EVENT; break; case "On Trigger": - g.mode = k.ON_TRIGGER; + g.mode = h.ON_TRIGGER; break; case "Never": - g.mode = k.NEVER; + g.mode = h.NEVER; break; default: - g.mode = k.ALWAYS; + g.mode = h.ALWAYS; } } }, parentMenu:d, node:g}); return !1; }; - d.onMenuNodeColors = function(a, b, c, m, g) { + d.onMenuNodeColors = function(a, b, c, n, g) { if (!g) { throw "no node for color"; } @@ -3402,16 +3457,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { for (var e in d.node_colors) { a = d.node_colors[e], a = {value:e, content:"" + e + ""}, b.push(a); } - new k.ContextMenu(b, {event:c, callback:function(a) { - g && ((a = a.value ? d.node_colors[a.value] : null) ? g.constructor === k.LGraphGroup ? g.color = a.groupcolor : (g.color = a.color, g.bgcolor = a.bgcolor) : (delete g.color, delete g.bgcolor), g.setDirtyCanvas(!0, !0)); - }, parentMenu:m, node:g}); + new h.ContextMenu(b, {event:c, callback:function(a) { + g && ((a = a.value ? d.node_colors[a.value] : null) ? g.constructor === h.LGraphGroup ? g.color = a.groupcolor : (g.color = a.color, g.bgcolor = a.bgcolor) : (delete g.color, delete g.bgcolor), g.setDirtyCanvas(!0, !0)); + }, parentMenu:n, node:g}); return !1; }; d.onMenuNodeShapes = function(a, b, c, d, g) { if (!g) { throw "no node passed"; } - new k.ContextMenu(k.VALID_SHAPES, {event:c, callback:function(a) { + new h.ContextMenu(h.VALID_SHAPES, {event:c, callback:function(a) { g && (g.shape = a, g.setDirtyCanvas(!0)); }, parentMenu:d, node:g}); return !1; @@ -3431,7 +3486,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (this.getMenuOptions) { var a = this.getMenuOptions(); } else { - a = [{content:"Add Node", has_submenu:!0, callback:d.onMenuAdd}, {content:"Add Group", callback:d.onGroupAdd}], this._graph_stack && 0 < this._graph_stack.length && (a = [{content:"Close subgraph", callback:this.closeSubgraph.bind(this)}, null].concat(a)); + a = [{content:"Add Node", has_submenu:!0, callback:d.onMenuAdd}, {content:"Add Group", callback:d.onGroupAdd}], this._graph_stack && 0 < this._graph_stack.length && a.push(null, {content:"Close subgraph", callback:this.closeSubgraph.bind(this)}); } if (this.getExtraMenuOptions) { var b = this.getExtraMenuOptions(this, a); @@ -3459,42 +3514,46 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return [{content:"Title", callback:d.onShowTitleEditor}, {content:"Color", has_submenu:!0, callback:d.onMenuNodeColors}, null, {content:"Remove", callback:d.onMenuNodeRemove}]; }; d.prototype.processContextMenu = function(a, b) { - var c = this, m = d.active_canvas.getCanvasWindow(), g = null, l = {event:b, callback:function(b, e, g) { + var c = this, n = d.active_canvas.getCanvasWindow(), g = null, k = {event:b, callback:function(b, e, d) { if (b) { if ("Remove Slot" == b.content) { b = b.slot, b.input ? a.removeInput(b.slot) : b.output && a.removeOutput(b.slot); } else { - if ("Rename Slot" == b.content) { - b = b.slot; - var d = b.input ? a.getInputInfo(b.slot) : a.getOutputInfo(b.slot), l = c.createDialog("Name", e), m = l.querySelector("input"); - m && d && (m.value = d.label); - l.querySelector("button").addEventListener("click", function(a) { - m.value && (d && (d.label = m.value), c.setDirty(!0)); - l.close(); - }); + if ("Disconnect Links" == b.content) { + b = b.slot, b.output ? a.disconnectOutput(b.slot) : b.input && a.disconnectInput(b.slot); + } else { + if ("Rename Slot" == b.content) { + b = b.slot; + var g = b.input ? a.getInputInfo(b.slot) : a.getOutputInfo(b.slot), k = c.createDialog("Name", e), n = k.querySelector("input"); + n && g && (n.value = g.label); + k.querySelector("button").addEventListener("click", function(a) { + n.value && (g && (g.label = n.value), c.setDirty(!0)); + k.close(); + }); + } } } } }, extra:a}, f = null; a && (f = a.getSlotInPosition(b.canvasX, b.canvasY), d.active_node = a); - f ? (g = [], g.push(f.locked ? "Cannot remove" : {content:"Remove Slot", slot:f}), g.push(f.nameLocked ? "Cannot rename" : {content:"Rename Slot", slot:f}), l.title = (f.input ? f.input.type : f.output.type) || "*", f.input && f.input.type == k.ACTION && (l.title = "Action"), f.output && f.output.type == k.EVENT && (l.title = "Event")) : a ? g = this.getNodeMenuOptions(a) : (g = this.getCanvasMenuOptions(), (b = this.graph.getGroupOnPos(b.canvasX, b.canvasY)) && g.push(null, {content:"Edit Group", - has_submenu:!0, submenu:{title:"Group", extra:b, options:this.getGroupMenuOptions(b)}})); - g && new k.ContextMenu(g, l, m); + f ? (g = [], f && f.output && f.output.links && f.output.links.length && g.push({content:"Disconnect Links", slot:f}), g.push(f.locked ? "Cannot remove" : {content:"Remove Slot", slot:f}), g.push(f.nameLocked ? "Cannot rename" : {content:"Rename Slot", slot:f}), k.title = (f.input ? f.input.type : f.output.type) || "*", f.input && f.input.type == h.ACTION && (k.title = "Action"), f.output && f.output.type == h.EVENT && (k.title = "Event")) : a ? g = this.getNodeMenuOptions(a) : (g = this.getCanvasMenuOptions(), + (b = this.graph.getGroupOnPos(b.canvasX, b.canvasY)) && g.push(null, {content:"Edit Group", has_submenu:!0, submenu:{title:"Group", extra:b, options:this.getGroupMenuOptions(b)}})); + g && new h.ContextMenu(g, k, n); }; - this.CanvasRenderingContext2D && (CanvasRenderingContext2D.prototype.roundRect = function(a, b, c, d, g, l) { + this.CanvasRenderingContext2D && (CanvasRenderingContext2D.prototype.roundRect = function(a, b, c, d, g, k) { void 0 === g && (g = 5); - void 0 === l && (l = g); + void 0 === k && (k = g); this.moveTo(a + g, b); this.lineTo(a + c - g, b); this.quadraticCurveTo(a + c, b, a + c, b + g); - this.lineTo(a + c, b + d - l); - this.quadraticCurveTo(a + c, b + d, a + c - l, b + d); - this.lineTo(a + l, b + d); - this.quadraticCurveTo(a, b + d, a, b + d - l); + this.lineTo(a + c, b + d - k); + this.quadraticCurveTo(a + c, b + d, a + c - k, b + d); + this.lineTo(a + k, b + d); + this.quadraticCurveTo(a, b + d, a, b + d - k); this.lineTo(a, b + g); this.quadraticCurveTo(a, b, a + g, b); }); - k.compareObjects = function(a, b) { + h.compareObjects = function(a, b) { for (var c in a) { if (a[c] != b[c]) { return !1; @@ -3502,99 +3561,99 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return !0; }; - k.distance = q; - k.colorToString = function(a) { + h.distance = r; + 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") + ")"; }; - k.isInsideRectangle = t; - k.growBounding = function(a, b, c) { + h.isInsideRectangle = u; + h.growBounding = function(a, b, c) { b < a[0] ? a[0] = b : b > a[2] && (a[2] = b); c < a[1] ? a[1] = c : c > a[3] && (a[3] = c); }; - k.isInsideBounding = function(a, b) { + h.isInsideBounding = function(a, b) { return a[0] < b[0][0] || a[1] < b[0][1] || a[0] > b[1][0] || a[1] > b[1][1] ? !1 : !0; }; - k.overlapBounding = v; - k.hex2num = function(a) { + h.overlapBounding = w; + h.hex2num = function(a) { "#" == a.charAt(0) && (a = a.slice(1)); a = a.toUpperCase(); - for (var b = Array(3), c = 0, d, g, l = 0; 6 > l; l += 2) { - d = "0123456789ABCDEF".indexOf(a.charAt(l)), g = "0123456789ABCDEF".indexOf(a.charAt(l + 1)), b[c] = 16 * d + g, c++; + for (var b = Array(3), c = 0, d, g, k = 0; 6 > k; k += 2) { + d = "0123456789ABCDEF".indexOf(a.charAt(k)), g = "0123456789ABCDEF".indexOf(a.charAt(k + 1)), b[c] = 16 * d + g, c++; } return b; }; - k.num2hex = function(a) { + h.num2hex = function(a) { for (var b = "#", c, d, g = 0; 3 > g; g++) { c = a[g] / 16, d = a[g] % 16, b += "0123456789ABCDEF".charAt(c) + "0123456789ABCDEF".charAt(d); } return b; }; - w.prototype.addItem = function(a, b, c) { + x.prototype.addItem = function(a, b, c) { function e(a) { var b = this.value; b && b.has_submenu && d.call(this, a); } function d(a) { var b = this.value, e = !0; - l.current_submenu && l.current_submenu.close(a); + k.current_submenu && k.current_submenu.close(a); if (c.callback) { - var d = c.callback.call(this, b, c, a, l, c.node); + var d = c.callback.call(this, b, c, a, k, c.node); !0 === d && (e = !1); } - if (b && (b.callback && !c.ignore_item_callbacks && !0 !== b.disabled && (d = b.callback.call(this, b, c, a, l, c.extra), !0 === d && (e = !1)), b.submenu)) { + if (b && (b.callback && !c.ignore_item_callbacks && !0 !== b.disabled && (d = b.callback.call(this, b, c, a, k, c.extra), !0 === d && (e = !1)), b.submenu)) { if (!b.submenu.options) { throw "ContextMenu submenu needs options"; } - new l.constructor(b.submenu.options, {callback:b.submenu.callback, event:a, parentMenu:l, ignore_item_callbacks:b.submenu.ignore_item_callbacks, title:b.submenu.title, extra:b.submenu.extra, autoopen:c.autoopen}); + new k.constructor(b.submenu.options, {callback:b.submenu.callback, event:a, parentMenu:k, ignore_item_callbacks:b.submenu.ignore_item_callbacks, title:b.submenu.title, extra:b.submenu.extra, autoopen:c.autoopen}); e = !1; } - e && !l.lock && l.close(); + e && !k.lock && k.close(); } - var l = this; + var k = this; c = c || {}; - var m = document.createElement("div"); - m.className = "litemenu-entry submenu"; + var n = document.createElement("div"); + n.className = "litemenu-entry submenu"; var f = !1; if (null === b) { - m.classList.add("separator"); + n.classList.add("separator"); } else { - m.innerHTML = b && b.title ? b.title : a; - if (m.value = b) { - b.disabled && (f = !0, m.classList.add("disabled")), (b.submenu || b.has_submenu) && m.classList.add("has_submenu"); + n.innerHTML = b && b.title ? b.title : a; + if (n.value = b) { + b.disabled && (f = !0, n.classList.add("disabled")), (b.submenu || b.has_submenu) && n.classList.add("has_submenu"); } - "function" == typeof b ? (m.dataset.value = a, m.onclick_callback = b) : m.dataset.value = b; - b.className && (m.className += " " + b.className); + "function" == typeof b ? (n.dataset.value = a, n.onclick_callback = b) : n.dataset.value = b; + b.className && (n.className += " " + b.className); } - this.root.appendChild(m); - f || m.addEventListener("click", d); - c.autoopen && m.addEventListener("mouseenter", e); - return m; + this.root.appendChild(n); + f || n.addEventListener("click", d); + c.autoopen && n.addEventListener("mouseenter", e); + return n; }; - w.prototype.close = function(a, b) { + x.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 && !w.isCursorOverElement(a, this.parentMenu.root) && w.trigger(this.parentMenu.root, "mouseleave", a)); + this.parentMenu && !b && (this.parentMenu.lock = !1, this.parentMenu.current_submenu = null, void 0 === a ? this.parentMenu.close() : a && !x.isCursorOverElement(a, this.parentMenu.root) && x.trigger(this.parentMenu.root, "mouseleave", a)); this.current_submenu && this.current_submenu.close(a, !0); }; - w.trigger = function(a, b, c, d) { + x.trigger = function(a, b, c, d) { var e = document.createEvent("CustomEvent"); e.initCustomEvent(b, !0, !0, c); e.srcElement = d; a.dispatchEvent ? a.dispatchEvent(e) : a.__events && a.__events.dispatchEvent(e); return e; }; - w.prototype.getTopMenu = function() { + x.prototype.getTopMenu = function() { return this.options.parentMenu ? this.options.parentMenu.getTopMenu() : this; }; - w.prototype.getFirstEvent = function() { + x.prototype.getFirstEvent = function() { return this.options.parentMenu ? this.options.parentMenu.getFirstEvent() : this.options.event; }; - w.isCursorOverElement = function(a, b) { + x.isCursorOverElement = function(a, b) { var c = a.pageX; a = a.pageY; return (b = b.getBoundingClientRect()) ? a > b.top && a < b.top + b.height && c > b.left && c < b.left + b.width ? !0 : !1 : !1; }; - k.ContextMenu = w; - k.closeAllContextMenus = function(a) { + h.ContextMenu = x; + h.closeAllContextMenus = function(a) { a = a || window; a = a.document.querySelectorAll(".litecontextmenu"); if (a.length) { @@ -3606,7 +3665,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - k.extendClass = function(a, b) { + h.extendClass = function(a, b) { for (var c in b) { a.hasOwnProperty(c) || (a[c] = b[c]); } @@ -3616,7 +3675,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - k.getParameterNames = function(a) { + h.getParameterNames = function(a) { return (a + "").replace(/[/][/].*$/mg, "").replace(/\s+/g, "").replace(/[/][*][^/*]*[*][/]/g, "").split("){", 1)[0].replace(/^[^(]*[(]/, "").replace(/=[^,]+/g, "").split(",").filter(Boolean); }; Math.clamp = function(a, b, c) { @@ -3627,13 +3686,12 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }); })(this); "undefined" != typeof exports && (exports.LiteGraph = this.LiteGraph); -(function(u) { +(function(v) { function f() { this.addOutput("in ms", "number"); this.addOutput("in sec", "number"); } - function h() { - var c = this; + function l() { this.size = [120, 80]; this.subgraph = new LGraph; this.subgraph._subgraph_node = this; @@ -3644,12 +3702,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.subgraph.onGlobalOutputAdded = this.onSubgraphNewGlobalOutput.bind(this); this.subgraph.onGlobalOutputRenamed = this.onSubgraphRenamedGlobalOutput.bind(this); this.subgraph.onGlobalOutputTypeChanged = this.onSubgraphTypeChangeGlobalOutput.bind(this); - this.addWidget("button", "Open Graph", null, function(a, b) { - b.openSubgraph(c.subgraph); - }); - this.bgcolor = "#353"; + this.color = "#335"; + this.bgcolor = "#557"; } - function n() { + function m() { var c = "input_" + (1000 * Math.random()).toFixed(); this.addOutput(c, null); this.properties = {name:c, type:null}; @@ -3690,30 +3746,29 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a.graph && a.graph.changeGlobalInputType(c, a.inputs[0].type); }, enumerable:!0}); } - function q() { + function r() { this.addOutput("value", "number"); this.addProperty("value", 1.0); this.editable = {property:"value", type:"number"}; } - function t() { + function u() { this.size = [60, 20]; this.addInput("value", 0, {label:""}); - this.addOutput("value", 0, {label:""}); - this.addProperty("value", ""); + this.value = 0; } - function v() { + function w() { this.addInput("in", 0); this.addOutput("out", 0); this.size = [40, 20]; } - function w() { - this.mode = m.ON_EVENT; + function x() { + this.mode = n.ON_EVENT; this.size = [60, 20]; this.addProperty("msg", ""); - this.addInput("log", m.EVENT); + this.addInput("log", n.EVENT); this.addInput("msg", 0); } - function k() { + function h() { this.size = [60, 20]; this.addProperty("onExecute", ""); this.addInput("in", ""); @@ -3722,50 +3777,69 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addOutput("out2", ""); this._func = null; } - var m = u.LiteGraph; + var n = v.LiteGraph; f.title = "Time"; f.desc = "Time"; f.prototype.onExecute = function() { this.setOutputData(0, 1000 * this.graph.globaltime); this.setOutputData(1, this.graph.globaltime); }; - m.registerNodeType("basic/time", f); - h.title = "Subgraph"; - h.desc = "Graph inside a node"; - h.prototype.onSubgraphNewGlobalInput = function(c, a) { + n.registerNodeType("basic/time", f); + l.title = "Subgraph"; + l.desc = "Graph inside a node"; + l.prototype.onDrawTitle = function(c) { + if (!this.flags.collapsed) { + c.fillStyle = "#AAA"; + var a = n.NODE_TITLE_HEIGHT, b = this.size[0] - a; + c.fillRect(b, -a, a, a); + c.fillStyle = "#333"; + c.beginPath(); + c.moveTo(b + 0.2 * a, 0.6 * -a); + c.lineTo(b + 0.8 * a, 0.6 * -a); + c.lineTo(b + 0.5 * a, 0.3 * -a); + c.fill(); + } + }; + l.prototype.onMouseDown = function(c, a, b) { + if (!this.flags.collapsed && a[0] > this.size[0] - n.NODE_TITLE_HEIGHT && 0 > a[1]) { + var e = this; + setTimeout(function() { + b.openSubgraph(e.subgraph); + }, 10); + } + }; + l.prototype.onSubgraphNewGlobalInput = function(c, a) { this.addInput(c, a); }; - h.prototype.onSubgraphRenamedGlobalInput = function(c, a) { + l.prototype.onSubgraphRenamedGlobalInput = function(c, a) { c = this.findInputSlot(c); -1 != c && (this.getInputInfo(c).name = a); }; - h.prototype.onSubgraphTypeChangeGlobalInput = function(c, a) { + l.prototype.onSubgraphTypeChangeGlobalInput = function(c, a) { c = this.findInputSlot(c); -1 != c && (this.getInputInfo(c).type = a); }; - h.prototype.onSubgraphNewGlobalOutput = function(c, a) { + l.prototype.onSubgraphNewGlobalOutput = function(c, a) { this.addOutput(c, a); }; - h.prototype.onSubgraphRenamedGlobalOutput = function(c, a) { + l.prototype.onSubgraphRenamedGlobalOutput = function(c, a) { c = this.findOutputSlot(c); -1 != c && (this.getOutputInfo(c).name = a); }; - h.prototype.onSubgraphTypeChangeGlobalOutput = function(c, a) { + l.prototype.onSubgraphTypeChangeGlobalOutput = function(c, a) { c = this.findOutputSlot(c); -1 != c && (this.getOutputInfo(c).type = a); }; - h.prototype.getExtraMenuOptions = function(c) { + l.prototype.getExtraMenuOptions = function(c) { var a = this; return [{content:"Open", callback:function() { c.openSubgraph(a.subgraph); }}]; }; - h.prototype.onDrawForeground = function(c, a) { - }; - h.prototype.onResize = function(c) { + l.prototype.onResize = function(c) { c[1] += 20; }; - h.prototype.onExecute = function() { + l.prototype.onExecute = function() { if (this.inputs) { for (var c = 0; c < this.inputs.length; c++) { var a = this.inputs[c], b = this.getInputData(c); @@ -3779,33 +3853,33 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - h.prototype.configure = function(c) { + l.prototype.configure = function(c) { LGraphNode.prototype.configure.call(this, c); }; - h.prototype.serialize = function() { + l.prototype.serialize = function() { var c = LGraphNode.prototype.serialize.call(this); c.subgraph = this.subgraph.serialize(); return c; }; - h.prototype.clone = function() { - var c = m.createNode(this.type), a = this.serialize(); + l.prototype.clone = function() { + var c = n.createNode(this.type), a = this.serialize(); delete a.id; delete a.inputs; delete a.outputs; c.configure(a); return c; }; - m.registerNodeType("graph/subgraph", h); - n.title = "Input"; - n.desc = "Input of the graph"; - n.prototype.onAdded = function() { + n.registerNodeType("graph/subgraph", l); + m.title = "Input"; + m.desc = "Input of the graph"; + m.prototype.onAdded = function() { this.graph.addGlobalInput(this.properties.name, this.properties.type); }; - n.prototype.onExecute = function() { + m.prototype.onExecute = function() { var c = this.graph.global_inputs[this.properties.name]; c && this.setOutputData(0, c.value); }; - m.registerNodeType("graph/input", n); + n.registerNodeType("graph/input", m); d.title = "Output"; d.desc = "Output of the graph"; d.prototype.onAdded = function() { @@ -3818,59 +3892,70 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._value = this.getInputData(0); this.graph.setGlobalOutputData(this.properties.name, this._value); }; - m.registerNodeType("graph/output", d); - q.title = "Const"; - q.desc = "Constant value"; - q.prototype.setValue = function(c) { + n.registerNodeType("graph/output", d); + r.title = "Const"; + r.desc = "Constant value"; + r.prototype.setValue = function(c) { "string" == typeof c && (c = parseFloat(c)); this.properties.value = c; this.setDirtyCanvas(!0); }; - q.prototype.onExecute = function() { + r.prototype.onExecute = function() { this.setOutputData(0, parseFloat(this.properties.value)); }; - q.prototype.onDrawBackground = function(c) { + r.prototype.onDrawBackground = function(c) { this.outputs[0].label = this.properties.value.toFixed(3); }; - q.prototype.onWidget = function(c, a) { - "value" == a.name && this.setValue(a.value); + n.registerNodeType("basic/const", r); + u.title = "Watch"; + u.desc = "Show value of input"; + u.prototype.onExecute = function() { + this.inputs[0] && (this.value = this.getInputData(0)); }; - m.registerNodeType("basic/const", q); - t.title = "Watch"; - t.desc = "Show value of input"; - t.prototype.onExecute = function() { - this.properties.value = this.getInputData(0); - this.setOutputData(0, this.properties.value); + u.toString = function(c) { + if (null == c) { + return "null"; + } + if (c.constructor === Number) { + return c.toFixed(3); + } + if (c.constructor === Array) { + for (var a = "[", b = 0; b < c.length; ++b) { + a += u.toString(c[b]) + (b + 1 != c.length ? "," : ""); + } + return a + "]"; + } + return String(c); }; - t.prototype.onDrawBackground = function(c) { - this.inputs[0] && null != this.properties.value && (this.inputs[0].label = this.properties.value.constructor === Number ? this.properties.value.toFixed(3) : String(this.properties.value)); + u.prototype.onDrawBackground = function(c) { + this.inputs[0].label = u.toString(this.value); }; - m.registerNodeType("basic/watch", t); - v.title = "Pass"; - v.desc = "Allows to connect different types"; - v.prototype.onExecute = function() { + n.registerNodeType("basic/watch", u); + w.title = "Pass"; + w.desc = "Allows to connect different types"; + w.prototype.onExecute = function() { this.setOutputData(0, this.getInputData(0)); }; - m.registerNodeType("basic/pass", v); - w.title = "Console"; - w.desc = "Show value inside the console"; - w.prototype.onAction = function(c, a) { + n.registerNodeType("basic/pass", w); + x.title = "Console"; + x.desc = "Show value inside the console"; + x.prototype.onAction = function(c, a) { "log" == c ? console.log(a) : "warn" == c ? console.warn(a) : "error" == c && console.error(a); }; - w.prototype.onExecute = function() { + x.prototype.onExecute = function() { var c = this.getInputData(1); null !== c && (this.properties.msg = c); console.log(c); }; - w.prototype.onGetInputs = function() { - return [["log", m.ACTION], ["warn", m.ACTION], ["error", m.ACTION]]; + x.prototype.onGetInputs = function() { + return [["log", n.ACTION], ["warn", n.ACTION], ["error", n.ACTION]]; }; - m.registerNodeType("basic/console", w); - k.title = "Script"; - k.desc = "executes a code"; - k.widgets_info = {onExecute:{type:"code"}}; - k.prototype.onPropertyChanged = function(c, a) { - if ("onExecute" == c && m.allow_scripts) { + n.registerNodeType("basic/console", x); + h.title = "Script"; + h.desc = "executes a code"; + h.widgets_info = {onExecute:{type:"code"}}; + h.prototype.onPropertyChanged = function(c, a) { + if ("onExecute" == c && n.allow_scripts) { this._func = null; try { this._func = new Function(a); @@ -3879,7 +3964,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - k.prototype.onExecute = function() { + h.prototype.onExecute = function() { if (this._func) { try { this._func.call(this); @@ -3888,36 +3973,44 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - m.registerNodeType("basic/script", k); + n.registerNodeType("basic/script", h); })(this); -(function(u) { +(function(v) { function f() { this.size = [60, 20]; - this.addInput("event", d.ACTION); + this.addInput("event", r.ACTION); } - function h() { + function l() { this.size = [60, 20]; - this.addInput("event", d.ACTION); - this.addOutput("event", d.EVENT); + this.addInput("event", r.ACTION); + this.addOutput("event", r.EVENT); this.properties = {equal_to:"", has_property:"", property_equal_to:""}; } - function n() { + function m() { this.size = [60, 20]; this.addProperty("time", 1000); - this.addInput("event", d.ACTION); - this.addOutput("on_time", d.EVENT); + this.addInput("event", r.ACTION); + this.addOutput("on_time", r.EVENT); this._pending = []; } - var d = u.LiteGraph; + function d() { + this.addProperty("interval", 1000); + this.addProperty("event", "tick"); + this.addOutput("on_tick", r.EVENT); + this.time = 0; + this.last_interval = 1000; + this.triggered = !1; + } + var r = v.LiteGraph; f.title = "Log Event"; f.desc = "Log event in console"; f.prototype.onAction = function(d, f) { console.log(d, f); }; - d.registerNodeType("events/log", f); - h.title = "Filter Event"; - h.desc = "Blocks events that do not match the filter"; - h.prototype.onAction = function(d, f) { + r.registerNodeType("events/log", f); + l.title = "Filter Event"; + l.desc = "Blocks events that do not match the filter"; + l.prototype.onAction = function(d, f) { if (null != f && (!this.properties.equal_to || this.properties.equal_to == f)) { if (this.properties.has_property && (d = f[this.properties.has_property], null == d || this.properties.property_equal_to && this.properties.property_equal_to != d)) { return; @@ -3925,41 +4018,67 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.triggerSlot(0, f); } }; - d.registerNodeType("events/filter", h); - n.title = "Delay"; - n.desc = "Delays one event"; - n.prototype.onAction = function(d, f) { + r.registerNodeType("events/filter", l); + m.title = "Delay"; + m.desc = "Delays one event"; + m.prototype.onAction = function(d, f) { this._pending.push([this.properties.time, f]); }; - n.prototype.onExecute = function() { + m.prototype.onExecute = function() { for (var d = 1000 * this.graph.elapsed_time, f = 0; f < this._pending.length; ++f) { - var h = this._pending[f]; - h[0] -= d; - 0 < h[0] || (this._pending.splice(f, 1), --f, this.trigger(null, h[1])); + var m = this._pending[f]; + m[0] -= d; + 0 < m[0] || (this._pending.splice(f, 1), --f, this.trigger(null, m[1])); } }; - n.prototype.onGetInputs = function() { - return [["event", d.ACTION]]; + m.prototype.onGetInputs = function() { + return [["event", r.ACTION]]; }; - d.registerNodeType("events/delay", n); + r.registerNodeType("events/delay", m); + d.title = "Timer"; + d.desc = "Sends an event every N milliseconds"; + d.prototype.onStart = function() { + this.time = 0; + }; + d.prototype.getTitle = function() { + return "Timer: " + this.last_interval.toString() + "ms"; + }; + d.on_color = "#AAA"; + d.off_color = "#222"; + d.prototype.onDrawBackground = function() { + this.boxcolor = this.triggered ? d.on_color : d.off_color; + this.triggered = !1; + }; + d.prototype.onExecute = function() { + this.time += 1000 * this.graph.elapsed_time; + this.last_interval = Math.max(1, this.getInputOrProperty("interval") | 0); + this.time < this.last_interval || isNaN(this.last_interval) ? this.inputs && 1 < this.inputs.length && this.inputs[1] && this.setOutputData(1, !1) : (this.triggered = !0, this.time %= this.last_interval, this.trigger("on_tick", this.properties.event), this.inputs && 1 < this.inputs.length && this.inputs[1] && this.setOutputData(1, !0)); + }; + d.prototype.onGetInputs = function() { + return [["interval", "number"]]; + }; + d.prototype.onGetOutputs = function() { + return [["tick", "boolean"]]; + }; + r.registerNodeType("events/timer", d); })(this); -(function(u) { +(function(v) { function f() { - this.addOutput("clicked", m.EVENT); + this.addOutput("clicked", n.EVENT); this.addProperty("text", ""); this.addProperty("font_size", 40); this.addProperty("message", ""); this.size = [64, 84]; } - function h() { + function l() { this.addInput("", "boolean"); - this.addInput("e", m.ACTION); + this.addInput("e", n.ACTION); this.addOutput("v", "boolean"); - this.addOutput("e", m.EVENT); + this.addOutput("e", n.EVENT); this.properties = {font:"", value:!1}; this.size = [124, 64]; } - function n() { + function m() { this.addOutput("", "number"); this.size = [74, 54]; this.properties = {min:-1000, max:1000, value:1, step:1}; @@ -3972,7 +4091,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.size = [64, 84]; this.properties = {min:0, max:1, value:0.5, wcolor:"#7AF", size:50}; } - function q() { + function r() { this.addOutput("", "number"); this.properties = {value:0.5, min:0, max:1, text:"V"}; var c = this; @@ -3981,25 +4100,25 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.properties.value = a; }, this.properties); } - function t() { + function u() { this.size = [160, 26]; this.addOutput("", "number"); this.properties = {wcolor:"#7AF", min:0, max:1, value:0.5}; } - function v() { + function w() { this.size = [160, 26]; this.addInput("", "number"); this.properties = {min:0, max:1, value:0, wcolor:"#AAF"}; } - function w() { + function x() { this.addInputs("", 0); this.properties = {value:"...", font:"Arial", fontsize:18, color:"#AAA", align:"left", glowSize:0, decimals:1}; } - function k() { + function h() { this.size = [200, 100]; this.properties = {borderColor:"#ffffff", bgcolorTop:"#f0f0f0", bgcolorBottom:"#e0e0e0", shadowSize:2, borderRadius:3}; } - var m = u.LiteGraph; + var n = v.LiteGraph; f.title = "Button"; f.desc = "Triggers an event"; f.font = "Arial"; @@ -4021,10 +4140,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.prototype.onMouseUp = function(c) { this.clicked = !1; }; - m.registerNodeType("widget/button", f); - h.title = "Toggle"; - h.desc = "Toggles between true or false"; - h.prototype.onDrawForeground = function(c) { + n.registerNodeType("widget/button", f); + l.title = "Toggle"; + l.desc = "Toggles between true or false"; + l.prototype.onDrawForeground = function(c) { if (!this.flags.collapsed) { var a = 0.5 * this.size[1], b = 0.8 * this.size[1]; c.fillStyle = "#AAA"; @@ -4038,46 +4157,46 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.textAlign = "left"; } }; - h.prototype.onAction = function(c) { + l.prototype.onAction = function(c) { this.properties.value = !this.properties.value; this.trigger("e", this.properties.value); }; - h.prototype.onExecute = function() { + l.prototype.onExecute = function() { var c = this.getInputData(0); null != c && (this.properties.value = c); this.setOutputData(0, this.properties.value); }; - h.prototype.onMouseDown = function(c, a) { + l.prototype.onMouseDown = function(c, a) { if (1 < a[0] && 1 < a[1] && a[0] < this.size[0] - 2 && a[1] < this.size[1] - 2) { return this.properties.value = !this.properties.value, this.graph._version++, this.trigger("e", this.properties.value), !0; } }; - m.registerNodeType("widget/toggle", h); - n.title = "Number"; - n.desc = "Widget to select number value"; - n.pixels_threshold = 10; - n.markers_color = "#666"; - n.prototype.onDrawForeground = function(c) { + n.registerNodeType("widget/toggle", l); + m.title = "Number"; + m.desc = "Widget to select number value"; + m.pixels_threshold = 10; + m.markers_color = "#666"; + m.prototype.onDrawForeground = function(c) { var a = 0.5 * this.size[0], b = this.size[1]; - 30 < b ? (c.fillStyle = n.markers_color, c.beginPath(), c.moveTo(a, 0.1 * b), c.lineTo(a + 0.1 * b, 0.2 * b), c.lineTo(a + -0.1 * b, 0.2 * b), c.fill(), c.beginPath(), c.moveTo(a, 0.9 * b), c.lineTo(a + 0.1 * b, 0.8 * b), c.lineTo(a + -0.1 * b, 0.8 * b), c.fill(), c.font = (0.7 * b).toFixed(1) + "px Arial") : c.font = (0.8 * b).toFixed(1) + "px Arial"; + 30 < b ? (c.fillStyle = m.markers_color, c.beginPath(), c.moveTo(a, 0.1 * b), c.lineTo(a + 0.1 * b, 0.2 * b), c.lineTo(a + -0.1 * b, 0.2 * b), c.fill(), c.beginPath(), c.moveTo(a, 0.9 * b), c.lineTo(a + 0.1 * b, 0.8 * b), c.lineTo(a + -0.1 * b, 0.8 * b), c.fill(), c.font = (0.7 * b).toFixed(1) + "px Arial") : c.font = (0.8 * b).toFixed(1) + "px Arial"; c.textAlign = "center"; c.font = (0.7 * b).toFixed(1) + "px Arial"; c.fillStyle = "#EEE"; c.fillText(this.properties.value.toFixed(this._precision), a, 0.75 * b); }; - n.prototype.onExecute = function() { + m.prototype.onExecute = function() { this.setOutputData(0, this.properties.value); }; - n.prototype.onPropertyChanged = function(c, a) { + m.prototype.onPropertyChanged = function(c, a) { c = (this.properties.step + "").split("."); this._precision = 1 < c.length ? c[1].length : 0; }; - n.prototype.onMouseDown = function(c, a) { + m.prototype.onMouseDown = function(c, a) { if (!(0 > a[1])) { return this.old_y = c.canvasY, this.captureInput(!0), this.mouse_captured = !0; } }; - n.prototype.onMouseMove = function(c) { + m.prototype.onMouseMove = function(c) { if (this.mouse_captured) { var a = this.old_y - c.canvasY; c.shiftKey && (a *= 10); @@ -4085,7 +4204,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a *= 0.1; } this.old_y = c.canvasY; - c = this._remainder + a / n.pixels_threshold; + c = this._remainder + a / m.pixels_threshold; this._remainder = c % 1; c = Math.clamp(this.properties.value + (c | 0) * this.properties.step, this.properties.min, this.properties.max); this.properties.value = c; @@ -4093,11 +4212,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setDirtyCanvas(!0); } }; - n.prototype.onMouseUp = function(c, a) { + m.prototype.onMouseUp = function(c, a) { 200 > c.click_time && (this.properties.value = Math.clamp(this.properties.value + (a[1] > 0.5 * this.size[1] ? -1 : 1) * this.properties.step, this.properties.min, this.properties.max), this.graph._version++, this.setDirtyCanvas(!0)); this.mouse_captured && (this.mouse_captured = !1, this.captureInput(!1)); }; - m.registerNodeType("widget/number", n); + n.registerNodeType("widget/number", m); d.title = "Knob"; d.desc = "Circular controller"; d.widgets = [{name:"increase", text:"+", type:"minibutton"}, {name:"decrease", text:"-", type:"minibutton"}]; @@ -4144,13 +4263,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; d.prototype.onExecute = function() { this.setOutputData(0, this.properties.value); - this.boxcolor = m.colorToString([this.value, this.value, this.value]); + this.boxcolor = n.colorToString([this.value, this.value, this.value]); }; d.prototype.onMouseDown = function(c) { if (this.imgfg && this.imgfg.width) { this.center = [0.5 * this.size[0], 0.5 * this.size[1] + 20]; this.radius = 0.5 * this.size[0]; - if (20 > c.canvasY - this.pos[1] || m.distance([c.canvasX, c.canvasY], [this.pos[0] + this.center[0], this.pos[1] + this.center[1]]) > this.radius) { + if (20 > c.canvasY - this.pos[1] || n.distance([c.canvasX, c.canvasY], [this.pos[0] + this.center[0], this.pos[1] + this.center[1]]) > this.radius) { return !1; } this.oldmouse = [c.canvasX - this.pos[0], c.canvasY - this.pos[1]]; @@ -4175,15 +4294,6 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; d.prototype.onMouseLeave = function(c) { }; - d.prototype.onWidget = function(c, a) { - if ("increase" == a.name) { - this.onPropertyChanged("size", this.properties.size + 10); - } else { - if ("decrease" == a.name) { - this.onPropertyChanged("size", this.properties.size - 10); - } - } - }; d.prototype.onPropertyChanged = function(c, a) { if ("wcolor" == c) { this.properties[c] = a; @@ -4200,36 +4310,36 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return !0; }; - m.registerNodeType("widget/knob", d); - q.title = "Internal Slider"; - q.prototype.onPropertyChanged = function(c, a) { + n.registerNodeType("widget/knob", d); + r.title = "Internal Slider"; + r.prototype.onPropertyChanged = function(c, a) { "value" == c && (this.slider.value = a); }; - q.prototype.onExecute = function() { + r.prototype.onExecute = function() { this.setOutputData(0, this.properties.value); }; - m.registerNodeType("widget/internal_slider", q); - t.title = "H.Slider"; - t.desc = "Linear slider controller"; - t.prototype.onAdded = function() { + n.registerNodeType("widget/internal_slider", r); + u.title = "H.Slider"; + u.desc = "Linear slider controller"; + u.prototype.onAdded = function() { this.value = 0.5; this.imgfg = this.loadImage("imgs/slider_fg.png"); }; - t.prototype.onDrawVectorial = function(c) { + u.prototype.onDrawVectorial = function(c) { this.imgfg && this.imgfg.width && (c.lineWidth = 1, c.strokeStyle = this.mouseOver ? "#FFF" : "#AAA", c.fillStyle = "#000", c.beginPath(), c.rect(2, 0, this.size[0] - 4, 20), c.stroke(), c.fillStyle = this.properties.wcolor, c.beginPath(), c.rect(2 + (this.size[0] - 4 - 20) * this.value, 0, 20, 20), c.fill()); }; - t.prototype.onDrawImage = function(c) { + u.prototype.onDrawImage = function(c) { this.imgfg && this.imgfg.width && (c.lineWidth = 1, c.fillStyle = "#000", c.fillRect(2, 9, this.size[0] - 4, 2), c.strokeStyle = "#333", c.beginPath(), c.moveTo(2, 9), c.lineTo(this.size[0] - 4, 9), c.stroke(), c.strokeStyle = "#AAA", c.beginPath(), c.moveTo(2, 11), c.lineTo(this.size[0] - 4, 11), c.stroke(), c.drawImage(this.imgfg, 2 + (this.size[0] - 4) * this.value - 0.5 * this.imgfg.width, 0.5 * -this.imgfg.height + 10)); }; - t.prototype.onDrawForeground = function(c) { + u.prototype.onDrawForeground = function(c) { this.onDrawImage(c); }; - t.prototype.onExecute = function() { + u.prototype.onExecute = function() { this.properties.value = this.properties.min + (this.properties.max - this.properties.min) * this.value; this.setOutputData(0, this.properties.value); - this.boxcolor = m.colorToString([this.value, this.value, this.value]); + this.boxcolor = n.colorToString([this.value, this.value, this.value]); }; - t.prototype.onMouseDown = function(c) { + u.prototype.onMouseDown = function(c) { if (0 > c.canvasY - this.pos[1]) { return !1; } @@ -4237,7 +4347,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.captureInput(!0); return !0; }; - t.prototype.onMouseMove = function(c) { + u.prototype.onMouseMove = function(c) { if (this.oldmouse) { c = [c.canvasX - this.pos[0], c.canvasY - this.pos[1]]; var a = this.value; @@ -4248,13 +4358,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setDirtyCanvas(!0); } }; - t.prototype.onMouseUp = function(c) { + u.prototype.onMouseUp = function(c) { this.oldmouse = null; this.captureInput(!1); }; - t.prototype.onMouseLeave = function(c) { + u.prototype.onMouseLeave = function(c) { }; - t.prototype.onPropertyChanged = function(c, a) { + u.prototype.onPropertyChanged = function(c, a) { if ("wcolor" == c) { this.properties[c] = a; } else { @@ -4262,14 +4372,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return !0; }; - m.registerNodeType("widget/hslider", t); - v.title = "Progress"; - v.desc = "Shows data in linear progress"; - v.prototype.onExecute = function() { + n.registerNodeType("widget/hslider", u); + w.title = "Progress"; + w.desc = "Shows data in linear progress"; + w.prototype.onExecute = function() { var c = this.getInputData(0); void 0 != c && (this.properties.value = c); }; - v.prototype.onDrawForeground = function(c) { + w.prototype.onDrawForeground = function(c) { c.lineWidth = 1; c.fillStyle = this.properties.wcolor; var a = (this.properties.value - this.properties.min) / (this.properties.max - this.properties.min); @@ -4277,11 +4387,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a = Math.max(0, a); c.fillRect(2, 2, (this.size[0] - 4) * a, this.size[1] - 4); }; - m.registerNodeType("widget/progress", v); - w.title = "Text"; - w.desc = "Shows the input value"; - w.widgets = [{name:"resize", text:"Resize box", type:"button"}, {name:"led_text", text:"LED", type:"minibutton"}, {name:"normal_text", text:"Normal", type:"minibutton"}]; - w.prototype.onDrawForeground = function(c) { + n.registerNodeType("widget/progress", w); + x.title = "Text"; + x.desc = "Shows the input value"; + x.widgets = [{name:"resize", text:"Resize box", type:"button"}, {name:"led_text", text:"LED", type:"minibutton"}, {name:"normal_text", text:"Normal", type:"minibutton"}]; + x.prototype.onDrawForeground = function(c) { c.fillStyle = this.properties.color; var a = this.properties.value; this.properties.glowSize ? (c.shadowColor = this.properties.color, c.shadowOffsetX = 0, c.shadowOffsetY = 0, c.shadowBlur = this.properties.glowSize) : c.shadowColor = "transparent"; @@ -4299,11 +4409,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.last_ctx = c; c.textAlign = "left"; }; - w.prototype.onExecute = function() { + x.prototype.onExecute = function() { var c = this.getInputData(0); null != c && (this.properties.value = c); }; - w.prototype.resize = function() { + x.prototype.resize = function() { if (this.last_ctx) { var c = this.str.split("\\n"); this.last_ctx.font = this.properties.fontsize + "px " + this.properties.font; @@ -4317,35 +4427,29 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setDirtyCanvas(!0); } }; - w.prototype.onWidget = function(c, a) { - "resize" == a.name ? this.resize() : "led_text" == a.name ? (this.properties.font = "Digital", this.properties.glowSize = 4, this.setDirtyCanvas(!0)) : "normal_text" == a.name && (this.properties.font = "Arial", this.setDirtyCanvas(!0)); - }; - w.prototype.onPropertyChanged = function(c, a) { + x.prototype.onPropertyChanged = function(c, a) { this.properties[c] = a; this.str = "number" == typeof a ? a.toFixed(3) : a; return !0; }; - m.registerNodeType("widget/text", w); - k.title = "Panel"; - k.desc = "Non interactive panel"; - k.widgets = [{name:"update", text:"Update", type:"button"}]; - k.prototype.createGradient = function(c) { + n.registerNodeType("widget/text", x); + h.title = "Panel"; + h.desc = "Non interactive panel"; + h.widgets = [{name:"update", text:"Update", type:"button"}]; + h.prototype.createGradient = function(c) { "" == this.properties.bgcolorTop || "" == this.properties.bgcolorBottom ? this.lineargradient = 0 : (this.lineargradient = c.createLinearGradient(0, 0, 0, this.size[1]), this.lineargradient.addColorStop(0, this.properties.bgcolorTop), this.lineargradient.addColorStop(1, this.properties.bgcolorBottom)); }; - k.prototype.onDrawForeground = function(c) { + h.prototype.onDrawForeground = function(c) { null == this.lineargradient && this.createGradient(c); this.lineargradient && (c.lineWidth = 1, c.strokeStyle = this.properties.borderColor, c.fillStyle = this.lineargradient, this.properties.shadowSize ? (c.shadowColor = "#000", c.shadowOffsetX = 0, c.shadowOffsetY = 0, c.shadowBlur = this.properties.shadowSize) : c.shadowColor = "transparent", c.roundRect(0, 0, this.size[0] - 1, this.size[1] - 1, this.properties.shadowSize), c.fill(), c.shadowColor = "transparent", c.stroke()); }; - k.prototype.onWidget = function(c, a) { - "update" == a.name && (this.lineargradient = null, this.setDirtyCanvas(!0)); - }; - m.registerNodeType("widget/panel", k); + n.registerNodeType("widget/panel", h); })(this); -(function(u) { +(function(v) { function f() { this.addOutput("left_x_axis", "number"); this.addOutput("left_y_axis", "number"); - this.addOutput("button_pressed", h.EVENT); + this.addOutput("button_pressed", l.EVENT); this.properties = {gamepad_index:0, threshold:0.1}; this._left_axis = new Float32Array(2); this._right_axis = new Float32Array(2); @@ -4353,93 +4457,93 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._previous_buttons = new Uint8Array(17); this._current_buttons = new Uint8Array(17); } - var h = u.LiteGraph; + var l = v.LiteGraph; f.title = "Gamepad"; f.desc = "gets the input of the gamepad"; f.zero = new Float32Array(2); f.buttons = "a b x y lb rb lt rt back start ls rs home".split(" "); f.prototype.onExecute = function() { - var h = this.getGamepad(), d = this.properties.threshold || 0.0; - h && (this._left_axis[0] = Math.abs(h.xbox.axes.lx) > d ? h.xbox.axes.lx : 0, this._left_axis[1] = Math.abs(h.xbox.axes.ly) > d ? h.xbox.axes.ly : 0, this._right_axis[0] = Math.abs(h.xbox.axes.rx) > d ? h.xbox.axes.rx : 0, this._right_axis[1] = Math.abs(h.xbox.axes.ry) > d ? h.xbox.axes.ry : 0, this._triggers[0] = Math.abs(h.xbox.axes.ltrigger) > d ? h.xbox.axes.ltrigger : 0, this._triggers[1] = Math.abs(h.xbox.axes.rtrigger) > d ? h.xbox.axes.rtrigger : 0); + var m = this.getGamepad(), d = this.properties.threshold || 0.0; + m && (this._left_axis[0] = Math.abs(m.xbox.axes.lx) > d ? m.xbox.axes.lx : 0, this._left_axis[1] = Math.abs(m.xbox.axes.ly) > d ? m.xbox.axes.ly : 0, this._right_axis[0] = Math.abs(m.xbox.axes.rx) > d ? m.xbox.axes.rx : 0, this._right_axis[1] = Math.abs(m.xbox.axes.ry) > d ? m.xbox.axes.ry : 0, this._triggers[0] = Math.abs(m.xbox.axes.ltrigger) > d ? m.xbox.axes.ltrigger : 0, this._triggers[1] = Math.abs(m.xbox.axes.rtrigger) > d ? m.xbox.axes.rtrigger : 0); if (this.outputs) { for (d = 0; d < this.outputs.length; d++) { - var q = this.outputs[d]; - if (q.links && q.links.length) { - var t = null; - if (h) { - switch(q.name) { + var l = this.outputs[d]; + if (l.links && l.links.length) { + var u = null; + if (m) { + switch(l.name) { case "left_axis": - t = this._left_axis; + u = this._left_axis; break; case "right_axis": - t = this._right_axis; + u = this._right_axis; break; case "left_x_axis": - t = this._left_axis[0]; + u = this._left_axis[0]; break; case "left_y_axis": - t = this._left_axis[1]; + u = this._left_axis[1]; break; case "right_x_axis": - t = this._right_axis[0]; + u = this._right_axis[0]; break; case "right_y_axis": - t = this._right_axis[1]; + u = this._right_axis[1]; break; case "trigger_left": - t = this._triggers[0]; + u = this._triggers[0]; break; case "trigger_right": - t = this._triggers[1]; + u = this._triggers[1]; break; case "a_button": - t = h.xbox.buttons.a ? 1 : 0; + u = m.xbox.buttons.a ? 1 : 0; break; case "b_button": - t = h.xbox.buttons.b ? 1 : 0; + u = m.xbox.buttons.b ? 1 : 0; break; case "x_button": - t = h.xbox.buttons.x ? 1 : 0; + u = m.xbox.buttons.x ? 1 : 0; break; case "y_button": - t = h.xbox.buttons.y ? 1 : 0; + u = m.xbox.buttons.y ? 1 : 0; break; case "lb_button": - t = h.xbox.buttons.lb ? 1 : 0; + u = m.xbox.buttons.lb ? 1 : 0; break; case "rb_button": - t = h.xbox.buttons.rb ? 1 : 0; + u = m.xbox.buttons.rb ? 1 : 0; break; case "ls_button": - t = h.xbox.buttons.ls ? 1 : 0; + u = m.xbox.buttons.ls ? 1 : 0; break; case "rs_button": - t = h.xbox.buttons.rs ? 1 : 0; + u = m.xbox.buttons.rs ? 1 : 0; break; case "start_button": - t = h.xbox.buttons.start ? 1 : 0; + u = m.xbox.buttons.start ? 1 : 0; break; case "back_button": - t = h.xbox.buttons.back ? 1 : 0; + u = m.xbox.buttons.back ? 1 : 0; break; case "button_pressed": - for (q = 0; q < this._current_buttons.length; ++q) { - this._current_buttons[q] && !this._previous_buttons[q] && this.triggerSlot(d, f.buttons[q]); + for (l = 0; l < this._current_buttons.length; ++l) { + this._current_buttons[l] && !this._previous_buttons[l] && this.triggerSlot(d, f.buttons[l]); } } } else { - switch(q.name) { + switch(l.name) { case "button_pressed": break; case "left_axis": case "right_axis": - t = f.zero; + u = f.zero; break; default: - t = 0; + u = 0; } } - this.setOutputData(d, t); + this.setOutputData(d, u); } } } @@ -4462,58 +4566,58 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.axes.ry = f.axes[3]; d.axes.ltrigger = f.buttons[6].value; d.axes.rtrigger = f.buttons[7].value; - for (var h = 0; h < f.buttons.length; h++) { - switch(this._current_buttons[h] = f.buttons[h].pressed, h) { + for (var l = 0; l < f.buttons.length; l++) { + switch(this._current_buttons[l] = f.buttons[l].pressed, l) { case 0: - d.buttons.a = f.buttons[h].pressed; + d.buttons.a = f.buttons[l].pressed; break; case 1: - d.buttons.b = f.buttons[h].pressed; + d.buttons.b = f.buttons[l].pressed; break; case 2: - d.buttons.x = f.buttons[h].pressed; + d.buttons.x = f.buttons[l].pressed; break; case 3: - d.buttons.y = f.buttons[h].pressed; + d.buttons.y = f.buttons[l].pressed; break; case 4: - d.buttons.lb = f.buttons[h].pressed; + d.buttons.lb = f.buttons[l].pressed; break; case 5: - d.buttons.rb = f.buttons[h].pressed; + d.buttons.rb = f.buttons[l].pressed; break; case 6: - d.buttons.lt = f.buttons[h].pressed; + d.buttons.lt = f.buttons[l].pressed; break; case 7: - d.buttons.rt = f.buttons[h].pressed; + d.buttons.rt = f.buttons[l].pressed; break; case 8: - d.buttons.back = f.buttons[h].pressed; + d.buttons.back = f.buttons[l].pressed; break; case 9: - d.buttons.start = f.buttons[h].pressed; + d.buttons.start = f.buttons[l].pressed; break; case 10: - d.buttons.ls = f.buttons[h].pressed; + d.buttons.ls = f.buttons[l].pressed; break; case 11: - d.buttons.rs = f.buttons[h].pressed; + d.buttons.rs = f.buttons[l].pressed; break; case 12: - f.buttons[h].pressed && (d.hat += "up"); + f.buttons[l].pressed && (d.hat += "up"); break; case 13: - f.buttons[h].pressed && (d.hat += "down"); + f.buttons[l].pressed && (d.hat += "down"); break; case 14: - f.buttons[h].pressed && (d.hat += "left"); + f.buttons[l].pressed && (d.hat += "left"); break; case 15: - f.buttons[h].pressed && (d.hat += "right"); + f.buttons[l].pressed && (d.hat += "right"); break; case 16: - d.buttons.home = f.buttons[h].pressed; + d.buttons.home = f.buttons[l].pressed; } } f.xbox = d; @@ -4523,34 +4627,34 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; f.prototype.onDrawBackground = function(f) { if (!this.flags.collapsed) { - var d = this._left_axis, h = this._right_axis; + var d = this._left_axis, l = this._right_axis; f.strokeStyle = "#88A"; f.strokeRect(0.5 * (d[0] + 1) * this.size[0] - 4, 0.5 * (d[1] + 1) * this.size[1] - 4, 8, 8); f.strokeStyle = "#8A8"; - f.strokeRect(0.5 * (h[0] + 1) * this.size[0] - 4, 0.5 * (h[1] + 1) * this.size[1] - 4, 8, 8); + f.strokeRect(0.5 * (l[0] + 1) * this.size[0] - 4, 0.5 * (l[1] + 1) * this.size[1] - 4, 8, 8); d = this.size[1] / this._current_buttons.length; f.fillStyle = "#AEB"; - for (h = 0; h < this._current_buttons.length; ++h) { - this._current_buttons[h] && f.fillRect(0, d * h, 6, d); + for (l = 0; l < this._current_buttons.length; ++l) { + this._current_buttons[l] && f.fillRect(0, d * l, 6, d); } } }; f.prototype.onGetOutputs = function() { - return [["left_axis", "vec2"], ["right_axis", "vec2"], ["left_x_axis", "number"], ["left_y_axis", "number"], ["right_x_axis", "number"], ["right_y_axis", "number"], ["trigger_left", "number"], ["trigger_right", "number"], ["a_button", "number"], ["b_button", "number"], ["x_button", "number"], ["y_button", "number"], ["lb_button", "number"], ["rb_button", "number"], ["ls_button", "number"], ["rs_button", "number"], ["start", "number"], ["back", "number"], ["button_pressed", h.EVENT]]; + return [["left_axis", "vec2"], ["right_axis", "vec2"], ["left_x_axis", "number"], ["left_y_axis", "number"], ["right_x_axis", "number"], ["right_y_axis", "number"], ["trigger_left", "number"], ["trigger_right", "number"], ["a_button", "number"], ["b_button", "number"], ["x_button", "number"], ["y_button", "number"], ["lb_button", "number"], ["rb_button", "number"], ["ls_button", "number"], ["rs_button", "number"], ["start", "number"], ["back", "number"], ["button_pressed", l.EVENT]]; }; - h.registerNodeType("input/gamepad", f); + l.registerNodeType("input/gamepad", f); })(this); -(function(u) { +(function(v) { function f() { this.addInput("in", "*"); this.size = [60, 20]; } - function h() { + function l() { this.addInput("in"); this.addOutput("out"); this.size = [60, 20]; } - function n() { + function m() { this.addInput("in", "number", {locked:!0}); this.addOutput("out", "number", {locked:!0}); this.addProperty("in", 0); @@ -4566,35 +4670,35 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addProperty("max", 1); this.size = [60, 20]; } - function q() { + function r() { this.addInput("in", "number"); this.addOutput("out", "number"); this.size = [60, 20]; this.addProperty("min", 0); this.addProperty("max", 1); } - function t() { + function u() { this.properties = {f:0.5}; this.addInput("A", "number"); this.addInput("B", "number"); this.addOutput("out", "number"); } - function v() { - this.addInput("in", "number"); - this.addOutput("out", "number"); - this.size = [60, 20]; - } function w() { this.addInput("in", "number"); this.addOutput("out", "number"); this.size = [60, 20]; } - function k() { + function x() { this.addInput("in", "number"); this.addOutput("out", "number"); this.size = [60, 20]; } - function m() { + function h() { + this.addInput("in", "number"); + this.addOutput("out", "number"); + this.size = [60, 20]; + } + function n() { this.addInput("in", "number"); this.addOutput("out", "number"); this.size = [60, 20]; @@ -4646,7 +4750,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addProperty("OP", ">", "string", {values:g.values}); this.size = [60, 40]; } - function l() { + function k() { this.addInput("inc", "number"); this.addOutput("total", "number"); this.addProperty("increment", 1); @@ -4670,7 +4774,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.properties = {x:0, y:0}; this._data = new Float32Array(2); } - function x() { + function q() { this.addInput("vec3", "vec3"); this.addOutput("x", "number"); this.addOutput("y", "number"); @@ -4689,13 +4793,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addOutput("z", "number"); this.addOutput("w", "number"); } - function C() { + function B() { this.addInputs([["x", "number"], ["y", "number"], ["z", "number"], ["w", "number"]]); this.addOutput("vec4", "vec4"); this.properties = {x:0, y:0, z:0, w:0}; this._data = new Float32Array(4); } - var y = u.LiteGraph; + var y = v.LiteGraph; f.title = "Converter"; f.desc = "type A to type B"; f.prototype.onExecute = function() { @@ -4740,19 +4844,19 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return [["number", "number"], ["vec2", "vec2"], ["vec3", "vec3"], ["vec4", "vec4"]]; }; y.registerNodeType("math/converter", f); - h.title = "Bypass"; - h.desc = "removes the type"; - h.prototype.onExecute = function() { + l.title = "Bypass"; + l.desc = "removes the type"; + l.prototype.onExecute = function() { var a = this.getInputData(0); this.setOutputData(0, a); }; - y.registerNodeType("math/bypass", h); - n.title = "Range"; - n.desc = "Convert a number from one range to another"; - n.prototype.getTitle = function() { + y.registerNodeType("math/bypass", l); + m.title = "Range"; + m.desc = "Convert a number from one range to another"; + m.prototype.getTitle = function() { return this.flags.collapsed ? (this._last_v || 0).toFixed(2) : this.title; }; - n.prototype.onExecute = function() { + m.prototype.onExecute = function() { if (this.inputs) { for (var a = 0; a < this.inputs.length; a++) { var b = this.inputs[a], c = this.getInputData(a); @@ -4768,13 +4872,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._last_v = (c - a) / (this.properties.in_max - a) * (this.properties.out_max - b) + b; this.setOutputData(0, this._last_v); }; - n.prototype.onDrawBackground = function(a) { + m.prototype.onDrawBackground = function(a) { this.outputs[0].label = this._last_v ? this._last_v.toFixed(3) : "?"; }; - n.prototype.onGetInputs = function() { + m.prototype.onGetInputs = function() { return [["in_min", "number"], ["in_max", "number"], ["out_min", "number"], ["out_max", "number"]]; }; - y.registerNodeType("math/range", n); + y.registerNodeType("math/range", m); d.title = "Rand"; d.desc = "Random number"; d.prototype.onExecute = function() { @@ -4795,22 +4899,22 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return [["min", "number"], ["max", "number"]]; }; y.registerNodeType("math/rand", d); - q.title = "Clamp"; - q.desc = "Clamp number between min and max"; - q.filter = "shader"; - q.prototype.onExecute = function() { + r.title = "Clamp"; + r.desc = "Clamp number between min and max"; + r.filter = "shader"; + r.prototype.onExecute = function() { var a = this.getInputData(0); null != a && (a = Math.max(this.properties.min, a), a = Math.min(this.properties.max, a), this.setOutputData(0, a)); }; - q.prototype.getCode = function(a) { + r.prototype.getCode = function(a) { a = ""; this.isInputConnected(0) && (a += "clamp({{0}}," + this.properties.min + "," + this.properties.max + ")"); return a; }; - y.registerNodeType("math/clamp", q); - t.title = "Lerp"; - t.desc = "Linear Interpolation"; - t.prototype.onExecute = function() { + y.registerNodeType("math/clamp", r); + u.title = "Lerp"; + u.desc = "Linear Interpolation"; + u.prototype.onExecute = function() { var a = this.getInputData(0); null == a && (a = 0); var b = this.getInputData(1); @@ -4819,34 +4923,34 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { void 0 !== e && (c = e); this.setOutputData(0, a * (1 - c) + b * c); }; - t.prototype.onGetInputs = function() { + u.prototype.onGetInputs = function() { return [["f", "number"]]; }; - y.registerNodeType("math/lerp", t); - v.title = "Abs"; - v.desc = "Absolute"; - v.prototype.onExecute = function() { + y.registerNodeType("math/lerp", u); + w.title = "Abs"; + w.desc = "Absolute"; + w.prototype.onExecute = function() { var a = this.getInputData(0); null != a && this.setOutputData(0, Math.abs(a)); }; - y.registerNodeType("math/abs", v); - w.title = "Floor"; - w.desc = "Floor number to remove fractional part"; - w.prototype.onExecute = function() { + y.registerNodeType("math/abs", w); + x.title = "Floor"; + x.desc = "Floor number to remove fractional part"; + x.prototype.onExecute = function() { var a = this.getInputData(0); null != a && this.setOutputData(0, Math.floor(a)); }; - y.registerNodeType("math/floor", w); - k.title = "Frac"; - k.desc = "Returns fractional part"; - k.prototype.onExecute = function() { + y.registerNodeType("math/floor", x); + h.title = "Frac"; + h.desc = "Returns fractional part"; + h.prototype.onExecute = function() { var a = this.getInputData(0); null != a && this.setOutputData(0, a % 1); }; - y.registerNodeType("math/frac", k); - m.title = "Smoothstep"; - m.desc = "Smoothstep"; - m.prototype.onExecute = function() { + y.registerNodeType("math/frac", h); + n.title = "Smoothstep"; + n.desc = "Smoothstep"; + n.prototype.onExecute = function() { var a = this.getInputData(0); if (void 0 !== a) { var b = this.properties.A; @@ -4854,7 +4958,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, a * a * (3 - 2 * a)); } }; - y.registerNodeType("math/smoothstep", m); + y.registerNodeType("math/smoothstep", n); c.title = "Scale"; c.desc = "v * factor"; c.prototype.onExecute = function() { @@ -5008,15 +5112,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, c); }; y.registerNodeType("math/condition", g); - l.title = "Accumulate"; - l.desc = "Increments a value every time"; - l.prototype.onExecute = function() { + k.title = "Accumulate"; + k.desc = "Increments a value every time"; + k.prototype.onExecute = function() { null === this.properties.value && (this.properties.value = 0); var a = this.getInputData(0); this.properties.value = null !== a ? this.properties.value + a : this.properties.value + this.properties.increment; this.setOutputData(0, this.properties.value); }; - y.registerNodeType("math/accumulate", l); + y.registerNodeType("math/accumulate", k); p.title = "Trigonometry"; p.desc = "Sin Cos Tan"; p.filter = "shader"; @@ -5059,28 +5163,28 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return [["sin", "number"], ["cos", "number"], ["tan", "number"], ["asin", "number"], ["acos", "number"], ["atan", "number"]]; }; y.registerNodeType("math/trigonometry", p); - var B = function() { + var C = function() { this.addInputs("x", "number"); this.addInputs("y", "number"); this.addOutputs("", "number"); this.properties = {x:1.0, y:1.0, formula:"x+y"}; }; - B.title = "Formula"; - B.desc = "Compute safe formula"; - B.prototype.onExecute = function() { + C.title = "Formula"; + C.desc = "Compute safe formula"; + C.prototype.onExecute = function() { var a = this.getInputData(0), b = this.getInputData(1); null != a ? this.properties.x = a : a = this.properties.x; null != b ? this.properties.y = b : b = this.properties.y; a = math.eval(this.properties.formula, {x:a, y:b, T:this.graph.globaltime}); this.setOutputData(0, a); }; - B.prototype.onDrawBackground = function() { + C.prototype.onDrawBackground = function() { this.outputs[0].label = this.properties.formula; }; - B.prototype.onGetOutputs = function() { + C.prototype.onGetOutputs = function() { return [["A-B", "number"], ["A*B", "number"], ["A/B", "number"]]; }; - y.registerNodeType("math/formula", B); + y.registerNodeType("math/formula", C); A.title = "Vec2->XY"; A.desc = "vector 2 to components"; A.prototype.onExecute = function() { @@ -5101,13 +5205,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, c); }; y.registerNodeType("math3d/xy-to-vec2", G); - x.title = "Vec3->XYZ"; - x.desc = "vector 3 to components"; - x.prototype.onExecute = function() { + q.title = "Vec3->XYZ"; + q.desc = "vector 3 to components"; + q.prototype.onExecute = function() { var a = this.getInputData(0); null != a && (this.setOutputData(0, a[0]), this.setOutputData(1, a[1]), this.setOutputData(2, a[2])); }; - y.registerNodeType("math3d/vec3-to-xyz", x); + y.registerNodeType("math3d/vec3-to-xyz", q); E.title = "XYZ->Vec3"; E.desc = "components to vector3"; E.prototype.onExecute = function() { @@ -5131,9 +5235,9 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { null != a && (this.setOutputData(0, a[0]), this.setOutputData(1, a[1]), this.setOutputData(2, a[2]), this.setOutputData(3, a[3])); }; y.registerNodeType("math3d/vec4-to-xyzw", H); - C.title = "XYZW->Vec4"; - C.desc = "components to vector4"; - C.prototype.onExecute = function() { + B.title = "XYZW->Vec4"; + B.desc = "components to vector4"; + B.prototype.onExecute = function() { var a = this.getInputData(0); null == a && (a = this.properties.x); var b = this.getInputData(1); @@ -5149,15 +5253,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d[3] = e; this.setOutputData(0, d); }; - y.registerNodeType("math3d/xyzw-to-vec4", C); - if (u.glMatrix) { - u = function() { + y.registerNodeType("math3d/xyzw-to-vec4", B); + if (v.glMatrix) { + v = function() { this.addInputs([["A", "quat"], ["B", "quat"], ["factor", "number"]]); this.addOutput("slerp", "quat"); this.addProperty("factor", 0.5); this._value = quat.create(); }; - B = function() { + C = function() { this.addInputs([["A", "quat"], ["B", "quat"]]); this.addOutput("A*B", "quat"); this._value = quat.create(); @@ -5206,19 +5310,19 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { null == b ? this.setOutputData(a) : this.setOutputData(0, vec3.transformQuat(vec3.create(), a, b)); }; y.registerNodeType("math3d/rotate_vec3", D); - B.title = "Mult. Quat"; - B.desc = "rotate quaternion"; - B.prototype.onExecute = function() { + C.title = "Mult. Quat"; + C.desc = "rotate quaternion"; + C.prototype.onExecute = function() { var a = this.getInputData(0); if (null != a) { var b = this.getInputData(1); null != b && (a = quat.multiply(this._value, a, b), this.setOutputData(0, a)); } }; - y.registerNodeType("math3d/mult-quat", B); - u.title = "Quat Slerp"; - u.desc = "quaternion spherical interpolation"; - u.prototype.onExecute = function() { + y.registerNodeType("math3d/mult-quat", C); + v.title = "Quat Slerp"; + v.desc = "quaternion spherical interpolation"; + v.prototype.onExecute = function() { var a = this.getInputData(0); if (null != a) { var b = this.getInputData(1); @@ -5230,37 +5334,37 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - y.registerNodeType("math3d/quat-slerp", u); + y.registerNodeType("math3d/quat-slerp", v); } })(this); -(function(u) { +(function(v) { function f() { this.addInput("sel", "boolean"); this.addOutput("value", "number"); this.properties = {A:0, B:1}; this.size = [60, 20]; } - u = u.LiteGraph; + v = v.LiteGraph; f.title = "Selector"; f.desc = "outputs A if selector is true, B if selector is false"; f.prototype.onExecute = function() { var f = this.getInputData(0); if (void 0 !== f) { - for (var n = 1; n < this.inputs.length; n++) { - var d = this.inputs[n], q = this.getInputData(n); - void 0 !== q && (this.properties[d.name] = q); + for (var m = 1; m < this.inputs.length; m++) { + var d = this.inputs[m], r = this.getInputData(m); + void 0 !== r && (this.properties[d.name] = r); } - n = this.properties.A; + m = this.properties.A; d = this.properties.B; - this.setOutputData(0, f ? n : d); + this.setOutputData(0, f ? m : d); } }; f.prototype.onGetInputs = function() { return [["A", 0], ["B", 0]]; }; - u.registerNodeType("logic/selector", f); + v.registerNodeType("logic/selector", f); })(this); -(function(u) { +(function(v) { function f() { this.addInput("A", "Number"); this.addInput("B", "Number"); @@ -5269,11 +5373,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.values = [[], [], [], []]; this.properties = {scale:2}; } - function h() { + function l() { this.addOutput("frame", "image"); this.properties = {url:""}; } - function n() { + function m() { this.addInput("f", "number"); this.addOutput("Color", "color"); this.properties = {colorA:"#444444", colorB:"#44AAFF", colorC:"#44FFAA", colorD:"#FFFFFF"}; @@ -5282,27 +5386,27 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("", "image"); this.size = [200, 200]; } - function q() { + function r() { this.addInputs([["img1", "image"], ["img2", "image"], ["fade", "number"]]); this.addOutput("", "image"); this.properties = {fade:0.5, width:512, height:512}; } - function t() { + function u() { this.addInput("", "image"); this.addOutput("", "image"); this.properties = {width:256, height:256, x:0, y:0, scale:1.0}; this.size = [50, 20]; } - function v() { + function w() { this.addInput("t", "number"); this.addOutputs([["frame", "image"], ["t", "number"], ["d", "number"]]); this.properties = {url:"", use_proxy:!0}; } - function w() { + function x() { this.addOutput("Webcam", "image"); this.properties = {}; } - var k = u.LiteGraph; + var h = v.LiteGraph; f.title = "Plot"; f.desc = "Plots data over time"; f.colors = ["#FFF", "#F99", "#9F9", "#99F"]; @@ -5329,46 +5433,46 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.moveTo(0, e); d.lineTo(c[0], e); d.stroke(); - for (var m = 0; 4 > m; ++m) { - var g = this.values[m]; - d.strokeStyle = b[m]; + for (var n = 0; 4 > n; ++n) { + var g = this.values[n]; + d.strokeStyle = b[n]; d.beginPath(); - var l = g[0] * a * -1 + e; - d.moveTo(0, Math.clamp(l, 0, c[1])); - for (var k = 1; k < g.length && k < c[0]; ++k) { - l = g[k] * a * -1 + e, d.lineTo(k, Math.clamp(l, 0, c[1])); + var k = g[0] * a * -1 + e; + d.moveTo(0, Math.clamp(k, 0, c[1])); + for (var h = 1; h < g.length && h < c[0]; ++h) { + k = g[h] * a * -1 + e, d.lineTo(h, Math.clamp(k, 0, c[1])); } d.stroke(); } } }; - k.registerNodeType("graphics/plot", f); - h.title = "Image"; - h.desc = "Image loader"; - h.widgets = [{name:"load", text:"Load", type:"button"}]; - h.supported_extensions = ["jpg", "jpeg", "png", "gif"]; - h.prototype.onAdded = function() { + h.registerNodeType("graphics/plot", f); + l.title = "Image"; + l.desc = "Image loader"; + l.widgets = [{name:"load", text:"Load", type:"button"}]; + l.supported_extensions = ["jpg", "jpeg", "png", "gif"]; + l.prototype.onAdded = function() { "" != this.properties.url && null == this.img && this.loadImage(this.properties.url); }; - h.prototype.onDrawBackground = function(d) { + l.prototype.onDrawBackground = function(d) { this.img && 5 < this.size[0] && 5 < this.size[1] && d.drawImage(this.img, 0, 0, this.size[0], this.size[1]); }; - h.prototype.onExecute = function() { + l.prototype.onExecute = function() { this.img || (this.boxcolor = "#000"); this.img && this.img.width ? this.setOutputData(0, this.img) : this.setOutputData(0, null); this.img && this.img.dirty && (this.img.dirty = !1); }; - h.prototype.onPropertyChanged = function(d, c) { + l.prototype.onPropertyChanged = function(d, c) { this.properties[d] = c; "url" == d && "" != c && this.loadImage(c); return !0; }; - h.prototype.loadImage = function(d, c) { + l.prototype.loadImage = function(d, c) { if ("" == d) { this.img = null; } else { this.img = document.createElement("img"); - "http" == d.substr(0, 4) && k.proxy && (d = k.proxy + d.substr(d.indexOf(":") + 3)); + "http" == d.substr(0, 4) && h.proxy && (d = h.proxy + d.substr(d.indexOf(":") + 3)); this.img.src = d; this.boxcolor = "#F95"; var a = this; @@ -5381,10 +5485,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; } }; - h.prototype.onWidget = function(d, c) { + l.prototype.onWidget = function(d, c) { "load" == c.name && this.loadImage(this.properties.url); }; - h.prototype.onDropFile = function(d) { + l.prototype.onDropFile = function(d) { var c = this; this._url && URL.revokeObjectURL(this._url); this._url = URL.createObjectURL(d); @@ -5393,10 +5497,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.size[1] = a.height / a.width * c.size[0]; }); }; - k.registerNodeType("graphics/image", h); - n.title = "Palette"; - n.desc = "Generates a color"; - n.prototype.onExecute = function() { + h.registerNodeType("graphics/image", l); + m.title = "Palette"; + m.desc = "Generates a color"; + m.prototype.onExecute = function() { var d = []; null != this.properties.colorA && d.push(hex2num(this.properties.colorA)); null != this.properties.colorB && d.push(hex2num(this.properties.colorB)); @@ -5429,7 +5533,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, a); } }; - k.registerNodeType("color/palette", n); + h.registerNodeType("color/palette", m); d.title = "Frame"; d.desc = "Frame viewerew"; d.widgets = [{name:"resize", text:"Resize box", type:"button"}, {name:"view", text:"View Image", type:"button"}]; @@ -5446,22 +5550,22 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.prototype.show = function() { showElement && this.frame && showElement(this.frame); }; - k.registerNodeType("graphics/frame", d); - q.title = "Image fade"; - q.desc = "Fades between images"; - q.widgets = [{name:"resizeA", text:"Resize to A", type:"button"}, {name:"resizeB", text:"Resize to B", type:"button"}]; - q.prototype.onAdded = function() { + h.registerNodeType("graphics/frame", d); + r.title = "Image fade"; + r.desc = "Fades between images"; + r.widgets = [{name:"resizeA", text:"Resize to A", type:"button"}, {name:"resizeB", text:"Resize to B", type:"button"}]; + r.prototype.onAdded = function() { this.createCanvas(); var d = this.canvas.getContext("2d"); d.fillStyle = "#000"; d.fillRect(0, 0, this.properties.width, this.properties.height); }; - q.prototype.createCanvas = function() { + r.prototype.createCanvas = function() { this.canvas = document.createElement("canvas"); this.canvas.width = this.properties.width; this.canvas.height = this.properties.height; }; - q.prototype.onExecute = function() { + r.prototype.onExecute = function() { var d = this.canvas.getContext("2d"); this.canvas.width = this.canvas.width; var c = this.getInputData(0); @@ -5475,35 +5579,35 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, this.canvas); this.setDirtyCanvas(!0); }; - k.registerNodeType("graphics/imagefade", q); - t.title = "Crop"; - t.desc = "Crop Image"; - t.prototype.onAdded = function() { + h.registerNodeType("graphics/imagefade", r); + u.title = "Crop"; + u.desc = "Crop Image"; + u.prototype.onAdded = function() { this.createCanvas(); }; - t.prototype.createCanvas = function() { + u.prototype.createCanvas = function() { this.canvas = document.createElement("canvas"); this.canvas.width = this.properties.width; this.canvas.height = this.properties.height; }; - t.prototype.onExecute = function() { + u.prototype.onExecute = function() { var d = this.getInputData(0); d && (d.width ? (this.canvas.getContext("2d").drawImage(d, -this.properties.x, -this.properties.y, d.width * this.properties.scale, d.height * this.properties.scale), this.setOutputData(0, this.canvas)) : this.setOutputData(0, null)); }; - t.prototype.onDrawBackground = function(d) { + u.prototype.onDrawBackground = function(d) { this.flags.collapsed || this.canvas && d.drawImage(this.canvas, 0, 0, this.canvas.width, this.canvas.height, 0, 0, this.size[0], this.size[1]); }; - t.prototype.onPropertyChanged = function(d, c) { + u.prototype.onPropertyChanged = function(d, c) { this.properties[d] = c; "scale" == d ? (this.properties[d] = parseFloat(c), 0 == this.properties[d] && (this.trace("Error in scale"), this.properties[d] = 1.0)) : this.properties[d] = parseInt(c); this.createCanvas(); return !0; }; - k.registerNodeType("graphics/cropImage", t); - v.title = "Video"; - v.desc = "Video playback"; - v.widgets = [{name:"play", text:"PLAY", type:"minibutton"}, {name:"stop", text:"STOP", type:"minibutton"}, {name:"demo", text:"Demo video", type:"button"}, {name:"mute", text:"Mute video", type:"button"}]; - v.prototype.onExecute = function() { + h.registerNodeType("graphics/cropImage", u); + w.title = "Video"; + w.desc = "Video playback"; + w.widgets = [{name:"play", text:"PLAY", type:"minibutton"}, {name:"stop", text:"STOP", type:"minibutton"}, {name:"demo", text:"Demo video", type:"button"}, {name:"mute", text:"Mute video", type:"button"}]; + w.prototype.onExecute = function() { if (this.properties.url && (this.properties.url != this._video_url && this.loadVideo(this.properties.url), this._video && 0 != this._video.width)) { var d = this.getInputData(0); d && 0 <= d && 1.0 >= d && (this._video.currentTime = d * this._video.duration, this._video.pause()); @@ -5514,15 +5618,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setDirtyCanvas(!0); } }; - v.prototype.onStart = function() { + w.prototype.onStart = function() { this.play(); }; - v.prototype.onStop = function() { + w.prototype.onStop = function() { this.stop(); }; - v.prototype.loadVideo = function(d) { + w.prototype.loadVideo = function(d) { this._video_url = d; - this.properties.use_proxy && "http" == d.substr(0, 4) && k.proxy && (d = k.proxy + d.substr(d.indexOf(":") + 3)); + this.properties.use_proxy && "http" == d.substr(0, 4) && h.proxy && (d = h.proxy + d.substr(d.indexOf(":") + 3)); this._video = document.createElement("video"); this._video.src = d; this._video.type = "type=video/mp4"; @@ -5562,29 +5666,29 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.play(); }); }; - v.prototype.onPropertyChanged = function(d, c) { + w.prototype.onPropertyChanged = function(d, c) { this.properties[d] = c; "url" == d && "" != c && this.loadVideo(c); return !0; }; - v.prototype.play = function() { + w.prototype.play = function() { this._video && this._video.play(); }; - v.prototype.playPause = function() { + w.prototype.playPause = function() { this._video && (this._video.paused ? this.play() : this.pause()); }; - v.prototype.stop = function() { + w.prototype.stop = function() { this._video && (this._video.pause(), this._video.currentTime = 0); }; - v.prototype.pause = function() { + w.prototype.pause = function() { this._video && (this.trace("Video paused"), this._video.pause()); }; - v.prototype.onWidget = function(d, c) { + w.prototype.onWidget = function(d, c) { }; - k.registerNodeType("graphics/video", v); - w.title = "Webcam"; - w.desc = "Webcam image"; - w.prototype.openStream = function() { + h.registerNodeType("graphics/video", w); + x.title = "Webcam"; + x.desc = "Webcam image"; + x.prototype.openStream = function() { navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; window.URL = window.URL || window.webkitURL; if (navigator.getUserMedia) { @@ -5597,74 +5701,74 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var d = this; } }; - w.prototype.onRemoved = function() { + x.prototype.onRemoved = function() { this._webcam_stream && (this._webcam_stream.stop(), this._video = this._webcam_stream = null); }; - w.prototype.streamReady = function(d) { + x.prototype.streamReady = function(d) { this._webcam_stream = d; var c = this._video; c || (c = document.createElement("video"), c.autoplay = !0, c.src = window.URL.createObjectURL(d), this._video = c, c.onloadedmetadata = function(a) { console.log(a); }); }; - w.prototype.onExecute = function() { + x.prototype.onExecute = function() { null != this._webcam_stream || this._waiting_confirmation || this.openStream(); this._video && this._video.videoWidth && (this._video.width = this._video.videoWidth, this._video.height = this._video.videoHeight, this.setOutputData(0, this._video)); }; - w.prototype.getExtraMenuOptions = function(d) { + x.prototype.getExtraMenuOptions = function(d) { var c = this; return [{content:c.properties.show ? "Hide Frame" : "Show Frame", callback:function() { c.properties.show = !c.properties.show; }}]; }; - w.prototype.onDrawBackground = function(d) { + x.prototype.onDrawBackground = function(d) { this.flags.collapsed || 20 >= this.size[1] || !this.properties.show || !this._video || (d.save(), d.drawImage(this._video, 0, 0, this.size[0], this.size[1]), d.restore()); }; - k.registerNodeType("graphics/webcam", w); + h.registerNodeType("graphics/webcam", x); })(this); -(function(u) { - var f = u.LiteGraph; - u.LGraphTexture = null; +(function(v) { + var f = v.LiteGraph; + v.LGraphTexture = null; if ("undefined" != typeof GL) { - var h = function() { + var l = function() { this.addOutput("Cubemap", "Cubemap"); this.properties = {name:""}; - this.size = [r.image_preview_size, r.image_preview_size]; - }, n = function() { + this.size = [t.image_preview_size, t.image_preview_size]; + }, m = function() { this.addInput("in", "Texture"); this.addOutput("out", "Texture"); - this.properties = {key_color:vec3.fromValues(0., 1., 0.), threshold:0.8, slope:0.2, precision:r.DEFAULT}; + this.properties = {key_color:vec3.fromValues(0., 1., 0.), threshold:0.8, slope:0.2, precision:t.DEFAULT}; }, d = function() { this.addOutput("out", "Texture"); - this.properties = {code:"", width:512, height:512, precision:r.DEFAULT}; + this.properties = {code:"", width:512, height:512, precision:t.DEFAULT}; this._temp_texture = this._func = null; - }, q = function() { + }, r = function() { this.addOutput("out", "Texture"); - this.properties = {width:512, height:512, seed:0, persistence:0.1, octaves:8, scale:1, offset:[0, 0], amplitude:1, precision:r.DEFAULT}; + this.properties = {width:512, height:512, seed:0, persistence:0.1, octaves:8, scale:1, offset:[0, 0], amplitude:1, precision:t.DEFAULT}; this._key = 0; this._uniforms = {u_persistence:0.1, u_seed:0, u_offset:vec2.create(), u_scale:1, u_viewport:vec2.create()}; - }, t = function() { + }, u = function() { this.addInput("in", "Texture"); this.addInput("avg", "number"); this.addOutput("out", "Texture"); - this.properties = {enabled:!0, scale:1, gamma:1, average_lum:1, lum_white:1, precision:r.LOW}; + this.properties = {enabled:!0, scale:1, gamma:1, average_lum:1, lum_white:1, precision:t.LOW}; this._uniforms = {u_texture:0, u_lumwhite2:1, u_igamma:1, u_scale:1, u_average_lum:1}; - }, v = function() { + }, w = function() { this.addInput("in", "Texture"); this.addInput("exp", "number"); this.addOutput("out", "Texture"); - this.properties = {exposition:1, precision:r.LOW}; + this.properties = {exposition:1, precision:t.LOW}; this._uniforms = {u_texture:0, u_exposition:exp}; - }, w = function() { + }, x = function() { this.addInput("in", "Texture"); this.addInput("f", "number"); this.addOutput("out", "Texture"); - this.properties = {enabled:!0, factor:1, precision:r.LOW}; + this.properties = {enabled:!0, factor:1, precision:t.LOW}; this._uniforms = {u_texture:0, u_factor:1}; - }, k = function() { + }, h = function() { this.addOutput("Webcam", "Texture"); this.properties = {texture_name:""}; - }, m = function() { + }, n = function() { this.addInput("Texture", "Texture"); this.addOutput("Filtered", "Texture"); this.properties = {intensity:1, radius:5}; @@ -5673,7 +5777,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("dirt", "Texture"); this.addOutput("out", "Texture"); this.addOutput("glow", "Texture"); - this.properties = {enabled:!0, intensity:1, persistence:0.99, iterations:16, threshold:0, scale:1, dirt_factor:0.5, precision:r.DEFAULT}; + this.properties = {enabled:!0, intensity:1, persistence:0.99, iterations:16, threshold:0, scale:1, dirt_factor:0.5, precision:t.DEFAULT}; this._textures = []; this._uniforms = {u_intensity:1, u_texture:0, u_glow_texture:1, u_threshold:0, u_texel_size:vec2.create()}; }, a = function() { @@ -5681,7 +5785,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("Iterations", "number"); this.addInput("Intensity", "number"); this.addOutput("Blurred", "Texture"); - this.properties = {intensity:1, iterations:1, preserve_aspect:!1, scale:[1, 1], precision:r.DEFAULT}; + this.properties = {intensity:1, iterations:1, preserve_aspect:!1, scale:[1, 1], precision:t.DEFAULT}; }, b = function() { this.addInput("Texture", "Texture"); this.addInput("Distance", "number"); @@ -5692,14 +5796,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }, e = function() { this.addInput("Tex.", "Texture"); this.addOutput("Edges", "Texture"); - this.properties = {invert:!0, threshold:!1, factor:1, precision:r.DEFAULT}; + this.properties = {invert:!0, threshold:!1, factor:1, precision:t.DEFAULT}; e._shader || (e._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, e.pixel_shader)); }, z = function() { this.addInput("A", "Texture"); this.addInput("B", "Texture"); this.addInput("Mixer", "Texture"); this.addOutput("Texture", "Texture"); - this.properties = {precision:r.DEFAULT}; + this.properties = {precision:t.DEFAULT}; z._shader || (z._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, z.pixel_shader)); }, g = function() { this.addInput("A", "color"); @@ -5708,14 +5812,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.properties = {angle:0, scale:1, A:[0, 0, 0], B:[1, 1, 1], texture_size:32}; g._shader || (g._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, g.pixel_shader)); this._uniforms = {u_angle:0, u_colorA:vec3.create(), u_colorB:vec3.create()}; - }, l = function() { + }, k = function() { this.addInput("R", "Texture"); this.addInput("G", "Texture"); this.addInput("B", "Texture"); this.addInput("A", "Texture"); this.addOutput("Texture", "Texture"); this.properties = {}; - l._shader || (l._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, l.pixel_shader)); + k._shader || (k._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, k.pixel_shader)); }, p = function() { this.addInput("Texture", "Texture"); this.addOutput("R", "Texture"); @@ -5729,13 +5833,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("LUT", "Texture"); this.addInput("Intensity", "number"); this.addOutput("", "Texture"); - this.properties = {intensity:1, precision:r.DEFAULT, texture:null}; + this.properties = {intensity:1, precision:t.DEFAULT, texture:null}; A._shader || (A._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, A.pixel_shader)); }, G = function() { this.addInput("Image", "image"); this.addOutput("", "Texture"); this.properties = {}; - }, x = function() { + }, q = function() { this.addInput("Texture", "Texture"); this.addOutput("tex", "Texture"); this.addOutput("avg", "vec4"); @@ -5746,12 +5850,12 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }, E = function() { this.addInput("Texture", "Texture"); this.addOutput("", "Texture"); - this.properties = {iterations:1, generate_mipmaps:!1, precision:r.DEFAULT}; + this.properties = {iterations:1, generate_mipmaps:!1, precision:t.DEFAULT}; }, H = function() { this.addInput("Texture", "Texture"); this.addOutput("", "Texture"); - this.properties = {size:0, generate_mipmaps:!1, precision:r.DEFAULT}; - }, C = function() { + this.properties = {size:0, generate_mipmaps:!1, precision:t.DEFAULT}; + }, B = function() { this.addInput("Texture", "Texture"); this.properties = {additive:!1, antialiasing:!1, filter:!0, disable_alpha:!1, gamma:1.0}; this.size[0] = 130; @@ -5760,16 +5864,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("warp", "Texture"); this.addInput("factor", "number"); this.addOutput("out", "Texture"); - this.properties = {factor:0.01, precision:r.DEFAULT}; - }, B = function() { + this.properties = {factor:0.01, precision:t.DEFAULT}; + }, C = function() { this.addInput("in", "Texture"); this.addInput("scale", "vec2"); this.addInput("offset", "vec2"); this.addOutput("out", "Texture"); - this.properties = {offset:vec2.fromValues(0, 0), scale:vec2.fromValues(1, 1), precision:r.DEFAULT}; + this.properties = {offset:vec2.fromValues(0, 0), scale:vec2.fromValues(1, 1), precision:t.DEFAULT}; }, D = function() { this.addOutput("out", "Texture"); - this.properties = {code:"", width:512, height:512, precision:r.DEFAULT}; + this.properties = {code:"", width:512, height:512, precision:t.DEFAULT}; this.properties.code = "\nvoid main() {\n vec2 uv = v_coord;\n vec3 color = vec3(0.0);\n//your code here\n\ngl_FragColor = vec4(color, 1.0);\n}\n"; this._uniforms = {in_texture:0, texSize:vec2.create(), time:0}; }, F = function() { @@ -5778,7 +5882,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("value", "number"); this.addOutput("Texture", "Texture"); this.help = "

pixelcode must be vec3

\r\n\t\t\t

uvcode must be vec2, is optional

\r\n\t\t\t

uv: tex. coords

color: texture

colorB: textureB

time: scene time

value: input value

"; - this.properties = {value:1, uvcode:"", pixelcode:"color + colorB * value", precision:r.DEFAULT}; + this.properties = {value:1, uvcode:"", pixelcode:"color + colorB * value", precision:t.DEFAULT}; }, I = function() { this.addInput("Texture", "Texture"); this.addOutput("", "Texture"); @@ -5786,35 +5890,35 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }, J = function() { this.addInput("Texture", "Texture"); this.properties = {flipY:!1}; - this.size = [r.image_preview_size, r.image_preview_size]; - }, r = function() { + this.size = [t.image_preview_size, t.image_preview_size]; + }, t = function() { this.addOutput("Texture", "Texture"); this.properties = {name:"", filter:!0}; - this.size = [r.image_preview_size, r.image_preview_size]; + this.size = [t.image_preview_size, t.image_preview_size]; }; - u.LGraphTexture = r; - r.title = "Texture"; - r.desc = "Texture"; - r.widgets_info = {name:{widget:"texture"}, filter:{widget:"checkbox"}}; - r.loadTextureCallback = null; - r.image_preview_size = 256; - r.PASS_THROUGH = 1; - r.COPY = 2; - r.LOW = 3; - r.HIGH = 4; - r.REUSE = 5; - r.DEFAULT = 2; - r.MODE_VALUES = {"pass through":r.PASS_THROUGH, copy:r.COPY, low:r.LOW, high:r.HIGH, reuse:r.REUSE, "default":r.DEFAULT}; - r.getTexturesContainer = function() { + v.LGraphTexture = t; + t.title = "Texture"; + t.desc = "Texture"; + t.widgets_info = {name:{widget:"texture"}, filter:{widget:"checkbox"}}; + t.loadTextureCallback = null; + t.image_preview_size = 256; + t.PASS_THROUGH = 1; + t.COPY = 2; + t.LOW = 3; + t.HIGH = 4; + t.REUSE = 5; + t.DEFAULT = 2; + t.MODE_VALUES = {"pass through":t.PASS_THROUGH, copy:t.COPY, low:t.LOW, high:t.HIGH, reuse:t.REUSE, "default":t.DEFAULT}; + t.getTexturesContainer = function() { return gl.textures; }; - r.loadTexture = function(a, b) { + t.loadTexture = function(a, b) { b = b || {}; var c = a; "http://" == c.substr(0, 7) && f.proxy && (c = f.proxy + c.substr(7)); - return r.getTexturesContainer()[a] = GL.Texture.fromURL(c, b); + return t.getTexturesContainer()[a] = GL.Texture.fromURL(c, b); }; - r.getTexture = function(a) { + t.getTexture = function(a) { var b = this.getTexturesContainer(); if (!b) { throw "Cannot load texture, container of textures not found"; @@ -5822,18 +5926,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b = b[a]; return !b && a && ":" != a[0] ? this.loadTexture(a) : b; }; - r.getTargetTexture = function(a, b, c) { + t.getTargetTexture = function(a, b, c) { if (!a) { throw "LGraphTexture.getTargetTexture expects a reference texture"; } switch(c) { - case r.LOW: + case t.LOW: c = gl.UNSIGNED_BYTE; break; - case r.HIGH: + case t.HIGH: c = gl.HIGH_PRECISION_FORMAT; break; - case r.REUSE: + case t.REUSE: return a; default: c = a ? a.type : gl.UNSIGNED_BYTE; @@ -5841,18 +5945,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b && b.width == a.width && b.height == a.height && b.type == c || (b = new GL.Texture(a.width, a.height, {type:c, format:gl.RGBA, filter:gl.LINEAR})); return b; }; - r.getTextureType = function(a, b) { + t.getTextureType = function(a, b) { b = b ? b.type : gl.UNSIGNED_BYTE; switch(a) { - case r.HIGH: + case t.HIGH: b = gl.HIGH_PRECISION_FORMAT; break; - case r.LOW: + case t.LOW: b = gl.UNSIGNED_BYTE; } return b; }; - r.getNoiseTexture = function() { + t.getNoiseTexture = function() { if (this._noise_texture) { return this._noise_texture; } @@ -5861,10 +5965,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } return this._noise_texture = a = GL.Texture.fromMemory(512, 512, a, {format:gl.RGBA, wrap:gl.REPEAT, filter:gl.NEAREST}); }; - r.prototype.onDropFile = function(a, b, c) { + t.prototype.onDropFile = function(a, b, c) { a ? ("string" == typeof a ? a = GL.Texture.fromURL(a) : -1 != b.toLowerCase().indexOf(".dds") ? a = GL.Texture.fromDDSInMemory(a) : (a = new Blob([c]), a = URL.createObjectURL(a), a = GL.Texture.fromURL(a)), this._drop_texture = a, this.properties.name = b) : (this._drop_texture = null, this.properties.name = ""); }; - r.prototype.getExtraMenuOptions = function(a) { + t.prototype.getExtraMenuOptions = function(a) { var b = this; if (this._drop_texture) { return [{content:"Clear", callback:function() { @@ -5873,11 +5977,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }}]; } }; - r.prototype.onExecute = function() { + t.prototype.onExecute = function() { var a = null; this.isOutputConnected(1) && (a = this.getInputData(0)); !a && this._drop_texture && (a = this._drop_texture); - !a && this.properties.name && (a = r.getTexture(this.properties.name)); + !a && this.properties.name && (a = t.getTexture(this.properties.name)); if (a) { this._last_tex = a; !1 === this.properties.filter ? a.setParameter(gl.TEXTURE_MAG_FILTER, gl.NEAREST) : a.setParameter(gl.TEXTURE_MAG_FILTER, gl.LINEAR); @@ -5892,10 +5996,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - r.prototype.onResourceRenamed = function(a, b) { + t.prototype.onResourceRenamed = function(a, b) { this.properties.name == a && (this.properties.name = b); }; - r.prototype.onDrawBackground = function(a) { + t.prototype.onDrawBackground = function(a) { if (!(this.flags.collapsed || 20 >= this.size[1])) { if (this._drop_texture && a.webgl) { a.drawImage(this._drop_texture, 0, 0, this.size[0], this.size[1]); @@ -5904,7 +6008,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { if (a.webgl) { this._canvas = this._last_tex; } else { - var b = r.generateLowResTexturePreview(this._last_tex); + var b = t.generateLowResTexturePreview(this._last_tex); if (!b) { return; } @@ -5916,11 +6020,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - r.generateLowResTexturePreview = function(a) { + t.generateLowResTexturePreview = function(a) { if (!a) { return null; } - var b = r.image_preview_size, c = a; + var b = t.image_preview_size, c = a; if (a.format == gl.DEPTH_COMPONENT) { return null; } @@ -5932,24 +6036,24 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c && c.toCanvas(a); return a; }; - r.prototype.getResources = function(a) { + t.prototype.getResources = function(a) { a[this.properties.name] = GL.Texture; return a; }; - r.prototype.onGetInputs = function() { + t.prototype.onGetInputs = function() { return [["in", "Texture"]]; }; - r.prototype.onGetOutputs = function() { + t.prototype.onGetOutputs = function() { return [["width", "number"], ["height", "number"], ["aspect", "number"]]; }; - f.registerNodeType("texture/texture", r); + f.registerNodeType("texture/texture", t); J.title = "Preview"; J.desc = "Show a texture in the graph canvas"; J.allow_preview = !1; J.prototype.onDrawBackground = function(a) { if (!this.flags.collapsed && (a.webgl || J.allow_preview)) { var b = this.getInputData(0); - b && (b = !b.handle && a.webgl ? b : r.generateLowResTexturePreview(b), a.save(), this.properties.flipY && (a.translate(0, this.size[1]), a.scale(1, -1)), a.drawImage(b, 0, 0, this.size[0], this.size[1]), a.restore()); + b && (b = !b.handle && a.webgl ? b : t.generateLowResTexturePreview(b), a.save(), this.properties.flipY && (a.translate(0, this.size[1]), a.scale(1, -1)), a.drawImage(b, 0, 0, this.size[0], this.size[1]), a.restore()); } }; f.registerNodeType("texture/preview", J); @@ -5957,10 +6061,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { I.desc = "Save a texture in the repository"; I.prototype.onExecute = function() { var a = this.getInputData(0); - a && (this.properties.name && (r.storeTexture ? r.storeTexture(this.properties.name, a) : r.getTexturesContainer()[this.properties.name] = a), this.setOutputData(0, a)); + a && (this.properties.name && (t.storeTexture ? t.storeTexture(this.properties.name, a) : t.getTexturesContainer()[this.properties.name] = a), this.setOutputData(0, a)); }; f.registerNodeType("texture/save", I); - F.widgets_info = {uvcode:{widget:"textarea", height:100}, pixelcode:{widget:"textarea", height:100}, precision:{widget:"combo", values:r.MODE_VALUES}}; + F.widgets_info = {uvcode:{widget:"textarea", height:100}, pixelcode:{widget:"textarea", height:100}, precision:{widget:"combo", values:t.MODE_VALUES}}; F.title = "Operation"; F.desc = "Texture shader operation"; F.prototype.getExtraMenuOptions = function(a) { @@ -5975,15 +6079,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { F.prototype.onExecute = function() { var a = this.getInputData(0); if (this.isOutputConnected(0)) { - if (this.properties.precision === r.PASS_THROUGH) { + if (this.properties.precision === t.PASS_THROUGH) { this.setOutputData(0, a); } else { var b = this.getInputData(1); if (this.properties.uvcode || this.properties.pixelcode) { var c = 512, d = 512; a ? (c = a.width, d = a.height) : b && (c = b.width, d = b.height); - var e = r.getTextureType(this.properties.precision, a); - this._tex = a || this._tex ? r.getTargetTexture(a || this._tex, this._tex, this.properties.precision) : new GL.Texture(c, d, {type:e, format:gl.RGBA, filter:gl.LINEAR}); + var e = t.getTextureType(this.properties.precision, a); + this._tex = a || this._tex ? t.getTargetTexture(a || this._tex, this._tex, this.properties.precision) : new GL.Texture(c, d, {type:e, format:gl.RGBA, filter:gl.LINEAR}); e = ""; this.properties.uvcode && (e = "uv = " + this.properties.uvcode, -1 != this.properties.uvcode.indexOf(";") && (e = this.properties.uvcode)); var f = ""; @@ -6003,9 +6107,9 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } if (g) { this.boxcolor = "green"; - var l = this.getInputData(2); - null != l ? this.properties.value = l : l = parseFloat(this.properties.value); - var k = this.graph.getTime(); + var k = this.getInputData(2); + null != k ? this.properties.value = k : k = parseFloat(this.properties.value); + var h = this.graph.getTime(); this._tex.drawTo(function() { gl.disable(gl.DEPTH_TEST); gl.disable(gl.CULL_FACE); @@ -6013,7 +6117,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { a && a.bind(0); b && b.bind(1); var e = Mesh.getScreenQuad(); - g.uniforms({u_texture:0, u_textureB:1, value:l, texSize:[c, d], time:k}).draw(e); + g.uniforms({u_texture:0, u_textureB:1, value:k, texSize:[c, d], time:h}).draw(e); }); this.setOutputData(0, this._tex); } else { @@ -6027,7 +6131,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.registerNodeType("texture/operation", F); D.title = "Shader"; D.desc = "Texture shader"; - D.widgets_info = {code:{type:"code"}, precision:{widget:"combo", values:r.MODE_VALUES}}; + D.widgets_info = {code:{type:"code"}, precision:{widget:"combo", values:t.MODE_VALUES}}; D.prototype.onPropertyChanged = function(a, b) { if ("code" == a && (a = this.getShader())) { b = a.uniformInfo; @@ -6094,7 +6198,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { null != f && (f.constructor === GL.Texture && (f.bind(b), c || (c = f), f = b, b++), a.setUniform(e.name, f)); } var g = this._uniforms; - b = r.getTextureType(this.properties.precision, c); + b = t.getTextureType(this.properties.precision, c); d = this.properties.width | 0; e = this.properties.height | 0; 0 == d && (d = c ? c.width : gl.canvas.width); @@ -6112,20 +6216,20 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; D.pixel_shader = "precision highp float;\n\r\n\t\t\t\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform float time;\n\r\n\t"; f.registerNodeType("texture/shader", D); - B.widgets_info = {precision:{widget:"combo", values:r.MODE_VALUES}}; - B.title = "Scale/Offset"; - B.desc = "Applies an scaling and offseting"; - B.prototype.onExecute = function() { + C.widgets_info = {precision:{widget:"combo", values:t.MODE_VALUES}}; + C.title = "Scale/Offset"; + C.desc = "Applies an scaling and offseting"; + C.prototype.onExecute = function() { var a = this.getInputData(0); if (this.isOutputConnected(0) && a) { - if (this.properties.precision === r.PASS_THROUGH) { + if (this.properties.precision === t.PASS_THROUGH) { this.setOutputData(0, a); } else { - var b = a.width, c = a.height, d = this.precision === r.LOW ? gl.UNSIGNED_BYTE : gl.HIGH_PRECISION_FORMAT; - this.precision === r.DEFAULT && (d = a.type); + var b = a.width, c = a.height, d = this.precision === t.LOW ? gl.UNSIGNED_BYTE : gl.HIGH_PRECISION_FORMAT; + this.precision === t.DEFAULT && (d = a.type); this._tex && this._tex.width == b && this._tex.height == c && this._tex.type == d || (this._tex = new GL.Texture(b, c, {type:d, format:gl.RGBA, filter:gl.LINEAR})); var e = this._shader; - e || (e = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, B.pixel_shader)); + e || (e = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, C.pixel_shader)); var f = this.getInputData(1); f ? (this.properties.scale[0] = f[0], this.properties.scale[1] = f[1]) : f = this.properties.scale; var g = this.getInputData(2); @@ -6142,20 +6246,20 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - B.pixel_shader = "precision highp float;\n\r\n\t\t\t\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_textureB;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform vec2 u_scale;\n\r\n\t\t\tuniform vec2 u_offset;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 uv = v_coord;\n\r\n\t\t\t\tuv = uv / u_scale - u_offset;\n\r\n\t\t\t\tgl_FragColor = texture2D(u_texture, uv);\n\r\n\t\t\t}\n\r\n\t\t\t"; - f.registerNodeType("texture/scaleOffset", B); - y.widgets_info = {precision:{widget:"combo", values:r.MODE_VALUES}}; + C.pixel_shader = "precision highp float;\n\r\n\t\t\t\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_textureB;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform vec2 u_scale;\n\r\n\t\t\tuniform vec2 u_offset;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 uv = v_coord;\n\r\n\t\t\t\tuv = uv / u_scale - u_offset;\n\r\n\t\t\t\tgl_FragColor = texture2D(u_texture, uv);\n\r\n\t\t\t}\n\r\n\t\t\t"; + f.registerNodeType("texture/scaleOffset", C); + y.widgets_info = {precision:{widget:"combo", values:t.MODE_VALUES}}; y.title = "Warp"; y.desc = "Texture warp operation"; y.prototype.onExecute = function() { var a = this.getInputData(0); if (this.isOutputConnected(0)) { - if (this.properties.precision === r.PASS_THROUGH) { + if (this.properties.precision === t.PASS_THROUGH) { this.setOutputData(0, a); } else { var b = this.getInputData(1), c = 512, d = 512; a ? (c = a.width, d = a.height) : b && (c = b.width, d = b.height); - this._tex = a || this._tex ? r.getTargetTexture(a || this._tex, this._tex, this.properties.precision) : new GL.Texture(c, d, {type:this.precision === r.LOW ? gl.UNSIGNED_BYTE : gl.HIGH_PRECISION_FORMAT, format:gl.RGBA, filter:gl.LINEAR}); + this._tex = a || this._tex ? t.getTargetTexture(a || this._tex, this._tex, this.properties.precision) : new GL.Texture(c, d, {type:this.precision === t.LOW ? gl.UNSIGNED_BYTE : gl.HIGH_PRECISION_FORMAT, format:gl.RGBA, filter:gl.LINEAR}); var e = this._shader; e || (e = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, y.pixel_shader)); var f = this.getInputData(2); @@ -6175,9 +6279,9 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; y.pixel_shader = "precision highp float;\n\r\n\t\t\t\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_textureB;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform float u_factor;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 uv = v_coord;\n\r\n\t\t\t\tuv += ( texture2D(u_textureB, uv).rg - vec2(0.5)) * u_factor;\n\r\n\t\t\t\tgl_FragColor = texture2D(u_texture, uv);\n\r\n\t\t\t}\n\r\n\t\t\t"; f.registerNodeType("texture/warp", y); - C.title = "to Viewport"; - C.desc = "Texture to viewport"; - C.prototype.onExecute = function() { + B.title = "to Viewport"; + B.desc = "Texture to viewport"; + B.prototype.onExecute = function() { var a = this.getInputData(0); if (a) { this.properties.disable_alpha ? gl.disable(gl.BLEND) : (gl.enable(gl.BLEND), this.properties.additive ? gl.blendFunc(gl.SRC_ALPHA, gl.ONE) : gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)); @@ -6186,25 +6290,25 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.isInputConnected(1) && (b = this.getInputData(1)); a.setParameter(gl.TEXTURE_MAG_FILTER, this.properties.filter ? gl.LINEAR : gl.NEAREST); if (this.properties.antialiasing) { - C._shader || (C._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, C.aa_pixel_shader)); + B._shader || (B._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, B.aa_pixel_shader)); gl.getViewport(); var c = Mesh.getScreenQuad(); a.bind(0); - C._shader.uniforms({u_texture:0, uViewportSize:[a.width, a.height], u_igamma:1 / b, inverseVP:[1 / a.width, 1 / a.height]}).draw(c); + B._shader.uniforms({u_texture:0, uViewportSize:[a.width, a.height], u_igamma:1 / b, inverseVP:[1 / a.width, 1 / a.height]}).draw(c); } else { - 1.0 != b ? (C._gamma_shader || (C._gamma_shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, C.gamma_pixel_shader)), a.toViewport(C._gamma_shader, {u_texture:0, u_igamma:1 / b})) : a.toViewport(); + 1.0 != b ? (B._gamma_shader || (B._gamma_shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, B.gamma_pixel_shader)), a.toViewport(B._gamma_shader, {u_texture:0, u_igamma:1 / b})) : a.toViewport(); } } }; - C.prototype.onGetInputs = function() { + B.prototype.onGetInputs = function() { return [["gamma", "number"]]; }; - C.aa_pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 uViewportSize;\n\r\n\t\t\tuniform vec2 inverseVP;\n\r\n\t\t\tuniform float u_igamma;\n\r\n\t\t\t#define FXAA_REDUCE_MIN (1.0/ 128.0)\n\r\n\t\t\t#define FXAA_REDUCE_MUL (1.0 / 8.0)\n\r\n\t\t\t#define FXAA_SPAN_MAX 8.0\n\r\n\t\t\t\n\r\n\t\t\t/* from mitsuhiko/webgl-meincraft based on the code on geeks3d.com */\n\r\n\t\t\tvec4 applyFXAA(sampler2D tex, vec2 fragCoord)\n\r\n\t\t\t{\n\r\n\t\t\t\tvec4 color = vec4(0.0);\n\r\n\t\t\t\t/*vec2 inverseVP = vec2(1.0 / uViewportSize.x, 1.0 / uViewportSize.y);*/\n\r\n\t\t\t\tvec3 rgbNW = texture2D(tex, (fragCoord + vec2(-1.0, -1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbNE = texture2D(tex, (fragCoord + vec2(1.0, -1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbSW = texture2D(tex, (fragCoord + vec2(-1.0, 1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbSE = texture2D(tex, (fragCoord + vec2(1.0, 1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbM = texture2D(tex, fragCoord * inverseVP).xyz;\n\r\n\t\t\t\tvec3 luma = vec3(0.299, 0.587, 0.114);\n\r\n\t\t\t\tfloat lumaNW = dot(rgbNW, luma);\n\r\n\t\t\t\tfloat lumaNE = dot(rgbNE, luma);\n\r\n\t\t\t\tfloat lumaSW = dot(rgbSW, luma);\n\r\n\t\t\t\tfloat lumaSE = dot(rgbSE, luma);\n\r\n\t\t\t\tfloat lumaM = dot(rgbM, luma);\n\r\n\t\t\t\tfloat lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n\r\n\t\t\t\tfloat lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\r\n\t\t\t\t\n\r\n\t\t\t\tvec2 dir;\n\r\n\t\t\t\tdir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n\r\n\t\t\t\tdir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\r\n\t\t\t\t\n\r\n\t\t\t\tfloat dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\r\n\t\t\t\t\n\r\n\t\t\t\tfloat rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n\r\n\t\t\t\tdir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * inverseVP;\n\r\n\t\t\t\t\n\r\n\t\t\t\tvec3 rgbA = 0.5 * (texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz + \n\r\n\t\t\t\t\ttexture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n\r\n\t\t\t\tvec3 rgbB = rgbA * 0.5 + 0.25 * (texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz + \n\r\n\t\t\t\t\ttexture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\r\n\t\t\t\t\n\r\n\t\t\t\t//return vec4(rgbA,1.0);\n\r\n\t\t\t\tfloat lumaB = dot(rgbB, luma);\n\r\n\t\t\t\tif ((lumaB < lumaMin) || (lumaB > lumaMax))\n\r\n\t\t\t\t\tcolor = vec4(rgbA, 1.0);\n\r\n\t\t\t\telse\n\r\n\t\t\t\t\tcolor = vec4(rgbB, 1.0);\n\r\n\t\t\t\tif(u_igamma != 1.0)\n\r\n\t\t\t\t\tcolor.xyz = pow( color.xyz, vec3(u_igamma) );\n\r\n\t\t\t\treturn color;\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t gl_FragColor = applyFXAA( u_texture, v_coord * uViewportSize) ;\n\r\n\t\t\t}\n\r\n\t\t\t"; - C.gamma_pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_igamma;\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D( u_texture, v_coord);\n\r\n\t\t\t\tcolor.xyz = pow(color.xyz, vec3(u_igamma) );\n\r\n\t\t\t gl_FragColor = color;\n\r\n\t\t\t}\n\r\n\t\t\t"; - f.registerNodeType("texture/toviewport", C); + B.aa_pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 uViewportSize;\n\r\n\t\t\tuniform vec2 inverseVP;\n\r\n\t\t\tuniform float u_igamma;\n\r\n\t\t\t#define FXAA_REDUCE_MIN (1.0/ 128.0)\n\r\n\t\t\t#define FXAA_REDUCE_MUL (1.0 / 8.0)\n\r\n\t\t\t#define FXAA_SPAN_MAX 8.0\n\r\n\t\t\t\n\r\n\t\t\t/* from mitsuhiko/webgl-meincraft based on the code on geeks3d.com */\n\r\n\t\t\tvec4 applyFXAA(sampler2D tex, vec2 fragCoord)\n\r\n\t\t\t{\n\r\n\t\t\t\tvec4 color = vec4(0.0);\n\r\n\t\t\t\t/*vec2 inverseVP = vec2(1.0 / uViewportSize.x, 1.0 / uViewportSize.y);*/\n\r\n\t\t\t\tvec3 rgbNW = texture2D(tex, (fragCoord + vec2(-1.0, -1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbNE = texture2D(tex, (fragCoord + vec2(1.0, -1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbSW = texture2D(tex, (fragCoord + vec2(-1.0, 1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbSE = texture2D(tex, (fragCoord + vec2(1.0, 1.0)) * inverseVP).xyz;\n\r\n\t\t\t\tvec3 rgbM = texture2D(tex, fragCoord * inverseVP).xyz;\n\r\n\t\t\t\tvec3 luma = vec3(0.299, 0.587, 0.114);\n\r\n\t\t\t\tfloat lumaNW = dot(rgbNW, luma);\n\r\n\t\t\t\tfloat lumaNE = dot(rgbNE, luma);\n\r\n\t\t\t\tfloat lumaSW = dot(rgbSW, luma);\n\r\n\t\t\t\tfloat lumaSE = dot(rgbSE, luma);\n\r\n\t\t\t\tfloat lumaM = dot(rgbM, luma);\n\r\n\t\t\t\tfloat lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n\r\n\t\t\t\tfloat lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n\r\n\t\t\t\t\n\r\n\t\t\t\tvec2 dir;\n\r\n\t\t\t\tdir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n\r\n\t\t\t\tdir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n\r\n\t\t\t\t\n\r\n\t\t\t\tfloat dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);\n\r\n\t\t\t\t\n\r\n\t\t\t\tfloat rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n\r\n\t\t\t\tdir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * inverseVP;\n\r\n\t\t\t\t\n\r\n\t\t\t\tvec3 rgbA = 0.5 * (texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz + \n\r\n\t\t\t\t\ttexture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n\r\n\t\t\t\tvec3 rgbB = rgbA * 0.5 + 0.25 * (texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz + \n\r\n\t\t\t\t\ttexture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n\r\n\t\t\t\t\n\r\n\t\t\t\t//return vec4(rgbA,1.0);\n\r\n\t\t\t\tfloat lumaB = dot(rgbB, luma);\n\r\n\t\t\t\tif ((lumaB < lumaMin) || (lumaB > lumaMax))\n\r\n\t\t\t\t\tcolor = vec4(rgbA, 1.0);\n\r\n\t\t\t\telse\n\r\n\t\t\t\t\tcolor = vec4(rgbB, 1.0);\n\r\n\t\t\t\tif(u_igamma != 1.0)\n\r\n\t\t\t\t\tcolor.xyz = pow( color.xyz, vec3(u_igamma) );\n\r\n\t\t\t\treturn color;\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t gl_FragColor = applyFXAA( u_texture, v_coord * uViewportSize) ;\n\r\n\t\t\t}\n\r\n\t\t\t"; + B.gamma_pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_igamma;\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D( u_texture, v_coord);\n\r\n\t\t\t\tcolor.xyz = pow(color.xyz, vec3(u_igamma) );\n\r\n\t\t\t gl_FragColor = color;\n\r\n\t\t\t}\n\r\n\t\t\t"; + f.registerNodeType("texture/toviewport", B); H.title = "Copy"; H.desc = "Copy Texture"; - H.widgets_info = {size:{widget:"combo", values:[0, 32, 64, 128, 256, 512, 1024, 2048]}, precision:{widget:"combo", values:r.MODE_VALUES}}; + H.widgets_info = {size:{widget:"combo", values:[0, 32, 64, 128, 256, 512, 1024, 2048]}, precision:{widget:"combo", values:t.MODE_VALUES}}; H.prototype.onExecute = function() { var a = this.getInputData(0); if ((a || this._temp_texture) && this.isOutputConnected(0)) { @@ -6212,7 +6316,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var b = a.width, c = a.height; 0 != this.properties.size && (c = b = this.properties.size); var d = this._temp_texture, e = a.type; - this.properties.precision === r.LOW ? e = gl.UNSIGNED_BYTE : this.properties.precision === r.HIGH && (e = gl.HIGH_PRECISION_FORMAT); + this.properties.precision === t.LOW ? e = gl.UNSIGNED_BYTE : this.properties.precision === t.HIGH && (e = gl.HIGH_PRECISION_FORMAT); d && d.width == b && d.height == c && d.type == e || (d = gl.LINEAR, this.properties.generate_mipmaps && isPowerOfTwo(b) && isPowerOfTwo(c) && (d = gl.LINEAR_MIPMAP_LINEAR), this._temp_texture = new GL.Texture(b, c, {type:e, format:gl.RGBA, minFilter:d, magFilter:gl.LINEAR})); a.copyTo(this._temp_texture); this.properties.generate_mipmaps && (this._temp_texture.bind(0), gl.generateMipmap(this._temp_texture.texture_type), this._temp_texture.unbind(0)); @@ -6223,35 +6327,35 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.registerNodeType("texture/copy", H); E.title = "Downsample"; E.desc = "Downsample Texture"; - E.widgets_info = {iterations:{type:"number", step:1, precision:0, min:1}, precision:{widget:"combo", values:r.MODE_VALUES}}; + E.widgets_info = {iterations:{type:"number", step:1, precision:0, min:1}, precision:{widget:"combo", values:t.MODE_VALUES}}; E.prototype.onExecute = function() { var a = this.getInputData(0); if ((a || this._temp_texture) && this.isOutputConnected(0) && a && a.texture_type === GL.TEXTURE_2D) { var b = E._shader; b || (E._shader = b = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, E.pixel_shader)); var c = a.width | 0, d = a.height | 0, e = a.type; - this.properties.precision === r.LOW ? e = gl.UNSIGNED_BYTE : this.properties.precision === r.HIGH && (e = gl.HIGH_PRECISION_FORMAT); - var f = this.properties.iterations || 1, g = a, l = []; + this.properties.precision === t.LOW ? e = gl.UNSIGNED_BYTE : this.properties.precision === t.HIGH && (e = gl.HIGH_PRECISION_FORMAT); + var f = this.properties.iterations || 1, g = a, k = []; e = {type:e, format:a.format}; - var k = vec2.create(), m = {u_offset:k}; + var h = vec2.create(), n = {u_offset:h}; this._texture && GL.Texture.releaseTemporary(this._texture); - for (var h = 0; h < f; ++h) { - k[0] = 1 / c; - k[1] = 1 / d; + for (var l = 0; l < f; ++l) { + h[0] = 1 / c; + h[1] = 1 / d; c = c >> 1 || 0; d = d >> 1 || 0; a = GL.Texture.getTemporary(c, d, e); - l.push(a); + k.push(a); g.setParameter(GL.TEXTURE_MAG_FILTER, GL.NEAREST); - g.copyTo(a, b, m); + g.copyTo(a, b, n); if (1 == c && 1 == d) { break; } g = a; } - this._texture = l.pop(); - for (h = 0; h < l.length; ++h) { - GL.Texture.releaseTemporary(l[h]); + this._texture = k.pop(); + for (l = 0; l < k.length; ++l) { + GL.Texture.releaseTemporary(k[l]); } this.properties.generate_mipmaps && (this._texture.bind(0), gl.generateMipmap(this._texture.texture_type), this._texture.unbind(0)); this.setOutputData(0, this._texture); @@ -6259,23 +6363,23 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; E.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_offset;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord );\n\r\n\t\t\t\tcolor += texture2D(u_texture, v_coord + vec2( u_offset.x, 0.0 ) );\n\r\n\t\t\t\tcolor += texture2D(u_texture, v_coord + vec2( 0.0, u_offset.y ) );\n\r\n\t\t\t\tcolor += texture2D(u_texture, v_coord + vec2( u_offset.x, u_offset.y ) );\n\r\n\t\t\t gl_FragColor = color * 0.25;\n\r\n\t\t\t}\n\r\n\t\t\t"; f.registerNodeType("texture/downsample", E); - x.title = "Average"; - x.desc = "Compute a partial average (32 random samples) of a texture and stores it as a 1x1 pixel texture"; - x.prototype.onExecute = function() { + q.title = "Average"; + q.desc = "Compute a partial average (32 random samples) of a texture and stores it as a 1x1 pixel texture"; + q.prototype.onExecute = function() { var a = this.getInputData(0); if (a && (this.isOutputConnected(0) || this.isOutputConnected(1) || this.isOutputConnected(2))) { - if (!x._shader) { - x._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, x.pixel_shader); + if (!q._shader) { + q._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, q.pixel_shader); for (var b = new Float32Array(32), c = 0; 32 > c; ++c) { b[c] = Math.random(); } - x._shader.uniforms({u_samples_a:b.subarray(0, 16), u_samples_b:b.subarray(16, 32)}); + q._shader.uniforms({u_samples_a:b.subarray(0, 16), u_samples_b:b.subarray(16, 32)}); } c = this._temp_texture; b = gl.UNSIGNED_BYTE; a.type != b && (b = gl.FLOAT); c && c.type == b || (this._temp_texture = new GL.Texture(1, 1, {type:b, format:gl.RGBA, filter:gl.NEAREST})); - var d = x._shader, e = this._uniforms; + var d = q._shader, e = this._uniforms; e.u_mipmap_offset = this.properties.mipmap_offset; this._temp_texture.drawTo(function() { a.toViewport(d, e); @@ -6293,8 +6397,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - x.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tuniform mat4 u_samples_a;\n\r\n\t\t\tuniform mat4 u_samples_b;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_mipmap_offset;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = vec4(0.0);\n\r\n\t\t\t\tfor(int i = 0; i < 4; ++i)\n\r\n\t\t\t\t\tfor(int j = 0; j < 4; ++j)\n\r\n\t\t\t\t\t{\n\r\n\t\t\t\t\t\tcolor += texture2D(u_texture, vec2( u_samples_a[i][j], u_samples_b[i][j] ), u_mipmap_offset );\n\r\n\t\t\t\t\t\tcolor += texture2D(u_texture, vec2( 1.0 - u_samples_a[i][j], 1.0 - u_samples_b[i][j] ), u_mipmap_offset );\n\r\n\t\t\t\t\t}\n\r\n\t\t\t gl_FragColor = color * 0.03125;\n\r\n\t\t\t}\n\r\n\t\t\t"; - f.registerNodeType("texture/average", x); + q.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tuniform mat4 u_samples_a;\n\r\n\t\t\tuniform mat4 u_samples_b;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_mipmap_offset;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = vec4(0.0);\n\r\n\t\t\t\tfor(int i = 0; i < 4; ++i)\n\r\n\t\t\t\t\tfor(int j = 0; j < 4; ++j)\n\r\n\t\t\t\t\t{\n\r\n\t\t\t\t\t\tcolor += texture2D(u_texture, vec2( u_samples_a[i][j], u_samples_b[i][j] ), u_mipmap_offset );\n\r\n\t\t\t\t\t\tcolor += texture2D(u_texture, vec2( 1.0 - u_samples_a[i][j], 1.0 - u_samples_b[i][j] ), u_mipmap_offset );\n\r\n\t\t\t\t\t}\n\r\n\t\t\t gl_FragColor = color * 0.03125;\n\r\n\t\t\t}\n\r\n\t\t\t"; + f.registerNodeType("texture/average", q); G.title = "Image to Texture"; G.desc = "Uploads an image to the GPU"; G.prototype.onExecute = function() { @@ -6317,18 +6421,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } }; f.registerNodeType("texture/imageToTexture", G); - A.widgets_info = {texture:{widget:"texture"}, precision:{widget:"combo", values:r.MODE_VALUES}}; + A.widgets_info = {texture:{widget:"texture"}, precision:{widget:"combo", values:t.MODE_VALUES}}; A.title = "LUT"; A.desc = "Apply LUT to Texture"; A.prototype.onExecute = function() { if (this.isOutputConnected(0)) { var a = this.getInputData(0); - if (this.properties.precision === r.PASS_THROUGH) { + if (this.properties.precision === t.PASS_THROUGH) { this.setOutputData(0, a); } else { if (a) { var b = this.getInputData(1); - b || (b = r.getTexture(this.properties.texture)); + b || (b = t.getTexture(this.properties.texture)); if (b) { b.bind(0); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); @@ -6337,7 +6441,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { gl.bindTexture(gl.TEXTURE_2D, null); var c = this.properties.intensity; this.isInputConnected(2) && (this.properties.intensity = c = this.getInputData(2)); - this._tex = r.getTargetTexture(a, this._tex, this.properties.precision); + this._tex = t.getTargetTexture(a, this._tex, this.properties.precision); this._tex.drawTo(function() { b.bind(1); a.toViewport(A._shader, {u_texture:0, u_textureB:1, u_amount:c}); @@ -6376,15 +6480,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }; p.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec4 u_mask;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t gl_FragColor = vec4( vec3( length( texture2D(u_texture, v_coord) * u_mask )), 1.0 );\n\r\n\t\t\t}\n\r\n\t\t\t"; f.registerNodeType("texture/textureChannels", p); - l.title = "Channels to Texture"; - l.desc = "Split texture channels"; - l.prototype.onExecute = function() { + k.title = "Channels to Texture"; + k.desc = "Split texture channels"; + k.prototype.onExecute = function() { var a = [this.getInputData(0), this.getInputData(1), this.getInputData(2), this.getInputData(3)]; if (a[0] && a[1] && a[2] && a[3]) { gl.disable(gl.BLEND); gl.disable(gl.DEPTH_TEST); - var b = Mesh.getScreenQuad(), c = l._shader; - this._tex = r.getTargetTexture(a[0], this._tex); + var b = Mesh.getScreenQuad(), c = k._shader; + this._tex = t.getTargetTexture(a[0], this._tex); this._tex.drawTo(function() { a[0].bind(0); a[1].bind(1); @@ -6395,8 +6499,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, this._tex); } }; - l.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_textureR;\n\r\n\t\t\tuniform sampler2D u_textureG;\n\r\n\t\t\tuniform sampler2D u_textureB;\n\r\n\t\t\tuniform sampler2D u_textureA;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t gl_FragColor = vec4( \r\n\t\t\t\t\t\ttexture2D(u_textureR, v_coord).r,\r\n\t\t\t\t\t\ttexture2D(u_textureG, v_coord).r,\r\n\t\t\t\t\t\ttexture2D(u_textureB, v_coord).r,\r\n\t\t\t\t\t\ttexture2D(u_textureA, v_coord).r);\n\r\n\t\t\t}\n\r\n\t\t\t"; - f.registerNodeType("texture/channelsTexture", l); + k.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_textureR;\n\r\n\t\t\tuniform sampler2D u_textureG;\n\r\n\t\t\tuniform sampler2D u_textureB;\n\r\n\t\t\tuniform sampler2D u_textureA;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t gl_FragColor = vec4( \r\n\t\t\t\t\t\ttexture2D(u_textureR, v_coord).r,\r\n\t\t\t\t\t\ttexture2D(u_textureG, v_coord).r,\r\n\t\t\t\t\t\ttexture2D(u_textureB, v_coord).r,\r\n\t\t\t\t\t\ttexture2D(u_textureA, v_coord).r);\n\r\n\t\t\t}\n\r\n\t\t\t"; + f.registerNodeType("texture/channelsTexture", k); g.title = "Gradient"; g.desc = "Generates a gradient"; g["@A"] = {type:"color"}; @@ -6410,18 +6514,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { var d = this.getInputData(1); d || (d = this.properties.B); for (var e = 2; e < this.inputs.length; e++) { - var f = this.inputs[e], l = this.getInputData(e); - void 0 !== l && (this.properties[f.name] = l); + var f = this.inputs[e], k = this.getInputData(e); + void 0 !== k && (this.properties[f.name] = k); } - var k = this._uniforms; + var h = this._uniforms; this._uniforms.u_angle = this.properties.angle * DEG2RAD; this._uniforms.u_scale = this.properties.scale; - vec3.copy(k.u_colorA, c); - vec3.copy(k.u_colorB, d); + vec3.copy(h.u_colorA, c); + vec3.copy(h.u_colorB, d); c = parseInt(this.properties.texture_size); this._tex && this._tex.width == c || (this._tex = new GL.Texture(c, c, {format:gl.RGB, filter:gl.LINEAR})); this._tex.drawTo(function() { - b.uniforms(k).draw(a); + b.uniforms(h).draw(a); }); this.setOutputData(0, this._tex); }; @@ -6432,16 +6536,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.registerNodeType("texture/gradient", g); z.title = "Mix"; z.desc = "Generates a texture mixing two textures"; - z.widgets_info = {precision:{widget:"combo", values:r.MODE_VALUES}}; + z.widgets_info = {precision:{widget:"combo", values:t.MODE_VALUES}}; z.prototype.onExecute = function() { var a = this.getInputData(0); if (this.isOutputConnected(0)) { - if (this.properties.precision === r.PASS_THROUGH) { + if (this.properties.precision === t.PASS_THROUGH) { this.setOutputData(0, a); } else { var b = this.getInputData(1), c = this.getInputData(2); if (a && b && c) { - this._tex = r.getTargetTexture(a, this._tex, this.properties.precision); + this._tex = t.getTargetTexture(a, this._tex, this.properties.precision); gl.disable(gl.BLEND); gl.disable(gl.DEPTH_TEST); var d = Mesh.getScreenQuad(), e = z._shader; @@ -6460,15 +6564,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.registerNodeType("texture/mix", z); e.title = "Edges"; e.desc = "Detects edges"; - e.widgets_info = {precision:{widget:"combo", values:r.MODE_VALUES}}; + e.widgets_info = {precision:{widget:"combo", values:t.MODE_VALUES}}; e.prototype.onExecute = function() { if (this.isOutputConnected(0)) { var a = this.getInputData(0); - if (this.properties.precision === r.PASS_THROUGH) { + if (this.properties.precision === t.PASS_THROUGH) { this.setOutputData(0, a); } else { if (a) { - this._tex = r.getTargetTexture(a, this._tex, this.properties.precision); + this._tex = t.getTargetTexture(a, this._tex, this.properties.precision); gl.disable(gl.BLEND); gl.disable(gl.DEPTH_TEST); var b = Mesh.getScreenQuad(), c = e._shader, d = this.properties.invert, f = this.properties.factor, g = this.properties.threshold ? 1 : 0; @@ -6520,7 +6624,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.registerNodeType("texture/depth_range", b); a.title = "Blur"; a.desc = "Blur a texture"; - a.widgets_info = {precision:{widget:"combo", values:r.MODE_VALUES}}; + a.widgets_info = {precision:{widget:"combo", values:t.MODE_VALUES}}; a.max_iterations = 20; a.prototype.onExecute = function() { var b = this.getInputData(0); @@ -6539,10 +6643,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { g || void 0 === window.gl || (g = gl.canvas.height / gl.canvas.width); g || (g = 1); g = this.properties.preserve_aspect ? g : 1; - var l = this.properties.scale || [1, 1]; - b.applyBlur(g * l[0], l[1], e, c); + var k = this.properties.scale || [1, 1]; + b.applyBlur(g * k[0], k[1], e, c); for (b = 1; b < d; ++b) { - c.applyBlur(g * l[0] * (b + 1), l[1] * (b + 1), e); + c.applyBlur(g * k[0] * (b + 1), k[1] * (b + 1), e); } this.setOutputData(0, c); } @@ -6552,7 +6656,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.title = "Glow"; c.desc = "Filters a texture giving it a glow effect"; c.weights = new Float32Array([0.5, 0.4, 0.3, 0.2]); - c.widgets_info = {iterations:{type:"number", min:0, max:16, step:1, precision:0}, threshold:{type:"number", min:0, max:10, step:0.01, precision:2}, precision:{widget:"combo", values:r.MODE_VALUES}}; + c.widgets_info = {iterations:{type:"number", min:0, max:16, step:1, precision:0}, threshold:{type:"number", min:0, max:10, step:0.01, precision:2}, precision:{widget:"combo", values:t.MODE_VALUES}}; c.prototype.onGetInputs = function() { return [["enabled", "boolean"], ["threshold", "number"], ["intensity", "number"], ["persistence", "number"], ["iterations", "number"], ["dirt_factor", "number"]]; }; @@ -6562,61 +6666,61 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.prototype.onExecute = function() { var a = this.getInputData(0); if (a && this.isAnyOutputConnected()) { - if (this.properties.precision === r.PASS_THROUGH || !1 === this.getInputOrProperty("enabled")) { + if (this.properties.precision === t.PASS_THROUGH || !1 === this.getInputOrProperty("enabled")) { this.setOutputData(0, a); } else { - var b = a.width, d = a.height, e = {format:a.format, type:a.type, minFilter:GL.LINEAR, magFilter:GL.LINEAR, wrap:gl.CLAMP_TO_EDGE}, f = r.getTextureType(this.properties.precision, a), g = this._uniforms, l = this._textures, k = c._cut_shader; - k || (k = c._cut_shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.cut_pixel_shader)); + var b = a.width, d = a.height, e = {format:a.format, type:a.type, minFilter:GL.LINEAR, magFilter:GL.LINEAR, wrap:gl.CLAMP_TO_EDGE}, f = t.getTextureType(this.properties.precision, a), g = this._uniforms, k = this._textures, h = c._cut_shader; + h || (h = c._cut_shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.cut_pixel_shader)); gl.disable(gl.DEPTH_TEST); gl.disable(gl.BLEND); g.u_threshold = this.getInputOrProperty("threshold"); - var h = l[0] = GL.Texture.getTemporary(b, d, e); - a.blit(h, k.uniforms(g)); - var m = h, p = this.getInputOrProperty("iterations"); + var n = k[0] = GL.Texture.getTemporary(b, d, e); + a.blit(n, h.uniforms(g)); + var l = n, p = this.getInputOrProperty("iterations"); p = Math.clamp(p, 1, 16) | 0; - var n = g.u_texel_size, q = this.getInputOrProperty("intensity"); + var m = g.u_texel_size, q = this.getInputOrProperty("intensity"); g.u_intensity = 1; g.u_delta = this.properties.scale; - k = c._shader; - k || (k = c._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.scale_pixel_shader)); - for (var t = 1; t < p; t++) { + h = c._shader; + h || (h = c._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.scale_pixel_shader)); + for (var u = 1; u < p; u++) { b >>= 1; 1 < (d | 0) && (d >>= 1); if (2 > b) { break; } - h = l[t] = GL.Texture.getTemporary(b, d, e); - n[0] = 1 / m.width; - n[1] = 1 / m.height; - m.blit(h, k.uniforms(g)); - m = h; + n = k[u] = GL.Texture.getTemporary(b, d, e); + m[0] = 1 / l.width; + m[1] = 1 / l.height; + l.blit(n, h.uniforms(g)); + l = n; } - this.isOutputConnected(2) && (b = this._average_texture, b && b.type == a.type && b.format == a.format || (b = this._average_texture = new GL.Texture(1, 1, {type:a.type, format:a.format, filter:gl.LINEAR})), n[0] = 1 / m.width, n[1] = 1 / m.height, g.u_intensity = q, g.u_delta = 1, m.blit(b, k.uniforms(g)), this.setOutputData(2, b)); + this.isOutputConnected(2) && (b = this._average_texture, b && b.type == a.type && b.format == a.format || (b = this._average_texture = new GL.Texture(1, 1, {type:a.type, format:a.format, filter:gl.LINEAR})), m[0] = 1 / l.width, m[1] = 1 / l.height, g.u_intensity = q, g.u_delta = 1, l.blit(b, h.uniforms(g)), this.setOutputData(2, b)); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE); g.u_intensity = this.getInputOrProperty("persistence"); g.u_delta = 0.5; - for (t -= 2; 0 <= t; t--) { - h = l[t], l[t] = null, n[0] = 1 / m.width, n[1] = 1 / m.height, m.blit(h, k.uniforms(g)), GL.Texture.releaseTemporary(m), m = h; + for (u -= 2; 0 <= u; u--) { + n = k[u], k[u] = null, m[0] = 1 / l.width, m[1] = 1 / l.height, l.blit(n, h.uniforms(g)), GL.Texture.releaseTemporary(l), l = n; } gl.disable(gl.BLEND); - this.isOutputConnected(1) && (l = this._glow_texture, l && l.width == a.width && l.height == a.height && l.type == f && l.format == a.format || (l = this._glow_texture = new GL.Texture(a.width, a.height, {type:f, format:a.format, filter:gl.LINEAR})), m.blit(l), this.setOutputData(1, l)); + this.isOutputConnected(1) && (k = this._glow_texture, k && k.width == a.width && k.height == a.height && k.type == f && k.format == a.format || (k = this._glow_texture = new GL.Texture(a.width, a.height, {type:f, format:a.format, filter:gl.LINEAR})), l.blit(k), this.setOutputData(1, k)); if (this.isOutputConnected(0)) { - l = this._final_texture; - l && l.width == a.width && l.height == a.height && l.type == f && l.format == a.format || (l = this._final_texture = new GL.Texture(a.width, a.height, {type:f, format:a.format, filter:gl.LINEAR})); - var u = this.getInputData(1), v = this.getInputOrProperty("dirt_factor"); + k = this._final_texture; + k && k.width == a.width && k.height == a.height && k.type == f && k.format == a.format || (k = this._final_texture = new GL.Texture(a.width, a.height, {type:f, format:a.format, filter:gl.LINEAR})); + var r = this.getInputData(1), v = this.getInputOrProperty("dirt_factor"); g.u_intensity = q; - k = u ? c._dirt_final_shader : c._final_shader; - k || (k = u ? c._dirt_final_shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.final_pixel_shader, {USE_DIRT:""}) : c._final_shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.final_pixel_shader)); - l.drawTo(function() { + h = r ? c._dirt_final_shader : c._final_shader; + h || (h = r ? c._dirt_final_shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.final_pixel_shader, {USE_DIRT:""}) : c._final_shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, c.final_pixel_shader)); + k.drawTo(function() { a.bind(0); - m.bind(1); - u && (k.setUniform("u_dirt_factor", v), k.setUniform("u_dirt_texture", u.bind(2))); - k.toViewport(g); + l.bind(1); + r && (h.setUniform("u_dirt_factor", v), h.setUniform("u_dirt_texture", r.bind(2))); + h.toViewport(g); }); - this.setOutputData(0, l); + this.setOutputData(0, k); } - GL.Texture.releaseTemporary(m); + GL.Texture.releaseTemporary(l); } } }; @@ -6624,17 +6728,17 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { c.scale_pixel_shader = "precision highp float;\n\r\n\t\tvarying vec2 v_coord;\n\r\n\t\tuniform sampler2D u_texture;\n\r\n\t\tuniform vec2 u_texel_size;\n\r\n\t\tuniform float u_delta;\n\r\n\t\tuniform float u_intensity;\n\r\n\t\t\n\r\n\t\tvec4 sampleBox(vec2 uv) {\n\r\n\t\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\r\n\t\t\tvec4 s = texture2D( u_texture, uv + o.xy ) + texture2D( u_texture, uv + o.zy) + texture2D( u_texture, uv + o.xw) + texture2D( u_texture, uv + o.zw);\n\r\n\t\t\treturn s * 0.25;\n\r\n\t\t}\n\r\n\t\tvoid main() {\n\r\n\t\t\tgl_FragColor = u_intensity * sampleBox( v_coord );\n\r\n\t\t}"; c.final_pixel_shader = "precision highp float;\n\r\n\t\tvarying vec2 v_coord;\n\r\n\t\tuniform sampler2D u_texture;\n\r\n\t\tuniform sampler2D u_glow_texture;\n\r\n\t\t#ifdef USE_DIRT\n\r\n\t\t\tuniform sampler2D u_dirt_texture;\n\r\n\t\t#endif\n\r\n\t\tuniform vec2 u_texel_size;\n\r\n\t\tuniform float u_delta;\n\r\n\t\tuniform float u_intensity;\n\r\n\t\tuniform float u_dirt_factor;\n\r\n\t\t\n\r\n\t\tvec4 sampleBox(vec2 uv) {\n\r\n\t\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\r\n\t\t\tvec4 s = texture2D( u_glow_texture, uv + o.xy ) + texture2D( u_glow_texture, uv + o.zy) + texture2D( u_glow_texture, uv + o.xw) + texture2D( u_glow_texture, uv + o.zw);\n\r\n\t\t\treturn s * 0.25;\n\r\n\t\t}\n\r\n\t\tvoid main() {\n\r\n\t\t\tvec4 glow = sampleBox( v_coord );\n\r\n\t\t\t#ifdef USE_DIRT\n\r\n\t\t\t\tglow = mix( glow, glow * texture2D( u_dirt_texture, v_coord ), u_dirt_factor );\n\r\n\t\t\t#endif\n\r\n\t\t\tgl_FragColor = texture2D( u_texture, v_coord ) + u_intensity * glow;\n\r\n\t\t}"; f.registerNodeType("texture/glow", c); - m.title = "Kuwahara Filter"; - m.desc = "Filters a texture giving an artistic oil canvas painting"; - m.max_radius = 10; - m._shaders = []; - m.prototype.onExecute = function() { + n.title = "Kuwahara Filter"; + n.desc = "Filters a texture giving an artistic oil canvas painting"; + n.max_radius = 10; + n._shaders = []; + n.prototype.onExecute = function() { var a = this.getInputData(0); if (a && this.isOutputConnected(0)) { var b = this._temp_texture; b && b.width == a.width && b.height == a.height && b.type == a.type || (this._temp_texture = new GL.Texture(a.width, a.height, {type:a.type, format:gl.RGBA, filter:gl.LINEAR})); b = this.properties.radius; - b = Math.min(Math.floor(b), m.max_radius); + b = Math.min(Math.floor(b), n.max_radius); if (0 == b) { this.setOutputData(0, a); } else { @@ -6642,8 +6746,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d || void 0 === window.gl || (d = gl.canvas.height / gl.canvas.width); d || (d = 1); d = this.properties.preserve_aspect ? d : 1; - m._shaders[b] || (m._shaders[b] = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, m.pixel_shader, {RADIUS:b.toFixed(0)})); - var e = m._shaders[b], g = GL.Mesh.getScreenQuad(); + n._shaders[b] || (n._shaders[b] = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, n.pixel_shader, {RADIUS:b.toFixed(0)})); + var e = n._shaders[b], g = GL.Mesh.getScreenQuad(); a.bind(0); this._temp_texture.drawTo(function() { e.uniforms({u_texture:0, u_intensity:c, u_resolution:[a.width, a.height], u_iResolution:[1 / a.width, 1 / a.height]}).draw(g); @@ -6652,11 +6756,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - m.pixel_shader = "\n\r\n\tprecision highp float;\n\r\n\tvarying vec2 v_coord;\n\r\n\tuniform sampler2D u_texture;\n\r\n\tuniform float u_intensity;\n\r\n\tuniform vec2 u_resolution;\n\r\n\tuniform vec2 u_iResolution;\n\r\n\t#ifndef RADIUS\n\r\n\t\t#define RADIUS 7\n\r\n\t#endif\n\r\n\tvoid main() {\n\r\n\t\n\r\n\t\tconst int radius = RADIUS;\n\r\n\t\tvec2 fragCoord = v_coord;\n\r\n\t\tvec2 src_size = u_iResolution;\n\r\n\t\tvec2 uv = v_coord;\n\r\n\t\tfloat n = float((radius + 1) * (radius + 1));\n\r\n\t\tint i;\n\r\n\t\tint j;\n\r\n\t\tvec3 m0 = vec3(0.0); vec3 m1 = vec3(0.0); vec3 m2 = vec3(0.0); vec3 m3 = vec3(0.0);\n\r\n\t\tvec3 s0 = vec3(0.0); vec3 s1 = vec3(0.0); vec3 s2 = vec3(0.0); vec3 s3 = vec3(0.0);\n\r\n\t\tvec3 c;\n\r\n\t\t\n\r\n\t\tfor (int j = -radius; j <= 0; ++j) {\n\r\n\t\t\tfor (int i = -radius; i <= 0; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm0 += c;\n\r\n\t\t\t\ts0 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfor (int j = -radius; j <= 0; ++j) {\n\r\n\t\t\tfor (int i = 0; i <= radius; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm1 += c;\n\r\n\t\t\t\ts1 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfor (int j = 0; j <= radius; ++j) {\n\r\n\t\t\tfor (int i = 0; i <= radius; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm2 += c;\n\r\n\t\t\t\ts2 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfor (int j = 0; j <= radius; ++j) {\n\r\n\t\t\tfor (int i = -radius; i <= 0; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm3 += c;\n\r\n\t\t\t\ts3 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfloat min_sigma2 = 1e+2;\n\r\n\t\tm0 /= n;\n\r\n\t\ts0 = abs(s0 / n - m0 * m0);\n\r\n\t\t\n\r\n\t\tfloat sigma2 = s0.r + s0.g + s0.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m0, 1.0);\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tm1 /= n;\n\r\n\t\ts1 = abs(s1 / n - m1 * m1);\n\r\n\t\t\n\r\n\t\tsigma2 = s1.r + s1.g + s1.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m1, 1.0);\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tm2 /= n;\n\r\n\t\ts2 = abs(s2 / n - m2 * m2);\n\r\n\t\t\n\r\n\t\tsigma2 = s2.r + s2.g + s2.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m2, 1.0);\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tm3 /= n;\n\r\n\t\ts3 = abs(s3 / n - m3 * m3);\n\r\n\t\t\n\r\n\t\tsigma2 = s3.r + s3.g + s3.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m3, 1.0);\n\r\n\t\t}\n\r\n\t}\n\r\n\t"; - f.registerNodeType("texture/kuwahara", m); - k.title = "Webcam"; - k.desc = "Webcam texture"; - k.prototype.openStream = function() { + n.pixel_shader = "\n\r\n\tprecision highp float;\n\r\n\tvarying vec2 v_coord;\n\r\n\tuniform sampler2D u_texture;\n\r\n\tuniform float u_intensity;\n\r\n\tuniform vec2 u_resolution;\n\r\n\tuniform vec2 u_iResolution;\n\r\n\t#ifndef RADIUS\n\r\n\t\t#define RADIUS 7\n\r\n\t#endif\n\r\n\tvoid main() {\n\r\n\t\n\r\n\t\tconst int radius = RADIUS;\n\r\n\t\tvec2 fragCoord = v_coord;\n\r\n\t\tvec2 src_size = u_iResolution;\n\r\n\t\tvec2 uv = v_coord;\n\r\n\t\tfloat n = float((radius + 1) * (radius + 1));\n\r\n\t\tint i;\n\r\n\t\tint j;\n\r\n\t\tvec3 m0 = vec3(0.0); vec3 m1 = vec3(0.0); vec3 m2 = vec3(0.0); vec3 m3 = vec3(0.0);\n\r\n\t\tvec3 s0 = vec3(0.0); vec3 s1 = vec3(0.0); vec3 s2 = vec3(0.0); vec3 s3 = vec3(0.0);\n\r\n\t\tvec3 c;\n\r\n\t\t\n\r\n\t\tfor (int j = -radius; j <= 0; ++j) {\n\r\n\t\t\tfor (int i = -radius; i <= 0; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm0 += c;\n\r\n\t\t\t\ts0 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfor (int j = -radius; j <= 0; ++j) {\n\r\n\t\t\tfor (int i = 0; i <= radius; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm1 += c;\n\r\n\t\t\t\ts1 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfor (int j = 0; j <= radius; ++j) {\n\r\n\t\t\tfor (int i = 0; i <= radius; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm2 += c;\n\r\n\t\t\t\ts2 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfor (int j = 0; j <= radius; ++j) {\n\r\n\t\t\tfor (int i = -radius; i <= 0; ++i) {\n\r\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\r\n\t\t\t\tm3 += c;\n\r\n\t\t\t\ts3 += c * c;\n\r\n\t\t\t}\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tfloat min_sigma2 = 1e+2;\n\r\n\t\tm0 /= n;\n\r\n\t\ts0 = abs(s0 / n - m0 * m0);\n\r\n\t\t\n\r\n\t\tfloat sigma2 = s0.r + s0.g + s0.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m0, 1.0);\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tm1 /= n;\n\r\n\t\ts1 = abs(s1 / n - m1 * m1);\n\r\n\t\t\n\r\n\t\tsigma2 = s1.r + s1.g + s1.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m1, 1.0);\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tm2 /= n;\n\r\n\t\ts2 = abs(s2 / n - m2 * m2);\n\r\n\t\t\n\r\n\t\tsigma2 = s2.r + s2.g + s2.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m2, 1.0);\n\r\n\t\t}\n\r\n\t\t\n\r\n\t\tm3 /= n;\n\r\n\t\ts3 = abs(s3 / n - m3 * m3);\n\r\n\t\t\n\r\n\t\tsigma2 = s3.r + s3.g + s3.b;\n\r\n\t\tif (sigma2 < min_sigma2) {\n\r\n\t\t\tmin_sigma2 = sigma2;\n\r\n\t\t\tgl_FragColor = vec4(m3, 1.0);\n\r\n\t\t}\n\r\n\t}\n\r\n\t"; + f.registerNodeType("texture/kuwahara", n); + h.title = "Webcam"; + h.desc = "Webcam texture"; + h.prototype.openStream = function() { navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; window.URL = window.URL || window.webkitURL; if (navigator.getUserMedia) { @@ -6669,50 +6773,50 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }); } }; - k.prototype.streamReady = function(a) { + h.prototype.streamReady = function(a) { this._webcam_stream = a; var b = this._video; b || (b = document.createElement("video"), b.autoplay = !0, b.src = window.URL.createObjectURL(a), this._video = b, b.onloadedmetadata = function(a) { console.log(a); }); }; - k.prototype.onRemoved = function() { + h.prototype.onRemoved = function() { if (this._webcam_stream) { var a = this._webcam_stream.getVideoTracks(); a.length && (a = a[0], a.stop && a.stop()); this._video = this._webcam_stream = null; } }; - k.prototype.onDrawBackground = function(a) { + h.prototype.onDrawBackground = function(a) { this.flags.collapsed || 20 >= this.size[1] || !this._video || (a.save(), a.webgl ? this._temp_texture && a.drawImage(this._temp_texture, 0, 0, this.size[0], this.size[1]) : (a.translate(0, this.size[1]), a.scale(1, -1), a.drawImage(this._video, 0, 0, this.size[0], this.size[1])), a.restore()); }; - k.prototype.onExecute = function() { + h.prototype.onExecute = function() { null != this._webcam_stream || this._waiting_confirmation || this.openStream(); if (this._video && this._video.videoWidth) { var a = this._video.videoWidth, b = this._video.videoHeight, c = this._temp_texture; c && c.width == a && c.height == b || (this._temp_texture = new GL.Texture(a, b, {format:gl.RGB, filter:gl.LINEAR})); this._temp_texture.uploadImage(this._video); - this.properties.texture_name && (r.getTexturesContainer()[this.properties.texture_name] = this._temp_texture); + this.properties.texture_name && (t.getTexturesContainer()[this.properties.texture_name] = this._temp_texture); this.setOutputData(0, this._temp_texture); } }; - f.registerNodeType("texture/webcam", k); - w.title = "Lens FX"; - w.desc = "distortion and chromatic aberration"; - w.widgets_info = {precision:{widget:"combo", values:r.MODE_VALUES}}; - w.prototype.onGetInputs = function() { + f.registerNodeType("texture/webcam", h); + x.title = "Lens FX"; + x.desc = "distortion and chromatic aberration"; + x.widgets_info = {precision:{widget:"combo", values:t.MODE_VALUES}}; + x.prototype.onGetInputs = function() { return [["enabled", "boolean"]]; }; - w.prototype.onExecute = function() { + x.prototype.onExecute = function() { var a = this.getInputData(0); if (a && this.isOutputConnected(0)) { - if (this.properties.precision === r.PASS_THROUGH || !1 === this.getInputOrProperty("enabled")) { + if (this.properties.precision === t.PASS_THROUGH || !1 === this.getInputOrProperty("enabled")) { this.setOutputData(0, a); } else { var b = this._temp_texture; b && b.width == a.width && b.height == a.height && b.type == a.type || (b = this._temp_texture = new GL.Texture(a.width, a.height, {type:a.type, format:gl.RGBA, filter:gl.LINEAR})); - var c = w._shader; - c || (c = w._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, w.pixel_shader)); + var c = x._shader; + c || (c = x._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, x.pixel_shader)); var d = this.getInputData(1); null == d && (d = this.properties.factor); var e = this._uniforms; @@ -6726,18 +6830,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - w.pixel_shader = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_factor;\n\r\n\t\t\tvec2 barrelDistortion(vec2 coord, float amt) {\n\r\n\t\t\t\tvec2 cc = coord - 0.5;\n\r\n\t\t\t\tfloat dist = dot(cc, cc);\n\r\n\t\t\t\treturn coord + cc * dist * amt;\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tfloat sat( float t )\n\r\n\t\t\t{\n\r\n\t\t\t\treturn clamp( t, 0.0, 1.0 );\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tfloat linterp( float t ) {\n\r\n\t\t\t\treturn sat( 1.0 - abs( 2.0*t - 1.0 ) );\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tfloat remap( float t, float a, float b ) {\n\r\n\t\t\t\treturn sat( (t - a) / (b - a) );\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tvec4 spectrum_offset( float t ) {\n\r\n\t\t\t\tvec4 ret;\n\r\n\t\t\t\tfloat lo = step(t,0.5);\n\r\n\t\t\t\tfloat hi = 1.0-lo;\n\r\n\t\t\t\tfloat w = linterp( remap( t, 1.0/6.0, 5.0/6.0 ) );\n\r\n\t\t\t\tret = vec4(lo,1.0,hi, 1.) * vec4(1.0-w, w, 1.0-w, 1.);\n\r\n\t\t\t\n\r\n\t\t\t\treturn pow( ret, vec4(1.0/2.2) );\n\r\n\t\t\t}\n\r\n\t\t\t\n\r\n\t\t\tconst float max_distort = 2.2;\n\r\n\t\t\tconst int num_iter = 12;\n\r\n\t\t\tconst float reci_num_iter_f = 1.0 / float(num_iter);\n\r\n\t\t\t\n\r\n\t\t\tvoid main()\n\r\n\t\t\t{\t\n\r\n\t\t\t\tvec2 uv=v_coord;\n\r\n\t\t\t\tvec4 sumcol = vec4(0.0);\n\r\n\t\t\t\tvec4 sumw = vec4(0.0);\t\n\r\n\t\t\t\tfor ( int i=0; i= this.size[1] || !a.webgl || gl.meshes.cube || (gl.meshes.cube = GL.Mesh.cube({size:1})); }; - f.registerNodeType("texture/cubemap", h); + f.registerNodeType("texture/cubemap", l); } })(this); -(function(u) { - var f = u.LiteGraph; +(function(v) { + var f = v.LiteGraph; if ("undefined" != typeof GL) { - var h = function() { + var l = function() { this.addInput("Tex.", "Texture"); this.addInput("intensity", "number"); this.addOutput("Texture", "Texture"); this.properties = {intensity:1, invert:!1, precision:LGraphTexture.DEFAULT}; - h._shader || (h._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, h.pixel_shader)); - }, n = function() { + l._shader || (l._shader = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, l.pixel_shader)); + }, m = function() { this.addInput("Texture", "Texture"); this.addInput("value1", "number"); this.addInput("value2", "number"); @@ -6929,19 +7033,19 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("Threshold", "number"); this.addOutput("Texture", "Texture"); this.properties = {shape:"", size:10, alpha:1.0, threshold:1.0, high_precision:!1}; - }, q = function() { + }, r = function() { this.addInput("Texture", "Texture"); this.addInput("Aberration", "number"); this.addInput("Distortion", "number"); this.addInput("Blur", "number"); this.addOutput("Texture", "Texture"); this.properties = {aberration:1.0, distortion:1.0, blur:1.0, precision:LGraphTexture.DEFAULT}; - q._shader || (q._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, q.pixel_shader), q._texture = new GL.Texture(3, 1, {format:gl.RGB, wrap:gl.CLAMP_TO_EDGE, magFilter:gl.LINEAR, minFilter:gl.LINEAR, pixel_data:[255, 0, 0, 0, 255, 0, 0, 0, 255]})); + r._shader || (r._shader = new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER, r.pixel_shader), r._texture = new GL.Texture(3, 1, {format:gl.RGB, wrap:gl.CLAMP_TO_EDGE, magFilter:gl.LINEAR, minFilter:gl.LINEAR, pixel_data:[255, 0, 0, 0, 255, 0, 0, 0, 255]})); }; - q.title = "Lens"; - q.desc = "Camera Lens distortion"; - q.widgets_info = {precision:{widget:"combo", values:LGraphTexture.MODE_VALUES}}; - q.prototype.onExecute = function() { + r.title = "Lens"; + r.desc = "Camera Lens distortion"; + r.widgets_info = {precision:{widget:"combo", values:LGraphTexture.MODE_VALUES}}; + r.prototype.onExecute = function() { var d = this.getInputData(0); if (this.properties.precision === LGraphTexture.PASS_THROUGH) { this.setOutputData(0, d); @@ -6950,35 +7054,35 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._tex = LGraphTexture.getTargetTexture(d, this._tex, this.properties.precision); var f = this.properties.aberration; this.isInputConnected(1) && (f = this.getInputData(1), this.properties.aberration = f); - var h = this.properties.distortion; - this.isInputConnected(2) && (h = this.getInputData(2), this.properties.distortion = h); - var k = this.properties.blur; - this.isInputConnected(3) && (k = this.getInputData(3), this.properties.blur = k); + var l = this.properties.distortion; + this.isInputConnected(2) && (l = this.getInputData(2), this.properties.distortion = l); + var h = this.properties.blur; + this.isInputConnected(3) && (h = this.getInputData(3), this.properties.blur = h); gl.disable(gl.BLEND); gl.disable(gl.DEPTH_TEST); - var m = Mesh.getScreenQuad(), c = q._shader; + var n = Mesh.getScreenQuad(), c = r._shader; this._tex.drawTo(function() { d.bind(0); - c.uniforms({u_texture:0, u_aberration:f, u_distortion:h, u_blur:k}).draw(m); + c.uniforms({u_texture:0, u_aberration:f, u_distortion:l, u_blur:h}).draw(n); }); this.setOutputData(0, this._tex); } } }; - q.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform float u_aberration;\n\r\n\t\t\tuniform float u_distortion;\n\r\n\t\t\tuniform float u_blur;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 coord = v_coord;\n\r\n\t\t\t\tfloat dist = distance(vec2(0.5), coord);\n\r\n\t\t\t\tvec2 dist_coord = coord - vec2(0.5);\n\r\n\t\t\t\tfloat percent = 1.0 + ((0.5 - dist) / 0.5) * u_distortion;\n\r\n\t\t\t\tdist_coord *= percent;\n\r\n\t\t\t\tcoord = dist_coord + vec2(0.5);\n\r\n\t\t\t\tvec4 color = texture2D(u_texture,coord, u_blur * dist);\n\r\n\t\t\t\tcolor.r = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0+0.01*u_aberration), u_blur * dist ).r;\n\r\n\t\t\t\tcolor.b = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0-0.01*u_aberration), u_blur * dist ).b;\n\r\n\t\t\t\tgl_FragColor = color;\n\r\n\t\t\t}\n\r\n\t\t\t"; - f.registerNodeType("fx/lens", q); - u.LGraphFXLens = q; + r.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform float u_aberration;\n\r\n\t\t\tuniform float u_distortion;\n\r\n\t\t\tuniform float u_blur;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 coord = v_coord;\n\r\n\t\t\t\tfloat dist = distance(vec2(0.5), coord);\n\r\n\t\t\t\tvec2 dist_coord = coord - vec2(0.5);\n\r\n\t\t\t\tfloat percent = 1.0 + ((0.5 - dist) / 0.5) * u_distortion;\n\r\n\t\t\t\tdist_coord *= percent;\n\r\n\t\t\t\tcoord = dist_coord + vec2(0.5);\n\r\n\t\t\t\tvec4 color = texture2D(u_texture,coord, u_blur * dist);\n\r\n\t\t\t\tcolor.r = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0+0.01*u_aberration), u_blur * dist ).r;\n\r\n\t\t\t\tcolor.b = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0-0.01*u_aberration), u_blur * dist ).b;\n\r\n\t\t\t\tgl_FragColor = color;\n\r\n\t\t\t}\n\r\n\t\t\t"; + f.registerNodeType("fx/lens", r); + v.LGraphFXLens = r; d.title = "Bokeh"; d.desc = "applies an Bokeh effect"; d.widgets_info = {shape:{widget:"texture"}}; d.prototype.onExecute = function() { - var f = this.getInputData(0), h = this.getInputData(1), n = this.getInputData(2); - if (f && n && this.properties.shape) { - h || (h = f); - var k = LGraphTexture.getTexture(this.properties.shape); - if (k) { - var m = this.properties.threshold; - this.isInputConnected(3) && (m = this.getInputData(3), this.properties.threshold = m); + var f = this.getInputData(0), l = this.getInputData(1), m = this.getInputData(2); + if (f && m && this.properties.shape) { + l || (l = f); + var h = LGraphTexture.getTexture(this.properties.shape); + if (h) { + var n = this.properties.threshold; + this.isInputConnected(3) && (n = this.getInputData(3), this.properties.threshold = n); var c = gl.UNSIGNED_BYTE; this.properties.high_precision && (c = gl.half_float_ext ? gl.HALF_FLOAT_OES : gl.FLOAT); this._temp_texture && this._temp_texture.type == c && this._temp_texture.width == f.width && this._temp_texture.height == f.height || (this._temp_texture = new GL.Texture(f.width, f.height, {type:c, format:gl.RGBA, filter:gl.LINEAR})); @@ -6988,21 +7092,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b || (b = d._second_shader = new GL.Shader(d._second_vertex_shader, d._second_pixel_shader)); var e = this._points_mesh; e && e._width == f.width && e._height == f.height && 2 == e._spacing || (e = this.createPointsMesh(f.width, f.height, 2)); - var q = Mesh.getScreenQuad(), g = this.properties.size, l = this.properties.alpha; + var r = Mesh.getScreenQuad(), g = this.properties.size, k = this.properties.alpha; gl.disable(gl.DEPTH_TEST); gl.disable(gl.BLEND); this._temp_texture.drawTo(function() { f.bind(0); - h.bind(1); - n.bind(2); - a.uniforms({u_texture:0, u_texture_blur:1, u_mask:2, u_texsize:[f.width, f.height]}).draw(q); + l.bind(1); + m.bind(2); + a.uniforms({u_texture:0, u_texture_blur:1, u_mask:2, u_texsize:[f.width, f.height]}).draw(r); }); this._temp_texture.drawTo(function() { gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE); f.bind(0); - k.bind(3); - b.uniforms({u_texture:0, u_mask:2, u_shape:3, u_alpha:l, u_threshold:m, u_pointSize:g, u_itexsize:[1.0 / f.width, 1.0 / f.height]}).draw(e, gl.POINTS); + h.bind(3); + b.uniforms({u_texture:0, u_mask:2, u_shape:3, u_alpha:k, u_threshold:n, u_pointSize:g, u_itexsize:[1.0 / f.width, 1.0 / f.height]}).draw(e, gl.POINTS); }); this.setOutputData(0, this._temp_texture); } @@ -7010,10 +7114,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.setOutputData(0, f); } }; - d.prototype.createPointsMesh = function(d, f, h) { - for (var k = Math.round(d / h), m = Math.round(f / h), c = new Float32Array(k * m * 2), a = -1, b = 2 / d * h, e = 2 / f * h, n = 0; n < m; ++n) { - for (var g = -1, l = 0; l < k; ++l) { - var p = n * k * 2 + 2 * l; + d.prototype.createPointsMesh = function(d, f, l) { + for (var h = Math.round(d / l), n = Math.round(f / l), c = new Float32Array(h * n * 2), a = -1, b = 2 / d * l, e = 2 / f * l, m = 0; m < n; ++m) { + for (var g = -1, k = 0; k < h; ++k) { + var p = m * h * 2 + 2 * k; c[p] = g; c[p + 1] = a; g += b; @@ -7023,19 +7127,19 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._points_mesh = GL.Mesh.load({vertices2D:c}); this._points_mesh._width = d; this._points_mesh._height = f; - this._points_mesh._spacing = h; + this._points_mesh._spacing = l; return this._points_mesh; }; d._first_pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_texture_blur;\n\r\n\t\t\tuniform sampler2D u_mask;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tvec4 blurred_color = texture2D(u_texture_blur, v_coord);\n\r\n\t\t\t\tfloat mask = texture2D(u_mask, v_coord).x;\n\r\n\t\t\t gl_FragColor = mix(color, blurred_color, mask);\n\r\n\t\t\t}\n\r\n\t\t\t"; d._second_vertex_shader = "precision highp float;\n\r\n\t\t\tattribute vec2 a_vertex2D;\n\r\n\t\t\tvarying vec4 v_color;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_mask;\n\r\n\t\t\tuniform vec2 u_itexsize;\n\r\n\t\t\tuniform float u_pointSize;\n\r\n\t\t\tuniform float u_threshold;\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 coord = a_vertex2D * 0.5 + 0.5;\n\r\n\t\t\t\tv_color = texture2D( u_texture, coord );\n\r\n\t\t\t\tv_color += texture2D( u_texture, coord + vec2(u_itexsize.x, 0.0) );\n\r\n\t\t\t\tv_color += texture2D( u_texture, coord + vec2(0.0, u_itexsize.y));\n\r\n\t\t\t\tv_color += texture2D( u_texture, coord + u_itexsize);\n\r\n\t\t\t\tv_color *= 0.25;\n\r\n\t\t\t\tfloat mask = texture2D(u_mask, coord).x;\n\r\n\t\t\t\tfloat luminance = length(v_color) * mask;\n\r\n\t\t\t\t/*luminance /= (u_pointSize*u_pointSize)*0.01 */;\n\r\n\t\t\t\tluminance -= u_threshold;\n\r\n\t\t\t\tif(luminance < 0.0)\n\r\n\t\t\t\t{\n\r\n\t\t\t\t\tgl_Position.x = -100.0;\n\r\n\t\t\t\t\treturn;\n\r\n\t\t\t\t}\n\r\n\t\t\t\tgl_PointSize = u_pointSize;\n\r\n\t\t\t\tgl_Position = vec4(a_vertex2D,0.0,1.0);\n\r\n\t\t\t}\n\r\n\t\t\t"; d._second_pixel_shader = "precision highp float;\n\r\n\t\t\tvarying vec4 v_color;\n\r\n\t\t\tuniform sampler2D u_shape;\n\r\n\t\t\tuniform float u_alpha;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D( u_shape, gl_PointCoord );\n\r\n\t\t\t\tcolor *= v_color * u_alpha;\n\r\n\t\t\t\tgl_FragColor = color;\n\r\n\t\t\t}\n"; f.registerNodeType("fx/bokeh", d); - u.LGraphFXBokeh = d; - n.title = "FX"; - n.desc = "applies an FX from a list"; - n.widgets_info = {fx:{widget:"combo", values:["halftone", "pixelate", "lowpalette", "noise", "gamma"]}, precision:{widget:"combo", values:LGraphTexture.MODE_VALUES}}; - n.shaders = {}; - n.prototype.onExecute = function() { + v.LGraphFXBokeh = d; + m.title = "FX"; + m.desc = "applies an FX from a list"; + m.widgets_info = {fx:{widget:"combo", values:["halftone", "pixelate", "lowpalette", "noise", "gamma"]}, precision:{widget:"combo", values:LGraphTexture.MODE_VALUES}}; + m.shaders = {}; + m.prototype.onExecute = function() { if (this.isOutputConnected(0)) { var d = this.getInputData(0); if (this.properties.precision === LGraphTexture.PASS_THROUGH) { @@ -7045,43 +7149,43 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._tex = LGraphTexture.getTargetTexture(d, this._tex, this.properties.precision); var f = this.properties.value1; this.isInputConnected(1) && (f = this.getInputData(1), this.properties.value1 = f); - var h = this.properties.value2; - this.isInputConnected(2) && (h = this.getInputData(2), this.properties.value2 = h); - var k = this.properties.fx, m = n.shaders[k]; - if (!m) { - var c = n["pixel_shader_" + k]; + var l = this.properties.value2; + this.isInputConnected(2) && (l = this.getInputData(2), this.properties.value2 = l); + var h = this.properties.fx, n = m.shaders[h]; + if (!n) { + var c = m["pixel_shader_" + h]; if (!c) { return; } - m = n.shaders[k] = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, c); + n = m.shaders[h] = new GL.Shader(Shader.SCREEN_VERTEX_SHADER, c); } gl.disable(gl.BLEND); gl.disable(gl.DEPTH_TEST); var a = Mesh.getScreenQuad(); - camera_planes = u.LS && LS.Renderer._current_camera ? [LS.Renderer._current_camera.near, LS.Renderer._current_camera.far] : [1, 100]; + camera_planes = v.LS && LS.Renderer._current_camera ? [LS.Renderer._current_camera.near, LS.Renderer._current_camera.far] : [1, 100]; var b = null; - "noise" == k && (b = LGraphTexture.getNoiseTexture()); + "noise" == h && (b = LGraphTexture.getNoiseTexture()); this._tex.drawTo(function() { d.bind(0); - "noise" == k && b.bind(1); - m.uniforms({u_texture:0, u_noise:1, u_size:[d.width, d.height], u_rand:[Math.random(), Math.random()], u_value1:f, u_value2:h, u_camera_planes:camera_planes}).draw(a); + "noise" == h && b.bind(1); + n.uniforms({u_texture:0, u_noise:1, u_size:[d.width, d.height], u_rand:[Math.random(), Math.random()], u_value1:f, u_value2:l, u_camera_planes:camera_planes}).draw(a); }); this.setOutputData(0, this._tex); } } } }; - n.pixel_shader_halftone = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\t\n\r\n\t\t\tfloat pattern() {\n\r\n\t\t\t\tfloat s = sin(u_value1 * 3.1415), c = cos(u_value1 * 3.1415);\n\r\n\t\t\t\tvec2 tex = v_coord * u_size.xy;\n\r\n\t\t\t\tvec2 point = vec2(\n\r\n\t\t\t\t c * tex.x - s * tex.y ,\n\r\n\t\t\t\t s * tex.x + c * tex.y \n\r\n\t\t\t\t) * u_value2;\n\r\n\t\t\t\treturn (sin(point.x) * sin(point.y)) * 4.0;\n\r\n\t\t\t}\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tfloat average = (color.r + color.g + color.b) / 3.0;\n\r\n\t\t\t\tgl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n\r\n\t\t\t}\n"; - n.pixel_shader_pixelate = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 coord = vec2( floor(v_coord.x * u_value1) / u_value1, floor(v_coord.y * u_value2) / u_value2 );\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, coord);\n\r\n\t\t\t\tgl_FragColor = color;\n\r\n\t\t\t}\n"; - n.pixel_shader_lowpalette = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tgl_FragColor = floor(color * u_value1) / u_value1;\n\r\n\t\t\t}\n"; - n.pixel_shader_noise = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_noise;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\tuniform vec2 u_rand;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tvec3 noise = texture2D(u_noise, v_coord * vec2(u_size.x / 512.0, u_size.y / 512.0) + u_rand).xyz - vec3(0.5);\n\r\n\t\t\t\tgl_FragColor = vec4( color.xyz + noise * u_value1, color.a );\n\r\n\t\t\t}\n"; - n.pixel_shader_gamma = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tfloat gamma = 1.0 / u_value1;\n\r\n\t\t\t\tgl_FragColor = vec4( pow( color.xyz, vec3(gamma) ), color.a );\n\r\n\t\t\t}\n"; - f.registerNodeType("fx/generic", n); - u.LGraphFXGeneric = n; - h.title = "Vigneting"; - h.desc = "Vigneting"; - h.widgets_info = {precision:{widget:"combo", values:LGraphTexture.MODE_VALUES}}; - h.prototype.onExecute = function() { + m.pixel_shader_halftone = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\t\n\r\n\t\t\tfloat pattern() {\n\r\n\t\t\t\tfloat s = sin(u_value1 * 3.1415), c = cos(u_value1 * 3.1415);\n\r\n\t\t\t\tvec2 tex = v_coord * u_size.xy;\n\r\n\t\t\t\tvec2 point = vec2(\n\r\n\t\t\t\t c * tex.x - s * tex.y ,\n\r\n\t\t\t\t s * tex.x + c * tex.y \n\r\n\t\t\t\t) * u_value2;\n\r\n\t\t\t\treturn (sin(point.x) * sin(point.y)) * 4.0;\n\r\n\t\t\t}\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tfloat average = (color.r + color.g + color.b) / 3.0;\n\r\n\t\t\t\tgl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n\r\n\t\t\t}\n"; + m.pixel_shader_pixelate = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec2 coord = vec2( floor(v_coord.x * u_value1) / u_value1, floor(v_coord.y * u_value2) / u_value2 );\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, coord);\n\r\n\t\t\t\tgl_FragColor = color;\n\r\n\t\t\t}\n"; + m.pixel_shader_lowpalette = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform vec2 u_camera_planes;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tgl_FragColor = floor(color * u_value1) / u_value1;\n\r\n\t\t\t}\n"; + m.pixel_shader_noise = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform sampler2D u_noise;\n\r\n\t\t\tuniform vec2 u_size;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\tuniform float u_value2;\n\r\n\t\t\tuniform vec2 u_rand;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tvec3 noise = texture2D(u_noise, v_coord * vec2(u_size.x / 512.0, u_size.y / 512.0) + u_rand).xyz - vec3(0.5);\n\r\n\t\t\t\tgl_FragColor = vec4( color.xyz + noise * u_value1, color.a );\n\r\n\t\t\t}\n"; + m.pixel_shader_gamma = "precision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_value1;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tfloat gamma = 1.0 / u_value1;\n\r\n\t\t\t\tgl_FragColor = vec4( pow( color.xyz, vec3(gamma) ), color.a );\n\r\n\t\t\t}\n"; + f.registerNodeType("fx/generic", m); + v.LGraphFXGeneric = m; + l.title = "Vigneting"; + l.desc = "Vigneting"; + l.widgets_info = {precision:{widget:"combo", values:LGraphTexture.MODE_VALUES}}; + l.prototype.onExecute = function() { var d = this.getInputData(0); if (this.properties.precision === LGraphTexture.PASS_THROUGH) { this.setOutputData(0, d); @@ -7092,35 +7196,35 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.isInputConnected(1) && (f = this.getInputData(1), this.properties.intensity = f); gl.disable(gl.BLEND); gl.disable(gl.DEPTH_TEST); - var n = Mesh.getScreenQuad(), k = h._shader, m = this.properties.invert; + var m = Mesh.getScreenQuad(), h = l._shader, n = this.properties.invert; this._tex.drawTo(function() { d.bind(0); - k.uniforms({u_texture:0, u_intensity:f, u_isize:[1 / d.width, 1 / d.height], u_invert:m ? 1 : 0}).draw(n); + h.uniforms({u_texture:0, u_intensity:f, u_isize:[1 / d.width, 1 / d.height], u_invert:n ? 1 : 0}).draw(m); }); this.setOutputData(0, this._tex); } } }; - h.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_intensity;\n\r\n\t\t\tuniform int u_invert;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tfloat luminance = 1.0 - length( v_coord - vec2(0.5) ) * 1.414;\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tif(u_invert == 1)\n\r\n\t\t\t\t\tluminance = 1.0 - luminance;\n\r\n\t\t\t\tluminance = mix(1.0, luminance, u_intensity);\n\r\n\t\t\t gl_FragColor = vec4( luminance * color.xyz, color.a);\n\r\n\t\t\t}\n\r\n\t\t\t"; - f.registerNodeType("fx/vigneting", h); - u.LGraphFXVigneting = h; + l.pixel_shader = "precision highp float;\n\r\n\t\t\tprecision highp float;\n\r\n\t\t\tvarying vec2 v_coord;\n\r\n\t\t\tuniform sampler2D u_texture;\n\r\n\t\t\tuniform float u_intensity;\n\r\n\t\t\tuniform int u_invert;\n\r\n\t\t\t\n\r\n\t\t\tvoid main() {\n\r\n\t\t\t\tfloat luminance = 1.0 - length( v_coord - vec2(0.5) ) * 1.414;\n\r\n\t\t\t\tvec4 color = texture2D(u_texture, v_coord);\n\r\n\t\t\t\tif(u_invert == 1)\n\r\n\t\t\t\t\tluminance = 1.0 - luminance;\n\r\n\t\t\t\tluminance = mix(1.0, luminance, u_intensity);\n\r\n\t\t\t gl_FragColor = vec4( luminance * color.xyz, color.a);\n\r\n\t\t\t}\n\r\n\t\t\t"; + f.registerNodeType("fx/vigneting", l); + v.LGraphFXVigneting = l; } })(this); -(function(u) { +(function(v) { function f(d) { this.cmd = this.channel = 0; d ? this.setup(d) : this.data = [0, 0, 0]; } - function h(d, c) { + function l(d, c) { navigator.requestMIDIAccess ? (this.on_ready = d, this.state = {note:[], cc:[]}, navigator.requestMIDIAccess().then(this.onMIDISuccess.bind(this), this.onMIDIFailure.bind(this))) : (this.error = "not suppoorted", c ? c("Not supported") : console.error("MIDI NOT SUPPORTED, enable by chrome://flags")); } - function n() { - this.addOutput("on_midi", k.EVENT); + function m() { + this.addOutput("on_midi", h.EVENT); this.addOutput("out", "midi"); this.properties = {port:0}; this._current_midi_event = this._last_midi_event = null; var d = this; - new h(function(c) { + new l(function(c) { d._midi = c; if (d._waiting) { d.onStart(); @@ -7129,34 +7233,34 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { }); } function d() { - this.addInput("send", k.EVENT); + this.addInput("send", h.EVENT); this.properties = {port:0}; var d = this; - new h(function(c) { + new l(function(c) { d._midi = c; }); } - function q() { - this.addInput("on_midi", k.EVENT); + function r() { + this.addInput("on_midi", h.EVENT); this._str = ""; this.size = [200, 40]; } - function t() { + function u() { this.properties = {channel:-1, cmd:-1, min_value:-1, max_value:-1}; - this.addInput("in", k.EVENT); - this.addOutput("on_midi", k.EVENT); - } - function v() { - this.properties = {channel:0, cmd:"CC", value1:1, value2:1}; - this.addInput("send", k.EVENT); - this.addInput("assign", k.EVENT); - this.addOutput("on_midi", k.EVENT); + this.addInput("in", h.EVENT); + this.addOutput("on_midi", h.EVENT); } function w() { + this.properties = {channel:0, cmd:"CC", value1:1, value2:1}; + this.addInput("send", h.EVENT); + this.addInput("assign", h.EVENT); + this.addOutput("on_midi", h.EVENT); + } + function x() { this.properties = {cc:1, value:0}; this.addOutput("value", "number"); } - var k = u.LiteGraph; + var h = v.LiteGraph; f.prototype.setup = function(d) { this.data = d; this.status = d = d[0]; @@ -7276,9 +7380,9 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.PITCHBEND = 224; f.TIMETICK = 248; f.commands = {128:"note off", 144:"note on", 160:"key pressure", 176:"controller change", 192:"program change", 208:"channel pressure", 224:"pitch bend", 240:"system", 242:"Song pos", 243:"Song select", 246:"Tune request", 248:"time tick", 250:"Start Song", 251:"Continue Song", 252:"Stop Song", 254:"Sensing", 255:"Reset"}; - h.input = null; - h.MIDIEvent = f; - h.prototype.onMIDISuccess = function(d) { + l.input = null; + l.MIDIEvent = f; + l.prototype.onMIDISuccess = function(d) { console.log("MIDI ready!"); console.log(d); this.midi = d; @@ -7287,7 +7391,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.on_ready(this); } }; - h.prototype.updatePorts = function() { + l.prototype.updatePorts = function() { var d = this.midi; this.input_ports = d.inputs; for (var c = 0, a = this.input_ports.values(), b = a.next(); b && !1 === b.done;) { @@ -7302,30 +7406,30 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } this.num_output_ports = c; }; - h.prototype.onMIDIFailure = function(d) { + l.prototype.onMIDIFailure = function(d) { console.error("Failed to get MIDI access - " + d); }; - h.prototype.openInputPort = function(d, c) { + l.prototype.openInputPort = function(d, c) { d = this.input_ports.get("input-" + d); if (!d) { return !1; } - h.input = this; + l.input = this; var a = this; d.onmidimessage = function(b) { var d = new f(b.data); a.updateState(d); c && c(b.data, d); - if (h.on_message) { - h.on_message(b.data, d); + if (l.on_message) { + l.on_message(b.data, d); } }; console.log("port open: ", d); return !0; }; - h.parseMsg = function(d) { + l.parseMsg = function(d) { }; - h.prototype.updateState = function(d) { + l.prototype.updateState = function(d) { switch(d.cmd) { case f.NOTEON: this.state.note[d.value1 | 0] = d.value2; @@ -7337,13 +7441,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.state.cc[d.getCC()] = d.getCCValue(); } }; - h.prototype.sendMIDI = function(d, c) { - c && (d = this.output_ports.get("output-" + d)) && (h.output = this, c.constructor === f ? d.send(c.data) : d.send(c)); + l.prototype.sendMIDI = function(d, c) { + c && (d = this.output_ports.get("output-" + d)) && (l.output = this, c.constructor === f ? d.send(c.data) : d.send(c)); }; - n.MIDIInterface = h; - n.title = "MIDI Input"; - n.desc = "Reads MIDI from a input port"; - n.prototype.getPropertyInfo = function(d) { + m.MIDIInterface = l; + m.title = "MIDI Input"; + m.desc = "Reads MIDI from a input port"; + m.prototype.getPropertyInfo = function(d) { if (this._midi && "port" == d) { d = {}; for (var c = 0; c < this._midi.input_ports.size; ++c) { @@ -7353,15 +7457,15 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return {type:"enum", values:d}; } }; - n.prototype.onStart = function() { + m.prototype.onStart = function() { this._midi ? this._midi.openInputPort(this.properties.port, this.onMIDIEvent.bind(this)) : this._waiting = !0; }; - n.prototype.onMIDIEvent = function(d, c) { + m.prototype.onMIDIEvent = function(d, c) { this._last_midi_event = c; this.trigger("on_midi", c); c.cmd == f.NOTEON ? this.trigger("on_noteon", c) : c.cmd == f.NOTEOFF ? this.trigger("on_noteoff", c) : c.cmd == f.CONTROLLERCHANGE ? this.trigger("on_cc", c) : c.cmd == f.PROGRAMCHANGE ? this.trigger("on_pc", c) : c.cmd == f.PITCHBEND && this.trigger("on_pitchbend", c); }; - n.prototype.onExecute = function() { + m.prototype.onExecute = function() { if (this.outputs) { for (var d = this._last_midi_event, c = 0; c < this.outputs.length; ++c) { switch(this.outputs[c].name) { @@ -7378,11 +7482,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - n.prototype.onGetOutputs = function() { - return [["last_midi", "midi"], ["on_midi", k.EVENT], ["on_noteon", k.EVENT], ["on_noteoff", k.EVENT], ["on_cc", k.EVENT], ["on_pc", k.EVENT], ["on_pitchbend", k.EVENT]]; + m.prototype.onGetOutputs = function() { + return [["last_midi", "midi"], ["on_midi", h.EVENT], ["on_noteon", h.EVENT], ["on_noteoff", h.EVENT], ["on_cc", h.EVENT], ["on_pc", h.EVENT], ["on_pitchbend", h.EVENT]]; }; - k.registerNodeType("midi/input", n); - d.MIDIInterface = h; + h.registerNodeType("midi/input", m); + d.MIDIInterface = l; d.title = "MIDI Output"; d.desc = "Sends MIDI to output channel"; d.prototype.getPropertyInfo = function(d) { @@ -7400,39 +7504,39 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._midi && ("send" == d && this._midi.sendMIDI(this.port, c), this.trigger("midi", c)); }; d.prototype.onGetInputs = function() { - return [["send", k.ACTION]]; + return [["send", h.ACTION]]; }; d.prototype.onGetOutputs = function() { - return [["on_midi", k.EVENT]]; + return [["on_midi", h.EVENT]]; }; - k.registerNodeType("midi/output", d); - q.title = "MIDI Show"; - q.desc = "Shows MIDI in the graph"; - q.prototype.onAction = function(d, c) { + h.registerNodeType("midi/output", d); + r.title = "MIDI Show"; + r.desc = "Shows MIDI in the graph"; + r.prototype.onAction = function(d, c) { c && (this._str = c.constructor === f ? c.toString() : "???"); }; - q.prototype.onDrawForeground = function(d) { + r.prototype.onDrawForeground = function(d) { this._str && (d.font = "30px Arial", d.fillText(this._str, 10, 0.8 * this.size[1])); }; - q.prototype.onGetInputs = function() { - return [["in", k.ACTION]]; + r.prototype.onGetInputs = function() { + return [["in", h.ACTION]]; }; - q.prototype.onGetOutputs = function() { - return [["on_midi", k.EVENT]]; + r.prototype.onGetOutputs = function() { + return [["on_midi", h.EVENT]]; }; - k.registerNodeType("midi/show", q); - t.title = "MIDI Filter"; - t.desc = "Filters MIDI messages"; - t.prototype.onAction = function(d, c) { + h.registerNodeType("midi/show", r); + u.title = "MIDI Filter"; + u.desc = "Filters MIDI messages"; + u.prototype.onAction = function(d, c) { !c || c.constructor !== f || -1 != this.properties.channel && c.channel != this.properties.channel || -1 != this.properties.cmd && c.cmd != this.properties.cmd || -1 != this.properties.min_value && c.data[1] < this.properties.min_value || -1 != this.properties.max_value && c.data[1] > this.properties.max_value || this.trigger("on_midi", c); }; - k.registerNodeType("midi/filter", t); - v.title = "MIDIEvent"; - v.desc = "Create a MIDI Event"; - v.prototype.onAction = function(d, c) { + h.registerNodeType("midi/filter", u); + w.title = "MIDIEvent"; + w.desc = "Create a MIDI Event"; + w.prototype.onAction = function(d, c) { "assign" == d ? (this.properties.channel = c.channel, this.properties.cmd = c.cmd, this.properties.value1 = c.data[1], this.properties.value2 = c.data[2]) : (c = new f, c.channel = this.properties.channel, this.properties.cmd && this.properties.cmd.constructor === String ? c.setCommandFromString(this.properties.cmd) : c.cmd = this.properties.cmd, c.data[0] = c.cmd | c.channel, c.data[1] = Number(this.properties.value1), c.data[2] = Number(this.properties.value2), this.trigger("on_midi", c)); }; - v.prototype.onExecute = function() { + w.prototype.onExecute = function() { var d = this.properties; if (this.outputs) { for (var c = 0; c < this.outputs.length; ++c) { @@ -7470,22 +7574,22 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - v.prototype.onPropertyChanged = function(d, c) { + w.prototype.onPropertyChanged = function(d, c) { "cmd" == d && (this.properties.cmd = f.computeCommandFromString(c)); }; - v.prototype.onGetOutputs = function() { - return [["midi", "midi"], ["on_midi", k.EVENT], ["command", "number"], ["note", "number"], ["velocity", "number"], ["cc", "number"], ["cc_value", "number"], ["pitch", "number"], ["pitchbend", "number"]]; + w.prototype.onGetOutputs = function() { + return [["midi", "midi"], ["on_midi", h.EVENT], ["command", "number"], ["note", "number"], ["velocity", "number"], ["cc", "number"], ["cc_value", "number"], ["pitch", "number"], ["pitchbend", "number"]]; }; - k.registerNodeType("midi/event", v); - w.title = "MIDICC"; - w.desc = "gets a Controller Change"; - w.prototype.onExecute = function() { - h.input && (this.properties.value = h.input.state.cc[this.properties.cc]); + h.registerNodeType("midi/event", w); + x.title = "MIDICC"; + x.desc = "gets a Controller Change"; + x.prototype.onExecute = function() { + l.input && (this.properties.value = l.input.state.cc[this.properties.cc]); this.setOutputData(0, this.properties.value); }; - k.registerNodeType("midi/cc", w); + h.registerNodeType("midi/cc", x); })(this); -(function(u) { +(function(v) { function f() { this.properties = {src:"", gain:0.5, loop:!0, autoplay:!0, playbackRate:1}; this._loading_audio = !1; @@ -7499,7 +7603,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.audionode.gain.value = this.properties.gain; this.properties.src && this.loadSound(this.properties.src); } - function h() { + function l() { this.properties = {fftSize:2048, minDecibels:-100, maxDecibels:-10, smoothingTimeConstant:0.5}; this.audionode = g.getAudioContext().createAnalyser(); this.audionode.graphnode = this; @@ -7512,7 +7616,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addOutput("samples", "array"); this._time_bin = this._freq_bin = null; } - function n() { + function m() { this.properties = {gain:1}; this.audionode = g.getAudioContext().createGain(); this.addInput("in", "audio"); @@ -7525,20 +7629,20 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("in", "audio"); this.addOutput("out", "audio"); } - function q() { + function r() { this.properties = {threshold:-50, knee:40, ratio:12, reduction:-20, attack:0, release:0.25}; this.audionode = g.getAudioContext().createDynamicsCompressor(); this.addInput("in", "audio"); this.addOutput("out", "audio"); } - function t() { + function u() { this.properties = {}; this.audionode = g.getAudioContext().createWaveShaper(); this.addInput("in", "audio"); this.addInput("shape", "waveshape"); this.addOutput("out", "audio"); } - function v() { + function w() { this.properties = {gain1:0.5, gain2:0.5}; this.audionode = g.getAudioContext().createGain(); this.audionode1 = g.getAudioContext().createGain(); @@ -7553,7 +7657,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("in2 gain", "number"); this.addOutput("out", "audio"); } - function w() { + function x() { this.properties = {delayTime:0.5}; this.audionode = g.getAudioContext().createDelay(10); this.audionode.delayTime.value = this.properties.delayTime; @@ -7561,14 +7665,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.addInput("time", "number"); this.addOutput("out", "audio"); } - function k() { + function h() { this.properties = {frequency:350, detune:0, Q:1}; this.addProperty("type", "lowpass", "enum", {values:"lowpass highpass bandpass lowshelf highshelf peaking notch allpass".split(" ")}); this.audionode = g.getAudioContext().createBiquadFilter(); this.addInput("in", "audio"); this.addOutput("out", "audio"); } - function m() { + function n() { this.properties = {frequency:440, detune:0, type:"sine"}; this.addProperty("type", "sine", "enum", {values:["sine", "square", "sawtooth", "triangle", "custom"]}); this.audionode = g.getAudioContext().createOscillator(); @@ -7603,8 +7707,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this.audionode = g.getAudioContext().destination; this.addInput("in", "audio"); } - var z = u.LiteGraph, g = {}; - u.LGAudio = g; + var z = v.LiteGraph, g = {}; + v.LGAudio = g; g.getAudioContext = function() { if (!this._audio_context) { window.AudioContext = window.AudioContext || window.webkitAudioContext; @@ -7652,11 +7756,11 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } if (a.outputs) { for (c = 0; c < a.outputs.length; ++c) { - for (var f = a.outputs[c], l = 0; l < f.links.length; ++l) { - if (d = a.graph.links[f.links[l]]) { + for (var f = a.outputs[c], k = 0; k < f.links.length; ++k) { + if (d = a.graph.links[f.links[k]]) { e = a.getAudioNodeInOutputSlot ? a.getAudioNodeInOutputSlot(c) : a.audionode; - var k = a.graph.getNodeById(d.target_id); - d = k.getAudioNodeInInputSlot ? k.getAudioNodeInInputSlot(d.target_slot) : k.audionode; + var h = a.graph.getNodeById(d.target_id); + d = h.getAudioNodeInInputSlot ? h.getAudioNodeInInputSlot(d.target_slot) : h.audionode; b ? g.connect(e, d) : g.disconnect(e, d); } } @@ -7828,10 +7932,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.title = "Source"; f.desc = "Plays audio"; z.registerNodeType("audio/source", f); - h.prototype.onPropertyChanged = function(a, b) { + l.prototype.onPropertyChanged = function(a, b) { this.audionode[a] = b; }; - h.prototype.onExecute = function() { + l.prototype.onExecute = function() { if (this.isOutputConnected(0)) { var a = this.audionode.frequencyBinCount; this._freq_bin && this._freq_bin.length == a || (this._freq_bin = new Uint8Array(a)); @@ -7847,16 +7951,16 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - h.prototype.onGetInputs = function() { + l.prototype.onGetInputs = function() { return [["minDecibels", "number"], ["maxDecibels", "number"], ["smoothingTimeConstant", "number"]]; }; - h.prototype.onGetOutputs = function() { + l.prototype.onGetOutputs = function() { return [["freqs", "array"], ["samples", "array"]]; }; - h.title = "Analyser"; - h.desc = "Audio Analyser"; - z.registerNodeType("audio/analyser", h); - n.prototype.onExecute = function() { + l.title = "Analyser"; + l.desc = "Audio Analyser"; + z.registerNodeType("audio/analyser", l); + m.prototype.onExecute = function() { if (this.inputs && this.inputs.length) { for (var a = 1; a < this.inputs.length; ++a) { var b = this.inputs[a], c = this.getInputData(a); @@ -7864,10 +7968,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - g.createAudioNodeWrapper(n); - n.title = "Gain"; - n.desc = "Audio gain"; - z.registerNodeType("audio/gain", n); + g.createAudioNodeWrapper(m); + m.title = "Gain"; + m.desc = "Audio gain"; + z.registerNodeType("audio/gain", m); g.createAudioNodeWrapper(d); d.prototype.onRemove = function() { this._dropped_url && URL.revokeObjectURL(this._dropped_url); @@ -7896,8 +8000,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.title = "Convolver"; d.desc = "Convolves the signal (used for reverb)"; z.registerNodeType("audio/convolver", d); - g.createAudioNodeWrapper(q); - q.prototype.onExecute = function() { + g.createAudioNodeWrapper(r); + r.prototype.onExecute = function() { if (this.inputs && this.inputs.length) { for (var a = 1; a < this.inputs.length; ++a) { var b = this.inputs[a]; @@ -7908,23 +8012,23 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - q.prototype.onGetInputs = function() { + r.prototype.onGetInputs = function() { return [["threshold", "number"], ["knee", "number"], ["ratio", "number"], ["reduction", "number"], ["attack", "number"], ["release", "number"]]; }; - q.title = "DynamicsCompressor"; - q.desc = "Dynamics Compressor"; - z.registerNodeType("audio/dynamicsCompressor", q); - t.prototype.onExecute = function() { + r.title = "DynamicsCompressor"; + r.desc = "Dynamics Compressor"; + z.registerNodeType("audio/dynamicsCompressor", r); + u.prototype.onExecute = function() { if (this.inputs && this.inputs.length) { var a = this.getInputData(1); void 0 !== a && (this.audionode.curve = a); } }; - t.prototype.setWaveShape = function(a) { + u.prototype.setWaveShape = function(a) { this.audionode.curve = a; }; - g.createAudioNodeWrapper(t); - v.prototype.getAudioNodeInInputSlot = function(a) { + g.createAudioNodeWrapper(u); + w.prototype.getAudioNodeInInputSlot = function(a) { if (0 == a) { return this.audionode1; } @@ -7932,10 +8036,10 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { return this.audionode2; } }; - v.prototype.onPropertyChanged = function(a, b) { + w.prototype.onPropertyChanged = function(a, b) { "gain1" == a ? this.audionode1.gain.value = b : "gain2" == a && (this.audionode2.gain.value = b); }; - v.prototype.onExecute = function() { + w.prototype.onExecute = function() { if (this.inputs && this.inputs.length) { for (var a = 1; a < this.inputs.length; ++a) { var b = this.inputs[a]; @@ -7943,19 +8047,19 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - g.createAudioNodeWrapper(v); - v.title = "Mixer"; - v.desc = "Audio mixer"; - z.registerNodeType("audio/mixer", v); g.createAudioNodeWrapper(w); - w.prototype.onExecute = function() { + w.title = "Mixer"; + w.desc = "Audio mixer"; + z.registerNodeType("audio/mixer", w); + g.createAudioNodeWrapper(x); + x.prototype.onExecute = function() { var a = this.getInputData(1); void 0 !== a && (this.audionode.delayTime.value = a); }; - w.title = "Delay"; - w.desc = "Audio delay"; - z.registerNodeType("audio/delay", w); - k.prototype.onExecute = function() { + x.title = "Delay"; + x.desc = "Audio delay"; + z.registerNodeType("audio/delay", x); + h.prototype.onExecute = function() { if (this.inputs && this.inputs.length) { for (var a = 1; a < this.inputs.length; ++a) { var b = this.inputs[a]; @@ -7966,26 +8070,26 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - k.prototype.onGetInputs = function() { + h.prototype.onGetInputs = function() { return [["frequency", "number"], ["detune", "number"], ["Q", "number"]]; }; - g.createAudioNodeWrapper(k); - k.title = "BiquadFilter"; - k.desc = "Audio filter"; - z.registerNodeType("audio/biquadfilter", k); - m.prototype.onStart = function() { + g.createAudioNodeWrapper(h); + h.title = "BiquadFilter"; + h.desc = "Audio filter"; + z.registerNodeType("audio/biquadfilter", h); + n.prototype.onStart = function() { this.audionode.started || (this.audionode.started = !0, this.audionode.start()); }; - m.prototype.onStop = function() { + n.prototype.onStop = function() { this.audionode.started && (this.audionode.started = !1, this.audionode.stop()); }; - m.prototype.onPause = function() { + n.prototype.onPause = function() { this.onStop(); }; - m.prototype.onUnpause = function() { + n.prototype.onUnpause = function() { this.onStart(); }; - m.prototype.onExecute = function() { + n.prototype.onExecute = function() { if (this.inputs && this.inputs.length) { for (var a = 0; a < this.inputs.length; ++a) { var b = this.inputs[a]; @@ -7996,13 +8100,13 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { } } }; - m.prototype.onGetInputs = function() { + n.prototype.onGetInputs = function() { return [["frequency", "number"], ["detune", "number"], ["type", "string"]]; }; - g.createAudioNodeWrapper(m); - m.title = "Oscillator"; - m.desc = "Oscillator"; - z.registerNodeType("audio/oscillator", m); + g.createAudioNodeWrapper(n); + n.title = "Oscillator"; + n.desc = "Oscillator"; + z.registerNodeType("audio/oscillator", n); c.prototype.onExecute = function() { this._last_buffer = this.getInputData(0); var a = this.getInputData(1); @@ -8074,8 +8178,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { b.prototype.processCode = function() { try { this._script = new (new Function("properties", this.properties.code))(this.properties), this._old_code = this.properties.code, this._callback = this._script.onaudioprocess; - } catch (l) { - console.error("Error in onaudioprocess code", l), this._callback = b._bypass_function, this.audionode.onaudioprocess = this._callback; + } catch (k) { + console.error("Error in onaudioprocess code", k), this._callback = b._bypass_function, this.audionode.onaudioprocess = this._callback; } }; b.prototype.onPropertyChanged = function(a, b) { @@ -8100,21 +8204,21 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { e.desc = "Audio output"; z.registerNodeType("audio/destination", e); })(this); -(function(u) { +(function(v) { function f() { this.size = [60, 20]; - this.addInput("send", n.ACTION); - this.addOutput("received", n.EVENT); + this.addInput("send", m.ACTION); + this.addOutput("received", m.EVENT); this.addInput("in", 0); this.addOutput("out", 0); this.properties = {url:"", room:"lgraph"}; this._ws = null; this._last_data = []; } - function h() { + function l() { this.size = [60, 20]; - this.addInput("send", n.ACTION); - this.addOutput("received", n.EVENT); + this.addInput("send", m.ACTION); + this.addOutput("received", m.EVENT); this.addInput("in", 0); this.addOutput("out", 0); this.properties = {url:"tamats.com:55000", room:"lgraph", save_bandwidth:!0}; @@ -8123,7 +8227,7 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { this._last_input_data = []; this._last_output_data = []; } - var n = u.LiteGraph; + var m = v.LiteGraph; f.title = "WebSocket"; f.desc = "Send data through a websocket"; f.prototype.onPropertyChanged = function(d, f) { @@ -8133,14 +8237,14 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { !this._ws && this.properties.url && this.createSocket(); if (this._ws && this._ws.readyState == WebSocket.OPEN) { for (var d = this.properties.room, f = 1; f < this.inputs.length; ++f) { - var h = this.getInputData(f); - if (null != h) { + var l = this.getInputData(f); + if (null != l) { try { - var n = JSON.stringify({type:0, room:d, channel:f, data:h}); - } catch (w) { + var m = JSON.stringify({type:0, room:d, channel:f, data:l}); + } catch (x) { continue; } - this._ws.send(n); + this._ws.send(m); } } for (f = 1; f < this.outputs.length; ++f) { @@ -8157,8 +8261,8 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.boxcolor = "#8E8"; }; this._ws.onmessage = function(f) { - var h = JSON.parse(f.data); - h.room && h.room != this.properties.room || (1 == f.data.type ? d.triggerSlot(0, h) : d._last_data[f.data.channel || 0] = h.data); + var l = JSON.parse(f.data); + l.room && l.room != this.properties.room || (1 == f.data.type ? d.triggerSlot(0, l) : d._last_data[f.data.channel || 0] = l.data); }; this._ws.onerror = function(f) { console.log("couldnt connect to websocket"); @@ -8181,34 +8285,34 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { f.prototype.onGetOutputs = function() { return [["out", 0]]; }; - n.registerNodeType("network/websocket", f); - h.title = "SillyClient"; - h.desc = "Connects to SillyServer to broadcast messages"; - h.prototype.onPropertyChanged = function(d, f) { + m.registerNodeType("network/websocket", f); + l.title = "SillyClient"; + l.desc = "Connects to SillyServer to broadcast messages"; + l.prototype.onPropertyChanged = function(d, f) { d = this.properties.url + "/" + this.properties.room; this._server && this._final_url != d && (this._server.connect(this.properties.url, this.properties.room), this._final_url = d); }; - h.prototype.onExecute = function() { + l.prototype.onExecute = function() { if (this._server && this._server.is_connected) { for (var d = this.properties.save_bandwidth, f = 1; f < this.inputs.length; ++f) { - var h = this.getInputData(f); - null == h || d && this._last_input_data[f] == h || (this._server.sendMessage({type:0, channel:f, data:h}), this._last_input_data[f] = h); + var l = this.getInputData(f); + null == l || d && this._last_input_data[f] == l || (this._server.sendMessage({type:0, channel:f, data:l}), this._last_input_data[f] = l); } for (f = 1; f < this.outputs.length; ++f) { this.setOutputData(f, this._last_output_data[f]); } } }; - h.prototype.createSocket = function() { + l.prototype.createSocket = function() { var d = this; "undefined" == typeof SillyClient ? (this._error || console.error("SillyClient node cannot be used, you must include SillyServer.js"), this._error = !0) : (this._server = new SillyClient, this._server.on_ready = function() { console.log("ready"); d.boxcolor = "#8E8"; - }, this._server.on_message = function(f, h) { + }, this._server.on_message = function(f, l) { f = null; try { - f = JSON.parse(h); - } catch (v) { + f = JSON.parse(l); + } catch (w) { return; } 1 == f.type ? d.triggerSlot(0, f) : d._last_output_data[f.channel || 0] = f.data; @@ -8220,514 +8324,18 @@ $jscomp.polyfill("Array.prototype.keys", function(u) { d.boxcolor = "#000"; }, this.properties.url && this.properties.room && (this._server.connect(this.properties.url, this.properties.room), this._final_url = this.properties.url + "/" + this.properties.room)); }; - h.prototype.send = function(d) { + l.prototype.send = function(d) { this._server && this._server.is_connected && this._server.sendMessage({type:1, data:d}); }; - h.prototype.onAction = function(d, f) { + l.prototype.onAction = function(d, f) { this._server && this._server.is_connected && this._server.sendMessage({type:1, action:d, data:f}); }; - h.prototype.onGetInputs = function() { + l.prototype.onGetInputs = function() { return [["in", 0]]; }; - h.prototype.onGetOutputs = function() { + l.prototype.onGetOutputs = function() { return [["out", 0]]; }; - n.registerNodeType("network/sillyclient", h); + m.registerNodeType("network/sillyclient", l); })(this); - -(function(u){function h(a){k.debug&&console.log("Graph created");this.list_of_graphcanvas=null;this.clear();a&&this.configure(a)}function f(a){this._ctor(a)}function p(a){this._ctor(a)}function d(a,c,g){g=g||{};this.background_image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQBJREFUeNrs1rEKwjAUhlETUkj3vP9rdmr1Ysammk2w5wdxuLgcMHyptfawuZX4pJSWZTnfnu/lnIe/jNNxHHGNn//HNbbv+4dr6V+11uF527arU7+u63qfa/bnmh8sWLBgwYJlqRf8MEptXPBXJXa37BSl3ixYsGDBMliwFLyCV/DeLIMFCxYsWLBMwSt4Be/NggXLYMGCBUvBK3iNruC9WbBgwYJlsGApeAWv4L1ZBgsWLFiwYJmCV/AK3psFC5bBggULloJX8BpdwXuzYMGCBctgwVLwCl7Be7MMFixYsGDBsu8FH1FaSmExVfAxBa/gvVmwYMGCZbBg/W4vAQYA5tRF9QYlv/QAAAAASUVORK5CYII="; -a&&a.constructor===String&&(a=document.querySelector(a));this.max_zoom=10;this.min_zoom=0.1;this.zoom_modify_alpha=!0;this.title_text_font="bold "+k.NODE_TEXT_SIZE+"px Arial";this.inner_text_font="normal "+k.NODE_SUBTEXT_SIZE+"px Arial";this.node_title_color=k.NODE_TITLE_COLOR;this.default_link_color=k.LINK_COLOR;this.default_connection_color={input_off:"#AAB",input_on:"#7F7",output_off:"#AAB",output_on:"#7F7"};this.highquality_render=!0;this.use_gradients=!1;this.editor_alpha=1;this.pause_rendering= -!1;this.render_only_selected=this.clear_background=this.render_shadows=!0;this.live_mode=!1;this.allow_searchbox=this.allow_interaction=this.allow_dragnodes=this.allow_dragcanvas=this.show_info=!0;this.drag_mode=this.allow_reconnect_links=!1;this.filter=this.dragging_rectangle=null;this.always_render_background=!1;this.render_canvas_border=!0;this.render_connections_shadows=!1;this.render_connection_arrows=this.render_curved_connections=this.render_connections_border=!0;this.render_execution_order= -!1;this.canvas_mouse=[0,0];this.onSearchBoxSelection=this.onSearchBox=null;this.connections_width=3;this.round_radius=8;this.node_widget=this.current_node=null;this.last_mouse_position=[0,0];this.visible_area=new Float32Array(4);c&&c.attachCanvas(this);this.setCanvas(a);this.clear();g.skip_render||this.startRendering();this.autoresize=g.autoresize}function q(a,c){return Math.sqrt((c[0]-a[0])*(c[0]-a[0])+(c[1]-a[1])*(c[1]-a[1]))}function s(a,c,g,w,e,l){return ga&&wc?!0:!1}function v(a, -c){var g=a[0]+a[2],w=a[1]+a[3],e=c[1]+c[3];return a[0]>c[0]+c[2]||a[1]>e||gk.width-d.width-10&&(l=k.width-d.width-10);b>k.height-d.height-10&&(b=k.height-d.height-10)}e.style.left= -l+"px";e.style.top=b+"px"}var k=u.LiteGraph={CANVAS_GRID_SIZE:10,NODE_TITLE_HEIGHT:20,NODE_SLOT_HEIGHT:15,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:"#444",NODE_DEFAULT_BOXCOLOR:"#666",NODE_DEFAULT_SHAPE:"box",DEFAULT_SHADOW_COLOR:"rgba(0,0,0,0.5)",LINK_COLOR:"#AAD",EVENT_LINK_COLOR:"#F85",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,NORMAL_TITLE:0,NO_TITLE:1,TRANSPARENT_TITLE:2,AUTOHIDE_TITLE:3,proxy:null,node_images_path:"",debug:!1,throw_errors:!0,allow_scripts:!0,registered_node_types:{},node_types_by_file_extension:{},Nodes:{},registerNodeType:function(a, -c){if(!c.prototype)throw"Cannot register a simple object, it must be a class with a prototype";c.type=a;k.debug&&console.log("Node registered: "+a);a.split("/");var g=c.name,b=a.lastIndexOf("/");c.category=a.substr(0,b);c.title||(c.title=g);if(c.prototype)for(var e in f.prototype)c.prototype[e]||(c.prototype[e]=f.prototype[e]);Object.defineProperty(c.prototype,"shape",{set:function(a){switch(a){case "default":delete this._shape;break;case "box":this._shape=k.BOX_SHAPE;break;case "round":this._shape= -k.ROUND_SHAPE;break;case "circle":this._shape=k.CIRCLE_SHAPE;break;case "card":this._shape=k.CARD_SHAPE;break;default:this._shape=a}},get:function(a){return this._shape},enumerable:!0});this.registered_node_types[a]=c;c.constructor.name&&(this.Nodes[g]=c);c.prototype.onPropertyChange&&console.warn("LiteGraph node class "+a+" has onPropertyChange method, it must be called onPropertyChanged with d at the end");if(c.supported_extensions)for(e in c.supported_extensions)this.node_types_by_file_extension[c.supported_extensions[e].toLowerCase()]= -c},wrapFunctionAsNode:function(a,c,g,b){for(var e=Array(c.length),l="",r=k.getParameterNames(c),d=0;dr&&(r=e.size[0]),k+=e.size[1]+a;c+=r+a}this.setDirtyCanvas(!0,!0)};h.prototype.getTime=function(){return this.globaltime}; -h.prototype.getFixedTime=function(){return this.fixedtime};h.prototype.getElapsedTime=function(){return this.elapsed_time};h.prototype.sendEventToAllNodes=function(a,c,g){g=g||k.ALWAYS;var b=this._nodes_in_order?this._nodes_in_order:this._nodes;if(b)for(var e=0,l=b.length;e=k.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();c||this.updateExecutionOrder();if(this.onNodeAdded)this.onNodeAdded(a);this.setDirtyCanvas(!0);this.change();return a}};h.prototype.remove=function(a){if(a.constructor===k.LGraphGroup){var c=this._groups.indexOf(a);-1!=c&&this._groups.splice(c,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(c=0;ca.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.data=null;this.flags={}};f.prototype.configure=function(a){this.graph&&this.graph._version++;for(var c in a)if("console"!= -c)if("properties"==c)for(var g in a.properties){if(this.properties[g]=a.properties[g],this.onPropertyChanged)this.onPropertyChanged(g,a.properties[g])}else null!=a[c]&&("object"==typeof a[c]?this[c]&&this[c].configure?this[c].configure(a[c]):this[c]=k.cloneObject(a[c],this[c]):this[c]=a[c]);a.title||(this.title=this.constructor.title);if(this.onConnectionsChange){if(this.inputs)for(var b=0;b=this.outputs.length)){var g=this.outputs[a];if(g&&(g._data=c,this.outputs[a].links))for(g=0;g=this.inputs.length|| -null==this.inputs[a].link)){var g=this.graph.links[this.inputs[a].link];if(!g)return null;if(!c)return g.data;var b=this.graph.getNodeById(g.origin_id);if(!b)return g.data;if(b.updateOutputData)b.updateOutputData(g.origin_slot);else if(b.onExecute)b.onExecute();return g.data}};f.prototype.getInputDataByName=function(a,c){var g=this.findInputSlot(a);return-1==g?null:this.getInputData(g,c)};f.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};f.prototype.getInputOrProperty=function(a){if(!this.inputs||!this.inputs.length)return this.properties?this.properties[a]:null;for(var c=0,g=this.inputs.length;c=this.outputs.length?null:this.outputs[a]._data};f.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 c=[],g=0;ga&&this.pos[1]-e-gc)return!0;return!1};f.prototype.getSlotInPosition=function(a,c){if(this.inputs)for(var g= -0,b=this.inputs.length;g= -this.outputs.length)return k.debug&&console.log("Connect: Error, slot number not found"),!1;c&&c.constructor===Number&&(c=this.graph.getNodeById(c));if(!c)throw"target node is null";if(c==this)return!1;if(g.constructor===String){if(g=c.findInputSlot(g),-1==g)return k.debug&&console.log("Connect: Error, no slot of name "+g),!1}else{if(g===k.EVENT)return!1;if(!c.inputs||g>=c.inputs.length)return k.debug&&console.log("Connect: Error, slot number not found"),!1}null!=c.inputs[g].link&&c.disconnectInput(g); -var b=this.outputs[a];if(c.onConnectInput&&!1===c.onConnectInput(g,b.type,b))return!1;var e=c.inputs[g];if(k.isValidConnection(b.type,e.type)){var l={id:this.graph.last_link_id++,type:e.type,origin_id:this.id,origin_slot:a,target_id:c.id,target_slot:g};this.graph.links[l.id]=l;null==b.links&&(b.links=[]);b.links.push(l.id);c.inputs[g].link=l.id;this.graph&&this.graph._version++;if(this.onConnectionsChange)this.onConnectionsChange(k.OUTPUT,a,!0,l,b);if(c.onConnectionsChange)c.onConnectionsChange(k.INPUT, -g,!0,l,e);this.graph&&this.graph.onNodeConnectionChange&&(this.graph.onNodeConnectionChange(k.INPUT,c,g,this,a),this.graph.onNodeConnectionChange(k.OUTPUT,this,a,c,g))}this.setDirtyCanvas(!1,!0);this.graph.connectionChange(this);return!0};f.prototype.disconnectOutput=function(a,c){if(a.constructor===String){if(a=this.findOutputSlot(a),-1==a)return k.debug&&console.log("Connect: Error, no slot of name "+a),!1}else if(!this.outputs||a>=this.outputs.length)return k.debug&&console.log("Connect: Error, slot number not found"), -!1;var g=this.outputs[a];if(!g.links||0==g.links.length)return!1;if(c){c.constructor===Number&&(c=this.graph.getNodeById(c));if(!c)throw"Target Node not found";for(var b=0,e=g.links.length;b=this.inputs.length)return k.debug&&console.log("Connect: Error, slot number not found"),!1;var c=this.inputs[a];if(!c)return!1;var g=this.inputs[a].link;this.inputs[a].link=null;var b=this.graph.links[g];if(b){var e=this.graph.getNodeById(b.origin_id);if(!e)return!1;var l=e.outputs[b.origin_slot];if(!l||!l.links||0==l.links.length)return!1;for(var d=0,m=l.links.length;d< -m;d++)if(l.links[d]==g){l.links.splice(d,1);break}delete this.graph.links[g];this.graph&&this.graph._version++;if(this.onConnectionsChange)this.onConnectionsChange(k.INPUT,a,!1,b,c);if(e.onConnectionsChange)e.onConnectionsChange(k.OUTPUT,d,!1,b,l);this.graph&&this.graph.onNodeConnectionChange&&(this.graph.onNodeConnectionChange(k.OUTPUT,e,d),this.graph.onNodeConnectionChange(k.INPUT,this,a))}this.setDirtyCanvas(!1,!0);this.graph.connectionChange(this);return!0};f.prototype.getConnectionPos=function(a, -c){return this.flags.collapsed?a?[this.pos[0],this.pos[1]-0.5*k.NODE_TITLE_HEIGHT]:[this.pos[0]+(this._collapsed_width||k.NODE_COLLAPSED_WIDTH),this.pos[1]-0.5*k.NODE_TITLE_HEIGHT]:a&&-1==c?[this.pos[0]+10,this.pos[1]+10]:a&&this.inputs&&this.inputs.length>c&&this.inputs[c].pos?[this.pos[0]+this.inputs[c].pos[0],this.pos[1]+this.inputs[c].pos[1]]:!a&&this.outputs&&this.outputs.length>c&&this.outputs[c].pos?[this.pos[0]+this.outputs[c].pos[0],this.pos[1]+this.outputs[c].pos[1]]:this.flags.horizontal? -a?[this.pos[0]+this.size[0]/this.inputs.length*(c+0.5),this.pos[1]-k.NODE_TITLE_HEIGHT]:[this.pos[0]+this.size[0]/this.outputs.length*(c+0.5),this.pos[1]+this.size[1]]:a?[this.pos[0],this.pos[1]+10+c*k.NODE_SLOT_HEIGHT+(this.constructor.slot_start_y||0)]:[this.pos[0]+this.size[0]+1,this.pos[1]+10+c*k.NODE_SLOT_HEIGHT+(this.constructor.slot_start_y||0)]};f.prototype.alignToGrid=function(){this.pos[0]=k.CANVAS_GRID_SIZE*Math.round(this.pos[0]/k.CANVAS_GRID_SIZE);this.pos[1]=k.CANVAS_GRID_SIZE*Math.round(this.pos[1]/ -k.CANVAS_GRID_SIZE)};f.prototype.trace=function(a){this.console||(this.console=[]);this.console.push(a);this.console.length>f.MAX_CONSOLE&&this.console.shift();this.graph.onNodeTrace(this,a)};f.prototype.setDirtyCanvas=function(a,c){this.graph&&this.graph.sendActionToCanvas("setDirty",[a,c])};f.prototype.loadImage=function(a){var c=new Image;c.src=k.node_images_path+a;c.ready=!1;var g=this;c.onload=function(){this.ready=!0;g.setDirtyCanvas(!0)};return c};f.prototype.captureInput=function(a){if(this.graph&& -this.graph.list_of_graphcanvas)for(var c=this.graph.list_of_graphcanvas,g=0;ga.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})};p.prototype.configure=function(a){this.title=a.title;this._bounding.set(a.bounding);this.color=a.color};p.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}};p.prototype.move=function(a, -c,g){this._pos[0]+=a;this._pos[1]+=c;if(!g)for(g=0;g element, you passed a "+a.localName;throw"This browser doesnt 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); -c||this.bindEvents()}};d.prototype._doNothing=function(a){a.preventDefault();return!1};d.prototype._doReturnTrue=function(a){a.preventDefault();return!0};d.prototype.bindEvents=function(){if(this._events_binded)console.warn("LGraphCanvas: events already binded");else{var a=this.canvas,c=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);c.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}};d.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")};d.getFileExtension=function(a){var c=a.indexOf("?");-1!=c&&(a=a.substr(0,c));c=a.lastIndexOf(".");return-1==c?"":a.substr(c+1).toLowerCase()}; -d.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};d.prototype.setDirty=function(a,c){a&&(this.dirty_canvas=!0);c&&(this.dirty_bgcanvas=!0)};d.prototype.getCanvasWindow=function(){if(!this.canvas)return window; -var a=this.canvas.ownerDocument;return a.defaultView||a.parentWindow};d.prototype.startRendering=function(){function a(){this.pause_rendering||this.draw();var c=this.getCanvasWindow();this.is_rendering&&c.requestAnimationFrame(a.bind(this))}this.is_rendering||(this.is_rendering=!0,a.call(this))};d.prototype.stopRendering=function(){this.is_rendering=!1};d.prototype.processMouseDown=function(a){if(this.graph){this.adjustMouseEvent(a);var c=this.getCanvasWindow();d.active_canvas=this;this.canvas.removeEventListener("mousemove", -this._mousemove_callback);c.document.addEventListener("mousemove",this._mousemove_callback,!0);c.document.addEventListener("mouseup",this._mouseup_callback,!0);var g=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes),b=!1,e=300>k.getTime()-this.last_mouseclick;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]=a.canvasY;k.closeAllContextMenus(c);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,b=!0);var l=!1;if(g&&this.allow_interaction&&!b){this.live_mode||g.flags.pinned||this.bringToFront(g);if(!this.connecting_node&&!g.flags.collapsed&&!this.live_mode){if(g.outputs)for(var r=0,m=g.outputs.length;rq([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.scale?this.selected_group_resizing=!0:this.selected_group.recomputeInsideNodes()),e&&this.showSearchBox(a),l=!0;!b&&l&&this.allow_dragcanvas&&(this.dragging_canvas=!0)}else 2!=a.which&&3==a.which&&this.processContextMenu(g,a);this.last_mouse[0]=a.localX;this.last_mouse[1]=a.localY;this.last_mouseclick=k.getTime();this.graph.change(); -(!c.document.activeElement||"input"!=c.document.activeElement.nodeName.toLowerCase()&&"textarea"!=c.document.activeElement.nodeName.toLowerCase())&&a.preventDefault();a.stopPropagation();if(this.onMouseDown)this.onMouseDown(a);return!1}};d.prototype.processMouseMove=function(a){this.autoresize&&this.resize();if(this.graph){d.active_canvas=this;this.adjustMouseEvent(a);var c=[a.localX,a.localY],g=[c[0]-this.last_mouse[0],c[1]-this.last_mouse[1]];this.last_mouse=c;this.canvas_mouse[0]=a.canvasX;this.canvas_mouse[1]= -a.canvasY;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.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(g[0]/ -this.scale,g[1]/this.scale,a.ctrlKey),this.selected_group._nodes.length&&(this.dirty_canvas=!0)),this.dirty_bgcanvas=!0;else if(this.dragging_canvas)this.offset[0]+=g[0]/this.scale,this.offset[1]+=g[1]/this.scale,this.dirty_bgcanvas=this.dirty_canvas=!0;else if(this.allow_interaction){this.connecting_node&&(this.dirty_canvas=!0);for(var b=this.graph.getNodeOnPos(a.canvasX,a.canvasY,this.visible_nodes),c=0,e=this.graph._nodes.length;cthis.dragging_rectangle[3]?this.dragging_rectangle[1]-e:this.dragging_rectangle[1];this.dragging_rectangle[0]=0>this.dragging_rectangle[2]?this.dragging_rectangle[0]-b:this.dragging_rectangle[0]; -this.dragging_rectangle[1]=l;this.dragging_rectangle[2]=b;this.dragging_rectangle[3]=e;e=[];for(l=0;la.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}}; -d.prototype.processMouseWheel=function(a){if(this.graph&&this.allow_dragcanvas){var c=null!=a.wheelDeltaY?a.wheelDeltaY:-60*a.detail;this.adjustMouseEvent(a);var g=this.scale;0c&&(g*=1/1.1);this.setZoom(g,[a.localX,a.localY]);this.graph.change();a.preventDefault();return!1}};d.prototype.isOverNodeBox=function(a,c,g){var b=k.NODE_TITLE_HEIGHT;return s(c,g,a.pos[0]+2,a.pos[1]+2-b,b-4,b-4)?!0:!1};d.prototype.isOverNodeInput=function(a,c,g,b){if(a.inputs)for(var e=0,l=a.inputs.length;ethis.max_zoom?this.scale=this.max_zoom:this.scaleb-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}};d.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 c=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,c.width,c.height);this.bgcanvas==this.canvas?this.drawBackCanvas():a.drawImage(this.bgcanvas,0,0);if(this.onRender)this.onRender(c,a);this.show_info&&this.renderInfo(a);if(this.graph){a.save();a.scale(this.scale,this.scale);a.translate(this.offset[0],this.offset[1]);for(var c=this.computeVisibleNodes(null,this.visible_nodes),b=0;bthis.scale?c.fillRect(0,r,p,q):f==k.ROUND_SHAPE||f==k.CARD_SHAPE?c.roundRect(0,r,p,q,this.round_radius,f==k.CARD_SHAPE?0:this.round_radius):f==k.CIRCLE_SHAPE&&c.arc(0.5*b[0],0.5*b[1],0.5*b[0],0,2*Math.PI),c.fill());c.shadowColor="transparent";a.bgImage&&a.bgImage.width&&c.drawImage(a.bgImage, -0.5*(b[0]-a.bgImage.width),0.5*(b[1]-a.bgImage.height));a.bgImageUrl&&!a.bgImage&&(a.bgImage=a.loadImage(a.bgImageUrl));if(a.onDrawBackground)a.onDrawBackground(c,this,this.canvas);if(n||h==k.TRANSPARENT_TITLE){if(h!=k.TRANSPARENT_TITLE){a.flags.collapsed&&(c.shadowColor=k.DEFAULT_SHADOW_COLOR);if(this.use_gradients){var s=d.gradients[m];s||(s=d.gradients[m]=c.createLinearGradient(0,0,400,0),s.addColorStop(0,m),s.addColorStop(1,"#000"));c.fillStyle=s}else c.fillStyle=m;s=c.globalAlpha;c.beginPath(); -f==k.BOX_SHAPE||0.5>this.scale?c.rect(0,-e,b[0]+1,e):f!=k.ROUND_SHAPE&&f!=k.CARD_SHAPE||c.roundRect(0,-e,b[0]+1,e,this.round_radius,a.flags.collapsed?this.round_radius:0);c.fill();c.shadowColor="transparent"}f==k.ROUND_SHAPE||f==k.CIRCLE_SHAPE||f==k.CARD_SHAPE?(0.5d[2]&&(d[0]+=d[2],d[2]=Math.abs(d[2]));0>d[3]&&(d[1]+=d[3],d[3]=Math.abs(d[3]));if(v(d,b)&&(p=p.outputs[q].dir||(p.flags.horizontal?k.DOWN:k.RIGHT),q=f.inputs[h].dir||(f.flags.horizontal?k.UP:k.LEFT),this.renderLink(a,s,t,n,!1,0,null,p,q),n&&n._last_time&&1E3>c-n._last_time)){var u=2-0.002*(c-n._last_time),E="rgba(255,255,255, "+u.toFixed(2)+")";this.renderLink(a,s,t,n,!0,u,E,p,q)}}}}}a.globalAlpha=1};d.prototype.renderLink=function(a,c,b,f,e, -l,m,h,p){if(this.highquality_render){h=h||k.RIGHT;p=p||k.LEFT;var n=q(c,b);this.render_connections_border&&0.6c[1]?0:Math.PI,a.save(),a.translate(e[0],e[1]),a.rotate(n),a.beginPath(),a.moveTo(-5,-5),a.lineTo(0,5),a.lineTo(5,-5),a.fill(),a.restore());if(l)for(l=0;5>l;++l)e=(0.001*k.getTime()+0.2*l)%1,e=this.computeConnectionPoint(c,b,e,h,p),a.beginPath(),a.arc(e[0],e[1],5,0,2*Math.PI),a.fill()}else a.beginPath(),a.moveTo(c[0],c[1]), -a.lineTo(b[0],b[1]),a.stroke()};d.prototype.computeConnectionPoint=function(a,c,b,d,e){d=d||k.RIGHT;e=e||k.LEFT;var l=q(a,c),f=[a[0],a[1]],m=[c[0],c[1]];switch(d){case k.LEFT:f[0]+=-0.25*l;break;case k.RIGHT:f[0]+=0.25*l;break;case k.UP:f[1]+=-0.25*l;break;case k.DOWN:f[1]+=0.25*l}switch(e){case k.LEFT:m[0]+=-0.25*l;break;case k.RIGHT:m[0]+=0.25*l;break;case k.UP:m[1]+=-0.25*l;break;case k.DOWN:m[1]+=0.25*l}d=(1-b)*(1-b)*(1-b);e=3*(1-b)*(1-b)*b;l=3*(1-b)*b*b;b*=b*b;return[d*a[0]+e*f[0]+l*m[0]+b*c[0], -d*a[1]+e*f[1]+l*m[1]+b*c[1]]};d.prototype.drawExecutionOrder=function(a){a.shadowColor="transparent";a.globalAlpha=0.25;a.textAlign="center";a.strokeStyle="white";a.globalAlpha=0.75;for(var c=this.visible_nodes,b=0;bn.last_y&&ln.options.max&&(n.value= -n.options.max)):"mousedown"==b.type&&(b=40>e?-1:e>f-40?1:0,"number"==n.type?(n.value+=0.1*b*(n.options.step||1),null!=n.options.min&&n.valuen.options.max&&(n.value=n.options.max)):b&&(b=n.options.values.indexOf(n.value)+b,b>=n.options.values.length&&(b=0),0>b&&(b=n.options.values.length-1),n.value=n.options.values[b]));n.callback&&setTimeout(function(){this.callback(this.value,m,a,c)}.bind(n),20);this.dirty_canvas=!0;break;case "toggle":"mousedown"== -b.type&&(n.value=!n.value);break;case "text":"mousedown"==b.type&&this.prompt("Value",n.value,function(a){this.value=a}.bind(n),b)}return n}}return null};d.prototype.drawGroups=function(a,c){if(this.graph){var b=this.graph._groups;c.save();c.globalAlpha=0.5*this.editor_alpha;c.font="24px Arial";for(var d=0;db&&0.01>c.editor_alpha&&(clearInterval(d),1>b&&(c.live_mode=!0));1"+ -p+""+a+"",value:p});if(h.length)return new k.ContextMenu(h,{event:b,callback:l,parentMenu:f,allow_html:!0,node:e},c),!1}};d.decodeHTML=function(a){var c=document.createElement("div");c.innerText=a;return c.innerHTML};d.onResizeNode=function(a,c,b,d,e){e&&(e.size=e.computeSize(),e.setDirtyCanvas(!0,!0))};d.onShowTitleEditor=function(a,c,b,f,e){function l(){e.title=k.value;m.parentNode.removeChild(m);e.setDirtyCanvas(!0,!0)}var m=document.createElement("div"); -m.className="graphdialog";m.innerHTML="Title";var k=m.querySelector("input");k&&(k.value=e.title,k.addEventListener("blur",function(a){this.focus()}),k.addEventListener("keydown",function(a){13==a.keyCode&&(l(),a.preventDefault(),a.stopPropagation())}));a=d.active_canvas.canvas;c=a.getBoundingClientRect();f=b=-20;c&&(b-=c.left,f-=c.top);event?(m.style.left=event.pageX+b+"px",m.style.top=event.pageY+f+"px"):(m.style.left= -0.5*a.width+b+"px",m.style.top=0.5*a.height+f+"px");m.querySelector("button").addEventListener("click",l);a.parentNode.appendChild(m)};d.prototype.prompt=function(a,c,b,f){var e=this;a=a||"";var l=document.createElement("div");l.className="graphdialog rounded";l.innerHTML=" ";l.close=function(){e.prompt_box=null;l.parentNode.removeChild(l)};l.addEventListener("mouseleave",function(a){l.close()}); -e.prompt_box&&e.prompt_box.close();e.prompt_box=l;l.querySelector(".name").innerText=a;l.querySelector(".value").value=c;var m=l.querySelector("input");m.addEventListener("keydown",function(a){if(27==a.keyCode)l.close();else if(13==a.keyCode)b&&b(this.value),l.close();else return;a.preventDefault();a.stopPropagation()});l.querySelector("button").addEventListener("click",function(a){b&&b(m.value);e.setDirty(!0);l.close()});a=d.active_canvas.canvas;c=a.getBoundingClientRect();var k=-20,h=-20;c&&(k-= -c.left,h-=c.top);f?(l.style.left=f.pageX+k+"px",l.style.top=f.pageY+h+"px"):(l.style.left=0.5*a.width+k+"px",l.style.top=0.5*a.height+h+"px");a.parentNode.appendChild(l);setTimeout(function(){m.focus()},10);return l};d.prototype.showSearchBox=function(a){function c(c){if(c)if(e.onSearchBoxSelection)e.onSearchBoxSelection(c,a,s);else if(c=k.createNode(c))c.pos=s.convertEventToCanvas(a),s.graph.add(c);l.close()}function b(a){var c=n;n&&n.classList.remove("selected");n?(n=a?n.nextSibling:n.previousSibling)|| -(n=c):n=a?m.childNodes[0]:m.childNodes[m.childNodes.length];n&&(n.classList.add("selected"),n.scrollIntoView())}function f(){p=null;var a=q.value;h=null;m.innerHTML="";if(a)if(e.onSearchBox)e.onSearchBox(g,a,s);else for(var b in k.registered_node_types)if(-1!=b.indexOf(a)){var g=document.createElement("div");h||(h=b);g.innerText=b;g.className="litegraph lite-search-item";g.addEventListener("click",function(a){c(this.innerText)});m.appendChild(g)}}var e=this,l=document.createElement("div");l.className= -"litegraph litesearchbox graphdialog rounded";l.innerHTML="Search
";l.close=function(){e.search_box=null;l.parentNode.removeChild(l)};l.addEventListener("mouseleave",function(a){l.close()});e.search_box&&e.search_box.close();e.search_box=l;var m=l.querySelector(".helper"),h=null,p=null,n=null,q=l.querySelector("input");q&&(q.addEventListener("blur",function(a){this.focus()}),q.addEventListener("keydown", -function(a){if(38==a.keyCode)b(!1);else if(40==a.keyCode)b(!0);else if(27==a.keyCode)l.close();else if(13==a.keyCode)n?c(n.innerHTML):h?c(h):l.close();else{p&&clearInterval(p);p=setTimeout(f,10);return}a.preventDefault();a.stopPropagation()}));var s=d.active_canvas,v=s.canvas,t=v.getBoundingClientRect(),u=-20,E=-20;t&&(u-=t.left,E-=t.top);a?(l.style.left=a.pageX+u+"px",l.style.top=a.pageY+E+"px"):(l.style.left=0.5*v.width+u+"px",l.style.top=0.5*v.height+E+"px");v.parentNode.appendChild(l);q.focus(); -return l};d.prototype.showEditPropertyValue=function(a,c,b){function d(){e(q.value)}function e(b){"number"==typeof a.properties[c]&&(b=Number(b));"array"==l&&(b=b.split(",").map(Number));a.properties[c]=b;a._graph&&a._graph._version++;if(a.onPropertyChanged)a.onPropertyChanged(c,b);p.close();a.setDirtyCanvas(!0,!0)}if(a&&void 0!==a.properties[c]){b=b||{};var l="string";null!==a.properties[c]&&(l=typeof a.properties[c]);"object"==l&&a.properties[c].length&&(l="array");var f=null;a.getPropertyInfo&& -(f=a.getPropertyInfo(c));if(a.properties_info)for(var m=0;m";else if("enum"==l&&f.values){k=""}else if("boolean"==l)k="";else{console.warn("unknown type: "+l);return}var p=this.createDialog(""+c+""+k+"",b);if("enum"==l&&f.values){var q=p.querySelector("select");q.addEventListener("change",function(a){e(a.target.value)})}else if("boolean"==l)(q=p.querySelector("input"))&&q.addEventListener("click",function(a){e(!!q.checked)}); -else if(q=p.querySelector("input"))q.addEventListener("blur",function(a){this.focus()}),q.value=void 0!==a.properties[c]?a.properties[c]:"",q.addEventListener("keydown",function(a){13==a.keyCode&&(d(),a.preventDefault(),a.stopPropagation())});p.querySelector("button").addEventListener("click",d)}};d.prototype.createDialog=function(a,c){c=c||{};var b=document.createElement("div");b.className="graphdialog";b.innerHTML=a;var d=this.canvas.getBoundingClientRect(),e=-20,l=-20;d&&(e-=d.left,l-=d.top);c.position? -(e+=c.position[0],l+=c.position[1]):c.event?(e+=c.event.pageX,l+=c.event.pageY):(e+=0.5*this.canvas.width,l+=0.5*this.canvas.height);b.style.left=e+"px";b.style.top=l+"px";this.canvas.parentNode.appendChild(b);b.close=function(){this.parentNode&&this.parentNode.removeChild(this)};return b};d.onMenuNodeCollapse=function(a,c,b,d,e){e.collapse()};d.onMenuNodePin=function(a,c,b,d,e){e.pin()};d.onMenuNodeMode=function(a,c,b,d,e){new k.ContextMenu(["Always","On Event","On Trigger","Never"],{event:b,callback:function(a){if(e)switch(a){case "On Event":e.mode= -k.ON_EVENT;break;case "On Trigger":e.mode=k.ON_TRIGGER;break;case "Never":e.mode=k.NEVER;break;default:e.mode=k.ALWAYS}},parentMenu:d,node:e});return!1};d.onMenuNodeColors=function(a,c,b,f,e){if(!e)throw"no node for color";c=[];c.push({value:null,content:"No color"});for(var l in d.node_colors)a=d.node_colors[l],a={value:l,content:""+l+""},c.push(a);new k.ContextMenu(c,{event:b,callback:function(a){e&&((a=a.value?d.node_colors[a.value]:null)?e.constructor===k.LGraphGroup?e.color=a.groupcolor:(e.color=a.color,e.bgcolor=a.bgcolor):(delete e.color,delete e.bgcolor),e.setDirtyCanvas(!0,!0))},parentMenu:f,node:e});return!1};d.onMenuNodeShapes=function(a,c,b,d,e){if(!e)throw"no node passed";new k.ContextMenu(k.VALID_SHAPES,{event:b,callback:function(a){e&&(e.shape=a,e.setDirtyCanvas(!0))},parentMenu:d,node:e}); -return!1};d.onMenuNodeRemove=function(a,c,b,d,e){if(!e)throw"no node passed";!1!==e.removable&&(e.graph.remove(e),e.setDirtyCanvas(!0,!0))};d.onMenuNodeClone=function(a,c,b,d,e){!1!=e.clonable&&(a=e.clone())&&(a.pos=[e.pos[0]+5,e.pos[1]+5],e.graph.add(a),e.setDirtyCanvas(!0,!0))};d.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"}};d.prototype.getCanvasMenuOptions=function(){var a=null;this.getMenuOptions?a=this.getMenuOptions():(a=[{content:"Add Node",has_submenu:!0,callback:d.onMenuAdd},{content:"Add Group",callback:d.onGroupAdd}],this._graph_stack&& -0Name",e),f= -m.querySelector("input");f&&d&&(f.value=d.label);m.querySelector("button").addEventListener("click",function(a){f.value&&(d&&(d.label=f.value),b.setDirty(!0));m.close()})}},extra:a},m=null;a&&(m=a.getSlotInPosition(c.canvasX,c.canvasY),d.active_node=a);m?(e=[],e.push(m.locked?"Cannot remove":{content:"Remove Slot",slot:m}),e.push(m.nameLocked?"Cannot rename":{content:"Rename Slot",slot:m}),l.title=(m.input?m.input.type:m.output.type)||"*",m.input&&m.input.type==k.ACTION&&(l.title="Action"),m.output&& -m.output.type==k.EVENT&&(l.title="Event")):a?e=this.getNodeMenuOptions(a):(e=this.getCanvasMenuOptions(),(m=this.graph.getGroupOnPos(c.canvasX,c.canvasY))&&e.push(null,{content:"Edit Group",has_submenu:!0,submenu:{title:"Group",extra:m,options:this.getGroupMenuOptions(m)}}));e&&new k.ContextMenu(e,l,f)};this.CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.roundRect=function(a,c,b,d,e,l){void 0===e&&(e=5);void 0===l&&(l=e);this.moveTo(a+e,c);this.lineTo(a+b-e,c);this.quadraticCurveTo(a+ -b,c,a+b,c+e);this.lineTo(a+b,c+d-l);this.quadraticCurveTo(a+b,c+d,a+b-l,c+d);this.lineTo(a+l,c+d);this.quadraticCurveTo(a,c+d,a,c+d-l);this.lineTo(a,c+e);this.quadraticCurveTo(a,c,a+e,c)});k.compareObjects=function(a,c){for(var b in a)if(a[b]!=c[b])return!1;return!0};k.distance=q;k.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")+")"};k.isInsideRectangle=s;k.growBounding= -function(a,c,b){ca[2]&&(a[2]=c);ba[3]&&(a[3]=b)};k.isInsideBounding=function(a,c){return a[0]c[1][0]||a[1]>c[1][1]?!1:!0};k.overlapBounding=v;k.hex2num=function(a){"#"==a.charAt(0)&&(a=a.slice(1));a=a.toUpperCase();for(var c=Array(3),b=0,d,e,l=0;6>l;l+=2)d="0123456789ABCDEF".indexOf(a.charAt(l)),e="0123456789ABCDEF".indexOf(a.charAt(l+1)),c[b]=16*d+e,b++;return c};k.num2hex=function(a){for(var c="#",b,d,e=0;3>e;e++)b=a[e]/16,d=a[e]%16,c+= -"0123456789ABCDEF".charAt(b)+"0123456789ABCDEF".charAt(d);return c};t.prototype.addItem=function(a,c,b){function d(a){var c=this.value;c&&c.has_submenu&&e.call(this,a)}function e(a){var c=this.value,e=!0;l.current_submenu&&l.current_submenu.close(a);if(b.callback){var d=b.callback.call(this,c,b,a,l,b.node);!0===d&&(e=!1)}if(c&&(c.callback&&!b.ignore_item_callbacks&&!0!==c.disabled&&(d=c.callback.call(this,c,b,a,l,b.extra),!0===d&&(e=!1)),c.submenu)){if(!c.submenu.options)throw"ContextMenu submenu needs options"; -new l.constructor(c.submenu.options,{callback:c.submenu.callback,event:a,parentMenu:l,ignore_item_callbacks:c.submenu.ignore_item_callbacks,title:c.submenu.title,extra:c.submenu.extra,autoopen:b.autoopen});e=!1}e&&!l.lock&&l.close()}var l=this;b=b||{};var m=document.createElement("div");m.className="litemenu-entry submenu";var f=!1;if(null===c)m.classList.add("separator");else{m.innerHTML=c&&c.title?c.title:a;if(m.value=c)c.disabled&&(f=!0,m.classList.add("disabled")),(c.submenu||c.has_submenu)&& -m.classList.add("has_submenu");"function"==typeof c?(m.dataset.value=a,m.onclick_callback=c):m.dataset.value=c;c.className&&(m.className+=" "+c.className)}this.root.appendChild(m);f||m.addEventListener("click",e);b.autoopen&&m.addEventListener("mouseenter",d);return m};t.prototype.close=function(a,c){this.root.parentNode&&this.root.parentNode.removeChild(this.root);this.parentMenu&&!c&&(this.parentMenu.lock=!1,this.parentMenu.current_submenu=null,void 0===a?this.parentMenu.close():a&&!t.isCursorOverElement(a, -this.parentMenu.root)&&t.trigger(this.parentMenu.root,"mouseleave",a));this.current_submenu&&this.current_submenu.close(a,!0)};t.trigger=function(a,c,b,d){var e=document.createEvent("CustomEvent");e.initCustomEvent(c,!0,!0,b);e.srcElement=d;a.dispatchEvent?a.dispatchEvent(e):a.__events&&a.__events.dispatchEvent(e);return e};t.prototype.getTopMenu=function(){return this.options.parentMenu?this.options.parentMenu.getTopMenu():this};t.prototype.getFirstEvent=function(){return this.options.parentMenu? -this.options.parentMenu.getFirstEvent():this.options.event};t.isCursorOverElement=function(a,c){var b=a.pageX,d=a.pageY,e=c.getBoundingClientRect();return e?d>e.top&&de.left&&ba?c:bthis.size[0]-m.NODE_TITLE_HEIGHT&&0>a[1]){var d= -this;setTimeout(function(){c.openSubgraph(d.subgraph)},10)}};f.prototype.onSubgraphNewGlobalInput=function(b,a){this.addInput(b,a)};f.prototype.onSubgraphRenamedGlobalInput=function(b,a){var c=this.findInputSlot(b);-1!=c&&(this.getInputInfo(c).name=a)};f.prototype.onSubgraphTypeChangeGlobalInput=function(b,a){var c=this.findInputSlot(b);-1!=c&&(this.getInputInfo(c).type=a)};f.prototype.onSubgraphNewGlobalOutput=function(b,a){this.addOutput(b,a)};f.prototype.onSubgraphRenamedGlobalOutput=function(b, -a){var c=this.findOutputSlot(b);-1!=c&&(this.getOutputInfo(c).name=a)};f.prototype.onSubgraphTypeChangeGlobalOutput=function(b,a){var c=this.findOutputSlot(b);-1!=c&&(this.getOutputInfo(c).type=a)};f.prototype.getExtraMenuOptions=function(b){var a=this;return[{content:"Open",callback:function(){b.openSubgraph(a.subgraph)}}]};f.prototype.onResize=function(b){b[1]+=20};f.prototype.onExecute=function(){if(this.inputs)for(var b=0;ba[1]))return this.old_y=b.canvasY,this.captureInput(!0),this.mouse_captured=!0};p.prototype.onMouseMove=function(b){if(this.mouse_captured){var a=this.old_y-b.canvasY;b.shiftKey&&(a*=10);if(b.metaKey||b.altKey)a*=0.1;this.old_y=b.canvasY;b=this._remainder+a/p.pixels_threshold;this._remainder=b%1;b=Math.clamp(this.properties.value+(b|0)*this.properties.step,this.properties.min,this.properties.max);this.properties.value=b;this.graph._version++; -this.setDirtyCanvas(!0)}};p.prototype.onMouseUp=function(b,a){200>b.click_time&&(this.properties.value=Math.clamp(this.properties.value+(a[1]>0.5*this.size[1]?-1:1)*this.properties.step,this.properties.min,this.properties.max),this.graph._version++,this.setDirtyCanvas(!0));this.mouse_captured&&(this.mouse_captured=!1,this.captureInput(!1))};m.registerNodeType("widget/number",p);d.title="Knob";d.desc="Circular controller";d.widgets=[{name:"increase",text:"+",type:"minibutton"},{name:"decrease",text:"-", -type:"minibutton"}];d.prototype.onAdded=function(){this.value=(this.properties.value-this.properties.min)/(this.properties.max-this.properties.min);this.imgbg=this.loadImage("imgs/knob_bg.png");this.imgfg=this.loadImage("imgs/knob_fg.png")};d.prototype.onDrawImageKnob=function(b){if(this.imgfg&&this.imgfg.width){var a=0.5*this.imgbg.width,c=this.size[0]/this.imgfg.width;b.save();b.translate(0,20);b.scale(c,c);b.drawImage(this.imgbg,0,0);b.translate(a,a);b.rotate(2*this.value*Math.PI*6/8+10*Math.PI/ -8);b.translate(-a,-a);b.drawImage(this.imgfg,0,0);b.restore();this.title&&(b.font="bold 16px Criticized,Tahoma",b.fillStyle="rgba(100,100,100,0.8)",b.textAlign="center",b.fillText(this.title.toUpperCase(),0.5*this.size[0],18),b.textAlign="left")}};d.prototype.onDrawVectorKnob=function(b){if(this.imgfg&&this.imgfg.width){b.lineWidth=1;b.strokeStyle=this.mouseOver?"#FFF":"#AAA";b.fillStyle="#000";b.beginPath();b.arc(0.5*this.size[0],0.5*this.size[1]+10,0.5*this.properties.size,0,2*Math.PI,!0);b.stroke(); -0b.canvasY-this.pos[1]||m.distance([b.canvasX,b.canvasY],[this.pos[0]+this.center[0],this.pos[1]+this.center[1]])>this.radius)return!1;this.oldmouse=[b.canvasX-this.pos[0],b.canvasY-this.pos[1]];this.captureInput(!0); -return!0}};d.prototype.onMouseMove=function(b){if(this.oldmouse){b=[b.canvasX-this.pos[0],b.canvasY-this.pos[1]];var a=this.value,a=a-0.01*(b[1]-this.oldmouse[1]);1a&&(a=0);this.value=a;this.properties.value=this.properties.min+(this.properties.max-this.properties.min)*this.value;this.oldmouse=b;this.setDirtyCanvas(!0)}};d.prototype.onMouseUp=function(b){this.oldmouse&&(this.oldmouse=null,this.captureInput(!1))};d.prototype.onMouseLeave=function(b){};d.prototype.onWidget=function(b,a){if("increase"== -a.name)this.onPropertyChanged("size",this.properties.size+10);else if("decrease"==a.name)this.onPropertyChanged("size",this.properties.size-10)};d.prototype.onPropertyChanged=function(b,a){if("wcolor"==b)this.properties[b]=a;else if("size"==b)a=parseInt(a),this.properties[b]=a,this.size=[a+4,a+24],this.setDirtyCanvas(!0,!0);else if("min"==b||"max"==b||"value"==b)this.properties[b]=parseFloat(a);else return!1;return!0};m.registerNodeType("widget/knob",d);q.title="Internal Slider";q.prototype.onPropertyChanged= -function(b,a){"value"==b&&(this.slider.value=a)};q.prototype.onExecute=function(){this.setOutputData(0,this.properties.value)};m.registerNodeType("widget/internal_slider",q);s.title="H.Slider";s.desc="Linear slider controller";s.prototype.onAdded=function(){this.value=0.5;this.imgfg=this.loadImage("imgs/slider_fg.png")};s.prototype.onDrawVectorial=function(b){this.imgfg&&this.imgfg.width&&(b.lineWidth=1,b.strokeStyle=this.mouseOver?"#FFF":"#AAA",b.fillStyle="#000",b.beginPath(),b.rect(2,0,this.size[0]- -4,20),b.stroke(),b.fillStyle=this.properties.wcolor,b.beginPath(),b.rect(2+(this.size[0]-4-20)*this.value,0,20,20),b.fill())};s.prototype.onDrawImage=function(b){this.imgfg&&this.imgfg.width&&(b.lineWidth=1,b.fillStyle="#000",b.fillRect(2,9,this.size[0]-4,2),b.strokeStyle="#333",b.beginPath(),b.moveTo(2,9),b.lineTo(this.size[0]-4,9),b.stroke(),b.strokeStyle="#AAA",b.beginPath(),b.moveTo(2,11),b.lineTo(this.size[0]-4,11),b.stroke(),b.drawImage(this.imgfg,2+(this.size[0]-4)*this.value-0.5*this.imgfg.width, -0.5*-this.imgfg.height+10))};s.prototype.onDrawForeground=function(b){this.onDrawImage(b)};s.prototype.onExecute=function(){this.properties.value=this.properties.min+(this.properties.max-this.properties.min)*this.value;this.setOutputData(0,this.properties.value);this.boxcolor=m.colorToString([this.value,this.value,this.value])};s.prototype.onMouseDown=function(b){if(0>b.canvasY-this.pos[1])return!1;this.oldmouse=[b.canvasX-this.pos[0],b.canvasY-this.pos[1]];this.captureInput(!0);return!0};s.prototype.onMouseMove= -function(b){if(this.oldmouse){b=[b.canvasX-this.pos[0],b.canvasY-this.pos[1]];var a=this.value,a=a+(b[0]-this.oldmouse[0])/this.size[0];1a&&(a=0);this.value=a;this.oldmouse=b;this.setDirtyCanvas(!0)}};s.prototype.onMouseUp=function(b){this.oldmouse=null;this.captureInput(!1)};s.prototype.onMouseLeave=function(b){};s.prototype.onPropertyChanged=function(b,a){if("wcolor"==b)this.properties[b]=a;else return!1;return!0};m.registerNodeType("widget/hslider",s);v.title="Progress";v.desc="Shows data in linear progress"; -v.prototype.onExecute=function(){var b=this.getInputData(0);void 0!=b&&(this.properties.value=b)};v.prototype.onDrawForeground=function(b){b.lineWidth=1;b.fillStyle=this.properties.wcolor;var a=(this.properties.value-this.properties.min)/(this.properties.max-this.properties.min),a=Math.min(1,a),a=Math.max(0,a);b.fillRect(2,2,(this.size[0]-4)*a,this.size[1]-4)};m.registerNodeType("widget/progress",v);t.title="Text";t.desc="Shows the input value";t.widgets=[{name:"resize",text:"Resize box",type:"button"}, -{name:"led_text",text:"LED",type:"minibutton"},{name:"normal_text",text:"Normal",type:"minibutton"}];t.prototype.onDrawForeground=function(b){b.fillStyle=this.properties.color;var a=this.properties.value;this.properties.glowSize?(b.shadowColor=this.properties.color,b.shadowOffsetX=0,b.shadowOffsetY=0,b.shadowBlur=this.properties.glowSize):b.shadowColor="transparent";var c=this.properties.fontsize;b.textAlign=this.properties.align;b.font=c.toString()+"px "+this.properties.font;this.str="number"==typeof a? -a.toFixed(this.properties.decimals):a;if("string"==typeof this.str){var a=this.str.split("\\n"),d;for(d in a)b.fillText(a[d],"left"==this.properties.align?15:this.size[0]-15,-0.15*c+c*(parseInt(d)+1))}b.shadowColor="transparent";this.last_ctx=b;b.textAlign="left"};t.prototype.onExecute=function(){var b=this.getInputData(0);null!=b&&(this.properties.value=b)};t.prototype.resize=function(){if(this.last_ctx){var b=this.str.split("\\n");this.last_ctx.font=this.properties.fontsize+"px "+this.properties.font; -var a=0,c;for(c in b){var d=this.last_ctx.measureText(b[c]).width;ad?f.xbox.axes.lx:0,this._left_axis[1]=Math.abs(f.xbox.axes.ly)>d?f.xbox.axes.ly:0,this._right_axis[0]=Math.abs(f.xbox.axes.rx)>d?f.xbox.axes.rx:0,this._right_axis[1]=Math.abs(f.xbox.axes.ry)>d?f.xbox.axes.ry:0,this._triggers[0]=Math.abs(f.xbox.axes.ltrigger)>d?f.xbox.axes.ltrigger:0,this._triggers[1]=Math.abs(f.xbox.axes.rtrigger)>d?f.xbox.axes.rtrigger:0);if(this.outputs)for(d= -0;df;f++)if(d[f]){f=d[f];d=this.xbox_mapping;d||(d=this.xbox_mapping= -{axes:[],buttons:{},hat:""});d.axes.lx=f.axes[0];d.axes.ly=f.axes[1];d.axes.rx=f.axes[2];d.axes.ry=f.axes[3];d.axes.ltrigger=f.buttons[6].value;d.axes.rtrigger=f.buttons[7].value;for(var h=0;h","string",{values:e.values});this.size=[60,40]}function l(){this.addInput("inc","number");this.addOutput("total","number");this.addProperty("increment",1);this.addProperty("value",0)}function r(){this.addInput("v","number");this.addOutput("sin","number");this.addProperty("amplitude",1);this.addProperty("offset",0);this.bgImageUrl="nodes/imgs/icon-sin.png"} -function D(){this.addInput("vec2","vec2");this.addOutput("x","number");this.addOutput("y","number")}function y(){this.addInputs([["x","number"],["y","number"]]);this.addOutput("vec2","vec2");this.properties={x:0,y:0};this._data=new Float32Array(2)}function n(){this.addInput("vec3","vec3");this.addOutput("x","number");this.addOutput("y","number");this.addOutput("z","number")}function A(){this.addInputs([["x","number"],["y","number"],["z","number"]]);this.addOutput("vec3","vec3");this.properties={x:0, -y:0,z:0};this._data=new Float32Array(3)}function C(){this.addInput("vec4","vec4");this.addOutput("x","number");this.addOutput("y","number");this.addOutput("z","number");this.addOutput("w","number")}function B(){this.addInputs([["x","number"],["y","number"],["z","number"],["w","number"]]);this.addOutput("vec4","vec4");this.properties={x:0,y:0,z:0,w:0};this._data=new Float32Array(4)}var x=u.LiteGraph;h.title="Converter";h.desc="type A to type B";h.prototype.onExecute=function(){var a=this.getInputData(0); -if(null!=a&&this.outputs)for(var c=0;cb&&(this._current=0);for(var c=a=0;cb&&(b=1);this.properties.samples=Math.round(b);var c=this._values;this._values=new Float32Array(this.properties.samples);c.length<=this._values.length?this._values.set(c):this._values.set(c.subarray(0,this._values.length))};x.registerNodeType("math/average",a);c.title="TendTo";c.desc="moves the output value always closer to the input"; -c.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=0);var b=this.properties.factor;this._value=null==this._value?a:this._value*(1-b)+a*b;this.setOutputData(0,this._value)};x.registerNodeType("math/tendTo",c);g.values="+-*/%^".split("");g.title="Operation";g.desc="Easy math operators";g["@OP"]={type:"enum",title:"operation",values:g.values};g.prototype.getTitle=function(){return"A "+this.properties.OP+" B"};g.prototype.setValue=function(a){"string"==typeof a&&(a=parseFloat(a)); -this.properties.value=a};g.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1);null!=a?this.properties.A=a:a=this.properties.A;null!=b?this.properties.B=b:b=this.properties.B;var c=0;switch(this.properties.OP){case "+":c=a+b;break;case "-":c=a-b;break;case "x":case "X":case "*":c=a*b;break;case "/":c=a/b;break;case "%":c=a%b;break;case "^":c=Math.pow(a,b);break;default:console.warn("Unknown operation: "+this.properties.OP)}this.setOutputData(0,c)};g.prototype.onDrawBackground= -function(a){this.flags.collapsed||(a.font="40px Arial",a.fillStyle="#CCC",a.textAlign="center",a.fillText(this.properties.OP,0.5*this.size[0],0.35*this.size[1]+x.NODE_TITLE_HEIGHT),a.textAlign="left")};x.registerNodeType("math/operation",g);w.title="Compare";w.desc="compares between two values";w.prototype.onExecute=function(){var a=this.getInputData(0),b=this.getInputData(1);void 0!==a?this.properties.A=a:a=this.properties.A;void 0!==b?this.properties.B=b:b=this.properties.B;for(var c=0,e=this.outputs.length;c< -e;++c){var d=this.outputs[c];if(d.links&&d.links.length){switch(d.name){case "A==B":value=a==b;break;case "A!=B":value=a!=b;break;case "A>B":value=a>b;break;case "A=B":value=a>=b}this.setOutputData(c,value)}}};w.prototype.onGetOutputs=function(){return[["A==B","boolean"],["A!=B","boolean"],["A>B","boolean"],["A=B","boolean"],["A<=B","boolean"]]};x.registerNodeType("math/compare",w);e.values="> < == != <= >=".split(" ");e["@OP"]= -{type:"enum",title:"operation",values:e.values};e.title="Condition";e.desc="evaluates condition between A and B";e.prototype.onExecute=function(){var a=this.getInputData(0);void 0===a?a=this.properties.A:this.properties.A=a;var b=this.getInputData(1);void 0===b?b=this.properties.B:this.properties.B=b;var c=!0;switch(this.properties.OP){case ">":c=a>b;break;case "<":c=a=":c=a>=b}this.setOutputData(0,c)};x.registerNodeType("math/condition", -e);l.title="Accumulate";l.desc="Increments a value every time";l.prototype.onExecute=function(){null===this.properties.value&&(this.properties.value=0);var a=this.getInputData(0);this.properties.value=null!==a?this.properties.value+a:this.properties.value+this.properties.increment;this.setOutputData(0,this.properties.value)};x.registerNodeType("math/accumulate",l);r.title="Trigonometry";r.desc="Sin Cos Tan";r.filter="shader";r.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a= -0);var b=this.properties.amplitude,c=this.findInputSlot("amplitude");-1!=c&&(b=this.getInputData(c));var e=this.properties.offset,c=this.findInputSlot("offset");-1!=c&&(e=this.getInputData(c));for(var c=0,d=this.outputs.length;cXY";D.desc="vector 2 to components";D.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&(this.setOutputData(0,a[0]),this.setOutputData(1,a[1]))};x.registerNodeType("math3d/vec2-to-xyz",D);y.title="XY->Vec2";y.desc="components to vector2";y.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=this.properties.x);var b=this.getInputData(1);null==b&&(b=this.properties.y);var c=this._data;c[0]=a;c[1]=b;this.setOutputData(0,c)};x.registerNodeType("math3d/xy-to-vec2", -y);n.title="Vec3->XYZ";n.desc="vector 3 to components";n.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&(this.setOutputData(0,a[0]),this.setOutputData(1,a[1]),this.setOutputData(2,a[2]))};x.registerNodeType("math3d/vec3-to-xyz",n);A.title="XYZ->Vec3";A.desc="components to vector3";A.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=this.properties.x);var b=this.getInputData(1);null==b&&(b=this.properties.y);var c=this.getInputData(2);null==c&&(c=this.properties.z); -var e=this._data;e[0]=a;e[1]=b;e[2]=c;this.setOutputData(0,e)};x.registerNodeType("math3d/xyz-to-vec3",A);C.title="Vec4->XYZW";C.desc="vector 4 to components";C.prototype.onExecute=function(){var a=this.getInputData(0);null!=a&&(this.setOutputData(0,a[0]),this.setOutputData(1,a[1]),this.setOutputData(2,a[2]),this.setOutputData(3,a[3]))};x.registerNodeType("math3d/vec4-to-xyzw",C);B.title="XYZW->Vec4";B.desc="components to vector4";B.prototype.onExecute=function(){var a=this.getInputData(0);null== -a&&(a=this.properties.x);var b=this.getInputData(1);null==b&&(b=this.properties.y);var c=this.getInputData(2);null==c&&(c=this.properties.z);var e=this.getInputData(3);null==e&&(e=this.properties.w);var d=this._data;d[0]=a;d[1]=b;d[2]=c;d[3]=e;this.setOutputData(0,d)};x.registerNodeType("math3d/xyzw-to-vec4",B);u.glMatrix&&(u=function(){this.addOutput("quat","quat");this.properties={x:0,y:0,z:0,w:1};this._value=quat.create()},u.title="Quaternion",u.desc="quaternion",u.prototype.onExecute=function(){this._value[0]= -this.properties.x;this._value[1]=this.properties.y;this._value[2]=this.properties.z;this._value[3]=this.properties.w;this.setOutputData(0,this._value)},x.registerNodeType("math3d/quaternion",u),u=function(){this.addInputs([["degrees","number"],["axis","vec3"]]);this.addOutput("quat","quat");this.properties={angle:90,axis:vec3.fromValues(0,1,0)};this._value=quat.create()},u.title="Rotation",u.desc="quaternion rotation",u.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=this.properties.angle); -var b=this.getInputData(1);null==b&&(b=this.properties.axis);a=quat.setAxisAngle(this._value,b,0.0174532925*a);this.setOutputData(0,a)},x.registerNodeType("math3d/rotation",u),u=function(){this.addInputs([["vec3","vec3"],["quat","quat"]]);this.addOutput("result","vec3");this.properties={vec:[0,0,1]}},u.title="Rot. Vec3",u.desc="rotate a point",u.prototype.onExecute=function(){var a=this.getInputData(0);null==a&&(a=this.properties.vec);var b=this.getInputData(1);null==b?this.setOutputData(a):this.setOutputData(0, -vec3.transformQuat(vec3.create(),a,b))},x.registerNodeType("math3d/rotate_vec3",u),u=function(){this.addInputs([["A","quat"],["B","quat"]]);this.addOutput("A*B","quat");this._value=quat.create()},u.title="Mult. Quat",u.desc="rotate quaternion",u.prototype.onExecute=function(){var a=this.getInputData(0);if(null!=a){var b=this.getInputData(1);null!=b&&(a=quat.multiply(this._value,a,b),this.setOutputData(0,a))}},x.registerNodeType("math3d/mult-quat",u),u=function(){this.addInputs([["A","quat"],["B", -"quat"],["factor","number"]]);this.addOutput("slerp","quat");this.addProperty("factor",0.5);this._value=quat.create()},u.title="Quat Slerp",u.desc="quaternion spherical interpolation",u.prototype.onExecute=function(){var a=this.getInputData(0);if(null!=a){var b=this.getInputData(1);if(null!=b){var c=this.properties.factor;null!=this.getInputData(2)&&(c=this.getInputData(2));a=quat.slerp(this._value,a,b,c);this.setOutputData(0,a)}}},x.registerNodeType("math3d/quat-slerp",u))})(this); -(function(u){function h(){this.addInput("sel","boolean");this.addOutput("value","number");this.properties={A:0,B:1};this.size=[60,20]}u=u.LiteGraph;h.title="Selector";h.desc="outputs A if selector is true, B if selector is false";h.prototype.onExecute=function(){var f=this.getInputData(0);if(void 0!==f){for(var h=1;hb;++b){var a=this.getInputData(b);if(null!=a){var c=this.values[b];c.push(a);c.length>d[0]&&c.shift()}}}};h.prototype.onDrawBackground=function(d){if(!this.flags.collapsed){var b=this.size,a=0.5*b[1]/this.properties.scale,c=h.colors,f=0.5*b[1];d.fillStyle="#000";d.fillRect(0,0,b[0],b[1]);d.strokeStyle="#555";d.beginPath();d.moveTo(0,f);d.lineTo(b[0], -f);d.stroke();for(var k=0;4>k;++k){var e=this.values[k];d.strokeStyle=c[k];d.beginPath();var l=e[0]*a*-1+f;d.moveTo(0,Math.clamp(l,0,b[1]));for(var r=1;rb&&(b=0);if(0!=d.length){var a=[0,0,0];if(0==b)a=d[0];else if(1==b)a=d[d.length-1];else{var c=(d.length-1)*b,b=d[Math.floor(c)],d=d[Math.floor(c)+1],c=c-Math.floor(c);a[0]=b[0]*(1-c)+d[0]*c;a[1]=b[1]*(1-c)+d[1]*c;a[2]=b[2]*(1-c)+d[2]*c}for(var f in a)a[f]/=255;this.boxcolor=colorToString(a);this.setOutputData(0,a)}};k.registerNodeType("color/palette",p);d.title="Frame";d.desc="Frame viewerew";d.widgets=[{name:"resize",text:"Resize box",type:"button"}, -{name:"view",text:"View Image",type:"button"}];d.prototype.onDrawBackground=function(d){this.frame&&d.drawImage(this.frame,0,0,this.size[0],this.size[1])};d.prototype.onExecute=function(){this.frame=this.getInputData(0);this.setDirtyCanvas(!0)};d.prototype.onWidget=function(d,b){if("resize"==b.name&&this.frame){var a=this.frame.width,c=this.frame.height;a||null==this.frame.videoWidth||(a=this.frame.videoWidth,c=this.frame.videoHeight);a&&c&&(this.size=[a,c]);this.setDirtyCanvas(!0,!0)}else"view"== -b.name&&this.show()};d.prototype.show=function(){showElement&&this.frame&&showElement(this.frame)};k.registerNodeType("graphics/frame",d);q.title="Image fade";q.desc="Fades between images";q.widgets=[{name:"resizeA",text:"Resize to A",type:"button"},{name:"resizeB",text:"Resize to B",type:"button"}];q.prototype.onAdded=function(){this.createCanvas();var d=this.canvas.getContext("2d");d.fillStyle="#000";d.fillRect(0,0,this.properties.width,this.properties.height)};q.prototype.createCanvas=function(){this.canvas= -document.createElement("canvas");this.canvas.width=this.properties.width;this.canvas.height=this.properties.height};q.prototype.onExecute=function(){var d=this.canvas.getContext("2d");this.canvas.width=this.canvas.width;var b=this.getInputData(0);null!=b&&d.drawImage(b,0,0,this.canvas.width,this.canvas.height);b=this.getInputData(2);null==b?b=this.properties.fade:this.properties.fade=b;d.globalAlpha=b;b=this.getInputData(1);null!=b&&d.drawImage(b,0,0,this.canvas.width,this.canvas.height);d.globalAlpha= -1;this.setOutputData(0,this.canvas);this.setDirtyCanvas(!0)};k.registerNodeType("graphics/imagefade",q);s.title="Crop";s.desc="Crop Image";s.prototype.onAdded=function(){this.createCanvas()};s.prototype.createCanvas=function(){this.canvas=document.createElement("canvas");this.canvas.width=this.properties.width;this.canvas.height=this.properties.height};s.prototype.onExecute=function(){var d=this.getInputData(0);d&&(d.width?(this.canvas.getContext("2d").drawImage(d,-this.properties.x,-this.properties.y, -d.width*this.properties.scale,d.height*this.properties.scale),this.setOutputData(0,this.canvas)):this.setOutputData(0,null))};s.prototype.onDrawBackground=function(d){this.flags.collapsed||this.canvas&&d.drawImage(this.canvas,0,0,this.canvas.width,this.canvas.height,0,0,this.size[0],this.size[1])};s.prototype.onPropertyChanged=function(d,b){this.properties[d]=b;"scale"==d?(this.properties[d]=parseFloat(b),0==this.properties[d]&&(this.trace("Error in scale"),this.properties[d]=1)):this.properties[d]= -parseInt(b);this.createCanvas();return!0};k.registerNodeType("graphics/cropImage",s);v.title="Video";v.desc="Video playback";v.widgets=[{name:"play",text:"PLAY",type:"minibutton"},{name:"stop",text:"STOP",type:"minibutton"},{name:"demo",text:"Demo video",type:"button"},{name:"mute",text:"Mute video",type:"button"}];v.prototype.onExecute=function(){if(this.properties.url&&(this.properties.url!=this._video_url&&this.loadVideo(this.properties.url),this._video&&0!=this._video.width)){var d=this.getInputData(0); -d&&0<=d&&1>=d&&(this._video.currentTime=d*this._video.duration,this._video.pause());this._video.dirty=!0;this.setOutputData(0,this._video);this.setOutputData(1,this._video.currentTime);this.setOutputData(2,this._video.duration);this.setDirtyCanvas(!0)}};v.prototype.onStart=function(){this.play()};v.prototype.onStop=function(){this.stop()};v.prototype.loadVideo=function(d){this._video_url=d;this.properties.use_proxy&&"http"==d.substr(0,4)&&k.proxy&&(d=k.proxy+d.substr(d.indexOf(":")+3));this._video= -document.createElement("video");this._video.src=d;this._video.type="type=video/mp4";this._video.muted=!0;this._video.autoplay=!0;var b=this;this._video.addEventListener("loadedmetadata",function(a){b.trace("Duration: "+this.duration+" seconds");b.trace("Size: "+this.videoWidth+","+this.videoHeight);b.setDirtyCanvas(!0);this.width=this.videoWidth;this.height=this.videoHeight});this._video.addEventListener("progress",function(a){});this._video.addEventListener("error",function(a){console.log("Error loading video: "+ -this.src);b.trace("Error loading video: "+this.src);if(this.error)switch(this.error.code){case this.error.MEDIA_ERR_ABORTED:b.trace("You stopped the video.");break;case this.error.MEDIA_ERR_NETWORK:b.trace("Network error - please try again later.");break;case this.error.MEDIA_ERR_DECODE:b.trace("Video is broken..");break;case this.error.MEDIA_ERR_SRC_NOT_SUPPORTED:b.trace("Sorry, your browser can't play this video.")}});this._video.addEventListener("ended",function(a){b.trace("Ended.");this.play()})}; -v.prototype.onPropertyChanged=function(d,b){this.properties[d]=b;"url"==d&&""!=b&&this.loadVideo(b);return!0};v.prototype.play=function(){this._video&&this._video.play()};v.prototype.playPause=function(){this._video&&(this._video.paused?this.play():this.pause())};v.prototype.stop=function(){this._video&&(this._video.pause(),this._video.currentTime=0)};v.prototype.pause=function(){this._video&&(this.trace("Video paused"),this._video.pause())};v.prototype.onWidget=function(d,b){};k.registerNodeType("graphics/video", -v);t.title="Webcam";t.desc="Webcam image";t.prototype.openStream=function(){function d(a){console.log("Webcam rejected",a);b._webcam_stream=!1;b.box_color="red"}navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia;window.URL=window.URL||window.webkitURL;if(navigator.getUserMedia){this._waiting_confirmation=!0;navigator.getUserMedia({video:!0},this.streamReady.bind(this),d);var b=this}};t.prototype.onRemoved=function(){this._webcam_stream&& -(this._webcam_stream.stop(),this._video=this._webcam_stream=null)};t.prototype.streamReady=function(d){this._webcam_stream=d;var b=this._video;b||(b=document.createElement("video"),b.autoplay=!0,b.src=window.URL.createObjectURL(d),this._video=b,b.onloadedmetadata=function(a){console.log(a)})};t.prototype.onExecute=function(){null!=this._webcam_stream||this._waiting_confirmation||this.openStream();this._video&&this._video.videoWidth&&(this._video.width=this._video.videoWidth,this._video.height=this._video.videoHeight, -this.setOutputData(0,this._video))};t.prototype.getExtraMenuOptions=function(d){var b=this;return[{content:b.properties.show?"Hide Frame":"Show Frame",callback:function(){b.properties.show=!b.properties.show}}]};t.prototype.onDrawBackground=function(d){this.flags.collapsed||20>=this.size[1]||!this.properties.show||!this._video||(d.save(),d.drawImage(this._video,0,0,this.size[0],this.size[1]),d.restore())};k.registerNodeType("graphics/webcam",t)})(this); -(function(u){var h=u.LiteGraph;u.LGraphTexture=null;if("undefined"!=typeof GL){var f=function(){this.addOutput("Texture","Texture");this.properties={name:"",filter:!0};this.size=[f.image_preview_size,f.image_preview_size]};u.LGraphTexture=f;f.title="Texture";f.desc="Texture";f.widgets_info={name:{widget:"texture"},filter:{widget:"checkbox"}};f.loadTextureCallback=null;f.image_preview_size=256;f.PASS_THROUGH=1;f.COPY=2;f.LOW=3;f.HIGH=4;f.REUSE=5;f.DEFAULT=2;f.MODE_VALUES={"pass through":f.PASS_THROUGH, -copy:f.COPY,low:f.LOW,high:f.HIGH,reuse:f.REUSE,"default":f.DEFAULT};f.getTexturesContainer=function(){return gl.textures};f.loadTexture=function(a,b){b=b||{};var c=a;"http://"==c.substr(0,7)&&h.proxy&&(c=h.proxy+c.substr(7));return f.getTexturesContainer()[a]=GL.Texture.fromURL(c,b)};f.getTexture=function(a){var b=this.getTexturesContainer();if(!b)throw"Cannot load texture, container of textures not found";b=b[a];return!b&&a&&":"!=a[0]?this.loadTexture(a):b};f.getTargetTexture=function(a,b,c){if(!a)throw"LGraphTexture.getTargetTexture expects a reference texture"; -var d=null;switch(c){case f.LOW:d=gl.UNSIGNED_BYTE;break;case f.HIGH:d=gl.HIGH_PRECISION_FORMAT;break;case f.REUSE:return a;default:d=a?a.type:gl.UNSIGNED_BYTE}b&&b.width==a.width&&b.height==a.height&&b.type==d||(b=new GL.Texture(a.width,a.height,{type:d,format:gl.RGBA,filter:gl.LINEAR}));return b};f.getTextureType=function(a,b){var c=b?b.type:gl.UNSIGNED_BYTE;switch(a){case f.HIGH:c=gl.HIGH_PRECISION_FORMAT;break;case f.LOW:c=gl.UNSIGNED_BYTE}return c};f.getNoiseTexture=function(){if(this._noise_texture)return this._noise_texture; -for(var a=new Uint8Array(1048576),b=0;1048576>b;++b)a[b]=255*Math.random();return this._noise_texture=a=GL.Texture.fromMemory(512,512,a,{format:gl.RGBA,wrap:gl.REPEAT,filter:gl.NEAREST})};f.prototype.onDropFile=function(a,b,c){if(a){var d=null;"string"==typeof a?d=GL.Texture.fromURL(a):-1!=b.toLowerCase().indexOf(".dds")?d=GL.Texture.fromDDSInMemory(a):(a=new Blob([c]),a=URL.createObjectURL(a),d=GL.Texture.fromURL(a));this._drop_texture=d;this.properties.name=b}else this._drop_texture=null,this.properties.name= -""};f.prototype.getExtraMenuOptions=function(a){var b=this;if(this._drop_texture)return[{content:"Clear",callback:function(){b._drop_texture=null;b.properties.name=""}}]};f.prototype.onExecute=function(){var a=null;this.isOutputConnected(1)&&(a=this.getInputData(0));!a&&this._drop_texture&&(a=this._drop_texture);!a&&this.properties.name&&(a=f.getTexture(this.properties.name));if(a){this._last_tex=a;!1===this.properties.filter?a.setParameter(gl.TEXTURE_MAG_FILTER,gl.NEAREST):a.setParameter(gl.TEXTURE_MAG_FILTER, -gl.LINEAR);this.setOutputData(0,a);for(var b=1;b=this.size[1]))if(this._drop_texture&&a.webgl)a.drawImage(this._drop_texture,0,0,this.size[0],this.size[1]); -else{if(this._last_preview_tex!=this._last_tex)if(a.webgl)this._canvas=this._last_tex;else{var b=f.generateLowResTexturePreview(this._last_tex);if(!b)return;this._last_preview_tex=this._last_tex;this._canvas=cloneCanvas(b)}this._canvas&&(a.save(),a.webgl||(a.translate(0,this.size[1]),a.scale(1,-1)),a.drawImage(this._canvas,0,0,this.size[0],this.size[1]),a.restore())}};f.generateLowResTexturePreview=function(a){if(!a)return null;var b=f.image_preview_size,c=a;if(a.format==gl.DEPTH_COMPONENT)return null; -if(a.width>b||a.height>b)c=this._preview_temp_tex,this._preview_temp_tex||(this._preview_temp_tex=c=new GL.Texture(b,b,{minFilter:gl.NEAREST})),a.copyTo(c);a=this._preview_canvas;a||(this._preview_canvas=a=createCanvas(b,b));c&&c.toCanvas(a);return a};f.prototype.getResources=function(a){a[this.properties.name]=GL.Texture;return a};f.prototype.onGetInputs=function(){return[["in","Texture"]]};f.prototype.onGetOutputs=function(){return[["width","number"],["height","number"],["aspect","number"]]};h.registerNodeType("texture/texture", -f);var p=function(){this.addInput("Texture","Texture");this.properties={flipY:!1};this.size=[f.image_preview_size,f.image_preview_size]};p.title="Preview";p.desc="Show a texture in the graph canvas";p.allow_preview=!1;p.prototype.onDrawBackground=function(a){if(!this.flags.collapsed&&(a.webgl||p.allow_preview)){var b=this.getInputData(0);if(b){var c=null,c=!b.handle&&a.webgl?b:f.generateLowResTexturePreview(b);a.save();this.properties.flipY&&(a.translate(0,this.size[1]),a.scale(1,-1));a.drawImage(c, -0,0,this.size[0],this.size[1]);a.restore()}}};h.registerNodeType("texture/preview",p);var d=function(){this.addInput("Texture","Texture");this.addOutput("","Texture");this.properties={name:""}};d.title="Save";d.desc="Save a texture in the repository";d.prototype.onExecute=function(){var a=this.getInputData(0);a&&(this.properties.name&&(f.storeTexture?f.storeTexture(this.properties.name,a):f.getTexturesContainer()[this.properties.name]=a),this.setOutputData(0,a))};h.registerNodeType("texture/save", -d);var q=function(){this.addInput("Texture","Texture");this.addInput("TextureB","Texture");this.addInput("value","number");this.addOutput("Texture","Texture");this.help="

pixelcode must be vec3

\t\t\t

uvcode must be vec2, is optional

\t\t\t

uv: tex. coords

color: texture

colorB: textureB

time: scene time

value: input value

";this.properties={value:1,uvcode:"",pixelcode:"color + colorB * value", -precision:f.DEFAULT}};q.widgets_info={uvcode:{widget:"textarea",height:100},pixelcode:{widget:"textarea",height:100},precision:{widget:"combo",values:f.MODE_VALUES}};q.title="Operation";q.desc="Texture shader operation";q.prototype.getExtraMenuOptions=function(a){var b=this;return[{content:b.properties.show?"Hide Texture":"Show Texture",callback:function(){b.properties.show=!b.properties.show}}]};q.prototype.onDrawBackground=function(a){this.flags.collapsed||20>=this.size[1]||!this.properties.show|| -!this._tex||this._tex.gl!=a||(a.save(),a.drawImage(this._tex,0,0,this.size[0],this.size[1]),a.restore())};q.prototype.onExecute=function(){var a=this.getInputData(0);if(this.isOutputConnected(0))if(this.properties.precision===f.PASS_THROUGH)this.setOutputData(0,a);else{var b=this.getInputData(1);if(this.properties.uvcode||this.properties.pixelcode){var c=512,d=512;a?(c=a.width,d=a.height):b&&(c=b.width,d=b.height);var e=f.getTextureType(this.properties.precision,a);this._tex=a||this._tex?f.getTargetTexture(a|| -this._tex,this._tex,this.properties.precision):new GL.Texture(c,d,{type:e,format:gl.RGBA,filter:gl.LINEAR});e="";this.properties.uvcode&&(e="uv = "+this.properties.uvcode,-1!=this.properties.uvcode.indexOf(";")&&(e=this.properties.uvcode));var l="";this.properties.pixelcode&&(l="result = "+this.properties.pixelcode,-1!=this.properties.pixelcode.indexOf(";")&&(l=this.properties.pixelcode));var g=this._shader;if(!g||this._shader_code!=e+"|"+l){try{this._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER, -q.pixel_shader,{UV_CODE:e,PIXEL_CODE:l}),this.boxcolor="#00FF00"}catch(h){console.log("Error compiling shader: ",h);this.boxcolor="#FF0000";return}this.boxcolor="#FF0000";this._shader_code=e+"|"+l;g=this._shader}if(g){this.boxcolor="green";var k=this.getInputData(2);null!=k?this.properties.value=k:k=parseFloat(this.properties.value);var m=this.graph.getTime();this._tex.drawTo(function(){gl.disable(gl.DEPTH_TEST);gl.disable(gl.CULL_FACE);gl.disable(gl.BLEND);a&&a.bind(0);b&&b.bind(1);var e=Mesh.getScreenQuad(); -g.uniforms({u_texture:0,u_textureB:1,value:k,texSize:[c,d],time:m}).draw(e)});this.setOutputData(0,this._tex)}else this.boxcolor="red"}}};q.pixel_shader="precision highp float;\n\t\t\t\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform sampler2D u_textureB;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform vec2 texSize;\n\t\t\tuniform float time;\n\t\t\tuniform float value;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec2 uv = v_coord;\n\t\t\t\tUV_CODE;\n\t\t\t\tvec4 color4 = texture2D(u_texture, uv);\n\t\t\t\tvec3 color = color4.rgb;\n\t\t\t\tvec4 color4B = texture2D(u_textureB, uv);\n\t\t\t\tvec3 colorB = color4B.rgb;\n\t\t\t\tvec3 result = color;\n\t\t\t\tfloat alpha = 1.0;\n\t\t\t\tPIXEL_CODE;\n\t\t\t\tgl_FragColor = vec4(result, alpha);\n\t\t\t}\n\t\t\t"; -h.registerNodeType("texture/operation",q);var s=function(){this.addOutput("out","Texture");this.properties={code:"",width:512,height:512,precision:f.DEFAULT};this.properties.code="\nvoid main() {\n vec2 uv = v_coord;\n vec3 color = vec3(0.0);\n//your code here\n\ngl_FragColor = vec4(color, 1.0);\n}\n";this._uniforms={in_texture:0,texSize:vec2.create(),time:0}};s.title="Shader";s.desc="Texture shader";s.widgets_info={code:{type:"code"},precision:{widget:"combo",values:f.MODE_VALUES}};s.prototype.onPropertyChanged= -function(a,b){if("code"==a){var c=this.getShader();if(c){var d=c.uniformInfo;if(this.inputs)for(var e={},f=0;f lumaMax))\n\t\t\t\t\tcolor = vec4(rgbA, 1.0);\n\t\t\t\telse\n\t\t\t\t\tcolor = vec4(rgbB, 1.0);\n\t\t\t\tif(u_igamma != 1.0)\n\t\t\t\t\tcolor.xyz = pow( color.xyz, vec3(u_igamma) );\n\t\t\t\treturn color;\n\t\t\t}\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t gl_FragColor = applyFXAA( u_texture, v_coord * uViewportSize) ;\n\t\t\t}\n\t\t\t"; -k.gamma_pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform float u_igamma;\n\t\t\tvoid main() {\n\t\t\t\tvec4 color = texture2D( u_texture, v_coord);\n\t\t\t\tcolor.xyz = pow(color.xyz, vec3(u_igamma) );\n\t\t\t gl_FragColor = color;\n\t\t\t}\n\t\t\t";h.registerNodeType("texture/toviewport",k);d=function(){this.addInput("Texture","Texture");this.addOutput("","Texture");this.properties={size:0,generate_mipmaps:!1, -precision:f.DEFAULT}};d.title="Copy";d.desc="Copy Texture";d.widgets_info={size:{widget:"combo",values:[0,32,64,128,256,512,1024,2048]},precision:{widget:"combo",values:f.MODE_VALUES}};d.prototype.onExecute=function(){var a=this.getInputData(0);if((a||this._temp_texture)&&this.isOutputConnected(0)){if(a){var b=a.width,c=a.height;0!=this.properties.size&&(c=b=this.properties.size);var d=this._temp_texture,e=a.type;this.properties.precision===f.LOW?e=gl.UNSIGNED_BYTE:this.properties.precision===f.HIGH&& -(e=gl.HIGH_PRECISION_FORMAT);d&&d.width==b&&d.height==c&&d.type==e||(d=gl.LINEAR,this.properties.generate_mipmaps&&isPowerOfTwo(b)&&isPowerOfTwo(c)&&(d=gl.LINEAR_MIPMAP_LINEAR),this._temp_texture=new GL.Texture(b,c,{type:e,format:gl.RGBA,minFilter:d,magFilter:gl.LINEAR}));a.copyTo(this._temp_texture);this.properties.generate_mipmaps&&(this._temp_texture.bind(0),gl.generateMipmap(this._temp_texture.texture_type),this._temp_texture.unbind(0))}this.setOutputData(0,this._temp_texture)}};h.registerNodeType("texture/copy", -d);var m=function(){this.addInput("Texture","Texture");this.addOutput("","Texture");this.properties={iterations:1,generate_mipmaps:!1,precision:f.DEFAULT}};m.title="Downsample";m.desc="Downsample Texture";m.widgets_info={iterations:{type:"number",step:1,precision:0,min:1},precision:{widget:"combo",values:f.MODE_VALUES}};m.prototype.onExecute=function(){var a=this.getInputData(0);if((a||this._temp_texture)&&this.isOutputConnected(0)&&a&&a.texture_type===GL.TEXTURE_2D){var b=m._shader;b||(m._shader= -b=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,m.pixel_shader));var c=a.width|0,d=a.height|0,e=a.type;this.properties.precision===f.LOW?e=gl.UNSIGNED_BYTE:this.properties.precision===f.HIGH&&(e=gl.HIGH_PRECISION_FORMAT);var l=this.properties.iterations||1,g=a,h=null,k=[],a={type:e,format:a.format},e=vec2.create(),r={u_offset:e};this._texture&&GL.Texture.releaseTemporary(this._texture);for(var n=0;n>1||0;d=d>>1||0;h=GL.Texture.getTemporary(c,d,a);k.push(h);g.setParameter(GL.TEXTURE_MAG_FILTER, -GL.NEAREST);g.copyTo(h,b,r);if(1==c&&1==d)break;g=h}this._texture=k.pop();for(n=0;nd;++d)c[d]=Math.random();b._shader.uniforms({u_samples_a:c.subarray(0,16),u_samples_b:c.subarray(16,32)})}d=this._temp_texture;c=gl.UNSIGNED_BYTE;a.type!=c&&(c=gl.FLOAT);d&&d.type==c||(this._temp_texture=new GL.Texture(1,1,{type:c,format:gl.RGBA,filter:gl.NEAREST})); -var e=b._shader,l=this._uniforms;l.u_mipmap_offset=this.properties.mipmap_offset;this._temp_texture.drawTo(function(){a.toViewport(e,l)});this.setOutputData(0,this._temp_texture);if(this.isOutputConnected(1)||this.isOutputConnected(2))if(d=this._temp_texture.getPixels()){var f=this._luminance,c=this._temp_texture.type;f.set(d);c==gl.UNSIGNED_BYTE?vec4.scale(f,f,1/255):c!=GL.HALF_FLOAT&&c!=GL.HALF_FLOAT_OES||vec4.scale(f,f,1/65025);this.setOutputData(1,f);this.setOutputData(2,(f[0]+f[1]+f[2])/3)}}}; -b.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tuniform mat4 u_samples_a;\n\t\t\tuniform mat4 u_samples_b;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform float u_mipmap_offset;\n\t\t\tvarying vec2 v_coord;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec4 color = vec4(0.0);\n\t\t\t\tfor(int i = 0; i < 4; ++i)\n\t\t\t\t\tfor(int j = 0; j < 4; ++j)\n\t\t\t\t\t{\n\t\t\t\t\t\tcolor += texture2D(u_texture, vec2( u_samples_a[i][j], u_samples_b[i][j] ), u_mipmap_offset );\n\t\t\t\t\t\tcolor += texture2D(u_texture, vec2( 1.0 - u_samples_a[i][j], 1.0 - u_samples_b[i][j] ), u_mipmap_offset );\n\t\t\t\t\t}\n\t\t\t gl_FragColor = color * 0.03125;\n\t\t\t}\n\t\t\t"; -h.registerNodeType("texture/average",b);d=function(){this.addInput("Image","image");this.addOutput("","Texture");this.properties={}};d.title="Image to Texture";d.desc="Uploads an image to the GPU";d.prototype.onExecute=function(){var a=this.getInputData(0);if(a){var b=a.videoWidth||a.width,c=a.videoHeight||a.height;if(a.gltexture)this.setOutputData(0,a.gltexture);else{var d=this._temp_texture;d&&d.width==b&&d.height==c||(this._temp_texture=new GL.Texture(b,c,{format:gl.RGBA,filter:gl.LINEAR}));try{this._temp_texture.uploadImage(a)}catch(e){console.error("image comes from an unsafe location, cannot be uploaded to webgl: "+ -e);return}this.setOutputData(0,this._temp_texture)}}};h.registerNodeType("texture/imageToTexture",d);var a=function(){this.addInput("Texture","Texture");this.addInput("LUT","Texture");this.addInput("Intensity","number");this.addOutput("","Texture");this.properties={intensity:1,precision:f.DEFAULT,texture:null};a._shader||(a._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,a.pixel_shader))};a.widgets_info={texture:{widget:"texture"},precision:{widget:"combo",values:f.MODE_VALUES}};a.title="LUT";a.desc= -"Apply LUT to Texture";a.prototype.onExecute=function(){if(this.isOutputConnected(0)){var b=this.getInputData(0);if(this.properties.precision===f.PASS_THROUGH)this.setOutputData(0,b);else if(b){var c=this.getInputData(1);c||(c=f.getTexture(this.properties.texture));if(c){c.bind(0);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.bindTexture(gl.TEXTURE_2D, -null);var d=this.properties.intensity;this.isInputConnected(2)&&(this.properties.intensity=d=this.getInputData(2));this._tex=f.getTargetTexture(b,this._tex,this.properties.precision);this._tex.drawTo(function(){c.bind(1);b.toViewport(a._shader,{u_texture:0,u_textureB:1,u_amount:d})});this.setOutputData(0,this._tex)}else this.setOutputData(0,b)}}};a.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform sampler2D u_textureB;\n\t\t\tuniform float u_amount;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\t lowp vec4 textureColor = clamp( texture2D(u_texture, v_coord), vec4(0.0), vec4(1.0) );\n\t\t\t\t mediump float blueColor = textureColor.b * 63.0;\n\t\t\t\t mediump vec2 quad1;\n\t\t\t\t quad1.y = floor(floor(blueColor) / 8.0);\n\t\t\t\t quad1.x = floor(blueColor) - (quad1.y * 8.0);\n\t\t\t\t mediump vec2 quad2;\n\t\t\t\t quad2.y = floor(ceil(blueColor) / 8.0);\n\t\t\t\t quad2.x = ceil(blueColor) - (quad2.y * 8.0);\n\t\t\t\t highp vec2 texPos1;\n\t\t\t\t texPos1.x = (quad1.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);\n\t\t\t\t texPos1.y = 1.0 - ((quad1.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g));\n\t\t\t\t highp vec2 texPos2;\n\t\t\t\t texPos2.x = (quad2.x * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.r);\n\t\t\t\t texPos2.y = 1.0 - ((quad2.y * 0.125) + 0.5/512.0 + ((0.125 - 1.0/512.0) * textureColor.g));\n\t\t\t\t lowp vec4 newColor1 = texture2D(u_textureB, texPos1);\n\t\t\t\t lowp vec4 newColor2 = texture2D(u_textureB, texPos2);\n\t\t\t\t lowp vec4 newColor = mix(newColor1, newColor2, fract(blueColor));\n\t\t\t\t gl_FragColor = vec4( mix( textureColor.rgb, newColor.rgb, u_amount), textureColor.w);\n\t\t\t}\n\t\t\t"; -h.registerNodeType("texture/LUT",a);var c=function(){this.addInput("Texture","Texture");this.addOutput("R","Texture");this.addOutput("G","Texture");this.addOutput("B","Texture");this.addOutput("A","Texture");this.properties={};c._shader||(c._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,c.pixel_shader))};c.title="Texture to Channels";c.desc="Split texture channels";c.prototype.onExecute=function(){var a=this.getInputData(0);if(a){this._channels||(this._channels=Array(4));for(var b=0,d=0;4>d;d++)this.isOutputConnected(d)? -(this._channels[d]&&this._channels[d].width==a.width&&this._channels[d].height==a.height&&this._channels[d].type==a.type||(this._channels[d]=new GL.Texture(a.width,a.height,{type:a.type,format:gl.RGBA,filter:gl.LINEAR})),b++):this._channels[d]=null;if(b){gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);for(var e=Mesh.getScreenQuad(),l=c._shader,f=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],d=0;4>d;d++)this._channels[d]&&(this._channels[d].drawTo(function(){a.bind(0);l.uniforms({u_texture:0,u_mask:f[d]}).draw(e)}), -this.setOutputData(d,this._channels[d]))}}};c.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform vec4 u_mask;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t gl_FragColor = vec4( vec3( length( texture2D(u_texture, v_coord) * u_mask )), 1.0 );\n\t\t\t}\n\t\t\t";h.registerNodeType("texture/textureChannels",c);var g=function(){this.addInput("R","Texture");this.addInput("G","Texture");this.addInput("B","Texture");this.addInput("A", -"Texture");this.addOutput("Texture","Texture");this.properties={};g._shader||(g._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,g.pixel_shader))};g.title="Channels to Texture";g.desc="Split texture channels";g.prototype.onExecute=function(){var a=[this.getInputData(0),this.getInputData(1),this.getInputData(2),this.getInputData(3)];if(a[0]&&a[1]&&a[2]&&a[3]){gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var b=Mesh.getScreenQuad(),c=g._shader;this._tex=f.getTargetTexture(a[0],this._tex);this._tex.drawTo(function(){a[0].bind(0); -a[1].bind(1);a[2].bind(2);a[3].bind(3);c.uniforms({u_textureR:0,u_textureG:1,u_textureB:2,u_textureA:3}).draw(b)});this.setOutputData(0,this._tex)}};g.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_textureR;\n\t\t\tuniform sampler2D u_textureG;\n\t\t\tuniform sampler2D u_textureB;\n\t\t\tuniform sampler2D u_textureA;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t gl_FragColor = vec4( \t\t\t\t\t\ttexture2D(u_textureR, v_coord).r,\t\t\t\t\t\ttexture2D(u_textureG, v_coord).r,\t\t\t\t\t\ttexture2D(u_textureB, v_coord).r,\t\t\t\t\t\ttexture2D(u_textureA, v_coord).r);\n\t\t\t}\n\t\t\t"; -h.registerNodeType("texture/channelsTexture",g);var w=function(){this.addInput("A","color");this.addInput("B","color");this.addOutput("Texture","Texture");this.properties={angle:0,scale:1,A:[0,0,0],B:[1,1,1],texture_size:32};w._shader||(w._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,w.pixel_shader));this._uniforms={u_angle:0,u_colorA:vec3.create(),u_colorB:vec3.create()}};w.title="Gradient";w.desc="Generates a gradient";w["@A"]={type:"color"};w["@B"]={type:"color"};w["@texture_size"]={type:"enum", -values:[32,64,128,256,512]};w.prototype.onExecute=function(){gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var a=GL.Mesh.getScreenQuad(),b=w._shader,c=this.getInputData(0);c||(c=this.properties.A);var d=this.getInputData(1);d||(d=this.properties.B);for(var e=2;e 0.5 ? 1.0 : 0.0, diff.y > 0.5 ? 1.0 : 0.0, diff.z > 0.5 ? 1.0 : 0.0, center.a );\n\t\t\t}\n\t\t\t"; -h.registerNodeType("texture/edges",l);var r=function(){this.addInput("Texture","Texture");this.addInput("Distance","number");this.addInput("Range","number");this.addOutput("Texture","Texture");this.properties={distance:100,range:50,only_depth:!1,high_precision:!1};this._uniforms={u_texture:0,u_distance:100,u_range:50,u_camera_planes:null}};r.title="Depth Range";r.desc="Generates a texture with a depth range";r.prototype.onExecute=function(){if(this.isOutputConnected(0)){var a=this.getInputData(0); -if(a){var b=gl.UNSIGNED_BYTE;this.properties.high_precision&&(b=gl.half_float_ext?gl.HALF_FLOAT_OES:gl.FLOAT);this._temp_texture&&this._temp_texture.type==b&&this._temp_texture.width==a.width&&this._temp_texture.height==a.height||(this._temp_texture=new GL.Texture(a.width,a.height,{type:b,format:gl.RGBA,filter:gl.LINEAR}));var c=this._uniforms,b=this.properties.distance;this.isInputConnected(1)&&(b=this.getInputData(1),this.properties.distance=b);var d=this.properties.range;this.isInputConnected(2)&& -(d=this.getInputData(2),this.properties.range=d);c.u_distance=b;c.u_range=d;gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var e=Mesh.getScreenQuad();r._shader||(r._shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,r.pixel_shader),r._shader_onlydepth=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,r.pixel_shader,{ONLY_DEPTH:""}));var l=this.properties.only_depth?r._shader_onlydepth:r._shader,b=null,b=a.near_far_planes?a.near_far_planes:window.LS&&LS.Renderer._main_camera?LS.Renderer._main_camera._uniforms.u_camera_planes: -[0.1,1E3];c.u_camera_planes=b;this._temp_texture.drawTo(function(){a.bind(0);l.uniforms(c).draw(e)});this._temp_texture.near_far_planes=b;this.setOutputData(0,this._temp_texture)}}};r.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform vec2 u_camera_planes;\n\t\t\tuniform float u_distance;\n\t\t\tuniform float u_range;\n\t\t\t\n\t\t\tfloat LinearDepth()\n\t\t\t{\n\t\t\t\tfloat zNear = u_camera_planes.x;\n\t\t\t\tfloat zFar = u_camera_planes.y;\n\t\t\t\tfloat depth = texture2D(u_texture, v_coord).x;\n\t\t\t\tdepth = depth * 2.0 - 1.0;\n\t\t\t\treturn zNear * (depth + 1.0) / (zFar + zNear - depth * (zFar - zNear));\n\t\t\t}\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tfloat depth = LinearDepth();\n\t\t\t\t#ifdef ONLY_DEPTH\n\t\t\t\t gl_FragColor = vec4(depth);\n\t\t\t\t#else\n\t\t\t\t\tfloat diff = abs(depth * u_camera_planes.y - u_distance);\n\t\t\t\t\tfloat dof = 1.0;\n\t\t\t\t\tif(diff <= u_range)\n\t\t\t\t\t\tdof = diff / u_range;\n\t\t\t\t gl_FragColor = vec4(dof);\n\t\t\t\t#endif\n\t\t\t}\n\t\t\t"; -h.registerNodeType("texture/depth_range",r);var D=function(){this.addInput("Texture","Texture");this.addInput("Iterations","number");this.addInput("Intensity","number");this.addOutput("Blurred","Texture");this.properties={intensity:1,iterations:1,preserve_aspect:!1,scale:[1,1],precision:f.DEFAULT}};D.title="Blur";D.desc="Blur a texture";D.widgets_info={precision:{widget:"combo",values:f.MODE_VALUES}};D.max_iterations=20;D.prototype.onExecute=function(){var a=this.getInputData(0);if(a&&this.isOutputConnected(0)){var b= -this._final_texture;b&&b.width==a.width&&b.height==a.height&&b.type==a.type||(b=this._final_texture=new GL.Texture(a.width,a.height,{type:a.type,format:gl.RGBA,filter:gl.LINEAR}));var c=this.properties.iterations;this.isInputConnected(1)&&(c=this.getInputData(1),this.properties.iterations=c);c=Math.min(Math.floor(c),D.max_iterations);if(0==c)this.setOutputData(0,a);else{var d=this.properties.intensity;this.isInputConnected(2)&&(d=this.getInputData(2),this.properties.intensity=d);var e=h.camera_aspect; -e||void 0===window.gl||(e=gl.canvas.height/gl.canvas.width);e||(e=1);var e=this.properties.preserve_aspect?e:1,l=this.properties.scale||[1,1];a.applyBlur(e*l[0],l[1],d,b);for(a=1;a>=1;1<(c|0)&&(c>>=1);if(2>b)break;k=g[s]=GL.Texture.getTemporary(b,c,d);n[0]=1/m.width;n[1]=1/m.height;m.blit(k,h.uniforms(l));m=k}this.isOutputConnected(2)&&(b=this._average_texture,b&&b.type==a.type&&b.format==a.format||(b=this._average_texture=new GL.Texture(1,1,{type:a.type,format:a.format,filter:gl.LINEAR})),n[0]=1/m.width,n[1]=1/m.height,l.u_intensity= -q,l.u_delta=1,m.blit(b,h.uniforms(l)),this.setOutputData(2,b));gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE);l.u_intensity=this.getInputOrProperty("persistence");l.u_delta=0.5;for(s-=2;0<=s;s--)k=g[s],g[s]=null,n[0]=1/m.width,n[1]=1/m.height,m.blit(k,h.uniforms(l)),GL.Texture.releaseTemporary(m),m=k;gl.disable(gl.BLEND);this.isOutputConnected(1)&&(g=this._glow_texture,g&&g.width==a.width&&g.height==a.height&&g.type==e&&g.format==a.format||(g=this._glow_texture=new GL.Texture(a.width,a.height,{type:e, -format:a.format,filter:gl.LINEAR})),m.blit(g),this.setOutputData(1,g));if(this.isOutputConnected(0)){g=this._final_texture;g&&g.width==a.width&&g.height==a.height&&g.type==e&&g.format==a.format||(g=this._final_texture=new GL.Texture(a.width,a.height,{type:e,format:a.format,filter:gl.LINEAR}));var p=this.getInputData(1),v=this.getInputOrProperty("dirt_factor");l.u_intensity=q;h=p?y._dirt_final_shader:y._final_shader;h||(h=p?y._dirt_final_shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,y.final_pixel_shader, -{USE_DIRT:""}):y._final_shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,y.final_pixel_shader));g.drawTo(function(){a.bind(0);m.bind(1);p&&(h.setUniform("u_dirt_factor",v),h.setUniform("u_dirt_texture",p.bind(2)));h.toViewport(l)});this.setOutputData(0,g)}GL.Texture.releaseTemporary(m)}};y.cut_pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform float u_threshold;\n\t\tvoid main() {\n\t\t\tgl_FragColor = max( texture2D( u_texture, v_coord ) - vec4( u_threshold ), vec4(0.0) );\n\t\t}"; -y.scale_pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform vec2 u_texel_size;\n\t\tuniform float u_delta;\n\t\tuniform float u_intensity;\n\t\t\n\t\tvec4 sampleBox(vec2 uv) {\n\t\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\t\t\tvec4 s = texture2D( u_texture, uv + o.xy ) + texture2D( u_texture, uv + o.zy) + texture2D( u_texture, uv + o.xw) + texture2D( u_texture, uv + o.zw);\n\t\t\treturn s * 0.25;\n\t\t}\n\t\tvoid main() {\n\t\t\tgl_FragColor = u_intensity * sampleBox( v_coord );\n\t\t}"; -y.final_pixel_shader="precision highp float;\n\t\tvarying vec2 v_coord;\n\t\tuniform sampler2D u_texture;\n\t\tuniform sampler2D u_glow_texture;\n\t\t#ifdef USE_DIRT\n\t\t\tuniform sampler2D u_dirt_texture;\n\t\t#endif\n\t\tuniform vec2 u_texel_size;\n\t\tuniform float u_delta;\n\t\tuniform float u_intensity;\n\t\tuniform float u_dirt_factor;\n\t\t\n\t\tvec4 sampleBox(vec2 uv) {\n\t\t\tvec4 o = u_texel_size.xyxy * vec2(-u_delta, u_delta).xxyy;\n\t\t\tvec4 s = texture2D( u_glow_texture, uv + o.xy ) + texture2D( u_glow_texture, uv + o.zy) + texture2D( u_glow_texture, uv + o.xw) + texture2D( u_glow_texture, uv + o.zw);\n\t\t\treturn s * 0.25;\n\t\t}\n\t\tvoid main() {\n\t\t\tvec4 glow = sampleBox( v_coord );\n\t\t\t#ifdef USE_DIRT\n\t\t\t\tglow = mix( glow, glow * texture2D( u_dirt_texture, v_coord ), u_dirt_factor );\n\t\t\t#endif\n\t\t\tgl_FragColor = texture2D( u_texture, v_coord ) + u_intensity * glow;\n\t\t}"; -h.registerNodeType("texture/glow",y);var n=function(){this.addInput("Texture","Texture");this.addOutput("Filtered","Texture");this.properties={intensity:1,radius:5}};n.title="Kuwahara Filter";n.desc="Filters a texture giving an artistic oil canvas painting";n.max_radius=10;n._shaders=[];n.prototype.onExecute=function(){var a=this.getInputData(0);if(a&&this.isOutputConnected(0)){var b=this._temp_texture;b&&b.width==a.width&&b.height==a.height&&b.type==a.type||(this._temp_texture=new GL.Texture(a.width, -a.height,{type:a.type,format:gl.RGBA,filter:gl.LINEAR}));b=this.properties.radius;b=Math.min(Math.floor(b),n.max_radius);if(0==b)this.setOutputData(0,a);else{var c=this.properties.intensity,d=h.camera_aspect;d||void 0===window.gl||(d=gl.canvas.height/gl.canvas.width);d||(d=1);d=this.properties.preserve_aspect?d:1;n._shaders[b]||(n._shaders[b]=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,n.pixel_shader,{RADIUS:b.toFixed(0)}));var e=n._shaders[b],l=GL.Mesh.getScreenQuad();a.bind(0);this._temp_texture.drawTo(function(){e.uniforms({u_texture:0, -u_intensity:c,u_resolution:[a.width,a.height],u_iResolution:[1/a.width,1/a.height]}).draw(l)});this.setOutputData(0,this._temp_texture)}}};n.pixel_shader="\n\tprecision highp float;\n\tvarying vec2 v_coord;\n\tuniform sampler2D u_texture;\n\tuniform float u_intensity;\n\tuniform vec2 u_resolution;\n\tuniform vec2 u_iResolution;\n\t#ifndef RADIUS\n\t\t#define RADIUS 7\n\t#endif\n\tvoid main() {\n\t\n\t\tconst int radius = RADIUS;\n\t\tvec2 fragCoord = v_coord;\n\t\tvec2 src_size = u_iResolution;\n\t\tvec2 uv = v_coord;\n\t\tfloat n = float((radius + 1) * (radius + 1));\n\t\tint i;\n\t\tint j;\n\t\tvec3 m0 = vec3(0.0); vec3 m1 = vec3(0.0); vec3 m2 = vec3(0.0); vec3 m3 = vec3(0.0);\n\t\tvec3 s0 = vec3(0.0); vec3 s1 = vec3(0.0); vec3 s2 = vec3(0.0); vec3 s3 = vec3(0.0);\n\t\tvec3 c;\n\t\t\n\t\tfor (int j = -radius; j <= 0; ++j) {\n\t\t\tfor (int i = -radius; i <= 0; ++i) {\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\t\t\t\tm0 += c;\n\t\t\t\ts0 += c * c;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (int j = -radius; j <= 0; ++j) {\n\t\t\tfor (int i = 0; i <= radius; ++i) {\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\t\t\t\tm1 += c;\n\t\t\t\ts1 += c * c;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (int j = 0; j <= radius; ++j) {\n\t\t\tfor (int i = 0; i <= radius; ++i) {\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\t\t\t\tm2 += c;\n\t\t\t\ts2 += c * c;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfor (int j = 0; j <= radius; ++j) {\n\t\t\tfor (int i = -radius; i <= 0; ++i) {\n\t\t\t\tc = texture2D(u_texture, uv + vec2(i,j) * src_size).rgb;\n\t\t\t\tm3 += c;\n\t\t\t\ts3 += c * c;\n\t\t\t}\n\t\t}\n\t\t\n\t\tfloat min_sigma2 = 1e+2;\n\t\tm0 /= n;\n\t\ts0 = abs(s0 / n - m0 * m0);\n\t\t\n\t\tfloat sigma2 = s0.r + s0.g + s0.b;\n\t\tif (sigma2 < min_sigma2) {\n\t\t\tmin_sigma2 = sigma2;\n\t\t\tgl_FragColor = vec4(m0, 1.0);\n\t\t}\n\t\t\n\t\tm1 /= n;\n\t\ts1 = abs(s1 / n - m1 * m1);\n\t\t\n\t\tsigma2 = s1.r + s1.g + s1.b;\n\t\tif (sigma2 < min_sigma2) {\n\t\t\tmin_sigma2 = sigma2;\n\t\t\tgl_FragColor = vec4(m1, 1.0);\n\t\t}\n\t\t\n\t\tm2 /= n;\n\t\ts2 = abs(s2 / n - m2 * m2);\n\t\t\n\t\tsigma2 = s2.r + s2.g + s2.b;\n\t\tif (sigma2 < min_sigma2) {\n\t\t\tmin_sigma2 = sigma2;\n\t\t\tgl_FragColor = vec4(m2, 1.0);\n\t\t}\n\t\t\n\t\tm3 /= n;\n\t\ts3 = abs(s3 / n - m3 * m3);\n\t\t\n\t\tsigma2 = s3.r + s3.g + s3.b;\n\t\tif (sigma2 < min_sigma2) {\n\t\t\tmin_sigma2 = sigma2;\n\t\t\tgl_FragColor = vec4(m3, 1.0);\n\t\t}\n\t}\n\t"; -h.registerNodeType("texture/kuwahara",n);d=function(){this.addOutput("Webcam","Texture");this.properties={texture_name:""}};d.title="Webcam";d.desc="Webcam texture";d.prototype.openStream=function(){function a(c){console.log("Webcam rejected",c);b._webcam_stream=!1;b.box_color="red"}navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia;window.URL=window.URL||window.webkitURL;if(navigator.getUserMedia){this._waiting_confirmation= -!0;var b=this;navigator.getUserMedia({video:!0},this.streamReady.bind(this),a)}};d.prototype.streamReady=function(a){this._webcam_stream=a;var b=this._video;b||(b=document.createElement("video"),b.autoplay=!0,b.src=window.URL.createObjectURL(a),this._video=b,b.onloadedmetadata=function(a){console.log(a)})};d.prototype.onRemoved=function(){if(this._webcam_stream){var a=this._webcam_stream.getVideoTracks();a.length&&(a=a[0],a.stop&&a.stop());this._video=this._webcam_stream=null}};d.prototype.onDrawBackground= -function(a){this.flags.collapsed||20>=this.size[1]||!this._video||(a.save(),a.webgl?this._temp_texture&&a.drawImage(this._temp_texture,0,0,this.size[0],this.size[1]):(a.translate(0,this.size[1]),a.scale(1,-1),a.drawImage(this._video,0,0,this.size[0],this.size[1])),a.restore())};d.prototype.onExecute=function(){null!=this._webcam_stream||this._waiting_confirmation||this.openStream();if(this._video&&this._video.videoWidth){var a=this._video.videoWidth,b=this._video.videoHeight,c=this._temp_texture; -c&&c.width==a&&c.height==b||(this._temp_texture=new GL.Texture(a,b,{format:gl.RGB,filter:gl.LINEAR}));this._temp_texture.uploadImage(this._video);this.properties.texture_name&&(f.getTexturesContainer()[this.properties.texture_name]=this._temp_texture);this.setOutputData(0,this._temp_texture)}};h.registerNodeType("texture/webcam",d);var A=function(){this.addInput("in","Texture");this.addInput("f","number");this.addOutput("out","Texture");this.properties={enabled:!0,factor:1,precision:f.LOW};this._uniforms= -{u_texture:0,u_factor:1}};A.title="Lens FX";A.desc="distortion and chromatic aberration";A.widgets_info={precision:{widget:"combo",values:f.MODE_VALUES}};A.prototype.onGetInputs=function(){return[["enabled","boolean"]]};A.prototype.onExecute=function(){var a=this.getInputData(0);if(a&&this.isOutputConnected(0))if(this.properties.precision===f.PASS_THROUGH||!1===this.getInputOrProperty("enabled"))this.setOutputData(0,a);else{var b=this._temp_texture;b&&b.width==a.width&&b.height==a.height&&b.type== -a.type||(b=this._temp_texture=new GL.Texture(a.width,a.height,{type:a.type,format:gl.RGBA,filter:gl.LINEAR}));var c=A._shader;c||(c=A._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,A.pixel_shader));var d=this.getInputData(1);null==d&&(d=this.properties.factor);var e=this._uniforms;e.u_factor=d;gl.disable(gl.DEPTH_TEST);b.drawTo(function(){a.bind(0);c.uniforms(e).draw(GL.Mesh.getScreenQuad())});this.setOutputData(0,b)}};A.pixel_shader="precision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform float u_factor;\n\t\t\tvec2 barrelDistortion(vec2 coord, float amt) {\n\t\t\t\tvec2 cc = coord - 0.5;\n\t\t\t\tfloat dist = dot(cc, cc);\n\t\t\t\treturn coord + cc * dist * amt;\n\t\t\t}\n\t\t\t\n\t\t\tfloat sat( float t )\n\t\t\t{\n\t\t\t\treturn clamp( t, 0.0, 1.0 );\n\t\t\t}\n\t\t\t\n\t\t\tfloat linterp( float t ) {\n\t\t\t\treturn sat( 1.0 - abs( 2.0*t - 1.0 ) );\n\t\t\t}\n\t\t\t\n\t\t\tfloat remap( float t, float a, float b ) {\n\t\t\t\treturn sat( (t - a) / (b - a) );\n\t\t\t}\n\t\t\t\n\t\t\tvec4 spectrum_offset( float t ) {\n\t\t\t\tvec4 ret;\n\t\t\t\tfloat lo = step(t,0.5);\n\t\t\t\tfloat hi = 1.0-lo;\n\t\t\t\tfloat w = linterp( remap( t, 1.0/6.0, 5.0/6.0 ) );\n\t\t\t\tret = vec4(lo,1.0,hi, 1.) * vec4(1.0-w, w, 1.0-w, 1.);\n\t\t\t\n\t\t\t\treturn pow( ret, vec4(1.0/2.2) );\n\t\t\t}\n\t\t\t\n\t\t\tconst float max_distort = 2.2;\n\t\t\tconst int num_iter = 12;\n\t\t\tconst float reci_num_iter_f = 1.0 / float(num_iter);\n\t\t\t\n\t\t\tvoid main()\n\t\t\t{\t\n\t\t\t\tvec2 uv=v_coord;\n\t\t\t\tvec4 sumcol = vec4(0.0);\n\t\t\t\tvec4 sumw = vec4(0.0);\t\n\t\t\t\tfor ( int i=0; i=this.size[1]||a.webgl&&(gl.meshes.cube||(gl.meshes.cube=GL.Mesh.cube({size:1})))};h.registerNodeType("texture/cubemap",d)}})(this); -(function(u){var h=u.LiteGraph;if("undefined"!=typeof GL){var f=function(){this.addInput("Texture","Texture");this.addInput("Aberration","number");this.addInput("Distortion","number");this.addInput("Blur","number");this.addOutput("Texture","Texture");this.properties={aberration:1,distortion:1,blur:1,precision:LGraphTexture.DEFAULT};f._shader||(f._shader=new GL.Shader(GL.Shader.SCREEN_VERTEX_SHADER,f.pixel_shader),f._texture=new GL.Texture(3,1,{format:gl.RGB,wrap:gl.CLAMP_TO_EDGE,magFilter:gl.LINEAR, -minFilter:gl.LINEAR,pixel_data:[255,0,0,0,255,0,0,0,255]}))};f.title="Lens";f.desc="Camera Lens distortion";f.widgets_info={precision:{widget:"combo",values:LGraphTexture.MODE_VALUES}};f.prototype.onExecute=function(){var d=this.getInputData(0);if(this.properties.precision===LGraphTexture.PASS_THROUGH)this.setOutputData(0,d);else if(d){this._tex=LGraphTexture.getTargetTexture(d,this._tex,this.properties.precision);var h=this.properties.aberration;this.isInputConnected(1)&&(h=this.getInputData(1), -this.properties.aberration=h);var q=this.properties.distortion;this.isInputConnected(2)&&(q=this.getInputData(2),this.properties.distortion=q);var k=this.properties.blur;this.isInputConnected(3)&&(k=this.getInputData(3),this.properties.blur=k);gl.disable(gl.BLEND);gl.disable(gl.DEPTH_TEST);var m=Mesh.getScreenQuad(),b=f._shader;this._tex.drawTo(function(){d.bind(0);b.uniforms({u_texture:0,u_aberration:h,u_distortion:q,u_blur:k}).draw(m)});this.setOutputData(0,this._tex)}};f.pixel_shader="precision highp float;\n\t\t\tprecision highp float;\n\t\t\tvarying vec2 v_coord;\n\t\t\tuniform sampler2D u_texture;\n\t\t\tuniform vec2 u_camera_planes;\n\t\t\tuniform float u_aberration;\n\t\t\tuniform float u_distortion;\n\t\t\tuniform float u_blur;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec2 coord = v_coord;\n\t\t\t\tfloat dist = distance(vec2(0.5), coord);\n\t\t\t\tvec2 dist_coord = coord - vec2(0.5);\n\t\t\t\tfloat percent = 1.0 + ((0.5 - dist) / 0.5) * u_distortion;\n\t\t\t\tdist_coord *= percent;\n\t\t\t\tcoord = dist_coord + vec2(0.5);\n\t\t\t\tvec4 color = texture2D(u_texture,coord, u_blur * dist);\n\t\t\t\tcolor.r = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0+0.01*u_aberration), u_blur * dist ).r;\n\t\t\t\tcolor.b = texture2D(u_texture,vec2(0.5) + dist_coord * (1.0-0.01*u_aberration), u_blur * dist ).b;\n\t\t\t\tgl_FragColor = color;\n\t\t\t}\n\t\t\t"; -h.registerNodeType("fx/lens",f);u.LGraphFXLens=f;var p=function(){this.addInput("Texture","Texture");this.addInput("Blurred","Texture");this.addInput("Mask","Texture");this.addInput("Threshold","number");this.addOutput("Texture","Texture");this.properties={shape:"",size:10,alpha:1,threshold:1,high_precision:!1}};p.title="Bokeh";p.desc="applies an Bokeh effect";p.widgets_info={shape:{widget:"texture"}};p.prototype.onExecute=function(){var d=this.getInputData(0),f=this.getInputData(1),h=this.getInputData(2); -if(d&&h&&this.properties.shape){f||(f=d);var k=LGraphTexture.getTexture(this.properties.shape);if(k){var m=this.properties.threshold;this.isInputConnected(3)&&(m=this.getInputData(3),this.properties.threshold=m);var b=gl.UNSIGNED_BYTE;this.properties.high_precision&&(b=gl.half_float_ext?gl.HALF_FLOAT_OES:gl.FLOAT);this._temp_texture&&this._temp_texture.type==b&&this._temp_texture.width==d.width&&this._temp_texture.height==d.height||(this._temp_texture=new GL.Texture(d.width,d.height,{type:b,format:gl.RGBA, -filter:gl.LINEAR}));var a=p._first_shader;a||(a=p._first_shader=new GL.Shader(Shader.SCREEN_VERTEX_SHADER,p._first_pixel_shader));var c=p._second_shader;c||(c=p._second_shader=new GL.Shader(p._second_vertex_shader,p._second_pixel_shader));var g=this._points_mesh;g&&g._width==d.width&&g._height==d.height&&2==g._spacing||(g=this.createPointsMesh(d.width,d.height,2));var q=Mesh.getScreenQuad(),e=this.properties.size,l=this.properties.alpha;gl.disable(gl.DEPTH_TEST);gl.disable(gl.BLEND);this._temp_texture.drawTo(function(){d.bind(0); -f.bind(1);h.bind(2);a.uniforms({u_texture:0,u_texture_blur:1,u_mask:2,u_texsize:[d.width,d.height]}).draw(q)});this._temp_texture.drawTo(function(){gl.enable(gl.BLEND);gl.blendFunc(gl.ONE,gl.ONE);d.bind(0);k.bind(3);c.uniforms({u_texture:0,u_mask:2,u_shape:3,u_alpha:l,u_threshold:m,u_pointSize:e,u_itexsize:[1/d.width,1/d.height]}).draw(g,gl.POINTS)});this.setOutputData(0,this._temp_texture)}}else this.setOutputData(0,d)};p.prototype.createPointsMesh=function(d,f,h){for(var k=Math.round(d/h),m=Math.round(f/ -h),b=new Float32Array(k*m*2),a=-1,c=2/d*h,g=2/f*h,q=0;q=h.NOTEON||b<=h.NOTEOFF)this.channel=d&15};Object.defineProperty(h.prototype,"velocity",{get:function(){return this.cmd==h.NOTEON?this.data[2]: --1},set:function(d){this.data[2]=d},enumerable:!0});h.notes="A A# B C C# D D# E F F# G G#".split(" ");h.prototype.getPitch=function(){return 440*Math.pow(2,(this.data[1]-69)/12)};h.computePitch=function(d){return 440*Math.pow(2,(d-69)/12)};h.prototype.getCC=function(){return this.data[1]};h.prototype.getCCValue=function(){return this.data[2]};h.prototype.getPitchBend=function(){return this.data[1]+(this.data[2]<<7)-8192};h.computePitchBend=function(d,b){return d+(b<<7)-8192};h.prototype.setCommandFromString= -function(d){this.cmd=h.computeCommandFromString(d)};h.computeCommandFromString=function(d){if(!d)return 0;if(d&&d.constructor===Number)return d;d=d.toUpperCase();switch(d){case "NOTE ON":case "NOTEON":return h.NOTEON;case "NOTE OFF":case "NOTEOFF":return h.NOTEON;case "KEY PRESSURE":case "KEYPRESSURE":return h.KEYPRESSURE;case "CONTROLLER CHANGE":case "CONTROLLERCHANGE":case "CC":return h.CONTROLLERCHANGE;case "PROGRAM CHANGE":case "PROGRAMCHANGE":case "PC":return h.PROGRAMCHANGE;case "CHANNEL PRESSURE":case "CHANNELPRESSURE":return h.CHANNELPRESSURE; -case "PITCH BEND":case "PITCHBEND":return h.PITCHBEND;case "TIME TICK":case "TIMETICK":return h.TIMETICK;default:return Number(d)}};h.toNoteString=function(d){var b;b=(d-21)%12;0>b&&(b=12+b);return h.notes[b]+Math.floor((d-24)/12+1)};h.prototype.toString=function(){var d=""+this.channel+". ";switch(this.cmd){case h.NOTEON:d+="NOTEON "+h.toNoteString(this.data[1]);break;case h.NOTEOFF:d+="NOTEOFF "+h.toNoteString(this.data[1]);break;case h.CONTROLLERCHANGE:d+="CC "+this.data[1]+" "+this.data[2];break; -case h.PROGRAMCHANGE:d+="PC "+this.data[1];break;case h.PITCHBEND:d+="PITCHBEND "+this.getPitchBend();break;case h.KEYPRESSURE:d+="KEYPRESS "+this.data[1]}return d};h.prototype.toHexString=function(){for(var d="",b=0;bthis.properties.max_value||this.trigger("on_midi",b)};k.registerNodeType("midi/filter",s);v.title="MIDIEvent";v.desc="Create a MIDI Event";v.prototype.onAction=function(d,b){"assign"==d?(this.properties.channel=b.channel,this.properties.cmd=b.cmd,this.properties.value1= -b.data[1],this.properties.value2=b.data[2]):(b=new h,b.channel=this.properties.channel,this.properties.cmd&&this.properties.cmd.constructor===String?b.setCommandFromString(this.properties.cmd):b.cmd=this.properties.cmd,b.data[0]=b.cmd|b.channel,b.data[1]=Number(this.properties.value1),b.data[2]=Number(this.properties.value2),this.trigger("on_midi",b))};v.prototype.onExecute=function(){var d=this.properties;if(this.outputs)for(var b=0;b=this.size[0]&&(f=this.size[0]-1),a.strokeStyle="red",a.beginPath(),a.moveTo(f,d),a.lineTo(f,0),a.stroke())}};b.title="Visualization";b.desc="Audio Visualization";w.registerNodeType("audio/visualization", -b);a.prototype.onExecute=function(){if(this._freqs=this.getInputData(0)){var a=this.properties.band,b=this.getInputData(1);void 0!==b&&(a=b);b=e.getAudioContext().sampleRate/this._freqs.length;b=a/b*2;b>=this._freqs.length?b=this._freqs[this._freqs.length-1]:(a=b|0,b-=a,b=this._freqs[a]*(1-b)+this._freqs[a+1]*b);this.setOutputData(0,b/255*this.properties.amplitude)}};a.prototype.onGetInputs=function(){return[["band","number"]]};a.title="Signal";a.desc="extract the signal of some frequency";w.registerNodeType("audio/signal", -a);c.prototype.onAdded=function(a){a.status==LGraph.STATUS_RUNNING&&(this.audionode.onaudioprocess=this._callback)};c["@code"]={widget:"code"};c.prototype.onStart=function(){this.audionode.onaudioprocess=this._callback};c.prototype.onStop=function(){this.audionode.onaudioprocess=c._bypass_function};c.prototype.onPause=function(){this.audionode.onaudioprocess=c._bypass_function};c.prototype.onUnpause=function(){this.audionode.onaudioprocess=this._callback};c.prototype.onExecute=function(){};c.prototype.onRemoved= -function(){this.audionode.onaudioprocess=c._bypass_function};c.prototype.processCode=function(){try{this._script=new new Function("properties",this.properties.code)(this.properties),this._old_code=this.properties.code,this._callback=this._script.onaudioprocess}catch(a){console.error("Error in onaudioprocess code",a),this._callback=c._bypass_function,this.audionode.onaudioprocess=this._callback}};c.prototype.onPropertyChanged=function(a,b){"code"==a&&(this.properties.code=b,this.processCode(),this.graph&& -this.graph.status==LGraph.STATUS_RUNNING&&(this.audionode.onaudioprocess=this._callback))};c.default_function=function(){this.onaudioprocess=function(a){var b=a.inputBuffer;a=a.outputBuffer;for(var c=0;c Date: Tue, 20 Nov 2018 18:05:03 +0100 Subject: [PATCH 2/3] Add files via upload --- imgs/inventivetalent.mp4 | Bin 0 -> 675372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 imgs/inventivetalent.mp4 diff --git a/imgs/inventivetalent.mp4 b/imgs/inventivetalent.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..730d4c25ec4467ce321e466a0cac63d83526bef5 GIT binary patch literal 675372 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

P#R*$V01!%wK-S1Nq0poR1tH8)@k+Vh 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�Nwpawxn01f>9{VqUmm0M8M_jm@&fsIxRPVm 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 z _SiA>YM`O8iOtPI3xOPCFZNfd)U_v9HCWhkJOr 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%0A)fZB%|L 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 z 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

cLkZE#RIiD0#{zKw8W+=1BVE2BfckER& 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 QQKmX4aF6ioz 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 z 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

P#R*$V01!%wK-S1Nq0poR1tH8)@k+Vh zRA2Z)%2Yv%`o2iil{M^neKL`_&&kc`)!(p-B5Fxwr`b&sioE6-ud0|lnbz0a*tUlH zgTgXSf-&s*&S1(82HHnOO|=TU)?{DS{ykz=$B*0j_2=2Y9f*0j@t9^_0-!7|Kku(l zFCpdhe7CjE6y}C$f}8;bNELd;%q3})P0tZ~iFfocb;%?P&)Wh!|u%wI{QMV9%Vsm;3y z(w+oC?#J%Aa;u_`Zx~~58ybw4?4fzLMS^7WB0EE7i8`J@jU1rSU<2gCE;8rldNruw zvUjMWjP}?|;-6!Ea4Si-+id5ilZ8aDzO3L?kP)>)lL*mq*E}eXO%e^_PCAhUr=1#V zdAz>EpSly~Do=2xwMUsukXblY<*zT%zpvR!?}u67W`8;I_oCOre9&kjtc0SqNyV$l zW(e#%>s$|=yL_^rU;7U4SO344jfJ@Ps z;IUN{DGS|L0r})52pyfdHRplYzMnB`ry!Kw6=peM7IVY+xsy>Kr(V-*#{g~oWo942 zEOI7jqu5NxXQn4nrh}ZWjU?P!tN9v+M#nN3wTYF`-D;{t~^?B3eo~?+Gi`r zfGpD?sL!T#9K!oS5S5r8(j=r9IbGsE)%H`=KzNLPd9+VT#$2McPvkB++`(t zCsORdy1PZh*8@k7yOfYy6EW9^QMo>9Gp&tpkp$zCd0$CPl+nsOd*6f4@H_9G#!kWw zx73z>PKrr`0P>>7k)c|_=MMrlw}VEG6rfdhsvV*-v8|2a^BT!iBLb45{1E!ncyd+_ zzlig}Bs&bIqztS)<@xZBIwO8aTDc29Q8o@#a`j#rbX1$a{4aU;yP2QuZyFT8WZ%Ct zgp;Z_BknH4LV$Uq`Ave~_uxan%{JG94q`>LOaKYvKLwQE$Z?C5)s4iTp40 zWCnwPP5UXj(sdJ|8GeK3o~AXg>rsvu6BBU#cO6@m}A+z_me_+v;0 z4x#Sg^?>U0(ox_vM*QVqB-4#$UJlp=i73nL#LNUFEkT9)3sT?|9=7aa6(QeH}aUgrZ> z;GrI6nWDqvZ&HryW_I|GPw22EFtK?c!W#e2@d3mMhSr1dDnTmcYf(~gRTbo7rkgMaV(~;b=$ej|I|m}nnGRJ_Z(E+x^?Uc>^rHKl z0(M4Ij3lfVp?Ig~k-wv&ij~$cTjR?V&zAv8YiIiiidA(~zA&K74nUXoHw(W6qWJ;P zB`n)N4Z1e*>*(K$tpJH|U5n4US^^FZNUk%jN~&XK2lZ^Jbpd5 z#GlyameDF?mfZ6SX3MNUJ(H+E@B8fB91gcjCYtmx58B5I-G;62DFipsu|^bkRJCilToMJ;`IVg-Q}L5Rx-sba73|ia1^H|>LLTal!qw`_r8I3M<1QBo9NijPL9(4Srp!b4wFhPu>u zKSk5M;rKuPhPa4Y_@6ZUPEfVPzCO6;!`e-M%x~LF-eIlyBFqr*4OT5IUdr6knA8ZH zCMUam{HP2DxtKzhks{P+M)gs>!gtL4dSv7Gqb4v$mC+Olt%KUB)cWyi{kL>Yv56hF zq9n2ZrQs(@i7dN&u8h@NF!>3`ey_PUonI&Scscu;jeUlG60WKmJvfA*%Ft=!YR3t9 zj@?Am3CfSk`J(%4tKwBO_&@@q6*u`4ok4gSOW~Ntu-~JCOSOATWPz&-Ks)r}6R+Fj zu2L+sfQD4-pO}%)Rn+w*xle&HL)9@)rf5{`14`f_7q;_vmW@s2T%_ovSDqGdpR83v zaY6b6J>G`{l(C2bo){q3!y%FnBua;zU$)^ao)i9P_{9)L*%GQk1d^^*Q-?e2q#SI5}hfD{f#{+nDy z3Nhfb)r$!}BRR9KMC9KNMaC0LqkGU*^pQ!k8i)MS8&wF^`lp?2rkCi|=*^E-Eh51+4ef;Mczq z1Vk^Gt{HiAIc|DCXAFbWz>X`i1Tx}TWm@|4W&>%@Dwcy?(Ff7cor(HbV!M71FAH*h z%wGuECErvTgmX<*H=#{R`q4v^Vq%^cDpJsFF(2D4M2<6j2!=%>Yr~8PVC-zqcvf~e zX(R!;AV;X(i%V^wcg5gu@mFS-*nF@qZs7lR9~8y{u@+zuo+Ipu;nt9R#8g<&5=?05~Xk1e}9QK@~P3)FD@DrIG;h3#siLfA!crbn~E0@!-GIf|v*K?U~ zQAy85(VaY}o(bAkJ-+Uk`g_lM;E?$&6&f|1wBxgf$^z?WoU)JOuvs$u#|Nyk&p&;v zcC)0$KP4QwvmDuZM9^c8KpdS_iIzpF>KPt;?(V#iFcK-9s{;2QW7zSUD_`BYk<;=K z{3C7SMKPeM?EErs7K)slf<`w6yD>(Kg^sisC%X+e7r6p8KTsER&3VJTqJJG1A$<++ zRcK7C+w||bl>0UtLid}5({aL5TG&73Gv$(@L&QfkUnIqMT>+wya?=A}=m5QGqolCk z_1Hf>XSH(FntJd(yUVMt`%cZI7|9df(N)Kn(Jr%UJi@&Q^8@~t@ykUPxM*r;^*&>! zZeA&lVwrtvF1^{3Wo?M7hQ?ov`Dek)T;CQlMfO&0z5ivl;L2~)hc-(!7-S}ix|8jl z;?Ax_6<8dUE%4tnMD6}+(?tw@s4=h*A@}A79&RA8wtP4;)0WK_F!1L~NTft)M=huz zm{AoACQ6Mb6umCV$4Mhhaq2>9&TIo>?mabmZ;&*0wo=qi7p4|G%~5=i`n{&>kylX9 zt;}en5X^OuO`dvXtPJ|b`455OZQcW4$Dp!3kERN+g^<+Vgx#y}EQ6EIH;Ckm*W6vH zLoN}X_5fXGhAa;fR|MpYVTSFXRBY+?BHh`G@;v5M6;2GW*}fG_O&yc+Vy3t7Q|$M66#hKsa?RfFuks^Guw--w}J5lj|k9{%}vbxGwu`dFqgh$ zCWuYUk&Nn-$=dGMLtib2p~9k(#g)xdPb(hMKDTO`i+L^$?e9gyHl{qE0jRpuHb^PC zt~u>8iYli%uq=*~K(y80?!>@PEM>9LV^E_(;XZ3nX{QD;#Zp6%P+WNzb=`bZ*XpoO zEK*(=q-Io3s0YP_R7HNFW4DjI26w3lNG?QMPvLf4gn8(xwLlAR=gSvfD&|D%==*PEPt6bA8%2|pW1S`!2WKeD9sq_om%;h8n~%rF($66y`k4LLNHZ>M`cE zkWA5r}Yj6S=q>&Er%a_T-T~ulT0=J@w3HG8nllBp<!%ndEwws-j&}+G$o;V_kVyuh^H($T5|FnO zq{wM5mLk0+mKD6;@wWe@(oGyl8tR?cQd)Ru%|iJ*mfkqe*2EC?$d#A(_Kv2K)9@pG z=U7!$wU~0jNp-1U9;D(WYG8I55D4XURtvf6_gCwXQSr*uOn%8;J6KIqcXFk-Y7R zPc(#_7b$8qv{oB`G1+H%&!SaU(!KNu{Ec_+;}hEI5aa7qF07u%*f267qby~rPRh9t zjd@4@i@VBtn*Ad-NK+3byEbEc&Q49n$cy)S%5~aU`!~W?+Nv#sdeNj7h~dV zW6Q4rW3F`_)?OjZFY(B3%sfVde!EcP^m7|VBh<)zL>@367ds$R0!V}_f7m3{T(u+1 z3U>kHa(~EN(Wk9cg?qgl`vd7iw>OQ~A9^gS%?~-vuB~?Co=8-PX}Tsu9pw?c z@(29Mz1J*(PEs+J#s(v%pRAD8lj-$2SKK{2ZwOkjGj*BFO9G3(FEA*=`sgh3Z1rqu z;%kY4ibH;&dH_XGL2sSW$k&) z^ExdX(stI7EI%B-nyPwr7k+?KsMI3pDnjW~zfJC8C$ zVGa**;&`xdcD3SPa(A0*b};@9zjNrO*@izq)>00BJFt~3NE=bw$p@E0^mNe1OR(#x zK2EcTib*!7aVu6N42QxTg!hk{#w!(hqXPv&*1e+^hl%;tujlzKzAMaCb%sc7oFMef zDD2keZz(}MuRY`y-`MvF@`T*s`vAA-LN#`oRH#a~S-V8kCWQbyQ9CN;d#GWEr2HU+J@mEKnxQ}sHF(-|Ua9nMVcX^8e8uvu5DmB?oB_fI&ieUgXCB?~K zrD~|OsgY-dOW&46Ga@X~2}(V`pyhn0SK;n`Os-L1RptQrTjQET>HSo(z^KGgUPoH( z_sWu@a=1t4g!VfQ_9ts+)8GI2E(Q(M7K^hPR$!u#vjgq$kbz(N!xU;MzH3 z5PoJ+_WY8s_P#e{TwM86hOg(#Fs&3=Ce??uW8;QCrBN5YxU-bA(Mz^;xyxa2-Cl6Xa5cc`Pl&jb;kG9VMb*5k z9%;DuM9eS?-+RYD_k|LV)0P;Uc$20tq7TnHXPWIeYnt>a0X)zDQKs;~& zjkjjTt!h_c%dOhx@L#*0+eJ%N%NAS|7{4Bhw%-vZ!zLAD!QQ3fuEv!oN9!;f+%LTD zlv0kTD@iv07O1IebB8c=vHf}Vu-0uHxE9*g!~{Hd5_}ifh(HX#C*U(~YK}7eQ^%ZV z&Abpy5fm0qTeG7)PiMr%=VRcJyf!L#dAEt73>)vc3k2UJK@5Y<=8w52p2rDQ9M2BJ zCNK5f$)?z;#=^m1;|1-XO@hX2zoTgLLG>Dx!{BSpfi2Wmy0aO!#*>YqlT+JYaqH<} zMIcVOAfpm;KDUi8yS-D^{sym#%rP6K!iMocQ(AMV2!Gm5f>Mi z5A>BSZV-(u=sMH3ku5ImoiXT@9c?(932ksZEFSD)oCnONN%FXJJ~fY`q{YY|xXd1xtIEE_LiQ_&K3a)@+1Y z|FyuO8U#Fll)d6DIC?4{yE?W`My8bLuhCO-|765T?{Pat#9pI+#X?l50})G0`jRN? zd^>O1hO&l2KZB84N~L$i(G8AtVYmDX@$oRh+}{5X+&xvNe```o1wYb7J42$Z9XlcUL9wHrJ_rctJZ*iZDGbs$3)N;3EEFIY(@Se2?g{_kl@$FN(_K_3YUoyZ- z({K@j?8T7PPi+z`3lNlntxzXMqnYWdrX6nr`C#ud0)wN^mtXu>b_KXHpUGVo}c*iSFZ>n4$x!YR~q zuBc75cTE0*?-0k%B*0`bT5X9@jfuS>ri|CPSc*v6i{rA6{(r$e5wLH9XaFPL(D@84dnPnz9;Bq! zQCzDCCs&zz3WgBzMvqErxNutXY5ik)i>j--NE~+aQK(|3)?VoRPvxlIJ``yami5(A zmj!&wS(aHNFhu4g0%?+gbv%U!;Oxpbdn5q9VLTMQaz1r=M+)Vq@XN5QF05w)b}gyl z$_CX3pTJ;ZSw|3fbT4Af!pX!P*71EUh506{UE-5|8N02#ShHqW#P}{Fc9%GsFg&7} zH?_=$GM(SV7@-d?p46TCO+_oo-EJ#La=wnE89fU?ORVbXQ|_&I2xvnfX64g04Trh} zP#7d7faEG!=zpqo*WKy;joLWBQ@=}?3>c3PXa-(Xb!mT%4S~DbCUZp);~+pkXZm3< z!#YmNExuMqGCrS(G+kpa{hY`z18u*5SIa~Qh|Kc;ov}dN&YNiET7yfjF3k$m?%`SS zNq2{!!%Rb1po03_Ky>3f7Bn;S99&IbJlFJ>-tA@#cjxZ(JlSCRk$I+WJQODNWMU|j z4?UUa5}2WP!x4Nkv5z-ow_$p4=j(!?VC^Stc{0f~YzWf)(Pn z(GN5F29?;S-%u>Rv#cT}sPwfCGdCg6Upod=AdluSnhe8xm2lWKsMig+<9IV}rEDGx zCg$olr?2S)F_QsOMjH&2-^V(r6ER-L66PHyXy7`SA=2Gc1B(!GkdUov4vNnKOr<#g zsHs^`mMPhiPnGgf)PYppYG_q5ix)-M2K{v=e5-U0L z+-r}{MF>UyY>%SUi`@y}SMWgn-w^t4=Z(8rB61UF@KyF0*Td*lOb| zvbEX=V!T|e`m6<&oL{8&8NKWqO$;-v1M=B;ph^p=5k~M!MO=sHi6gASvvVv$oQnwC z>E(j_bEpfN|7y!-js`kbX{g9D_9X^g!_JKebRrU zzp39pbP8G-p^yl`5w-5_4ajB0X*oB`EqGGXy`LFrW-hBQ-Gc5+9ZHU*nL}7XC>$OE zc09LWjfk1EbNz3sd?o@{p8OG^x3N&WrW4eUHvNpuV1{DiF-y7f4|INr{xlej=V{WS z6luM-X=f8uVwSuG6imNqlj^Q(j)`MJXvi$O7B>4tN7X17t~SOt9WCDzlN&KX*%wP9 zu+D6v%%5@u3?o-M@?gHiBe0ZP1%mKPz}?M`M&%~_%Mv+Xvh2G(2Ea^} zaSX)Nu6Dl1FY>EO?x`qed{u#hVy!v&&D&hGQhD;k_m#i0P|XP10X6lue_uZc_yTCY zm#S+4HBr^51yL+qXrX2T+Mc=|JcK*N?Js;?V%WG4M0Hm;JhK)b53eZqJO=b+0fiaHFPoMIw;$o^^6jCjDf7lao^{Lx6e_sO& z3T?RdDN}ZnLq~SnQS@zHD;D1Sj(C@f?^h+N+7<;`WgYFp zXDqap|7O(p9owM?MgFx1Fm4vU3@v{A>l1ou7yHrLPLweKhQ9PAajF3GG0Yk7{@YG^ zJoFF_th;~-gM>i(%PSUTyz@-_ojCeI*X|bvQm2-9j5gTtUYb#PY@o8a%4HO5@?g;Q zoF3v&N8S2@v&FZ8s(x}JB%{{YPa5X`1C{(h@^AFJ?VCt|gX(&dl=%5+8+a-O`!uK7 zv@+QM=2Y741Qj_r;vBGfc_wu*IT0?^0>&PtSwz%HO*22Tm_WAK)2M%JIDB9jB^^By zHb!vf8MY>ZWv%xn{JO;Zk}?a!cpntI1m7CxDlaB@nT(2u!#!aWU#O(UY!;0SQOxk0 zA*89bxL#f$6E{`PZDKkaq`N$vV*bMl!zq?Q*^OhlmwQhJ{kc*}%b0)S#cIG|GSDL- z_w2i1*M8PgE0z&0*e{1U0y67}Q&c!>;gs1};D$a%6aERLn$srC&X`pNPFom(YmRw! zL${d{C^~dhhaz?wXvGwLIO}qB1dM?BB$WrWg?v$7`IqCE?+&HEjA#vql=1Zweqt0J z5%9tkA0-g@S(j!jrcV7Nn%$(gahGspTXXASXZDP~Jfb5IYPI938*W}Q`V=rHm9JH@ zrw39)BwQe+wPy)-&Vd|mbs#zh;uvMJh;UR4QA4P=wg+DZs4%ScV0G-OC5^w6i?5`U zc;$Rls_&loHx=BSW60Fc5Y@(X8Ir2H)B^h)M&H9T#81N)v16K45L0OfkuSxlwIyc% z09tg=bk|L;?u`d87#7H>ssN~n4liBiU#{0eRaBsDPOY<6m3)7c&d5$ZfqaY=!{ev= z8?Q;{kdu*3OqYk-&q{m{rNw4N%tY0PGuiLfrW8(M%3^(Xa zM=fPNJC2Ee1FuC)TytB;_F{$@YDV<>*u`})Vh|$gYF8inu;NVuRC>gp#Z1IU@x1kO zt}TAe;u;9YXCQ_2cuK!CJ+lcRH-vGzH$+X7KiqAdVJRVay@M{5@M=FZrdRLXPbz0? zu=7=?9C3a$juxdvp@^;Y$19wz0$T;|3jq)8czpk-8#2AZn=jHyvkMve)O&}!>=Sw} zgODnf@eSLaT*ou+pfd}-lLDor-l$6hf07vfT-7pA+d24-yzJhxPjLOQxkHA7NotR6eV*d)IBIak=$3Z%D|+9(N@?&Qed!fteFmXfi92@hQC#7S;H4Ie`#L12wlV9u6q0s zB+y;^0CzN(B7?7&?1g#-fZks1xWb~_a$8^=;vLE^7(G-*uFITc`&gJTUjG1F$Ipjd zJ5*i6u_j9}p7a=>rext1PQSwpFk#L`y|Z`xk7-G$-kt+~SP%Oj>-~FC4025TT3=&@ z>Or#WUs=f??aL0x!zVK#c#_Wk8@JeMW(gd^rC5pD$3%j z2%C5)883zG!g)D|A`^h}TOh|Q?r;j0z$11G9pRoqFYMsUCXV@t$G~f(hu_Q2{2k`3 z-wuww@(BkkmAgpXE%ph^z$gmIiX|qMc-?~F{lqYlteF_Q4S?aA|37=@@6MxjOA$ku z5`Ql0?n=GH>(^I&`APpHI9~kmw-rb&%)bfL+qW+iJpxZjk4Vhg}X!G7=*4DWi-lJ=3tM3(!#+j9(l&&ujh?FST)q zv515P1mbHugsfx?`E@wK(hWMg-1lWkWcBw7y?9<)iCex<+4_PHrVgGq8Uwe%7 zI7;Pap(KL{#WUF=fC= zc=;0?FaL zJ4t_lbm)u`00SyLbyyG_p3*w{t;}F;8r0YApDE^L3v+dczqq8xf=ia5{d5!%ZNJE9 zpBU{peB}piXK{=qxo9ZB(VB_n^Y^Rh0*bSj6v5Gy3+vhcYdmt<$(CCwr1%vVdDCoT|-U6W!1IeVl1|YY1BgOM@EeBqYb=tr@x2Er-b%sRHWbm{r8)vnQa? zv^D@H%>69%F@f=GiN@aOZ#naAg!=FvJ1WR#c|TB5Qo3dbp(W&E_1N*Q_V+zQ_hy}( z$GOw*eNXF%N~4Wu!JOnBc4IMAk2p`k{u1#W{~Xr+&+nkhue9j)WBnbg(G(ibgx3_& z@}YV>k-P1W3o!gU!U}|tsc+k`R%#J&f5>P3=E<>z%wM@r76GVD-5(5c#a=Z6$Vx@4 zbAB65s}5DC?@b>>d@SRve4$y>Df%^FmCn*V2TZ?MrFlqd;fK>T$0Hh=psS37*bT9* zS^g}K#Zi}ZJgNw3aRD1RFmO1~m8_;a#gwj%__g_2gtOV^U1)!SGa1eyhpAkTwlu4udI zebD;X{>?F73^s(5qFN`E2~!S&eWRGfB{jD-|7~5t;8K`K8UC@U9bS{Iak7;)%852*ht+_u)Wkb_}6qCnZXsGsa5Gsk{;Jm#Ly^vOHrlY@gPgjh^ zEY7CpD?3yz-RKXVU2h#>`(PeOr4XO}I)hPe6an-`D0ypA#QQrOVD^sBkivl))tW8RVidA1g0;NIJu=Zew)FVtLw~%d2@Bvj+a5`^7w&e9TI@2$kcq50-s8TxX ztihepy2%RBGWD(8<9vJG*YOn5#^8hO(8d_|$d!iNlzWagQ!VY?j~>a1DHpx*0NCEQ z`GkT25=viVe9~-rJE`9%yEbsv(y`ex$kqswSw`jvs*&(*c3r<6^Zw3HOQUg2RB_HB zjDNr{vi@g(p~xmuO<9lbY!Dsk|7u^b(`Kcw%;r?Qkc3VQi};7a^E!UxHR%@h_p|Ky zT>89Gp%{<>G)lSmm3AT)R{gPNcBdF>uk~up`eln1`*93Y&kQ|xSauiJUH)=SWsClp zc5NGFPP;LypfdQ)P0v=h$N9dC9=4&?_ejdsYwPQ9Tn>LY4*)oW=v!s2MrM)2HZ^FDEeys<|iyz_Bd!>0Aq_4w7 zRq{a(%fAW1I>4vlxrSTk+NE$3UlnhPlxRbtTmC~O5tLAK)8*zO^(zkaUE~+Pvm9k^ zPpU{AW7V7f^3w@!DVKa{CvBr~B3=|K)_C8-$bWlUZ8FVIxk2_X5S+$&@8R+@F>wRd z%w_^347+(7k#R^zqj*46mv&Q9@<*~GeiH~1&+bvA!nC_SQ23%UEgsamU^G#BPvHbn zUULL<+D}MoQpJw()a2B=J>5!f|2(#UP*6v9pf5o46jz&j-9m|7%&;T)VYf43!t4LRUE zp#P(F*FnC~4lPUcBAd>x1$P%(-h|#Wc0ZUi<)HelB=kY)+!!X{m>oe*I>_G^t2)Cy`srGW#B|Rm!jDJn>`04cG0|#KSFEq)>S!xs$$6jd0%ymXFYC zTJroNW+pp3p4`b)-?0=8!7Rd7;l^se1%0u8`Ju8QwzLOc zT>81Ix3kE_zWfz_?>#{Ot= zEb3hy0vTIjpX6{FTm?haEbktqbVfr5n-C8THFW2b7H~g{hLhHRWUGps0m#dDZu`Ql z9i*;_iqPx4CwL!R^9(T^Daep325?c!ltkSbTYBXps@>?ICI%MpUgT>9!3sp8d+P!g zfMreOwn7ycmMqE`&ULQYVHi6f>#SWvshb=cM|V^H$U9dds*WN|J2F+{WD^H`t;fIa zsr|q?7iWX{J|mjKM;{o zb@t6n1^JjRE29OwYZ<_a3rpA&C39hN#s?4?K<`8MSenMK#B@has2yI9fEj@e;=>`V zFf={&*twPTwE@*KJL>uuoNAoIgG!&K$pO=;Y~lKcCd+n{os1{pqHb1dYF#ggJ?SEd zv{K;o!mpi~mu=dxj4n@rs1!F-=A8SYv=R7?GS6Ti7P8^GAX58JUXTLwlbQh_YVg{) z2O|)TPvrE1moH>2r9;+%f(fP#s4?`}yqPvQzwYkby~-dQcAmASdIy)b$bB+NNtFHD z46dU$3dYC|AUp4g7;Doohc)@X*Jl6UL*u1ux z2&=ND83%e#fgo^(@B6yBvgbIoZLHZ3IhERq{Ff=@a2bpe#92kLcjLn2SuQ*GcS>a% zYp?H3KBKClrIcGx#f=+%DNALo;N8I>MV{9W*Ozg8}a{_oN1{|Y!HIF9Bf9t$`kkbY$M zhV>}yrn51P@Gvl?bxe+3;u-(aY@@Ytj^$ipLi40fL@p`sM zbA~cNrj??AdREIm|5gRFFK<0zY@)zoguv5R3h%U@%@nWC|LZ?Nr(?Gpa~Ay8Lwf;P zBpfzcC7kagAEg3A4<`S+YYT+n;a72@Pr~wi;P0K0a}5*7mM8w1#zF=#eVjCQm?VYp z9c}jj$41XKIv(8!i|sL2;y5|VsrGQ6H{LNNcghO8v6@?tOogpmECf%V@x=>s$jTvF zGn4Fl>d4#1s6mVK^cp$o<8=NwHh#5!UiCFw2xk3H`tnspkwJKZQJvW~GWEi8DC_w3 z>GkSMcs?k=2rQ7)YhH}9Rm4g^tSyK$HN*`S?HJPdGyZClvxzL=`yF#!p0ru;=hJNG zUm^JO{%At&_J&BN^KI@xKZB*Ia%v473^dWUg`eQgf>{PUJ6|Xc-cH=Z6{*>O+Xu-` zes`YhmueBV8~7US)qLXJzj5uVe3>$l-`?a)r*u;g*;06eyV!W7nip9PD*4=ms%*glv#H+i@8p4<5+PjZK(wMIiP(w)*)Q*<7Q! zv<-9I%_@?g6mj60D&;#_?e|6St&nT47!eOJzP$xR{;eTGEX0Oa8vP_NZ9r?xAa#XOjgZmM)5-mg$8Z;w#q}D8eD4|iGXgokhy|&1E8_yB$%9s(w zP#GOc>s^r9w9n6gX<5a3_8@f40E?*L@VrU*V)%n-e%}Utl3h>r_qT_2T%qS>eCpaw zYkE*+L-#8G`O0K?x8ua02$_5J={E6L)Yb8@tQ#}Dm+Zr|8gGDAu>4Q&?%*{bs(0!$QP$Wbcl^-qU0L?+j!gQa1? zj!+`65qn24ZW|l(_b8%Kf70zXATWbMhL%jud2*FYxKvwcU@UI~84s2Hp3YMxXV{@5 zV=iGkAOgA=)O#N&*UJ9Gh70UbdOj@LE1w)ECC8DzgCtc4q|esvRoX@mNMUY-B;i?!9!D=c=h!?v zY?M>4N0-dk#q!;d5a+jZ7QuHPzESJrsN>R}M;0;ZUVi}3&s5KT=7V*8)J+dC(iaz< za##IlUfSm}o{D9v*y@#zr~5O@K+#1H-;ysMzy*px*S2pP%yfgHpHg#VdRcA)Cp9Oq z;0M|K5V7noRG3k@aEAjL*l1g_{0{E4K>igIGc{zrYMN%9Sp9EwyzrF^k`{fp@8r^^|N z%_gl5L*2Zup`mFYE@zk{Rc&#yB9N6w2b^(^!Y&z$0Q$1*@HdX@;l&Z`ni)u#Il89Y zny+!NaA9zAO@&?c%VNeU;rNR{>Yn++nyC(e-VoYuZd3HSVi#}&P(bBrcT0R1p3 z5biWIGPk(0-zOFbe0G1Jq$jb|9-dgiJ(T6}X_z!${SuTOo6j8fa4MtKSL`0 z6i&k4wz2j(uy0gr$IdyC*;O~3KEhx$+uxepmm+jrb^64AarcUSh1zhoH?0ie*_4yh zn~oL7%T%_xzFQX_m?L-g!ueq#z>xbTe{PRke~9Ma2Wt^^F8QX)x8uD|dzU`LD!{tH^zRcAtx&>HrWy{rUN@;D9I9En5a3IC}-OVparPb%j0lZT{Z<$;oj%P7rvs*&O^+@>&n~+n}ccpA* z-W)X9Q#;ZqN~Y$ykCj)vu@9<1o>~6RE|KW{f6FFIA~NrC0w0tTUNz$A;USa^j3B1v zA2aS}?;R_z1U+2^iz5S=Y);fgR^5J1enhsP`4R)ydoujRT~e#&LP(1fg>KL;<^EWe zz_Pr)y=a!>B6O0RAy79F*^FT{q(%#g>Y-?ib$?{5MTIt+Wb#`^a$*&p(7@+Y4S#9` z(0};Z|AU{n^2K=)5_Gv_(cvp&G|}>4Opy8Yzi>X#1iZH4P&8M1f>U(u5xn2LXx-Ru z;rt?vOd>15jlQPjs?fU@VURHZ*Xo9`cYSyioF1&I$88G0wfEIzT+G;00UF3!4(WiJ z8$H44zHLBs)0vWLhIG$XCY!p;Fz(J%)7tI7e1JAD#Y!viHw{Xj`tSjiO2tnqEUZc4Y5O09jH^k_j{ zX6_7aQ>L-lV~!+ElmGj>bw%a3LD8^G5mb`r<3u6of7?UY0egkLR*QD%MwvM$yTw8p zVR8zxn-lA-tzo9ipzM(Hx`%G|{-}ozLhhzP^Za`Zs)Cs}b=pbWA-?{P{>;Fq3J@kh zvC(}xN}cI?0-@q5s&fC~gQ)n<%$6vKd5D<2pmr&|pJJk>)Ao`BNhEp3Uk^)w9T?w+ zBezXcp1RCKv3`FuLV!+--Gzd~l*{B)n(ME%4ctHB!gwKRd8+w&5MUonB`0{PBs6a6 zXCEw`G$>tAiN&izE2l10)oC`FD3-bN=N>eItg%EMf)s+CrHo}8l={`j(LD}|1m9QO z-XE834^oMyOOjAN$bk?RA7uxsS*vtsvqsB+@iE5iRkca`yjr^I5LuVGB<26WMe#qm zwA63l$^#3FRsRt-X=x}|HlC&@dw#?7a2DpjJ0GUFEtX*T+{~Wcmo7;%i-?j#rq18p zyat_hT#7stkf73O$-ztpl|zNrG6wfs64B>AtPiw3!E8dKQD!LwFUlEKs04#TYi{eX z)4g+3-*O{Mu&X&Y+xIgR<250gzuZuuq8%JT=2zXo;^tefnVoT)Sw50X)9-R4Gj&gG zgg~O{;s8HTv;Gfi{w)=mmw5$ac6wiAXIrWX#JB`xsn^pv4s*9?<17vd*3nL|Xe(q6 zsc)SFgPEaIe)!843Dk`LBFefX6B*xz?t&hp)ov_ywqNc%5w9Bv0%j>JqCybd;6XkX zD7`(S9-O$OJ&lZWHGjv;;J1_Re$l!s>7vzFhc0b4U_`%nyk40A*7^o*B$p?1v*Mux zeZTd;Lvqh^fA&?zkR!8%L3e*9+$2Rb5PZh*EkDO$o0^OSrkiDvpeje3H1!z}E*6#| zndZ5#Spwx$?L5U@SxuIe0nqav+uhQ=-kH~Xipn{pSDv&%)9`>PrlV6CrKn|jHd?-0 zb_h6-cVOS3`XRNb)b(U-of;YSGwooipqPv~EupxCTPE4XFI6!h_ts43tbEYMOII3O zOh~Fb5cW2|a?+u8{AO86f@NN!+0!qKlHq>l%0%yn3?X<^VvmFHC zL@#p1IA(wS@^TcU&i!fT1@8O@N8|t69&YQ@y+W-TY2z2Q9VM2t`;j4%tGiA9TSS=Q zTr9*?K^-5!?n#=nPHZiQRAoF%&Mjso%DRYo`p@WHC37ND)|~Rgj1>cqvb*B9F2F-p-&Kd?A9S zQ5Syv->a&CJKWZy(A8{A)Xh?+{!^k;p_V3`p(J@_Fz#Te5uoF&{a3i->M>#h` zwlvUK;;0=a>NcN@BDjak_kO>K^oR-8*$_bs$@ZO0!*Rl%#w2d9Ieoy|!_n&k;l9tY zO%2@}v?GZuh6kWH=LSKU)R)oTEzS$EJRLYa%<|~bI3+|$1}uCA&&PKEfWHy+PJ|~5 z@Pu?M$y&jY$1XXLnyW~EfRuD&shsI2!a_T>d8lm)0sS;#6JD~qOw{u;0|->|Pjc`7 zFT`7VglC|k<0P;QdzMal^Cj&Ydd~^uz4AwzefwbqcLQ!`MrKLrlOH0oDq7tKA0EKw zcHOd(iv-6odyEIp$wG$JG!L-~=ao&mO?gfDmr;|6RpMJzVt3OMF@g>xcsq>QEs@Vd z*>|Yf!|520w_irU`2>9LEN2s?Mfi8>WCH$ho4p4Ehaz**fNA}9g+o6DD z{qBEwPvIYq{97xgs3Z1>Q3VYbtQfs^Mcp-C{{w=0rMIog%`3xjgT_q{b^*ZmqJxcD zQho84Ie$1v_QXpD6tw0OUDzUF+u?AnzTfh9cH9;%yQWOb;Xi;S8RZTXZt zdpS|K^nGk)v`?S1j{)oC7k*<%YNn2TBOn-K0)~hCVL1}F%=dUKRGOSWz0(95`q$4h zk(tC=jIL~jGlL|AXG2o)f-632PQ8(l5jb}foRZL|U|BXcHPa9u@;?rC0Yj;kG`@ks z2hmD@YNpMk@*pg%M;8)k}2QII&^p+HjdPOzu7$vIzrU2$pp_{@naGU{?>f1QKa=cZF01emT15~efh$c;{?k2E zM9UE>w3>?X$Kl#!QO4G5HPF(Bz2!>r=UWuRhd_1@C zkP%X;s(lnA(br3nrZdGlXJhsO>M$8ei2IIYF7j&gT@?m0r*G}W)H?2>|D>wCDKDmQ zw2eFF`z**jR?NT|DN{Jdw0f(Rf62E29}AXD|twyf9!Q4tYQicpFN*#1#1@7M63EbZp3c;9dRRkNl&RLc0k%+ZjnX?T}>a z{*u5BC*t1S^Yy{*`$c3~Awvvs-rUcYJsUeezN-9Hk1tqLPO(0SxLQ0yyGqiA%0PAH z3=qsZ5}5e>5ACN(pa8IV`q!K}RCdcxty_4nMmteLt`V9wW+rXM__g2Lrv=>RjpO(8 zN^e8oOyx?K^K<-QB+SKx*A0AD*g6Q<(Ylc^W~nW|&2udH*cBTz?LwM*=TA4w2M;PE zQHS@ImtNQ-RTvhgphI8S=90=mR*0CeKYD?@2+|M54^Gb)|p3L6G}C_+nK>#@mYO0yY!BW z$IcPy3L$P->J3!=Q~e(w;Tf1_kwxEavwYBaZRK;QpxOT{s0o- zkCUFr!@H7tCL}Q@elg{Fl0xO(>Q6?#cld}y785z$LZh2rPI}QdKtj+jfrdX1!w_*q z2u6@#q1MG!s?C2y&!O*%Ng!3I=>$QQQO}YXv#Wmy;m7~o?4SD-5Ge4UWq_oHT5y?S zWuSEFMLp0pN-n!x9`eW}whvUyv(ePoLdpp*BvR5oPI)q){D4_xNj|f@H})fIm5rIx(fvaMy>0x3armCjDD&C`Az_27O?N1S~F=85>0XrTs zfyK=P3sYOW4K)dowRrwhl`4xxPomR17TO5--NKdAGnXotC+P14*(&u`-`H0W9#(H) z92u9%(ld*;hU|h5%U;rw*Cm_su&CyNCwv7rpyw&f7c5~H8IY=#ZIA?)M2WvFQZ%GN zm5GlJX5I?w98}34^M9k4M<#p!W8An41xPRrXKx5a?a%xNIMePynCOL_kF*)#Rg%G0 zaVAaj@lshTZ7IooBzxrO%+y~k?mWAw+ZK&@iVq2k`JbwM@FRRRqhr2;3AJc1|+vp(*VKAonlDM4;ZZyKU6cOnH@fkc!$ zOAS>`o}M}tjYQGvrEvc`zLz|8a?xY(F2bMLfBrG<1e)e$zAG2b)7$B+)vOxF0GYGR-JVunS>L0OfWRC zB$6J;_WKX$Eq()vh8ezbi9xDiQtzSaS6;2UK|o_xQoj*cRB?sq0hV*c!`9mtZv#nN zqjV*^-yU`e@uL)^`9P~-_(w29D$Teq|FzyDxDe?ad}VE?e~2E8HDVcWxlpLy$N@n! z$Sk%kydJEIw05~sVF|{Yu{|`=PgYy~lXqSD27)HDLn8IfOuwxU>Jn+=A}sC(_^efv zq-+M~B-U))Yx5x}e&Ed!KGt!kVDcMt#qHoREc^K0!$?xm87XPxxl6YOA73^$i!kQt zZ1CpK(En9mujzEPy-u(Q!;1Y2O<&Y~`V%TY^A-ODURS=ss2Z6u`@;+a>AbW~tlzn> zkq5Be^U@@dT*9d=1j`G}@$C{63H3;Qw0O37k<@kKOM4A`RUg$@>;X^++2G;s zry_tvqVRmwX@fN-{;=1TJfn46FB~Zs8r{$)(E;~GS0A6qzA(-3N0ANlCJylE;T?D^ zc6&Q7I7vj~=>j<{NS30P3iQ6q=1Vo^kG;Q-PTlGyNvP=MI+dKu0yN9~%mlcR0qz(H z*%;_|>L+1v(UJHJ))F0{4zmew?O~P1Czn)A1+26QUa8%1*$B)*I}%k<+e7o z9=cukkdJ=$5JdA|y6*+TRd{~}Vx(l{UJQs6Qd62epDwK0wgXa2Zv@L-Mfi;G4&kk~6m)7uQg6gpEe zIU$29sQYGCBiC5Q!;?BIc8B2L2JfSdWrfE^*J5GTa@G%M?mCQJ}G;a$s73c zBBHi#9|ydvX@it@ej)`MFkNw)cbYz;&GqMsM{u!3c-2tvvQZ?&(7}vCRa39i;NW~a z--7((d8xFc=HLih>Zi*ar^wKMCw;EMx)d5qWZQ#A(1#J$9OsDq3`xA^?^XCHxV>J>J&9wlUB`&2ez*Znqa#va6DIYQh#deXf^yj zO7gk$pQ3(To3Ns&0#1*;=}vGG$MdNOQhu#Hdba0?()ASqXKr74BQVi@T}xmtU}`!I zYj+(n^K2`gI?_OA_ib&e;qp7r$ZU<5C9};_+GBiiBx$(R%t61>ka*S@1%I>Msm@3h z=MB~a{yaLaCvgpWBdE$7nkc%oZOtg4<4b0CO8hpsXQp<|2OIJHax+MJU&UaHNX&Fs zBETqPm*0&TW#KtXdaTYzO+EtVO0D{e+L6GW3td2|DGqeT;(^=!fg|yMa=JerkPsp% z-uznZ_q~y1GC+KTrv#z|V^vEb+Sa0QqRS@9-zg>Ht`&p%;MA$fhKBN!&6_}t8(AU3 z>JbpyO&YqRKlKVo_&==q_hWI^Uif*4XundXT2UdvmE(uT9{l)~FM_YbS#Jp7dn#5U z;qBWY(AN~mNf7DlN>{4^&Hx=jtDULx}za{0+Qo&>Bn1Orl$PQq)Q3 z9EyK3d54!B9NlooeI-#T8SfX#srQ=BYgbUphpt4!Oct#kvztnm9p(NGkjA&ZGqn;_ zv^<`fCf22qnB+ay5T#TNfZtOtCA>q_Id00opbeL@fZHA`@+9qF>SkWLB2}9vsv#Ut zW*(9S(bK!qp#_>V6t>t&cu-F6!_X=YdB`)J^z^N)>TXF+- z2yW6#TH1hMng2qtBCIf(x1sM1yF=>}=tCTa5oQ(*lE5|8fyD|jgz}iM?eeK0mFE-$ z$k{e0@PU+YI*8#rcnY!tL#0iY)iZ4fFqF&T9PJtkKdXeT8M)}5HKgpXpuwI3!0l#; zI?^%OH~;2vsH3-|RLNvTkPp8Y*c)7MMU?pF3pDU3kCQqu4Afi$J~fxL_eGV#CJ%v_ zs=41FUR74xiMDdbC=^<(1H8{pakeLi-~-WJgq|p?J^~%0#Ps+OG6?W+&iqxqQ7l9! zcUJ*&f+Jt2rbu^6>+NqSxiXH46f|p^?;AYYG&$3ds|J8##OK%NLeDTHqg1}KWTTEW zg0)|f*ejxj+zCr?p=)a1#K4KC-@z*{dfXoyb|J4vRweG?JWniD^*_V(%S$P=h@OCXFt zt`DQISWeculueuyrCx3IA$eaBN^@b|#g1tiK8v%HE1Kj=>xLA_JMzVe3TTeC>qqOy zF$p|{ni}XUS?0u$=EBamk2CIA7U@b{?xh0(iVF2(92)Rhb}WbEmwUCTYIBEiFOW!S z^rNGIa-elqkZ5v|wy5tGO2n%*GM5nCkeXR+{oV$w^yA%osDzXp)!zy*eMU#oJeN64t1>-NPjU9V z^0#Jri0PV>yfKc?f@{rYpI`LCZ@nEK^h!fkRHE;x4C@gr2wEpcK|=ZqdObj9ysnFt zE;%sABrwDAvEo+%sH6kzzr`=K36H8rrPmV_q`K+*V1Es}j0@x|(iv=GCO>>?9@SZ@ z3+;7vHFoVs_ou^o6B`X*JyiGRbMv^+oG!VtwWw>WCQHP*QzIxQk=hxa!v|chvVIT> zflakS8kW&ge1U9U6@Kzp-0L}xyH&k<%qr@cVy>i&9286QDlA=(cQ?R+s^7(`g0J^m z%v5_?#?)AGH)GJ-FHolYd8*QS^Xe8?HL*jrEp69*>HkIr5ODG>Tdc3kle+7uuU>Ek zHCZlPvZ@kSU((4&z0hcI>U?IghJqqx)I>sfsW{)lcKGc{*VVXKqvTxWkV&%_^93tT zU#hJ_w93Dnid6^vT;TvI{}ccHF;x(TC_{1A8Bqv?nhjGDk(y~AKO|!K&_GwnB}xhG z7~Vkh@&9g#IL3d^;bBnfi-O4v{{?-W84RBw4-;>XknL3<5SOKgj8r};8n6CScBTA- z!jT^+l$%G)59iU#+FY>(`p;Iv^i`2I>}*NFTy!3sZ#LqtRAe2O{YcS;x434-S|XBN zsA2RI*#`l|5#yC5j?Th{f z{7ddK;zjH2G)f_$-qe#qur~Dc`q8dI_p~D)miv{kce`HVa(Tye+k0(o44t>}UIT4w z3IwfU^xL>>`%h=A;k4Uuq|92c`gBX?{+SW6s7|v5m4R`-Fruo4al^~PZ1B?19}|CB zRdUeh#|!UAw8>J}fUJ56{}R{Aq3=Glbh*Ookfo|1Wi!93gUOG+M2s@O_&Xi(yM%Oe zfXrF&C4Q6O+m6cD$U!jD@7E8?rVYXI8eQOvdhkrNvq<~@7+wss+CG8&6LIJR|4OHp> zW-^7nmUrRE9Rx~<`P?M8rM^qeEg0-`s|QC<%3cbStr^~bqh0d!UGXPoCoZ0+tW$GF zT4IKRPH~pV*A^6H^W8I;0cOP};+NCarn1>E#Znv?3#nhPvcHd#SUjzLSx!J2R0mAS z%5-+_s(7l4vMRBC5WMRHagc%gQb(&Rh*|qWT5~Lt6*T#SQi<}MA*Ss<85CEz;3f_J zBbC_bnhdxcDXpQRaD7y*bXuq9VO=_FgcS0lV=+pgH;Vt2mYTCNGZW>Mg1NCTHeIVP z*U#wZ%@iAB#`FQEb})Slq;}QvY43(+aTPz)!rq6<@$v=*Q_L(b`Mg4fR9#+R%D1I- zV;kmggF3S$fHjhZe?L~;2u5@TNRRAfk=KnZAm3)kQy^8OLO`|XP`(sK+SCfY96Q}| zlsf`KWm_Ht0_7(KFiY{_K|`y)PBgB-Eo_4jl32OI#~Q_#WYJ`V3B5j^mNN%dQ~hGCfJutS_+-aGzexz0Zs-JdKMX<=ItD$GN8Eex_AKSJJ5t5ngPEDwhe zM}b1(Fv8ieMCydp=~>#{n6qMX-6O-Lj&O-knnieb-#GNDEEZML`5nrJ6hk@AE_1h0 z4b-$tMeqsh{}WUp|I+>FUl|4KE3|zd!{w-p-mZ_SSEamGNo3UB= zjwQuW%NuLxWE#MlIO^n1F;@elW0Ljit zSle?YPk}^dOW$|yc(S)&IrBa&VE#Z!C*`sde$CP{>xi|}Zn!uN>JIciHtcnZ8tK8H zJS!8K)Y6l?af0A5ArUHpzIaT*{$9{b*i&dQF1|@uZnJ7Xw2%2OyI+4CVa}9Xx$T?a zp%}XNYye=g`s?Rd=w^Ji0bR^dwc5x-0cKo~>M~kk*~mBzYhacP9eC9&x)#HT#J@wD zKGFv*WHO|0*X#(UoQ}pRYKX0Yi|@dukdB9U8tF1S*F1p_T1E0=DLgm%y(Yck{tDYpu&o=) zonjqp2-roo>aFYNhuBGNDNfM*ub>zu(r2Z^yq`M*!&ha>rrTebd=@) zm^#PkOq#B3$F^0_%w zHQ|B*8`t_MAAXNTuAR*oUe*xeA9AzoOa`UuZ0M;;+{5S}c2dl&lG_XLOg#FMVcW$7 zqL=Nf>7T0R7%{nikk)R>5AOPZ3&V~*+-3^ypAD7iAl55#nBuW3sWEB980L7Ld>&p#4|I5+s5sEl*e$_$?$s=(TCOD1Vr=$h+Rbmoi$qk+dEO zLZLA0i+5^h1-@ZL5Yi; znzG=-Z&lh4mn%eCz2jUiP?`?p($V}UzCV{jW!IL!=@7-ET$}!eOKT-8N#E?n-1&j~ zD?Vsd&lX$36T33#C7tztgqI2>UX`adRx%z*?iK06s0C7=pDUMU(!*-c1n9LUEpHGd zpzqW|EA-pFM!p=ZoJ_oKO9me^xRmzX)DzpW+z3gGv;;YazMduu3nAGSashBj7*|=s zFe~P(R5DhT1+>H7>2fmMR(f6qrz7~D3cD#(1)Txp1liXq-QFfM>x*D^zSRP$&Pjg zOZPx3W~eYIn3Ffh&QJ@J(C{hX-jXRktW;3V{nv<-Dl-6AQMNU#m@OQUP$hT7mzh9zc>bo0-wpZjx zp;-Vugsng%1ZFc^xkbF0lY0A+Wu3%(u1jWhGtcb2!jC!CvuBX!BpUGnn4-|&{%W2%1 z`K1#(cCnr|`?ez+zeO`nTy`BVqCVy-a+8m{f$eD)y$_&UY!(n&1DaC0PL*S86DQ#& zim$@JoI4halSu?2$(GZ9Ec^|@AMT#)_x0*_AZYzWw@QX~l$)@bQ^RPq4Ex|!&(fVM ze&}sEaLw=B5yYs-I;wDY%(}AfnGaL*@!uLHsZ>oC>+Cvr62(lj?XTG%eWoE(C4$M=HCmdZ^tviD5~7cJ8e^N z0nJ3P6DCYy3dx@;&B^&0m%2B8Dsck|3wf&9ou4xV|9052Y_FsfF*cv4xmEJ(uLngt zTYZzORrl1yrZBng@D zRSq%HM&OoDRNY|%qIFGf)GzU4*x3gFXv?=Hvh8nc^RDmKb;$u*)Tk75SO zcej+c>K0hdNb|(T1ZA*rC}`rBZVfBt1BA>d5jT#)PC-?*S8=L(PED8Ook-44vF90w zx&|HT6%J(7QPE}7^a8zuh5_YXP+9Ghi zrdtE!3d(X?w2HQeSlCHAn;artV4pVHUo|_Gyc6b(`ckk#71VIq$qj8xe+%BOV6B&Go$wz$bjBhPxpW}KhJ`NlKj#pDC z;PocF8C;+XQzE%?w3Mp~I1}o(wr6i|cOcZN3#>6}UIubjs&3Sf2eNrL$8?mUfTYlp ze1T(Uila#HpFt{jM5yrj!a*R9aC-hO9_p2M^BF@gxCJqK#Mesr54>LZ42HsM8?>)4Ze%+Kh@$Lg-bol?)JZO#tFJo(fo|q4I=r)V85>gOdj~0=L}hRQ$d)akS~gA4s@1jl%l!jy3ztiabQZ z@FC@Dwl{X%x}_nlkGx>h_tPJbT9}FLxpO&b2dCFQ&_lv#>52@hVt)%GoSfV)NLA0r ziN|FOL6m=+O!tSC_`XIUIGbJk?SGC#I0Ps<37*u9cVD`wELRC$a7st#L+?pJ?6D${uS z92fvNPNugVKEx~Q5wp$oN?+m@jJJK?VOhT#`(SOL>{r1_^o=+qbh-fv*ZL5UvSM4H zklBXIy88&}@ri9!c(IF*vrcn|hgsW3q$c!JSgM z>)H(5Y}1BJ5MdG}yutV7_w5ofPM^og1cBGesIn~YM!Fn;=$)HkZj>0&ic#y6wo~}> zVmA__8r4K7m9ujo2PkB8mt`*OD;8HQlC!C{kQ)0dlMi8boV(DQag3VnNe7%todT9C zXO1*A-lH440JHA}?{#NEZiF__Ilu%SvAx6x!rK|Hoj_%MHE75Ma0vodaVcJQF=5=k z-;T;~eZX2Hm~}2sVvgxKv5ch%YhqE0<2sYejCcgJ8v7{I&Yc<3BgB4LXBsaJWO(&R z@_ZQ6FzcpgQ99)HIoemeZIiPR<%{t+BtVGYsRK7_05Rxw^3$od>0nTp!c%%FW0 z0%Uq>?y`<=e?C`_Fn|azJLPD3$~knX%XmGxxtNX`I%aGjqxL(qHIAK{KYay*9Aint zU6{hiY>=R|c^3EEN@GG4tup)PgYDjOSEBnWAqSial_a&mKd|ABj_}J1?|dk7!bFRL zQdXM!x4!aan9W>I1mfI&@vmZ-o5lxZQYe{fn^M0$oYO2^T=h)9q5==(KVQEd2xdUE z7N#`w4}|T(@XGAX)OG2p0NCXqjn2ME#~!CaV^8R6e4BGh^i!R0JRSQ2I^8DiIKuZl zvZ2E}wok-R?X9pa8%Hkh$qwZ69(MdqQL$*MI z#L>Hn>QGzCPBa^OR7jEw1%_L(IQ&j)=t@t}hKxM|F>UBe%~q1R$qP13|*H*Rmo`9g>sL;+}u^ziS==fL%|O{^YWD zOVp~_K{u9{hhu#BVhG$HNfIjaqwfxccW@QUm$u;sN`bFTMl0qK=b&svyP=F}nJe;) zMkSQek#|=af5Z!au>EpT=Y^SX*MJ1ZjVN`ibRTEip?cZHxP{*cYhF(JBjQfpMd%G% zfvk7(J(Z+0W5h80S&8ignBZT!)b_i`bnma+bZ#&ubh`y(W+egK`}+$`nGpf);(6%W zUz5#_uM~k|3WAe?$0JgvmGIOn-0s>tja-SG9HujS`i_l8Gmo6#zJJ~`TC1y?DrNn4 z%67$bk8l&VhxTiu`8&xA`sQF#PZ!lD%6m_tP~~|d$A#Sr@U@SQt$SCulz{KAQ?Ezf zCSsf6t|FWSaHEbWih;tgAl)#k4{DdeV{6J5V-Mv%`495>nS~+a(_kw!7(7lzJwC}T6oV;`7oNuT zX#r+DL0C5&my?ad9uIdJF-(DF6d2fdm?i*UT>tSeYO%U|n+f9y&DG8{&}6jo_% z=^Rm{YNe?;%kaBg^%=s>x}8Gvqe>(JU*Bk6qXd4Fa1h~qKhUc;?R=_lTWwEO&w4S_ zQZo^H3#g?K4_*Dsqry$sPm&S)$SGT9WtOrO$!E)CmLz7nRJ;1>03nio`+5W#R78Dz zBibndf0x_`WV*=anE>x;-d}61*PLaf7{x%C@VfB^9eQVQJN76hNZcU(63~nlm`qF@ z({w`RJk=BGvo}6(g0{WzxWsai349Myz)+Dh<$FfVx%!C(i=YUtSPFms=Ke$%rUG~q zR`mx^Wj*PEqyxa4c;*~tXmgSc%QyGCC7A95#ku73SMc6m+{;Bc3@16P3ZG>L)6<%G z;!wiz$QjZN64A1qQxB_g7P4u26DQ~Mb^(1S^vv52KSgXq7w3{?0E6V~6*S3M^o71j z-hqmblyZQGaRI!P_c5v| zlg7M+0lBEcOM{lz3uRk|o@n2)~XmXI!eo@4_Mk zu^8l2-kHS+Y3is>*EF5bM}^J~mtT1gN z4RW^97Udc`X#Kth*A$f7uk2Kh-}{rmd(Jp3Z68rf6y2X9NJNj_WAfwLngSkP-U;pp zp$p~!&mg3K)SWZf(cMxWIlcgu<-2^1Z!39_^N{mJ8@;AO!@JY07!FP&&F&i5#M8KfMg}`;;YRUA=eL=77UGPgiUIjCC7+7GEJ=fev53Y1 z7*O+NRM3fkz_WM=l$&g~#;?D)9@;iC^A38?F9FczG5;hG__|n~J4B!%2@lHBy#F`C zyRXP}iSRhJaA~W+a1HWZTGjN*`wd--F}x;l^EZLH z_Ip_!oQ&?8pwzzIX_=t1#iDi$$pmZ*BjBFqbw3vi&V8p^c+MLMG|4*P17NCNR?U8f zwpM^tkwzoL9zFeQ7uXB|E3VXcz-lT%c}KHdLTY&*mxxGrTn33UdPRCh(m=87oQPg* zvyoW08^opUQ~Qm?IPNb_C?sgAnQX7u+qq^rX4kFK(Ms}4!XcdPoJ8wrb=2`gZrK~bw zUx{r>+zRuo-%I7oE9V{;4-f2e9ZkmWTWJL2U#UfH6ZX=p_sf6m1xkFCY5knR#;G$RWur!<9Uo(`b1Az4sdmUU4^dqTQpD@) zQ%@Lafp(qv3J01J(~vik?%p6|s^(x+ywd&qYLsa`2dY}3b98-R_54icIxHClQ? z4ACd&@~jmbK7T?rn*Z?0s^9k`>ZH%q$V}`?hg1m4o_e=sk;b{mp3L(*ZbwRd1%^Re zE$GDB!yV9hOGa)Uy0H&1B%4biF-N4o?qsbg9^|l6W~HL4aD)M1M7rdLx|2X+yH0;* zFuMPSPt%`B$rnsoHv>WPk>gU2c@BaSw|6hrZ5&eLS;kGY`OVzKwk!&ci3zI3E^B^1 z)Iun>030w8!+wiVm*%%?hgBxoxl$9Hmvi=#A>MPXu#{&(63>=!(ZNny=0UYH1lntc zNCe(g{D8Q;zG{}_eH;>!WPZ>LY9Mz>CqM(61$-<<1+3Y-DI4wB-br5m60CyLajZA~ z@11np5q)eI3ZO7A93=(l`QK2m2}S%;FKz}?Gw;pv@uDhF>sH=Ithg<(x?*7#BFiB} zl>&&Lr!V%zQ#WNwIj^ZkS^!U9!dE^=03RbRVa*ir@DuI%mtjCgzs$OqnXzjop7*SNTD(^iCTbGAalB=P{9p9eKcgYIdS#)|wqm$KtzHsF~Q_lD?<)6y4 zTEv>#LZedj>miZ`%c!{AEH+<&2d4pjEg$NM2SiUt9oVK+;ygB#zXAWEY^^Fb>tKV@tFRrpbzV1`j}X!nOWbqjAfUI z4{Qpu1WT3Xq zO#a=+zxd!Nbf^`ja2y}>$fFTfcC4F;+p8Z#tFV6DD_+?1glhf^6o zR$>!2nJzZIYGYBvJf#ru+TxUpI8w-AW{(txiw2l{D%jss!u?|3WxoyyLcZQLa7S-2 z{eSev_K!gQgQ(YMnVHNbZ|NTe!V+yVRotNjBDoI7yw-b;gFkk$zFF|{m=*Qj;ia~xf|7e3`e@i{LRiMg_|38IR^`5|ar5R`LJ zLRI(tX&Q5kOCG+9HCJ?bqVf_Mj`;b=OE5E#o-8yWhIlYjiI#n?hZK!-ySwk_NBs|r zSnv}Zd3O6&CGR(n$&c=7)#(6!RR6AQzO~B=J?rjfY~TRf$=vNL@?o*CESsVgEjWw0 zww-B3T8DES#L7u`f~D9_T^GU+u;K}kG#f>*9|pBGrdJ#n+5;qL!E6S~!)}zz8#hTW zz)HKlU#I=>fHxlHzO*X7Z?%Fbrv)&ukLQj`-N?q$@QKh_0>@=T1fTcU!SG8q5lGzh zaOwz_dK>OvAehSQ!OLc`2b87L!fwJg>%LQ2^9_zPfV@ClQ{)$Qzk{38YfSqP^k=jc(q zb}82^$coAW(x0dOWQzZzkN!N5z$){1OfbU@0w7gp6<^se)b~UHK>EyLQjNfHCNt>p ztYe9?b5fn;Z zDU6i}1fq^wIkJe2^y&B(ZjN`DEP%hs?lU5;0K~0}*?B0a*7mjm@3<1kB8bIQVLh0z zV>V^{3GfbQ=giF@U^`yLEolszM7%&P1!n1;LGadW0Q?afmiv`Ip8`-H_K|$XrzO_K#}YVWf4HSJfx}!AX)MSmKkH>}tP0 z{EBr@@aqh%n3`0Xc2YB;4*i8+Y0v9^Wv0biT5j=7ox$y6oJmQ~!_s-5a-Y+AEJXs) z>05B~eui`L@f7|PAIFpFk)%tpEPLxQb?J$+W|%I)q?CCIGhSt?(YhjWbnrl9t;?7; zgi!3Y1o%*))Ow;^|pXFMgZI-ibGMYC1Q?T$X9nV05aQdL5NeD^We zWL7{S>c=3;mC57dqHh6Kqw)K1D4E-xC%$dIY!>coVh)u8@w(HYVN~GHkZ6o_fxPAk zDoC@|V)R{`_r`blb0?}QAF9Xj2c{Cz4i`LRe`2dH|N2eczfD6i!bfL*k9MSZ>K-la zUCGNRis6~M8i9lq@raS$wX2bnnNP&4J;*}XtRct!F<7=cpfWRWQp7C6^wI+9AxmjX zz@Mcc9x0VoxJA6^7DZ}Wn*aRoUS&ajj6Z4`9}V8ypg=O$BQ570U_g`T^S(tp4mwNL z6;F2Y$W{lKeJU7_lQc_CR4%$*+p<7@l%urpw|`QD97b6CMRmP;psv)55q;0Bu;8VT zcy`@v*Pq}kcO5EEKI5G4x#j7CpHQd^`-euv$kMuNCasc>FRe`RSBwD=WXG~llQ(z` z_P#x9w>>Mav!+%Miy$DySzoi?J}0x^j;&x24+^bN9zwPx4tQyhF_;0uZg$=DMjWlZ z75P8rYD(!o5Vi!;y95n;_6;i`IoDwU+t51`>M18@qS|^j0X|db@Jw3Q9vfzpGo@}% z$z(Ns7ZRxvK0LYww4YR1a7#l@&7v=1=ZgV=^P-h=hCJn203sS{*E68(S)P=b*WMO7#c}O6)3u{we_guD;F(`K5P!a?0X-W^YpiWs zxjt2%>E|Ut5#61xg-0Ez6xp=~W)_|ur3ffK20~_Iar)hbziXC`?J|3M)r$S06Xs~` z$-}2*vu{z~$9v?oOt*pa&U^=)BSQsim}plVd?DAVK9%{6vueAHb!yHOj_E(oax63H zyQ@su9A%!g_jg>mS|m)oeU&3nYg=3YK=XmHok^To55s?(cvlIZ&Tj|rBZvsraEX*O z5D{FTHodH3;MY)4>QY+;WMNJK`Qg}4O=eb_@7Fw(gU81|Ihpo1EM-d_N6nswHOhn> z*jwWLNadezJowX09yq1%%=4Bt9pvoWu`DfeLBo!R`EQ6%zjIb;r(w-83&ZUt&##JB zS2e%R#I!F?-pp(~(f}AWZ}~dOXzQ7=A2bvm1$dWLaayg~Anb2~_c5tp{3;Y{Q_xJM zApKWR$8s-@jy=EutP~J*D4OzNVAdc4ZSb151_uX|6OQRGX8-iMUGY=iZ|LJ0 zN{cebC%Q2t7eBC*nxY(TsxDQr#5em;aY+dL>eT@y^hXNLDC0ORyBP|vWAX)o1gj0JPL3N}bkk0V1Ad%g5}X()Mifep#4I%6^o|iV zd2h5NwA|4S4*%7yQHMM=rn z;WxUcob1I>#{5|x+4d^#6AlJL;qumV{$RQDZ|sKtA*TJ$OaZX!elGd{x$A!oJOY2` zItbzZ@UK5n-1=k7#c(kjjnTHmg@|`FpvJ-657Cq_Oo{)xoO&>MBvWovPih6Q`-v2S zl>D=@wx4XpFgS09eLzy012*Fnxg(i92n42$%loib#!wNwAsg>O+U)kT33P|;42e;+ z6SKWcJ=E=rQOBj(0;9uwq@V^#i?(0x_5i74$ACSgx-jprUhjQ#QYg%l$ds!a;b#=s zZTEndnl!0??#Qi-2}sH67>C?OOgTqHGI?Bn(aCR)7QM0}?9Y~M;bQlkp~oZ0O57kg zfYD4QGA(C>sj8B=6&Wc8KDsxbT+y)C`N+ocHlL!)yg5N7@YxTY?vr*8HPv?V+=V>; z`B5~SJ^XP13Tmyil?UEUHnjS@=b&LUg`Sd6vZWgDx1^%r)u+gUv8r9oe7yQsPF7K3 zaGQbl{WC_sQ3#^~5M=XBKK$%wi^CgOe_+Zv=UGAKUdAYAJKdR&0Yy2K?2>~`a>E$ zID&<~72840mV$PDN!0{#jgKPwK9GnC<-^yCe1#cR0Cfyn1cRwWELbu~Kb?{aA3Ld5 zLo>&0L+oTEWF*tYeb+0OO;DGwz>88n9~Y$(Hevy}!YAA*Ryj^SM?vsE-gh}vAQyO& z`o|pCNoE9WDH#VCRdTB-qg90~TvYe@a;0>9+mGnZl<>oaVVsFZfr%`ErsI)ogXLdg zsYI_!B1VE@se$*w&+b}9hJ=ROV=H4(O7xgl#;U}~n=!eq2M6ZQZ~C1YIGNwapj^9z zMR}@jm=mvXw}KWQ6CME5mjFjAbBWU!LK+`*pk{T_!& zAyDt(_BC{ozPXq{GRNKpz;*6?li&hO{@nsxZ1?T+*jg&7D%6|3+f_axW^Z=W<|tK{ z#hQ}8cQ}c|zVVnX!;@dg(sZWfRjCZD^<`~k*mBe>2fe0#JfCmsvrbd+cUCuq?{8tT zXAfVh(W*1=y0Q}k5iG{R0$@~Yjk^h1-yLVXQOYXsKqAL%Q#kA>T?K-=} z(3{wRCBzkZI9L&ph=qiwQw_}Z~+|8=kY z6oJ)HaP1(DB3mWS$um6^vUNmjX!Gl3t@evO7C|t+9i;3ps5mIM)?An+(UAWl8T~6! zta7eGadPU;KE8j|wV-P4YTj1Xh(?ah(8bnf#5v%oG&DVhoqg3J^ zg#b?+EJR9>3_t;jvTadx+GTsVwpc4Q-Mxx#w%LAIhqpouKly>wv_zU4Vg|RV90 z_L?Pvy1{;(MfPBL(AHdDXfRi5DY+a-H=v89Fh-Fyo%3c8k0{V^$K54Gl1b`#ZFouf zf|vhkE4%?7MM5m5rjd+<={vxmuHEF?z9%J#s@VYB;M);K?wjz&@Q*Q-}L|@aTz8|7NH&5T0Yo zF=Fs#C1?X77B@nN95MIB7&o8RcMYLQ2dTv1N_vebIDJ}^Q^w5n9i^E{;2v?ZHOty$?&4%vs)#&4lw1(FRy%V{Vgs0UviC6clZxuIbw&z2T3Mh(!v6g-v;44VtZo0^7N{qgw-Q&nwH9ADgZ8I(Li6mh0w9FSZ5rh+I5obC8EDm^* zU5*8y1=tdjW-SsjhF+=_=h1u&�Nwpawxn01f>9{VqUmm0M8M_jm@&fsIxRPVm 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 z _SiA>YM`O8iOtPI3xOPCFZNfd)U_v9HCWhkJOr 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%0A)fZB%|L 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 z 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 @t25*SWMf(kKvhzZ&kN*w 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 literal 0 HcmV?d00001 From a8fc434506d52543576d7d8dde67558763f9fc15 Mon Sep 17 00:00:00 2001 From: Javi Agenjo Date: Tue, 20 Nov 2018 18:08:26 +0100 Subject: [PATCH 3/3] Delete inventivetalent.mp4 --- imgs/inventivetalent.mp4 | Bin 675372 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 imgs/inventivetalent.mp4 diff --git a/imgs/inventivetalent.mp4 b/imgs/inventivetalent.mp4 deleted file mode 100644 index 730d4c25ec4467ce321e466a0cac63d83526bef5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 675372 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

cLkZE#RIiD0#{zKw8W+=1BVE2BfckER& zEJ)Qng!X`Nw3PU0+biUY6cDcWCwMUm+bU9|)GLF&*`xO2Q(MuF>S_^Rb?D4>9(B7? z-BAdEd24*!gjTsti@%Tfb;4erQJfgJdRrIxT%)8QwSo3R0U*O1Z*wYG%T91ANhx5% znpAX4OhhhlVXNu)HRy)1i7|N!ANi*SSPfE{&i(q`NckQf9<5|~DAz!@NSpM_ngE{1WS<<6aZ&(&&72}F7b5lN3eLSMN3o`4JM$8 ze3!vFny^c0LD_TOjgRsu_Qh*ae&=kkM*&u?XXJFx`*wMmQonDK0LXWPL8Mj1r`&^E z`k}voqg&wo$nVr{Z@J&!;E=30$(Em+wE|VX?nLz2>p#qj`^T)gpVf-+6j)l@)~YBP zJz^SFi;p_s8J!yz!kV8i`D{6EB|Mx}=NpBNCW58vDXZK)pit_~f^gU>vbz+6XRe`AEUvZwGsLOtJgA{N(*3vWxZ+r|M_rfAJdNq7Ug*S)CCRT8}6~ zWoGA-xaz<#6Pw7gu!b0Mi1tk}C6dMMN~H(y0CJram+t;NA`JftOpFjS9|`9em1lXo zg>1`$JU0-E((zlKYOm{@SPLHrT;)AE$;YcJqz$@DBlhUi=ZD^pCz#JZwb9+eq$B(Y zzk$E3GBIBOXq@FP7-ZZ;3#uU@TgrbSE0!*C7RYh^UYLUY!@i|u7)sIz6VUia_*Q!y zeCmU_LZDOxomk#JkG!7Tk z79-L1?^$9K@i=FaXXTDWU2bO+j|0lCW>Zv^tn$??>;_xb1Pc;*cJARr?pS2KkRPd3 z0O~KJgY3Z_0i1={fVk;cQpVJLw<6K-;`l^bRi8Yesk&gPS!bGq{`f#{9B;j3a~75{ zLX6zFDTASoU?pjF6>wMYkd*mk z@z?Bv6QE7zZ?0G4vw6V0pAAz0-~arZ|3MOOJgTuEw4ehX4+)0~)q zC9VlVg|`4XD2uo6tolC55p%{KE<2U)VCgtSnz4^~*kyc-Oittkj&TY84?ROf@!#w( zuC*$A@ZS%{=yQ)k&@OiUydULAH#OdlSBrI;jqqXbd0ooTk?NY8SpoX)>iTe z3SZ86RUN*r5XmM}Pq~i@$4KfTe^-ji=k<~6gJ)%ua+z7EYyI7Je_lvF;~DSlI9mHt zgfr6t#wl5Zc)#ZBUg03^++?vY=%D|Xx@wzYu)JPqP< z4@9prEcTH0tA2$!zd^#`RPT=&Fs@tEIIQ&o&-Ps8x=p$WQ_PJdG7ww2r>zD!8GM(@6Hhe0o0P?Dem$vjcAn&eGcj$161*d*LRJb44Yd|2 zVwizj)50+VAnO^VbB~zYBU1EdIZ?4J1T1{??Qdvhm&X_$0T&6!-slvZ9E@7=64GoX z5QO0Qtv013O(;N--@4k3Qkl?}>siCp8Wa>NhFopiKzFtuoOlakzbk`Q?oO>+z#H?; zS-ea?3AHh-rMmfnas}p+DD-ik{e7rHaNwJ?y6^#38$msP(PPjb%x0F$>_dKp;hN`X zHE*c33Pb8uTCTQx11)~1#BUnJ2VY?=Jm^4BAS$NtUGy=(I$XJ8dt3U?<{OVysupP^-JWZq2VdatRJub>( z(^{q=BR}N)Z=Q42pXnPYs~<^A%nKN7jvO1iqf?WIXv9Xp}kbQT%Es(4?S4&wG5=L3Q(9Co`R zPRr_ZVeFl9!_3IGfx?zYF$ma)OE`6&C6;F7Q#5{C)llop)8;zg&VThs1p4;PDw+P{&E7CeRyDJ8H!Vbm+#%(52MNr?wpFp@o??+hOHTO~!y?XK&B|s4Q zu*6xhj%vn5!ybf<##0xpQ{*eF(dnJ6q^gDyH*uLZjzyD}f)NBcEf}@GK6HXC+F>EE z@*mu427f&H#)oqBLa~QG(7v^Tjs4z#zapq?W` z>W@SL{Hzz~tPjCjCs-sj_sVA7)?<$B7FrL90dmgR7Ut79u&Hq9K{#+&ka(8spi0`Q z%jpD2)xapvb;uE{-udC<(LVv_@;3m$7S!q-DZnj_xsSK8GQgL1(n{$XNJy2hU^I== zN_QMI+B{y>Ophu~o{V*Ygs|C&$S-)T*JZ6f=ArHVRCpg8Bf~Iv&ecLIW1WB=Q}(A{ zd#enm4qi&5kqQi%$;8SZLebxk{jts3wS7GcM;jdB7+`oFxntI#$6yDebSP2I3umGs zMZj-&%nEZGjDRX?)&j#w6(*moYNbQ07sDbA7uA~)+)qZ5tQ*{FxxQ!TX^nSilxRNW zJnV(L&Ey{~I3DaDB7xP*ZpCA>ap$Kmk&I;Zb)^k+s~nka2E9KRWci1|f7c4s%zp+B zT4k(W3bV->p=OkrA|%y}R8Zx%aS(qP`G=Q-g3#i(s)J%UTrO=yeaE%D&7gjOl|2;KH+x4oQAX0GYTN!%sHrVdI>j7l3+6b@j`Q2el|;ya zZkmcQ_U3lkT>>Z6KMubhg8#5!wpfv;gY$tz<)SHfH>PNC%Qm9$dX#(x_M{=FW`G`i zC8RE1u!J3k86zg1-A;uZE~%CB&8G#78ov^ldD!Q!v5YUf!c>h=@HX_Nbk9Ry$QnCZi2 zS3>W1bA->CEWZ6Zhi*n3cJGU2-h*?MO`BIX$eFhA7?mm^BC!ZPFvzU$b>A>Ji7^Ay z{cP@wUKU%+4e{5IPeaD*wgKH&tmi_c@vT`iJ3f!tN_mKKJkQuHwi=A*L%EF~DyDnA zS7CT9rEdJmNuer=IEpIFi zUpIQGer_)wDe}FK8kI47v`s6;dey@RbNe#kXFR{7xE-cED`{_%Iqd{#*F;Nc7#a4+@K^$3ciw~W}6ZYH~7C>V;SW@5|FNDcJnEQZ*k)}sE{J)=ex$J1I2^m-CTsFk)Ss(5rT^JvzTtjQ*{*X(};wx!(iBA zV$e2-12~zZs2axqj0Tr{BOW zX4G;H)TuC>s>wieM~ysO#e^)4iza={BPTVh9*g7_efsW|ZEK@e`=%ggiDdKY{PtUN{8Du6k_(62CXx%n)=J>jO&$z()PXc}xRO0LQma0i-zcS4lR2+d@+69)o zABIf+6M+6>$Ua}IWqSLLv;MtK={uYXykq&J8Q_&E!0%|NnoN!7XEI4=c`GZzRnedRPjiVBy@+W^;MHLdt6j2 zzYW%0i&=*2BP@Gw1$;WEfPQ|_hm_U^cvlC(@m?#)&g(ig)kk`##Rw2M{yT1|1$n}# z^nL#|Skie^`gyx_FKvgFKV`CxwRPyI?Wy)1z7RZr+UDqnL%_qaplZ8$jP|9bf4)}& zP5&dszbgXG!G)WFq+VZ`yElT>of3d%A*(`HlYLEcwas7j=F8|qpLj@?NaUE`N45)^ zqyqGE7o-APP0hkIK4Soj4R2|FxD~9uw))$}oIgJ^>@T=+e zb1Sln))k~Hdj2&A-J zs#KO%)>ID*GxU;`5-~6jo=Z;?8Od1n+{w+e1n5{mbaTg*kHj7$nCs(?}ekEhHRZluypf+zWccn zfJQiF>uG#L)F}=})AT<98I8fbJx~fi2-6!&j^5x0{<^&{F_^WNAL8WK<9f(t?t2gb zqd~whCk`!|4xKKtJQsV31JFesc=UZ#r6#kJ%;XF!PV5L&bBRmw;`Zl>9{5+lPyZG0 zt_khA*#HV(vI8jLu4`4!rQU0y>WK>i*zqOPC*?MDCIo4tf|}kD-!%p11-P21_&sPD*nre>Ao;efYY~ zR^e04@MnI?TEBPavmD$+6G3xxNo4?hiYo;39Aa zmF_AlY%iujfxV?Bp>XyO2n=C-g0a(Z_#srz79@=5rErx;-WZkb9DrV`ygijzLKn#uOKeo zGPqsJKU>l8gZ(v@tBWl}xN~|~l_96k-elE%1bKJ&22AhvQE+RE3R?5JimpL3dzIl5 zsQ_#)uCav8-~$xQhx-X1(+U4wRKxh}bsmHQm< zy8QMUcr+#~Zi*2zi+f0@YlP*cyt|GcW|Gg!{Ys||l?&;CyjS3T#Sw$hpNiAbUUWZd z7tm)^ofe8GRM|MNzDwBa%FK_W4?%6Vqk8HVG%Pz{gC^d2`pZs!_gZlT;(gI9FgET0 zPrD!afr)S8^c7OBMt%-8aQ>?Pon|7`79Mv-kJYNN+E0f9`j0#R{JYWhz-LN6D`h=N zxCLH`vlrIMN5Z{5`aYZT?~SpWN=VqJ{c^153zdS+`zW{5-TmjUNEV^xM=hH}8n8Id249B<%M4;r@S>F!8 zX+DX{4LI^4F5M*DpBN%I_(aV_o%?~esNxb|bhqD~5i;FIL%l1L{b+Q)G5I!6(9RZB zT4$%EFugRbw}iq{;w)jhNaQohq*ULB_@azjZ!#xc4s+xO3?7V>Syv#TJ@A68XOfSl zC@Kr6@z0Dm#Tky#$G^`dK$JwM@DPn;h7FZ^DEt(-7%D=T*NWd2L;57%sX72~_cWSI zzEV(V;+&-i2f>~zWjRk6v7FkkX!I0b`aJ|f1iYZ13vHYRit1atqKo+5OPNOF{?>x! z+eiWN&|5x`A-TD7e)#EaFTy9tIMn{Z6XJIB!v(E2#3lEw&~pcQ1?E4^q=GW{h(WG5 zq)AlQ>4b8ctk^LJMZ#Qe_**@-jRarQNRHTKB?Wgwr3}}Kp9G<=nJXE38}S!YCq5Cy z{^zrt)A|}9_EiILr<=jBB2h>cCfU!E-bNO6+K>i zJ9!R&7q*^rQ|=ISVp0lxd&K%>95TOZa{gmTJYH<8P^wiwV(G7O}}eB`l}2Vv+;8RVS7HW3x5xaxG#(8{~G}K@x1?&9dmt$7^SP?H`w9$oK#Yt z{ds>(g<_KDtZj)QR?W$yt1@Ev$yUBmX2U^3h|Z;@28F;&G38Gmv#X{?!d)?$h}3bWpzx4COrA9u$&tHyq7;jeFLsVzaTLEy0r()B zfo0Y3cTyW8#j1}>ayeM*c7~qGSs?hC^`pqx!0&N{FD6i6dfWE08y%s%^b34sQ^+CL zxyWV95Al2t@Hcs?p$A5YO8)Iux}jcf`&-sy^@g4u|DZLu+`iaz0v95c99m(u7(IN z-xPQXN`>eyPO0;4+XI?(wR6mP<{|FEu#FXvWUx!>ZujXxQjza%W3UBDiOx*#z`V!n zd>)`rX}b^~26?!o-ELT=I&WTlt)76m>;V~gsug25DCG^&9A5$`OVBeq*?DR36&X@^ zfq-2w4?oxkk`?Fu{D-P&o13bVcGkHqi?xhWH3{t9!{kC6v5IEGxYdKkr&4qIp)8qy zjXj7|YL$(S)ADh)G>MP?ej%|cyfYY0lk(peYn$%YA)&z)Kl7>6yo>YodGmTB4jmd2 zb!IXQcdjP}Uqafp;Fe;puY$|0%9sIQ5%IU`!N>HO4NZVavFFX;_zqM* zM@7RS62*u#hu8fz=XZ8L13`AdS?JwogOuPJw#|th*nnE3}kTzrG3L2ST&|vquBCfk_f}@^OgsA8z7R>`#6(x<~afp~K;f zL;6%3$U8S!=LqK{C@uj|5PdWIRl;sN24auy5n|JB^O~_RJWOz9ag_xU8ShIUOYJeA zBAA-@F-%zm$8=rFl)^h-m-#ZoNb{3zKJb(z0l*oK=`Uzm?Vt~r-%4vN*u(iF&^hxG z)_8jam_zHC2TQYFl6_PL4K!?~1U>$8Zjal@J8M^Adku6Xos;7OntUx0f!wSu!_aO^QXsziut>a<2JYF-u1LL z&0=hDVZrC>PgM)%QrLj&k`5qtF(I|nPyCYhodV6MKjIne$Ud5KdUF^7TxZxOKfKsF zwQ0U=1>rW=Lwe9-lG_Nu>vDM)oE|j8fJedJP@yYi=6od7Q(fs7jg5vE3X>5_=XTc{ zAyZlDZb!O|al=zJ5{LF>Ef6+UO}-#M54Iu{!INDj@vKs}q!MXyeL%8HJ_ewA*mZpF?bD{@=#QEAxp~OWe72ixGa$$p3P>Qaf%Gg{7Ju4LMd~Hsa(rV-*->Wj&0!njk2ud=sG5{p8PzZ9M5#cmC}hjjT&; z%AH)sudd;Zh|YG6aMSm(V3}t?Z9sBVctaej!M^-sc0eWWQ39zuG7lHKLMzQX8tO zk%TW7K#^-1K6p4+vwqWiz}*2%Eb{LiBn){B&kc->IBa(i_3rOB>gJDrK99kvR#ZlR z#}d>;^GV`e&NPH7x!sWPl3g>;z&f%++SB@|{Gl_Wp+b>I9(HOp3`@UWK?z%nCDg^O zIRMk?J!yLrah*e%nQB(k{Ynm6WFiO%IwXJJ7h?fBK#d!Cd_4o7A0!d{L()G5ddQL{ z$-0DmpmV-tU+G8e6&@Win#!`*y0(W)7JYWE2`}P65NaK`q`_(Cqsmg& z{=9Hmi`SIEFNKO9qPuB)6~p|->yUEY0_s3pOOQk@#6?!~6G0yj+^uhSu0N89%`S2s z8)>}ftNvn<0D+nLn`%7ckm1foT;*`JT4iWvy+z64H00575jT;)rYy3D_JYZEn z;8gOnp_4O1T-}W7M6^>j>O$$xoKeW}m$!rp5czmydhgyHmpZwUIafdaS4f#WRpT4X zfl+oghM3vrR(;#n-~4UzA{tt@&DUlpfiEG=5et7vU5}Q|!Ouse51&%a7zP3Im!{Vb z1`#;FS)k1N({C|v?R*}WFxqt$pmqHy#UK>)gSOlbN?mjdHhrzPRtPlpJu{2;&Rfs` zy-0b}2lnq#P&i#kwR^oEHZ1*wOkJcN3|o6?8NEx@uX4`3A_Vc z5A4;LMo!TUOmOco@cBmBB32lP@VbTY9m;q$W|uFYGsAq+IKu2h)Ne)|{10x!Arw2F zx-aS#*31?e>RZlc!7(a&y{1y*o}3Ejv3c^8W|i>9c%5?{kNFGzDSYPJ;vptFO@m#g zy4h^c810HAN|vB!PkS(yq*R|k2F3n~aDKe0|E%->t}U2b=&wg_*-DeR<(68YpN1u1A#qQ+hE6m&DV(Z&NW^mWLlT$U{$m7B?_Bi!5{zb67q{Mpi>KeFsiMGYG!<;2odd0R4zqX!+p>K(5_p;T-%3T!LUrY#evuT%k`D>ZJ z`1N0?9FbvMqAyVKMLt@^Q4KF>iJ0$0_Z%CJf`GONnZ5&PZqSZ=c0Omcvt$i`w;gDj zmd(E=CltP=!C#1D%uWF4*YNvO6&3!ZQ|W5yh8KH<8l^l4mCAnYL`w;H>Xb~52#M@M z8y*21ZLBrRT2!UU_qq|d^XMw57+OdzXp1*movdzO>SpK{X(&3q6soVgD-MX?i|!O5 z!VFuOw+>6aFjMUo-SumyxCfxMwcP!vZGRpAt5AMFb4l!OqbzQ$K6D*_HvUqzgXST9 zP8&y8Cw0YnKkfJ)YR|C>ImokPb|fV*aM9o5rCw5?r@+x+S)%~`$xf+{e0S#OOqi#~ zci%}LC;9tQEZwm&Y%?c*pHIpQobNT*r`4BeXBVG=(i@vg9>8jENQFyLGD=SXpvN)& zRD_Np;H~WehS5~&?YPT#$wCqvGizy^%}79yX8?*R;V!Yjh$~eort&p$%h1|2;8359 zfL~7lYVOnQiLwCSZUw})hyWdm>%%h15l7dgN~>Szj2h(LyU}Zh8gp@Nc<0t9-U6xc zwqP8n)t#p64C*oFGk|8tq~Xz1=1?q3!7!La1RIh0nm6h!(P-x|WKRYqn7AB)R0K=l zAR3vr_0g-*vn_htL}{R0$x7dwr};_Uh#ZI6PSmS+22xzj$mrb@E~bSID$+_t!&$sEFAn5`~Y|CPY3t{8?@=8z_UTD6U7o1-lU)EH`k`v~Kj0 z5-HT{@wz36BFrV!1)TO&dSj?vu|KQ=4O?Q6iHs}Mwbl-63#(ytd)=%CgHitbw_pVG za?oXW@D+52tTcH5Y$5E7xA(8K*;*i=; zwz~n?{}Z!ZwVPr|7 z-q@d+v)!%GFYgV9mGZ=!y!;Yx*-8zduX|&6Dl+Q7!EbL>S;7|+adP=$sr!d42ei>6 zi)Iyp>JlCfucGakViiY!HWqZia{Zw7B_D&>ENZ&hocg`|sI}7hpnHYA$IxwPyJ&xd zzaRk%r?6u&`c4gp(?M!L6ykE9*neh!?M)M5tf4y^okT{TaZ5T>=6~V#-FS3oF=lXm z8G|aC0M$GHlmG~e>55dT(7Qdl6q$~Z8?InX7<5mvSyr6fz6GTZ+8#Hn4t?L5ay?zhN+&Q=OtcMfQ!lTV4kK?WpiaHL#bN?uEuRg5wSbw9U62qW>aDVG z=RwO`S}@T?XtQmM!_wLhy#U8QKobsFR4bAw1HZ4WXcLINPVp_51#givju$r`QLw{?|9GnJ8&0x zgrytf&O1tsbxOV;DBGs6c0NWH&2EM>zYPA&OU9)#2Zh`8gi#quQVcn@=TSl@&T&*O zBsf5#rQEW@YB}`SX=?F6$q6T?H<&Ix$X^DEJMp;V-=$OR*^um*iUUaDkL4D2f_SCi z8z18O27F9hM=PH4^(uZrUz;A-Q0K@3ic>_vVx&ZLVD!n=SY5{`&K$H9*G)ex& z4*{PAkxQycCj`Wx8naE^3+rq(^0)eg%J=x0Nk8pyUh-O#F7QTpdD0s97)4^LyB`7* z% z0i0NHXyki*i*`J$KHH9{lcyJ_!y%6E+jzD-%7Z%hE_LiijN6nST(l?VvkQ$#hvz8~ z$uzW{hL`Yt#Ad>#(I5<7v9YgTxp;e-BHRx!wvJCa_e6rB@33f;;3=(U8o-sS3c2}d z1OIHIEwA#_!H3BC=gDt(+)ExzX;TDjXKoVEgc^y_Wl_0dW?lC;%8yJLmZ`uhM>C#~ zWrj1fwsRo6;THtS;>9uM66>iIsi2uPEUeirPA>d3p$q@`^-sF(JA@kp*c z)qz=@HSZsqdH@nmMyh=2fA8rq`0TcZ2wZRH&x?O(fFg$jxWVL1Az$!0RriwgRmR1@ zfoP{CnOCNJXMJ}6uwrlPsawgd5l9QEvyu-!R^(7J8pD22b!xStd;0guLTUW{;Mrx< z&ws76|DRiU>YOOBrHA@gUF12C0$+VjXZi&In(D~A-*NQsm z{+*fEmexfS|1vhn|NTYgr^LAZbpWI0!6Mf2B(>&Iyza={M)5Mv(h_8Y`5W+~K{c8* zzLS8uS~b5F8PNK%U~B;G9oJeFlB+Z|*`CSK(!6rgQaYKMWc@!aL_*4H4CU-W*veUEOf(#_$N4X{8)#}98C zokFwYtan@QiTPa^fNniHYpR)7)(tnn)xa+}C>dOswr=)A6Nlnuj3;yOrOS+PB2&~^ z(jS4K=i+0-I7TN1EtUsX*Ab$ z6e9YSHl-r))@4V;%hx1YvG3A(>V9CQPw5snZ7~uO!jR$wuOq=D2-p7r!7vF$nSZD@jxEl* zq8ax`De~snzJC4#IGRu+`*6rAGXd;4bTI1t{;6Al1L?<=?WP8cpGH1Okz2MfNsxUu zBU>LQh?AM9Y2*EMOP9lx`O&?r{pGRr9&$VqhBml%>TZ+-jO2-~WApo_eJ44Tpr@2y z+SPr+FODeeS0o0ZdfKPWi36?_*HnzFWI!34B2p$WiZqrOX+Y`q((JR`FKPhRv@)53 zh*-5i3z<7jBLpq=)0Y1<&8x7yY8#E(_@KuWwQh81n@N5~2zpu9Zi*FYZNZjSYQE0A z-}z^H#G}i(IF)T`krTMs8)qXK zPIb$5XLqyc1nnrcv@G}`flAngNYS2u>Yp&~1=dHzYbpX9s%6H^K5uME$u9KJI3s;= zf#QZzO@W-~X_Q_3njRFwaZ9OAW)sOHq@nD@0ZT1Wo$CmgqyT;ifbSSm4oFl}#q{HJ zcW!zw+(EmR9r3)4XG{)r*Xy}pILA1&iov)d)$_z54H49_u~Z4Yp{DJlLU&~9V#Ozu zo1C|wXQH;<(E5ZhI-6##)WOL^BcuD2Ifw(#MR;`1V~{p;wjdvNAqB3g*{i9lz(XTp zsQUX25jEu>mjsE+ZmwCVq@NQnG}fbLkRYFNC!fE8#uPnpM1YKzw@?D+G<$Bo*iUZq zP6MaJe6U1L%4j2RkYfn%A;R`j6oWbYL*r^a`wCIPM%)mHS}VlMWMXEA0bNJ`iN_BZ z4IXPyfBu8BS>zE961o?sYN*u8-jw)9?k~qQ(Zf7XUT+W?oH$m{^AO37o1pM7awv=n zmWZ$l8k%Be<09o3tXnTIz8eGFE1c!J2lud&uqPFa#BbF`l zZ}?R{q`zk$z!fF+H~NPJ-CFRtG`G!uEg4vjxi@nO_m=xx&r+)-T? z4@IWb6FHJo)2M_@NsKV|j>P68^9{XNeboe${%TO6&56=LdWv@EFw|s_*(gU(Ir349 zcONHCE5orts9!mzzK5h#!BJbS`R<_C#7dC5v+t{HHycz>eL^b#I;UxTvCCk(LSK0T zx8I|mJ(*2d<@I!i>>i9U?6<3cLs%Y{? zk_9R&e0E* zib054^_nDERV{UO;0Gyq3vH1RFb=hWhMhu>&^zK>z|S?TOAuzd*8OF{(XqvGVF&Oj zq3Sb$`O=39{!m?lRQ(1(xNdg>hDfmxZOx?NP|eHMPGWyeY#Nle?k4=00*Gb?lKWax zdy_yzqm@evq8Wp^ z4Hu1s69iOzS2o}I06Rb^#RMx3bVc2&8%yZjp2YOayQoOB^T|$@B3EGqjCQQG_QVA! zW#!;*!7aE-jp8=Ydk6A$;wSK$u{XI4r`N2+OzE%D;R;hq)36pU@dH(RX{r^3m! zl(l*onmfSLpMgYCEB=wKs%0%J7yFG>i@yl?pi{FP6_;@IVK!0*D5u z+vsmt*x++=W_(6B*_tnPT|f7`5j2AWNdj|Ri;~^CC+h=<0Z&)oxopMd)dku27vbL+ z(jDc03n0f^A8OomVjB2l6up8}Y6c*)s69od7#)QJodS@Ft4(G~0006mK>(ndW(e2+ z01oN$o%2Ioyt!4it%W@&(^M^gIcmYvr`e38G5A^!dE{@E6G?eZmLb5zO#^e9sFa&d z1ZJUsa^%|_b!)a{_b#840@euI^18$P~CWA-&_xE#_aptlwT)_^+^P z=CclflgJfsAQN^u;dtAc=7em9KL|OMA0umu&G}I@K9|9M_9rdhyED>2dW+?1zy_9G z1~oH+u0eXc__n#f)gl7;oB0XD(Yg86xj{kmC=l0@8XF)rhRjSN&>|Alsnmg-7K z0ie;w0T8Qig!&QG%+jqhajVHc!5W$kMPN(crV4-11Cg4tCs>chonF8hGDrnSg09!&X?VRg#qq6APX<4x z1jl3;cE}vn4LJ}7O9%7Dmoj3J`ERn8NQiw!k0c=A4#VbjSQ#(*3LwE$iredMmh_>9 zgL*KupJV5bCOT+_9mrU2Bn}~_1PJ~}uJ>`YnvG?o`iMc71nw@j4}FM#f{e4Hko&Ia ze!X1!d1ar5>+)DyW%8biTijGs#1)d6E8aEPMLqfAa37!b18F(xnn2hUsMd$idPp49 z+V1ezyJQA4P7)c|{>2o0V2PJaaPDuUs`ggQmh`sMb>x3d4LJzEbYwd2av!0<}Q^OD36uHU9ur@y~w{1*!3y zgSr%S7!#9n9}x{=adce{HKfAY=2KyK0`Zl_=0i$ZdUd@X)_tBN$k4cUyt3>n>WbV6cYxhNUltof=Q~ zu2}!03W)N6Yx4|Rf~;FQ|M?)+`vvlZ4WxxndFll7Pp#UvCmjL!UY;kP! z2Oh{UU^)t(a&#_{mKQIeAKQAqt%NoZba3Qw)M}C_E`;~rRwI6YazYisXmyo{N)XQj z0a)F!_9;(a3+1DdB9c=%lit6?fE)70mi#WswKUD~&D$%YxFSDG*d1M-KsZ7OGxkJQ z@t*~1p=KE?LBE(A+w94Rg_Dz~$ z>IV0NkMvVdyLtX|p_qfrX|FG$T%Hibi1(9p>vxwOm@* z#n&UJ6Pwu^7ogL{u*~3}K=Fe2lbdrmNF|?SLRd!3Mkux@c%*tebD)a1K$Jz|q_amI zJQ9Kwh|<6xL83Ktr)2d}%>5kZd#B3%T+@y6Pdn|?S6ngiF~_4922C&l5}sSo`t5)K z006H+nuZ9s{{RCtAQ9OCE}0H;cXSSOV!xkwjTRwJj?|bvUM$Eb2B`DgBT`q~#Q!$I zKdqllb=8y$w=v0uO4`sylICS6rpHxXc-^sDw@qvJ0>B<&pqRNJ{DfB4Ro!;K???g6 z$Oe^G^Gl@OP2}vv*WYopIs7KBqZBiO5W+Y7shr32qyXyW`65ak^$o6&o?JOkOO;b> zSj2ienh5^5c9gy`#(~l09B8|XUf2Kt0-8YppqhpVxBn0=+E+d@R3HTZA8s_DVP{VC zL4ME=mom{;vb=s1t|x$mB~6#&wP-}^b@6dLRNI7LzPf|s#f{P#IzA*X9XmGEHMmZK zRtgf$zYW@*sx$eQdgf{qJI~}yWYnCw^YyWS3V>>pCn{7-+xinN{OqN2eR)4{=xqXt zQ~ooE@c1Y1C?idC?2=-4W*@h80(}T@ZB~U=yWIrSOrV?YuB7zggQVx^XeeU1GlF6H z;o8&-MV?dPcQ@L3P`{=e^V;jGJl(GtB6zaXpA#HA5DnHmrD_@7_r&OAowaZ1T>t-^ zDcPe3E&|oi*RsWYYhN}GC)Q^#<;;F})i#$E4?N`Qfvz}4dPoU{S63}&j2;>WC<z`{^N0QkmZ)JTTvpa0lD0;@)p`E76hkx*B zm*`nkt(uQD0_@Sm0u8_ocO{-$&8I<15wt^lUh+`0)lfC)YQmus3QcjdG0FS#YGDCF zWu6v+fC6^>??v}QmjW`hHQNhc{}%}P`dIAwM-l3U{9^SfVjc6Mi01kR!DnT3e~t0f zV=;Q_{uw;T=Or0YcMDV|5}~rhMdIt$l8p@J>{5KyM(N9R|;+tC*1bK^CxQG*Yq7aEnk z>!gEdqNufpFRS$c#@lfF*PCc=Prt}EE!&624J`c_rwnu-9m>pg%;}d)uucw|1wlC> zdE7$Z-x6_5zOKo2vBe1ykf4S;Am$5KjR`as{4S-%M3`gLKuQ2ks)68UD>|t*d8Tmf zqNY4hp-@kXT7Z0rnm=XPuvC>MMpn<`_nwu8J1xozNL8IfiH2!#G^!RTZ4{2c%@7h( zFQordRLe1jq9o^`tyIN>w$DDD;vj?ufn`msoF3UmgNFA z9e?=`?P0e%uY#B-m-hWm%~Ds*FsiM*G6UkW(1qL}B{iu5lzS!!X`_O;TattN{ zwAOtt=2^FNpcr{oLuai-N9K)1g75lF2Iu$pR4ocIe4&!HUW17wis-^os-E9s@;r*c{XiQ^+&%pa4xsoa8C^jAS$M_E`AsUTdhb05ZxOyS_h@`uh(U zl19@?UvA?kfGdNn4}GZorA}!U&{M-EIOjpJ34Jwv*^+<2t-BA<*WaS__8SSVoDuHh zX)MG`481MB7CZ_|hL&Mk7 ztyuUVaP|ZTrUjUJtUp@E#UMW^6Puc>0I1yFNDeGoJZi}MgVG|8wU8nN#i@JR+W{iq z3XJ4O3kvu#NjDKsBAH^=IW^!ATAbn-2UBNYUVCEz7=l6<0NONZ0^dw^axw?-%Im(Z z3BXtsKyC(}CaN%kc>cx!dBd6LtlR1KRZ)H6U7s0AgEP+^x6%%0aL(T#0|>3tib}B5 zE6Dm%a!)1BEs)CLW?RONLfLr6x{i1n&l!{OG#lIXtfKmdMqZb8507}`EE=3~itn5B zN4O2Ib?^1g&BxyZ^x6F3SE4C0B8vQaE}vD8fR+lnXlt zULT=$JfGX%Yj2SiooQ#`g%xAlIcFd`g})5xQtRuhI16U+CX4#J$293`+Qr(nrx9AM zZq3t&({pAu=!R*G(exA7%z;G$I|{8gDPFa=Y@HeIHiW*<5@jm6jz5VH-nyJAd)cDX z5n;PfN%_f*-wIQBo0;2sQx^wn(=j?roh3m3Qmx>uJ^x&kjGORG9xTr<2~{|RAO(QbT9L@#s_!;TFDvoHSKbd(3y%8tVanrFT@=KAFE$D==$%|{Qd6`c3NlBIPXQeIMj+JlIn~;~K=|WFNTp<`!Rm!UNwC4>9{YIILmhT3gL4Dtl8d*i!gjSD4 zhA*kI0TY?3$>^3I-&Ez*6Jx<8PF|PcCCje7`+3U8d234&Z@e13FjFnro{h z6a-St>{961q~Ggu%5Sov(R!6)&i6KkDG8-gOQC}Z<-!9ccBwk=)p=3t!5+3mrFD8X zi9_}Ip|spnE4*dQ=R=6YGo+GbF&@v)>nS-(w*UoO1^u)&+KYP1MV3PuhjHuk^|RYI z*tSCQ?*z(Io(i}7lBK?E60i+CXJ*BX1%#OTj9;4BzTLnkeV_OuL*^Mca`ehbfNX7Ur4-;^bg}iKq9ChTb z1UXB2^@I?{V+}qG;=wk@FY@=0AKXF2^l5xcrEn9z)f|@LPO&?x_L^y-KSG+|%FJ8% zI^?*&DFH#n0dv_ri1ANAZzr;^32n$|N)hY9b}G_%~ucu*H6lg34Xu z1Q%Xo1HJjkM09my4PNWENf4#W8|N?>YWBSV9>5Aq;ol)yt%F!x#8QXXs%^b04xGfu zwPBHhLk8u40)-T66L{dBi#t@t1sn_aM6L94V>eS9Cx@a{8gT#s1U)if@@xfcPOmC@ZTiPfssaq>2+lFiPJ4oB4M4j)5WJ+N4D9Wc8Ys`| zB*J5!Crq%5Y!6K)!rAy{6t49x)yi|w?q_0n9qCdwJ#r-Dt_-bChJX9+h@t5c78V3e z@@LG;8&uZvr`G$+MG-II!A-d_U*NS!wI+;7X-gE5%2C-(oa@40pIb%)znN_AjAnw7U; zIqNqaoGi9!RNQ?gBJqBeCBIkBXY%-R`n*z09C2H}^!KdUq&%Pw^Pz9$$3c5p9Vooe z8auK*?D8997D(C{Ab45E0t8-N0mMZAW=4`BmODq>-;5RF$25REqw<>^MJLk6A;t1z zgfk#->?~Ss0GvzDu-!y6v_8d;pK-QgM4T2X3;Bp-kR6+Ad)?bsTvMV-J!xm-PzzG|ROddYh9q169z-y+=(=lyy`kltp_l#{kR>pk{@ zk^_)%n+nAkEO^2?Xc#|g`17x%X;x+N^4mDq!14~!H26eGYc)z`<~p{8GyFRXrw6X` zYWDM5=qcTeiD99#K`nsVz01CkRw`Wav7mOghPtn@0z1mEd4kM)@>x4%K9=R%Ae_6C z9JDxFUbx@?41k zUJE$Y9V>x&p}zTFHINt{PVvgb4bzgu!YTAzH@e$0F7iDL)Isv;VY^dD&$5yGKz|iT~ zlLLN4F+numUZlA6z6Qc{{KmAorwgCmQ;!{xHEd$*eB%M(Pfs}N)@Yi+iKMy)MbluA zzz-C>rspJBuNe|vt$BES?g~dm=dlaI@C*!vesM?r!gXVoZx&o6$j+qStYFirJSDTwv8*|7PzXFqt3__uUM;Mve4Um4mO{CdcVSk>W)|@_k00$nH>Zw) zHNO`VGCQ7{VM4DuH zx`UtFO!4SaGDpM0-#`cGziooq&y|bq%>c(Lkn&s}0xqQAr0C#Xu6H<6+0~frCK|`& zxclTVg#kO07gScgSTv&q89G#AySBrW-UFJu6L0I?NlfA(z$6Qt0m@XUOmwQ1Gm5)< z(aKE)3@uSU#5z&^MO48e{^bAw0Te-+#tGj53@vBtIRvhxM(>#Lxi1h#r3R13nAK|o zolHxIa=?i@CK8{ce^9fR~5vD zeC)D%)`95DGfN2ui&kR43DyC$9=83komO9&x}Fk8tneP`8qwgqJsrG#)Bb+Ol|>a8!!a^gUmf zek^8sNLN2h4QB44tRcdr;wpw@8X z{DLP@p2|aM5z=5n>bckg-o#X$e_(*23qmaO!YROY4Cv3z-WcOQ2_yc7ja%e!e?WX_nJ20%X}-~#ypmtN++#4F&uwrkB+`}BpxC|5NK6ct&TdfSYa#Uqf{Fk(L9?I zQvEwpl0<+-bDO|R9Zw36x=X&c0b+Mx(fP2R?rj-s#e?)DZ$%izJP&BSpM8I;3GcBk z#goaZxy@T+(2N7S6hb{7Zru^gEAZfB@o(yqJR<_0fMYt+L3a98{rgxw3)}i|DV)`o zyM1o4`>sSWVEpE73DhpZcOeyqs<)K|R2v8G+$Mj=_!YDx2PEp`RH@SS51gWHwSNri z=den!Z7O&Gb)qyfN@n+Rrp(9P#=IGk)R8W@V-dCp&$ibzyetzg|6n-NZD}3%lOv%w zYNi78=#&xd+_Zb`aWD`O}p1+bdg`F<}j*F*tayz*9o zd)%v(csj2Ls+YQ#vAov_tSp9H-{cngd@vb{&?>xYJrIM2$?Y;T{TZ;l$<;2-yB^-v z*UN(VpegGYd7y8&vz49bSAwxra`cLr^tu<774P?JCiE5C*-_2=fiEb40M?*(1l7&5 z^0hPiQ7o#je!C>rcGy3asaN&w?B|9lc${F3m5I(!P>$bktbltr{TKYIZJ{*$#`QQ`kQ z&Ang`08@{Dj?9{BS8!eWS?|j$7v8y*ZASQq_mht~tJR zeyhe0fu_~%;mJNN1J{YRV`NmJepKn7xF1Xm2Q@T9)2ooS9^)C{TW#wAppekt_eQL! z&h2!xYDoB1Yya#9t4`tZSrMa_qG93H#YA>n*$ChtMtHDb- zN(U-%$DrqiB`7;8Jq8=4E>LptTLQV8qz)$G(GbbfjGmI>e&QUC#m?zoaBm&dMkJLO2Xq(Yh*Q0dm4){90@b3~ej@qs&<;BfoF!MeIFk4h)+xgE+Dt-!mxbmuo(?vf z^3rAczsrrXJH$*ObaFg6APb>7NB13qGFI9yTl?xH^fnlyR_cAX(6s4dk@KG!brQww zl){RamRw+DnCg#VBlBD*sz+IDyW)=|#fg-KOCLPv zqk9358$;dRu&)n#UV7yT+Kqh7VMWm1oUsqd(MxoffVa3R(Dcv-Sp27KohMRD1V14~ zxrc>Eg0ZwxjO6-ro*+&h9JDxqDm6@qkozUd#bMfox~noF3CT>=&d~jO7alRc1NKPI zmH%IES!>;JSB?eD77~ILAHSM|>A+$?&&Z2}r3oJ0Mg~@iE5#bTcRUm4h?giTJtQ@i z@(xawF0(`c00AsPn&t^#02h6&2ZrXoLar54g?TNWPtLqztsitCTwE^c6jHO6mqUP- zD7jVGuLPLW@cVoTWt<;Z=zED>_khJ&)^2)??7>elRvmS0x1xCPra*szNxR>N$H)eA2dvCp` z{}0r`x_EuK>i`q;f^r!;=d(-*Z&@%XeJzMWU}lhCTzk)f*~XPFbIURZhfQcFIUe4!h8n@p_wUVxiFh z00gl?0HB)Y311;EfF1DmNmY>(FA?9cJWmbs5Tm{6%+KaH2J3e)hgN~!ni{Eu@?`QH z`PMln|B)qxq)t%DQz3a6I`nmcKXO;V0y?Ub*w!0LjhA-80a&s`D(mLgUjcV^v;>E~ z%dtJdv4UlO5tOyt@m>J?5_72eL!&o>b9ok*6YD_)t@6(#7?hTvOE)YeHB`1&#cM98 z9R7jz6N64+&Z;eSg6^NnQ!vd&s^h#>S}Ti^>9n)TJ^HRs8mU5GxuWq(qN1Fh9e5jd z(C#kI(|QJ5Fk|{`KFEa}DznitqwI=2G|T0@A|7}xi5XAOlq+qpmm-J92W;~C5ljGN zvZ*DMh!}+~073(w5WwhSDk+!j&$c8A6yGNSD$-HY1_xa*HTY!)nmL;VZa#9#NxoNk zSbkW5c$Bo}>%gcFES+7{@J}Q8;qV>k7Ec}(><{@cmne@ZS07WL{`Sxwc543+J+z+k z{F=HbItzcODXZZ#9S*d@6*ih68Fvk{`NY!jz{YrmtDpLZ;CIQOxu-H<%Jn-n91e{3U4sAFW5KV z$A=!ty*nWuPCDliB0l*~;*`1)r(28hmFe;jJE)Y)uo)0z#B6(G0*zt{9 zTXm7NhhH=}|BW#pg~f0vauEMkEx@P6HGa4R+f2~j_c{4XFO%JGIdx11# z3VQXk`0-{rJGmagnGrp>{E&mtLNR*kKhB0+K!B#OF3#c7fcE}tWJGmF)x&fj1!i(i_6G<`47o7T%f|!D& zwq+r5k?(|U z^Wo(7K%LEN7Nn*y8Mp2lZboHu#h-eeWXTZ2GAQ7^$zZDZ*EUFIm-FjvLdttl=Fg7t z2As0^mTAoJO@Am2Z_zkdTgG7L8~BPewM_f;F?=+=ZgX3I5-;G+DCac2zA3>0Mk*Oi z-*}n|?rKj|Ba^S|p@;Mh3&*PeS`G^w*0TqV3;*U^2?`1$W5yW2W@bxf z3g4jX>O8+`Y@{M-eROp5KH7C1X9UhwzLAucYM9VA{H3;;?N!6xG9v<{ zD!n)^>q|J@)cEa-$JgKJk6}s9a14qlHH!>R`xOz=#+E6%T~6YI9-m>H#1o_^?`3-_ zU@g|ZnC|04000IMK>$l8xq?^!8j&wsV?sQ8pVIB~cRbt3liM*BAR5CYI+QF^D-O!C z+SD0* zgZTU$m^X~K|X`?32W?MnRCZ>t_4a68516`;75_gHl)Sl)j zA!q~2tKS&vnagWZnq@`K{&b?_QgwBGsMt7tY)rJc(+%}aIJ$a47Gh#e0AI#cM!HH! z=%e@&TwP)X7Tkqcl0gL5n0ypm(>>n8>V6I`!u(fMf%Z;<=T5#EW%kQ1XlA|nR8-#* z#SktPHI;`VfhM*(q@NfM*)o5P%{B-{f{%0u?b$=+uT+veX}G;Ip2+2)1Wp-gSvhXUck*!IDX| z^+cqHzBJj!RN{r3@0B_FQB%;kTd*nMMe+aJd#Oda#A}^y4r0If*r2y$;=OgVIw;ER zVnVH_1W-Mr6-%;htpCoE;o^vkDrsR*G44eT&FDNB+7wfAPQRWZW$>rZXbPFWvniQi zhc8=L1lolUZeQ@L0{A_t^RNUR+@#R|s3h*Cz5s`kw`c3}5gm;Lj7rg=D~I-eoOVS$ z$!ab{lvW5%Q#|q%!p|gkKx@M61hb#6VYRxyHq&{G8IS$3?<{~r`39|R5??cS$XQZe z3}>#KCIG^}SSVvt*~=2Y*PVq*5x^BdxbWsm8Ib2HIVIu2=(E?rm|)ZgOxhH?28B+& zaO^Z+Ph9d&la24*8!|USZ%0~@l;T@ySyWwCdUnpI0MvHd@qjSn!9QJxP(t@B+2T2_mb;E-4-{%>uJHHs6C<}$G4u8M9(sZ zB&^Vh8s%DkL@H@vXF%4PUfUs`e_8TzPecAgPG-k#IE=@3jWmOW5!fb0bu>#dr37PT zNaSG-U0K&B(kIBUYX|^KoipSZgW*PtmVfE64UJB8R4fi&<1-dC;QUZ-bptD8GQd@7 zG&RidLoRo;M|F8@?hjJdppiWE=KfqWHU~SU56}CqsbX-V@fJax_}11fAuP9g8=&ggiFGVN2kUuVI;Wha#?XJ*lM2lPfLiqGWLWvMb&?jCnZKtdvaJ zR#Kqh0002|L7N5%UjP?@uA z42_LD&>+fb$_o!btn0pYm;j>?Qnrv?S;(}5Kl~OceOzw3NnjZ{Y~*;bzU%roE?RG$ zy42SebwF_WYD%|uC8yj05ia$q*{_0fLKOXX=*mEa2l3rpFCN9sc_{aG?B=)_Y!Rg& z>tr*;K?ViH_-FAI+!sVla7?3BkweD}j#zBmdfLUZBOiie7!`$^DSK~E_<$k_)h*Gj z000E!K>(ne1_@sxHR~p6g|N8bS;v9=)2R@i2cXFqnGXcdpbqoh%*Pz?d2QIvOcLZ{ zOBg34`|slCS(Se|fQ}x1YcE~k^|-7oo#`4kTjN01wo0jv&EVs?-fZmf^ZaZZec@;<^rtKOl z7VUMeJQODJ?tD@@%ItQEckC&ZbrV79_^drK{I|OONbqH?j>E-%#a>s{Y(Id|Ei_2N z0gO}GZ>UATjf8b7rp{d`_8y;-0_o_bB^!b*ysgPSGeyI>C#kHLW8sQSV1EA^?*(B{ zpwbwvoR3xs|JtNx>uT1jc5ocLVKZ)akndLqw(Xw8TBES^mgu*6jhW21TL^~~_Ph~_ zdkK`-JPK`P8<@YJn~0Rgq&ieGc00kNb8wj-4$Q%e6*}H6xf4zXvY!8il!Nv@x6TS} z>-YpO#d*4^V3zN)JX2wlZ3PkeMWS+ooBQ)^tUJZ4KIh3nbb-&)yL<&7DhYW-uwNko z&(B=fX&O_#>#_M@FwyoIbG-t;7>-mT}5fe`S9=3ekkpdU~?zqNqWJySrOudQ0 z<*(ABs{YU!_2}W3ORx20>xoleweM2M!2pP`oJKz2GL2Hf-BO<7Qbs4|2^mjWScz$C zjj(6~QQgR~l&KDCIEvL4n8Jr?0oxv3a$-_Cwj_vhjsn~xVv71sW|J~rIpr6&+UMK^ zkx#`VdOc@e&RdZ0*|Sq5Bp)oYzVLLs&XUKFC6%1>{}u?#5iTBS#Ive7a&#cvO2Q+9 zY{^}Qd@dDrTU>E3o4xt_+e!CtFzb}eZcpqo5DPQmqQt_hwXhjGzW+^sDjv$>)wO)3 zwL-+Y+W5WsNIyRnv;0S4yOgf=*-jh+;(MykU}L_EJ?R*kfxlL(_l6D|dTRMAs*K|D zWsyqZXV~NAN5Vm0mvgx!yxgm3N6x#mRlR~q*Ls^7vDNeCi;g+^VJ_G-ZH+!}k|4R| z%DtwYNneU)8@QSNZ=H+sE_kSW`!+4JCWyRKFs_6Bh!X6|Z)WMy+i6`6lQkEs;?F%T zu2nEGch+}YpIQ*uTOnx=ReYwo^3AE&;cRla2A@0_DNWmfok{GPkPz+&=E#R%#Kr9~ z*41UM5#(!&w&31KhhE~-b<8HNbZjl|x6$L$HdG*=WsnwYF&U2tUDbpQl55ZEDrc$$ zw_BM)oA8MdM-)-edB?t=Ldj27C;#wJOJ)JuU^7uQ)xdq>wR3#iXY)eTbN}|*%1`S8 z)QZ$6XuS)@s+CxhieC@<)BUi4ER4|sa8xRb?bkzUcfmCTYS80>SJS%2>cED|DUSIa zxv72N)pwKuYls5HRktit0;_uhtIE0r zo{htwX6A!p2@v@6a1=%S5H{(jIJQ1QFlXW=?PKpFN zCyPYaBI8)`000D5K>$l8!Gc%+A~owKpGGPrKsf4sF#CA$2nIg6%(vKBzK|L8t!{_m zO}bER7@~Lc)ya`kh>l`Y#qnc;V)?7ka6j~i7R1e%*o#!k7z%p_6~=QR9c7i1&=_Dw zLj?iS%sPjY=TG87>M5YMatE!~K#7isk&`ue6kDXOlau5EjDtjGzbK+eI-^WHx&m~r z@Wz?JX$Pi8nbIcUNe|pWR^&_~Wy{9l_O1~2t1lr6o{Cu^w3=2_?A2fF9+e}hqev>a zEw)B&bFE5P4tgiPa3Bn6U(FOpzs4g<==&+E29fT3#r!~&Oe!jFBcfkPov0|_>f}nRZ_joH@n|Vx^KN$BJ_(L2n|QWGWY_D~ z-E;Bg2p72+sqOTm7Gik`48En`JA4Fpa45^jHl~28IiSEq03K@Zuo|OjM0+p3gy(7! z<-jtg174qTOCceA8l7@gGtSKqeV5`wb5QMdlVpey6JFxO8~T0Y;$n363$yPP2=-cv zkytebNScrzM)Lx)XTcdoB>`zS(-zdw%QMAm?xE6Q(X;Ik=YB+$YY&(uzUaTO4H3ci`QeF5qRK#iE z61h-6ws{93Tv!An`}xa>X>wLdtE9YHMu zmNCWJg55XpknJB<>?ZRcR9*HANwrEIyaYdmMc<=*(|vBQqXswjM=8yJ^uD(iAI;|( zl#m%5j@MajPaET#MvNU~+T{Aj)ShN_R07|-pz$nVeyi8<^Np|Wcv+qbfcUv;&ueb0 zt^DQ;9J*{z6vt68(?SZ%3-~vrr39e>&_FN0EyFNY-%7#T=EV?WKC!{ya~7NWL0=(0 zraIKKk0dTgR~N8(Yd1*j+2M&cc^~)c-o$^6={15ky{Scik%Ztk+$!x%4!$IU0TZFY zzQ=0-HBb9B1hw4(X%eZ;j{MN%0HfAN^GS}&__BM_M_Jm-Zpb-Ze;`TXf!m*Z(25?p zyw$~N1ZQAah&Q&B`LNJDV1(rZ`Y&bur%Y8L%V{m^p{xDoR`{{c2!#Htd;lJ%o4484 zCdQaX?kpXfnoF1kJx{Wi_b{3p(GJdIRyHy23T@J1G>4%8008Mhn#CW~o;ym)uehYEDXA*&+D)ODoY;;LzGCSTd1!z&DT zWGJ8IL{C=~_T7W3WxC@Wqvbf;hDHbwTWJ#N37H()B>5WlLNA*!8GQy{U`*7738AKo z8ej0Oq;o^sNVvTQ3Q0L^+~OV$D-!(neCJA2}fYN>6o(b~?d@bkQ4=ZNE^}h!?MFNGsm89Uy zi69Q&@A~R~6&aFH{y$Z416lQk(YC*qryi3u3>zTpJ{cnM>jcMa8&s;TPS?5Q6HHwy z$hcuTN+Nk%^|NvA-BiHT#qhK%8L05WCevuXovj0GC%Tq<+l5LFbZ)4fu@fnf`?UdY zkOA{aphwy(?5la;%FUw~KGEj34bfjWF;LSb^*6UiL*zda<-M_&coX(JdltgnoKeh?h~XMQA&tulQ4)@ z>nv(31}gS+Hd+tIlB$&49$iOL#y#@&?cc;tV5H??wVWRO#oK!Yzgd-(v8>Yn|F4?RO6v#@_?DP zWv^P#975SkxF_9_VXG#D)Qx>#xoT&In`_$>mjIU_{oG`XA%R$|=I4GL0D1nc$;8~* zK<}G=c}+7futY~**!G`Y%NaBKq`LjDaX4XK&a@HVqvmGuPkCnrPY0CE_E*c%K3u)?Iqs-CG8yHR;x!;U;-2QS0?n$ z2^W;!Ag?-orhMtO4Nt`9=zjj&vJ}f!)xn*8T$XM6by*@&tE(VS03^f#RIdH#F`Wf; z+h>tTKsnYa0jnq+DslpG5D!`}b(HqRExc8&j5kaFU^+L%Fe-KGj2op>ag=%eXxwKd zO}ji1;pl(KM|is%@i*JZ@Xd6F^OCGUpPfFN54Zf^4F_UF?F1TJ7sYIAs5dGX_Xl&; zIQ`yzI=&y(?1xY9+8be#HeT`C+v}4rkw(_7F8TME3Op@qrZ2m1^gu;cB)EQ5+?Sap^O{{%0cZdRwcTze{w{mck%DN6hfaNUedcw8 zx0v=NkMkzzd7BMocX?DEVcbg{p8e+Y-9)A?wM1l%gH5$=u+*a$^)(+!s2(}GHtd~@|MFpn^q;n zxU?1bENs^!5WO2EqENl;-LqVJ&iD5mWl%P^skI^bsV)1ZKYpb(cPagS+?V`6HNfhgry)mlQ$!!4g2o3>txdxZNd=bXBjiRm;0>j z;aez2M8;XyNrO}Tj?@mPvOX66xuL~Y-t8Y$)a6-^v7k6owuXJvsE*P201veHIBF@H zIUry6_}%y(H`t1zFzErQdu(#cDc++J>miYzd<#ARRij_qzWGXNt}}}S?=ViBn%I3! zS5PXIbN~PZ9zg(0Cdqmn}`$e4#K8z}fXA4n1hl1P}_l3ER;q)HPhCB}pR?^ZHxxz|O{zJeIv}#L< z&{s8m{SA%o7`VoID(gIrB4v*(N)DPVB~^CS@6H7|OJNd;r7%go1j^$d0*e+uJWlVS z+F=kEtU682pU2@F;cdC=J*_~e^*8G4& z=j(xrR_naqp_4(+N>SFZ>H0|Q4uUojT<9?&?>m}kI4AH~LQ%fy(b6FOu?;5P0rqSa zNt@xIc0oJ<@O0*e!t(xFkPZBiKgb=?H{zJHQLf-zWFcS>D61=AX`mSyj-p2&fa57x zs(e>HkG%V=QZi17RUWR^karfg;|nMP!f`9QihU0l8`4T?iZ8)s%%b+B3J&7a+dZ;d zPDAs|x^G>jY<9tIIyz1^MF-iJ&MCCdHTRF>T_;v1CxETMz?9|&e$!-J8U=Ba6qwfj z?PGmO2cu0@l_eHZBAl|DLD8!((Tbds zSrRy@dKkIIWRCtnP|-{SQHp1+DH*WtcVLqEYuscSLiONI02(b{AjAd+>BB78MAjKZ zIPYD{kya{N@R^91RgW0g1y)6&bA22rIH{^amb-{*Gas+k{s5w<%|b%f=(})P^dckW zE#b_AGWj{hFQnOq3hTCvSj7D6!3Z18$nI3!|!OIp+N=U|!-4Xg3 zm1E(#BQwH^O-XOCSqb%BAYxY=tF!3s&&8N_+{x0t9?N3pp1Q_1L=@#?{9e7HP&uI=c+hp&+Yw$m z$uG0yvse3_+}M0r+N7A{s@{Ekzj>6p_$X*@6=>Yx)15SD=o>C>{0IkaO5bEiXAPgj z03XG(u33o4b~88GoKLP}8v)f{hS*2|00A^Xn??y=02i=Pdsu(KBkDzpV@xVxWnOLo z?K?Gk*ip!dAhYtM1=3`>h0m70aH0dFmK0me(Ad-HH&q>ba&yQwklzc20}>T5HogTW z$zNect`vTQvfnDjXpNf6)y3*i7fBnK(BCP0YB7FqB%6}~#y$&MvJtZWPAb*WfYx-; z%oDzTf}#Vv{P(z~#l}?A+6ga{)RdFk-aWfw?;A()h$YNvfu+|WDZbZugs|A;vdi@A zfPESBa=_?XmVpt5`29Ox&$Fce8w9u@khog@!JPz7XM;y6l!sp*0}n}kWCp>h%SKyD zomZrkocBlgJKq2*W+{gybJw(VM!>SOSDb{MD%(zsk2|;h;h@{LtWM@G1rAKmOa+&p zHS%TnRZgEf2deFonYUhkl&Fg?uVxuMu@~XoLy$LOH=Rt8mt6jlQV!B?C4@L(CEEj)LG) zO{ph^_WZQ(s7bMsH{&qXu;UUIQdFQH20LDmZwR^7ZR_ za9l!tOOFNnib0}@uY4n9ItWbtB>-r6)}^JXj`1~;>q4h%JR%4VEweIq(ItYVQLAuX zV{g|5z%@`W%rMq0xi0!{OmfU1xzq#)lC@X1i@>-opXVVJtPQ6roWRK#;7Mi!@OH@w zO|U}|Dio&#F}^^c>ehH4?IS@EM$rPfp~gA^tXTodWO6l*Bec7UCaw@2?eUG>b|`YW zuDS$#YhfM9TT?s^H`PIb?ayOYoiSJptg_mKCBdH)A7+bd$|z>cc(Z)>QDy=EVr_LI zx9JFT-82_|dIWTGK^k1=VlByzLS(IUsBwX&lybfwIsU6cLS`5C@SG+iw0D!B9Xn$B ze0CE75cSD>`C|43@=huM4L3GG5zghw8r|Q&P2{qsF zX466mvQK*t*`(8WhK7eLl-SQ>Or@J3{V5)1-%MOjZQZ0vBCYDylW-3>j)PxV#835mYgEs(_7d{H7k&k%+-3zYFgs;!uZ;qG~GKiX_*_!{4Y( zf1j1q+9a7=#vo6o6Auo?;4)^+X0J(oyKGz2z^R*!N96x`e5b025zNq2;Y{Ic&JX~( zj@g)Scv5yll-<)?$H+}7>>Uf?c1I0Y z=bs%v&gSGKri3Igi=ES=L`-J!xaQBK+()}r-bP|n)(d@^T-?e{ovPR@1{2J`6Ud2lW@1W zR^ivn+SEGIoWM#q&ZDd$xjy# z*6v$*eSL=JkS=os+B9%Vl*k=ULlsPqNX2R@p;!U_2b+#fLk z#?qNhit+xywUz#M<*X}Zki#@3tKe-BU$HpnvEmS2R-VG03nHrO9?(c+9Ug#DdiB*mbJn{y?000B? zK>$l8(Sle1A(X|E2KanY|KjZYh()q*%ssL4e2>u&>p54za6%%kv)yMt@3F-+!Nwj0 zficpo3C7Fn+7X<4;^t`n0~uCyUKxH^sC?5i?aFQuoM85LP<3+WWEwN>$5JM;S{a8? z_OPA}sZKu&9b;dc8kEgms>I~bJrByNf1i8yM(lKtg96D1!P8*Q3W+lfMh&+>-KFzQ zvDy)|eTGUQV<5IcXk>PdN##r@<6jG@+(vd+V%~k<9EPcHbjQMIcm)M#f9V*RMvAxg zNu0*TF$|^_(Ku#-_$3RLi8Y*;tPds4CFxPPXdI18Y`0d{&t?4zvdopcRdvN=zQR9> z-q`cIs99r7X-VoL2{T*0WLK$r^>wg9t(k4T6Yr;W*Q@|@NTi9tiA#Il#r z#R98GojaR=UB;1IKB|~=Z1l~ctpEI5_P{!ZV`f2MTD>;lEnPTdPXp9SVR#Lstr>W$ z3DS;}u{>`dZmQ*wtlqXJSImFV?zxZ z24oRK@AI$kFUpJC8GkiV{%XfB%sp#o0aZNg&wYl}s$>PgP z6;O%^vX61LjB&^x`BoI$vW9pRU$?sq-n(JNv)?a;l+%kY&2 z{4+x?iex1>4Zn1x@1_a1(iik_%Gtj1NXF8mDq-4q9>F$`p=$zPI7RE z2lDpK)!2&U>&{h^bVLsnpIdvB$rpZ~Y- z;F#~WCs}oFrNk<1(vBG|Q{7|`9rlW9!7_G-%|n_lZn#XZ zYNkvJy&}Zs{WX-#J<;bn0^R5LAJQzl`j-J_ATOUSwN>Gp`|wM4YmwS&Qs(6>YNnqb zR|jjuuPd`h8J6~k$XIzRDz|8x({!0W=@c9)Q-=h^Jbl=`V?Bg{eAd_GQt~Z4VPwkw zTKZ~8S2mLaGoL}B)DV92N95%6V*Kxt3>PE&s|zYWS z1I1=GSmoF@jl+v02tv*DJuFoTAi$3R007oOn`Q~$01Pc<;C}${%>IWMk(hoXMoG&8;i|YMsj2DmN zd2fnjWm6qLz$9MNdVF5DUnIYyVC{)Q^ym$?H40LYW@G?ZI|&Fm13>jnPN1elg@DL^ zF9&bx9&xh9Jp8~waT(%5#A=ZD>AZExndKQh8*!qY`1}oL0Me5%LBJdg;$?#`?mv&y zwaG`{yRmAr~m*0z(D|@n`Q~$7{!Z2@KhaM z=Jx_fM^{y|GsD+j>Y9e;Q2#adMy>(hx^B|nxZ*E_vg@-hLfr|QfVpwvhrU$QI+vNEYB+Yq)p=(n`*6`6X6 z!Hm(1o|=HT>Zp$Z4 z&A>(jK!ju-m_BV>%19NJ+ny6#zB92*agmNkR}i7A8I%E|jMm~{YiDejV8 zbiACSAqSH*fuAo~^)|6?jF9%T$BV#Ir77pmXBjA<9`akRwpiZ6;C2%BP8VS$cAcw( z;Cx(fyEY^o6|(2_A89ro)QpdX8p=fV7P8U@cggJ=ii@xrWqyipwZmZ4;K7g_GNw#P35 z&EZ@8nc)J{!UseP+wgTYE&wdX(_{pM%({PpN2k&K1UDztC;wTNuQH?a`5bQfk}KdA zM_)Fd9I7*_aX`k$5wxCIo##Hega^uBYWSiyjSI!&?*L~6PxFB4uFSyLl5OzcM}hU{ z?>+;noq9XP-n}f_BM(WUmM~r{3#r8-8sxApZ0DPrHTO&-#Ha@X=tSq4=o!Q4qeC)Z z8!y2G)dR-T4;`&is;f~GXV*Lc006x~n}!MB01Pc>r-(dDiA0PAdXJxKDN3MrK>|o> z)&jG}*}y2vKQ`r{Sivap5U^d!+!fb62B6&eOtc5!wQt55=2&?uG7fNP;+Vs+OhrWu9l{o<;`Wa2LS zew6~5JTKzKf+##G^btXG1^M8e2<~+{GYt}HP)HgGcAVEn;LXaVlU&R{H8hvF(+MFV zB*1Lp0008tK>(neh6&#pw{;O;DksQ+Pk@n6jg>N#b>?A}MVb<)i17X3Z-#}McR6!` zEVRzwWa{N-ud5UD=L)2%ycCqDlvsr2$$yw(J#=y!7hrRWB4A-h|q2SY>!ELUnmmGS;urkEYZT<*r)MS~ucpD5 zq#qy`!B{Gglf__!_fj9VJy?+w3yUFfyQ3x#VHO0=Q=PI3z-9NE8A{f+eWX|UTfgsz z80udQCZE&wbpsNX#+&V`b6*M)Ksd zqw%)5YK?HQE-1U_yDNk-dD`XK6?Baz%=Dg=#d1>B6Zn<@`U#(j8{IC!$y%8DqU3gb zn|8p(8JUl)w3#@=E*$RZ07NohFoK9gjHe$KI~&CRpPH3`LH6TdqS7UIISVu8Um?YK zUlKnaKO|Cng zTsojH+PTc5hpDKfpD^yE`-j$lV;L{sDNmD>%=zM|)8x2h>618D?(ARb;4#Gi7fTm3kq^z?pNGV@M+2d0AbSd1kh{$H zV9DCGbfypL?Vf||zf=a6?RbW1WqR-5y~{e%5xwvoT?t%LS2 z4<#m4oVH;FFJKFt!K&5l37xNlataZ_!TDQPV#alfw2*4q2<_t_DC8LIA+(W@>6K=< zfqgsuck;&Y!x)Ru=>DSiHIByc>Lvmzn)o{FmyyVQWH&GdG)RrO1fm1;OUxfEA=ex+9K_JQ_XujQk;Ecg z!d=7&Mq~AZe&&jZr#Zx7_$8?bdIBE`yeLc7q;xr%Z3(eq0E;QvqN_)pO*8n;)JZOt zv1~Lq?Rk#<8Adk?5XaGw3NY)oGM z`BMkELTR>NwmrPBxd3oSkHL&8$;PE;ru)|b%%xL-B`D(4V7u=l_iybg&srk*q9!y; z;XyE4h@?-zxag?C9wu#jr;d$~dWu-W*gaI4Jq*14s-5`NqnTM{e{YafZ)YnpP|AND z^|Jn~%+eMKDKTb|cgsJR}b6_plAMg0D+kJpz{zC{=qNa?}d#yb8u*B*gfd ztci_bI~xn?Av9p*YDa1Tm61)Llzwv1eT%lgWO1^72t8zpEU4iK2kin8%nPoVX7xs0 z+lK+4H5CZD^RMoRbxeFAPpM_aB3Cxrg@{@q@p;u-{86g~4+L(g-`= z%J(Irv_onOy^7K*-l)0~gT`5l1OpT~aSYHGcG$XHMOGBVte2c11g3y#;>FR#IHhC@ zgjc^Ie-Kdu;#J%vL#7SBfR8+m%Yp#B17yqZ9}3ixB{hs8LP4VePo_MxZg7Y(2IKD> z7?O5h?6-h4&o`b@)uN=GBElh=d#+)mUYoYtO=ZfizHa#ObrTllPmLAF@J{mV&aGy~sHUa*eC@3w3c zI!V<1Z+|*>JO63vu%7;=to`Ov7Xg^wd1#Iq0001|L7S!t-vA61l!8}*KYdzIg|hXS z-%^unKRXXe z(0FDb`ZQLErmN#GNH2CR!GQ0m;Q9+{=hb6*fOMk3E_f}f(r50vfG+9lR@1idJx)pD zVCV@NRqs<-X=xH_vF+WK4u7Bg`^nx>Hbz%LdK<{#nKY!y-;_!|6fmO~@xBhNZBo@z z&G-D$W;R7&(Efdp_bMX9v?F` z?dsuwRJ;4|ia&Y9u{^%yG#29c4!hLn6{HSB7026A{MTTa(#rrYk_t)2)pM)k)4)(Y zv(1zW99EwAI&1mD^i?ZDeh$4(LsSSEbw!yRw#>Ol_tvNZ0{t0pj`s`9wf$=w>;+yv zMO`Jn6NR2JQoHc`osz{p>5H39hF>!s!%{)=zjN+=ZxQr*o^eeD1%Ln%+{MmdnwH;! zjxE>y*EC1!1 zOMU1;nWuy&&v;0D`Bog!bx2cmJ&)_h{&3g#unOrhprO8hs`6JYHWYjK3UO#8swaO)J4RMvXgkrqWyHd51x&cIswv99 zZ_hipIkEJX2vmY$ERf0GZg`*0@$y+-&%V@4T$l8 z>4JCv6ne?o!Dsx`@ZyhmJ{3mq0Bd+Nqj;iKHN}BsXrv@iJUg{lCK!b_?|U?xr$LH_ z%Z_4R40RB^GX+YNol-`q_;acuFOu%puZl*mi81=2UPzPD*1(47v&B?_YA}$p?U;J( zA=_HHL~tX3T#i58cz;gd_kjoFq}S1ZRP@IHMcN3y3`#Ha0^Q!sZ3KzPI^Qk1{;@?R zkH&Qxk9WCXi0Zlvv^yFHb8hd?-uE~mqo^lcV8&h!n(xwTJq)NhX z!C^^CNsO@rQd-)$@+)wPrP21#@7YBLrv`~NHz}1Df1_;$0^$50lsIhR!MU*U({l+9 zduPXvU9pqR7zw%t9Lz=~e9MXKtIf)VT*VpAMI{bJq!O>(^b2`x@Mm~%pf>UZDPydo z;1J$-7?u?>He5jZ8k9X+l|`^6kxZ*GK?be*9Fla<7FqEsi-pmwlS;p@eFX@FJ$KPB zojbzCebSX<;F}xt0U1u>IPT$l6}?axOKp=AEZ9sAozi5eyJq+h;zsA z-+2!-KXkzrbsv2wS70ct#f+M2qGQ(-oJ)Nu`*sMbQR1w4Dh`)Ny|oYyI&rZEj5DH4 z5AD8YGzD~t^ULhHs??68wJ99-@G+tuCYku96i#y^Ff;$8oiLVIlq#b*tPpaPfgCPR zBE88pKHhThujDM4v`h_xOJ~=NF{a>8v{O1RpsS5%45?d65x8p7HefS%kt7BgS1#`ouLanKOGsfidWnz6=SU%P4|A*)4dt3#$o-&&z#oJLR5o8yRMJ- z8N*xqe28eT1MnqyTKlSrN~I8$Ufr}=&ZiT3hU~T zN@ed(IH!y|nzD{7i>Xj@NbZ4)2s=T}DtlP^>ez*9rLtiOIpbsEz=0|D1;uMx9@;4N z+?ngI*0B4S>W=3m(=BFL^6$vaJqr+R9*e94b}3{%OdEn!{InfMaLgQ|krm_xPvlYC zCqJP);kItGum5EMMnbn~p$m$H6P6v>!Rr6_o$;T)QY9R6;G$$N#8PZq$xDx z@jsM8>CET??_=}}ct~;aGy3e;FBzo?jnR-THEYrCtoc|GZ8Z`j!c;1L_xV(WiuWAO zi8HLwzD=gt9<*>Kd*u9sD?qut$Fh|dlEN3?qmkm7gmuZvRm>~>i>&9Qa8!OPRTy5< zJjn4B(@G3}S5(w>Nb@NZPTpny>>IkPPXP{gap3>}0G2_U#tGj53@v76pTr{^#9{{8 z{i8Wr1+_48Oa3JVH9E2wd~gcOQWOVp&NPGJk!cNvbNA@i70@%<_S?!A4CyxA9ZfK- zv$mr^9RL9GA)S^wn$gk9K5-Sr#vo;8I&b++mapHu7;KAT{Z=qH!TFCPj+y<{(u<-n zUpeHved%tQ2zJla^JezNxRgf!TT?hBn5T(ne#tGjUwj)SvWtnn$ zKs;s*6W_;bho^`a!>&v$0RY)Pi_X61O=3C76MZ{mVJeSZ5e&n$gYkQQDz()I(yYub z$<&#qGN++8qqj-g#jE@p?BI4&ja$(R8|%dYIHt&i`;eq64-X&vwCR3LJ2DLW%akWT z&~-Vvi0WwvT?u-aw})#%l(2lp4}R5ezo^I7$a^!%Fj9&kRzHE75`okmP+FmY`c~jw;qe2x7i` z>wnx}?TrV&DFCdqluXEsP4UNEX$dKX+;yDAg~u}N&e;0x#{i+8snNJT6SyKNYs@Q{ z@Nvkv&NFigBSa-;A=dW;-fI;*MFha3^7$DZC|g|~ZrV8G3e4Csjh2h|>URguJWZOz zX3SC`X-Ep2N%#c8?dNN%bphAZHj+fR?i4pc!F0CF2mVFgb#gw7`A74v759p&kVf~& zkw=y-q(rm_?aoVn%$4mD1*q-QVSs7%TG#HSX{aWK$S%G?py?-jM z*RuU0PMN?8HV6K(<|f^<4Fw0Kh-TW+CuudYit0P<VBR~=`4WAosLRZ~%U@nK zE}2Y-7a~L@8#LSa|0AA+c|mO{?#{3q%m80gcC7N;>R<2s;aS|i!rjQiDdG&>4c@ie z*W|tNXO=kQu&o}0Y@mzU)j?T%T<)?{oo0GX-%a(ZHEb{~Sg6P7Cl_qIX3P(xfLVBG zl$gZ_eBb~81Ytn{OD6GxcmEUjvL#ySu-aU!q$%cPsoUIn+pUVMo;U0R`kv;JUP!g) zIf{l(?qM0!j%RAJP{06llPH6Uy5B)zysKaQ7Y#Dhg`S5hR$o38hjFvPPw%^jbmT-R z3#qy0SByGjd6mYMu@rp@o#ZoqC2naw8Ury!>Ap2FDo(IcM6IUdq5`jCTEJIOx6CYe z?OEHH)KG11OdFC;ewCP8>t%*_;VFvx!Q1a0^P#txO?sSAbsL z7A(xT1pau8b+FgbH;as&sXon6#r4ino2}r@xIUD!D$_isS+X^LKMaJ0>>kwNXx89` zc|h&f$L_&B2PS9qXf#XbEG@j3#ojuhNe>u$rLFdudezB}_F~et!MmnFVbn@1bwASw z?ceElLK(4$;6lS*E)bAkC3o`(mUNnsYhrm?RnPlsn>>*^@7Pu!z=RP?!Drt;QtSL@0pr> zm8Mg6>gL4Sd$>sHkh6NP)-6lQNz`U*tf;vi(?vi*v6R|vf-F=zX?@3f;=ptnKC>4e zuO=n5aQG_8Z5kQXUGw*4ZY{w0BFgEw)5jG&lxcxvn}0H%_(!D8*FIX>y=e1vjubv{ z_~nqRPqVNj{z{M6kvzvb-ErIU@7VnyZAMCVW4uEE%%R11VPodgQvK+)O4*B z#0KUVN#&Z$-UYlc=*7$!$GTYapR+i*?!tm=#=`;k3}aK!qFH}xm$&`#va)O4{#2%m zql==SRoS@1kxKoY00!^8bPP)PJdiJNG5kdp*gXdcu~gPORFG9*;|=UAx;x3f-w3KV z7Z@MRFSw5zC{=X`D#LO$I zjkZD7Ix^2tWgf*kKDRr_(;H#uO85_F3=SDJW7A`6D-^X@_8?|@)tC@u4p}B8OrOjx zB_?~hZjVMl&q%k{%hp8xjx9uGJ5l|F<9HPI3~aQ+*e%qZHxco=1GiiOg zFgzAQgc1z{!9&YlPE!Kv7q@{36xyH57&B@pSg;~TgO8ryqy?56s(S&r5Gzlv^L*>g#` z=(m2|kzYmWaT{!%^Iq+`Z<~eNuuJ~FxVmhky_^{z_xjMiCwn808NO&E3A+-2^TCVv zV>^3$jra6G_zhCQ zIOVTRPoWvOI6^}LyaD&Tb+Tc0VRIw?wnxm6;+iG-P0(fXd6WCTmX_}VO#qu)*Ya3I z)c-!`su1czv*Na~I8a4$Vm~WmzP25qrE}njMZMmR4M)=nbq?HCLrid*vXKyarplQG zOHzciP{8j^mtJ5iA+3Jy+T!!<7*Q~aK!h#CyW7|adOtM^7?^F?;nn_%{l(Q>)(mQi zp&gr0_t~DJ8QtA*ens-R*<36Xf{l&@T3+v}$~!>hI;6(P=ZGmrlX|vhN$ar01a?0C z*AcUAHb}DMB%$j{*;VpD+xrhC(3;LY?G9B;eMKvLD#xQW;*n#)3O;Hsf?-C9ikONe&K&6%`@O4b`;QHLZ2 zqk7&5iG4H+nBQNy&&?8c^nUZn$1s`kHQW@Z@8xu&^F5e6h8*)O@QG$2gh92x9{>el zm!Hxds{hon9q(AIxk6r3q@WyX;pLV#0`GkBw{<~#S>VjDgT z|FeLU=$eiU%1!5=2fY#c9IW!=!g0{&1wMmMO6!vwBb8txuaa!~TL;~cDPFaQ7r zazOw~Ci#MQ{}hBnQ2dS!Ry+$6m$;2ryX8hCW~A+_pVq{m(f)Ou4D;&RI@7SH*mSx) ztJC*lkJSPVg_~~G+}N}SgT9;eQ+1qYR?4E%th?`5;(~7U>F5{*&?JJ?vKjFOXHlPo z1H+gNCbwI{D}HjhX$Lse{y(Vjj!bpK zu})4aTm{gt^H&$nx9Wo??~zm_r`a}SYypkD?1Zp7IPkr3Z@xS3pN+%UkIkB5bk#y6 zOYk6+2l?wjV<$3p9}B66crBOJWHB#Dd|6f1Rv{PslexV=rc{hQGT}rvAy<*83Ia(E z1AxrVNxnkpYBGH=4RzpTRGoaUGb@|_U+3lazsd7a_qJe{}%tHk*6LVWL zQ|UW*OQ7`xQYMzo<=gls6~B61v`)Pu=bi(T>G%TYi9SJTzEpNFU#ECAJL>)2(l5Hh zG1lqT<)5&-LURZghE=#$x|~}lfr80FB5wI&?go)c>Zfd5u%d1q7i?@&Iru}*89`e= z&N65Mj|!DJ|6*W+QbL2?EWhL8BU=6XmLR#T2QX=ohD&y1jjc+OX}JpgLH==L)S;%T%&WY*HwGfKkcR=e(b@eJL3i^2$<$$l(gy=~rlSyf=1O}9f#B!m`?d#p?~=l|PBOPi ziAq_uzSMY!H{a*1>VY?M7d(i21UoFaH0 zUD6r_$tyUSSVvn(R(H;k-7e~moR7cO?y-UXm8dAu_>;YY-N(9O%$59N`WJ~$lnvM| z?lI9lSzVsY{i?lx+Xksg08HBDgv)WOqnve996`vCaVQ9#0nB8+6DjE*-eAEBC`R^W zY(LwCD1+p*hTxu`;OlFOKx{$4x4hjs<(cI7nH@19m((jZ&c_Gym_Y##1&V%0pHEkz z^y#_*Ag~3R>4bOy6+am6?X~=SqpZ&W-RDPH1hOh^r`AdpY(5$i5(` z0YN?KjbQrai^WJU;9yLG#q?K-lIW+P4U*iBcu}RK_`FSAu*?kC;j4S zuG^ITDL7$wXH~H@3M>~n1TAgrV6<^Rz$8{PeK6^&l)OVI<4H2d*!JOv)jx>r{?WVdh~^%T315Xk-v9!slOwwryoIzXwQF` z1t6kGUJ(ZB{D~;8z+TPJM?4af*zy98fPfyxuwReudIy|D8)8;DZ<9IXb!+B<<(1(_ z@aKe3f?mU?y(o75eSeDbyAoFxc17~(TF(dL8q=CfhU%!ElQ15=ElsC}Qe(}Y7tae8 zT)|UN8D?&SVS#hr))RzgK4!ZwW2h}PvK#H4Pl<6_0cHOU=4Eb68mmrdJwT~%o3W!e zCEL_^rM^Tnb0?yE4;h5MFkPK#V}b zQc=JYj3@vT+0<7N^hclr$xsD3cDGvcrrr(Jo=j>5SJ59|flWUxtnlxnkbI(?^zs2w z^ySryT#oL)n0VJc!+0I##!dR}{r;Ujh70M{S;?em(`(=`Wc%+MF=+FMjUwW<3$Gg1 zr)NtT|N5ibAR(6HB|Y0ju3eGSe97xUu6GLITWYVn0M9@$zjl=!PeF~=4wLaI{VF3e zFtC*uO!tAXDQU#>z{H)qD!(byx?~ge-F^kAVOH1ZhD4 zOD2JWcmEY63yCf=hsnXa;*E8DUD-$;bMb4{0_u}6)XDV8IdtY!@}gtjN=!G)NYuqUM^3*UHb};y(8g>RZ^N@2$w2~c1vGOP%qqWBcxc?MO5(} zsTDPh9J9_2Ek!gGwUZts`A*L+P`Ym5nKhqE$Ue$S^a+t3v74oD|3jSB2}dJX($|IL z{2%M(&B0z;vg{?_4@R#&h<@}Vl;~j&%v7&2X$0&n?(9UEh#dE^yA!GvpJ+fjg$>TN zcoo!Hz7OQ{-a-NvOoZ?tZt*Z;^|=I%fh(UFvttT`w6&lB_>~sq*C>)|wP4|R|C$uy z(zLJ~cZ;%_R%5BvYWc^ZzxaS8SeG~zh)InWDbJRzNwHqKdfRJQ1sz*^5(TEpx}I{$ zLDdrah59_7P!~U{W4{WD6bpp6`3rOJ8H?OeWkQx< zg=?;}>CSm51?Y)!R<(plfVt9Rs-ZY)qd$RGC%n?t=))Om2DbXlIVNB7t%max^nw@o zFY~`fEn-L>A96U#_GZ67ofGr%&>4+E5^h}?2QCPKaig&oN?r7&Mr@v!b%|u)q~nnQ zRA`}BXjriF27V0MU8cqWN(EOuPV9ce4^-vn`t+jMn8VZb<4 z<4X>uP6qpjd&NY3=#oX}HLbmuntqRa2I5wjgVh(I4S_tJ{ik%50#XP|mPs?pBM$Xd z+n|C%iz#}hMX80722_@L=aIA1%eU!0nI>GFXtkew0=B_oTsh*Xa~d>2EuurrKt3us z^b`@71O1ieBilco9@JF<9%P)C5iXq4j*p;`uEGm_p{=qq;pdtO$?h(Z5|DZY?w>$5 zo*Z2D)viKIzQfwEs)$T65SZxu*oX}wtdmPd^bfPph=sIlKTXvBMx&8}6#*yeA@U_u;O)W2 zNS91vQ}?M(AtXs)g_ww7;v;UOvxN3BSj3~7Yq)m{idSv}eu?f4S)%i#WK3ySZU!CJ z2!@Oel#lAl`&4+FJeG3+00Rd>0HB&C3Evo&pnx5l($x_<`;H1q7IlIDB^iU#>N?&;N>(M4qif zz0-e67NZgdz95{k@|2Tx24yz35 zm|>>TC-tJ2U&HM-BxAwe;JM0C)rdjD79~!Ky<>zT+SRGrpGW+WpsAapQDWKkGzHv9dfdJTN z+80Vj7Mj(hsN81{;nLQysxNCy#82xDLCfE62h7{ z(>naK@^6JFPsWxyh|uj@IS3SVM9X)5@1G!vwt5RWntnBE?n=6JJnZ9LzF9DttfAgA?+p$i|XB6HVpcxo_q z_v4`)Tnb`IKF1Yh(C`2N1amaL#+FS4>?h@5seN=ZY|;wkL^L7TG-UOp^P7wX&a}^q*kP7j=iS% zG@5dq^)J#4jEqI2nWx=-33CFH0=T}V(^_p9EH-)xWGA_g1yF5~*7Q6uOVwSwsOF*&t^ zdga{>8IbQH$R3X0s+fg)8zQr$uX-4Slh7<=u|B7)(SaTSb+aA^#SI$r0eJmOKF|4X zbH;G#{zH_a-%~u=;8+#a8u^jT#JLs+?n+dE0UG$PESx4roM+9OD(sh%0B$N3Bv>Y| zOyWr>z0P%LoMt8XCTfp|nK^t+ttUD95W%CR9h9bMv9ICSL$@Epm7KiCtbB=XGMOEk z5s8e$S!j&^5Ad#c8TGkDai3d&)VYw(!c32&M}nqX+||7xsxvEE1JQm+D)twg?=+pG zgre9evkxK&3SNsW*1%asjK^BIZYmtMrR=qbC4?%)?m(QUjf$uhbd55RLU4|gVMRWP z=eUeaw+I;G$VQ0}smtiCqB}O4UotXSjYh`xW@Je3_gRxC;Z(a|F?4Z66gF8b+aZ_< zq;#>Sa;artqnLe&{!}}srTQ}=^@i)Hi3K%!_Izv1@+=To%TBl7IIj^g&0a>>SF?!q&+W!&0o%?304p zTct<)`$g41BAQA{RS;3SwBzs<6w(odlC%4xhkI*COX!T#2>1asoEZ{tW0qI40!JSSNUy ztn{GZWT16nkGBZCzZU=HW%y%Gw7}4~oBXoGv=ME3w%htG8M|YAwZGiKEvn`m#Ihjy z91m%?;;F1(e0WgnQAvSPzCy-3>>7zIyjwY;P9dZk4%KO0#V51J@0*tpP>~$C%G!~% z(@d82>bkn_fIhxC3BG2#Qrl8)NF@uUNu!B}jB9SE;GY&c7iCNW=vd{m{o5nh6-qp+ ziRY!+$2w|7bV#JxKmY&$)Ipj?3Euz=V62QG%C1Ch7L)*RTS3i#1c<3}680f``^;b@ zbqc%^Af=&kgpT=m!j~AF^{MXXSh#=2`unHTJTUNSvuDTJE=*TMG8v;?WQ6ap8L`nY zGZ{GrpTBK+bE}+3;Hzapm*ENeJh_KzII4mSWWg)i?m3{9P=;#IC>Z=0$|=7M)o(a3 z(uB)N^iSLLA)JVj(_&k~!~fOwW1rz9qD+?wOz$Ada>C7%^`I$_j~h`|6sPfYI+5Pk z*h0>&GUsFU0YLzunnnrV7@N}Z$T;%=6(eL5Xj53AQ=3Hm z((Q3R@N_>h?ky*UUAp?2ZNZ+eTPcmIzLN0-g`54$V;&<1MaDL^bgj9}WSqV%uz^jS z^dnJ{jDQ8~L=HUNBOd(m9ev$J79g;GxGl_@G1mD<`EL}|_sk|gq{>f|`P7v4L<2%c zH&G}iSGmsJ#N*0m&ZH`}mV1utlFx*_S5Nm8>JWU@rXL|o8DA3x$&UmuT?RCKI*vU3 z?Nz4#2SQPB!V7t~t)a=*%zSekR}eQ|URGwyEqrupp|c_R8;Cd&ii>VL1GQaGvaZXi zC^>^p8^t@R+lj&=DSUC+Yl4Cn`^5<3!gS7)VV84p(t ze;m7hx>}bY2=iChK(!v$crC^Y+lu}Nc(~3MJQg5Mtkw?Cx5Mx{m!%rE7OCi8GpOy^ zCq)ROktz`YO|XuR22s$GC!%pgSlp>K#l&x_bN1&au6F-p|0m;r>tsg7s-F1`2OzYt z5N7vtsU?UNaNjcNy|7b`+%fF~rt!>C!PNX^NOrrS&;=gBa0bmVC~DqeMdmaSf+2~p zJ)WuDCZoFJO~bH&YG>I~C!{kn{PY5_mv)DRw{*LY??x#Qk+KI(O9YPc9L7){e1urr ztR17Nl3y$Hy4w1;$lXpjZgxQn6>$zwWDpb63cs^Zxot%#;@W`Z#OvEJ9j40I{u#wM zSllPz7M;m@M0Q5)6D*pyKTFm>0*Q1ZDMTEpI69|5#xH3n~o-hac=Cm zcM;bFdG+k2NdI?pmK8rTQN(&*Kg=QD1&ftuVH=&w)NBxDn7+$8aLi4l3bQI%-B^G~ zD~Z>EN^b7%9Mr(5y58&?MhQkOU}1y90@hGTD?_UX*%oVhnT|c%(2y}{-GaO~q8A1# zWqi~)cOW?Z*mOJSpq->owQ#Ou-D4cH76GgmGzozaOcK>vpfeS@-eeHZ-CxO4wWA_w zgZ5S1TZ%=b6jbM!T!8=p1O!0@^wPtz!a%fW5p>gavuxIzeUK9=;f5w>lnnvF#W0a zw9L2KI-iW}EG%_~-3!ZR~J(0HMq>zV8VbM>cN5*j~Ki+H{?n*@{a>k+S} zn*4T&Ck!^SKJ4LM>rxL|RLUF9vVGZa*sru63fo(G?x1##B;xoeO&A|7i=s+cc5GN{j8`2dRsEM5m(NXvK})(8eFCboRbz zG8V&^N0xJrTLN_`kim{0*r8zb{U88e#o1mYHAn(~J{FDQqZ-VW zVGMZIbB1;L(KkT5&SV)0o#e&6*wC>49zAINjUvQ%Iq)G29vsf#Q=Z83jL@kbY+ZBh zg|0JaESF>(z?~eG%n5h7b?kkni4#*i8>M*Qa* z&!o2`?3D@@ajrj)*vK58q{ta*XPV$((gU2PSYrhDV5dO$^I$!x@URB6T&}o$I z@_&8_+Zo}Q>7%OtnM=w3%nk6%><|N!-pT_N`7rc_|zKDKZ?)TwiSA} ze)A*B*j1)SV)F;Ktr@=)6sb!we{>`h^()80`Gp8xrdPUPW-^YDYI&sQ<4y}rcK=KG zeATz=s69jK42cpJ*j8XusQR%tkJ^9x`UN%Z@f=)I$ZUu$_iFr_-;CKV_SU@kYAf_XY2&S-FDb@TG(?tyUij} zWx*kLet`f00RusrW(nT_3{Re75qSkS@lCL~Yf!#239}b_tO-9}3wJHgid?H=iQSxY zb4-~3K}^wWU&fFZpe5%u$N%|zAD>@SeSMLUp(q|58^XhQzBwfZ3_EjLbst0YS}cwu zk_Lu|#Sofw;R#M(;ZOWnj^YBZy%;X;WB0Ak%I7|<2@hnYX~*l_Gv6@*5VUtgJkfnQ z!hIGYI$#(z$UU3%`74Q|NU^o4HQQGIH8I?fgyo|>Q=g3jJ81eh5C8xJYC!;?nq~>#8I}$k5D#=ba#~5wgU%VDG@64+xfBNzq_{1^YS1X5 zV&r}8$zgdzFP?DMyR~LbVVsO+91qpPBN*xCZRX+#JWW8rE7|xm6p^bPE}b59ke_}d z|2`Er`+lC^(1nju6MNvvshWA$Ow$ArfAq^VK%#AGemW}E`&Ag+8RKiSD0%MV8K4#s zTm43&>!xNr2Hr*YrewghZ37#YM;IK4XGSuW(eA03q?praEuw2LfBxnlcci5i2l)AG zfmN}J?GAMA?uk13pE1}vZg}_#HSBZ;^Kcrxwy1Lfko+D$pzZd|+DGwc9E#l=o(p(;2T9*>}cZqF5Ysi?8((kY4c9W&iSqE?52QbkeqY98%f2hZuzEwfN;{V5 z7n;J*+??`&JWbAUq+{vjFPEV=D$E0IJ^)oQTILUpQZ`?w_ZMW&BclA&BKF(VBKve5 zon>gkotCrcDFvZ-mgDftv^KV+0^Mjs(YZ_mohE|1MgIt;bqnB8@HD7JP*8AJaV$TZ zo3Sr9tM*y6gO?5+bM1)npSMUwuT@Cs!#JxxqoiI3FBNN>etiI**qQ?`6cl>|KCmE7 zT z=vc)k?Xs_pbDZirTT)ioLd6uIG$1LKYtW^yD#tf4a0rtB%>JB&9&V?a^_D=63d|^U z2r#lFX`W?R+^KuJ*R#G1XFJ+uF9$C-d4%acx4YZQ%@ox&t6w4y%ZGJykK!lr*;u?MciiIitIg1iI{EK1j=&U}biW`h&&c9dojhFn7IhY9 zvD=^k00Z?w081vBf_MKD-h5bw^y{S8jyT4awd4zx;0*6vI33QV6wRm|d@$6;zBb-T zCpj~Ss1fH_?3jkfq@nO?Etd;`WYQeZD8QM;zfIDukv2433TPKFY%_?b07Cq)5}mS` zGW;6jR z5PrNmOwE~|^TzvX?R&y8?l`DtD zXA?aCZT@S{&XzZawP=>-JGQ^7@{krl0AbLC0XD21?x|bR61%UhqI$8IT}Q+M*Bo^S z3y41#DyVT~#nxj}Ves{8p@0Y2s}gg+&jiXeTvUyrc$8Ae3m|7*x2h&kuHfNK6GVPx zLlTaFL1znaNp8W+;P?$KnFpbC-7VH_BFsmB1w`GwF^>m9L_`q5%efAL3b~{6hWAQFBMiF{e!R2%=)lAbwn(rlmG9A`^xg*d944=hH z-J-k@e=}w^xUPxV+WX2Xw_ea+-F!DF>?`h}qwWC}6WB?*M1D=h6WU#5V1Nv)2 zcG81*2f&s)e}&E&CzUx1b8Y{k@bQ(MO#{2XW71sIC?Y;!&R9inEJ)zD?GE-$|LZ94 zg50LVtUor>?faWO>fr|wcfyJ20RN?6cC4S4Jm_b>yr;{+Z5m>EI*4}8i%%hK&lIcG zEfDMtjc5JpRujd9_VBK2r%fg=E9RgUDP8Fr{Zd8_9n>s41n5V0x*b0SI5n_MXaBN9 zV5Be8XSihJ?#;7z7vFgBM3#?GWrzRM@5gZW%L-FRH* zZ(|oyTK+~M2q1@IAIa|sq?0%gt)yu5{U#B352w05n6XK9aM&m&4L9x$24A?=isXaS zYT*g0j=r>|js?wPduJZM(W*SfpCOx>fL0D*f?Sa^4B31nV4A@cV~lz#0003aL7IjM-vA6F>mcrDmI?3Y zvp!r(M2TU`x2D;@F+tKKK^lmLD7Roh$VIygnK+2)vxcOPA2{lv>}L1FUgC0(=l2zX zB_6f3InjoxS$vI@lhVhx$BVCo1u^T+W42-eATn;M-bn)U*Ukeqv`$3n-+wnPW-Nou zh#gXq%h8L3jKMR0NBGvc<)oK`s8_V64AczK5wDhdP4syuKCn0Wy60zZn+}7EUh#Cd z++=s8&-4E@2?cf7U&Yk2Rbt^1({a$4VcCq+NfB=hO^Mv<=}7QBmY5=}rvCFrVU)|Y z{devv4~f$zVf)|G3%K|;&)@ih2Z)xoG56xa9^UvU0VH4K?b7T-a` z!SaQ5MC1sVgh=BaWd$99pbA7iTLFpAaB_V z=~dHdRJrt`CpDnOt>Bm7KY5LEq~x%}rOQgIr8MD6jSAj$rcuzavxyAtO$*St=ZUjL z0rwg_zon;Kov~ZYhALliG{!_C38*EK>_*k<@`H?vex4#v75@&r_JhB96Y8*5a^-C; zj775EZ8DT9bYT2};RdW2_d=dlx2A=!gUod8{t=X+=X&7(Wz)0LXoRot6SIfNCT2lk zF7r{xk2b=10zs5cv-WeJyT&uBNHMNfWRP zNdDN(l0T`oz0=HDVm42nwLPdm`m~J40~mV`D&Iu&j{YZGM3qan#gOeh^dl@|9mb9E zhwZ)?+5?BVZNYq)9s(ab6Xf=}WrhpPO_-XtLa#J@oD#f_^tKJ4CH}sYp!2c?ehC?S z?nrVHx2us>cCCPL>6@E>aY+Q36mRE-W|Dgj|_GZe3=lB2H0Qyt{kzATLUDp~8D)~Kq`QPKTZ!%uVfm?GD+wQ8#F>&-@sEtswW zh)l`^1X>DEm4truy;C+$;`wjaRw~H7Ddinp`&Q?J4)pptZId>Fu z@rWurr(wyxL~+40kuco(n{cN3ylY%-FfC8B=}7!000E5K>$l8p@Mh+6n8Xa zOG#sa1f7kND@ zPLhem#k`+c0$pj+)8$bG)XSJ=wxAaQnPK(KKx!Bu*x+#8^Es!3vaG}&pPN2h);SeW zXw_0ce5<^EgA8^KWM;Z0yJQgWSmz7}g){M6%F|t~@qY=2Vd(0sq{1^hdJuUmBzk$roQiF`Wb%x#}Gttz+k~BY!-V1Fz2NglV zOC<)XmKmfazbl*g3=ZnIxx#E#l1jw*9}$i#liDo|iMowJ?+Z@_E?=2`fgqY!T;y1k zEl{5~Du+S!r$i!4Os()Ewbgef>kYlg^)dqCgn<93Hsy|DyL;TEUY-8qYa$nyq(Qnl z(vyqs3LwYq20QvqHS61w2b~J#T7~cX-C!)52H8*?-FuG3j;;L(I7mzB`K0*Q>W1w> z8%1T1&|NEvXx~&3?9PR9UkyL9EhD^z_L-0#4>~uZR+(W(%!YKgEbwG>Y^(Qu?O=fk zew~9?!7(f^CNuJ%P4d$MSHu0JoOIaL>gYvv@<|avl zQ59i^fMS8GvnRI-l35PDO}Q{>xmGyb;2OR(yWEbnO!fN1onyNT3|fgG%kI+8E1UQ} z^zIeVyDDz>d4H10OYFqbq{*!6HfzE@CQ3{Xw@m9Bsrm>x7CqLIsueL-_SLHT>`tD1 zF2$VXHO0G8o(v$IG$`1Mi+25699e_|*YL1cTnw+J{YQ zlA_SR00*fI=-G+El0bQxt#kQTb)p7z%_SKto_ECNzskMIu$NWKDKCscfuYXRSv zIxB`>ZZ7Z6D$#Rr%*+w7X4YX?vY?B)$`ECP2?pZSKh4{5fdiE1%C56OC0_z3isn!` zVgM(fqPkx_xPjuoPEc(#jSKWSfQ4dm%LQMGsBW0AWC(w@<`8w52gO5BpM#X)h^0yk z6~UXrOWdcMeoFgQ5)+)|tD+K}i#vg6oMfn&hy=s~e-rBM`#ObqTH(Z#vGtR$W>9QYKTfKJ3j$Nt>%eS#ekVQoVYil2YOyY^DGB6 zW<+>=s}8#rYHQ*FqwTOJ@p|?DG8alV{JGly9Dr`7R}u}8MiG`2QUsBof$YQMkt0&l zNmc`zS@2zTVTip{oAz$-4S6u~`l$Mk^?^tDN3RJGrrAtalb?$P+X-G2mhW{SQ=Yy2#?)Y_v>@g^1>Hj*Ewt@xD z=0(zNz-tuM-smR?=7l5Wj)1rK&1kVPuR^xa2@iMO$tmlUN+%ZQEjFFT$`g`Nki;5s zM3Y`ok&kxB?e0EB<=l!6EPN2{MV(gSY{$+FJIbs061tD;dGUb&0078Anx+Zg01R9! zF2F`IK>hNfKC|VyMWMNZ@j6;$DT-DcZBZD|A~ei|k^L~dgT?BF`{n{9MQur7HInL| z&2)suqovr`(>VX6vsp1kL~l-voIOdT{VFrHstvc)^3`QTYDgAid09;ilh#d0;M~2% zc->5yM`0R0g4l0JGI&fg{2`iWH@pk#;s7$E!t9+DX=}M3z;vg7MH+avR~i8jWIQc{ zE~e1#3RKv$@;*QE0tbOFDb3Xd0LsOaB`&rX70-#1MIM<7(;&+)6==m*O8^dqS4irMhixtBM z?Y%Rj!uzO_QS-SDZ^PQ-9yv6^&iLO|X8eS{FePPW+Q6*j`|cxJnRDiFM&9Z`1vR)J zYZ8MKxRi%*Bn#8W9wZ2^9Z6u*Ee*)|VMWVnX>CfL3Ch)&@ z-&TWZV(vhcC7EYQ>}V%aYCw2u5I2IHc%8N;N^%^%qNS2-ivsj$vTd9M?P`F@D$y7w<7`cr=TxJnq>HmBe?m z<<=w{D*v(%y!>iHn(wOXk8tQ^&nS#;sAxp5Z4mHWuN3G$`U z!)#!*OfJm+o7qTx!?!Z)sh=9{FuQ^39wGp7m9Prgc$-ZJV125eoE~pb+EdRiI-Hk> zH}2^4O=jBbP0O7;J_4n756nc%nKyO)A49L%T^LRkzNS$ObrrseAj73~7WKDzdyLkx zaDz_jZ$L&Ux!e0|)T!HM)Xv;U@arS`u*3Z`X7|2i4dT@abX}+#E(lPj_+5{`($AB3 zl+;-DrPSaKc|;}O$vm>8k_j!XJMHt>h?)U9^m)}qI2bUpxAKcVD%@e&xvH`xlVgo) z%pGnqxxlRL;DD-Y|0K4Yj$;dxz{S}Z;|r^|5eg$QZO8yUUJ2pHKk~@RQvoBy{u-F~ z5kkF4Ke0U^s_W&ybZx8BVYnh7(USFcIvp1iBJCyQ54|E93scz_%yqGC`31cI00W*u z081vRf_MK80*PLx3#CV^MhP8VxR=6LU7B*8IB_mrXkI;#JP_`cB?&{7I8eWHRn=eIbje0#wbkQaj5H>CR)%AeA>FF`M=P7r4(2um$1C@(_=MOf zK0O@5+*I|{d0iU^%G>-GMpL`f0AJI@1QmYktW!mpRAK5V1Masb)$uO%>tj>k#^VK- zN!c0Eb$UQtLCUUI{>vuZ$tHn)4gP#>cdIOB_k*A0iBq@;LONspv`|I|Jp$_rnH1o( zYpr4zv(PjFK+PyAPSoC**Zjs{t(ptIik1>1)#elvo)(|yrV7w!)#r*_V`My_;c@6j zY2>LAS1-4r69$o%JR`Akr7&1jeA))ux)CGRtj;emiatVpHtRcuFTtTcGrKrV8%x?| zaY;BL9Q>8`#8AGFSU)%gPPX%YaukwCvtQDnGD;@ziP3VH<9Jlz6c-Kby7JO3d zd*u2JXwi63t*g|6n7Jm1_}8~g%y@T}dibWr}rh5sBxcmz-s1!J9XI#Xz$ESoP)k>8AMMktylm7Y&{f|4{s zai<>RZjC)LdjLKKFZxoZeuM@nYEOzapF5tp)^o20%3nrg52b2{Sl6eGfNo;MUWOk8 zc+vF_^_v8xwcxd#YwUNS7;Gf-RE0|wY%1`yS0^|B(xTXLW7gH5B2lW9&m6hm~Gefsc z%(Quc_Oqg&-QzfR>-!5TXpbCbOJ;`;bSLa_wG(vR{%~5i<@Qw&#>H~_9yxx%7pdY^ zXqOVcnbh<)9`nS__}G4h+1&uLNIuCJqkC zo$vW`(VJ^r$wPMwCzP;X_XQ3e+qC)vTfw;SB%LKg2>pp34*rNj!zkEI)@-D5$Tvw{ zNM6kUP}LszIyKir?LH7*yIU4ZhCr&@C3r4(@+;Y?UUIqpzpwu)>WX)!E(^g1>w%N? zqeD`I7$&|w5g5ZrabR1Vq6*VS2vSVGhNOO=BN=GtJc;|~hk zwKTlMu+krEU9-77kLCAU0Ncovb5$o6E-4gjTLXdJ87ywKXR|p`;9sTYP(yq*#}fQIJw05=MJ*+o-zCd0!+0y=v`#l+q9E?ec_k5cb7t2ZmNE07FQ4?^CTkd#j7*0co&}IP6D~N92Fl6z z*R`fkj(*uIga?;}=WyukSuwgeDi#$w87{T#>2d|}Cf`P6Cuj&%^P)!n`-Fdn?1`ekMK6V5lu1}!tAR1=1KN$ZxZ6lq&ls(=yJtdQd-BS$CPF!3uqL{MF-jDf z1c>QiQ}p8j*iL@^?&AmHjZ!!A{c)nCRZ~PwLivkfz`H7-mgO<>uJ}-Pe#5}0a|Mv( zn>Nrfl@;|->(dVu>&@2JHbAiCr1G#e+K^uX2;_FsO_81^&6iL+Z{Yg4`RjUo+0e1l zF@y@Vo?k45``e`!Ay^dCcYGAK;DI?21;i~t^bd|*O-sEI5)E4yfns`%;VD_I4`Z*P z(q{&C@n##Y4hL1%cyxU|Vc6w;I`VfxBc6*Rd)n)x$sRjf`L4L~*|7%58h#fR?!aj= zE`Xs$dC>!xLKf@u6o{mXZ=M(OLBDN!gzmqTsRg|AkLLs8Sz0YN#PW0v$`RIK=x-|3 zZv33(>>X$TX*Jt(@#0?X;r%X_`O1>HMUfU6Clawv0|fJ^sKvG6Zl@A};+98(CNdvR z0enUKJ8Y$$l8v4VI15ynG(MDfSLtcsj-|6+}sUfJm6 z>;=j*NH)fDy&|~FqB{|x3*}7!aeq9k{V>Dxft%fFb0gvB^pozO`)5Q+riKhvGQfjY z#F1;QahI<%i^0@a>S`Vw%gBr|b>;6n{Su1&z zBA;yq>&m$`RbEkYb+?rv(@FbRfuL{-4V2?$)UpH=vfKAzF~XdBTid26&G2fJ23BUI z?GKrIO7$9U&su&q-w0Km&O9zy0(=GPVzxw9dOukn2!PjKhB4a1ENsIqsF1rwCy;%t zlz!&u38GKkgS^czGpr(8h@F$)1p3>Q4ZO08e_FN{6ZqZ%8BmLz=1Ips{Ae zOa}m3bU|s*jI4dvlhe{3Vs#^<--a z_>cK?K}hl+VWx)T$mNmU-Z$`M{#&&x8@)^&a!O2AKQ6Jy05$_hK(wMamacQO1@{Iy z@!(b#P{!6+_m9kS3NtceG-;u7EV~BzVHhW2kwk#6rYfk-bO`Ex#_FtV+tOuT6S2%T zff#j%A==WfkbpB>Qs_(wlU@wD6_Fz&sj$XYPxcqlQJ;|q6X6`Ru=#B?w%f!Y_kq>< zoIw${L{W3Mfn;VgGBaBRJg6l29B>C5BI+?iybCljlGT_OVDyZOWN}qgJicVD*lw`h zN@2S6J-)?zYz^1z$ehfCWJxk<2x5E)m%1Ay7pOD$A?{#!XBDUK3{qPTp_1v+!!XXm zanBYfV+&;?KmB!cv1vaC7xmYjy_(eEVtn31F&pqM_V!o(b?|P(W1h zKAyN&v&*`H00024L7L_X-vA5m;Ot)R4Egw{MtbBKQh>;|k#P?DHC4a4e91XV&RKpw zn2n_CMyATUIh|gE7{j`$xQZyG2nt2fg)7E|yiIyCsphY%2X&v7j`Tp5SESilP){@CX3XYQzV?Un( zN$wmMM2hZ8*(|$*FbT277J?^Yh*m%>b~MD@G|>P60@gtQpql0h-xOWuNn{$XCnNop zR#pvjb74ERg&?MdA^&e~SVnRu4xAvhX4HtaL0BHr?4pKGWVt_8 z{|D~rpfIk-^C?fsw&dbNXIHN9Ix0o`|EXiB@Gd z=sp6*zOSOH+ivu$i@zM5A&NwxqGks-Ygr>n+zQM@^asZY1HOVVK>6T#e|a9v7s?uf)4Fbg zOliUm8H$h^&lHbXS<4mpK> zpE#J>0*E}9k|z43ba3kL2_kwA%>pXW<`lf4j&D9Q4@2s+Egq3dRwS0C&h}nUcqjBj z>a8xEGuXE+J%&1gp7NH7bp0wPM)r)b!ON6R{ZDRejT4s+dtN28x{KS#ax4UD02FLw zp}=Y!^}ro$0^J%e@O0^m9lUYd$6i{8yG5e-Qzof^7u@~fo-*@4N!1oOeZ2<-lp4vD z7;Yf9y@{bAO+yz@AX&ejy!&&iE2!2@7`}JX`yANHwawfnuYHYh9$Z)E7`D4%9OkNX zF%v)E2xcAdh~OLXQ+|Se)r;FDw=N1>bqc>lyUThv@vtsmEaceAwjX_Gq%NH8QqpeG z6f$tVL$GL8TKZOf;Q9-EM;{vDizL!^f&kkFm0gFi@IWD9;*(EVRFh}gmym#9TH(@B zNh8$L-}gdFcQlgNYI{M=f-l(Jb?}*o_wv~PKXyUBzZi{QFX_G<&AR>udsN)_A507d z^pQX!-mJ$nAt04+q0Q0!4yAzJABP@*H4-Oe*7h7th(Mx?gy>7cdJWg#n`_9}kh;yr zs!xu(Xpb2S(>*FtQ^7DvMx)Y}b)2}OeSptP^P5`R000AvK>$l8xq>DC5Zq{eMq`2} z_r-#DZaCCbvf^HZSTd+8M=$`;8IvsDH+R?9D`s(kX`;JVr}Vz?Bv=&+eNA)yVPSly zzTWU$4IJBTr|=AtMT^i7`d28mZ~-?+!R2V>1T0>HgH#0c<~89RA;bg1G`PLvSYm<5 zork>3?ncGNawnl-<~>ak$Ct4R+#;j~B-ZFj((<}cT2!QGVVnpWPJwjT3LdcZfC#N9 zc|o_*0!_H6tWo4=I^QDI&i9tomX;-;B>=o;*svmBr2HR^faXmWT>{AR%BUWynwE0> zGZ8SHx#qMDz6tPlE5o|YTO)ixi2`ZXYe~`MRLcsm)guaht57|ll5wyFZ>4yx^ZD5I z9`I8SMO$^(V2xiVBX>nMt_-p5{N4ANA&yn=4E(q@!&-&% z9cH^a2pStOkH?|Yg<%%7WO64(ZOT#Y*1j)nIDCH@n4vIqdVf=OF6veb)8nl8PIP2X zq~&#UoXbp$5NVOTATdpR2fa?4c!Z|oLTijsQc`inaP20;GIdw%<{`tw0x4$`#O6|C z8*5kWg7J0&f#+$L9ZPee4JAS+{C^;cYboO#dcy6ik35a*(j{vAht|n^X?wb+Dd|Y= zY;skvw_t)T$8p2e>a`qSY!;g_jTb0Z)$l@E>6R;p(Q3J;^MHny{w3jPGs=z-7}!|B zE;{|C=j=1O(QtVH`kwA7T`wyxK^F*-TP4$qUDMwFN ztdyOD_V4BR0X^bTpq2KbtVHTQc|n6qaIZ)|!&KVIHQ&l@a({ApxKUU>DOa7d%k4j% z7w&Z%HM&XcOS~2R9h#Ty{1RusDKY3pjoyI`#h3?EHqK(CF3F+3ibfY@9A&n3@ARK6 z^X-05D^^Ix1ysF__Y?Vah_+)x%0buuf^|tBmyo@H*uk5{Y6Z zQTNXH&9<57NO^eA*@A;Q#7OLvAal7}ao;(;o~nolt)WE@e#J8cMwT1`mp|`+E$TnN zxk^<6z|nO8000cVmW01jehh=d;h z^8}gSzkxtW9XEw3Ea&eR>~7E25Zk!lc~Ngd5{h?YEbn9@Kxw-R@}##$6b6|JF?f`? zYBzmcm>7b?!&U6YPj7)R^c5nbp8^P|2xO*~jnM`KKc9=XO6O3$jTX8?ajQ+fQNH+h zTIJRd_5LAP@;J)@3GNL4De#P662vrP9H>vp9JL2$aIeH!@p~Ap_T$K;O!zp6#7rXx zs-HYjh2(TI;4C1qtLcyxj+wVe`7Xy!Yq2WOe~KE2CYEcV{^>U1? z+y9&P)8;V5|8FwUbvBHKB8=GgpR(&;sl(a_gc$n61MenMK9>@gMK3La9vJ;Q>529r9$>7pw0S7xe?(~fMq4a7?V zH^&Q5Rl>Rp$5CKy7|lC>tc&J)7yo8Gfd4}*Uz3RyuzxxfyTvcOhs399J9`0{Q}LJ$ zuITP+u=YE=9HPO29>TtMIxOE^o~X5f2;)6h7J!b6ENSLQEUy2EvDDO2{S6y$OHxS4#j1RJyF} zufvHZc}TM;Pv6K;*Rue=Fp;h|-K!lP%KzfFFj!Z9EWIP$Fv{1}^oNWj-WH@&UX~di zot_Ds^5r7VtUtZjzcb?#;J=hZ+M+kod5n*Fi97B;jBJPLfwU}4QROqBCQ=}H`azh$ zlI>N~n5wtHQ=7|j7;))j1~oTr_Nm|oP9-H^=>jD5N27v}W{Kie%`(R{B^}8{S9Dy4 z5byf8AkZRX#Qi3(E0U^I0-z6&{UVC@j_(CCby#UR{z|xw0nc*6xlv-DNnFJ1Zo_y+ zVNdE1^^)htc}nN+OUBmxE*)tAt}`P(BwDsk9Ecx@GZMmZq(BD?Yd^Dnsx*g=1cP;< zuHH>~H-y%EMmb$(rcNs2ewFrB{9zh$sG(O@$a%lvb4y_tKzTE_dCp|fck^LdvED3B z^BT{HICw8#Bh9je+O3iW^aAU{NKb|DYrOl7Q?)4wCv5bznyeBd>JRlSMf~yd)PC@Sy_IuDk{_yJ;Uby##T|;%0u@hK0mom%W zyn-OnmD7EZq{Rzefic5zU?xk%Le}~elhKcO+&c7ScL|!XwO>fF_vz?~P9AQLKO@&` z^;Skc3ohG@Uvh(sbeO%rhP$joyWgf#J$~iOM3!bq5jc+u%xH7c!%;#dA9qZ1+mXsG zY`YPC!J#zO4z<|}dN*Qp2-xEIWiOh3Y$?zi(kkakpw2asB@(3R;H?MU*(#H|`p@^+ z{s(Q2ulf{;2-nF>9Qy;1AH@Sg!?yV*>y)rHLvzHQlA<_ujfOR~*6XXsGobgHcONLe zfZI7sFYCDv@7wkqwVJ2VCGKSjIsjh-+aT$&pVvx?rKRFj#tqH*KmFzzJ+B&J7FpP0kFSb@b6{{j!^ zw3sU5aA+HF)#)CiR8YYPm0e`6<56W=-c`S?WMQUiC<1&*V57p5fbs1=`M;9qLKK}2 zk@Ac_c<<=8xV7?>cL}#{HC~=-kx;bn`;O(+4z$%g&j(DX3*>~afu!+EuoefoJxRGi zOZ_u0L1-MDa9B)@1nAmi&Y`E?1TxcFm6~!`dNlD0bTK85#S$<@eb%&edL>H)-1=HI z^XTa0G6x-g$H)B$sh_x)!cw0kM&jY#u)V8iFd<4{J!8kCUJfV;`*|Bb_+3^BbGY#G zXknU*bgHG|(Ucmxii|k*G>Z`l0)B;)*d0CwzO@yOdp~jS0wS0xpto6d52M zmth8E>*#z^>qEEK)Z~?@VpQy90hF-(8S^;U>gCi~UOb?Z3Oqz>-GrBS6gZ*Fi;cIeUVWLmRk%jW5gd$X!>O zk<>B};>r6g4}qK2RmV6Ryv$E{XiiNjsrWg^D)^l+Li!4fAKj6r!DfVEz>+t$bKh(e zPQ=NCaD_!6M6i3vq80?&B~0gUA29aIz>uelzwf+dYrwZDykUP#g|rX3q#i?SA%0r6 z5-5dYN34w2Rw$I9+gD{Ix@>4X60|FCQ`Ke`gP*$d(M4M3aJ3u7U-vjPPO-K`;<2!Q z89&@euIVhIkFF|V+XU?a7Rotqme=1TcQU=VfW3B@fy#BPDUD`e*LH2r{cx3gge&1w zu0mrxI=jH@%wgVZ5iZ0O&g`LJ>`M%rz&NHY3pU-gxbr+GFngxqAzaXI2UVyEONTZ$ zTdR;ikAsAB5wA+^!Sp3w81UK;bfIvKOEZ2D81$!+@&>wotO`iKU0IJ@f)G*hri9j@ zLyBF*?8k51PLmry0(&?p#_Z@6h3^-X}k z^bOcCmOsa(J{OlS5UJhRxP#;1F&^J+Q*sSZz>HfQ8=LA@1t=bc-ny5N-|0};QA3Q6 zE2gPmA)^(2G8~yz?O@3?rXfW_mKq< zfwjC$tt6^gYvVoo-6+y_bQnWv?n1mZMdsIyItyz}&4ApOyV)b4@)5?g_*AYeosWBy zMZ)xh4gm=dCuED;G8e43;9o9-pWhu%vFMG}^0C*%l%p*9UF4W8+1##17VZmQE9mh` zHn)wV7$*>sXwu*D{81068?3dU$N1=GWTCgnyMy|{xifsMdb}R8k#liynluI)I z{+f(y(A-Ffs|}znlxTW!j?lKQnd!!9-V$h+YR~~Ps#guc5w&$hprlt&t-0(!onEkH z(EJuU*$fu$Aa1-Bou>OANynKA!tewvYiI6G-Wqt35S=CE@jl#xNfKK* zJ#}JF?>IXqYJ?5=tpmvvsPnlw=i7!+o>5^iwQ5`2Vm!+O$!mP38!oV_wcs`|s)-T$ zLf;6>v%5J0mbcaGC=>qfmQz9;jL-^rIrehBCO=sJbcTb0Z}cF!70TOEPzD<@E}pm9 z%s|M&jCbO{G%Fovo=@VK4N9~(vB>R(<1=qQqm|jlfPzO7YsH@^I&=qWFNlvu>OY6?2qs^5 z`}WmMSq)Bvzq772`u-G)#x6Nwo$)NYuxPbe%$#qHjml3yqKW$tK$ye}N5!gr!=8y8Ssb$x%&@x3ciJA> z>~6efXG}A1GQYHC_bSB@iR+t7%e|9=%HEqZZo%oa9kZGp(oM|UYg*{gBNp@C>l7F4 zc9*4)8?I%rxBu$@AhyqyFNG~)4{AdQFBltaX?Am@W0W#|tMf%69H!3*K%4X+%}(_K z&*u|q^zo#pEoRF|&4&PU^y?GO^GSQ3mkpbX1$g3|Qmvic9jdvhi3yMQjQnzXr3Y{-Cj#5Xnd4I=Y@%5{C57z7NTnR@Sc0;TPlyxc zIhWf7M7Etq$~zLD4SjS+2!yzXX#X%$`!n2v##AE{)MnYlT?0s*r9yPtqD{W+ocSaH z@j7CRF$S`arFkwIO(8@~g4pSLmpB3BsxexX82J>zLClqw_b3uOw)q_k0 zeuYY?3g~ zNjMz^cFEqN&(z?l#Q=o$T^FV|#07v0l1wtM5R)^Ai<~126{AT#FBe68uuirkS8+VN zmCo+eQD*Tp%*}p6p`w9ufi<7eVRjy1YsEZPFA$jD#j+oRSTrCs6*D zn$LU}^BI8IVWJ9Ge>8B1f`Z$~HSV7>WUTKi2EotTmwLmeS*8~`%8U7`i1V~VkcTaw zgkeGO7b{2x8XfliZ&HqkL5`n@h|lnrvFeHo=! zrP-36#%zyEl>+Y8MQLc)a7_nne}rhA{(x8K1}I>acxwoy7qTzZt-+3?{?c~UETLSk zEYMm)v*+R#H#F0+w6YO?&!Kw!T3~^?;$!oLg~NV6brh)!X3%ep?%{5P1$<(^Hq#My z9D|6=B9E9&ixVu}k4f*-*APGx_!sSET1WhH7MAXi)-OQXSC7(xn^MiRg<+KQWiBW5 zqn*_1A9X1!6a%%`{vfvkV}|Gn&*8dfCc;vwx;+O{ykI3aiUdwToQtx=d|v5N!j!~H z3I5kb7KiIw_rU=w{z;OPn0A%v=+^)rHL@yM{he$`_=2VwN`VHh*&1J5dyw;0e)AtF zlZdBY3sjdv)>Xy_Z|@);hAv9%c4?xZ%m)c~vqgE`ShVQe4lky$@{DG^+LLzXgdmX7 z)LDW`E3E*S1g!$}yqeF~tNYXMVl&DCnWECu<jWP~B>67#2tI5UB?zdz*ijq9BpSQbi8#=LVv>2V|0e1c3F{S$u?5x z1Boq3v@#no&NNvn@w{Wi(2+gO?43g&OQ{F-dhXXp$%V*l2AR0J?*oMd(W>D6?z^pq zxsGMXawk-mbx9#Dei1m?JT533Cmq1B4K%+Bch}xVO641 z0J@6Y^LUgc4kGbdrU35u1M1y!ow<`={^ke2l)I4*#h3TfR_w9#2gN_}yp%WwO0F*@F^8c0cW_o@k@^ zA&vao8SN1`qgNr|VYkPV+9BDQD5)#lx>s%_mMdKa^pQGA*mH#N*Sf4hfJc#;RulG? z@$v_QooN$>`DCZE_PU=XE=4CJ z*E%*6qATo2DMb2dH$G2hYV8GvqfGI@{0NH+2^qBL(H35LY|s@A_DI$|x$3f!FeT#) znrJFGw&IGgZdZ82U&Io2-6q2E2Qa&$W*3|c1)_$%Zt!7?yz#1igmg<3Yi&=a)9x`M z_0Sko2UhPeg(5xG`Ncu=#B7ch;6Sc(T2bco>VXr(H$dfG``Zzchdp_fzY6nWA=)o1E%8Q)V9`N z034|C_Rh!45JKl=N0clarPNb6+OE3r$odh{`djFC2NxlBuG1D`k%&0;JCt6Oj8u<$_ zdzE+q#8?sPi!Qd%k)G#3bjXUTGm`5dP7q`;9@)T$UZk@d97H*6BGwvGt1& z9F)FE4DTRYm{jo7iJf|o$r|%-nHzdplb_05n&I~uUB4vY7(P0p<&g8vJd4(m&3#J1-%1kw7#KQqg&KfcYnJboWqBwV6)r6pP!QgD&_n zdJtK_OS?1gaIOP^;j3L0$NS8Yu4Su{#T+;h5#Cql;s8pmBaxgt!R*>9-xna^x4zEX zS`p`-PFJEH7T?YnEPk)mcIwpcs{UiFS??q~7*8IHM$t32oVe~W*s%(;QH9EbzbEY1>5bpN2(b{=bY;4 ziDr*HAGH(r!22i*e!-v(8n$m)iS1CfrQ9~7^?_rpz^yStxkLxa3T_s%JuAC8${a)n zI0Z(^*k>5F&6ySO2rfU73)nS)e%kTcM5K^MI28glW!u7cL(@bW6c9IR4@$dMbnD9g zgE~mFr*Oqta0k#YJ&I~yMMwOSvce|lk^Ti1I497-M9Fdbd0 z@}7PmH|CCCx;)Oa&>AsAn?QYxaNE--M zy>o|43BFWsE4hYE757iewkLZUfUPI3clnvdqo?RNo+XKXGx`xAjvyegEh|`!2wyzh zp>?kIDNjLk>eptlTTS`u0r)LMw6boaCOt00P-s7&&s2jTp6o=#t3Ka1r+Q~)_AY=v zKU;M=C1$$^W$wFUV3A&pi|nFb+F~;SQz9?(BWucVX;^~}#=huYNj;6$?&NXRP|j!1 zpBd-Wf`kcySF@$gwdoYFLjMp9+5J_W7(ABxTehl>_;%-pKYuW4=S%IM8lIs`7^UvC zqXwMww*|jvBgPF2oQevLv^aGZ$1@y)jsh&SQJe2vMfHNO#p_plCR%?n@uDM2&tQ-i z4S&sbn5Yx^8NU?%OG1;DU|s!?d%KI}P?|wYW;epvLURz$(f~=&~R5Q+wRflW>cnNgfc3p%?oqE1CpTBmBR8p4?;*CWYG z7!O|GirfhmtW0=#s3Z>NrOm0g=y(u6Rx}Qr!Db~S?iN}?wCCOLA*A1sn~A~!Lu2TL z!7r%rqOoFh4)k`gcvGMypX@EG3QbAhaYF0G@$PrOn8mx&<_3W2^_x@3iz3LU{+FpFR4dhGCMI!X zk910E%Q(xqT7Nq~5$7AslC;6j7GoCSiQ`5;P@Vu!@I8 zAcjq(-IUYi9a@#O6K+@u@kh?l!x5k@d!5plz}Iq^%7ZVhI7?%h$lfd_dA$*oIekbB zDK@Oiry>`!+JUe~f@6^Twzz0-!yMgnj9JCG7%Iphpzh(YEVypz8PrkrE|7>e;Z(&! zRK>l`?H!TFm(Q`soyShQNFPy+I9=sVM|?6cKexy7cl2aMg2?q=1HSG*fv5L1(SQb? zk-bB=ZWn4ZHe=7F=xOdoq0Y7%2ti#VI+UGN?3}-x`{^k4T&w`Itq~dbb6~$D8%~sk z;JDP(_Dsl6=(P^Ov2o3p+mU7w({3J4yrKF9e=2*M9dU*So>aJFegiNzT^CSTswPT(Bcj0@veN9#V%!~M1xkS=H8*500G~j=MnD#Ny-3=YxLyoCfzXwID zst=b2PaLwfi(u5#(H&f6LvoWfjRq*{ixwSJ8$a!jQxN;p%8BXggf4;Inl)rF@!q$m zyB~!3?p`19_0GhBs8=q5g!Ao75UD(*;a-5K(}`HeBREp~dY~}4;%JYfln>$EI*8tL zU-w?IRh~BFtpAP3iuMd^SX+WXFD+$1AI9gh#uAM19QJ50ryAUa|4?b?g$F}|bh(Xr z*rS&o`KXpz*mma`XPs}>?`0Yuqc`nGt)!H1G0BF7k8OWCxFza8i_E2{pZsAMIt#rr z9em{ks*aN>^IN+nXBo(2iY0y1YiJw`w*LousAZOwC#)3@hi$!6Qz*OVfd=M9?O}-I zJL`&pk1!^P>yp!}#m@4qryK6ZqFjEhw&bJwQCL)colp6?&NNu^qx0D8p(pyqJudWU zpUERlO=ydEq>2G~O$hrx1ju$n$ul~{=i00g zkZdLufNTYuZS8hkT+IP|)IkK7YZ20%u-n?FHSm_L-4#G?%uQ@jd-=4=F(8tZ2Cc?7XG9_;AYgSPm0*=1d3fWUbzsKj{pP{B1aS0 zVewYGcVoGAb`b1Toz2qiOM1n8a~~N(jf4^fd`8*@-2^~b=WL|oYWAIcs3z4eF$+3rcLLkGDWf#*xY;l!>^6e92s0nrk z#AwM7RZrc_yRNifZa4z?!$oBJg1rsz&Z>wB`*C=advlnP^x8D@Lq=VuI8zb=z4~oR$qA1b?<8R1rjWrcCp*!y0?dcDkVkax;2anEkVsV zYC&Rzs^ZK-N|H4&LRly)5`+vRPv{d5=+N~1M*f`?1RCLN=0Ju)$q%JS=$KD>rLhr* zVV3(}VpXcu4}O#aA2ijzIS!F1(AkFTpD)`4$x#{Y)BtQ=FqI2^sUkI4Qmo&<1YxVk zjT#3Mn#&nI$~UHX51GUdkug46G}^x2Yqsgu<&!M}(PO9}lZXh({xj+knWOi~E&NdE zglI*yQ&|L#V}vU2Q z2?OuNkRiUcpbt?ysz|m`<3&0M5R?^xRd9w=Zc#7t?w&HEU}Vu-qf+xIv0#*aqzs!q zG6gisZOV$C*tWy5C0J#I>s|QV{{`{1}@EA000z3WdKVeAp$S+gD2lIwV&@};XeJ}BpX=+`T-_n z|M)PYE9Rh_APz*osXl~q%z2f^j?F`2pCTh6@lihm+`pusJB6P#(#f03mILZ5NcDGQ zn=gaHFzwXb4+WC1Zl-0oQzU;o*UnMr9bj~CyOra-R!sW8tt^*rtP?~gfYJgDrd`X1 z1u#5%jP9$L>#EHD+nTTP7q-fe6Q6K+5alzNcVR=6;L1MQ#BNOK= zq@F=OE|6s_*P+Wc6B+}!UeSDwAk7pV5EdC*WN)VTvzS9jS1vXGvvK0tcqkmQGEn# z{IE&+QyNY1yXF&IIzIPq_JXROR7j1v(jTv(j?h3nffqGczA4{5I0Vdc2%#bBCQr{I z=)k8;UI>@e<{)a7IUqme7O{X_E63%k-GRCSBzFZ(zunZPAlh)*JD*t`RxQpVn z9#iqtz>D0+R^t8Rd<*1D^G8-Xb?T#K98+*icOK32@f!xE+neLY{*jb?D>I0IGrzHZ z;EE;w^k7da&9S}&Or4xUEer(#S2c>|u4)oI^{Vz@zpW&|@JMX73mCU<#9#`+kubTu zm};$?S@5M9qO`7cmALGy<%34!lAM*+CA=eq>H{wlmUAX}%BM_gPZeq^EO8}KNKv4T z7MfU@S`*yJ78M6k2DvE=)G8KN+Hk%32$D3wYSwZ98Bb7G z4CwuAk>+o?cWnwDIU=Dm*T53G*H&;2gV#K(iK)fPT4|M`m`SbJcAKk@Jq3Pt}0 zXBQ5XWNSqB4+pX7VU@e^d83wtuHJ4{zR3fAC=?Q+)gnC!P3&2sSR>KdA1JxE&xN-K zoUGtc2ifg#$GxbZm%b8rx_Kd5XN&UOoqe=KzjkM=6IWZ?9w{_2Vxanhe1!T|$=DQN zwW<;|f9O|mxYPR0iN_)lXDsw-dz2OWH134DQjJ60e)$`;uo7BK7#+?CIJhCwdeIrE zenx$^JWyia(CvRA>pGV3>&;=OZKB$wses4I!XW>$HBN;x^f#iq&5etx=JXxi0>(Mhk8tQz-`;Le5JL$_R zOm;DDW~_c)&zq2m+f}EItXO|ED$N2T_WgW*SUjjv4m&LKw4F%O_izUZs)&EF*)+BI z{}o_$Z+*sL7{~);1#>AWde=?vE%ONDqE76gH&`a?4{ssV85sEgIN7?#%vjiLYOl%= zThqXx4}~v`Y8@@oY}8zmJO`TIT6XcG#KM&Ufx$Q_*Vw0rsEq`*NK|D7q6j`3&3b5u zup0oRc*Di9G+tS&X}rsM75?1536Ns^JI6!_i&=TMFU}#NF^mz=Jb%AtsGBpbZ(TsJ z2p|UTBwi&hcmYC~dx^NXs`9jD+r@s6^ZodJxF})xPFui^s9#Y?vzeE3&pY_)Giuy{ zf1xLcJBt9V579+NJz(S+)Ry*>5#j;WINKs}{3&b51im#K5^j+-JU6df@sI3#I@ZV{%8#tJ^*XH>EYAuQf19y@1Tupd-DO%3t;+}@v0Wb z5Cx~ZebH^-F{rN%hzN&)Za&<@Jw5K=O#_kpth~f`G+iB4_qv=iO}unt&3_wp4LX#a zSZ5>UFqSjl%Z>fa{hQ)?SLNx@@r44!cO07-tD|J+B@-cPPIrZeyP&(Jb}hzj*VGYZ z_IaNR-sZXDsM3*?ZZR#RUyxY6@HfA7lX1%G{6hOV%S6_LCswBmxbLQZupf8VS*o;ev>d7=pfJ@JtoQ1vm%i>HRb8RO!2_xBT^@_dQfN(tS)9FA(ID$z9S^E1sfbA>imB0_Z1fj`Mj=Et!xZwa>;9gvjixR#3&X zAR!prwNj(%lu0{r@Gpev6pwR2L2m^q=tQP0{-WijyK?CAMc6w7MW*8@!hy z2*2$u*Pq6`nE-R9aZM58N`OPYf6jEG+vi^28msx>y4eMxpByo$)M2;4{F0N5{YBN9)=sD2Loa%OM6BI~xSx@UzIi z2ufi6yWg0?5R*A@na+izkO}7Y9K8Sp&#m*YW2ODcQxXHw20F!5v z9jPlqd5HvJG&Gf|ax1<3kvU+0`EkfgLs2tJs~$DOlyj}i`##_P)6uf@#ZpRX6vaGAL9s3CclO9;q0m-JQ_+>kpt~r--@{kW~N`O|% z-3RASye}aspW;+-i@ci|uQHBgU#gl#U@o`^_M*yepZ=jUX}?wBKqsY9F`?&r*Wt&qHIB&FRhoYxbRUeD zgmpCk_{@Dbv%&bh`eJ!Z7si$1B0_m+hfNhkVGBXi+2q?&W7Q>3yBa@J zpm@Pchx~-Y#N*c8w?UV7fUT|U^_!+wM0$m@!>Lq2V~<8r#=W+ zoN;s_>v3|-g1ULTg&p8B-U2v~fMlm_KB#SDzMMxr)4xx%SJf#kwUTEn)Ue=;H)R>Q zuK2S^d0X(i?rO9cPHJ(7)q)w3qbz=l<48e*sSgK7k6|5bGbX*>S+*U!yj35-9s*r@ zQ!3#zFrXbW{n#VZH+?+Z&nklJ_GGj^xgha1Tb5#;$hoW0+|8aFi9yI^AnQe| zq17p6q}JI|T&z|L5hmR{P;jC)d&!EwnO7r9Og+eYfn=-JGGo?L_YcRkCLD}!gF zsrs_4iEt3|nm0eYNh53gQ*U6yS?d-VetYBP zI;UA3!57mj55?mYwd&M<#q4ABx|^nSfK3Bm9|uz!@`UV1{LAS&YaS+Dhy-WDs$yP( z-dMe5JtS=diE&2bu>cx>s~fkE?X_NxX)nc9vhd>cwRo5=@q@gkEXiHl?z9=y+rl|o z-y#FgB5wS0@ns9DW*QU@GnI!p!{Gi?><$v8*hJlJ(cjltsv(!9tD}Mp1CuZU_l2DG z95~K9Bgml4iRPI$F<2BEH^dE4tGw=_o*hRM*Y1y@oD)7!(dpW0CMhePS;xR#(0%Tc zkgnJiJ<^R1zOr{mu*9300*yD;BCLb9L9Z|2&xa4v))ZxKcp>>F_9cx*P`YSE=9k>m zxBMn!)Ej3HsEQ-hl(`LAtg;^Q z;%i6^2uVMU!XHY`KvA*_tQucM$JVHvVOm}b0e1x595#M2??QW?WBvdBY)FntYziYQ z`hBlih2T}1i!kR|EYNWO~(_CW82pOWZjU5GQHOB zmWHHEey()hnUl2TqzTQ-p(3AW2Wo)!Rm^aeQW89(f}ZR%&d85ef-T=1Z(4*WYtUWV z7L@@;6gbmegl#xXdn8u}7M>1~qpqq#r1VXFpv%CR{)#%3&Qm}HzP6{> zN(hAx3Q>reNd8SNv-^Lg`5{KjG6|jbggD^te2_P<_W)zu$ReISniF~tnsQ$ zZ3<=pIK|`T)^9WNn4G{{*G4xz3IFVl?Z;;$I#seSuWK6yQuHqOv3OtjhN&C$|ION0 zgTUifkJ~^ZtzXxEZ1D*%|s5cWvql>h`&pz`pVrRJ!n+tRC ziYSvoVXT{%!}GTSPy@OCO+AXde&z2pJ(1+pSfybF)7q13OV^P+~vSZ|o2&0SH zF`oIK!-vquU3?F_p^0E3X3$eo$;khP)Sy9Rk4a@zxE|UvrC5>x_sOXKc#CJ8#Ji9- zYYBFLrpVy2t7?e@*6%PrmNgo5{2yTwQYy($rf*v|Ly5m+N9dBpJhz0^i5_2lLZV7>b!WJUiu6QPZSS zcR!$t1D|9(l$RO&5xGv`9bPeMPm{U^X^=#mSWhq%}eL{da+hD<(E4 ziv69yNGt~u%Amwi-mR$^Kr6>F)l?rqP+Hem0Bj2SoueTFBTh>{=jiA)_TPxdJ=nsd zTjMKp8$2eQ9<!5sZA&Pl!CKir03YHuK*3(sW6 zNO5rSKzN`DWXb3MXqZh{1`B+#jiyo%s|BPOK*0~OJ74+2I_2>K&9@;P@4$L9p234> z;-w3N=SVRPZD0uY>Z8t~zJxybEfq^) z11sQg9|sYj)_qyZUP**{Rs->88n3q8{4EMSzxX*oej6oo-ke+%BZo}^^UQ@JJup@a-9QCuZ`^)js?h zt11$5cB|KvIPi%XHW9DIDgl$4>*QMzYn6B1b>9z1#UJ2VADqe(cAMh%~BfYNmS( zK1|0MwXkyy1b=%o-M$@5KN)vyk8dO~Y8a0hkA2VDnR1qMa#Y@oOL(C{F-QV3BW@CT zv5n>hJCs(H++lE<2>mr(fB*mjC_w-+HYyrWdJ$(U)ls(IN{GgObkvoGI!q9WehS6zW-pa}? z11}jx?40hH;wPwc)q=S*qDyjSJv8 z&E>7hNumNqH3JEZqZu?s?uGLA%qBaHDG~>qK`=XQf zF1C$2I@x0|gjBV5FA-)nFVwZpaL(9@a$JQZ%>Tf58Qdr=A*$bp7|LwczDwCF1E05Z zC;$KhFF^oHCXU3fBQOw4K(|!#hjwoCaE-6{6Zt`}S{7>8GAiE4G$c!lKZeudE_1$p?TNV>vIFP<_`jQ`<`G zrspA~+~GYz7j@)#gM^~Euo)>U@CB_tnLzqsl=U5So)P|doCSk9BpH$}7f1_JT|ao_ zYUjK*!Rr!0;JF#yO*nv-u#F=n!W%@S_qUR zQ__Fd+feOACYijz~O5AZo(F&7^Vtcw~LOYovFb04J{a7&k-jOgU*H9Vh{}LYoZs_aE zXck`2HiTCACn}-?qsqhb&PhDCBQt>c8Rc$2L<$v{JGQT=gp4VT5$gguo}gU+%6+JC zZ6cqPX-udZ(TClsW7F=t9!w$I!`vAEvwm#%CKU#l4tw=+uAa@9d!Ov1L zJ+{3zJ0`j$x)6Bpwm5I}HKOoijd9eFA9J_4%_n2P>Y*01tcCDU0000$L7GMhUjPO_ z%M%(ndMhRa?|D;jyS@59%kul^vDdd?xgK^#N`b^7v+eK@gIfi^~<_F79qeC?z3A zN2rPQxv_&MNC($C@Q5Nx4z{)XXs3;-(v9$O_Eq<2!+qt{g7Y&yOdW5*zY`tU&1*Fc z^qxX4H5!lmf(HaTU8LgyRz7X_gR`_a4!B+R8-=v%1sB9EjuZ!1%!gSU`64GaC^>HXH0$W4bQ|9eA{Ul z&qD<>dEFlah>37 zu1&^tnwd6QDvjmA4@B#0DG|-D;;e7)ORwRb@x8w1pk8}z^l>{RB*HL%dM5Omm`0Ts zBpS8mNUYFJXAg>Q;tU9aEieVO54ejfB$1yYz<{xgag&INYO6 zg_wFf(s8P{F!PQU*$uIU@PLrb&=E9l&3WDeUF-uL<%o7B+~4d)^ZPzKK4Aa=0|7w* zOD2(mcmEPWEn}J+uqmdpjfWMZ$q!(c@9yx=-8&Ktw`1JK_n?O75zeJpH>|_VyP3hC zBhl&EgO^LiEGdmaxOmEjO4H2vmXYM$ol;VtAFOpD^W*D^v5pg6_AfQ|ugHmClD@!& zfUP%?i;Gr1>E^@JM3ZidwWkEwFl!A?SBJ5prjLG$(;aO=q1Kb9wBs@-D6UzRP7;B@ zW2dETaBAE<6BaKM^TwPZQBjPvFuQt26932{c?abe--w%(D6k^J;`Q|MoKEYfL^N@Q zUXsuRdmN~;{;e&Et;!6@7Mmn$m8>u}41O`_GU!2Vy%5|nSXs5%OaQ<@KffC@hc>iz z<=b1hl(MgPhhUrUjn!(fdg=*0%)gP@65B&Sl4-dD=A*e#D%wJS-9pVyH;L22UO8@J z!!D?jXq4h(U2s&oslc>!rHjLv9h>g{G z!1w*TC{Ts4Xl*^L!H|Q(Dp=T22UbVTvq%tsH-~on673TXk1wMup$!knFTG_dXQ@+z ze~L-iz%T5~uKj+u%GE!2-QlxBYNWo)>P>3xB4Tt8ndzn&NVZUy{PoF{?MuyF3BV>& z4gjQ(*8npw<2xa*$xnsPyxwyXNK}7@*>H?L1Mt+4$VIT`H@n-4_Q_dityWtWGj_sb zW_g*C$Vh_BCENaL#(%8iE_#|z1hWR6QKXk>as;UcJknM_(}wom7u_Grb^1jn%2wV% zxQrNOHPf}G2g6KM8U(t_#zFAjG;8ug!hLqM!RqdyoK!WZKh@xB%h~<;JS~>2PK`Tx z%vjRyyrvRnE5I=H0YbqXb(SNDGGC(!`8dB1qfJl`ZrBoto*r~5sY|Ta)SPH_`+R=P z4A(^y^9M;P90HonH^r$(1r+lD08m2MVDmEXxtoe69zw!%P1Z?-DZGvM2E$u4`ws#^ z`l_n=#8(NbJ7>WUS#@wVmH{FNy5QTP*2KDT_!mY8P<4w$&$hSdAIhXP0000+L7HX> z-v9&N2ACx)$&?Ian&Tg{u=;Y7$-k4fDZoemLE*ukoJlaXY!M_6-eNEI0We2WLYppM z=j4eUc&s-r+F%jNsDJKT*HQU$JT)L9r+YN6HIVkv{3&t$3~*RDgnRmbtPX)m8k! zs{pUH-1EkhaH$}&dc^PyRAYY-7Tx4`B;fM+vE+uaF{a2Ugrj~+zyBu9Q8iAyIqAXq zOh=|rgn_-b8rbLN$rTokKhoX5&wS`n|6#p~E6WAfJ!B~=# zjYq~31Hs4Qv3bPhn6RcmjN9`P622%TKAarqF(lH2mgF)+O^U{DzmKFPK8g`7*8|5} zQZd89x(LR7M>ra>!!U^LqBOkaLSkLz6%0aX0o9RQFNG^zq81iFmxO|D?l zY;#MZrP;S=Y1Jg=!UukP<8W^j*YK*{b_uipA8f8)XV~FHOVeDvR z@=X@ae;|*I`i8qTeqw6Xr5xl1Uab!}j)xoq6YstuAt%Ige1drD%IBj00RL*081vBf+hb8wU{aA$Q1_93M@Q2 zfJ3?wTcT%!q9%8kFbaj(looKJj*txFd^Li5+1`-@^W_ikT$K;nUBC;q)U0v-u=4pw z%-f*aS<8Po;N~I-CyJdYwNWrw^3oGAj4_igVvM%mnkLWph?>^ra0_I?fFyjte7Wmk z%ny*MOoLKXvj4KBDl2=v2NFE4Z#V6H6%*x9FHXN^yhUT5CpLUvp*!A2&j{^*z&nKq4)#rfZvZzT}-|8VUIG zA9|lBc0KP~s2={0=JG-O}F^K5jBLAluWCL`m zoo_lT69_Vd&&8TIScfT2v2d`l=0t7j0u&AOqXI0BvixCQFxVJnMRM)>eK#9F{W^LF zyZ~xuhGwu6;CnkiOm9Rf!)2uWogaWgQ7`1tIvwiZeHX!4lG>nI>tmU^86@R%ML0iTS_O(kQOUiBeHJ}@eI0L+=* zcfU;4eCfXY=0;_z^oUA7u%S<1Sc@u{4|Qmt!D(S}*S1g4FgjJGP~Dlyf=VTmL9i(R zS%IxhxFe6&5Qpjv=r>eI`WR}9aRBB$@Q8TeySg&tUzj7j!vf9+E@?<_B2^<8I11sl z)Qy6fcN1(ET=re%yjgr?h#_kv1WpydxHyijs;9Amav!24dz_{K7ZkeS{vj!WBN9yb zHCR{dbJIq1*-aF%)HrduDEUa=)t1k&+{b*Oxrh*-V}u^%#Pek$;~HG3XBk7Y`in_W zQu6HXV%fJ|v{Ygwdu-Vmc`S*E-M?(n=T-O;f7J|1cAXJp#g@bkijlv&Us(A+sx`L`Xn zSLnQ2TLucLB$<{fB=uz9mKJZmvak#8txa-8f&Hg`uuub}ALk1;P{XHUi-`?ZEkqmp z&f`_FJH4$Ds+a5#BkQBLK-q9Ss75+9(lQZqKQ~i$#QbYef`YQR)DemhqH!`UTtYWx zxNk)dmp@7v@ChRe8z9V5hv?xLRScstUo?2n5(`|o-1-6GT3+KU`OFAzy8r+LZb1N`nuZDA5%=R}hVpm{V&vxCu=cmf zf+RkcnAXLI9og+C*w*O`&R0oqRd7xaa{#FzGz^GzA7PhA>5#O~WTW=CO10jt%+tWR z3pgw=_K0NX_LNZO>-~HpX{q5>@rOmDw2M_~gsN~tzJ)rcNFDmY#F-G_#-kguz_ z3TY&-M(hSdb5T5-N!rR%313vpasj!Y{FI^T*nXmODPk12#huSOpYJ%(Z4p}!c8or=t3Zvz@HP+&#Apv%+`Rjhjs2iq=}glHad;sA{3 z@%H&#Et(LVe#l`!9~=@EPvR1;l3p!#-JfJ*O@H~zlB2f$2%{#&i$u9K%@UpLzEcJl zeCy{;s}0ZT=JQh17(zwVoKZ~{19AJeH%_1Ep5WI)*p)PeCLf7$#^eH=LO$yz-FH)i z2B(`|H6u}7$Uwz|*~9HfSWOp5MO!|1qDQXww$`zn+a={;fU$+AcHoBoGe^-s4$Kn- zXB;zJ{5Xw?wQcj3>f6sMuL$sLhr<#6$?GP`vrOp4pHG@$GiZ$eEvr^FI=H{uMh$t-FvE!un zI7{Wv>m`rA+($ z4$UAGI$b0BCt`da`Q3`{=6wz3uin_`>hf$Gjv~-9Ymanz!RdKAGEc*R&~AT*)GYe~ zSUyuijYN(U-hKMal%bTWx`&p6;DHyuU<;TSrm%-ywW0WBx3*LfvKA)aqgg07WM%D& zbnBJJiW$&?F4LQJTZS@P?`Z70<<~e_Re>d}%0xMEApY8mZ*ZgOfiH#dF8AXIgevzzu^@f z5X-oMYF6SRqSe=B(Yocokivn*Vj~Ic+B8lZQv;5HkW0-+TJQnwgH;e{_(~9Y6NA3Q zLU7|ZT>Gsp0_#e(^y77#)nX0cqw^cv$gBgQq1XTUN--x<`r%M$d?r5jqYVXGkL2e) zF8Q^gL5hlVd&;0{&f$*;N2o;}Ca((6?UV-eIwa$g5vt)C3b0Ph#=90WjhRPy3S>{( z;Fg=BNKTzoOD}E_2H3-6S$1In00VVF081vJf_MK7A%w3Tru#KJ%n##rKtg}niHM5oDO{@ve!N3Y++LQEu&rLx)qH0D5u9h`MJ(s|S5lyk8C;k$6 zZ^CBASfUgZXClFqOXC=l>4b`{?PE_&dg|ey{p95Nt*Y|G8Ll`eXxCnZFsP^y=!r_j z;#gf%;WI=q1S-197AzWoS&LgZ3Qx8cS8yPxVpcbCwM?yHU`uG>)%HFy_pm)CPGO5{&pRQ|v0 ztn7A(9M9dwbWMZx;~xW?Ev*C%WP|5h2^vwaal2gK|KB_}2a8&HAbVRrOGz_wz#>9? zu>c7jHgD!8PtLz+Ejzo@{X64#UreI%VH0@Ew4OZTT++JW+UCjf1`qlr zz*h^3aF$V7z5rgPi%5h>J4*9_&GcrDi12NE3G~<-4x&8d_Yw37{QmQJDgg1-lRy@ zJh$MpBM`{Fr(=YKfh6afU;wq;1yA2wZ{f^{(_!O!4OiIimy2r&DO#+WUgx)SoaSO_ z5jn{gJdHn+?FFZ|#d<{y>ryAIaQJ3g%ppzqjP>1@#f)YoB@z86_xq$#Y4Hhv3_R%I zMqj98x)K`@TidlsO9zY*liq-Y;iG|zFT56IhiW=@ zY2;E=l5!>2Jo|U$QQSsg2NbfpkPGv0j{5Vn*&KbAA_<6w(S=dQh~`_*2-)Z>>1ttb z`4|)s4g(ndrU_pYE=Xfidc*$l9BBbS z1Yw-Lq(NYD7{$oRZEu8wH(o%T;xzC>n}%L8i~# zQWS1u*Sc{BKCVok!8Ltm{fj>Pd0yGZfhq4$-39o?X*x=MvHsv0kH!rvwIs>z&t@j2 zyKOX9WQ*p}fn{&fp>=LZh|m!Qex#+F$#@xRFA`vHa@TE_Z;vk7F4~_vKkZN_ar1x8 zAP-F&dLVM`4?zbU>3sWZSOpf&v-Q_qKDrvy0mo2y&a6?;`8XSDpUcV~m9_Wjq%cdg z)?+5q8{{&;a8NW{DrH^~RR{6RfT@ABXY_&P^hlS zrJE_0?)N&Jx)=apGiCGd1Tu^)eB)rw85Kay>0U1PTre&K;XYwH#~;h7R7b%@P2E;G z8#ia3uQa|y#y0DHN%YjHz)~fQ)Xr{MZ<59q?!`~-Fn5#Kg-_N={Xy}t6;<$h`7BxT zXAWy_6)NotA`-p+dxf)?Cq}_5ivZvj(w;UP+?N_bU1PQHK_|HU>l0Y$M zVde6rvi=>0X{|1Hb0ufaf*(OTaY9h(CZS&@E3*BFR-F(>Ee}RBnnh3C|I9hSET3qD z9svw8DU@MRUph9AEgM@%GoVEb<@rVZ6a9;%f=XsghW1VzP>o**)8uzG&0)s6RR7aq z4wT)AFsD3VirmE~T2UQ?o})nx37?>$LSvuv495gcMXf5J8vC=4ax8a&%CH?k+C)SR zZg)19$oL83$Fy=Rgg235EYvBQumIb>1nm_d{1hX9Z?736Rv$85*CPAst>CBv4Yx?F zV{j@Ka}R8;J>@t#xPpqXEVks{4rV3&?C#5(RUvDvUJpikwo-lh67liTvD%b#l?~KG zMi7_Ai~*%YfHIi_)rh(#_ul(Pk&y`ZDA8v)nOVj{2*WApU@NRLZEZTVsM!!-+Z5)K zdK4a*UB(IQjO(5)_okaaqsh4aTH)b0!cgXQ^xBa3SG5){YuiSA*tB7!`}dx+TBp*b zrKaT!gDT?q#rY|Z$_Vlx_z=4ki;^%kIa3w9mp^(I7yP2bdi(eU}%HKN@>nv#*U zQOZyIWN^q%&;iL*Bdw8`x%Wdpmr=j~O86coIwSr4WY__wr%WGRcM)Q z*F2Ob*E+#D^v@9921z52Xqhu7mkp08N3CT^{%1Y`HZKQ8g+|&CRSa29xynS+FYyji zC)Qi;!Pa_%gp=)i15cxgUi-}h!}MD)!f*vAodLlPl2czPlz{*M1z$k`OD3s;cmEPU z3eaOo+#^-6y7tZ|XJOwTP&_)NWS;r5^e2$R)_$WV&>YL`A+0Zx@NXpTRu?3-v?5i( zciqjPaNMK=BOjBfl0-q#3?m%Z7KNqi#_ zGbT>{pqjlCrFq#f1Gt8Y_x5ciG>&CVEC*!jnk+UlEoIzCu*f5w{9sziyU3v=x=S<* zN~+-xkiNEJ>>C-a?MApaAC8aKK2}n1aG}ulqFXS##XyW?J87);5!R)&Y!2-uWS-wD zwc{S@eN7K~(Sh!&pUa66b=Y=v7`qE#2d6(3f+MzZ-do;w==_>h(1OZ?Q0vkChG)|8 zX@~x6vdwlf4Qm$8_Zse>BJ)@z!jz`}!xxCJlAfiDQ=|`2ZHlW94Ee|PTyv@X?{BFp zit2j2J*YBJyE>#q2kUym8@nhjq=Kqq*F z*}X?-lIY?O0fOGYVctIN0n%Jn#JYA1;l{pWbnOX!b z@~jUHJ;NZ@N88@?I;SsxhI+BMa@MldKbRIC6=+?I{q}4qp&k z`iYEIbxc5w#{6-P=2UFH#dw4xs5I|v1)Ty@t{3;1clyJDdwTRPa6rot+T8*z7~59D@RK1jPBmME z$REm02F?izF(%%&|3qH7J@TIJBdqG{3R-tw>T~-&@7Jp^BBPI}5X=oVvpA+%3R0?2 z*iOZAJh8_y+TM-rklhG}^F2PWxgnPT|1?Nj^=3@3IVE4n5WN07^30hwG?J210))p3 zhV~1B?JW<)Nm|;<#R1*I(G}VNjI1HVxoWyAVbMoQ$p`}@!5(j= zpqCh=!-=n6>lL~QAGN?+_iBIpxF{!zW3sC~pla&<&czH=kQn1>z8LUaZA)2uZfk zvLjoLo43ccClfWAV|%e4It%qK?q3*vAqMN_dA0f+%RL+LtmNzzId_w zQ*2*EQN!03yK~{OukLCMyExZB_EH5CLk#Bcoxnkyqo3yu4ogG=^#v!}r8v>OJWvf0 zXT3f%#T8J~-3kKpTNS#{)TRvOu$A%L$7JwOrQ^3?WNf#oy^NYBW=b_5k89im2u;&Z zYO3YVwV*O5Tmgd9r2qf{X+fIC3x5DCl(3LzS@jJkJi{q2s|kL_WGrZuXyBx_+K>fVE$RPNo2|OM>Gj*Qprq3?%_R(TxdCC4-B?#2*66ZIK;0Lor47V zpJ)->^<=_4VYJ9UD^~N9ynlL_lZ<7t*54fe zOn_O@dcf!iA#d6S!tE3CC!oLc@j*@t)?`0EOW+H@N;s!ti*z$4>>RrjN`mYx2bdR` z<@rGe@2c%wHM$JE7Qf71(maF4>sA0cD{|fbFxgtmked=SwvN2n9eWCu(=Z)dXOw2^ zFv3}fRNqBG_PjD_x8CRo&za3$9vwqkK7G{0?rJCGHYYe;9Twx(0=tbTj+Y7bE+owv zq|aG%kA;6Ss82Y$43qbgY~c-@Rz!by!GDbBFD+0RZNJNQE1KzB&MT+L-to|2asr)J zY<*=IY1v_&1@(5GEWOjl;+8cqRTjGMyJA0t{!ethr5D^QH`US+B|=Q2)2E6rvJKo} zo&My-{Rw&kE=aGNiMw=@ErBt)5M_$^XCQ)w5XK-~1+P*al^*C$Ac4y9i#fACEBz(De8Ko2T7rzNh1)(oo>oT^ImE~ zV+AOaCd(-f2K7ph+yXVl1X|C$Qoqxy|9+QJp%UZmU>^%f^{K|pofyItY?w;vIHipSZE(FDjWa4uKl&(dBrA*Zi#-~0=t1~u?t?mq45h8~ zE0AIlxG`Ed`fw{FY&nIU8HRZv4#W;V*3KOF3pt#xsUjs2995*4fD;nWYeMXDOxox zgiWg{oqiU!t$=R#jHBwnqZW8phcm4}mqaY^JTSb1m$d7?Imbs|InAut?jZ7_uz8;2 zI-F&aaNAQv522#TvEto87a=V**San<8POZeot~M6@PM^n==QgT8zKRjw_Ge%d82e5~Yu1<|?IiO~_|4${rve~*^Nef^ zu*vFat`&o>Ti_S6?Oj+&OR-%Pm*4atIe3Rbknj4H+N7FQa0Jx;(n^6%W__=3uF)zF7zx0yP)zCcX2z2TB8a&qxuLi8yE-R*6!9kA+EV4zAR5`^;2# z9`CDqK4iuvQU`KFHgU8t%tguB{HvqVLwf|b+J@)6;iMZJsW(xOuP$p(+F{LI94HSO z`!%8qlbm`hjZkF=HKNFCM6$_=qiKnpS{eQk8MQZdnTI9&d}Wj#{_s z^G>tqQa#(gs?PqL=Gilng3vayZpsmXz20pPX|lES;`H-$j58>d%T30OefJ)slTm>FVn63pD)zwl3n+37?;xFktajw26LuXp z#1RHWF;PL7-J^|8Sm$W#v3(8ni%iuZmYQ;)2D$CU*unb_e7KR5HHz>eBw#rE6U_-O z+#*n=Y2O0h$>r*4ksaCI`4`h*t|kZ++_g^RSZejPEpioF6;*7W(c!C;O>P2|2O!C6 zEhy4^^=R%1(q|!vk6=YgHzgQL6hfp!#nP#)dkh#pj()k%-ob7wbp9|?Jt0Pu)V=`( z{|&nA-|$AtZcKtQl&yF-T299%v%xxfeDG1AE>V((m+F@OFqAl+T4J z$o`bi)?is6NS9`!^kS}hA^j$RFe1i@qOY*~z5rNTEFu+~F`a0n6Po;&MjT ztYA?3@4W)yfF0wk0-<_Q#03|lYNC4PMsrM$(?uHEFiZ3oNuQ!V0&j8Qxs!TFx~{v# z*J-{gKVqB{fzW=;4~UhWjvOATf{Dkj+c%6(lT@K=nJmGduBo?;(4{F>UE^|Vp-kEP zK0`_!^9K8Uuxya6_Zne&F-Hudn%;k-6)DHLY+pJ#)zBlktRfU@OKAfuHK*j zUAO+4k4Ms#2mB*VBf6xSd3b+24lfB8>6(QCs< zK7w`*qRsmlS}Npk@4L^zPk?57*xLuOKp&i?E=G#e6eV|Kl2cJh0BBURyQDtscdv8_ zRu(M*{>C(SLwrV>G9>)It9S-&Uw1|-_2g=Ql6qMK{>QZX=#n&|%Gg~v4*&lyC1~M5 zZPt9R71LdK@c}N^@GY>~ST?P1!2DLcegX4!6+KGhk$0-d>LN(i2D+QhI?p$oC1_uX zP*CJ>IbAFk3?I69`2{mu-#eNumCs&docHRbw<*s!-!;(pAwzBvI3r(N~&}&JYA##np3^fYTkm+(1(XAaWfyVr= zczkGv(!B7BoIw#4c}9xvdbQSH^cz|@n89c3q*mEiWxI zXNAtRCcO#KB0x1IwXdxRyXkNQ(@w0O`0x;T{FuOhV?vhD{BH7!xpzIqC)O;i30--t zHyLU%41E5>P)Jxd*v@y_%5Uj3(HKKXD;%x%5|d!7sqYX506$lV?UWwMY(5H(y#Ill zuW@`@GM1Xn**}clFZg?4hj=iZcNpvqR`)nA>3q2R2l0cAEArro@E>3^adcVPe-04j zV4|$jEBwnLn6}QO6=kyeS{5G)QY*#8MEZxIFDN|5QafK{zH!zpgQ&DcD`IX;g-PYtqta97&f8xjEgLgE>W$RRp$JlN|IVdRREU7ma z1ytHVg+WNzSW(${tTu*)sl%9ZI(*jFOxehS9_a#Aw=Lpvq{|_@vuLIDQy0LO(@2gF zrNJ(J%3-V0`#Dj_6NJb9X*0n^L8~W*v+%06kY(9}A$&lw?n71upN+|9kn{srgQs#4-ED{JE`9ul zrH{Ptp}#J_^_fU4>H9|>yC$^-HQ|8(00!?t0HB)Y3x6gUgab>)bLeSoKUhE`L>QWg z@Z%O*j#kGP58w84=~Nfrw-q%tj@Q#es!Bx}TW^slV3Fn7YDTESFoqSqATRm5`hln~ z^21$Qu*}Y^Y{MGKdc6j)S{%1B;B;V2@~tG3tEK`;KgJV5`_)5wq?N+d8d|C2pZ|%p zVJA}>(ja{3GBtds2MCYSvmi76Rlfc=N4-l)nE(G2o;(9*JM5$@7JGh*XnQrv^PiDw z(s6fS?cxbQYpZrL4lQ=SrPpHVCp+j}*|Oh#U^%8z$yv0XMXE^9sOl6_LKUf7XA>B` zwf%9J=9t_f3AeRmuJh$oSdwwV*s|VJ<8S~*KzHd54SyGPROCEG zaCUOKRzCWv1Orll>sU7E!4Ddc2UqC*&gCJ-KV3uOEa}s z5yJG4A`^vgIh31qSxqqn6pkRiG+q_VlLPO3a@xUcYLQ`YUT_rHoWX{{(nelOOx0nX zx3ZZtN^>95*Ky@apnXLy1tEsHFSJhMhnjhHiJpLbw_1~YP)@9vO4(r_2aY}aFS5aI z*2yKo3?e7*TvC+W#;ns`$kdW}TGUQj2}!gU{*?@Gpb{RIDnQnIqg+!HtKU^mY^Dm% zg-!1wsCWS95gV#=6+FT)MkBFv;YA7`q6cvd!Aj{V^IJ#ifiH)T?A zvMRCcL%unNfH*}?J@)u7yV)U6bxoZld%iy2@vi3<`jTqc zX-|+`Ex6y7l_7I$58Gv- zkraDcS5f7L`&h_D#ao-FagK8>$(B5&{y|E+ICE?+k^P3mXYwUowBF$`DU&K;{7XI1f!~e^d++S6fJBOygZI#imA)O4H&~Mqid4 zZ$lP7fO=3^fW!$d7bqHOW5c=al2)Std(;aiPX_xP>%R_|CQlOU07^dQoC{p=JVD_> zrmI8-m}oMmV^FFiBy&uOr<-v)3=hS|j`>Q7P!HjVhenQ;da&@SOz3YQjK=n$NOcy?GG|L~aNO+-2ur*fo!C$%a2G4d*)VD!+Q3Xc%&%(UXh-t~F+ z*aNqLy48R@D#0iZ%p4(3E3AybmS;(&qHVSepIon?zmR`Cae^R^84_i$ zN?_7*H-t4ta#+r;Iiie(?fu@KW!n@xy5=9_0XNxm`7=O_jlx*s>5gvhczIecJwUYr zisvK{OYY>N#Yd7%el;4{!)&Z>_@GTs>S+mnXLba{QyD*cpwSmf-6Ws)QmjaNXlz1b zLToWsHPb0?lIE|bP1=49lI!G^{q0eCE>{r5sj&b61JXeNOD4I3SN{xgaQ^bqozf#NIz#25=nXbxs71A(X zRzyVeCzc;jVT=e5kWB!dd*NP{2eF)i&~1~XJtc3xV(VWt&scg==%J5QfNk(&28`~) z_lWCIQ)S4VOZjUNqNls}&ObDjKub z02Y&_(jY4qy`yqKj*dmQ_gZ}6hxVPZ&B!wg6Z2Oi$mv6DB78m)P@x3Rq#&O*^z zpjHa>UfjTdhMhoN0pbH(P9sqtAGCGjpizidP@dTvVVSg17p*l+dp=#QAmn)@ zQY4^_;E7C8fTN4k14^D{-5>@SoD^g9ka@O+bIpcDzOtU%-oIkiuXN(}m~W`5t?u6) zd#S{v49N!%Z>v65xG`;KNmdCF#rg=LGJ02t?H$FdtR&I62XFwmYh#m8G>EzTX6MIz ztGp}p*(+2^r3WDL`qtD=2~I>>*3EU$TdY7PB&YXHmA@@mI7NpT`b@EvhH1xxZxya=ZB5~eumA2 zeW(-Hg%tgxrD+7s%ps0hjM7@T-6rT2Ji;4<;}s={+42$-*FUK4g#O6-6ClFon=`Q& zYcyDDV0^K!cmL&A{E-5|uXOfyrbIN{vE}p;&M3b~V1!OakHM7imI8{Yd-3|rx*qDl z>!;G*HX1t%Be5G}Gmg)p9#2!lh!B=1XIQ!tV9%pChK-a|Z%A)J2V|m?>)3cNzSB|} zO9Zb<(V9sK^8_s_D&ZK51OxS^EDS{n0&5Ens(b44X2L*~Se1~to0+>{N*v{V_@+3` za609qd1z|^VlCN7&0}o3Zsu{zyEWDl@wDOPH97i+=Q)Wr;`d7vO@J;*%!h6dTz;6? zHw~BZc{)nsLnb!lMu`kJz_i2IFgDkcjW1zI0002nL7N5(e*i2Oa}O@|Tx#3ehTEcZPM)ohdy#*6}%$WtW%00tsK0HB)& z3x6bnvLdq?Sr>bfxKFaVL-iQ!*y)7=_s8+UPJIR&J}+Bp_)-sU4wO$iZQBFu@8Oxu zDh$_(p@-(F=lc9gYf82w9}rhcUfWgDVkHE+4b#anHH@m;?H?DeTgLdyB!4Ju{eqR} zeWx2@#icMMXQ{`tqV6^e=oebMsK>?G6dLwaG(B-W-Lqlt1nzG__l*bI9DwV2W)Lc_ zQW)ZN-u7Hamzf5~`pViWfQ1x@0I0N)w3TnXuASCb-3LZ80M+A9xV!7CRXaa5fg0dd zzt8}-8=Mx+AZHi1r@aCQj1cF!%f12NDkHOy3Rrq>5NL@MkgW*A-AF)B=J#Dn*K*@) znBPd)TS<*F%!F_lzUMv5ZpJHQN?zb=BC&tn@kA_b?m!6;LeVP&ogxUHX{>q+*igA= z#VEl6xC5s6G{4_yY!o9IWN)M+Q=4q>F_DQ57>0E31#(K#($li0?OkJ$_%{?Rvxcy= z4KCi5dWl38wAs=a%tRV|xEJv5yR&7XK*ZP8ot%!G%GHq<)Hr97lL+zEl3!{5?(NDk z4V@)Nc&TyfVTC`I6xSzJY)~A+ZM&-~*|N<x1K3Wt7obgu4VkL9){`nC#2X`h?uOSxSo$5Kj z%>TJDftWQsyj46RY-D>iwB(dIswS2ECkLRDU|7fuI-_;liApJvP0;ig&tChLhM?I#8kmZH)~mZiMTqz2!E8L;cKecjFWZcs8MZJ=8?0YgidDjt;1GE z(ev_iFMPlO0lLXT@M|SMeXZvnO#Ad<(xOOEYd+1o^@;kqzl?V-pFW4XADM*D`2z3>7gxaT@?jI6 zcgy`gAY~ui(LSW}%!HzuG@;|aj-D>)>fBF_AlD5M)6K7Z;?tKzQMkXMpRTn#=(gMb zwdD{pLUs)B-qia)fMn11GnuMmum$IUN`LXqs{*RhvH^j3R{g&1Lq&VgTppIcJcKzp zGa=r(Q?k!YINDUajfx0IL=dtip!dl*n*DF=k{V(5&Ku%M(K$*6A2tOk2vjgjJH55z zz_o7qn2fo^y>B7oc{rZQB+LS(hsF!Jp_Cuj-cdrB{02Sx_(ZVN5X+^ETxQU4Djd(> z^q!x9JCF~?{aZ??K84=V5^hrFf$a8D{xnl@^q}kGdf#7-o2%mfdXK!{Oiw+RJR=|( z{lb}(^%usOVWQoG!=&e31ykLl;1KmHSveqEL+1nU*$ zt_s{MHcoc=Uu-%IQOLIf9;JqIV2HB^-cyf5d;ZV4X$AeOk)#%K{*^yKM9#Hne>^gZ z$lEU_r6Ef5rAyjrjd@>djiVk-uAFq?R4r(DZO7DHjbp%0rZ0r_pbW_Uo}L=6xN%=N zVy%prtz1aq8JV?zzPt+U`i}vSdO!+_u0`x@9hsgoOhfSt@mruVK=xJ7Z)Sf`40i0d zgmHs7WFwIFkkk_h5~1Bm@jh#(^=Tk|J^708GCGA6yT$kl|6b-Ey}3~PC*|EcdcX&N zE_DQS&;S4gxj_I+Cc%PN{}KA7z{LCU=- zB)`bI=UhjBdAXjDjZ^Ky>Md_E5ZFkBFBn}yp*f42=IJRWH$xzo!A^hQ_r$8W8{!cS z*La~X;AZDke+_*qe@7aYeGRyeD|5wKy5*Ok)NaU#!ROjdpOk>}NS!{Z-)a*GXf&uB zUr6qXn-DO4?Y(UG(AGkrJr}e!95IL!8@+L^@wC?veI&kSf4iDmxPnyrPLU0g5~Nj&YrEp#?ytoIBsDNNpoR&lmt#M8v$qQ$!TS7 zt(A^AsCb+C_a4GLSAPkvB^{%*5EgElqRS5_8^v-l33!(c#JqG&d^t#26 z`|S^Q5qYuCRo2QO+91`gkE(bl(aYYugL}}^O+F$3h@=LbjR`ORw>}gB5Lw_^q;p`H8-D&g9EV&dkl8|f~p$Py2T(WFY@oNfC QQKmX4aF6ioz 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 z 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 @t25*SWMf(kKvhzZ&kN*w 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