mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Merge pull request #3120 from node-red/hide-flows
Allow tabs to be hidden
This commit is contained in:
commit
5443a17775
@ -53,8 +53,15 @@
|
|||||||
"confirmDelete": "Confirm delete",
|
"confirmDelete": "Confirm delete",
|
||||||
"delete": "Are you sure you want to delete '__label__'?",
|
"delete": "Are you sure you want to delete '__label__'?",
|
||||||
"dropFlowHere": "Drop the flow here",
|
"dropFlowHere": "Drop the flow here",
|
||||||
"addFlow": "Add Flow",
|
"addFlow": "Add flow",
|
||||||
"listFlows": "List Flows",
|
"addFlowToRight": "Add flow to the right",
|
||||||
|
"hideFlow": "Hide flow",
|
||||||
|
"hideOtherFlows": "Hide other flows",
|
||||||
|
"showAllFlows": "Show all flows",
|
||||||
|
"hideAllFlows": "Hide all flows",
|
||||||
|
"showLastHiddenFlow": "Show last hidden flow",
|
||||||
|
"listFlows": "List flows",
|
||||||
|
"listSubflows": "List subflows",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"enabled": "Enabled",
|
"enabled": "Enabled",
|
||||||
"disabled":"Disabled",
|
"disabled":"Disabled",
|
||||||
|
@ -25,7 +25,9 @@
|
|||||||
"ctrl-alt-o": "core:open-project",
|
"ctrl-alt-o": "core:open-project",
|
||||||
"ctrl-g v": "core:show-version-control-tab",
|
"ctrl-g v": "core:show-version-control-tab",
|
||||||
"ctrl-shift-l": "core:show-event-log",
|
"ctrl-shift-l": "core:show-event-log",
|
||||||
"ctrl-shift-p":"core:show-action-list"
|
"ctrl-shift-p":"core:show-action-list",
|
||||||
|
"alt-w": "core:hide-flow",
|
||||||
|
"alt-shift-w": "core:show-last-hidden-flow"
|
||||||
},
|
},
|
||||||
"red-ui-sidebar-node-config": {
|
"red-ui-sidebar-node-config": {
|
||||||
"backspace": "core:delete-config-selection",
|
"backspace": "core:delete-config-selection",
|
||||||
|
@ -220,6 +220,16 @@ RED.settings = (function () {
|
|||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function getLocal(key) {
|
||||||
|
return localStorage.getItem(key)
|
||||||
|
}
|
||||||
|
function setLocal(key, value) {
|
||||||
|
localStorage.setItem(key, value);
|
||||||
|
}
|
||||||
|
function removeLocal(key) {
|
||||||
|
localStorage.removeItem(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
@ -228,6 +238,9 @@ RED.settings = (function () {
|
|||||||
set: set,
|
set: set,
|
||||||
get: get,
|
get: get,
|
||||||
remove: remove,
|
remove: remove,
|
||||||
theme: theme
|
theme: theme,
|
||||||
|
setLocal: setLocal,
|
||||||
|
getLocal: getLocal,
|
||||||
|
removeLocal: removeLocal
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
@ -498,6 +498,13 @@ RED.clipboard = (function() {
|
|||||||
$("#red-ui-clipboard-dialog-import-text").on("keyup", validateImport);
|
$("#red-ui-clipboard-dialog-import-text").on("keyup", validateImport);
|
||||||
$("#red-ui-clipboard-dialog-import-text").on('paste',function() { setTimeout(validateImport,10)});
|
$("#red-ui-clipboard-dialog-import-text").on('paste',function() { setTimeout(validateImport,10)});
|
||||||
|
|
||||||
|
if (RED.workspaces.active() === 0) {
|
||||||
|
$("#red-ui-clipboard-dialog-import-opt-current").addClass('disabled').removeClass("selected");
|
||||||
|
$("#red-ui-clipboard-dialog-import-opt-new").addClass("selected");
|
||||||
|
} else {
|
||||||
|
$("#red-ui-clipboard-dialog-import-opt-current").removeClass('disabled').addClass("selected");
|
||||||
|
$("#red-ui-clipboard-dialog-import-opt-new").removeClass("selected");
|
||||||
|
}
|
||||||
$("#red-ui-clipboard-dialog-import-opt > a").on("click", function(evt) {
|
$("#red-ui-clipboard-dialog-import-opt > a").on("click", function(evt) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
if ($(this).hasClass('disabled') || $(this).hasClass('selected')) {
|
if ($(this).hasClass('disabled') || $(this).hasClass('selected')) {
|
||||||
@ -611,9 +618,6 @@ RED.clipboard = (function() {
|
|||||||
activeLibraries[tabId] = browser;
|
activeLibraries[tabId] = browser;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$("#red-ui-clipboard-dialog-tab-library-name").on("keyup", validateExportFilename);
|
$("#red-ui-clipboard-dialog-tab-library-name").on("keyup", validateExportFilename);
|
||||||
$("#red-ui-clipboard-dialog-tab-library-name").on('paste',function() { setTimeout(validateExportFilename,10)});
|
$("#red-ui-clipboard-dialog-tab-library-name").on('paste',function() { setTimeout(validateExportFilename,10)});
|
||||||
$("#red-ui-clipboard-dialog-export").button("enable");
|
$("#red-ui-clipboard-dialog-export").button("enable");
|
||||||
@ -636,7 +640,6 @@ RED.clipboard = (function() {
|
|||||||
label: RED._("editor.types.json")
|
label: RED._("editor.types.json")
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var previewList = $("#red-ui-clipboard-dialog-export-tab-clipboard-preview-list").css({position:"absolute",top:0,right:0,bottom:0,left:0}).treeList({
|
var previewList = $("#red-ui-clipboard-dialog-export-tab-clipboard-preview-list").css({position:"absolute",top:0,right:0,bottom:0,left:0}).treeList({
|
||||||
data: []
|
data: []
|
||||||
})
|
})
|
||||||
@ -738,16 +741,22 @@ RED.clipboard = (function() {
|
|||||||
$("#red-ui-clipboard-dialog-export").hide();
|
$("#red-ui-clipboard-dialog-export").hide();
|
||||||
$("#red-ui-clipboard-dialog-import-conflict").hide();
|
$("#red-ui-clipboard-dialog-import-conflict").hide();
|
||||||
|
|
||||||
var selection = RED.workspaces.selection();
|
if (RED.workspaces.active() === 0) {
|
||||||
if (selection.length > 0) {
|
$("#red-ui-clipboard-dialog-export-rng-selected").addClass('disabled').removeClass('selected');
|
||||||
$("#red-ui-clipboard-dialog-export-rng-selected").trigger("click");
|
$("#red-ui-clipboard-dialog-export-rng-flow").addClass('disabled').removeClass('selected');
|
||||||
|
$("#red-ui-clipboard-dialog-export-rng-full").trigger("click");
|
||||||
} else {
|
} else {
|
||||||
selection = RED.view.selection();
|
var selection = RED.workspaces.selection();
|
||||||
if (selection.nodes) {
|
if (selection.length > 0) {
|
||||||
$("#red-ui-clipboard-dialog-export-rng-selected").trigger("click");
|
$("#red-ui-clipboard-dialog-export-rng-selected").trigger("click");
|
||||||
} else {
|
} else {
|
||||||
$("#red-ui-clipboard-dialog-export-rng-selected").addClass('disabled').removeClass('selected');
|
selection = RED.view.selection();
|
||||||
$("#red-ui-clipboard-dialog-export-rng-flow").trigger("click");
|
if (selection.nodes) {
|
||||||
|
$("#red-ui-clipboard-dialog-export-rng-selected").trigger("click");
|
||||||
|
} else {
|
||||||
|
$("#red-ui-clipboard-dialog-export-rng-selected").addClass('disabled').removeClass('selected');
|
||||||
|
$("#red-ui-clipboard-dialog-export-rng-flow").trigger("click");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (format === "red-ui-clipboard-dialog-export-fmt-full") {
|
if (format === "red-ui-clipboard-dialog-export-fmt-full") {
|
||||||
|
@ -82,7 +82,7 @@ RED.menu = (function() {
|
|||||||
linkContent += '<span class="red-ui-menu-label-container"><span class="red-ui-menu-label">'+opt.label+'</span>'+
|
linkContent += '<span class="red-ui-menu-label-container"><span class="red-ui-menu-label">'+opt.label+'</span>'+
|
||||||
'<span class="red-ui-menu-sublabel">'+opt.sublabel+'</span></span>'
|
'<span class="red-ui-menu-sublabel">'+opt.sublabel+'</span></span>'
|
||||||
} else {
|
} else {
|
||||||
linkContent += '<span class="red-ui-menu-label">'+opt.label+'</span>'
|
linkContent += '<span class="red-ui-menu-label"><span>'+opt.label+'</span></span>'
|
||||||
}
|
}
|
||||||
|
|
||||||
linkContent += '</a>';
|
linkContent += '</a>';
|
||||||
@ -92,7 +92,7 @@ RED.menu = (function() {
|
|||||||
if (typeof opt.onselect === 'string') {
|
if (typeof opt.onselect === 'string') {
|
||||||
var shortcut = RED.keyboard.getShortcut(opt.onselect);
|
var shortcut = RED.keyboard.getShortcut(opt.onselect);
|
||||||
if (shortcut && shortcut.key) {
|
if (shortcut && shortcut.key) {
|
||||||
opt.shortcutSpan = $('<span class="red-ui-popover-key">'+RED.keyboard.formatKey(shortcut.key, true)+'</span>').appendTo(link);
|
opt.shortcutSpan = $('<span class="red-ui-popover-key">'+RED.keyboard.formatKey(shortcut.key, true)+'</span>').appendTo(link.find(".red-ui-menu-label"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ RED.tabs = (function() {
|
|||||||
if (options.vertical) {
|
if (options.vertical) {
|
||||||
wrapper.addClass("red-ui-tabs-vertical");
|
wrapper.addClass("red-ui-tabs-vertical");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.addButton) {
|
if (options.addButton) {
|
||||||
wrapper.addClass("red-ui-tabs-add");
|
wrapper.addClass("red-ui-tabs-add");
|
||||||
var addButton = $('<div class="red-ui-tab-button red-ui-tabs-add"><a href="#"><i class="fa fa-plus"></i></a></div>').appendTo(wrapper);
|
var addButton = $('<div class="red-ui-tab-button red-ui-tabs-add"><a href="#"><i class="fa fa-plus"></i></a></div>').appendTo(wrapper);
|
||||||
@ -75,6 +76,8 @@ RED.tabs = (function() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (options.searchButton) {
|
if (options.searchButton) {
|
||||||
|
// This is soft-deprecated as we don't use this in the core anymore
|
||||||
|
// We no use the `menu` option to provide a drop-down list of actions
|
||||||
wrapper.addClass("red-ui-tabs-search");
|
wrapper.addClass("red-ui-tabs-search");
|
||||||
var searchButton = $('<div class="red-ui-tab-button red-ui-tabs-search"><a href="#"><i class="fa fa-list-ul"></i></a></div>').appendTo(wrapper);
|
var searchButton = $('<div class="red-ui-tab-button red-ui-tabs-search"><a href="#"><i class="fa fa-list-ul"></i></a></div>').appendTo(wrapper);
|
||||||
searchButton.find('a').on("click", function(evt) {
|
searchButton.find('a').on("click", function(evt) {
|
||||||
@ -94,6 +97,48 @@ RED.tabs = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if (options.menu) {
|
||||||
|
wrapper.addClass("red-ui-tabs-menu");
|
||||||
|
var menuButton = $('<div class="red-ui-tab-button red-ui-tabs-menu"><a href="#"><i class="fa fa-caret-down"></i></a></div>').appendTo(wrapper);
|
||||||
|
var menuButtonLink = menuButton.find('a')
|
||||||
|
var menuOpen = false;
|
||||||
|
menuButtonLink.on("click", function(evt) {
|
||||||
|
evt.stopPropagation();
|
||||||
|
evt.preventDefault();
|
||||||
|
if (menuOpen) {
|
||||||
|
menu.remove();
|
||||||
|
menuOpen = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
menuOpen = true;
|
||||||
|
var menuOptions = [];
|
||||||
|
if (typeof options.searchButton === 'function') {
|
||||||
|
menuOptions = options.menu()
|
||||||
|
} else if (Array.isArray(options.menu)) {
|
||||||
|
menuOptions = options.menu;
|
||||||
|
}
|
||||||
|
var menu = RED.menu.init({options: menuOptions});
|
||||||
|
menu.css({
|
||||||
|
position: "absolute"
|
||||||
|
})
|
||||||
|
menu.appendTo("body");
|
||||||
|
var elementPos = menuButton.offset();
|
||||||
|
menu.css({
|
||||||
|
top: (elementPos.top+menuButton.height()-2)+"px",
|
||||||
|
left: (elementPos.left - menu.width() + menuButton.width())+"px"
|
||||||
|
})
|
||||||
|
$(".red-ui-menu.red-ui-menu-dropdown").hide();
|
||||||
|
$(document).on("click.red-ui-tabmenu", function(evt) {
|
||||||
|
$(document).off("click.red-ui-tabmenu");
|
||||||
|
menuOpen = false;
|
||||||
|
menu.remove();
|
||||||
|
});
|
||||||
|
menu.show();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var scrollLeft;
|
var scrollLeft;
|
||||||
var scrollRight;
|
var scrollRight;
|
||||||
|
|
||||||
@ -337,6 +382,12 @@ RED.tabs = (function() {
|
|||||||
if (link.length === 0) {
|
if (link.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (link.parent().hasClass("hide-tab")) {
|
||||||
|
link.parent().removeClass("hide-tab").removeClass("hide");
|
||||||
|
if (options.onshow) {
|
||||||
|
options.onshow(tabs[link.attr('href').slice(1)])
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!link.parent().hasClass("active")) {
|
if (!link.parent().hasClass("active")) {
|
||||||
ul.children().removeClass("active");
|
ul.children().removeClass("active");
|
||||||
ul.children().css({"transition": "width 100ms"});
|
ul.children().css({"transition": "width 100ms"});
|
||||||
@ -362,13 +413,13 @@ RED.tabs = (function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
function activatePreviousTab() {
|
function activatePreviousTab() {
|
||||||
var previous = ul.find("li.active").prev();
|
var previous = findPreviousVisibleTab();
|
||||||
if (previous.length > 0) {
|
if (previous.length > 0) {
|
||||||
activateTab(previous.find("a"));
|
activateTab(previous.find("a"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function activateNextTab() {
|
function activateNextTab() {
|
||||||
var next = ul.find("li.active").next();
|
var next = findNextVisibleTab();
|
||||||
if (next.length > 0) {
|
if (next.length > 0) {
|
||||||
activateTab(next.find("a"));
|
activateTab(next.find("a"));
|
||||||
}
|
}
|
||||||
@ -378,7 +429,9 @@ RED.tabs = (function() {
|
|||||||
if (options.vertical) {
|
if (options.vertical) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var tabs = ul.find("li.red-ui-tab");
|
var allTabs = ul.find("li.red-ui-tab");
|
||||||
|
var tabs = allTabs.filter(":not(.hide-tab)");
|
||||||
|
var hiddenTabs = allTabs.filter(".hide-tab");
|
||||||
var width = wrapper.width();
|
var width = wrapper.width();
|
||||||
var tabCount = tabs.length;
|
var tabCount = tabs.length;
|
||||||
var tabWidth;
|
var tabWidth;
|
||||||
@ -446,6 +499,7 @@ RED.tabs = (function() {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
tabs.css({width:currentTabWidth});
|
tabs.css({width:currentTabWidth});
|
||||||
|
hiddenTabs.css({width:"0px"});
|
||||||
if (tabWidth < 50) {
|
if (tabWidth < 50) {
|
||||||
// ul.find(".red-ui-tab-close").hide();
|
// ul.find(".red-ui-tab-close").hide();
|
||||||
ul.find(".red-ui-tab-icon").hide();
|
ul.find(".red-ui-tab-icon").hide();
|
||||||
@ -486,24 +540,101 @@ RED.tabs = (function() {
|
|||||||
}
|
}
|
||||||
var li = ul.find("a[href='#"+id+"']").parent();
|
var li = ul.find("a[href='#"+id+"']").parent();
|
||||||
if (li.hasClass("active")) {
|
if (li.hasClass("active")) {
|
||||||
var tab = li.prev();
|
var tab = findPreviousVisibleTab(li);
|
||||||
if (tab.length === 0) {
|
if (tab.length === 0) {
|
||||||
tab = li.next();
|
tab = findNextVisibleTab(li);
|
||||||
|
}
|
||||||
|
if (tab.length > 0) {
|
||||||
|
activateTab(tab.find("a"));
|
||||||
|
} else {
|
||||||
|
if (options.onchange) {
|
||||||
|
options.onchange(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
activateTab(tab.find("a"));
|
|
||||||
}
|
}
|
||||||
li.remove();
|
|
||||||
if (tabs[id].pinned) {
|
li.one("transitionend", function(evt) {
|
||||||
pinnedTabsCount--;
|
li.remove();
|
||||||
|
if (tabs[id].pinned) {
|
||||||
|
pinnedTabsCount--;
|
||||||
|
}
|
||||||
|
if (options.onremove) {
|
||||||
|
options.onremove(tabs[id]);
|
||||||
|
}
|
||||||
|
delete tabs[id];
|
||||||
|
updateTabWidths();
|
||||||
|
if (collapsibleMenu) {
|
||||||
|
collapsibleMenu.remove();
|
||||||
|
collapsibleMenu = null;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
li.addClass("hide-tab");
|
||||||
|
li.width(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
function findPreviousVisibleTab(li) {
|
||||||
|
if (!li) {
|
||||||
|
li = ul.find("li.active").parent();
|
||||||
}
|
}
|
||||||
if (options.onremove) {
|
var previous = li.prev();
|
||||||
options.onremove(tabs[id]);
|
while(previous.length > 0 && previous.hasClass("hide-tab")) {
|
||||||
|
previous = previous.prev();
|
||||||
}
|
}
|
||||||
delete tabs[id];
|
return previous;
|
||||||
updateTabWidths();
|
}
|
||||||
if (collapsibleMenu) {
|
function findNextVisibleTab(li) {
|
||||||
collapsibleMenu.remove();
|
if (!li) {
|
||||||
collapsibleMenu = null;
|
li = ul.find("li.active").parent();
|
||||||
|
}
|
||||||
|
var next = ul.find("li.active").next();
|
||||||
|
while(next.length > 0 && next.hasClass("hide-tab")) {
|
||||||
|
next = next.next();
|
||||||
|
}
|
||||||
|
return next;
|
||||||
|
}
|
||||||
|
function showTab(id) {
|
||||||
|
if (tabs[id]) {
|
||||||
|
var li = ul.find("a[href='#"+id+"']").parent();
|
||||||
|
if (li.hasClass("hide-tab")) {
|
||||||
|
li.removeClass("hide-tab").removeClass("hide");
|
||||||
|
if (ul.find("li.red-ui-tab:not(.hide-tab)").length === 1) {
|
||||||
|
activateTab(li.find("a"))
|
||||||
|
}
|
||||||
|
updateTabWidths();
|
||||||
|
if (options.onshow) {
|
||||||
|
options.onshow(tabs[id])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function hideTab(id) {
|
||||||
|
if (tabs[id]) {
|
||||||
|
var li = ul.find("a[href='#"+id+"']").parent();
|
||||||
|
if (!li.hasClass("hide-tab")) {
|
||||||
|
if (li.hasClass("active")) {
|
||||||
|
var tab = findPreviousVisibleTab(li);
|
||||||
|
if (tab.length === 0) {
|
||||||
|
tab = findNextVisibleTab(li);
|
||||||
|
}
|
||||||
|
if (tab.length > 0) {
|
||||||
|
activateTab(tab.find("a"));
|
||||||
|
} else {
|
||||||
|
if (options.onchange) {
|
||||||
|
options.onchange(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
li.removeClass("active");
|
||||||
|
li.one("transitionend", function(evt) {
|
||||||
|
li.addClass("hide");
|
||||||
|
updateTabWidths();
|
||||||
|
if (options.onhide) {
|
||||||
|
options.onhide(tabs[id])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
li.addClass("hide-tab");
|
||||||
|
li.css({width:0})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -663,7 +794,6 @@ RED.tabs = (function() {
|
|||||||
link.on("click", function(evt) { evt.preventDefault(); })
|
link.on("click", function(evt) { evt.preventDefault(); })
|
||||||
link.on("dblclick", function(evt) { evt.stopPropagation(); evt.preventDefault(); })
|
link.on("dblclick", function(evt) { evt.stopPropagation(); evt.preventDefault(); })
|
||||||
|
|
||||||
|
|
||||||
$('<span class="red-ui-tabs-fade"></span>').appendTo(li);
|
$('<span class="red-ui-tabs-fade"></span>').appendTo(li);
|
||||||
|
|
||||||
if (tab.closeable) {
|
if (tab.closeable) {
|
||||||
@ -675,6 +805,15 @@ RED.tabs = (function() {
|
|||||||
removeTab(tab.id);
|
removeTab(tab.id);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (tab.hideable) {
|
||||||
|
li.addClass("red-ui-tabs-closeable")
|
||||||
|
var closeLink = $("<a/>",{href:"#",class:"red-ui-tab-close"}).appendTo(li);
|
||||||
|
closeLink.append('<i class="fa fa-times" />');
|
||||||
|
closeLink.on("click",function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
hideTab(tab.id);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var badges = $('<span class="red-ui-tabs-badges"></span>').appendTo(li);
|
var badges = $('<span class="red-ui-tabs-badges"></span>').appendTo(li);
|
||||||
if (options.onselect) {
|
if (options.onselect) {
|
||||||
@ -682,11 +821,11 @@ RED.tabs = (function() {
|
|||||||
$('<i class="red-ui-tabs-badge-selected fa fa-check-circle"></i>').appendTo(badges);
|
$('<i class="red-ui-tabs-badge-selected fa fa-check-circle"></i>').appendTo(badges);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
link.attr("title",tab.label);
|
||||||
|
|
||||||
if (options.onadd) {
|
if (options.onadd) {
|
||||||
options.onadd(tab);
|
options.onadd(tab);
|
||||||
}
|
}
|
||||||
link.attr("title",tab.label);
|
|
||||||
if (ul.find("li.red-ui-tab").length == 1) {
|
if (ul.find("li.red-ui-tab").length == 1) {
|
||||||
activateTab(link);
|
activateTab(link);
|
||||||
}
|
}
|
||||||
@ -787,7 +926,7 @@ RED.tabs = (function() {
|
|||||||
previousTab: activatePreviousTab,
|
previousTab: activatePreviousTab,
|
||||||
resize: updateTabWidths,
|
resize: updateTabWidths,
|
||||||
count: function() {
|
count: function() {
|
||||||
return ul.find("li.red-ui-tab").length;
|
return ul.find("li.red-ui-tab:not(.hide)").length;
|
||||||
},
|
},
|
||||||
activeIndex: function() {
|
activeIndex: function() {
|
||||||
return ul.find("li.active").index()
|
return ul.find("li.active").index()
|
||||||
@ -795,6 +934,9 @@ RED.tabs = (function() {
|
|||||||
contains: function(id) {
|
contains: function(id) {
|
||||||
return ul.find("a[href='#"+id+"']").length > 0;
|
return ul.find("a[href='#"+id+"']").length > 0;
|
||||||
},
|
},
|
||||||
|
showTab: showTab,
|
||||||
|
hideTab: hideTab,
|
||||||
|
|
||||||
renameTab: function(id,label) {
|
renameTab: function(id,label) {
|
||||||
tabs[id].label = label;
|
tabs[id].label = label;
|
||||||
var tab = ul.find("a[href='#"+id+"']");
|
var tab = ul.find("a[href='#"+id+"']");
|
||||||
@ -802,7 +944,20 @@ RED.tabs = (function() {
|
|||||||
tab.find("span.red-ui-text-bidi-aware").text(label).attr('dir', RED.text.bidi.resolveBaseTextDir(label));
|
tab.find("span.red-ui-text-bidi-aware").text(label).attr('dir', RED.text.bidi.resolveBaseTextDir(label));
|
||||||
updateTabWidths();
|
updateTabWidths();
|
||||||
},
|
},
|
||||||
|
listTabs: function() {
|
||||||
|
return $.makeArray(ul.children().map(function() { return $(this).data('tabId');}));
|
||||||
|
},
|
||||||
selection: getSelection,
|
selection: getSelection,
|
||||||
|
clearSelection: function() {
|
||||||
|
if (options.onselect) {
|
||||||
|
var selection = ul.find("li.red-ui-tab.selected");
|
||||||
|
if (selection.length > 0) {
|
||||||
|
selection.removeClass("selected");
|
||||||
|
selectionChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
order: function(order) {
|
order: function(order) {
|
||||||
preferredOrder = order;
|
preferredOrder = order;
|
||||||
var existingTabOrder = $.makeArray(ul.children().map(function() { return $(this).data('tabId');}));
|
var existingTabOrder = $.makeArray(ul.children().map(function() { return $(this).data('tabId');}));
|
||||||
|
@ -532,8 +532,8 @@
|
|||||||
}).appendTo(label)
|
}).appendTo(label)
|
||||||
|
|
||||||
}
|
}
|
||||||
var labelPaddingWidth = (item.gutter?item.gutter.width()+2:0)+(depth*20);
|
// var labelPaddingWidth = (item.gutter?item.gutter.width()+2:0)+(depth*20);
|
||||||
// var labelPaddingWidth = (item.gutter ? item.gutter[0].offsetWidth + 2 : 0) + (depth * 20)
|
var labelPaddingWidth = (item.gutter ? item.gutter[0].offsetWidth + 2 : 0) + (depth * 20)
|
||||||
item.treeList.labelPadding = $('<span>').css({
|
item.treeList.labelPadding = $('<span>').css({
|
||||||
display: "inline-block",
|
display: "inline-block",
|
||||||
width: labelPaddingWidth+'px'
|
width: labelPaddingWidth+'px'
|
||||||
|
@ -229,7 +229,7 @@ RED.sidebar.config = (function() {
|
|||||||
var globalConfigNodes = [];
|
var globalConfigNodes = [];
|
||||||
var configList = {};
|
var configList = {};
|
||||||
RED.nodes.eachConfig(function(cn) {
|
RED.nodes.eachConfig(function(cn) {
|
||||||
if (cn.z) {//} == RED.workspaces.active()) {
|
if (cn.z) {
|
||||||
configList[cn.z.replace(/\./g,"-")] = configList[cn.z.replace(/\./g,"-")]||[];
|
configList[cn.z.replace(/\./g,"-")] = configList[cn.z.replace(/\./g,"-")]||[];
|
||||||
configList[cn.z.replace(/\./g,"-")].push(cn);
|
configList[cn.z.replace(/\./g,"-")].push(cn);
|
||||||
} else if (!cn.z) {
|
} else if (!cn.z) {
|
||||||
|
@ -122,11 +122,20 @@ RED.sidebar.info.outliner = (function() {
|
|||||||
})
|
})
|
||||||
RED.popover.tooltip(triggerButton,RED._("sidebar.info.triggerAction"));
|
RED.popover.tooltip(triggerButton,RED._("sidebar.info.triggerAction"));
|
||||||
}
|
}
|
||||||
// $('<button type="button" class="red-ui-info-outline-item-control-reveal red-ui-button red-ui-button-small"><i class="fa fa-eye"></i></button>').appendTo(controls).on("click",function(evt) {
|
|
||||||
// evt.preventDefault();
|
if (n.type === "tab") {
|
||||||
// evt.stopPropagation();
|
var toggleVisibleButton = $('<button type="button" class="red-ui-info-outline-item-control-hide red-ui-button red-ui-button-small"><i class="fa fa-eye"></i><i class="fa fa-eye-slash"></i></button>').appendTo(controls).on("click",function(evt) {
|
||||||
// RED.view.reveal(n.id);
|
evt.preventDefault();
|
||||||
// })
|
evt.stopPropagation();
|
||||||
|
var isHidden = !div.hasClass("red-ui-info-outline-item-hidden");
|
||||||
|
div.toggleClass("red-ui-info-outline-item-hidden",isHidden);
|
||||||
|
if (isHidden) {
|
||||||
|
RED.workspaces.hide(n.id);
|
||||||
|
} else {
|
||||||
|
RED.workspaces.show(n.id, null, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
if (n.type !== 'subflow') {
|
if (n.type !== 'subflow') {
|
||||||
var toggleButton = $('<button type="button" class="red-ui-info-outline-item-control-disable red-ui-button red-ui-button-small"><i class="fa fa-circle-thin"></i><i class="fa fa-ban"></i></button>').appendTo(controls).on("click",function(evt) {
|
var toggleButton = $('<button type="button" class="red-ui-info-outline-item-control-disable red-ui-button red-ui-button-small"><i class="fa fa-circle-thin"></i><i class="fa fa-ban"></i></button>').appendTo(controls).on("click",function(evt) {
|
||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
@ -317,13 +326,27 @@ RED.sidebar.info.outliner = (function() {
|
|||||||
RED.events.on("groups:remove",onObjectRemove);
|
RED.events.on("groups:remove",onObjectRemove);
|
||||||
RED.events.on("groups:change",onNodeChange);
|
RED.events.on("groups:change",onNodeChange);
|
||||||
|
|
||||||
RED.events.on("workspace:clear", onWorkspaceClear)
|
RED.events.on("workspace:show", onWorkspaceShow);
|
||||||
|
RED.events.on("workspace:hide", onWorkspaceHide);
|
||||||
|
RED.events.on("workspace:clear", onWorkspaceClear);
|
||||||
|
|
||||||
return container;
|
return container;
|
||||||
}
|
}
|
||||||
function onWorkspaceClear() {
|
function onWorkspaceClear() {
|
||||||
treeList.treeList('data',getFlowData());
|
treeList.treeList('data',getFlowData());
|
||||||
}
|
}
|
||||||
|
function onWorkspaceShow(event) {
|
||||||
|
var existingObject = objects[event.workspace];
|
||||||
|
if (existingObject) {
|
||||||
|
existingObject.element.removeClass("red-ui-info-outline-item-hidden")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function onWorkspaceHide(event) {
|
||||||
|
var existingObject = objects[event.workspace];
|
||||||
|
if (existingObject) {
|
||||||
|
existingObject.element.addClass("red-ui-info-outline-item-hidden")
|
||||||
|
}
|
||||||
|
}
|
||||||
function onFlowAdd(ws) {
|
function onFlowAdd(ws) {
|
||||||
objects[ws.id] = {
|
objects[ws.id] = {
|
||||||
id: ws.id,
|
id: ws.id,
|
||||||
|
@ -180,6 +180,10 @@ RED.sidebar.info = (function() {
|
|||||||
|
|
||||||
if (node === null) {
|
if (node === null) {
|
||||||
RED.sidebar.info.outliner.select(null);
|
RED.sidebar.info.outliner.select(null);
|
||||||
|
propertiesPanelHeaderIcon.empty();
|
||||||
|
propertiesPanelHeaderLabel.text("");
|
||||||
|
propertiesPanelHeaderReveal.hide();
|
||||||
|
propertiesPanelHeaderHelp.hide();
|
||||||
return;
|
return;
|
||||||
} else if (Array.isArray(node)) {
|
} else if (Array.isArray(node)) {
|
||||||
// Multiple things selected
|
// Multiple things selected
|
||||||
|
@ -345,8 +345,8 @@ RED.view = (function() {
|
|||||||
|
|
||||||
activeSubflow = RED.nodes.subflow(event.workspace);
|
activeSubflow = RED.nodes.subflow(event.workspace);
|
||||||
|
|
||||||
RED.menu.setDisabled("menu-item-workspace-edit", activeSubflow);
|
RED.menu.setDisabled("menu-item-workspace-edit", activeSubflow || event.workspace === 0);
|
||||||
RED.menu.setDisabled("menu-item-workspace-delete",RED.workspaces.count() == 1 || activeSubflow);
|
RED.menu.setDisabled("menu-item-workspace-delete",event.workspace === 0 || RED.workspaces.count() == 1 || activeSubflow);
|
||||||
|
|
||||||
if (workspaceScrollPositions[event.workspace]) {
|
if (workspaceScrollPositions[event.workspace]) {
|
||||||
chart.scrollLeft(workspaceScrollPositions[event.workspace].left);
|
chart.scrollLeft(workspaceScrollPositions[event.workspace].left);
|
||||||
@ -675,27 +675,33 @@ RED.view = (function() {
|
|||||||
|
|
||||||
function updateActiveNodes() {
|
function updateActiveNodes() {
|
||||||
var activeWorkspace = RED.workspaces.active();
|
var activeWorkspace = RED.workspaces.active();
|
||||||
|
if (activeWorkspace !== 0) {
|
||||||
|
activeNodes = RED.nodes.filterNodes({z:activeWorkspace});
|
||||||
|
activeNodes.forEach(function(n,i) {
|
||||||
|
n._index = i;
|
||||||
|
})
|
||||||
|
activeLinks = RED.nodes.filterLinks({
|
||||||
|
source:{z:activeWorkspace},
|
||||||
|
target:{z:activeWorkspace}
|
||||||
|
});
|
||||||
|
|
||||||
activeNodes = RED.nodes.filterNodes({z:activeWorkspace});
|
activeGroups = RED.nodes.groups(activeWorkspace)||[];
|
||||||
activeNodes.forEach(function(n,i) {
|
activeGroups.forEach(function(g, i) {
|
||||||
n._index = i;
|
g._index = i;
|
||||||
})
|
if (g.g) {
|
||||||
activeLinks = RED.nodes.filterLinks({
|
g._root = g.g;
|
||||||
source:{z:activeWorkspace},
|
g._depth = 1;
|
||||||
target:{z:activeWorkspace}
|
} else {
|
||||||
});
|
g._root = g.id;
|
||||||
|
g._depth = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
activeNodes = [];
|
||||||
|
activeLinks = [];
|
||||||
|
activeGroups = [];
|
||||||
|
}
|
||||||
|
|
||||||
activeGroups = RED.nodes.groups(activeWorkspace)||[];
|
|
||||||
activeGroups.forEach(function(g,i) {
|
|
||||||
g._index = i;
|
|
||||||
if (g.g) {
|
|
||||||
g._root = g.g;
|
|
||||||
g._depth = 1;
|
|
||||||
} else {
|
|
||||||
g._root = g.id;
|
|
||||||
g._depth = 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
var changed = false;
|
var changed = false;
|
||||||
do {
|
do {
|
||||||
changed = false;
|
changed = false;
|
||||||
@ -1966,93 +1972,94 @@ RED.view = (function() {
|
|||||||
function updateSelection() {
|
function updateSelection() {
|
||||||
var selection = {};
|
var selection = {};
|
||||||
var activeWorkspace = RED.workspaces.active();
|
var activeWorkspace = RED.workspaces.active();
|
||||||
|
|
||||||
var workspaceSelection = RED.workspaces.selection();
|
var workspaceSelection = RED.workspaces.selection();
|
||||||
if (workspaceSelection.length === 0) {
|
if (activeWorkspace !== 0) {
|
||||||
selection = getSelection();
|
if (workspaceSelection.length === 0) {
|
||||||
activeLinks = RED.nodes.filterLinks({
|
selection = getSelection();
|
||||||
source:{z:activeWorkspace},
|
activeLinks = RED.nodes.filterLinks({
|
||||||
target:{z:activeWorkspace}
|
source:{z:activeWorkspace},
|
||||||
});
|
target:{z:activeWorkspace}
|
||||||
var tabOrder = RED.nodes.getWorkspaceOrder();
|
});
|
||||||
var currentLinks = activeLinks;
|
var tabOrder = RED.nodes.getWorkspaceOrder();
|
||||||
var addedLinkLinks = {};
|
var currentLinks = activeLinks;
|
||||||
activeFlowLinks = [];
|
var addedLinkLinks = {};
|
||||||
var activeLinkNodeIds = Object.keys(activeLinkNodes);
|
activeFlowLinks = [];
|
||||||
activeLinkNodeIds.forEach(function(n) {
|
var activeLinkNodeIds = Object.keys(activeLinkNodes);
|
||||||
activeLinkNodes[n].dirty = true;
|
activeLinkNodeIds.forEach(function(n) {
|
||||||
})
|
activeLinkNodes[n].dirty = true;
|
||||||
activeLinkNodes = {};
|
})
|
||||||
for (var i=0;i<movingSet.length();i++) {
|
activeLinkNodes = {};
|
||||||
var msn = movingSet.get(i);
|
for (var i=0;i<movingSet.length();i++) {
|
||||||
if ((msn.n.type === "link out" || msn.n.type === "link in") &&
|
var msn = movingSet.get(i);
|
||||||
(msn.n.z === activeWorkspace)) {
|
if ((msn.n.type === "link out" || msn.n.type === "link in") &&
|
||||||
var linkNode = msn.n;
|
(msn.n.z === activeWorkspace)) {
|
||||||
activeLinkNodes[linkNode.id] = linkNode;
|
var linkNode = msn.n;
|
||||||
var offFlowLinks = {};
|
activeLinkNodes[linkNode.id] = linkNode;
|
||||||
linkNode.links.forEach(function(id) {
|
var offFlowLinks = {};
|
||||||
var target = RED.nodes.node(id);
|
linkNode.links.forEach(function(id) {
|
||||||
if (target) {
|
var target = RED.nodes.node(id);
|
||||||
if (linkNode.type === "link out") {
|
if (target) {
|
||||||
if (target.z === linkNode.z) {
|
if (linkNode.type === "link out") {
|
||||||
if (!addedLinkLinks[linkNode.id+":"+target.id]) {
|
if (target.z === linkNode.z) {
|
||||||
activeLinks.push({
|
if (!addedLinkLinks[linkNode.id+":"+target.id]) {
|
||||||
source:linkNode,
|
activeLinks.push({
|
||||||
sourcePort:0,
|
source:linkNode,
|
||||||
target: target,
|
sourcePort:0,
|
||||||
link: true
|
target: target,
|
||||||
});
|
link: true
|
||||||
addedLinkLinks[linkNode.id+":"+target.id] = true;
|
});
|
||||||
activeLinkNodes[target.id] = target;
|
addedLinkLinks[linkNode.id+":"+target.id] = true;
|
||||||
target.dirty = true;
|
activeLinkNodes[target.id] = target;
|
||||||
|
target.dirty = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
offFlowLinks[target.z] = offFlowLinks[target.z]||[];
|
||||||
|
offFlowLinks[target.z].push(target);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
offFlowLinks[target.z] = offFlowLinks[target.z]||[];
|
if (target.z === linkNode.z) {
|
||||||
offFlowLinks[target.z].push(target);
|
if (!addedLinkLinks[target.id+":"+linkNode.id]) {
|
||||||
}
|
activeLinks.push({
|
||||||
} else {
|
source:target,
|
||||||
if (target.z === linkNode.z) {
|
sourcePort:0,
|
||||||
if (!addedLinkLinks[target.id+":"+linkNode.id]) {
|
target: linkNode,
|
||||||
activeLinks.push({
|
link: true
|
||||||
source:target,
|
});
|
||||||
sourcePort:0,
|
addedLinkLinks[target.id+":"+linkNode.id] = true;
|
||||||
target: linkNode,
|
activeLinkNodes[target.id] = target;
|
||||||
link: true
|
target.dirty = true;
|
||||||
});
|
}
|
||||||
addedLinkLinks[target.id+":"+linkNode.id] = true;
|
} else {
|
||||||
activeLinkNodes[target.id] = target;
|
offFlowLinks[target.z] = offFlowLinks[target.z]||[];
|
||||||
target.dirty = true;
|
offFlowLinks[target.z].push(target);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
offFlowLinks[target.z] = offFlowLinks[target.z]||[];
|
|
||||||
offFlowLinks[target.z].push(target);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
var offFlows = Object.keys(offFlowLinks);
|
|
||||||
// offFlows.sort(function(A,B) {
|
|
||||||
// return tabOrder.indexOf(A) - tabOrder.indexOf(B);
|
|
||||||
// });
|
|
||||||
if (offFlows.length > 0) {
|
|
||||||
activeFlowLinks.push({
|
|
||||||
refresh: Math.floor(Math.random()*10000),
|
|
||||||
node: linkNode,
|
|
||||||
links: offFlowLinks//offFlows.map(function(i) { return {id:i,links:offFlowLinks[i]};})
|
|
||||||
});
|
});
|
||||||
|
var offFlows = Object.keys(offFlowLinks);
|
||||||
|
// offFlows.sort(function(A,B) {
|
||||||
|
// return tabOrder.indexOf(A) - tabOrder.indexOf(B);
|
||||||
|
// });
|
||||||
|
if (offFlows.length > 0) {
|
||||||
|
activeFlowLinks.push({
|
||||||
|
refresh: Math.floor(Math.random()*10000),
|
||||||
|
node: linkNode,
|
||||||
|
links: offFlowLinks//offFlows.map(function(i) { return {id:i,links:offFlowLinks[i]};})
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (activeFlowLinks.length === 0 && selected_link !== null && selected_link.link) {
|
||||||
|
activeLinks.push(selected_link);
|
||||||
|
activeLinkNodes[selected_link.source.id] = selected_link.source;
|
||||||
|
selected_link.source.dirty = true;
|
||||||
|
activeLinkNodes[selected_link.target.id] = selected_link.target;
|
||||||
|
selected_link.target.dirty = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
selection.flows = workspaceSelection;
|
||||||
}
|
}
|
||||||
if (activeFlowLinks.length === 0 && selected_link !== null && selected_link.link) {
|
|
||||||
activeLinks.push(selected_link);
|
|
||||||
activeLinkNodes[selected_link.source.id] = selected_link.source;
|
|
||||||
selected_link.source.dirty = true;
|
|
||||||
activeLinkNodes[selected_link.target.id] = selected_link.target;
|
|
||||||
selected_link.target.dirty = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
selection.flows = workspaceSelection;
|
|
||||||
}
|
}
|
||||||
var selectionJSON = activeWorkspace+":"+JSON.stringify(selection,function(key,value) {
|
var selectionJSON = activeWorkspace+":"+JSON.stringify(selection,function(key,value) {
|
||||||
if (key === 'nodes' || key === 'flows') {
|
if (key === 'nodes' || key === 'flows') {
|
||||||
|
@ -21,24 +21,46 @@ RED.workspaces = (function() {
|
|||||||
var workspaceIndex = 0;
|
var workspaceIndex = 0;
|
||||||
|
|
||||||
var viewStack = [];
|
var viewStack = [];
|
||||||
|
var hideStack = [];
|
||||||
var viewStackPos = 0;
|
var viewStackPos = 0;
|
||||||
|
|
||||||
function isSameObj(env0, env1) {
|
|
||||||
return (JSON.stringify(env0) === JSON.stringify(env1));
|
|
||||||
}
|
|
||||||
|
|
||||||
function addToViewStack(id) {
|
function addToViewStack(id) {
|
||||||
if (viewStackPos !== viewStack.length) {
|
if (viewStackPos !== viewStack.length) {
|
||||||
viewStack.splice(viewStackPos);
|
viewStack.splice(viewStackPos);
|
||||||
}
|
}
|
||||||
viewStack.push(id);
|
viewStack.push(id);
|
||||||
viewStackPos = viewStack.length;
|
viewStackPos = viewStack.length;
|
||||||
// console.warn("addToViewStack",id,viewStack);
|
}
|
||||||
|
|
||||||
|
function removeFromHideStack(id) {
|
||||||
|
hideStack = hideStack.filter(function(v) {
|
||||||
|
if (v === id) {
|
||||||
|
return false;
|
||||||
|
} else if (Array.isArray(v)) {
|
||||||
|
var i = v.indexOf(id);
|
||||||
|
if (i > -1) {
|
||||||
|
v.splice(i,1);
|
||||||
|
}
|
||||||
|
if (v.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function addWorkspace(ws,skipHistoryEntry,targetIndex) {
|
function addWorkspace(ws,skipHistoryEntry,targetIndex) {
|
||||||
if (ws) {
|
if (ws) {
|
||||||
|
if (!ws.closeable) {
|
||||||
|
ws.hideable = true;
|
||||||
|
}
|
||||||
workspace_tabs.addTab(ws,targetIndex);
|
workspace_tabs.addTab(ws,targetIndex);
|
||||||
|
|
||||||
|
var hiddenTabs = JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}");
|
||||||
|
if (hiddenTabs[ws.id]) {
|
||||||
|
workspace_tabs.hideTab(ws.id);
|
||||||
|
}
|
||||||
workspace_tabs.resize();
|
workspace_tabs.resize();
|
||||||
} else {
|
} else {
|
||||||
var tabId = RED.nodes.id();
|
var tabId = RED.nodes.id();
|
||||||
@ -46,7 +68,15 @@ RED.workspaces = (function() {
|
|||||||
workspaceIndex += 1;
|
workspaceIndex += 1;
|
||||||
} while ($("#red-ui-workspace-tabs a[title='"+RED._('workspace.defaultName',{number:workspaceIndex})+"']").size() !== 0);
|
} while ($("#red-ui-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}),env:[]};
|
ws = {
|
||||||
|
type: "tab",
|
||||||
|
id: tabId,
|
||||||
|
disabled: false,
|
||||||
|
info: "",
|
||||||
|
label: RED._('workspace.defaultName',{number:workspaceIndex}),
|
||||||
|
env: [],
|
||||||
|
hideable: true
|
||||||
|
};
|
||||||
RED.nodes.addWorkspace(ws,targetIndex);
|
RED.nodes.addWorkspace(ws,targetIndex);
|
||||||
workspace_tabs.addTab(ws,targetIndex);
|
workspace_tabs.addTab(ws,targetIndex);
|
||||||
workspace_tabs.activateTab(tabId);
|
workspace_tabs.activateTab(tabId);
|
||||||
@ -97,11 +127,18 @@ RED.workspaces = (function() {
|
|||||||
var event = {
|
var event = {
|
||||||
old: activeWorkspace
|
old: activeWorkspace
|
||||||
}
|
}
|
||||||
activeWorkspace = tab.id;
|
if (tab) {
|
||||||
|
$("#red-ui-workspace-chart").show();
|
||||||
|
activeWorkspace = tab.id;
|
||||||
|
window.location.hash = 'flow/'+tab.id;
|
||||||
|
$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!tab.disabled);
|
||||||
|
} else {
|
||||||
|
$("#red-ui-workspace-chart").hide();
|
||||||
|
activeWorkspace = 0;
|
||||||
|
window.location.hash = '';
|
||||||
|
}
|
||||||
event.workspace = activeWorkspace;
|
event.workspace = activeWorkspace;
|
||||||
RED.events.emit("workspace:change",event);
|
RED.events.emit("workspace:change",event);
|
||||||
window.location.hash = 'flow/'+tab.id;
|
|
||||||
$("#red-ui-workspace").toggleClass("red-ui-workspace-disabled",!!tab.disabled);
|
|
||||||
RED.sidebar.config.refresh();
|
RED.sidebar.config.refresh();
|
||||||
RED.view.focus();
|
RED.view.focus();
|
||||||
},
|
},
|
||||||
@ -126,7 +163,7 @@ RED.workspaces = (function() {
|
|||||||
if (tab.disabled) {
|
if (tab.disabled) {
|
||||||
$("#red-ui-tab-"+(tab.id.replace(".","-"))).addClass('red-ui-workspace-disabled');
|
$("#red-ui-tab-"+(tab.id.replace(".","-"))).addClass('red-ui-workspace-disabled');
|
||||||
}
|
}
|
||||||
RED.menu.setDisabled("menu-item-workspace-delete",workspaceTabCount <= 1);
|
RED.menu.setDisabled("menu-item-workspace-delete",activeWorkspace === 0 || workspaceTabCount <= 1);
|
||||||
if (workspaceTabCount === 1) {
|
if (workspaceTabCount === 1) {
|
||||||
showWorkspace();
|
showWorkspace();
|
||||||
}
|
}
|
||||||
@ -134,8 +171,10 @@ RED.workspaces = (function() {
|
|||||||
onremove: function(tab) {
|
onremove: function(tab) {
|
||||||
if (tab.type === "tab") {
|
if (tab.type === "tab") {
|
||||||
workspaceTabCount--;
|
workspaceTabCount--;
|
||||||
|
} else {
|
||||||
|
hideStack.push(tab.id);
|
||||||
}
|
}
|
||||||
RED.menu.setDisabled("menu-item-workspace-delete",workspaceTabCount <= 1);
|
RED.menu.setDisabled("menu-item-workspace-delete",activeWorkspace === 0 || workspaceTabCount <= 1);
|
||||||
if (workspaceTabCount === 0) {
|
if (workspaceTabCount === 0) {
|
||||||
hideWorkspace();
|
hideWorkspace();
|
||||||
}
|
}
|
||||||
@ -167,12 +206,67 @@ RED.workspaces = (function() {
|
|||||||
$(".red-ui-sidebar-shade").show();
|
$(".red-ui-sidebar-shade").show();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
onhide: function(tab) {
|
||||||
|
hideStack.push(tab.id);
|
||||||
|
RED.events.emit("workspace:hide",{workspace: tab.id})
|
||||||
|
},
|
||||||
|
onshow: function(tab) {
|
||||||
|
removeFromHideStack(tab.id);
|
||||||
|
RED.events.emit("workspace:show",{workspace: tab.id})
|
||||||
|
},
|
||||||
minimumActiveTabWidth: 150,
|
minimumActiveTabWidth: 150,
|
||||||
scrollable: true,
|
scrollable: true,
|
||||||
addButton: "core:add-flow",
|
addButton: "core:add-flow",
|
||||||
addButtonCaption: RED._("workspace.addFlow"),
|
addButtonCaption: RED._("workspace.addFlow"),
|
||||||
searchButton: "core:list-flows",
|
menu: [
|
||||||
searchButtonCaption: RED._("workspace.listFlows")
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-search-flows",
|
||||||
|
label: RED._("workspace.listFlows"),
|
||||||
|
onselect: "core:list-flows"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-search-subflows",
|
||||||
|
label: RED._("workspace.listSubflows"),
|
||||||
|
onselect: "core:list-subflows"
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-flow",
|
||||||
|
label: RED._("workspace.addFlow"),
|
||||||
|
onselect: "core:add-flow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-flow-right",
|
||||||
|
label: RED._("workspace.addFlowToRight"),
|
||||||
|
onselect: "core:add-flow-to-right"
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-hide-flows",
|
||||||
|
label: RED._("workspace.hideFlow"),
|
||||||
|
onselect: "core:hide-flow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-hide-other-flows",
|
||||||
|
label: RED._("workspace.hideOtherFlows"),
|
||||||
|
onselect: "core:hide-other-flows"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-show-all-flows",
|
||||||
|
label: RED._("workspace.showAllFlows"),
|
||||||
|
onselect: "core:show-all-flows"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-hide-all-flows",
|
||||||
|
label: RED._("workspace.hideAllFlows"),
|
||||||
|
onselect: "core:hide-all-flows"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id:"red-ui-tabs-menu-option-add-show-last-flow",
|
||||||
|
label: RED._("workspace.showLastHiddenFlow"),
|
||||||
|
onselect: "core:show-last-hidden-flow"
|
||||||
|
}
|
||||||
|
]
|
||||||
});
|
});
|
||||||
workspaceTabCount = 0;
|
workspaceTabCount = 0;
|
||||||
}
|
}
|
||||||
@ -223,15 +317,102 @@ RED.workspaces = (function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
RED.actions.add("core:add-flow",function(opts) { addWorkspace(undefined,undefined,opts?opts.index:undefined)});
|
RED.actions.add("core:add-flow",function(opts) { addWorkspace(undefined,undefined,opts?opts.index:undefined)});
|
||||||
|
RED.actions.add("core:add-flow-to-right",function(opts) { addWorkspace(undefined,undefined,workspace_tabs.activeIndex()+1)});
|
||||||
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);
|
||||||
RED.actions.add("core:enable-flow",enableWorkspace);
|
RED.actions.add("core:enable-flow",enableWorkspace);
|
||||||
RED.actions.add("core:disable-flow",disableWorkspace);
|
RED.actions.add("core:disable-flow",disableWorkspace);
|
||||||
|
|
||||||
|
RED.actions.add("core:hide-flow", function() {
|
||||||
|
var selection = workspace_tabs.selection();
|
||||||
|
if (selection.length === 0) {
|
||||||
|
selection = [{id:activeWorkspace}]
|
||||||
|
}
|
||||||
|
var hiddenTabs = [];
|
||||||
|
selection.forEach(function(ws) {
|
||||||
|
RED.workspaces.hide(ws.id);
|
||||||
|
hideStack.pop();
|
||||||
|
hiddenTabs.push(ws.id);
|
||||||
|
})
|
||||||
|
if (hiddenTabs.length > 0) {
|
||||||
|
hideStack.push(hiddenTabs);
|
||||||
|
}
|
||||||
|
workspace_tabs.clearSelection();
|
||||||
|
})
|
||||||
|
|
||||||
|
RED.actions.add("core:hide-other-flows", function() {
|
||||||
|
var selection = workspace_tabs.selection();
|
||||||
|
if (selection.length === 0) {
|
||||||
|
selection = [{id:activeWorkspace}]
|
||||||
|
}
|
||||||
|
var selected = new Set(selection.map(function(ws) { return ws.id }))
|
||||||
|
|
||||||
|
var currentTabs = workspace_tabs.listTabs();
|
||||||
|
var hiddenTabs = [];
|
||||||
|
currentTabs.forEach(function(id) {
|
||||||
|
if (!selected.has(id)) {
|
||||||
|
RED.workspaces.hide(id);
|
||||||
|
hideStack.pop();
|
||||||
|
hiddenTabs.push(id);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (hiddenTabs.length > 0) {
|
||||||
|
hideStack.push(hiddenTabs);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
RED.actions.add("core:hide-all-flows", function() {
|
||||||
|
var currentTabs = workspace_tabs.listTabs();
|
||||||
|
currentTabs.forEach(function(id) {
|
||||||
|
RED.workspaces.hide(id);
|
||||||
|
hideStack.pop();
|
||||||
|
})
|
||||||
|
if (currentTabs.length > 0) {
|
||||||
|
hideStack.push(currentTabs);
|
||||||
|
}
|
||||||
|
workspace_tabs.clearSelection();
|
||||||
|
})
|
||||||
|
RED.actions.add("core:show-all-flows", function() {
|
||||||
|
var currentTabs = workspace_tabs.listTabs();
|
||||||
|
currentTabs.forEach(function(id) {
|
||||||
|
RED.workspaces.show(id, null, true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
// RED.actions.add("core:toggle-flows", function() {
|
||||||
|
// var currentTabs = workspace_tabs.listTabs();
|
||||||
|
// var visibleCount = workspace_tabs.count();
|
||||||
|
// currentTabs.forEach(function(id) {
|
||||||
|
// if (visibleCount === 0) {
|
||||||
|
// RED.workspaces.show(id)
|
||||||
|
// } else {
|
||||||
|
// RED.workspaces.hide(id)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// })
|
||||||
|
RED.actions.add("core:show-last-hidden-flow", function() {
|
||||||
|
var id = hideStack.pop();
|
||||||
|
if (id) {
|
||||||
|
if (typeof id === 'string') {
|
||||||
|
RED.workspaces.show(id);
|
||||||
|
} else {
|
||||||
|
var last = id.pop();
|
||||||
|
id.forEach(function(i) {
|
||||||
|
RED.workspaces.show(i, null, true);
|
||||||
|
})
|
||||||
|
setTimeout(function() {
|
||||||
|
RED.workspaces.show(last);
|
||||||
|
},150)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
RED.actions.add("core:list-flows",function() {
|
RED.actions.add("core:list-flows",function() {
|
||||||
RED.actions.invoke("core:search","type:tab ");
|
RED.actions.invoke("core:search","type:tab ");
|
||||||
})
|
})
|
||||||
|
RED.actions.add("core:list-subflows",function() {
|
||||||
|
RED.actions.invoke("core:search","type:subflow ");
|
||||||
|
})
|
||||||
RED.actions.add("core:go-to-previous-location", function() {
|
RED.actions.add("core:go-to-previous-location", function() {
|
||||||
if (viewStackPos > 0) {
|
if (viewStackPos > 0) {
|
||||||
if (viewStackPos === viewStack.length) {
|
if (viewStackPos === viewStack.length) {
|
||||||
@ -247,8 +428,6 @@ RED.workspaces = (function() {
|
|||||||
RED.workspaces.show(viewStack[++viewStackPos],true);
|
RED.workspaces.show(viewStack[++viewStackPos],true);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
hideWorkspace();
|
hideWorkspace();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,7 +525,18 @@ RED.workspaces = (function() {
|
|||||||
selection: function() {
|
selection: function() {
|
||||||
return workspace_tabs.selection();
|
return workspace_tabs.selection();
|
||||||
},
|
},
|
||||||
show: function(id,skipStack) {
|
hide: function(id) {
|
||||||
|
if (!id) {
|
||||||
|
id = activeWorkspace;
|
||||||
|
}
|
||||||
|
if (workspace_tabs.contains(id)) {
|
||||||
|
workspace_tabs.hideTab(id);
|
||||||
|
var hiddenTabs = JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}");
|
||||||
|
hiddenTabs[id] = true;
|
||||||
|
RED.settings.setLocal("hiddenTabs",JSON.stringify(hiddenTabs));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
show: function(id,skipStack,unhideOnly) {
|
||||||
if (!workspace_tabs.contains(id)) {
|
if (!workspace_tabs.contains(id)) {
|
||||||
var sf = RED.nodes.subflow(id);
|
var sf = RED.nodes.subflow(id);
|
||||||
if (sf) {
|
if (sf) {
|
||||||
@ -355,14 +545,22 @@ RED.workspaces = (function() {
|
|||||||
null,
|
null,
|
||||||
workspace_tabs.activeIndex()+1
|
workspace_tabs.activeIndex()+1
|
||||||
);
|
);
|
||||||
|
removeFromHideStack(id);
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!skipStack && activeWorkspace !== id) {
|
if (unhideOnly) {
|
||||||
addToViewStack(activeWorkspace)
|
workspace_tabs.showTab(id);
|
||||||
|
} else {
|
||||||
|
if (!skipStack && activeWorkspace !== id) {
|
||||||
|
addToViewStack(activeWorkspace)
|
||||||
|
}
|
||||||
|
workspace_tabs.activateTab(id);
|
||||||
}
|
}
|
||||||
workspace_tabs.activateTab(id);
|
var hiddenTabs = JSON.parse(RED.settings.getLocal("hiddenTabs")||"{}");
|
||||||
|
delete hiddenTabs[id];
|
||||||
|
RED.settings.setLocal("hiddenTabs",JSON.stringify(hiddenTabs));
|
||||||
},
|
},
|
||||||
refresh: function() {
|
refresh: function() {
|
||||||
RED.nodes.eachWorkspace(function(ws) {
|
RED.nodes.eachWorkspace(function(ws) {
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
font-size: $primary-font-size;
|
font-size: $primary-font-size;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100%;
|
top: 100%;
|
||||||
width: 200px;
|
width: 230px;
|
||||||
left: 0;
|
left: 0;
|
||||||
z-index: 1000;
|
z-index: 1000;
|
||||||
display: none;
|
display: none;
|
||||||
@ -46,7 +46,7 @@
|
|||||||
& > li > a,
|
& > li > a,
|
||||||
& > li > a:focus {
|
& > li > a:focus {
|
||||||
display: block;
|
display: block;
|
||||||
padding: 4px 0 4px 32px;
|
padding: 4px 12px 4px 32px;
|
||||||
clear: both;
|
clear: both;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
@ -106,11 +106,17 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.red-ui-menu-label {
|
||||||
|
display: flex;
|
||||||
|
& > :first-child {
|
||||||
|
flex-grow: 1
|
||||||
|
}
|
||||||
|
}
|
||||||
.red-ui-popover-key {
|
.red-ui-popover-key {
|
||||||
border: none;
|
border: none;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
float: right;
|
// float: right;
|
||||||
color: $menuColor;
|
color: $menuColor;
|
||||||
border-color: $menuColor;
|
border-color: $menuColor;
|
||||||
}
|
}
|
||||||
|
@ -214,7 +214,6 @@
|
|||||||
}
|
}
|
||||||
span.red-ui-menu-label {
|
span.red-ui-menu-label {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
display: inline-block;
|
|
||||||
text-indent: 0px;
|
text-indent: 0px;
|
||||||
}
|
}
|
||||||
span.red-ui-menu-sublabel {
|
span.red-ui-menu-sublabel {
|
||||||
|
@ -435,6 +435,12 @@ div.red-ui-info-table {
|
|||||||
border: none;
|
border: none;
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
.fa-circle-thin {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.fa-eye {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.red-ui-info-outline-item-control-reveal,
|
.red-ui-info-outline-item-control-reveal,
|
||||||
.red-ui-info-outline-item-control-action {
|
.red-ui-info-outline-item-control-action {
|
||||||
@ -446,7 +452,17 @@ div.red-ui-info-table {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.fa-eye-slash {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.red-ui-info-outline-item.red-ui-info-outline-item-hidden & {
|
||||||
|
.fa-eye-slash {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.fa-eye {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
.fa-ban {
|
.fa-ban {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
height: 35px;
|
height: 35px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.hide-tab {
|
||||||
|
transition: width 0.1s ease-in;
|
||||||
|
}
|
||||||
.red-ui-tabs-scroll-container {
|
.red-ui-tabs-scroll-container {
|
||||||
height: 60px;
|
height: 60px;
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
@ -142,13 +145,18 @@
|
|||||||
padding-right: 21px;
|
padding-right: 21px;
|
||||||
}
|
}
|
||||||
&.red-ui-tabs-add {
|
&.red-ui-tabs-add {
|
||||||
padding-right: 35px;
|
padding-right: 29px;
|
||||||
}
|
}
|
||||||
&.red-ui-tabs-add.red-ui-tabs-scrollable {
|
&.red-ui-tabs-add.red-ui-tabs-scrollable {
|
||||||
padding-right: 59px;
|
padding-right: 53px;
|
||||||
}
|
}
|
||||||
|
&.red-ui-tabs-add.red-ui-tabs-menu.red-ui-tabs-scrollable,
|
||||||
&.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-scrollable {
|
&.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-scrollable {
|
||||||
padding-right: 95px;
|
padding-right: 83px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-menu.red-ui-tabs-scrollable {
|
||||||
|
padding-right: 113px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.red-ui-tabs-collapsible {
|
&.red-ui-tabs-collapsible {
|
||||||
@ -232,13 +240,14 @@
|
|||||||
|
|
||||||
a {
|
a {
|
||||||
@include workspace-button;
|
@include workspace-button;
|
||||||
line-height: 32px;
|
line-height: 30px;
|
||||||
height: 32px;
|
height: 28px;
|
||||||
width: 32px;
|
width: 28px;
|
||||||
|
margin-left: 2px;
|
||||||
|
margin-right: 2px;
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
margin-right:3px;
|
margin-bottom: 3px;
|
||||||
margin-left:3px;
|
border: none;
|
||||||
border: 1px solid $primary-border-color;
|
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -280,6 +289,8 @@
|
|||||||
border-left: none;
|
border-left: none;
|
||||||
border-right: none;
|
border-right: none;
|
||||||
border-top: none;
|
border-top: none;
|
||||||
|
border-bottom: 1px solid $primary-border-color;
|
||||||
|
line-height: 34px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.red-ui-tab-scroll-left {
|
.red-ui-tab-scroll-left {
|
||||||
@ -296,15 +307,30 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
.red-ui-tabs.red-ui-tabs-add .red-ui-tab-scroll-right {
|
.red-ui-tabs.red-ui-tabs-add .red-ui-tab-scroll-right {
|
||||||
right: 38px;
|
right: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-menu .red-ui-tab-scroll-right,
|
||||||
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search .red-ui-tab-scroll-right {
|
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search .red-ui-tab-scroll-right {
|
||||||
right: 76px;
|
right: 64px;
|
||||||
}
|
}
|
||||||
|
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-menu .red-ui-tabs-add,
|
||||||
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search .red-ui-tabs-add {
|
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search .red-ui-tabs-add {
|
||||||
right: 38px;
|
right: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.red-ui-tabs.red-ui-tabs-add.red-ui-tabs-search.red-ui-tabs-menu {
|
||||||
|
.red-ui-tab-scroll-right {
|
||||||
|
right: 96px;
|
||||||
|
}
|
||||||
|
.red-ui-tabs-add {
|
||||||
|
right: 64px;
|
||||||
|
}
|
||||||
|
.red-ui-tabs-search {
|
||||||
|
right: 32px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.red-ui-tabs-fade {
|
.red-ui-tabs-fade {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user