jQuery Tabs (redesigned)
Combining http://jqueryui.com/tabs/ Sortable and Simple manipulation Add button to end preappend tabs overwrite #tabs styling.
by Andy Blueman
HTML
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.1/jquery-ui.js"></script>
<div id="dialog" title="Tab data">
<form>
<fieldset class="ui-helper-reset">
<label for="tab_title">Title</label>
<input type="text" name="tab_title" id="tab_title" value="Tab Title" class="ui-widget-content ui-corner-all">
<label for="tab_content">Content</label>
<textarea name="tab_content" id="tab_content" class="ui-widget-content ui-corner-all">Tab content</textarea>
</fieldset>
</form>
</div>
<div id="tabs">
<ul class="uloutline">
<li><a href="#tabs-1">Nunc tincidunt</a> <span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
<li><a href="#tabs-2">Proin dolor</a> <span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
<li><a href="#tabs-3">Aenean lacinia</a> <span class="ui-icon ui-icon-close" role="presentation">Remove Tab</span>
</li>
<div id="buttonZ"><button id="add_tab">Add Tab</button></div>
<div class="clearZ"></div>
</ul>
<div id="tabs-1">
<p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
</div>
<div id="tabs-2">
<p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis...
CSS
body {
font-family:"Trebuchet MS", "Helvetica", "Arial", "Verdana", "sans-serif";
font-size: 62.5%;
}
#dialog label, #dialog input {
display:block;
}
#dialog label {
margin-top: 0.5em;
}
#dialog input, #dialog textarea {
width: 95%;
}
#tabs {
margin-top: 1em;
}
#tabs li .ui-icon-close {
float: left;
margin: 0.4em 0.2em 0 0;
cursor: pointer;
}
#add_tab {
cursor: pointer;
}
.uloutline {outline: 0px solid green;}
#buttonZ {float:right; outline: 1px solid grey;}
.clearZ {clear:both; outline: 0px solid red;}
/*-----------------------------------------*/
#tabs {
padding: 0px;
}
#tabs .ui-tabs-nav {
background: transparent;
border-width: 0px 0px 1px 0px;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
border-radius: 0px;
}
#tabs .ui-tabs-panel {
margin: 0em 0.2em 0.2em 0.2em;
}
#tabs .ui-tabs-nav li {
margin-top: 0.6em;
font-size: 80%;
}
#tabs .ui-tabs-nav li.ui-tabs-selected,
#tabs .ui-tabs-nav li.ui-state-active {
margin-top: 0.6em;
font-size: 80%;
}
.ui-button-text {
font-size: 80% inherit !important;
}
JavaScript
$(function () {
var tabTitle = $("#tab_title"),
tabContent = $("#tab_content"),
tabTemplate = "<li><a href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close' role='presentation'>Remove Tab</span></li>",
tabCounter = 4; // Why isnt this found out automagically? Starting tab number.
var tabs = $("#tabs").tabs();
// $('ul li:last').after('<li><button id="add_tab">Add Tab</button></li>');
// modal dialog init: custom buttons and a "close" callback resetting the form inside
var dialog = $("#dialog").dialog({
autoOpen: false,
modal: true,
buttons: {
Add: function () {
addTab();
$(this).dialog("close");
},
Cancel: function () {
$(this).dialog("close");
}
},
close: function () {
form[0].reset();
}
});
// addTab form: calls addTab function on submit and closes the dialog
var form = dialog.find("form").submit(function (event) {
addTab();
dialog.dialog("close");
event.preventDefault();
});
// actual addTab function: adds new tab using the input from the form above
function addTab() {
var label = tabTitle.val() || "Tab " + tabCounter,
id = "tabs-" + tabCounter,
li = $(tabTemplate.replace(/#\{href\}/g, "#" + id).replace(/#\{label\}/g, label)),
tabContentHtml = tabContent.val() || "Tab " + tabCounter + " content.";
tabs.find(".ui-tabs-nav").prepend(li);
tabs.append("<div id='" + id + "'><p>" + tabContentHtml + "</p></div>");
tabs.tabs("refresh");
tabCounter++;
}
// addTab button: just opens the dialog
$("#add_tab")
.button()
.click(function () {
dialog.dialog("open");
});
// close icon: removing the tab on click
tabs.delegate("span.ui-icon-close", "click", function () {
var panelId =...