diff --git a/bootstrap-1.3.0.css b/bootstrap-1.3.0.css index 0dfa456f9af1b1ba59c44b739c3176d54257eeac..c9fc91c494afa715f5749076a72ac1f36c8d3de9 100644 --- a/bootstrap-1.3.0.css +++ b/bootstrap-1.3.0.css @@ -6,7 +6,7 @@ * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world @twitter by @mdo and @fat. - * Date: Thu Sep 8 10:45:51 PDT 2011 + * Date: Thu Sep 8 20:00:20 PDT 2011 */ /* Reset.less * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). @@ -1579,6 +1579,12 @@ a.menu:after, .dropdown-toggle:after { color: #fff; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); } +.tab-content > *, .pill-content > * { + display: none; +} +.tab-content > .active, .pill-content > .active { + display: block; +} .breadcrumb { margin: 0 0 18px; padding: 7px 14px; diff --git a/bootstrap-1.3.0.min.css b/bootstrap-1.3.0.min.css index 428ccdc6e2c5b8c2f36f275193b0c84f1765be0d..1ff776c04f9387c1514d49855a4feb1e7c4fe434 100644 --- a/bootstrap-1.3.0.min.css +++ b/bootstrap-1.3.0.min.css @@ -226,6 +226,8 @@ a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;conten .tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;} .pills a{margin:5px 3px 5px 0;padding:0 15px;text-shadow:0 1px 1px #fff;line-height:30px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{background:#0050a3;color:#fff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);} .pills .active a{background:#0069d6;color:#fff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);} +.tab-content>*,.pill-content>*{display:none;} +.tab-content>.active,.pill-content>.active{display:block;} .breadcrumb{margin:0 0 18px;padding:7px 14px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #fff;} .breadcrumb .divider{padding:0 5px;color:#bfbfbf;} .breadcrumb .active a{color:#404040;} diff --git a/docs/assets/css/docs.css b/docs/assets/css/docs.css index dd62bcb9e2d7c4f93e9af67d5023ddd51468506c..b8ac95c42697c6b62a7e0f2c47bb7110cf9e2c20 100644 --- a/docs/assets/css/docs.css +++ b/docs/assets/css/docs.css @@ -222,6 +222,7 @@ div.topbar-wrapper div.topbar .topbar-inner { position: relative; height: 40px; margin: 5px 0 15px; + z-index: 1; } #bootstrap-js div.topbar-wrapper div.topbar { diff --git a/docs/assets/js/application-scrollspy.js b/docs/assets/js/application-scrollspy.js new file mode 100644 index 0000000000000000000000000000000000000000..1f0b7cebe28650bf8365fb9ee362be9175445fac --- /dev/null +++ b/docs/assets/js/application-scrollspy.js @@ -0,0 +1,39 @@ +// scroll spy logic +// ================ +$(function () { + + var activeTarget, + position = {}, + $window = $(window), + nav = $('body > .topbar li a'), + targets = nav.map(function () { + return $(this).attr('href'); + }), + offsets = $.map(targets, function (id) { + return $(id).offset().top; + }); + + function setButton(id) { + nav.parent("li").removeClass('active'); + $(nav[$.inArray(id, targets)]).parent("li").addClass('active'); + } + + function processScroll(e) { + var scrollTop = $window.scrollTop() + 10, i; + for (i = offsets.length; i--;) { + if (activeTarget != targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || scrollTop <= offsets[i + 1])) { + activeTarget = targets[i]; + setButton(activeTarget); + } + } + } + + nav.click(function () { + processScroll(); + }); + + processScroll(); + + $window.scroll(processScroll); + +}) \ No newline at end of file diff --git a/docs/assets/js/application.js b/docs/assets/js/application.js index ec4ae3c06e4428e276887a418c418536429a6010..47532939806e56bc94d75c3a66a55a84fd67ea6f 100644 --- a/docs/assets/js/application.js +++ b/docs/assets/js/application.js @@ -1,96 +1,46 @@ $(document).ready(function(){ - // Google code prettify - // ==================== - - prettyPrint(); - - - // scroll spy logic - // ================ - - var activeTarget, - position = {}, - $window = $(window), - nav = $('body > .topbar li a'), - targets = nav.map(function () { - return $(this).attr('href'); - }), - offsets = $.map(targets, function (id) { - return $(id).offset().top; - }); - - function setButton(id) { - nav.parent("li").removeClass('active'); - $(nav[$.inArray(id, targets)]).parent("li").addClass('active'); - } - - function processScroll(e) { - var scrollTop = $window.scrollTop() + 10, i; - for (i = offsets.length; i--;) { - if (activeTarget != targets[i] && scrollTop >= offsets[i] && (!offsets[i + 1] || scrollTop <= offsets[i + 1])) { - activeTarget = targets[i]; - setButton(activeTarget); - } - } - } - - nav.click(function () { - processScroll(); - }); - - processScroll(); - - $window.scroll(processScroll); - - // Dropdown example for topbar nav // =============================== - $("body").bind("click", function (e) { - $('.dropdown-toggle, .menu').parent("li").removeClass("open"); - }); - $(".dropdown-toggle, .menu").click(function (e) { - var $li = $(this).parent("li").toggleClass('open'); - return false; - }); + $(".topbar").dropdown() // catch any dropdowns on the page // table sort example // ================== - $("#sortTableExample").tablesorter( {sortList: [[1,0]]} ); + $("#sortTableExample").tablesorter( { sortList: [[ 1, 0 ]] } ) // add on logic // ============ - $('.add-on :checkbox').click(function() { + $('.add-on :checkbox').click(function () { if ($(this).attr('checked')) { - $(this).parents('.add-on').addClass('active'); + $(this).parents('.add-on').addClass('active') } else { - $(this).parents('.add-on').removeClass('active'); + $(this).parents('.add-on').removeClass('active') } - }); + }) // Disable certain links in docs // ============================= - $('ul.tabs a, ul.pills a, .pagination a, .well .btn, .actions .btn, .alert-message .btn, a.close').click(function(e) { - e.preventDefault(); - }); + $('ul.tabs a, ul.pills a, .pagination a, .well .btn, .actions .btn, .alert-message .btn, a.close').click(function (e) { + e.preventDefault() + }) // Copy code blocks in docs - $(".copy-code").focus(function() { + $(".copy-code").focus(function () { var el = this; // push select to event loop for chrome :{o setTimeout(function () { $(el).select(); }, 1); }); - // POSITION TWIPSIES - // ================= + // POSITION STATIC TWIPSIES + // ======================== $('.twipsies.well a').each(function () { var type = this.title @@ -128,7 +78,6 @@ $(document).ready(function(){ } $twipsy.css(offset[type]) - }); }); diff --git a/docs/assets/js/bootstrap-dropdown.js b/docs/assets/js/bootstrap-dropdown.js index 9fbeb44b09ed2010b03b047cdf06b91b4960358b..fe73e7994432e8606e508213672dec74337b420f 100644 --- a/docs/assets/js/bootstrap-dropdown.js +++ b/docs/assets/js/bootstrap-dropdown.js @@ -3,8 +3,10 @@ /* DROPDOWN PLUGIN DEFINITION * ========================== */ + var selector = 'a.menu, .dropdown-toggle' + function clearMenus() { - $('a.menu').parent('li').removeClass('open') + $(selector).parent('li').removeClass('open') } $(function () { @@ -13,7 +15,7 @@ $.fn.dropdown = function ( options ) { return this.each(function () { - $(this).delegate('a.menu', 'click', function (e) { + $(this).delegate(selector, 'click', function (e) { clearMenus() $(this).parent('li').toggleClass('open') return false diff --git a/docs/assets/js/bootstrap-scrollspy.js b/docs/assets/js/bootstrap-scrollspy.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/assets/js/bootstrap-tabs.js b/docs/assets/js/bootstrap-tabs.js index 55fdc7e08d628d6689662523da045e228928e863..21386f4cf33ae2a60d185352ab868e613e6dce08 100644 --- a/docs/assets/js/bootstrap-tabs.js +++ b/docs/assets/js/bootstrap-tabs.js @@ -2,33 +2,36 @@ function activate ( element, container ) { container.find('.active').removeClass('active') - element.addClass('active') + element.addClass('active') } function tab( e ) { - debugger - var $this = $(this) - , href = $this.attr('href') + var $this = $(this) + , href = $this.attr('href') + , $ul = $(e.liveFired) + , $controlled - if (/^#/.test(href)) { - e.preventDefault() + if (/^#/.test(href)) { + e.preventDefault() if ($this.hasClass('active')) { return } - activate($this, $ul) - activate($(href), $content) - } + $controlled = $('#' + $ul.attr('aria-controls')) + + activate($this.parent('li'), $ul) + activate($(href, $controlled), $controlled) + } } - /* TABS PLUGIN DEFINITION - * ====================== */ + /* TABS/PILLS PLUGIN DEFINITION + * ============================ */ - $.fn.tabs = function ( content ) { + $.fn.tabs = $.fn.pills = function () { return this.each(function () { - $(this).delegate('> li > a', 'click', tab) + $(this).delegate('.tabs > li > a, .pills > li > a', 'click', tab) }) } diff --git a/docs/index.html b/docs/index.html index 7acafd6c9a9822a98a38a0bd621abe4d677c8031..ab9820f4d4906b21814bb77ea1eec10422d817a4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -20,7 +20,10 @@ <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> <script src="http://autobahn.tablesorter.com/jquery.tablesorter.min.js"></script> <script src="assets/js/google-code-prettify/prettify.js"></script> + <script>$(function () { prettyPrint() })</script> + <script src="assets/js/bootstrap-dropdown.js"></script> <script src="assets/js/application.js"></script> + <script src="assets/js/application-scrollspy.js"></script> <!-- Le fav and touch icons --> <link rel="shortcut icon" href="images/favicon.ico"> @@ -1356,6 +1359,10 @@ Lorem ipsum dolar sit amet illo error <a href="#" title="below">ipsum</a> verita <td><a href="./javascript.html#dropdowns">bootstrap-dropdown.js</a></td> <td>This plugin is for adding dropdown to the bootstrap nav.</td> </tr> + <tr> + <td><a href="./javascript.html#tabs">bootstrap-tabs.js</a></td> + <td>This plugin adds quick, dynamic tab and pill functionality.</td> + </tr> <tr> <td><a href="./javascript.html#twipsy">bootstrap-twipsy.js</a></td> <td>Based on the excellent jQuery.tipsy plugin written by Jason Frame; twipsy is an updated version, which doesn't rely on images, uses css3 for animations, and data-attributes for title storage!</td> diff --git a/docs/javascript.html b/docs/javascript.html index d39340d02b4f07ae7cd0d30a82deacf1556da85f..2efb415314dedb4d0193c0620092037267b1abcf 100644 --- a/docs/javascript.html +++ b/docs/javascript.html @@ -15,11 +15,13 @@ <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> <script src="assets/js/google-code-prettify/prettify.js"></script> <script>$(function () { prettyPrint() })</script> + <script src="assets/js/application-scrollspy.js"></script> <script src="assets/js/bootstrap-modal.js"></script> <script src="assets/js/bootstrap-alerts.js"></script> <script src="assets/js/bootstrap-twipsy.js"></script> <script src="assets/js/bootstrap-popover.js"></script> <script src="assets/js/bootstrap-dropdown.js"></script> + <script src="assets/js/bootstrap-tabs.js"></script> <!-- Le styles --> <link href="../bootstrap-1.3.0.css" rel="stylesheet"> @@ -45,6 +47,7 @@ <li><a href="#modal">Modals</a></li> <li><a href="#alerts">Alerts</a></li> <li><a href="#dropdown">Dropdown</a></li> + <li><a href="#tabs">Tabs</a></li> <li><a href="#twipsy">Twipsy</a></li> <li><a href="#popover">Popover</a></li> </ul> @@ -242,58 +245,59 @@ $('#modal-content').modal({ </div> <div class="row"> <div class="span4 columns"> - <p>This plugin is for adding simple dynamic tab functionality.</p> - <a href="assets/js/bootstrap-dropdown.js" target="_blank" class="btn primary">Download</a> + <p>This plugin adds quick, dynamic tab and pill functionality.</p> + <a href="assets/js/bootstrap-tabs.js" target="_blank" class="btn primary">Download</a> </div> <div class="span12 columns"> <h2>Using boostrap-tabs.js</h2> - <pre class="prettyprint linenums">$('#topbar').dropdown()</pre> + <pre class="prettyprint linenums">$('.tabs').tabs()</pre> <h3>Method</h3> - <h4>$().dropdown</h4> + <h4>$().tabs or $().pills</h4> <p> - Activates menus for given topbar navigation. + Activates tab and pill functionality for a given container. + </p> + <p> + <strong>Note:</strong> The controlled container is defined by a required <code>aria-controls</code> attribute added to your <code>.tabs</code> or <code>.pills</code>. The <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-controls">aria-controls</a> attribute must reference an element's id. +<pre class="prettyprint linenums"> +<ul class="tabs" aria-controls="my-pill-content"> + <li class="active"><a href="#home">Home</a></li> + <li><a href="#profile">Profile</a></li> + <li><a href="#messages">Messages</a></li> + <li><a href="#settings">Settings</a></li> +</ul> + +<div class="pill-content" id="my-pill-content"> + <div class="active" id="home">...</div> + <div id="profile">...</div> + <div id="messages">...</div> + <div id="settings">...</div> +</ul></pre> </p> <h3>Demo</h3> <script> $(function () { - $('#tab').tab('.tab-container') + $('.tabs').tabs() }) </script> - <div class="topbar-wrapper"> - <div id="topbar-example" class="topbar"> - <div class="fill"> - <div class="container"> - <h3><a href="#">Project Name</a></h3> - <ul> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - <form action=""> - <input type="text" placeholder="Search" /> - </form> - <ul class="nav secondary-nav"> - <li class="menu"> - <a href="#" class="menu">Dropdown 1</a> - <ul class="menu-dropdown"> - <li><a href="#">Secondary link</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Another link</a></li> - </ul> - </li> - <li class="menu"> - <a href="#" class="menu">Dropdown 2</a> - <ul class="menu-dropdown"> - <li><a href="#">Secondary link</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Another link</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> + <ul class="tabs" aria-controls="my-tab-content"> + <li class="active"><a href="#home">Home</a></li> + <li><a href="#profile">Profile</a></li> + <li><a href="#messages">Messages</a></li> + <li><a href="#settings">Settings</a></li> + </ul> + <div id="my-tab-content" class="tab-content"> + <p class="active" id="home"> +Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui. + </p> + <p id="profile"> +Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park. + </p> + <p id="messages"> +Banksy do proident, brooklyn photo booth delectus sunt artisan sed organic exercitation eiusmod four loko. Quis tattooed iphone esse aliqua. Master cleanse vero fixie mcsweeney's. Ethical portland aute, irony food truck pitchfork lomo eu anim. Aesthetic blog DIY, ethical beard leggings tofu consequat whatever cardigan nostrud. Helvetica you probably haven't heard of them carles, marfa veniam occaecat lomo before they sold out in shoreditch scenester sustainable thundercats. Consectetur tofu craft beer, mollit brunch fap echo park pitchfork mustache dolor. + </p> + <p id="settings"> +Sunt qui biodiesel mollit officia, fanny pack put a bird on it thundercats seitan squid ad wolf bicycle rights blog. Et aute readymade farm-to-table carles 8-bit, nesciunt nulla etsy adipisicing organic ea. Master cleanse mollit high life, next level Austin nesciunt american apparel twee mustache adipisicing reprehenderit hoodie portland irony. Aliqua tofu quinoa +1 commodo eiusmod. High life williamsburg cupidatat twee homo leggings. Four loko vinyl DIY consectetur nisi, marfa retro keffiyeh vegan. Fanny pack viral retro consectetur gentrify fap. + </p> </div> </div> </div> diff --git a/lib/patterns.less b/lib/patterns.less index b2c0d13650fe9dc724c41a06c7ba05cc7a7aa340..4cee7020cbc0349b5273201cc5748d9f0b04a652 100644 --- a/lib/patterns.less +++ b/lib/patterns.less @@ -401,6 +401,16 @@ a.menu:after, } } +.tab-content > *, +.pill-content > * { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display:block; +} + // BREADCRUMBS // -----------