mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Compare commits
	
		
			38 Commits
		
	
	
		
			fix-ungrou
			...
			fix-drag-h
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | a16032a8ed | ||
|  | deb9c4ecc0 | ||
|  | 62cd3b2061 | ||
|  | 7924907384 | ||
|  | 51d429f9ae | ||
|  | 267aebb9cb | ||
|  | 3f9ebb588e | ||
|  | 6f0de7c80e | ||
|  | 3ace7eeafd | ||
|  | eb9f15e4e4 | ||
|  | a147458120 | ||
|  | afdb15dc58 | ||
|  | 98b4b0dce0 | ||
|  | 70f26e0bea | ||
|  | b6ad396a6c | ||
|  | e44bb57b0e | ||
|  | 5c10b16b65 | ||
|  | 7ec1d42808 | ||
|  | 03e9e89558 | ||
|  | 3057035dec | ||
|  | 4af72cc7ba | ||
|  | f6aee81651 | ||
|  | a22f569ca0 | ||
|  | 8043f5d865 | ||
|  | 2ef50ab71f | ||
|  | 192a4f5e7f | ||
|  | 1af56a7f00 | ||
|  | 1818b0281d | ||
|  | 09973ba8cf | ||
|  | dd3174c40f | ||
|  | f0293b8f52 | ||
|  | 5561e89201 | ||
|  | 0f2420576a | ||
|  | d1b74675d9 | ||
|  | e04f5cb277 | ||
|  | a4603a4396 | ||
|  | 1141f9de86 | ||
|  | bbc32c4cd0 | 
							
								
								
									
										35
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,3 +1,38 @@ | ||||
| #### 3.0.0-beta.2: Beta Release | ||||
|  | ||||
| **Migration from 2.x** | ||||
|  | ||||
|  - The 'slice wires' action has changed from Ctrl-RightMouseButton to Alt-LeftMouseButton | ||||
|  | ||||
| Editor | ||||
|  | ||||
|  - Rework Junctions to be more node like in their event handling (#3607) @knolleary | ||||
|  - Change slicing / slice-junction operations over to mouse button 0 (Left Mouse Button) (#3609) @Steve-Mcl | ||||
|  - Do not slice-junction link node wires (#3608) @knolleary | ||||
|  - Handle many-to-one slicing of wires (#3604) @knolleary | ||||
|  - Ensure ACE worker options are set (#3611) @Steve-Mcl | ||||
|  - Remove duplicate history add of ungroup event (#3605) @knolleary | ||||
|  - use text width instead of number of characters for deciding select fi… (#3603) @HiroyasuNishiyama | ||||
|  - Update Japanese info of link call node reflecting update of English info (#3600) @HiroyasuNishiyama | ||||
|  - Fix typedInput label not visible on themes (#3580) @bonanitech | ||||
|  - Fix project switching when junctions are present (#3595) @Steve-Mcl | ||||
|  - Fix junction: when wiring from a regular nodes INPUT, backwards to a junction (#3591) @Steve-Mcl | ||||
|  - Fix error initialising flow tab editor (#3585) @Steve-Mcl | ||||
|  - Add Japanese translations for v3.0-beta.1 (#3576) @kazuhitoyokoi | ||||
|  - Fix image paths where `red/image/typedInput/XXXX.png` should be `red/image/typedInput/XXXX.svg` (#3592) @kazuhitoyokoi | ||||
|  - Fix browser console error Uncaught TypeError when searching certain terms (#3584) @Steve-Mcl | ||||
|  | ||||
| Runtime | ||||
|  | ||||
|  - fix error on system-info action (#3589) @HiroyasuNishiyama | ||||
|  | ||||
| Nodes | ||||
|  | ||||
|  - I18n switch rule selector (#3602) @HiroyasuNishiyama | ||||
|  - Handle removal of event handlers to allow mqtt client.end() to work (#3594) @PhilDay-CT | ||||
|  - update link-call node info according to current behavior (#3597) @HiroyasuNishiyama | ||||
|  | ||||
|  | ||||
| #### 3.0.0-beta.1: Beta Release | ||||
|  | ||||
| **Migration from 2.x** | ||||
|   | ||||
							
								
								
									
										12
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "node-red", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "description": "Low-code programming for event-driven applications", | ||||
|     "homepage": "http://nodered.org", | ||||
|     "license": "Apache-2.0", | ||||
| @@ -42,14 +42,14 @@ | ||||
|         "cronosjs": "1.7.1", | ||||
|         "denque": "2.0.1", | ||||
|         "express": "4.18.1", | ||||
|         "express-session": "1.17.2", | ||||
|         "express-session": "1.17.3", | ||||
|         "form-data": "4.0.0", | ||||
|         "fs-extra": "10.1.0", | ||||
|         "got": "11.8.3", | ||||
|         "hash-sum": "2.0.0", | ||||
|         "hpagent": "1.0.0", | ||||
|         "https-proxy-agent": "5.0.1", | ||||
|         "i18next": "21.6.16", | ||||
|         "i18next": "21.8.2", | ||||
|         "iconv-lite": "0.6.3", | ||||
|         "is-utf8": "0.2.1", | ||||
|         "js-yaml": "4.1.0", | ||||
| @@ -76,7 +76,7 @@ | ||||
|         "semver": "7.3.7", | ||||
|         "tar": "6.1.11", | ||||
|         "tough-cookie": "4.0.0", | ||||
|         "uglify-js": "3.15.4", | ||||
|         "uglify-js": "3.15.5", | ||||
|         "uuid": "8.3.2", | ||||
|         "ws": "7.5.6", | ||||
|         "xml2js": "0.4.23" | ||||
| @@ -85,8 +85,8 @@ | ||||
|         "bcrypt": "5.0.1" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "dompurify": "2.3.6", | ||||
|         "grunt": "1.5.2", | ||||
|         "dompurify": "2.3.8", | ||||
|         "grunt": "1.5.3", | ||||
|         "grunt-chmod": "~1.1.1", | ||||
|         "grunt-cli": "~1.4.3", | ||||
|         "grunt-concurrent": "3.0.0", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/editor-api", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "main": "./lib/index.js", | ||||
|     "repository": { | ||||
| @@ -16,13 +16,13 @@ | ||||
|         } | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/util": "3.0.0-beta.1", | ||||
|         "@node-red/editor-client": "3.0.0-beta.1", | ||||
|         "@node-red/util": "3.0.0-beta.2", | ||||
|         "@node-red/editor-client": "3.0.0-beta.2", | ||||
|         "bcryptjs": "2.4.3", | ||||
|         "body-parser": "1.20.0", | ||||
|         "clone": "2.1.2", | ||||
|         "cors": "2.8.5", | ||||
|         "express-session": "1.17.2", | ||||
|         "express-session": "1.17.3", | ||||
|         "express": "4.18.1", | ||||
|         "memorystore": "1.6.7", | ||||
|         "mime": "3.0.0", | ||||
|   | ||||
| @@ -907,7 +907,8 @@ | ||||
|             "uknownNodes": "Unknown nodes", | ||||
|             "unusedSubflows": "Unused subflows", | ||||
|             "hiddenFlows": "Hidden flows", | ||||
|             "modifiedNodes": "Modified nodes and flows" | ||||
|             "modifiedNodes": "Modified nodes and flows", | ||||
|             "thisFlow": "Current flow" | ||||
|         } | ||||
|     }, | ||||
|     "expressionEditor": { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/editor-client", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|   | ||||
| @@ -76,7 +76,7 @@ oop.inherits(NRJavaScriptWorker, Mirror); | ||||
|  | ||||
| (function() { | ||||
|     this.setOptions = function(options) { | ||||
|         this.options = { | ||||
|         o.options = { | ||||
|             // undef: true, | ||||
|             // unused: true, | ||||
|             esversion: 9, | ||||
| @@ -98,7 +98,7 @@ oop.inherits(NRJavaScriptWorker, Mirror); | ||||
|         if (options) { | ||||
|             for (var opt in options) { | ||||
|                 if (options.hasOwnProperty(opt)) { | ||||
|                     this.options[opt] = options.opt; | ||||
|                     o.options[opt] = options[opt]; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -108,7 +108,6 @@ RED.search = (function() { | ||||
|  | ||||
|     function search(val) { | ||||
|         var results = []; | ||||
|         var keys = []; | ||||
|         var typeFilter; | ||||
|         var m = /(?:^| )type:([^ ]+)/.exec(val); | ||||
|         if (m) { | ||||
| @@ -122,19 +121,24 @@ RED.search = (function() { | ||||
|         val = extractFlag(val,"subflow",flags); | ||||
|         val = extractFlag(val,"hidden",flags); | ||||
|         val = extractFlag(val,"modified",flags); | ||||
|         // uses:<node-id> | ||||
|         val = extractValue(val,"uses",flags); | ||||
|  | ||||
|         var hasFlags = Object.keys(flags).length > 0; | ||||
|  | ||||
|         val = extractValue(val,"flow",flags);// flow:active or flow:<flow-id> | ||||
|         val = extractValue(val,"uses",flags);// uses:<node-id> | ||||
|         val = val.trim(); | ||||
|  | ||||
|         var hasFlags = Object.keys(flags).length > 0; | ||||
|         if (flags.flow && flags.flow.indexOf("current") >= 0) { | ||||
|             let idx = flags.flow.indexOf("current"); | ||||
|             flags.flow[idx] = RED.workspaces.active();//convert active to flow ID | ||||
|         } | ||||
|         if (flags.flow && flags.flow.length) { | ||||
|             flags.flow = [ ...new Set(flags.flow) ]; //deduplicate | ||||
|         } | ||||
|         if (val.length > 0 || typeFilter || hasFlags) { | ||||
|             val = val.toLowerCase(); | ||||
|             var i; | ||||
|             var j; | ||||
|             var list = []; | ||||
|             var nodes = {}; | ||||
|             let keys = []; | ||||
|             if (flags.uses) { | ||||
|                 keys = flags.uses; | ||||
|             } else { | ||||
| @@ -188,6 +192,11 @@ RED.search = (function() { | ||||
|                                 continue; | ||||
|                             } | ||||
|                         } | ||||
|                         if (flags.hasOwnProperty("flow")) { | ||||
|                             if (flags.flow.indexOf(node.node.z || node.node.id) < 0) { | ||||
|                                 continue; | ||||
|                             } | ||||
|                         } | ||||
|                         if (!typeFilter || node.node.type === typeFilter) { | ||||
|                             nodes[node.node.id] = nodes[node.node.id] = { | ||||
|                                 node: node.node, | ||||
| @@ -592,8 +601,8 @@ RED.search = (function() { | ||||
|             {label:RED._("search.options.uknownNodes"), value: "type:unknown"}, | ||||
|             {label:RED._("search.options.unusedSubflows"), value:"is:subflow is:unused"}, | ||||
|             {label:RED._("search.options.hiddenFlows"), value:"is:hidden"}, | ||||
|             {label:RED._("search.options.thisFlow"), value:"flow:current"}, | ||||
|         ] | ||||
|  | ||||
|     } | ||||
|  | ||||
|     function init() { | ||||
|   | ||||
| @@ -93,7 +93,6 @@ RED.view = (function() { | ||||
|     var selectNodesOptions; | ||||
|  | ||||
|     let flashingNodeId; | ||||
|     let flashingNodeTimer; | ||||
|  | ||||
|     var clipboard = ""; | ||||
|  | ||||
| @@ -173,7 +172,8 @@ RED.view = (function() { | ||||
|             length: function() { return set.length}, | ||||
|             get: function(i) { return set[i] }, | ||||
|             forEach: function(func) { set.forEach(func) }, | ||||
|             nodes: function() { return set.map(function(n) { return n.n })} | ||||
|             nodes: function() { return set.map(function(n) { return n.n })}, | ||||
|             has: function(node) { return setIds.has(node.id) } | ||||
|         } | ||||
|         return api; | ||||
|     })(); | ||||
| @@ -205,11 +205,6 @@ RED.view = (function() { | ||||
|  | ||||
|     function init() { | ||||
|  | ||||
| // setTimeout(function() { | ||||
| //     function snap(p) { return RED.view.gridSize() * Math.round(p/RED.view.gridSize())}; for (var i = 0;i<10;i++) { | ||||
| //     RED.nodes.addJunction({_def:{defaults:{}}, type:'junction', z:"0ccdc1d81f2729cc",id:RED.nodes.id(),x:snap(Math.floor(Math.random()*600)),y:snap(Math.floor(Math.random()*600)), w:0,h:0}) | ||||
| // } ; RED.view.redraw(true) | ||||
| // },2000) | ||||
|         chart = $("#red-ui-workspace-chart"); | ||||
|  | ||||
|         outer = d3.select("#red-ui-workspace-chart") | ||||
| @@ -235,6 +230,7 @@ RED.view = (function() { | ||||
|             .on("mousedown", canvasMouseDown) | ||||
|             .on("mouseup", canvasMouseUp) | ||||
|             .on("mouseenter", function() { | ||||
|                 d3.select(document).on('mouseup.red-ui-workspace-tracker', null) | ||||
|                 if (lasso) { | ||||
|                     if (d3.event.buttons !== 1) { | ||||
|                         lasso.remove(); | ||||
| @@ -250,6 +246,7 @@ RED.view = (function() { | ||||
|                     } | ||||
|                 } | ||||
|             }) | ||||
|             .on("mouseleave", canvasMouseLeave) | ||||
|             .on("touchend", function() { | ||||
|                 d3.event.preventDefault(); | ||||
|                 clearTimeout(touchStartTime); | ||||
| @@ -390,6 +387,9 @@ RED.view = (function() { | ||||
|         drag_lines = []; | ||||
|  | ||||
|         RED.events.on("workspace:change",function(event) { | ||||
|             // Just in case the mouse left the workspace whilst doing an action, | ||||
|             // put us back into default mode so the refresh works | ||||
|             mouse_mode = 0 | ||||
|             if (event.old !== 0) { | ||||
|                 workspaceScrollPositions[event.old] = { | ||||
|                     left:chart.scrollLeft(), | ||||
| @@ -960,8 +960,9 @@ RED.view = (function() { | ||||
|     } | ||||
|  | ||||
|     function canvasMouseDown() { | ||||
|         if (RED.view.DEBUG) { console.warn("canvasMouseDown", mouse_mode); } | ||||
|         var point; | ||||
|         if (RED.view.DEBUG) { | ||||
|             console.warn("canvasMouseDown", { mouse_mode, point: d3.mouse(this), event: d3.event }); | ||||
|         } | ||||
|         if (mouse_mode === RED.state.SELECTING_NODE) { | ||||
|             d3.event.stopPropagation(); | ||||
|             return; | ||||
| @@ -978,45 +979,49 @@ RED.view = (function() { | ||||
|             selectedLinks.clear(); | ||||
|             updateSelection(); | ||||
|         } | ||||
|         if (mouse_mode === 0) { | ||||
|             if (lasso) { | ||||
|                 lasso.remove(); | ||||
|                 lasso = null; | ||||
|             } | ||||
|         if (mouse_mode === 0 && lasso) { | ||||
|             lasso.remove(); | ||||
|             lasso = null; | ||||
|         } | ||||
|         if ((mouse_mode === 0 || mouse_mode === RED.state.QUICK_JOINING) && (d3.event.touches || d3.event.button === 0) && (d3.event.metaKey || d3.event.ctrlKey)) { | ||||
|             // Trigger quick add dialog | ||||
|             d3.event.stopPropagation(); | ||||
|             clearSelection(); | ||||
|             point = d3.mouse(this); | ||||
|             var clickedGroup = getGroupAt(point[0],point[1]); | ||||
|             if (drag_lines.length > 0) { | ||||
|                 clickedGroup = clickedGroup || RED.nodes.group(drag_lines[0].node.g) | ||||
|         if (d3.event.touches || d3.event.button === 0) { | ||||
|             if ((mouse_mode === 0 || mouse_mode === RED.state.QUICK_JOINING) && (d3.event.metaKey || d3.event.ctrlKey) && !(d3.event.altKey || d3.event.shiftKey)) { | ||||
|                 // Trigger quick add dialog | ||||
|                 d3.event.stopPropagation(); | ||||
|                 clearSelection(); | ||||
|                 const point = d3.mouse(this); | ||||
|                 var clickedGroup = getGroupAt(point[0], point[1]); | ||||
|                 if (drag_lines.length > 0) { | ||||
|                     clickedGroup = clickedGroup || RED.nodes.group(drag_lines[0].node.g) | ||||
|                 } | ||||
|                 showQuickAddDialog({ position: point, group: clickedGroup }); | ||||
|             } else if (mouse_mode === 0 && !(d3.event.metaKey || d3.event.ctrlKey)) { | ||||
|                 // CTRL not being held | ||||
|                 if (!d3.event.altKey) { | ||||
|                     // ALT not held (shift is allowed) Trigger lasso | ||||
|                     if (!touchStartTime) { | ||||
|                         const point = d3.mouse(this); | ||||
|                         lasso = eventLayer.append("rect") | ||||
|                             .attr("ox", point[0]) | ||||
|                             .attr("oy", point[1]) | ||||
|                             .attr("rx", 1) | ||||
|                             .attr("ry", 1) | ||||
|                             .attr("x", point[0]) | ||||
|                             .attr("y", point[1]) | ||||
|                             .attr("width", 0) | ||||
|                             .attr("height", 0) | ||||
|                             .attr("class", "nr-ui-view-lasso"); | ||||
|                         d3.event.preventDefault(); | ||||
|                     } | ||||
|                 } else if (d3.event.altKey) { | ||||
|                     //Alt [+shift] held - Begin slicing | ||||
|                     clearSelection(); | ||||
|                     mouse_mode = (d3.event.shiftKey) ? RED.state.SLICING_JUNCTION : RED.state.SLICING; | ||||
|                     const point = d3.mouse(this); | ||||
|                     slicePath = eventLayer.append("path").attr("class", "nr-ui-view-slice").attr("d", `M${point[0]} ${point[1]}`) | ||||
|                     slicePathLast = point; | ||||
|                     RED.view.redraw(); | ||||
|                 } | ||||
|             } | ||||
|             showQuickAddDialog({position:point, group:clickedGroup}); | ||||
|         } else if (mouse_mode === 0 && (d3.event.touches || d3.event.button === 0) && !(d3.event.metaKey || d3.event.ctrlKey)) { | ||||
|             // Tigger lasso | ||||
|             if (!touchStartTime) { | ||||
|                 point = d3.mouse(this); | ||||
|                 lasso = eventLayer.append("rect") | ||||
|                 .attr("ox",point[0]) | ||||
|                 .attr("oy",point[1]) | ||||
|                 .attr("rx",1) | ||||
|                 .attr("ry",1) | ||||
|                 .attr("x",point[0]) | ||||
|                 .attr("y",point[1]) | ||||
|                 .attr("width",0) | ||||
|                 .attr("height",0) | ||||
|                 .attr("class","nr-ui-view-lasso"); | ||||
|                 d3.event.preventDefault(); | ||||
|             } | ||||
|         } else if (mouse_mode === 0 && d3.event.button === 2 && (d3.event.metaKey || d3.event.ctrlKey || d3.event.shiftKey)) { | ||||
|             clearSelection(); | ||||
|             mouse_mode = (d3.event.metaKey || d3.event.ctrlKey)?RED.state.SLICING : RED.state.SLICING_JUNCTION; | ||||
|             point = d3.mouse(this); | ||||
|             slicePath = eventLayer.append("path").attr("class","nr-ui-view-slice").attr("d",`M${point[0]} ${point[1]}`) | ||||
|             slicePathLast = point; | ||||
|             RED.view.redraw(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -1716,10 +1721,19 @@ RED.view = (function() { | ||||
|             redraw(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     function canvasMouseLeave() { | ||||
|         if (mouse_mode !== 0 && d3.event.buttons !== 0) { | ||||
|             d3.select(document).on('mouseup.red-ui-workspace-tracker', function() { | ||||
|                 d3.select(document).on('mouseup.red-ui-workspace-tracker', null) | ||||
|                 canvasMouseUp.call(this) | ||||
|             }) | ||||
|         } | ||||
|     } | ||||
|     function canvasMouseUp() { | ||||
|         lastClickPosition = [d3.event.offsetX/scaleFactor,d3.event.offsetY/scaleFactor]; | ||||
|         if (RED.view.DEBUG) { console.warn("canvasMouseUp", mouse_mode); } | ||||
|         if (RED.view.DEBUG) { | ||||
|             console.warn("canvasMouseUp", { mouse_mode, point: d3.mouse(this), event: d3.event }); | ||||
|         } | ||||
|         var i; | ||||
|         var historyEvent; | ||||
|         if (mouse_mode === RED.state.PANNING) { | ||||
| @@ -1862,7 +1876,7 @@ RED.view = (function() { | ||||
|             slicePath = null; | ||||
|             RED.view.redraw(true); | ||||
|         } else if (mouse_mode == RED.state.SLICING_JUNCTION) { | ||||
|             var removedLinks = [] | ||||
|             var removedLinks = new Set() | ||||
|             var addedLinks = [] | ||||
|             var addedJunctions = [] | ||||
|  | ||||
| @@ -1871,8 +1885,14 @@ RED.view = (function() { | ||||
|                 var sourceId = l.source.id+":"+l.sourcePort | ||||
|                 groupedLinks[sourceId] = groupedLinks[sourceId] || [] | ||||
|                 groupedLinks[sourceId].push(l) | ||||
|  | ||||
|                 groupedLinks[l.target.id] = groupedLinks[l.target.id] || [] | ||||
|                 groupedLinks[l.target.id].push(l) | ||||
|             }); | ||||
|             var linkGroups = Object.keys(groupedLinks) | ||||
|             linkGroups.sort(function(A,B) { | ||||
|                 return groupedLinks[B].length - groupedLinks[A].length | ||||
|             }) | ||||
|             linkGroups.forEach(function(gid) { | ||||
|                 var links = groupedLinks[gid] | ||||
|                 var junction = { | ||||
| @@ -1887,6 +1907,10 @@ RED.view = (function() { | ||||
|                     inputs: 1, | ||||
|                     dirty: true | ||||
|                 } | ||||
|                 links = links.filter(function(l) { return !removedLinks.has(l) }) | ||||
|                 if (links.length === 0) { | ||||
|                     return | ||||
|                 } | ||||
|                 links.forEach(function(l) { | ||||
|                     junction.x += l._sliceLocation.x | ||||
|                     junction.y += l._sliceLocation.y | ||||
| @@ -1902,20 +1926,38 @@ RED.view = (function() { | ||||
|  | ||||
|                 RED.nodes.addJunction(junction) | ||||
|                 addedJunctions.push(junction) | ||||
|                 var newLink = { | ||||
|                     source: links[0].source, | ||||
|                     sourcePort: links[0].sourcePort, | ||||
|                     target: junction | ||||
|                 let newLink | ||||
|                 if (gid === links[0].source.id+":"+links[0].sourcePort) { | ||||
|                     newLink = { | ||||
|                         source: links[0].source, | ||||
|                         sourcePort: links[0].sourcePort, | ||||
|                         target: junction | ||||
|                     } | ||||
|                 } else { | ||||
|                     newLink = { | ||||
|                         source: junction, | ||||
|                         sourcePort: 0, | ||||
|                         target: links[0].target | ||||
|                     } | ||||
|                 } | ||||
|                 addedLinks.push(newLink) | ||||
|                 RED.nodes.addLink(newLink) | ||||
|                 links.forEach(function(l) { | ||||
|                     removedLinks.push(l) | ||||
|                     removedLinks.add(l) | ||||
|                     RED.nodes.removeLink(l) | ||||
|                     var newLink = { | ||||
|                         source: junction, | ||||
|                         sourcePort: 0, | ||||
|                         target: l.target | ||||
|                     let newLink | ||||
|                     if (gid === l.target.id) { | ||||
|                         newLink = { | ||||
|                             source: l.source, | ||||
|                             sourcePort: l.sourcePort, | ||||
|                             target: junction | ||||
|                         } | ||||
|                     } else { | ||||
|                         newLink = { | ||||
|                             source: junction, | ||||
|                             sourcePort: 0, | ||||
|                             target: l.target | ||||
|                         } | ||||
|                     } | ||||
|                     addedLinks.push(newLink) | ||||
|                     RED.nodes.addLink(newLink) | ||||
| @@ -1937,7 +1979,7 @@ RED.view = (function() { | ||||
|                     t: 'add', | ||||
|                     links: addedLinks, | ||||
|                     junctions: addedJunctions, | ||||
|                     removedLinks: removedLinks | ||||
|                     removedLinks: Array.from(removedLinks) | ||||
|                 }) | ||||
|                 RED.nodes.dirty(true) | ||||
|             } | ||||
| @@ -3209,52 +3251,16 @@ RED.view = (function() { | ||||
|         port.classed("red-ui-flow-port-hovered",false); | ||||
|     } | ||||
|  | ||||
|     function junctionMouseOver(junction, d) { | ||||
|         junction.classed("red-ui-flow-junction-hovered",true); | ||||
|     function junctionMouseOver(junction, d, portType) { | ||||
|         var active = (portType === undefined) || | ||||
|                      (mouse_mode !== RED.state.JOINING && mouse_mode !== RED.state.QUICK_JOINING) || | ||||
|                      (drag_lines.length > 0 && drag_lines[0].portType !== portType && !drag_lines[0].virtualLink) | ||||
|         junction.classed("red-ui-flow-junction-hovered", active); | ||||
|     } | ||||
|     function junctionMouseOut(junction, d) { | ||||
|         junction.classed("red-ui-flow-junction-hovered",false); | ||||
|     } | ||||
|  | ||||
|     function junctionMouseDown(junction, d, evt) { | ||||
|         if (RED.view.DEBUG) { console.warn("junctionMouseDown", d); } | ||||
|         evt = evt || d3.event; | ||||
|         d3.event = evt | ||||
|         if (evt === 1) { | ||||
|             return; | ||||
|         } | ||||
|         if (mouse_mode === RED.state.SELECTING_NODE) { | ||||
|             evt.stopPropagation(); | ||||
|             return; | ||||
|         } | ||||
|         if (mouse_mode == RED.state.QUICK_JOINING) { | ||||
|             d3.event.stopPropagation(); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // mousedown_node = d; | ||||
|         // mousedown_port_type = portType; | ||||
|         // mousedown_port_index = portIndex || 0; | ||||
|         if (mouse_mode !== RED.state.QUICK_JOINING && (evt.ctrlKey || evt.metaKey)) { | ||||
|             mouse_mode = RED.state.QUICK_JOINING; | ||||
|             document.body.style.cursor = "crosshair"; | ||||
|             showDragLines([{node:d,port:0,portType: PORT_TYPE_OUTPUT}]); | ||||
|             $(window).on('keyup',disableQuickJoinEventHandler); | ||||
|         } else if (event.button != 2) { | ||||
|             nodeMouseDown.call(junction[0][0],d) | ||||
|             // clearSelection(); | ||||
|             // movingSet.add(d); | ||||
|             // mousedown_node = d; | ||||
|             // mouse_mode = RED.state.MOVING; | ||||
|             // var mouse = d3.touches(junction[0][0])[0]||d3.mouse(junction[0][0]); | ||||
|             // mouse[0] += d.x-d.w/2; | ||||
|             // mouse[1] += d.y-d.h/2; | ||||
|             // prepareDrag(mouse); | ||||
|         } | ||||
|         evt.stopPropagation(); | ||||
|         evt.preventDefault(); | ||||
|     } | ||||
|  | ||||
|     function prepareDrag(mouse) { | ||||
|         mouse_mode = RED.state.MOVING; | ||||
|         // Called when movingSet should be prepared to be dragged | ||||
| @@ -3414,6 +3420,9 @@ RED.view = (function() { | ||||
|             return; | ||||
|         } else if (mouse_mode === RED.state.SELECTING_NODE) { | ||||
|             d3.event.stopPropagation(); | ||||
|             if (d.type === 'junction') { | ||||
|                 return | ||||
|             } | ||||
|             if (selectNodesOptions.single) { | ||||
|                 selectNodesOptions.done(d); | ||||
|                 return; | ||||
| @@ -3440,12 +3449,12 @@ RED.view = (function() { | ||||
|         var now = Date.now(); | ||||
|         clickElapsed = now-clickTime; | ||||
|         clickTime = now; | ||||
|         dblClickPrimed = (lastClickNode == mousedown_node && | ||||
|         dblClickPrimed = lastClickNode == mousedown_node && | ||||
|             (d3.event.touches || d3.event.button === 0) && | ||||
|             !d3.event.shiftKey && !d3.event.altKey && | ||||
|             clickElapsed < dblClickInterval | ||||
|             ) | ||||
|             lastClickNode = mousedown_node; | ||||
|             clickElapsed < dblClickInterval && | ||||
|             d.type !== 'junction' | ||||
|         lastClickNode = mousedown_node; | ||||
|  | ||||
|         if (!d.selected && d.g /*&& !RED.nodes.group(d.g).selected*/) { | ||||
|             var nodeGroup = RED.nodes.group(d.g); | ||||
| @@ -3571,9 +3580,9 @@ RED.view = (function() { | ||||
|                     clearSelection(); | ||||
|                 } | ||||
|                 var clickPosition = (d3.event.offsetX/scaleFactor - mousedown_node.x) | ||||
|                 var edgeDelta = (mousedown_node.w/2) - Math.abs(clickPosition); | ||||
|                 var edgeDelta = ((mousedown_node.w||10)/2) - Math.abs(clickPosition); | ||||
|                 var cnodes; | ||||
|                 var targetEdgeDelta = mousedown_node.w > 30 ? 25 : 8; | ||||
|                 var targetEdgeDelta = mousedown_node.w > 30 ? 25 : (mousedown_node.w > 0 ? 8 : 3); | ||||
|                 if (edgeDelta < targetEdgeDelta) { | ||||
|                     if (clickPosition < 0) { | ||||
|                         cnodes = [mousedown_node].concat(RED.nodes.getAllUpstreamNodes(mousedown_node)); | ||||
| @@ -3718,12 +3727,13 @@ RED.view = (function() { | ||||
|     function portMouseOverProxy(e) { portMouseOver(d3.select(this), this.__data__,this.__portType__,this.__portIndex__, e); } | ||||
|     function portMouseOutProxy(e) { portMouseOut(d3.select(this), this.__data__,this.__portType__,this.__portIndex__, e); } | ||||
|  | ||||
|     function junctionMouseOverProxy(e) { junctionMouseOver(d3.select(this), this.__data__) } | ||||
|     function junctionMouseOverProxy(e) { junctionMouseOver(d3.select(this), this.__data__, this.__portType__) } | ||||
|     function junctionMouseOutProxy(e) { junctionMouseOut(d3.select(this), this.__data__) } | ||||
|     function junctionMouseDownProxy(e) { junctionMouseDown(d3.select(this), this.__data__, e) } | ||||
|     function junctionMouseUpProxy(e) { junctionMouseUp(d3.select(this), this.__data__) } | ||||
|  | ||||
|     function linkMouseDown(d) { | ||||
|         if (RED.view.DEBUG) { | ||||
|             console.warn("linkMouseDown", { mouse_mode, point: d3.mouse(this), event: d3.event }); | ||||
|         } | ||||
|         if (mouse_mode === RED.state.SELECTING_NODE) { | ||||
|             d3.event.stopPropagation(); | ||||
|             return; | ||||
| @@ -4872,22 +4882,56 @@ RED.view = (function() { | ||||
|                 junctionBack.setAttribute("y",-5); | ||||
|                 junctionBack.setAttribute("width",10); | ||||
|                 junctionBack.setAttribute("height",10); | ||||
|                 junctionBack.setAttribute("rx",5); | ||||
|                 junctionBack.setAttribute("ry",5); | ||||
|                 junctionBack.setAttribute("rx",3); | ||||
|                 junctionBack.setAttribute("ry",3); | ||||
|                 junctionBack.__data__ = d; | ||||
|                 this.__junctionBack__ = junctionBack; | ||||
|                 contents.appendChild(junctionBack); | ||||
|  | ||||
|                 var junctionInput = document.createElementNS("http://www.w3.org/2000/svg","rect"); | ||||
|                 junctionInput.setAttribute("class","red-ui-flow-junction-port red-ui-flow-junction-port-input"); | ||||
|                 junctionInput.setAttribute("x",-5); | ||||
|                 junctionInput.setAttribute("y",-5); | ||||
|                 junctionInput.setAttribute("width",10); | ||||
|                 junctionInput.setAttribute("height",10); | ||||
|                 junctionInput.setAttribute("rx",3); | ||||
|                 junctionInput.setAttribute("ry",3); | ||||
|                 junctionInput.__data__ = d; | ||||
|                 junctionInput.__portType__ = PORT_TYPE_INPUT; | ||||
|                 junctionInput.__portIndex__ = 0; | ||||
|                 this.__junctionInput__ = junctionOutput; | ||||
|                 contents.appendChild(junctionInput); | ||||
|                 junctionInput.addEventListener("mouseup", portMouseUpProxy); | ||||
|                 junctionInput.addEventListener("mousedown", portMouseDownProxy); | ||||
|  | ||||
|  | ||||
|                 this.__junctionInput__ = junctionInput; | ||||
|                 contents.appendChild(junctionInput); | ||||
|                 var junctionOutput = document.createElementNS("http://www.w3.org/2000/svg","rect"); | ||||
|                 junctionOutput.setAttribute("class","red-ui-flow-junction-port red-ui-flow-junction-port-output"); | ||||
|                 junctionOutput.setAttribute("x",-5); | ||||
|                 junctionOutput.setAttribute("y",-5); | ||||
|                 junctionOutput.setAttribute("width",10); | ||||
|                 junctionOutput.setAttribute("height",10); | ||||
|                 junctionOutput.setAttribute("rx",3); | ||||
|                 junctionOutput.setAttribute("ry",3); | ||||
|                 junctionOutput.__data__ = d; | ||||
|                 junctionOutput.__portType__ = PORT_TYPE_OUTPUT; | ||||
|                 junctionOutput.__portIndex__ = 0; | ||||
|                 this.__junctionOutput__ = junctionOutput; | ||||
|                 contents.appendChild(junctionOutput); | ||||
|                 junctionOutput.addEventListener("mouseup", portMouseUpProxy); | ||||
|                 junctionOutput.addEventListener("mousedown", portMouseDownProxy); | ||||
|  | ||||
|                 junctionOutput.addEventListener("mouseover", junctionMouseOverProxy); | ||||
|                 junctionOutput.addEventListener("mouseout", junctionMouseOutProxy); | ||||
|                 junctionInput.addEventListener("mouseover", junctionMouseOverProxy); | ||||
|                 junctionInput.addEventListener("mouseout", junctionMouseOutProxy); | ||||
|                 junctionBack.addEventListener("mouseover", junctionMouseOverProxy); | ||||
|                 junctionBack.addEventListener("mouseout", junctionMouseOutProxy); | ||||
|                 junctionBack.addEventListener("mouseup", portMouseUpProxy); | ||||
|                 junctionBack.addEventListener("mousedown", junctionMouseDownProxy); | ||||
|  | ||||
|                 // d3.select(junctionBack).on("mousedown", nodeMouseDown); | ||||
|  | ||||
|                 this.__portType__ = PORT_TYPE_INPUT | ||||
|                 this.__portIndex__ = 0 | ||||
| // function portMouseUpProxy(e) { portMouseUp(this.__data__,this.__portType__,this.__portIndex__, e); } | ||||
|                 // These handlers expect to be registered as d3 events | ||||
|                 d3.select(junctionBack).on("mousedown", nodeMouseDown).on("mouseup", nodeMouseUp); | ||||
|  | ||||
|                 junction[0][0].appendChild(contents); | ||||
|             }) | ||||
| @@ -4896,6 +4940,7 @@ RED.view = (function() { | ||||
|                 var junction = d3.select(this); | ||||
|                 this.setAttribute("transform", "translate(" + (d.x) + "," + (d.y) + ")"); | ||||
|                 if (d.dirty) { | ||||
|                     junction.classed("red-ui-flow-junction-dragging", mouse_mode === RED.state.MOVING_ACTIVE && movingSet.has(d)) | ||||
|                     junction.classed("selected", !!d.selected) | ||||
|                     dirtyNodes[d.id] = d; | ||||
|  | ||||
| @@ -4936,10 +4981,11 @@ RED.view = (function() { | ||||
|                     .on("touchstart",linkTouchStart) | ||||
|                     .on("mousemove", function(d) { | ||||
|                         if (mouse_mode === RED.state.SLICING) { | ||||
|  | ||||
|                             selectedLinks.add(d) | ||||
|                             l.classed("red-ui-flow-link-splice",true) | ||||
|                             redraw() | ||||
|                         } else if (mouse_mode === RED.state.SLICING_JUNCTION) { | ||||
|                         } else if (mouse_mode === RED.state.SLICING_JUNCTION && !d.link) { | ||||
|                             if (!l.classed("red-ui-flow-link-splice")) { | ||||
|                                 // Find intersection point | ||||
|                                 var lineLength = pathLine.getTotalLength(); | ||||
| @@ -5853,27 +5899,26 @@ RED.view = (function() { | ||||
|         if(typeof node === "string") { node = RED.nodes.node(n); } | ||||
|         if(!node) { return; } | ||||
|  | ||||
|         const flashingNode = flashingNodeTimer && flashingNodeId && RED.nodes.node(flashingNodeId); | ||||
|         const flashingNode = flashingNodeId && RED.nodes.node(flashingNodeId); | ||||
|         if(flashingNode) { | ||||
|             //cancel current flashing node before flashing new node | ||||
|             clearInterval(flashingNodeTimer); | ||||
|             flashingNodeTimer = null; | ||||
|             clearInterval(flashingNode.__flashTimer); | ||||
|             delete flashingNode.__flashTimer; | ||||
|             flashingNode.dirty = true; | ||||
|             flashingNode.highlighted = false; | ||||
|         } | ||||
|  | ||||
|         flashingNodeTimer = setInterval(function(flashEndTime) { | ||||
|             node.dirty = true; | ||||
|         node.__flashTimer = setInterval(function(flashEndTime, n) { | ||||
|             n.dirty = true; | ||||
|             if (flashEndTime >= Date.now()) { | ||||
|                 node.highlighted = !node.highlighted; | ||||
|                 n.highlighted = !n.highlighted; | ||||
|             } else { | ||||
|                 clearInterval(flashingNodeTimer); | ||||
|                 flashingNodeTimer = null; | ||||
|                 node.highlighted = false; | ||||
|                 clearInterval(n.__flashTimer); | ||||
|                 delete n.__flashTimer; | ||||
|                 flashingNodeId = null; | ||||
|                 n.highlighted = false; | ||||
|             } | ||||
|             RED.view.redraw(); | ||||
|         }, 100, Date.now() + 2200) | ||||
|         }, 100, Date.now() + 2200, node) | ||||
|         flashingNodeId = node.id; | ||||
|         node.highlighted = true; | ||||
|         RED.view.redraw(); | ||||
|   | ||||
| @@ -28,7 +28,7 @@ | ||||
|         border-radius: 1px; | ||||
|     } | ||||
|     .ace_gutter-cell  { | ||||
|         color: $text-editor-color; | ||||
|         color: $text-editor-gutter-color; | ||||
|     } | ||||
|     .ace_gutter-active-line { | ||||
|         background: $text-editor-gutter-active-line-background; | ||||
|   | ||||
| @@ -379,11 +379,46 @@ g.red-ui-flow-link-unknown path.red-ui-flow-link-line { | ||||
|     white-space: pre; | ||||
|     @include disable-selection; | ||||
| } | ||||
| .red-ui-flow-junction-dragging { | ||||
|     .red-ui-flow-junction-background { | ||||
|         background: red !important | ||||
|     } | ||||
| } | ||||
| .red-ui-flow-junction:not(.red-ui-flow-junction-dragging):hover { | ||||
|     .red-ui-flow-junction-background { | ||||
|         transform: scale(1.4); | ||||
|         stroke-width: 0.6; | ||||
|     } | ||||
|     .red-ui-flow-junction-port { | ||||
|         opacity: 1; | ||||
|         pointer-events: auto; | ||||
|     } | ||||
|     .red-ui-flow-junction-port-input { | ||||
|         transform: translate(-10px,0) | ||||
|     } | ||||
|     .red-ui-flow-junction-port-output { | ||||
|         transform: translate(10px,0) | ||||
|     } | ||||
| } | ||||
| .red-ui-flow-junction-port { | ||||
|     stroke: $node-border; | ||||
|     stroke-width: 1; | ||||
|     fill: $node-port-background; | ||||
|     cursor: crosshair; | ||||
|     transition: transform 0.1s; | ||||
|     opacity: 0; | ||||
|     pointer-events: none; | ||||
| } | ||||
| .red-ui-flow-junction-background { | ||||
|     stroke: $node-border; | ||||
|     stroke-width: 1; | ||||
|     fill: $node-port-background; | ||||
|     cursor: crosshair; | ||||
|     transform: scale(1); | ||||
|     transition: transform 0.1s; | ||||
|     &:hover { | ||||
|  | ||||
|     } | ||||
| } | ||||
| .red-ui-flow-junction-hovered { | ||||
|     stroke: $port-selected-color; | ||||
|   | ||||
| @@ -84,7 +84,7 @@ | ||||
|     .red-ui-search-result-node-port { | ||||
|         position: absolute; | ||||
|         border-radius: 2px; | ||||
|         border: 1px solid $node-border;; | ||||
|         border: 1px solid $node-border; | ||||
|         width: 6px; | ||||
|         height: 7px; | ||||
|         top:4px; | ||||
|   | ||||
| @@ -530,7 +530,6 @@ | ||||
|                         if (type !== 'full') { | ||||
|                             comp = $("#node-input-typed-complete").typedInput('value'); | ||||
|                         } | ||||
|                         console.log('hihi') | ||||
|                         that.statusType = "auto"; | ||||
|                         that.statusVal = comp; | ||||
|                     } | ||||
|   | ||||
| @@ -302,7 +302,6 @@ | ||||
|             return this.name?"node_label_italic":""; | ||||
|         }, | ||||
|         oneditprepare: function() { | ||||
|             console.log("link call oneditprepare") | ||||
|             const updateVisibility = function() { | ||||
|                 const static = $('#node-input-linkType').val() !== "dynamic"; | ||||
|                 if(static) { | ||||
|   | ||||
| @@ -582,7 +582,7 @@ RED.debug = (function() { | ||||
|         $('<span class="red-ui-debug-msg-date">'+ getTimestamp()+'</span>').appendTo(metaRow); | ||||
|         if (sourceNode) { | ||||
|  | ||||
|             var nodeLink = $('<a>',{href:"#",class:"red-ui-debug-msg-name"}).text("node: "+(o.name||sourceNode.name||sourceNode.id)) | ||||
|             var nodeLink = $('<a>',{href:"#",class:"red-ui-debug-msg-name"}).text(RED._("node-red:debug.node")+": "+(o.name||sourceNode.name||sourceNode.id)) | ||||
|             .appendTo(metaRow) | ||||
|             .on("click", function(evt) { | ||||
|                 evt.preventDefault(); | ||||
|   | ||||
| @@ -592,7 +592,7 @@ module.exports = function(RED) { | ||||
|                     // Only for ws or wss, check if proxy env var for additional configuration | ||||
|                     if (node.brokerurl.indexOf("wss://") > -1 || node.brokerurl.indexOf("ws://") > -1) { | ||||
|                         // check if proxy is set in env | ||||
|                         let prox, noprox; | ||||
|                         let prox, noprox, noproxy; | ||||
|                         if (process.env.http_proxy) { prox = process.env.http_proxy; } | ||||
|                         if (process.env.HTTP_PROXY) { prox = process.env.HTTP_PROXY; } | ||||
|                         if (process.env.no_proxy) { noprox = process.env.no_proxy.split(","); } | ||||
|   | ||||
| @@ -435,7 +435,7 @@ module.exports = function(RED) { | ||||
|             }); | ||||
|         } | ||||
|         else { | ||||
|             var connectedSockets = []; | ||||
|             const connectedSockets = new Set(); | ||||
|             node.status({text:RED._("tcpin.status.connections",{count:0})}); | ||||
|             let srv = net; | ||||
|             let connOpts; | ||||
| @@ -456,16 +456,16 @@ module.exports = function(RED) { | ||||
|                 }); | ||||
|                 socket.on('close',function() { | ||||
|                     node.log(RED._("tcpin.status.connection-closed",{host:socket.remoteAddress, port:socket.remotePort})); | ||||
|                     connectedSockets.splice(connectedSockets.indexOf(socket),1); | ||||
|                     node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.length})}); | ||||
|                     connectedSockets.delete(socket); | ||||
|                     node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.size})}); | ||||
|                 }); | ||||
|                 socket.on('error',function() { | ||||
|                     node.log(RED._("tcpin.errors.socket-error",{host:socket.remoteAddress, port:socket.remotePort})); | ||||
|                     connectedSockets.splice(connectedSockets.indexOf(socket),1); | ||||
|                     node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.length})}); | ||||
|                     connectedSockets.delete(socket); | ||||
|                     node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.size})}); | ||||
|                 }); | ||||
|                 connectedSockets.push(socket); | ||||
|                 node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.length})}); | ||||
|                 connectedSockets.add(socket); | ||||
|                 node.status({text:RED._("tcpin.status.connections",{count:connectedSockets.size})}); | ||||
|             }); | ||||
|  | ||||
|             node.on("input", function(msg, nodeSend, nodeDone) { | ||||
| @@ -478,10 +478,10 @@ module.exports = function(RED) { | ||||
|                     } else { | ||||
|                         buffer = Buffer.from(""+msg.payload); | ||||
|                     } | ||||
|                     for (var i = 0; i < connectedSockets.length; i += 1) { | ||||
|                         if (node.doend === true) { connectedSockets[i].end(buffer); } | ||||
|                         else { connectedSockets[i].write(buffer); } | ||||
|                     } | ||||
|                     connectedSockets.forEach(soc => { | ||||
|                         if (node.doend === true) { soc.end(buffer); } | ||||
|                         else { soc.write(buffer); } | ||||
|                     }) | ||||
|                 } | ||||
|                 nodeDone(); | ||||
|             }); | ||||
| @@ -498,12 +498,10 @@ module.exports = function(RED) { | ||||
|                 } else { | ||||
|                     node.log(RED._("tcpin.status.listening-port",{port:node.port})); | ||||
|                     node.on('close', function() { | ||||
|                         for (var c in connectedSockets) { | ||||
|                             if (connectedSockets.hasOwnProperty(c)) { | ||||
|                                 connectedSockets[c].end(); | ||||
|                                 connectedSockets[c].unref(); | ||||
|                             } | ||||
|                         } | ||||
|                         connectedSockets.forEach(soc => { | ||||
|                             soc.end(); | ||||
|                             soc.unref(); | ||||
|                         }) | ||||
|                         server.close(); | ||||
|                         node.log(RED._("tcpin.status.stopped-listening",{port:node.port})); | ||||
|                     }); | ||||
|   | ||||
| @@ -137,6 +137,7 @@ | ||||
|         "toConsole": "system console", | ||||
|         "toStatus": "node status (32 characters)", | ||||
|         "severity": "Level", | ||||
| 	"node": "node", | ||||
|         "notification": { | ||||
|             "activated": "Successfully activated: __label__", | ||||
|             "deactivated": "Successfully deactivated: __label__" | ||||
|   | ||||
| @@ -137,6 +137,7 @@ | ||||
|         "toConsole": "システムコンソール", | ||||
|         "toStatus": "ノードステータス(32 文字)", | ||||
|         "severity": "Level", | ||||
| 	"node": "ノード", | ||||
|         "notification": { | ||||
|             "activated": "有効化しました: __label__", | ||||
|             "deactivated": "無効化しました: __label__" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/nodes", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/registry", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "main": "./lib/index.js", | ||||
|     "repository": { | ||||
| @@ -16,11 +16,11 @@ | ||||
|         } | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/util": "3.0.0-beta.1", | ||||
|         "@node-red/util": "3.0.0-beta.2", | ||||
|         "clone": "2.1.2", | ||||
|         "fs-extra": "10.1.0", | ||||
|         "semver": "7.3.7", | ||||
|         "tar": "6.1.11", | ||||
|         "uglify-js": "3.15.4" | ||||
|         "uglify-js": "3.15.5" | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/runtime", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "main": "./lib/index.js", | ||||
|     "repository": { | ||||
| @@ -16,8 +16,8 @@ | ||||
|         } | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/registry": "3.0.0-beta.1", | ||||
|         "@node-red/util": "3.0.0-beta.1", | ||||
|         "@node-red/registry": "3.0.0-beta.2", | ||||
|         "@node-red/util": "3.0.0-beta.2", | ||||
|         "async-mutex": "0.3.2", | ||||
|         "clone": "2.1.2", | ||||
|         "express": "4.18.1", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/util", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
| @@ -16,7 +16,7 @@ | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "fs-extra": "10.1.0", | ||||
|         "i18next": "21.6.16", | ||||
|         "i18next": "21.8.2", | ||||
|         "json-stringify-safe": "5.0.1", | ||||
|         "jsonata": "1.8.6", | ||||
|         "lodash.clonedeep": "^4.5.0", | ||||
|   | ||||
							
								
								
									
										10
									
								
								packages/node_modules/node-red/package.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								packages/node_modules/node-red/package.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "node-red", | ||||
|     "version": "3.0.0-beta.1", | ||||
|     "version": "3.0.0-beta.2", | ||||
|     "description": "Low-code programming for event-driven applications", | ||||
|     "homepage": "http://nodered.org", | ||||
|     "license": "Apache-2.0", | ||||
| @@ -31,10 +31,10 @@ | ||||
|         "flow" | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/editor-api": "3.0.0-beta.1", | ||||
|         "@node-red/runtime": "3.0.0-beta.1", | ||||
|         "@node-red/util": "3.0.0-beta.1", | ||||
|         "@node-red/nodes": "3.0.0-beta.1", | ||||
|         "@node-red/editor-api": "3.0.0-beta.2", | ||||
|         "@node-red/runtime": "3.0.0-beta.2", | ||||
|         "@node-red/util": "3.0.0-beta.2", | ||||
|         "@node-red/nodes": "3.0.0-beta.2", | ||||
|         "basic-auth": "2.0.1", | ||||
|         "bcryptjs": "2.4.3", | ||||
|         "express": "4.18.1", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user