mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge pull request #4459 from node-red/4401-fix-debug-window
Fix various issues with debug pop-out window
This commit is contained in:
commit
28825049fe
@ -195,6 +195,119 @@
|
|||||||
node.dirty = true;
|
node.dirty = true;
|
||||||
});
|
});
|
||||||
RED.view.redraw();
|
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);
|
options.messageSourceClick(msg.id,msg._alias,msg.path);
|
||||||
} else if (msg.event === "clear") {
|
} else if (msg.event === "clear") {
|
||||||
options.clear();
|
options.clear();
|
||||||
|
} else if (msg.event === "requestDebugNodeList") {
|
||||||
|
options.requestDebugNodeList(msg.filteredNodes)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
window.addEventListener('message',this.handleWindowMessage);
|
window.addEventListener('message',this.handleWindowMessage);
|
||||||
|
@ -167,19 +167,13 @@ RED.debug = (function() {
|
|||||||
var menu = RED.popover.menu({
|
var menu = RED.popover.menu({
|
||||||
options: options,
|
options: options,
|
||||||
onselect: function(item) {
|
onselect: function(item) {
|
||||||
if (item.value !== filterType) {
|
setFilterType(item.value)
|
||||||
filterType = item.value;
|
|
||||||
$('#red-ui-sidebar-debug-filter span').text(RED._('node-red:debug.sidebar.'+filterType));
|
|
||||||
refreshMessageList();
|
|
||||||
RED.settings.set("debug.filter",filterType)
|
|
||||||
}
|
|
||||||
if (filterType === 'filterSelected') {
|
if (filterType === 'filterSelected') {
|
||||||
refreshDebugNodeList();
|
config.requestDebugNodeList(filteredNodes);
|
||||||
filterDialog.slideDown(200);
|
filterDialog.slideDown(200);
|
||||||
filterDialogShown = true;
|
filterDialogShown = true;
|
||||||
debugNodeTreeList.focus();
|
debugNodeTreeList.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
menu.show({
|
menu.show({
|
||||||
@ -276,109 +270,7 @@ RED.debug = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function refreshDebugNodeList() {
|
function refreshDebugNodeList(data) {
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
debugNodeTreeList.treeList("data", data);
|
debugNodeTreeList.treeList("data", data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,7 +293,7 @@ RED.debug = (function() {
|
|||||||
},200);
|
},200);
|
||||||
}
|
}
|
||||||
function _refreshMessageList(_activeWorkspace) {
|
function _refreshMessageList(_activeWorkspace) {
|
||||||
if (_activeWorkspace) {
|
if (typeof _activeWorkspace === 'string') {
|
||||||
activeWorkspace = _activeWorkspace.replace(/\./g,"_");
|
activeWorkspace = _activeWorkspace.replace(/\./g,"_");
|
||||||
}
|
}
|
||||||
if (filterType === "filterAll") {
|
if (filterType === "filterAll") {
|
||||||
@ -479,12 +371,12 @@ RED.debug = (function() {
|
|||||||
filteredNodes[n.id] = true;
|
filteredNodes[n.id] = true;
|
||||||
});
|
});
|
||||||
delete filteredNodes[sourceId];
|
delete filteredNodes[sourceId];
|
||||||
$("#red-ui-sidebar-debug-filterSelected").trigger("click");
|
|
||||||
RED.settings.set('debug.filteredNodes',Object.keys(filteredNodes))
|
RED.settings.set('debug.filteredNodes',Object.keys(filteredNodes))
|
||||||
|
setFilterType('filterSelected')
|
||||||
refreshMessageList();
|
refreshMessageList();
|
||||||
}},
|
}},
|
||||||
{id:"red-ui-debug-msg-menu-item-clear-filter",label:RED._("node-red:debug.messageMenu.clearFilter"),onselect:function(){
|
{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();
|
refreshMessageList();
|
||||||
}}
|
}}
|
||||||
);
|
);
|
||||||
@ -713,9 +605,17 @@ RED.debug = (function() {
|
|||||||
if (!!clearFilter) {
|
if (!!clearFilter) {
|
||||||
clearFilterSettings();
|
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() {
|
function clearFilterSettings() {
|
||||||
filteredNodes = {};
|
filteredNodes = {};
|
||||||
filterType = 'filterAll';
|
filterType = 'filterAll';
|
||||||
@ -728,6 +628,7 @@ RED.debug = (function() {
|
|||||||
init: init,
|
init: init,
|
||||||
refreshMessageList:refreshMessageList,
|
refreshMessageList:refreshMessageList,
|
||||||
handleDebugMessage: handleDebugMessage,
|
handleDebugMessage: handleDebugMessage,
|
||||||
clearMessageList: clearMessageList
|
clearMessageList: clearMessageList,
|
||||||
|
refreshDebugNodeList: refreshDebugNodeList
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
@ -12,6 +12,9 @@ $(function() {
|
|||||||
},
|
},
|
||||||
clear: function() {
|
clear: function() {
|
||||||
window.opener.postMessage({event:"clear"},'*');
|
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);
|
RED.debug.refreshMessageList(evt.data.activeWorkspace);
|
||||||
} else if (evt.data.event === "projectChange") {
|
} else if (evt.data.event === "projectChange") {
|
||||||
RED.debug.clearMessageList(true);
|
RED.debug.clearMessageList(true);
|
||||||
|
} else if (evt.data.event === "refreshDebugNodeList") {
|
||||||
|
RED.debug.refreshDebugNodeList(evt.data.nodes)
|
||||||
}
|
}
|
||||||
},false);
|
},false);
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user