aboutsummaryrefslogtreecommitdiff
path: root/javascript.html
diff options
context:
space:
mode:
authorMark Otto <[email protected]>2013-12-14 16:20:19 -0800
committerMark Otto <[email protected]>2013-12-14 16:20:19 -0800
commit83c60ef3eec234b3dac94c841fd1f13f94aab36f (patch)
tree0d896dedbbd47723ab769b139b63a5a58778e578 /javascript.html
parent3bfa630d2afe70452861b2466daab78daa47dda8 (diff)
parent4afcebe0e71aafd0cfb501548a6591effdbe2e70 (diff)
downloadbootstrap-83c60ef3eec234b3dac94c841fd1f13f94aab36f.tar.xz
bootstrap-83c60ef3eec234b3dac94c841fd1f13f94aab36f.zip
Merge branch 'master' into pr/11107
Conflicts: docs-assets/js/raw-files.js
Diffstat (limited to 'javascript.html')
-rw-r--r--javascript.html116
1 files changed, 75 insertions, 41 deletions
diff --git a/javascript.html b/javascript.html
index 95dcc3acc..39dbc6e8e 100644
--- a/javascript.html
+++ b/javascript.html
@@ -30,7 +30,7 @@ base_url: "../"
<h3 id="js-data-attrs">Data attributes</h3>
<p>You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first-class API and should be your first consideration when using a plugin.</p>
- <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the document namespaced with <code>data-api</code>. This looks like this:
+ <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the document namespaced with <code>data-api</code>. This looks like this:</p>
{% highlight js %}
$(document).off('.data-api')
{% endhighlight %}
@@ -43,14 +43,14 @@ $(document).off('.alert.data-api')
<h3 id="js-programmatic-api">Programmatic API</h3>
<p>We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.</p>
{% highlight js %}
-$(".btn.danger").button("toggle").addClass("fat")
+$('.btn.danger').button('toggle').addClass('fat')
{% endhighlight %}
<p>All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):</p>
{% highlight js %}
-$("#myModal").modal() // initialized with defaults
-$("#myModal").modal({ keyboard: false }) // initialized with no keyboard
-$("#myModal").modal('show') // initializes and invokes show immediately</p>
+$('#myModal').modal() // initialized with defaults
+$('#myModal').modal({ keyboard: false }) // initialized with no keyboard
+$('#myModal').modal('show') // initializes and invokes show immediately
{% endhighlight %}
<p>Each plugin also exposes its raw constructor on a <code>Constructor</code> property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.</p>
@@ -108,6 +108,10 @@ $('#myModal').on('show.bs.modal', function (e) {
<h4>Overlapping modals not supported</h4>
<p>Be sure not to open a modal while another is still visible. Showing more than one modal at a time requires custom code.</p>
</div>
+ <div class="bs-callout bs-callout-warning">
+ <h4>Mobile device caveats</h4>
+ <p>There are some caveats regarding using modals on mobile devices. <a href="{{ page.base_url }}getting-started#mobile-modals">See our browser support docs</a> for details.</p>
+ </div>
<h3>Static example</h3>
<p>A rendered modal with header, body, and set of actions in the footer.</p>
@@ -300,15 +304,15 @@ $('#myModal').modal({
{% endhighlight %}
<h4>.modal('toggle')</h4>
- <p>Manually toggles a modal.</p>
+ <p>Manually toggles a modal. <strong>Returns to the caller before the modal has actually been shown or hidden</strong> (i.e. before the <code>shown.bs.modal</code> or <code>hidden.bs.modal</code> event occurs).</p>
{% highlight js %}$('#myModal').modal('toggle'){% endhighlight %}
<h4>.modal('show')</h4>
- <p>Manually opens a modal.</p>
+ <p>Manually opens a modal. <strong>Returns to the caller before the modal has actually been shown</strong> (i.e. before the <code>shown.bs.modal</code> event occurs).</p>
{% highlight js %}$('#myModal').modal('show'){% endhighlight %}
<h4>.modal('hide')</h4>
- <p>Manually hides a modal.</p>
+ <p>Manually hides a modal. <strong>Returns to the caller before the modal has actually been hidden</strong> (i.e. before the <code>hidden.bs.modal</code> event occurs).</p>
{% highlight js %}$('#myModal').modal('hide'){% endhighlight %}
<h3>Events</h3>
@@ -324,11 +328,11 @@ $('#myModal').modal({
<tbody>
<tr>
<td>show.bs.modal</td>
- <td>This event fires immediately when the <code>show</code> instance method is called.</td>
+ <td>This event fires immediately when the <code>show</code> instance method is called. If caused by a click, the clicked element is available as the <code>relatedTarget</code> property of the event.</td>
</tr>
<tr>
<td>shown.bs.modal</td>
- <td>This event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete).</td>
+ <td>This event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete). If caused by a click, the clicked element is available as the <code>relatedTarget</code> property of the event.</td>
</tr>
<tr>
<td>hide.bs.modal</td>
@@ -342,8 +346,8 @@ $('#myModal').modal({
</table>
</div><!-- /.table-responsive -->
{% highlight js %}
-$('#myModal').on('hidden.bs.modal', function () {
- // do something…
+$('#myModal').on('hidden.bs.modal', function (e) {
+ // do something...
})
{% endhighlight %}
</div>
@@ -411,7 +415,7 @@ $('#myModal').on('hidden.bs.modal', function () {
</nav> <!-- /navbar-example -->
</div> <!-- /example -->
- <h3>Within tabs</h3>
+ <h3>Within pills</h3>
<div class="bs-example">
<ul class="nav nav-pills">
<li class="active"><a href="#">Regular link</a></li>
@@ -445,7 +449,7 @@ $('#myModal').on('hidden.bs.modal', function () {
<li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li>
</ul>
</li>
- </ul> <!-- /tabs -->
+ </ul> <!-- /pills -->
</div> <!-- /example -->
@@ -525,6 +529,7 @@ $('#myDropdown').on('show.bs.dropdown', function () {
{% endhighlight %}
</div>
+
<!-- ScrollSpy
================================================== -->
<div class="bs-docs-section">
@@ -584,7 +589,13 @@ $('#myDropdown').on('show.bs.dropdown', function () {
<h3>Via data attributes</h3>
<p>To easily add scrollspy behavior to your topbar navigation, add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the <code>&lt;body&gt;</code>). Then add the <code>data-target</code> attribute with the ID or class of the parent element of any Bootstrap <code>.nav</code> component.</p>
{% highlight html %}
-<body data-spy="scroll" data-target="#navbar-example">
+<body data-spy="scroll" data-target=".navbar-example">
+ ...
+ <div class="navbar-example">
+ <ul class="nav nav-tabs">
+ ...
+ </ul>
+ </div>
...
</body>
{% endhighlight %}
@@ -592,7 +603,7 @@ $('#myDropdown').on('show.bs.dropdown', function () {
<h3>Via JavaScript</h3>
<p>Call the scrollspy via JavaScript:</p>
{% highlight js %}
-$('body').scrollspy({ target: '#navbar-example' })
+$('body').scrollspy({ target: '.navbar-example' })
{% endhighlight %}
<div class="bs-callout bs-callout-danger">
@@ -1112,7 +1123,7 @@ $('#myTooltip').on('hidden.bs.tooltip', function () {
<td>animation</td>
<td>boolean</td>
<td>true</td>
- <td>apply a CSS fade transition to the tooltip</td>
+ <td>apply a CSS fade transition to the popover</td>
</tr>
<tr>
<td>html</td>
@@ -1130,7 +1141,7 @@ $('#myTooltip').on('hidden.bs.tooltip', function () {
<td>selector</td>
<td>string</td>
<td>false</td>
- <td>if a selector is provided, tooltip objects will be delegated to the specified targets. in practice, this is used to enable dynamic HTML content to have popovers added. See <a href="https://github.com/twbs/bootstrap/issues/4215">this</a> and <a href="http://jsfiddle.net/fScua/">an informative example</a>.</td>
+ <td>if a selector is provided, tooltip objects will be delegated to the specified targets. In practice, this is used to enable dynamic HTML content to have popovers added. See <a href="https://github.com/twbs/bootstrap/issues/4215">this</a> and <a href="http://jsfiddle.net/fScua/">an informative example</a>.</td>
</tr>
<tr>
<td>trigger</td>
@@ -1323,14 +1334,23 @@ $('#my-alert').bind('closed.bs.alert', function () {
<h4>Stateful</h4>
<p>Add <code>data-loading-text="Loading..."</code> to use a loading state on a button.</p>
<div class="bs-example" style="padding-bottom: 24px;">
- <button type="button" id="fat-btn" data-loading-text="Loading..." class="btn btn-primary">
+ <button type="button" id="loading-example-btn" data-loading-text="Loading..." class="btn btn-primary">
Loading state
</button>
</div><!-- /example -->
{% highlight html %}
-<button type="button" data-loading-text="Loading..." class="btn btn-primary">
+<button type="button" id="loading-example-btn" data-loading-text="Loading..." class="btn btn-primary">
Loading state
</button>
+<script>
+ $('#loading-example-btn').click(function () {
+ var btn = $(this);
+ btn.button('loading');
+ $.ajax(...).always(function () {
+ btn.button('reset');
+ });
+ });
+</script>
{% endhighlight %}
<h4>Single toggle</h4>
@@ -1404,7 +1424,7 @@ $('#my-alert').bind('closed.bs.alert', function () {
<h2 id="buttons-usage">Usage</h2>
<p>Enable buttons via JavaScript:</p>
{% highlight js %}
-$('.btn-group').button()
+$('.btn').button()
{% endhighlight %}
<h3>Markup</h3>
@@ -1422,14 +1442,23 @@ $('.btn-group').button()
<p>You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.</p>
</div>
{% highlight html %}
-<button type="button" class="btn" data-toggle="button">...</button>
+<button type="button" class="btn btn-primary" data-toggle="button">...</button>
{% endhighlight %}
<h4>$().button('loading')</h4>
<p>Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>.
</p>
{% highlight html %}
-<button type="button" class="btn" data-loading-text="loading stuff...">...</button>
+<button id="loading-example-btn" type="button" class="btn btn-primary" data-loading-text="loading stuff...">...</button>
+<script>
+ $('#loading-example-btn').click(function () {
+ var btn = $(this);
+ btn.button('loading');
+ $.ajax(...).always(function () {
+ btn.button('reset');
+ });
+ });
+</script>
{% endhighlight %}
<div class="bs-callout bs-callout-danger">
@@ -1443,7 +1472,7 @@ $('.btn-group').button()
<h4>$().button(string)</h4>
<p>Resets button state - swaps text to any data defined text state.</p>
{% highlight html %}
-<button type="button" class="btn" data-complete-text="finished!" >...</button>
+<button type="button" class="btn btn-primary" data-complete-text="finished!" >...</button>
<script>
$('.btn').button('complete')
</script>
@@ -1589,7 +1618,7 @@ $('.btn-group').button()
<h3>Via JavaScript</h3>
<p>Enable manually with:</p>
{% highlight js %}
-$(".collapse").collapse()
+$('.collapse').collapse()
{% endhighlight %}
<h3>Options</h3>
@@ -1699,13 +1728,13 @@ $('#myCollapsible').on('hidden.bs.collapse', function () {
</ol>
<div class="carousel-inner">
<div class="item active">
- <img src="data:image/png;base64," data-src="holder.js/900x500/auto/#777:#555/text:First slide" alt="First slide">
+ <img data-src="holder.js/900x500/auto/#777:#555/text:First slide" alt="First slide">
</div>
<div class="item">
- <img src="data:image/png;base64," data-src="holder.js/900x500/auto/#666:#444/text:Second slide" alt="Second slide">
+ <img data-src="holder.js/900x500/auto/#666:#444/text:Second slide" alt="Second slide">
</div>
<div class="item">
- <img src="data:image/png;base64," data-src="holder.js/900x500/auto/#555:#333/text:Third slide" alt="Third slide">
+ <img data-src="holder.js/900x500/auto/#555:#333/text:Third slide" alt="Third slide">
</div>
</div>
<a class="left carousel-control" href="#carousel-example-generic" data-slide="prev">
@@ -1761,21 +1790,21 @@ $('#myCollapsible').on('hidden.bs.collapse', function () {
</ol>
<div class="carousel-inner">
<div class="item active">
- <img data-src="holder.js/900x500/auto/#777:#777" src="data:image/png;base64," alt="First slide image">
+ <img data-src="holder.js/900x500/auto/#777:#777" alt="First slide image">
<div class="carousel-caption">
<h3>First slide label</h3>
<p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>
</div>
</div>
<div class="item">
- <img data-src="holder.js/900x500/auto/#666:#666" src="data:image/png;base64," alt="Second slide image">
+ <img data-src="holder.js/900x500/auto/#666:#666" alt="Second slide image">
<div class="carousel-caption">
<h3>Second slide label</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</div>
<div class="item">
- <img data-src="holder.js/900x500/auto/#555:#5555" src="data:image/png;base64," alt="Third slide image">
+ <img data-src="holder.js/900x500/auto/#555:#5555" alt="Third slide image">
<div class="carousel-caption">
<h3>Third slide label</h3>
<p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>
@@ -1922,22 +1951,27 @@ $('#myCarousel').on('slide.bs.carousel', function () {
<hr class="bs-docs-separator">
<h2 id="affix-usage">Usage</h2>
+ <p>Use the affix plugin via data attributes or manually with your own JavaScript. <strong>In both situations, you must provide CSS for the positioning of your content.</strong></p>
+
+ <h3>Positioning via CSS</h3>
+ <p>The affix plugin toggles between three classes, each representing a particular state: <code>.affix</code>, <code>.affix-top</code>, and <code>.affix-bottom</code>. You must provide the styles for these classes yourself (independent of this plugin) to handle the actual positions.</p>
+ <p>Here's how the affix plugin works:</p>
+ <ol>
+ <li>To start, the plugin adds <code>.affix-top</code> to indicate the element is in it's top-most position. At this point no CSS positioning is required.</li>
+ <li>Scrolling past the element you want affixed should trigger the actual affixing. This is where <code>.affix</code> replaces <code>.affix-top</code> and sets <code>position: fixed;</code> (provided by Bootstrap's code CSS).</li>
+ <li>If a bottom offset is defined, scrolling past that should replace <code>.affix</code> with <code>.affix-bottom</code>. Since offsets are optional, setting one requires you to set the appropriate CSS. In this case, add <code>position: absolute;</code> when necessary. The plugin uses the data attribute or JavaScript option to determine where to position the element from there.</li>
+ </ol>
+ <p>Follow the above steps to set your CSS for either of the usage options below.</p>
<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. Then use offsets to define when to toggle the pinning of an element on and off.</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. Use offsets to define when to toggle the pinning of an element.</p>
{% highlight html %}
-<div data-spy="affix" data-offset-top="200">...</div>
+<div data-spy="affix" data-offset-top="60" data-offset-bottom="200">
+ ...
+</div>
{% endhighlight %}
- <div class="bs-callout bs-callout-warning">
- <h4>Requires independent styling ;)</h4>
- <p>
- Affix toggles between three states/classes: <code>.affix</code>, <code>.affix-top</code>, and <code>.affix-bottom</code>. You must provide the styles for these classes yourself (independent of this plugin).
- The <code>.affix-top</code> class should be in the regular flow of the document. The <code>.affix</code> class should be <code>position: fixed</code>. And <code>.affix-bottom</code> should be <code>position: absolute</code>. Note: <code>.affix-bottom</code> is special in that the plugin will place the element with JS relative to the <code>offset: { bottom: number }</code> option you've provided.
- </p>
- </div>
-
<h3>Via JavaScript</h3>
<p>Call the affix plugin via JavaScript:</p>
{% highlight js %}