0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-03-15 15:29:22 +01:00

Merge branch '2.1.0-wip' of github.com:twitter/bootstrap into 2.1.0-wip

This commit is contained in:
Mark Otto 2012-08-15 14:45:41 -07:00
commit fd509cb370
21 changed files with 96 additions and 76 deletions

View File

@ -26,7 +26,7 @@ build:
@cp js/*.js docs/assets/js/ @cp js/*.js docs/assets/js/
@cp js/tests/vendor/jquery.js docs/assets/js/ @cp js/tests/vendor/jquery.js docs/assets/js/
@echo "Compiling documentation... ${CHECK} Done" @echo "Compiling documentation... ${CHECK} Done"
@cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js > docs/assets/js/bootstrap.js @cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js js/bootstrap-affix.js > docs/assets/js/bootstrap.js
@uglifyjs -nc docs/assets/js/bootstrap.js > docs/assets/js/bootstrap.min.tmp.js @uglifyjs -nc docs/assets/js/bootstrap.js > docs/assets/js/bootstrap.min.tmp.js
@echo "/**\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > docs/assets/js/copyright.js @echo "/**\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > docs/assets/js/copyright.js
@cat docs/assets/js/copyright.js docs/assets/js/bootstrap.min.tmp.js > docs/assets/js/bootstrap.min.js @cat docs/assets/js/copyright.js docs/assets/js/bootstrap.min.tmp.js > docs/assets/js/bootstrap.min.js

View File

@ -813,9 +813,13 @@ form.bs-docs-example {
opacity: .75; opacity: .75;
} }
.bs-docs-sidenav.affix { .bs-docs-sidenav.affix {
top: 30px; top: 40px;
}
.bs-docs-sidenav.affix-bottom {
position: absolute;
top: auto;
bottom: 270px;
} }
@ -868,12 +872,15 @@ form.bs-docs-example {
} }
/* Widen masthead and social buttons to fill body padding */ /* Widen masthead and social buttons to fill body padding */
.jumbotron { .jumbotron {
margin-top: -20px; /* Offset bottom margin on .navbar */ margin-top: -20px; /* Offset bottom margin on .navbar */
} }
/* Adjust sidenav width */ /* Adjust sidenav width */
.bs-docs-sidenav { .bs-docs-sidenav {
width: 166px; width: 166px;
} }
.bs-docs-sidenav.affix {
top: 0px;
}
} }
/* Tablet /* Tablet
@ -929,6 +936,9 @@ form.bs-docs-example {
.footer p { .footer p {
margin-bottom: 9px; margin-bottom: 9px;
} }
.bs-docs-sidenav.affix {
top: 0;
}
} }
/* Landscape phones /* Landscape phones

View File

@ -6,11 +6,21 @@
$(function(){ $(function(){
var $window = $(window)
// Disable certain links in docs // Disable certain links in docs
$('section [href^=#]').click(function (e) { $('section [href^=#]').click(function (e) {
e.preventDefault() e.preventDefault()
}) })
// side bar
$('.bs-docs-sidenav').affix({
offset: {
top: function () { return $window.width() <= 980 ? 290 : 210 }
, bottom: 270
}
})
// make code pretty // make code pretty
window.prettyPrint && prettyPrint() window.prettyPrint && prettyPrint()

View File

@ -28,36 +28,38 @@
var Affix = function (element, options) { var Affix = function (element, options) {
this.options = $.extend({}, $.fn.affix.defaults, options) this.options = $.extend({}, $.fn.affix.defaults, options)
this.$window = $(window) this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
.on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
.on('resize.affix.data-api', $.proxy(this.refresh, this))
this.$element = $(element) this.$element = $(element)
this.refresh() this.checkPosition()
}
Affix.prototype.refresh = function () {
this.position = this.$element.offset()
} }
Affix.prototype.checkPosition = function () { Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) return if (!this.$element.is(':visible')) return
var scrollLeft = this.$window.scrollLeft() var scrollHeight = $(document).height()
, scrollTop = this.$window.scrollTop() , scrollTop = this.$window.scrollTop()
, position = this.position , position = this.$element.offset()
, offset = this.options.offset , offset = this.options.offset
, offsetBottom = offset.bottom
, offsetTop = offset.top
, reset = 'affix affix-top affix-bottom'
, affix , affix
if (typeof offset != 'object') offset = { x: offset, y: offset } if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top()
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
affix = (offset.x == null || (position.left - scrollLeft <= offset.x)) affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
&& (offset.y == null || (position.top - scrollTop <= offset.y)) false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
'bottom' : offsetTop != null && scrollTop <= offsetTop ?
'top' : false
if (affix == this.affixed) return if (this.affixed === affix) return
this.affixed = affix this.affixed = affix
this.unpin = affix == 'bottom' ? position.top - scrollTop : null
this.$element[affix ? 'addClass' : 'removeClass']('affix') this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
} }
@ -84,15 +86,15 @@
/* AFFIX DATA-API /* AFFIX DATA-API
* ============== */ * ============== */
$(function () { $(window).on('load', function () {
$('[data-spy="affix"]').each(function () { $('[data-spy="affix"]').each(function () {
var $spy = $(this) var $spy = $(this)
, data = $spy.data() , data = $spy.data()
data.offset = data.offset || {} data.offset = data.offset || {}
data.offsetX && (data.offset.x = data.offsetX) data.offsetBottom && (data.offset.bottom = data.offsetBottom)
data.offsetY && (data.offset.y = data.offsetY) data.offsetTop && (data.offset.top = data.offsetTop)
$spy.affix(data) $spy.affix(data)
}) })

File diff suppressed because one or more lines are too long

View File

@ -85,7 +85,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#typography"><i class="icon-chevron-right"></i> Typography</a></li> <li><a href="#typography"><i class="icon-chevron-right"></i> Typography</a></li>
<li><a href="#code"><i class="icon-chevron-right"></i> Code</a></li> <li><a href="#code"><i class="icon-chevron-right"></i> Code</a></li>
<li><a href="#tables"><i class="icon-chevron-right"></i> Tables</a></li> <li><a href="#tables"><i class="icon-chevron-right"></i> Tables</a></li>

View File

@ -85,7 +85,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#dropdowns"><i class="icon-chevron-right"></i> Dropdowns</a></li> <li><a href="#dropdowns"><i class="icon-chevron-right"></i> Dropdowns</a></li>
<li><a href="#buttonGroups"><i class="icon-chevron-right"></i> Button groups</a></li> <li><a href="#buttonGroups"><i class="icon-chevron-right"></i> Button groups</a></li>
<li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> Button dropdowns</a></li> <li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> Button dropdowns</a></li>

View File

@ -85,7 +85,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#components"><i class="icon-chevron-right"></i> 1. Choose components</a></li> <li><a href="#components"><i class="icon-chevron-right"></i> 1. Choose components</a></li>
<li><a href="#plugins"><i class="icon-chevron-right"></i> 2. Select jQuery plugins</a></li> <li><a href="#plugins"><i class="icon-chevron-right"></i> 2. Select jQuery plugins</a></li>
<li><a href="#variables"><i class="icon-chevron-right"></i> 3. Customize variables</a></li> <li><a href="#variables"><i class="icon-chevron-right"></i> 3. Customize variables</a></li>

View File

@ -84,7 +84,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#built-with-less"><i class="icon-chevron-right"></i> Built with LESS</a></li> <li><a href="#built-with-less"><i class="icon-chevron-right"></i> Built with LESS</a></li>
<li><a href="#compiling"><i class="icon-chevron-right"></i> Compiling Bootstrap</a></li> <li><a href="#compiling"><i class="icon-chevron-right"></i> Compiling Bootstrap</a></li>
<li><a href="#static-assets"><i class="icon-chevron-right"></i> Use as static assets</a></li> <li><a href="#static-assets"><i class="icon-chevron-right"></i> Use as static assets</a></li>

View File

@ -85,7 +85,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav" >
<li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> Download</a></li> <li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> Download</a></li>
<li><a href="#file-structure"><i class="icon-chevron-right"></i> File structure</a></li> <li><a href="#file-structure"><i class="icon-chevron-right"></i> File structure</a></li>
<li><a href="#contents"><i class="icon-chevron-right"></i> What's included</a></li> <li><a href="#contents"><i class="icon-chevron-right"></i> What's included</a></li>

View File

@ -84,7 +84,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#overview"><i class="icon-chevron-right"></i> Overview</a></li> <li><a href="#overview"><i class="icon-chevron-right"></i> Overview</a></li>
<li><a href="#transitions"><i class="icon-chevron-right"></i> Transitions</a></li> <li><a href="#transitions"><i class="icon-chevron-right"></i> Transitions</a></li>
<li><a href="#modals"><i class="icon-chevron-right"></i> Modal</a></li> <li><a href="#modals"><i class="icon-chevron-right"></i> Modal</a></li>
@ -1596,7 +1596,6 @@ $('.carousel').carousel({
<h1>Affix <small>bootstrap-affix.js</small></h1> <h1>Affix <small>bootstrap-affix.js</small></h1>
</div> </div>
<h2>Example</h2> <h2>Example</h2>
<p>The subnavigation on the left is a live demo of the affix plugin.</p> <p>The subnavigation on the left is a live demo of the affix plugin.</p>
@ -1605,13 +1604,13 @@ $('.carousel').carousel({
<h2>Usage</h2> <h2>Usage</h2>
<h3>Via data attributes</h3> <h3>Via data attributes</h3>
<p>To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. When the affix offsets are satisified, an <code>.affix</code> class is added to the element. </p> <p>To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.</p>
<pre class="prettyprint linenums">&lt;div data-spy="affix"&gt;...&lt;/body&gt;</pre> <pre class="prettyprint linenums">&lt;div data-spy="affix" data-offset-top="200"&gt;...&lt;/body&gt;</pre>
<div class="alert alert-info"> <div class="alert alert-info">
<strong>Heads up!</strong> <strong>Heads up!</strong>
It's up to you to maintain the dimensions of an element when toggling between relative and fixed positions. To see how this is done, refer to this pages subnavigation. It's up to you to manage the position of a pinned element. This is done by styling <code>affix</code>, <code>affix-top</code>, and <code>affix-bottom</code>.
</div> </div>
<h3>Via JavaScript</h3> <h3>Via JavaScript</h3>
@ -1619,16 +1618,15 @@ $('.carousel').carousel({
<pre class="prettyprint linenums">$('#navbar').affix()</pre> <pre class="prettyprint linenums">$('#navbar').affix()</pre>
<h3>Methods</h3> <h3>Methods</h3>
<h4>.scrollspy('refresh')</h4> <h4>.affix('refresh')</h4>
<p>When using affix in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:</p> <p>When using affix in conjunction with adding or removing of elements from the DOM, you'll want to call the refresh method:</p>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
$('[data-spy="affix"]').each(function () { $('[data-spy="affix"]').each(function () {
$(this).affix('refresh') $(this).affix('refresh')
}); });
</pre> </pre>
<h3>Options</h3> <h3>Options</h3>
<p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-y=""</code>.</p> <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.</p>
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
@ -1641,9 +1639,9 @@ $('[data-spy="affix"]').each(function () {
<tbody> <tbody>
<tr> <tr>
<td>offset</td> <td>offset</td>
<td>number | object</td> <td>number | function | object</td>
<td>10</td> <td>10</td>
<td>Pixels to offset from screen when calculating position of scroll. If a single number is provide, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provided an object <code>offset: { x: 10 }</code>.</td> <td>Pixels to offset from screen when calculating position of scroll. If a single number is provide, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provided an object <code>offset: { x: 10 }</code>. Use a function when you need to dynamically provide an offset (useful for some responsive designs).</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@ -84,7 +84,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#global"><i class="icon-chevron-right"></i> Global styles</a></li> <li><a href="#global"><i class="icon-chevron-right"></i> Global styles</a></li>
<li><a href="#gridSystem"><i class="icon-chevron-right"></i> Grid system</a></li> <li><a href="#gridSystem"><i class="icon-chevron-right"></i> Grid system</a></li>
<li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> Fluid grid system</a></li> <li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> Fluid grid system</a></li>

View File

@ -14,7 +14,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#typography"><i class="icon-chevron-right"></i> {{_i}}Typography{{/i}}</a></li> <li><a href="#typography"><i class="icon-chevron-right"></i> {{_i}}Typography{{/i}}</a></li>
<li><a href="#code"><i class="icon-chevron-right"></i> {{_i}}Code{{/i}}</a></li> <li><a href="#code"><i class="icon-chevron-right"></i> {{_i}}Code{{/i}}</a></li>
<li><a href="#tables"><i class="icon-chevron-right"></i> {{_i}}Tables{{/i}}</a></li> <li><a href="#tables"><i class="icon-chevron-right"></i> {{_i}}Tables{{/i}}</a></li>

View File

@ -14,7 +14,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#dropdowns"><i class="icon-chevron-right"></i> {{_i}}Dropdowns{{/i}}</a></li> <li><a href="#dropdowns"><i class="icon-chevron-right"></i> {{_i}}Dropdowns{{/i}}</a></li>
<li><a href="#buttonGroups"><i class="icon-chevron-right"></i> {{_i}}Button groups{{/i}}</a></li> <li><a href="#buttonGroups"><i class="icon-chevron-right"></i> {{_i}}Button groups{{/i}}</a></li>
<li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> {{_i}}Button dropdowns{{/i}}</a></li> <li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> {{_i}}Button dropdowns{{/i}}</a></li>

View File

@ -14,7 +14,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#components"><i class="icon-chevron-right"></i> {{_i}}1. Choose components{{/i}}</a></li> <li><a href="#components"><i class="icon-chevron-right"></i> {{_i}}1. Choose components{{/i}}</a></li>
<li><a href="#plugins"><i class="icon-chevron-right"></i> {{_i}}2. Select jQuery plugins{{/i}}</a></li> <li><a href="#plugins"><i class="icon-chevron-right"></i> {{_i}}2. Select jQuery plugins{{/i}}</a></li>
<li><a href="#variables"><i class="icon-chevron-right"></i> {{_i}}3. Customize variables{{/i}}</a></li> <li><a href="#variables"><i class="icon-chevron-right"></i> {{_i}}3. Customize variables{{/i}}</a></li>

View File

@ -13,7 +13,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#built-with-less"><i class="icon-chevron-right"></i> {{_i}}Built with LESS{{/i}}</a></li> <li><a href="#built-with-less"><i class="icon-chevron-right"></i> {{_i}}Built with LESS{{/i}}</a></li>
<li><a href="#compiling"><i class="icon-chevron-right"></i> {{_i}}Compiling Bootstrap{{/i}}</a></li> <li><a href="#compiling"><i class="icon-chevron-right"></i> {{_i}}Compiling Bootstrap{{/i}}</a></li>
<li><a href="#static-assets"><i class="icon-chevron-right"></i> {{_i}}Use as static assets{{/i}}</a></li> <li><a href="#static-assets"><i class="icon-chevron-right"></i> {{_i}}Use as static assets{{/i}}</a></li>

View File

@ -14,7 +14,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav" >
<li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> {{_i}}Download{{/i}}</a></li> <li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> {{_i}}Download{{/i}}</a></li>
<li><a href="#file-structure"><i class="icon-chevron-right"></i> {{_i}}File structure{{/i}}</a></li> <li><a href="#file-structure"><i class="icon-chevron-right"></i> {{_i}}File structure{{/i}}</a></li>
<li><a href="#contents"><i class="icon-chevron-right"></i> {{_i}}What's included{{/i}}</a></li> <li><a href="#contents"><i class="icon-chevron-right"></i> {{_i}}What's included{{/i}}</a></li>

View File

@ -13,7 +13,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#overview"><i class="icon-chevron-right"></i> {{_i}}Overview{{/i}}</a></li> <li><a href="#overview"><i class="icon-chevron-right"></i> {{_i}}Overview{{/i}}</a></li>
<li><a href="#transitions"><i class="icon-chevron-right"></i> {{_i}}Transitions{{/i}}</a></li> <li><a href="#transitions"><i class="icon-chevron-right"></i> {{_i}}Transitions{{/i}}</a></li>
<li><a href="#modals"><i class="icon-chevron-right"></i> {{_i}}Modal{{/i}}</a></li> <li><a href="#modals"><i class="icon-chevron-right"></i> {{_i}}Modal{{/i}}</a></li>
@ -1526,7 +1526,6 @@ $('.carousel').carousel({
<h1>{{_i}}Affix{{/i}} <small>bootstrap-affix.js</small></h1> <h1>{{_i}}Affix{{/i}} <small>bootstrap-affix.js</small></h1>
</div> </div>
<h2>{{_i}}Example{{/i}}</h2> <h2>{{_i}}Example{{/i}}</h2>
<p>{{_i}}The subnavigation on the left is a live demo of the affix plugin.{{/i}}</p> <p>{{_i}}The subnavigation on the left is a live demo of the affix plugin.{{/i}}</p>
@ -1535,13 +1534,13 @@ $('.carousel').carousel({
<h2>{{_i}}Usage{{/i}}</h2> <h2>{{_i}}Usage{{/i}}</h2>
<h3>{{_i}}Via data attributes{{/i}}</h3> <h3>{{_i}}Via data attributes{{/i}}</h3>
<p>{{_i}}To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. When the affix offsets are satisified, an <code>.affix</code> class is added to the element. {{/i}}</p> <p>{{_i}}To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.{{/i}}</p>
<pre class="prettyprint linenums">&lt;div data-spy="affix"&gt;...&lt;/body&gt;</pre> <pre class="prettyprint linenums">&lt;div data-spy="affix" data-offset-top="200"&gt;...&lt;/body&gt;</pre>
<div class="alert alert-info"> <div class="alert alert-info">
<strong>{{_i}}Heads up!{{/i}}</strong> <strong>{{_i}}Heads up!{{/i}}</strong>
{{_i}}It's up to you to maintain the dimensions of an element when toggling between relative and fixed positions. To see how this is done, refer to this pages subnavigation.{{/i}} {{_i}}It's up to you to manage the position of a pinned element. This is done by styling <code>affix</code>, <code>affix-top</code>, and <code>affix-bottom</code>.{{/i}}
</div> </div>
<h3>{{_i}}Via JavaScript{{/i}}</h3> <h3>{{_i}}Via JavaScript{{/i}}</h3>
@ -1549,16 +1548,15 @@ $('.carousel').carousel({
<pre class="prettyprint linenums">$('#navbar').affix()</pre> <pre class="prettyprint linenums">$('#navbar').affix()</pre>
<h3>{{_i}}Methods{{/i}}</h3> <h3>{{_i}}Methods{{/i}}</h3>
<h4>.scrollspy('refresh')</h4> <h4>.affix('refresh')</h4>
<p>{{_i}}When using affix in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:{{/i}}</p> <p>{{_i}}When using affix in conjunction with adding or removing of elements from the DOM, you'll want to call the refresh method:{{/i}}</p>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
$('[data-spy="affix"]').each(function () { $('[data-spy="affix"]').each(function () {
$(this).affix('refresh') $(this).affix('refresh')
}); });
</pre> </pre>
<h3>{{_i}}Options{{/i}}</h3> <h3>{{_i}}Options{{/i}}</h3>
<p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-y=""</code>.{{/i}}</p> <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.{{/i}}</p>
<table class="table table-bordered table-striped"> <table class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
@ -1571,9 +1569,9 @@ $('[data-spy="affix"]').each(function () {
<tbody> <tbody>
<tr> <tr>
<td>{{_i}}offset{{/i}}</td> <td>{{_i}}offset{{/i}}</td>
<td>{{_i}}number | object{{/i}}</td> <td>{{_i}}number | function | object{{/i}}</td>
<td>{{_i}}10{{/i}}</td> <td>{{_i}}10{{/i}}</td>
<td>{{_i}}Pixels to offset from screen when calculating position of scroll. If a single number is provide, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provided an object <code>offset: { x: 10 }</code>.{{/i}}</td> <td>{{_i}}Pixels to offset from screen when calculating position of scroll. If a single number is provide, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provided an object <code>offset: { x: 10 }</code>. Use a function when you need to dynamically provide an offset (useful for some responsive designs).{{/i}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@ -13,7 +13,7 @@
================================================== --> ================================================== -->
<div class="row"> <div class="row">
<div class="span3 bs-docs-sidebar"> <div class="span3 bs-docs-sidebar">
<ul class="nav nav-list bs-docs-sidenav" data-spy="affix" data-offset-y="80"> <ul class="nav nav-list bs-docs-sidenav">
<li><a href="#global"><i class="icon-chevron-right"></i> {{_i}}Global styles{{/i}}</a></li> <li><a href="#global"><i class="icon-chevron-right"></i> {{_i}}Global styles{{/i}}</a></li>
<li><a href="#gridSystem"><i class="icon-chevron-right"></i> {{_i}}Grid system{{/i}}</a></li> <li><a href="#gridSystem"><i class="icon-chevron-right"></i> {{_i}}Grid system{{/i}}</a></li>
<li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> {{_i}}Fluid grid system{{/i}}</a></li> <li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> {{_i}}Fluid grid system{{/i}}</a></li>

38
js/bootstrap-affix.js vendored
View File

@ -28,36 +28,38 @@
var Affix = function (element, options) { var Affix = function (element, options) {
this.options = $.extend({}, $.fn.affix.defaults, options) this.options = $.extend({}, $.fn.affix.defaults, options)
this.$window = $(window) this.$window = $(window).on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
.on('scroll.affix.data-api', $.proxy(this.checkPosition, this))
.on('resize.affix.data-api', $.proxy(this.refresh, this))
this.$element = $(element) this.$element = $(element)
this.refresh() this.checkPosition()
}
Affix.prototype.refresh = function () {
this.position = this.$element.offset()
} }
Affix.prototype.checkPosition = function () { Affix.prototype.checkPosition = function () {
if (!this.$element.is(':visible')) return if (!this.$element.is(':visible')) return
var scrollLeft = this.$window.scrollLeft() var scrollHeight = $(document).height()
, scrollTop = this.$window.scrollTop() , scrollTop = this.$window.scrollTop()
, position = this.position , position = this.$element.offset()
, offset = this.options.offset , offset = this.options.offset
, offsetBottom = offset.bottom
, offsetTop = offset.top
, reset = 'affix affix-top affix-bottom'
, affix , affix
if (typeof offset != 'object') offset = { x: offset, y: offset } if (typeof offset != 'object') offsetBottom = offsetTop = offset
if (typeof offsetTop == 'function') offsetTop = offset.top()
if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()
affix = (offset.x == null || (position.left - scrollLeft <= offset.x)) affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?
&& (offset.y == null || (position.top - scrollTop <= offset.y)) false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?
'bottom' : offsetTop != null && scrollTop <= offsetTop ?
'top' : false
if (affix == this.affixed) return if (this.affixed === affix) return
this.affixed = affix this.affixed = affix
this.unpin = affix == 'bottom' ? position.top - scrollTop : null
this.$element[affix ? 'addClass' : 'removeClass']('affix') this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))
} }
@ -84,15 +86,15 @@
/* AFFIX DATA-API /* AFFIX DATA-API
* ============== */ * ============== */
$(function () { $(window).on('load', function () {
$('[data-spy="affix"]').each(function () { $('[data-spy="affix"]').each(function () {
var $spy = $(this) var $spy = $(this)
, data = $spy.data() , data = $spy.data()
data.offset = data.offset || {} data.offset = data.offset || {}
data.offsetX && (data.offset.x = data.offsetX) data.offsetBottom && (data.offset.bottom = data.offsetBottom)
data.offsetY && (data.offset.y = data.offsetY) data.offsetTop && (data.offset.top = data.offsetTop)
$spy.affix(data) $spy.affix(data)
}) })

View File

@ -432,7 +432,7 @@
background-color: mix(@midColor, @endColor, 80%); background-color: mix(@midColor, @endColor, 80%);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor));
background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor); background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor); background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop*100%, @endColor);
background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor); background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor); background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor);
background-repeat: no-repeat; background-repeat: no-repeat;