From 74ea382cf2575c78ad98b255ef1a3cf952ab8300 Mon Sep 17 00:00:00 2001 From: Hiroyasu Nishiyama Date: Fri, 19 Feb 2021 14:35:59 +0900 Subject: [PATCH] update subflow finding algorithm --- .../core/common/lib/debug/debug-utils.js | 95 ++++++++++++------- 1 file changed, 60 insertions(+), 35 deletions(-) diff --git a/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug-utils.js b/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug-utils.js index ae35e57bd..a865f9387 100644 --- a/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug-utils.js +++ b/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug-utils.js @@ -224,66 +224,91 @@ RED.debug = (function() { }); RED.popover.tooltip(toolbar.find("#red-ui-sidebar-debug-clear"),RED._('node-red:debug.sidebar.clearLog'),"core:clear-debug-messages"); - - return { content: content, footer: footerToolbar - } + }; } + function containsDebug(sid, map) { - if (sid in map) { - return true; - } - var nodes = RED.nodes.filterNodes({z: sid}); - var contain = false; - nodes.forEach(function (n) { - if (contain) { - return; - } - var nt = n.type; - if (nt === "debug") { - contain = true; - return; - } - if (nt.substring(0, 8) === "subflow:") { - var id = nt.substring(8); - if (containsDebug(id, map)) { - contain = true; - return; + var item = map[sid]; + if (item) { + if (item.debug === undefined) { + var sfs = Object.keys(item.subflows); + var contain = false; + for (var i = 0; i < sfs.length; i++) { + var sf = sfs[i]; + if (containsDebug(sf, map)) { + contain = true; + break; + } } + item.debug = contain; } - }); - if (contain) { - map[sid] = true; + return item.debug; } - return contain; + return false; } + function refreshDebugNodeList() { debugNodeList.editableList('empty'); - var candidateNodes = RED.nodes.filterNodes({type:'debug'}); + var workspaceOrder = RED.nodes.getWorkspaceOrder(); var workspaceOrderMap = {}; workspaceOrder.forEach(function(ws,i) { workspaceOrderMap[ws] = i; }); - candidateNodes = candidateNodes.filter(function(node) { - return workspaceOrderMap.hasOwnProperty(node.z); - }); - var map = {}; + + var candidateNodes = []; + var candidateSFs = []; + var subflows = {}; RED.nodes.eachNode(function (n) { var nt = n.type; - if ((n.z in workspaceOrderMap) && - (nt.substring(0, 8) === "subflow:")) { - var sid = nt.substring(8); - if (containsDebug(sid, map)) { + if (nt === "debug") { + if (n.z in workspaceOrderMap) { candidateNodes.push(n); } + else { + var sf = RED.nodes.subflow(n.z); + if (sf) { + subflows[sf.id] = { + debug: true, + subflows: {} + }; + } + } + } + else if(nt.substring(0, 8) === "subflow:") { + if (n.z in workspaceOrderMap) { + candidateSFs.push(n); + } + else { + var psf = RED.nodes.subflow(n.z); + if (psf) { + var sid = nt.substring(8); + var item = subflows[psf.id]; + if (!item) { + item = { + debug: undefined, + subflows: {} + }; + subflows[psf.id] = item; + } + item.subflows[sid] = true; + } + } } }); + candidateSFs.forEach(function (sf) { + var sid = sf.type.substring(8); + if (containsDebug(sid, subflows)) { + candidateNodes.push(sf); + } + }); + candidateNodes.sort(function(A,B) { var wsA = workspaceOrderMap[A.z]; var wsB = workspaceOrderMap[B.z];