node-red/packages/node_modules/@node-red/editor-client/src/js/ui/common/tabs.js

689 lines
29 KiB
JavaScript
Raw Normal View History

2013-10-23 01:02:22 +02:00
/**
* Copyright JS Foundation and other contributors, http://js.foundation
2013-10-23 01:02:22 +02:00
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
2013-10-23 01:02:22 +02:00
2014-08-08 01:01:35 +02:00
RED.tabs = (function() {
var defaultTabIcon = "fa fa-lemon-o";
2013-10-23 01:02:22 +02:00
function createTabs(options) {
2014-02-21 10:54:50 +01:00
var tabs = {};
2018-05-23 11:25:10 +02:00
var pinnedTabsCount = 0;
2015-07-03 19:31:37 +02:00
var currentTabWidth;
var currentActiveTabWidth = 0;
2018-05-23 11:25:10 +02:00
var collapsibleMenu;
var ul = options.element || $("#"+options.id);
2016-09-26 23:56:28 +02:00
var wrapper = ul.wrap( "<div>" ).parent();
var scrollContainer = ul.wrap( "<div>" ).parent();
wrapper.addClass("red-ui-tabs");
if (options.vertical) {
wrapper.addClass("red-ui-tabs-vertical");
}
2018-10-17 14:45:57 +02:00
if (options.addButton) {
2016-09-26 23:56:28 +02:00
wrapper.addClass("red-ui-tabs-add");
2019-03-04 23:37:51 +01:00
var addButton = $('<div class="red-ui-tab-button red-ui-tabs-add"><a href="#"><i class="fa fa-plus"></i></a></div>').appendTo(wrapper);
addButton.find('a').on("click", function(evt) {
2016-09-26 23:56:28 +02:00
evt.preventDefault();
2018-10-17 14:45:57 +02:00
if (typeof options.addButton === 'function') {
options.addButton();
} else if (typeof options.addButton === 'string') {
RED.actions.invoke(options.addButton);
}
2016-09-26 23:56:28 +02:00
})
2018-10-17 14:45:57 +02:00
if (typeof options.addButton === 'string') {
var l = options.addButton;
if (options.addButtonCaption) {
l = options.addButtonCaption
}
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});
}
});
2019-03-04 23:37:51 +01:00
}
if (options.searchButton) {
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);
searchButton.find('a').on("click", function(evt) {
2019-03-04 23:37:51 +01:00
evt.preventDefault();
if (typeof options.searchButton === 'function') {
options.searchButton()
} else if (typeof options.searchButton === 'string') {
RED.actions.invoke(options.searchButton);
}
})
if (typeof options.searchButton === 'string') {
var l = options.searchButton;
if (options.searchButtonCaption) {
l = options.searchButtonCaption
}
RED.popover.tooltip(searchButton,l,options.searchButton);
}
2016-09-26 23:56:28 +02:00
}
var scrollLeft;
var scrollRight;
if (options.scrollable) {
wrapper.addClass("red-ui-tabs-scrollable");
scrollContainer.addClass("red-ui-tabs-scroll-container");
scrollContainer.on("scroll",updateScroll);
2016-09-26 23:56:28 +02:00
scrollLeft = $('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-left"><a href="#" style="display:none;"><i class="fa fa-caret-left"></i></a></div>').appendTo(wrapper).find("a");
scrollLeft.on('mousedown',function(evt) { scrollEventHandler(evt,'-=150') }).on('click',function(evt){ evt.preventDefault();});
2016-09-26 23:56:28 +02:00
scrollRight = $('<div class="red-ui-tab-button red-ui-tab-scroll red-ui-tab-scroll-right"><a href="#" style="display:none;"><i class="fa fa-caret-right"></i></a></div>').appendTo(wrapper).find("a");
scrollRight.on('mousedown',function(evt) { scrollEventHandler(evt,'+=150') }).on('click',function(evt){ evt.preventDefault();});
2016-09-26 23:56:28 +02:00
}
2018-05-23 11:25:10 +02:00
if (options.collapsible) {
// var dropDown = $('<div>',{class:"red-ui-tabs-select"}).appendTo(wrapper);
// ul.hide();
wrapper.addClass("red-ui-tabs-collapsible");
var collapsedButtonsRow = $('<div class="red-ui-tab-link-buttons"></div>').appendTo(wrapper);
if (options.menu !== false) {
var selectButton = $('<a href="#"><i class="fa fa-caret-down"></i></a>').appendTo(collapsedButtonsRow);
selectButton.addClass("red-ui-tab-link-button-menu")
selectButton.on("click", function(evt) {
evt.stopPropagation();
evt.preventDefault();
if (!collapsibleMenu) {
var pinnedOptions = [];
var options = [];
ul.children().each(function(i,el) {
var id = $(el).data('tabId');
var opt = {
id:"red-ui-tabs-menu-option-"+id,
icon: tabs[id].iconClass || defaultTabIcon,
label: tabs[id].name,
onselect: function() {
activateTab(id);
}
};
if (tabs[id].pinned) {
pinnedOptions.push(opt);
} else {
options.push(opt);
2018-05-23 11:25:10 +02:00
}
});
options = pinnedOptions.concat(options);
collapsibleMenu = RED.menu.init({options: options});
collapsibleMenu.css({
position: "absolute"
})
collapsibleMenu.appendTo("body");
}
var elementPos = selectButton.offset();
2018-05-23 11:25:10 +02:00
collapsibleMenu.css({
top: (elementPos.top+selectButton.height()-2)+"px",
left: (elementPos.left - collapsibleMenu.width() + selectButton.width())+"px"
2018-05-23 11:25:10 +02:00
})
if (collapsibleMenu.is(":visible")) {
$(document).off("click.red-ui-tabmenu");
} else {
$(".red-ui-menu").hide();
$(document).on("click.red-ui-tabmenu", function(evt) {
$(document).off("click.red-ui-tabmenu");
collapsibleMenu.hide();
});
}
collapsibleMenu.toggle();
2018-06-19 11:49:50 +02:00
})
}
2018-05-23 11:25:10 +02:00
}
2016-09-26 23:56:28 +02:00
function scrollEventHandler(evt,dir) {
evt.preventDefault();
if ($(this).hasClass('disabled')) {
return;
}
var currentScrollLeft = scrollContainer.scrollLeft();
2016-10-15 21:58:27 +02:00
scrollContainer.animate( { scrollLeft: dir }, 100);
2016-09-26 23:56:28 +02:00
var interval = setInterval(function() {
var newScrollLeft = scrollContainer.scrollLeft()
if (newScrollLeft === currentScrollLeft) {
clearInterval(interval);
return;
}
currentScrollLeft = newScrollLeft;
2016-10-15 21:58:27 +02:00
scrollContainer.animate( { scrollLeft: dir }, 100);
},100);
2016-09-26 23:56:28 +02:00
$(this).one('mouseup',function() {
clearInterval(interval);
})
}
2013-10-23 01:02:22 +02:00
ul.children().first().addClass("active");
ul.children().addClass("red-ui-tab");
function getSelection() {
var selection = ul.find("li.red-ui-tab.selected");
var selectedTabs = [];
selection.each(function() {
selectedTabs.push(tabs[$(this).find('a').attr('href').slice(1)])
})
return selectedTabs;
}
function selectionChanged() {
options.onselect(getSelection());
}
function onTabClick(evt) {
evt.preventDefault();
var currentTab = ul.find("li.red-ui-tab.active");
var thisTab = $(this).parent();
var fireSelectionChanged = false;
if (options.onselect) {
if (evt.metaKey) {
if (thisTab.hasClass("selected")) {
thisTab.removeClass("selected");
if (thisTab[0] !== currentTab[0]) {
// Deselect background tab
// - don't switch to it
selectionChanged();
return;
} else {
// Deselect current tab
// - if nothing remains selected, do nothing
// - otherwise switch to first selected tab
var selection = ul.find("li.red-ui-tab.selected");
if (selection.length === 0) {
selectionChanged();
return;
}
thisTab = selection.first();
}
} else {
if (!currentTab.hasClass("selected")) {
var currentTabObj = tabs[currentTab.find('a').attr('href').slice(1)];
// Auto select current tab
currentTab.addClass("selected");
}
thisTab.addClass("selected");
}
fireSelectionChanged = true;
} else if (evt.shiftKey) {
if (currentTab[0] !== thisTab[0]) {
var firstTab,lastTab;
if (currentTab.index() < thisTab.index()) {
firstTab = currentTab;
lastTab = thisTab;
} else {
firstTab = thisTab;
lastTab = currentTab;
}
ul.find("li.red-ui-tab").removeClass("selected");
firstTab.addClass("selected");
lastTab.addClass("selected");
firstTab.nextUntil(lastTab).addClass("selected");
}
fireSelectionChanged = true;
} else {
var selection = ul.find("li.red-ui-tab.selected");
if (selection.length > 0) {
selection.removeClass("selected");
fireSelectionChanged = true;
}
}
}
var thisTabA = thisTab.find("a");
if (options.onclick) {
options.onclick(tabs[thisTabA.attr('href').slice(1)]);
}
activateTab(thisTabA);
if (fireSelectionChanged) {
selectionChanged();
}
return false;
2013-10-23 01:02:22 +02:00
}
2016-09-26 23:56:28 +02:00
function updateScroll() {
if (ul.children().length !== 0) {
var sl = scrollContainer.scrollLeft();
var scWidth = scrollContainer.width();
var ulWidth = ul.width();
if (sl === 0) {
scrollLeft.hide();
} else {
scrollLeft.show();
}
if (sl === ulWidth-scWidth) {
scrollRight.hide();
} else {
scrollRight.show();
}
}
}
function onTabDblClick(evt) {
evt.preventDefault();
evt.stopPropagation();
if (evt.metaKey || evt.shiftKey) {
return;
}
if (options.ondblclick) {
2014-02-21 10:54:50 +01:00
options.ondblclick(tabs[$(this).attr('href').slice(1)]);
2013-10-23 01:02:22 +02:00
}
return false;
}
function activateTab(link) {
if (typeof link === "string") {
link = ul.find("a[href='#"+link+"']");
}
if (link.length === 0) {
return;
}
if (!link.parent().hasClass("active")) {
ul.children().removeClass("active");
2015-07-03 19:31:37 +02:00
ul.children().css({"transition": "width 100ms"});
link.parent().addClass("active");
2018-05-23 11:25:10 +02:00
var parentId = link.parent().attr('id');
wrapper.find(".red-ui-tab-link-button").removeClass("active selected");
$("#"+parentId+"-link-button").addClass("active selected");
2016-09-26 23:56:28 +02:00
if (options.scrollable) {
var pos = link.parent().position().left;
if (pos-21 < 0) {
scrollContainer.animate( { scrollLeft: '+='+(pos-50) }, 300);
} else if (pos + 120 > scrollContainer.width()) {
scrollContainer.animate( { scrollLeft: '+='+(pos + 140-scrollContainer.width()) }, 300);
}
}
if (options.onchange) {
2014-02-21 10:54:50 +01:00
options.onchange(tabs[link.attr('href').slice(1)]);
}
2015-07-14 16:59:56 +02:00
updateTabWidths();
2015-07-03 19:31:37 +02:00
setTimeout(function() {
ul.children().css({"transition": ""});
},100);
}
2013-10-23 01:02:22 +02:00
}
function activatePreviousTab() {
var previous = ul.find("li.active").prev();
if (previous.length > 0) {
activateTab(previous.find("a"));
}
}
function activateNextTab() {
var next = ul.find("li.active").next();
if (next.length > 0) {
activateTab(next.find("a"));
}
}
2013-10-23 01:02:22 +02:00
function updateTabWidths() {
if (options.vertical) {
return;
}
2013-10-23 01:02:22 +02:00
var tabs = ul.find("li.red-ui-tab");
2016-09-26 23:56:28 +02:00
var width = wrapper.width();
var tabCount = tabs.length;
2018-05-23 11:25:10 +02:00
var tabWidth;
if (options.collapsible) {
tabWidth = width - collapsedButtonsRow.width()-10;
if (tabWidth < 198) {
var delta = 198 - tabWidth;
var b = collapsedButtonsRow.find("a:last").prev();
while (b.is(":not(:visible)")) {
b = b.prev();
}
if (!b.hasClass("red-ui-tab-link-button-pinned")) {
b.hide();
}
tabWidth = width - collapsedButtonsRow.width()-10;
} else {
2018-05-23 11:25:10 +02:00
var space = width - 198 - collapsedButtonsRow.width();
if (space > 40) {
collapsedButtonsRow.find("a:not(:visible):first").show();
tabWidth = width - collapsedButtonsRow.width()-10;
}
2015-07-03 19:31:37 +02:00
}
2018-05-23 11:25:10 +02:00
tabs.css({width:tabWidth});
2015-07-14 16:59:56 +02:00
} else {
2018-05-23 11:25:10 +02:00
var tabWidth = (width-12-(tabCount*6))/tabCount;
currentTabWidth = (100*tabWidth/width)+"%";
currentActiveTabWidth = currentTabWidth+"%";
if (options.scrollable) {
tabWidth = Math.max(tabWidth,140);
currentTabWidth = tabWidth+"px";
currentActiveTabWidth = 0;
var listWidth = Math.max(wrapper.width(),12+(tabWidth+6)*tabCount);
ul.width(listWidth);
updateScroll();
} else if (options.hasOwnProperty("minimumActiveTabWidth")) {
if (tabWidth < options.minimumActiveTabWidth) {
tabCount -= 1;
tabWidth = (width-12-options.minimumActiveTabWidth-(tabCount*6))/tabCount;
currentTabWidth = (100*tabWidth/width)+"%";
currentActiveTabWidth = options.minimumActiveTabWidth+"px";
} else {
currentActiveTabWidth = 0;
}
}
// if (options.collapsible) {
// console.log(currentTabWidth);
// }
2018-05-23 11:25:10 +02:00
tabs.css({width:currentTabWidth});
if (tabWidth < 50) {
// ul.find(".red-ui-tab-close").hide();
2018-05-23 11:25:10 +02:00
ul.find(".red-ui-tab-icon").hide();
ul.find(".red-ui-tab-label").css({paddingLeft:Math.min(12,Math.max(0,tabWidth-38))+"px"})
} else {
// ul.find(".red-ui-tab-close").show();
2018-05-23 11:25:10 +02:00
ul.find(".red-ui-tab-icon").show();
ul.find(".red-ui-tab-label").css({paddingLeft:""})
}
if (currentActiveTabWidth !== 0) {
ul.find("li.red-ui-tab.active").css({"width":options.minimumActiveTabWidth});
// ul.find("li.red-ui-tab.active .red-ui-tab-close").show();
2018-05-23 11:25:10 +02:00
ul.find("li.red-ui-tab.active .red-ui-tab-icon").show();
ul.find("li.red-ui-tab.active .red-ui-tab-label").css({paddingLeft:""})
}
2015-07-03 19:31:37 +02:00
}
2015-07-14 16:59:56 +02:00
2013-10-23 01:02:22 +02:00
}
ul.find("li.red-ui-tab a").on("click",onTabClick).on("dblclick",onTabDblClick);
2016-09-26 23:56:28 +02:00
setTimeout(function() {
updateTabWidths();
},0);
function removeTab(id) {
if (options.onselect) {
var selection = ul.find("li.red-ui-tab.selected");
if (selection.length > 0) {
selection.removeClass("selected");
selectionChanged();
}
}
var li = ul.find("a[href='#"+id+"']").parent();
if (li.hasClass("active")) {
var tab = li.prev();
if (tab.length === 0) {
tab = li.next();
}
activateTab(tab.find("a"));
}
li.remove();
2018-05-23 11:25:10 +02:00
if (tabs[id].pinned) {
pinnedTabsCount--;
}
if (options.onremove) {
2014-02-21 10:54:50 +01:00
options.onremove(tabs[id]);
}
2014-02-21 10:54:50 +01:00
delete tabs[id];
updateTabWidths();
if (collapsibleMenu) {
collapsibleMenu.remove();
collapsibleMenu = null;
}
}
2013-10-23 01:02:22 +02:00
return {
addTab: function(tab,targetIndex) {
if (options.onselect) {
var selection = ul.find("li.red-ui-tab.selected");
if (selection.length > 0) {
selection.removeClass("selected");
selectionChanged();
}
}
2014-02-21 10:54:50 +01:00
tabs[tab.id] = tab;
var li = $("<li/>",{class:"red-ui-tab"});
if (ul.children().length === 0) {
targetIndex = undefined;
}
if (targetIndex === 0) {
li.prependTo(ul);
} else if (targetIndex > 0) {
li.insertAfter(ul.find("li:nth-child("+(targetIndex)+")"));
} else {
li.appendTo(ul);
}
li.attr('id',"red-ui-tab-"+(tab.id.replace(".","-")));
2016-05-04 16:22:30 +02:00
li.data("tabId",tab.id);
2018-05-23 11:25:10 +02:00
if (options.maximumTabWidth) {
li.css("maxWidth",options.maximumTabWidth+"px");
}
var link = $("<a/>",{href:"#"+tab.id, class:"red-ui-tab-label"}).appendTo(li);
if (tab.icon) {
$('<img src="'+tab.icon+'" class="red-ui-tab-icon"/>').appendTo(link);
2018-05-23 11:25:10 +02:00
} else if (tab.iconClass) {
$('<i>',{class:"red-ui-tab-icon "+tab.iconClass}).appendTo(link);
}
var span = $('<span/>',{class:"bidiAware"}).text(tab.label).appendTo(link);
2016-08-26 01:28:22 +02:00
span.attr('dir', RED.text.bidi.resolveBaseTextDir(tab.label));
2018-05-23 11:25:10 +02:00
if (options.collapsible) {
li.addClass("red-ui-tab-pinned");
var pinnedLink = $('<a href="#'+tab.id+'" class="red-ui-tab-link-button"></a>');
if (tab.pinned) {
if (pinnedTabsCount === 0) {
pinnedLink.prependTo(collapsedButtonsRow)
} else {
pinnedLink.insertAfter(collapsedButtonsRow.find("a.red-ui-tab-link-button-pinned:last"));
}
} else {
if (options.menu !== false) {
pinnedLink.insertBefore(collapsedButtonsRow.find("a:last"));
} else {
pinnedLink.appendTo(collapsedButtonsRow);
}
2018-05-23 11:25:10 +02:00
}
pinnedLink.attr('id',li.attr('id')+"-link-button");
if (tab.iconClass) {
$('<i>',{class:tab.iconClass}).appendTo(pinnedLink);
} else {
$('<i>',{class:defaultTabIcon}).appendTo(pinnedLink);
2018-05-23 11:25:10 +02:00
}
pinnedLink.on("click", function(evt) {
2018-05-23 11:25:10 +02:00
evt.preventDefault();
activateTab(tab.id);
});
if (tab.pinned) {
pinnedLink.addClass("red-ui-tab-link-button-pinned");
pinnedTabsCount++;
}
RED.popover.tooltip($(pinnedLink), tab.name, tab.action);
2018-05-23 11:25:10 +02:00
}
2013-10-23 01:02:22 +02:00
link.on("click",onTabClick);
link.on("dblclick",onTabDblClick);
if (tab.closeable) {
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();
removeTab(tab.id);
});
}
var badges = $('<span class="red-ui-tabs-badges"></span>').appendTo(li);
if (options.onselect) {
$('<i class="red-ui-tabs-badge-changed fa fa-circle"></i>').appendTo(badges);
$('<i class="red-ui-tabs-badge-selected fa fa-check-circle"></i>').appendTo(badges);
}
if (options.onadd) {
options.onadd(tab);
}
2013-10-25 22:34:00 +02:00
link.attr("title",tab.label);
if (ul.find("li.red-ui-tab").length == 1) {
2013-10-25 22:34:00 +02:00
activateTab(link);
}
2016-05-04 16:22:30 +02:00
if (options.onreorder) {
var originalTabOrder;
var tabDragIndex;
var tabElements = [];
var startDragIndex;
li.draggable({
axis:"x",
distance: 20,
start: function(event,ui) {
originalTabOrder = [];
tabElements = [];
ul.children().each(function(i) {
tabElements[i] = {
el:$(this),
text: $(this).text(),
left: $(this).position().left,
width: $(this).width()
};
if ($(this).is(li)) {
tabDragIndex = i;
startDragIndex = i;
}
originalTabOrder.push($(this).data("tabId"));
});
ul.children().each(function(i) {
if (i!==tabDragIndex) {
$(this).css({
position: 'absolute',
left: tabElements[i].left+"px",
width: tabElements[i].width+2,
transition: "left 0.3s"
});
}
})
if (!li.hasClass('active')) {
li.css({'zIndex':1});
}
},
drag: function(event,ui) {
ui.position.left += tabElements[tabDragIndex].left+scrollContainer.scrollLeft();
var tabCenter = ui.position.left + tabElements[tabDragIndex].width/2 - scrollContainer.scrollLeft();
2016-05-04 16:22:30 +02:00
for (var i=0;i<tabElements.length;i++) {
if (i === tabDragIndex) {
continue;
}
if (tabCenter > tabElements[i].left && tabCenter < tabElements[i].left+tabElements[i].width) {
if (i < tabDragIndex) {
tabElements[i].left += tabElements[tabDragIndex].width+8;
tabElements[tabDragIndex].el.detach().insertBefore(tabElements[i].el);
} else {
tabElements[i].left -= tabElements[tabDragIndex].width+8;
tabElements[tabDragIndex].el.detach().insertAfter(tabElements[i].el);
}
tabElements[i].el.css({left:tabElements[i].left+"px"});
tabElements.splice(i, 0, tabElements.splice(tabDragIndex, 1)[0]);
tabDragIndex = i;
break;
}
}
},
stop: function(event,ui) {
ul.children().css({position:"relative",left:"",transition:""});
if (!li.hasClass('active')) {
li.css({zIndex:""});
}
updateTabWidths();
if (startDragIndex !== tabDragIndex) {
options.onreorder(originalTabOrder, $.makeArray(ul.children().map(function() { return $(this).data('tabId');})));
}
activateTab(tabElements[tabDragIndex].el.data('tabId'));
}
})
}
setTimeout(function() {
updateTabWidths();
},10);
if (collapsibleMenu) {
collapsibleMenu.remove();
collapsibleMenu = null;
}
2013-10-23 11:44:08 +02:00
},
removeTab: removeTab,
activateTab: activateTab,
nextTab: activateNextTab,
previousTab: activatePreviousTab,
2013-10-28 21:48:25 +01:00
resize: updateTabWidths,
count: function() {
return ul.find("li.red-ui-tab").length;
},
contains: function(id) {
return ul.find("a[href='#"+id+"']").length > 0;
2014-02-25 00:35:11 +01:00
},
renameTab: function(id,label) {
tabs[id].label = label;
2014-02-25 00:35:11 +01:00
var tab = ul.find("a[href='#"+id+"']");
tab.attr("title",label);
tab.find("span.bidiAware").text(label).attr('dir', RED.text.bidi.resolveBaseTextDir(label));
2014-02-25 00:35:11 +01:00
updateTabWidths();
2016-05-04 16:22:30 +02:00
},
selection: getSelection,
2016-05-04 16:22:30 +02:00
order: function(order) {
var existingTabOrder = $.makeArray(ul.children().map(function() { return $(this).data('tabId');}));
if (existingTabOrder.length !== order.length) {
return
}
var i;
var match = true;
for (i=0;i<order.length;i++) {
if (order[i] !== existingTabOrder[i]) {
match = false;
break;
}
}
if (match) {
return;
}
var existingTabMap = {};
var existingTabs = ul.children().detach().each(function() {
existingTabMap[$(this).data("tabId")] = $(this);
});
for (i=0;i<order.length;i++) {
existingTabMap[order[i]].appendTo(ul);
}
2013-10-28 21:48:25 +01:00
}
2013-10-23 01:02:22 +02:00
}
}
2013-10-23 01:02:22 +02:00
return {
create: createTabs
}
2014-08-08 01:01:35 +02:00
})();