Support dbl-click in tab bar to add new flow in position

This commit is contained in:
Nick O'Leary 2018-10-26 23:08:58 +01:00
parent 3fcacd8339
commit 5cfc52ea18
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9
3 changed files with 38 additions and 8 deletions

View File

@ -298,10 +298,14 @@ RED.nodes = (function() {
} }
} }
function addWorkspace(ws) { function addWorkspace(ws,targetIndex) {
workspaces[ws.id] = ws; workspaces[ws.id] = ws;
ws._def = RED.nodes.getType('tab'); ws._def = RED.nodes.getType('tab');
workspacesOrder.push(ws.id); if (targetIndex === undefined) {
workspacesOrder.push(ws.id);
} else {
workspacesOrder.splice(targetIndex,0,ws.id);
}
} }
function getWorkspace(id) { function getWorkspace(id) {
return workspaces[id]; return workspaces[id];

View File

@ -52,6 +52,25 @@ RED.tabs = (function() {
} }
RED.popover.tooltip(addButton,l,options.addButton); RED.popover.tooltip(addButton,l,options.addButton);
} }
ul.on("dblclick", function(evt) {
var existingTabs = ul.children();
var clickX = evt.clientX;
var targetIndex = 0;
existingTabs.each(function(index) {
var pos = $(this).offset();
if (pos.left > clickX) {
return false;
}
targetIndex = index+1;
})
if (typeof options.addButton === 'function') {
options.addButton({index:targetIndex});
} else if (typeof options.addButton === 'string') {
RED.actions.invoke(options.addButton,{index:targetIndex});
}
});
} }
var scrollLeft; var scrollLeft;
var scrollRight; var scrollRight;
@ -321,9 +340,16 @@ RED.tabs = (function() {
} }
return { return {
addTab: function(tab) { addTab: function(tab,targetIndex) {
tabs[tab.id] = tab; tabs[tab.id] = tab;
var li = $("<li/>",{class:"red-ui-tab"}).appendTo(ul); var li = $("<li/>",{class:"red-ui-tab"});
if (targetIndex === undefined) {
li.appendTo(ul);
} else if (targetIndex === 0) {
li.prependTo(ul);
} else {
li.insertAfter(ul.find("li:nth-child("+(targetIndex)+")"));
}
li.attr('id',"red-ui-tab-"+(tab.id.replace(".","-"))); li.attr('id',"red-ui-tab-"+(tab.id.replace(".","-")));
li.data("tabId",tab.id); li.data("tabId",tab.id);

View File

@ -20,7 +20,7 @@ RED.workspaces = (function() {
var activeWorkspace = 0; var activeWorkspace = 0;
var workspaceIndex = 0; var workspaceIndex = 0;
function addWorkspace(ws,skipHistoryEntry) { function addWorkspace(ws,skipHistoryEntry,targetIndex) {
if (ws) { if (ws) {
workspace_tabs.addTab(ws); workspace_tabs.addTab(ws);
workspace_tabs.resize(); workspace_tabs.resize();
@ -31,8 +31,8 @@ RED.workspaces = (function() {
} while ($("#workspace-tabs a[title='"+RED._('workspace.defaultName',{number:workspaceIndex})+"']").size() !== 0); } while ($("#workspace-tabs a[title='"+RED._('workspace.defaultName',{number:workspaceIndex})+"']").size() !== 0);
ws = {type:"tab",id:tabId,disabled: false,info:"",label:RED._('workspace.defaultName',{number:workspaceIndex})}; ws = {type:"tab",id:tabId,disabled: false,info:"",label:RED._('workspace.defaultName',{number:workspaceIndex})};
RED.nodes.addWorkspace(ws); RED.nodes.addWorkspace(ws,targetIndex);
workspace_tabs.addTab(ws); workspace_tabs.addTab(ws,targetIndex);
workspace_tabs.activateTab(tabId); workspace_tabs.activateTab(tabId);
if (!skipHistoryEntry) { if (!skipHistoryEntry) {
RED.history.push({t:'add',workspaces:[ws],dirty:RED.nodes.dirty()}); RED.history.push({t:'add',workspaces:[ws],dirty:RED.nodes.dirty()});
@ -320,7 +320,7 @@ RED.workspaces = (function() {
workspace_tabs.resize(); workspace_tabs.resize();
}); });
RED.actions.add("core:add-flow",addWorkspace); RED.actions.add("core:add-flow",function(opts) { addWorkspace(undefined,undefined,opts?opts.index:undefined)});
RED.actions.add("core:edit-flow",editWorkspace); RED.actions.add("core:edit-flow",editWorkspace);
RED.actions.add("core:remove-flow",removeWorkspace); RED.actions.add("core:remove-flow",removeWorkspace);