diff --git a/packages/node_modules/@node-red/nodes/core/common/21-debug.html b/packages/node_modules/@node-red/nodes/core/common/21-debug.html index 1e472370a..3cba8aaae 100644 --- a/packages/node_modules/@node-red/nodes/core/common/21-debug.html +++ b/packages/node_modules/@node-red/nodes/core/common/21-debug.html @@ -195,6 +195,119 @@ node.dirty = true; }); RED.view.redraw(); + }, + requestDebugNodeList: function(filteredNodes) { + var workspaceOrder = RED.nodes.getWorkspaceOrder(); + var workspaceOrderMap = {}; + workspaceOrder.forEach(function(ws,i) { + workspaceOrderMap[ws] = i; + }); + + var candidateNodes = []; + var candidateSFs = []; + var subflows = {}; + RED.nodes.eachNode(function (n) { + var nt = n.type; + 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]; + if (wsA !== wsB) { + return wsA-wsB; + } + var labelA = RED.utils.getNodeLabel(A,A.id); + var labelB = RED.utils.getNodeLabel(B,B.id); + return labelA.localeCompare(labelB); + }); + var currentWs = null; + var data = []; + var currentFlow; + var currentSelectedCount = 0; + candidateNodes.forEach(function(node) { + if (currentWs !== node.z) { + if (currentFlow && currentFlow.checkbox) { + currentFlow.selected = currentSelectedCount === currentFlow.children.length + } + currentSelectedCount = 0; + currentWs = node.z; + var parent = RED.nodes.workspace(currentWs) || RED.nodes.subflow(currentWs); + currentFlow = { + label: RED.utils.getNodeLabel(parent, currentWs), + } + if (!parent.disabled) { + currentFlow.children = []; + currentFlow.checkbox = true; + } else { + currentFlow.class = "disabled" + } + data.push(currentFlow); + } + if (currentFlow.children) { + if (!filteredNodes[node.id]) { + currentSelectedCount++; + } + currentFlow.children.push({ + label: RED.utils.getNodeLabel(node,node.id), + node: { + id: node.id + }, + checkbox: true, + selected: !filteredNodes[node.id] + }); + } + }); + if (currentFlow && currentFlow.checkbox) { + currentFlow.selected = currentSelectedCount === currentFlow.children.length + } + if (subWindow) { + try { + subWindow.postMessage({event:"refreshDebugNodeList", nodes:data},"*"); + } catch(err) { + console.log(err); + } + } + RED.debug.refreshDebugNodeList(data) } }; @@ -427,6 +540,8 @@ options.messageSourceClick(msg.id,msg._alias,msg.path); } else if (msg.event === "clear") { options.clear(); + } else if (msg.event === "requestDebugNodeList") { + options.requestDebugNodeList(msg.filteredNodes) } }; window.addEventListener('message',this.handleWindowMessage); 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 70dc33605..89b1a6241 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 @@ -167,19 +167,13 @@ RED.debug = (function() { var menu = RED.popover.menu({ options: options, onselect: function(item) { - if (item.value !== filterType) { - filterType = item.value; - $('#red-ui-sidebar-debug-filter span').text(RED._('node-red:debug.sidebar.'+filterType)); - refreshMessageList(); - RED.settings.set("debug.filter",filterType) - } + setFilterType(item.value) if (filterType === 'filterSelected') { - refreshDebugNodeList(); + config.requestDebugNodeList(filteredNodes); filterDialog.slideDown(200); filterDialogShown = true; debugNodeTreeList.focus(); } - } }); menu.show({ @@ -276,109 +270,7 @@ RED.debug = (function() { } - function refreshDebugNodeList() { - var workspaceOrder = RED.nodes.getWorkspaceOrder(); - var workspaceOrderMap = {}; - workspaceOrder.forEach(function(ws,i) { - workspaceOrderMap[ws] = i; - }); - - var candidateNodes = []; - var candidateSFs = []; - var subflows = {}; - RED.nodes.eachNode(function (n) { - var nt = n.type; - 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]; - if (wsA !== wsB) { - return wsA-wsB; - } - var labelA = RED.utils.getNodeLabel(A,A.id); - var labelB = RED.utils.getNodeLabel(B,B.id); - return labelA.localeCompare(labelB); - }); - var currentWs = null; - var data = []; - var currentFlow; - var currentSelectedCount = 0; - candidateNodes.forEach(function(node) { - if (currentWs !== node.z) { - if (currentFlow && currentFlow.checkbox) { - currentFlow.selected = currentSelectedCount === currentFlow.children.length - } - currentSelectedCount = 0; - currentWs = node.z; - var parent = RED.nodes.workspace(currentWs) || RED.nodes.subflow(currentWs); - currentFlow = { - label: RED.utils.getNodeLabel(parent, currentWs), - } - if (!parent.disabled) { - currentFlow.children = []; - currentFlow.checkbox = true; - } else { - currentFlow.class = "disabled" - } - data.push(currentFlow); - } - if (currentFlow.children) { - if (!filteredNodes[node.id]) { - currentSelectedCount++; - } - currentFlow.children.push({ - label: RED.utils.getNodeLabel(node,node.id), - node: node, - checkbox: true, - selected: !filteredNodes[node.id] - }); - } - }); - if (currentFlow && currentFlow.checkbox) { - currentFlow.selected = currentSelectedCount === currentFlow.children.length - } - + function refreshDebugNodeList(data) { debugNodeTreeList.treeList("data", data); } @@ -401,7 +293,7 @@ RED.debug = (function() { },200); } function _refreshMessageList(_activeWorkspace) { - if (_activeWorkspace) { + if (typeof _activeWorkspace === 'string') { activeWorkspace = _activeWorkspace.replace(/\./g,"_"); } if (filterType === "filterAll") { @@ -479,12 +371,12 @@ RED.debug = (function() { filteredNodes[n.id] = true; }); delete filteredNodes[sourceId]; - $("#red-ui-sidebar-debug-filterSelected").trigger("click"); RED.settings.set('debug.filteredNodes',Object.keys(filteredNodes)) + setFilterType('filterSelected') refreshMessageList(); }}, {id:"red-ui-debug-msg-menu-item-clear-filter",label:RED._("node-red:debug.messageMenu.clearFilter"),onselect:function(){ - $("#red-ui-sidebar-debug-filterAll").trigger("click"); + clearFilterSettings() refreshMessageList(); }} ); @@ -713,9 +605,17 @@ RED.debug = (function() { if (!!clearFilter) { clearFilterSettings(); } - refreshDebugNodeList(); + config.requestDebugNodeList(filteredNodes); } + function setFilterType(type) { + if (type !== filterType) { + filterType = type; + $('#red-ui-sidebar-debug-filter span').text(RED._('node-red:debug.sidebar.'+filterType)); + refreshMessageList(); + RED.settings.set("debug.filter",filterType) + } + } function clearFilterSettings() { filteredNodes = {}; filterType = 'filterAll'; @@ -728,6 +628,7 @@ RED.debug = (function() { init: init, refreshMessageList:refreshMessageList, handleDebugMessage: handleDebugMessage, - clearMessageList: clearMessageList + clearMessageList: clearMessageList, + refreshDebugNodeList: refreshDebugNodeList } })(); diff --git a/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug.js b/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug.js index 792d9895a..96f31bc81 100644 --- a/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug.js +++ b/packages/node_modules/@node-red/nodes/core/common/lib/debug/debug.js @@ -12,6 +12,9 @@ $(function() { }, clear: function() { window.opener.postMessage({event:"clear"},'*'); + }, + requestDebugNodeList: function(filteredNodes) { + window.opener.postMessage({event: 'requestDebugNodeList', filteredNodes},'*') } } @@ -26,6 +29,8 @@ $(function() { RED.debug.refreshMessageList(evt.data.activeWorkspace); } else if (evt.data.event === "projectChange") { RED.debug.clearMessageList(true); + } else if (evt.data.event === "refreshDebugNodeList") { + RED.debug.refreshDebugNodeList(evt.data.nodes) } },false); } catch(err) {