Commit 1bac76af authored by Mark Otto's avatar Mark Otto

Merge branch 'master' into gh-pages

parents b252926e 6d03173a
# Enforce Unix newlines
*.css text eol=lf
*.html text eol=lf
*.js text eol=lf
*.json text eol=lf
*.less text eol=lf
*.md text eol=lf
*.yml text eol=lf
...@@ -39,3 +39,4 @@ validation-report.json ...@@ -39,3 +39,4 @@ validation-report.json
# Folders to ignore # Folders to ignore
node_modules node_modules
bower_components
...@@ -6,6 +6,5 @@ before_script: ...@@ -6,6 +6,5 @@ before_script:
- npm install -g grunt-cli - npm install -g grunt-cli
env: env:
global: global:
- secure: Besg41eyU+2mfxrywQ4ydOShMdc34ImaO0S0ENP+aCOBuyNBIgP59wy5tBMmyai2/8eInYeVps4Td96mWInMMxzTe3Bar7eTLG5tWVKRSr/wc4NBPZ/ppoPAmCEsz9Y+VptRH9/FO8n7hsL9EFZ+xBKbG+C0SccGoyBDpA5j7/w= - SAUCE_USERNAME: bootstrap
- secure: Ptiv7phCImFP3ALIz+sMQzrZg8k7C1gLZbFBhWxjnQr3g06wIfX3Ls5y9OHvxid+lOZZjISui3wzBVgpVHqwHUYf96+r0mo6/mJ+F4ffUmShZANVaIMD/JRTnXhUQJbvntGLvxn1EYWPdNM+2IHJrMipnjHxU9tkgAnlel4Zdew= - secure: "pJkBwnuae9dKU5tEcCqccfS1QQw7/meEcfz63fM7ba7QJNjoA6BaXj08L5Z3Vb5vBmVPwBawxo5Hp0jC0r/Z/O0hGnAmz/Cz09L+cy7dSAZ9x4hvZePSja/UAusaB5ogMoO8l2b773MzgQeSmrLbExr9BWLeqEfjC2hFgdgHLaQ="
- TWBS_HAVE_OWN_BROWSERSTACK_KEY: ""
...@@ -17,7 +17,7 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso ...@@ -17,7 +17,7 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso
## Pull requests ## Pull requests
- CSS changes must be done in `.less` files first, never just the compiled `.css` files - CSS changes must be done in `.less` files first, never just in the compiled `.css` files
- If modifying the `.less` files, always recompile and commit the compiled files `bootstrap.css` and `bootstrap.min.css` - If modifying the `.less` files, always recompile and commit the compiled files `bootstrap.css` and `bootstrap.min.css`
- Try not to pollute your pull request with unintended changes--keep them simple and small - Try not to pollute your pull request with unintended changes--keep them simple and small
- Try to share which browsers your code has been tested in before submitting a pull request - Try to share which browsers your code has been tested in before submitting a pull request
...@@ -58,4 +58,22 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso ...@@ -58,4 +58,22 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso
With v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). We're in the process of collecting permissions from all Bootstrap contributors with code still part of the project to make this happen. For details, please see [#2054](https://github.com/twbs/bootstrap/issues/2054). With v3.1, we're moving from the Apache 2 to the MIT license for the Bootstrap code (not the docs). We're in the process of collecting permissions from all Bootstrap contributors with code still part of the project to make this happen. For details, please see [#2054](https://github.com/twbs/bootstrap/issues/2054).
By contributing your code, you agree to dual-license your contribution under the [Apache 2](https://github.com/twbs/bootstrap/blob/master/LICENSE) and [MIT](https://github.com/twbs/bootstrap/blob/master/MIT) licenses. By contributing your code, you agree to dual-license your contribution under the [Apache 2](https://github.com/twbs/bootstrap/blob/master/LICENSE) and [MIT](https://github.com/twbs/bootstrap/blob/master/LICENSE-MIT) licenses.
## Release checklist
1. Close ship list issue for the release.
2. Close the milestone for the release.
3. Open new release issue that includes this checklist.
4. Ping folks to coordinate release (mainly @jdorfman for BootstrapCDN).
5. Update version numbers using `grunt change-version-number --oldver=A.B.C --newver=X.Y.Z`. Review the changes and stage them manually.
6. Run `grunt` one last time.
7. Push to `master` branch.
8. Merge `master` into `gh-pages`.
9. Generate `bootstrap-X.Y.Z-dist.zip` file for release.
10. Create release on GitHub with `/dist/` folder and release notes.
11. Push `gh-pages`.
12. Publish blog post.
13. Tweet tweet.
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
module.exports = function(grunt) { module.exports = function(grunt) {
"use strict"; "use strict";
// Force use of Unix newlines
grunt.util.linefeed = '\n';
RegExp.quote = require('regexp-quote') RegExp.quote = require('regexp-quote')
var btoa = require('btoa') var btoa = require('btoa')
// Project configuration. // Project configuration.
...@@ -11,11 +14,9 @@ module.exports = function(grunt) { ...@@ -11,11 +14,9 @@ module.exports = function(grunt) {
// Metadata. // Metadata.
pkg: grunt.file.readJSON('package.json'), pkg: grunt.file.readJSON('package.json'),
banner: '/*!\n' + banner: '/*!\n' +
' * Bootstrap v<%= pkg.version %> by @fat and @mdo\n' + ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + ' * Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
' * Licensed under <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' + ' * Licensed under <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' +
' *\n' +
' * Designed and built with all the love in the world by @mdo and @fat.\n' +
' */\n\n', ' */\n\n',
jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n', jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n',
...@@ -168,12 +169,105 @@ module.exports = function(grunt) { ...@@ -168,12 +169,105 @@ module.exports = function(grunt) {
replacement: grunt.option('newver'), replacement: grunt.option('newver'),
recursive: true recursive: true
} }
},
'saucelabs-qunit': {
all: {
options: {
build: process.env.TRAVIS_JOB_ID,
concurrency: 3,
urls: ['http://127.0.0.1:3000/js/tests/index.html'],
browsers: [
// See https://saucelabs.com/docs/platforms/webdriver
{
browserName: 'safari',
version: '6',
platform: 'OS X 10.8'
},
{
browserName: 'chrome',
version: '28',
platform: 'OS X 10.6'
},
/* FIXME: currently fails 1 tooltip test
{
browserName: 'firefox',
version: '25',
platform: 'OS X 10.6'
},*/
// Mac Opera not currently supported by Sauce Labs
/* FIXME: currently fails 1 tooltip test
{
browserName: 'internet explorer',
version: '11',
platform: 'Windows 8.1'
},*/
/*
{
browserName: 'internet explorer',
version: '10',
platform: 'Windows 8'
},
{
browserName: 'internet explorer',
version: '9',
platform: 'Windows 7'
},
{
browserName: 'internet explorer',
version: '8',
platform: 'Windows 7'
},
{// unofficial
browserName: 'internet explorer',
version: '7',
platform: 'Windows XP'
},
*/
{
browserName: 'chrome',
version: '31',
platform: 'Windows 8.1'
},
{
browserName: 'firefox',
version: '25',
platform: 'Windows 8.1'
},
// Win Opera 15+ not currently supported by Sauce Labs
{
browserName: 'iphone',
version: '6.1',
platform: 'OS X 10.8'
},
// iOS Chrome not currently supported by Sauce Labs
// Linux (unofficial)
{
browserName: 'chrome',
version: '30',
platform: 'Linux'
},
{
browserName: 'firefox',
version: '25',
platform: 'Linux'
}
// Android Chrome not currently supported by Sauce Labs
/* Android Browser (super-unofficial)
{
browserName: 'android',
version: '4.0',
platform: 'Linux'
}
*/
],
}
}
} }
}); });
// These plugins provide necessary tasks. // These plugins provide necessary tasks.
grunt.loadNpmTasks('browserstack-runner');
grunt.loadNpmTasks('grunt-contrib-clean'); grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-connect'); grunt.loadNpmTasks('grunt-contrib-connect');
...@@ -185,6 +279,7 @@ module.exports = function(grunt) { ...@@ -185,6 +279,7 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-html-validation'); grunt.loadNpmTasks('grunt-html-validation');
grunt.loadNpmTasks('grunt-jekyll'); grunt.loadNpmTasks('grunt-jekyll');
grunt.loadNpmTasks('grunt-recess'); grunt.loadNpmTasks('grunt-recess');
grunt.loadNpmTasks('grunt-saucelabs');
grunt.loadNpmTasks('grunt-sed'); grunt.loadNpmTasks('grunt-sed');
// Docs HTML validation task // Docs HTML validation task
...@@ -192,12 +287,10 @@ module.exports = function(grunt) { ...@@ -192,12 +287,10 @@ module.exports = function(grunt) {
// Test task. // Test task.
var testSubtasks = ['dist-css', 'jshint', 'qunit', 'validate-html']; var testSubtasks = ['dist-css', 'jshint', 'qunit', 'validate-html'];
// Only run BrowserStack tests under Travis // Only run Sauce Labs tests if there's a Sauce access key
if (process.env.TRAVIS) { if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined') {
// Only run BrowserStack tests if this is a mainline commit in twbs/bootstrap, or you have your own BrowserStack key testSubtasks.push('connect');
if ((process.env.TRAVIS_REPO_SLUG === 'twbs/bootstrap' && process.env.TRAVIS_PULL_REQUEST === 'false') || process.env.TWBS_HAVE_OWN_BROWSERSTACK_KEY) { testSubtasks.push('saucelabs-qunit');
testSubtasks.push('browserstack_runner');
}
} }
grunt.registerTask('test', testSubtasks); grunt.registerTask('test', testSubtasks);
......
# [Bootstrap](http://getbootstrap.com) [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.png)](http://travis-ci.org/twbs/bootstrap) [![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.png)](https://david-dm.org/twbs/bootstrap#info=devDependencies) # [Bootstrap](http://getbootstrap.com) [![Build Status](https://secure.travis-ci.org/twbs/bootstrap.png)](http://travis-ci.org/twbs/bootstrap) [![devDependency Status](https://david-dm.org/twbs/bootstrap/dev-status.png)](https://david-dm.org/twbs/bootstrap#info=devDependencies)
[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap)
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat). Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat).
...@@ -10,7 +11,7 @@ To get started, check out <http://getbootstrap.com>! ...@@ -10,7 +11,7 @@ To get started, check out <http://getbootstrap.com>!
Three quick start options are available: Three quick start options are available:
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.0.2.zip). * [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.0.3.zip).
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`. * Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
* Install with [Bower](http://bower.io): `bower install bootstrap`. * Install with [Bower](http://bower.io): `bower install bootstrap`.
......
...@@ -11,15 +11,15 @@ exclude: [".editorconfig", ".gitignore", "bower.json", "composer.json", ...@@ -11,15 +11,15 @@ exclude: [".editorconfig", ".gitignore", "bower.json", "composer.json",
port: 9001 port: 9001
# Custom vars # Custom vars
current_version: 3.0.2 current_version: 3.0.3
repo: https://github.com/twbs/bootstrap repo: https://github.com/twbs/bootstrap
download_source: https://github.com/twbs/bootstrap/archive/v3.0.2.zip download_source: https://github.com/twbs/bootstrap/archive/v3.0.3.zip
download_dist: https://github.com/twbs/bootstrap/releases/download/v3.0.2/bootstrap-3.0.2-dist.zip download_dist: https://github.com/twbs/bootstrap/releases/download/v3.0.3/bootstrap-3.0.3-dist.zip
blog: http://blog.getbootstrap.com blog: http://blog.getbootstrap.com
expo: http://expo.getbootstrap.com expo: http://expo.getbootstrap.com
cdn_css: //netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css cdn_css: //netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css
cdn_theme_css: //netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap-theme.min.css cdn_theme_css: //netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap-theme.min.css
cdn_js: //netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js cdn_js: //netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js
<!-- Bootstrap core JavaScript <!-- Bootstrap core JavaScript
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="{{ page.base_url }}dist/js/bootstrap.js"></script> <script src="{{ page.base_url }}dist/js/bootstrap.js"></script>
<script src="http://platform.twitter.com/widgets.js"></script>
<script src="{{ page.base_url }}docs-assets/js/holder.js"></script> <script src="{{ page.base_url }}docs-assets/js/holder.js"></script>
<script src="{{ page.base_url }}docs-assets/js/application.js"></script> <script src="{{ page.base_url }}docs-assets/js/application.js"></script>
...@@ -18,6 +17,21 @@ ...@@ -18,6 +17,21 @@
<script src="{{ page.base_url }}docs-assets/js/customizer.js"></script> <script src="{{ page.base_url }}docs-assets/js/customizer.js"></script>
{% endif %} {% endif %}
{% comment %}
Inject Twitter widgets asynchronously. Snippet snipped from Twitter's
JS interface site: https://dev.twitter.com/docs/tfw-javascript
* "js.async=1;" added to add async attribute to the generated script tag.
{% endcomment %}
<script>
window.twttr = (function (d,s,id) {
var t, js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return; js=d.createElement(s); js.id=id; js.async=1;
js.src="https://platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs);
return window.twttr || (t = { _e: [], ready: function(f){ t._e.push(f) } });
}(document, "script", "twitter-wjs"));
</script>
<!-- Analytics <!-- Analytics
================================================== --> ================================================== -->
<script> <script>
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
</li> </li>
<li> <li>
<a href="#whats-included">What's included</a> <a href="#whats-included">What's included</a>
<ul class="nav">
<li><a href="#whats-included-precompiled">Precompiled</a></li>
<li><a href="#whats-included-source">Source code</a></li>
</ul>
</li> </li>
<li> <li>
<a href="#template">Basic template</a> <a href="#template">Basic template</a>
......
...@@ -88,6 +88,7 @@ base_url: "../" ...@@ -88,6 +88,7 @@ base_url: "../"
<li><a href="http://v3.bootcss.com/">Bootstrap 中文文档 (Chinese)</a></li> <li><a href="http://v3.bootcss.com/">Bootstrap 中文文档 (Chinese)</a></li>
<li><a href="http://www.oneskyapp.com/docs/bootstrap/ru">Bootstrap по-русски (Russian)</a></li> <li><a href="http://www.oneskyapp.com/docs/bootstrap/ru">Bootstrap по-русски (Russian)</a></li>
<li><a href="http://www.oneskyapp.com/docs/bootstrap/es">Bootstrap en Español (Spanish)</a></li> <li><a href="http://www.oneskyapp.com/docs/bootstrap/es">Bootstrap en Español (Spanish)</a></li>
<li><a href="http://twbs.site-konstruktor.com.ua">Bootstrap ua Українською (Ukrainian)</a></li>
</ul> </ul>
<p>Have another language to add, or perhaps a different or better translation? Let us know by <a href="https://github.com/twbs/bootstrap/issues/new">opening an issue</a>.</p> <p>Have another language to add, or perhaps a different or better translation? Let us know by <a href="https://github.com/twbs/bootstrap/issues/new">opening an issue</a>.</p>
</div> </div>
{ {
"name": "bootstrap", "name": "bootstrap",
"version": "3.0.2", "version": "3.0.3",
"main": ["./dist/js/bootstrap.js", "./dist/css/bootstrap.css", "./dist/fonts/*"], "main": [
"./dist/js/bootstrap.js",
"./dist/css/bootstrap.css",
"./dist/fonts/glyphicons-halflings-regular.eot",
"./dist/fonts/glyphicons-halflings-regular.svg",
"./dist/fonts/glyphicons-halflings-regular.ttf",
"./dist/fonts/glyphicons-halflings-regular.woff"
],
"ignore": [ "ignore": [
"**/.*" "**/.*",
"_*",
"docs-assets",
"examples",
"/fonts",
"js/tests",
"CNAME",
"CONTRIBUTING.md",
"Gruntfile.js",
"browserstack.json",
"composer.json",
"package.json",
"*.html"
], ],
"dependencies": { "dependencies": {
"jquery": ">= 1.9.0" "jquery": ">= 1.9.0"
......
{
"username": "--secure--",
"key": "--secure--",
"test_path": "js/tests/index.html",
"browsers": [
{
"browser": "firefox",
"browser_version": "latest",
"os": "OS X",
"os_version": "Mountain Lion"
},
{
"browser": "safari",
"browser_version": "latest",
"os": "OS X",
"os_version": "Mountain Lion"
},
{
"browser": "chrome",
"browser_version": "latest",
"os": "OS X",
"os_version": "Mountain Lion"
},
{
"browser": "firefox",
"browser_version": "latest",
"os": "Windows",
"os_version": "7"
},
{
"browser": "chrome",
"browser_version": "latest",
"os": "Windows",
"os_version": "7"
}
]
}
This diff is collapsed.
...@@ -54,7 +54,8 @@ base_url: "../" ...@@ -54,7 +54,8 @@ base_url: "../"
<p>For improved cross-browser rendering, we use <a href="http://necolas.github.io/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p> <p>For improved cross-browser rendering, we use <a href="http://necolas.github.io/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p>
<h3 id="overview-container">Containers</h3> <h3 id="overview-container">Containers</h3>
<p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>max-width</code> at various media query breakpoints to match our grid system.</p> <p>Easily center a page's contents by wrapping its contents in a <code>.container</code>. Containers set <code>width</code> at various media query breakpoints to match our grid system.</p>
<p>Note that, due to <code>padding</code> and fixed widths, containers are not nestable by default.</p>
{% highlight html %} {% highlight html %}
<div class="container"> <div class="container">
... ...
...@@ -178,13 +179,11 @@ base_url: "../" ...@@ -178,13 +179,11 @@ base_url: "../"
</tr> </tr>
<tr> <tr>
<th>Offsets</th> <th>Offsets</th>
<td colspan="1" class="text-muted">N/A</td> <td colspan="4">Yes</td>
<td colspan="3">Yes</td>
</tr> </tr>
<tr> <tr>
<th>Column ordering</th> <th>Column ordering</th>
<td class="text-muted">N/A</td> <td colspan="4">Yes</td>
<td colspan="3">Yes</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
...@@ -871,7 +870,7 @@ base_url: "../" ...@@ -871,7 +870,7 @@ base_url: "../"
<p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p> <p>Style and content changes for simple variations on a standard <code>&lt;blockquote&gt;</code>.</p>
<h4>Naming a source</h4> <h4>Naming a source</h4>
<p>Add <code>&lt;small&gt;</code> tag for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p> <p>Add <code>&lt;small&gt;</code> tag or <code>.small</code> class for identifying the source. Wrap the name of the source work in <code>&lt;cite&gt;</code>.</p>
<div class="bs-example"> <div class="bs-example">
<blockquote> <blockquote>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
...@@ -1567,7 +1566,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1567,7 +1566,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<h2 id="forms-inline">Inline form</h2> <h2 id="forms-inline">Inline form</h2>
<p>Add <code>.form-inline</code> for left-aligned and inline-block controls for a compact layout.</p> <p>Add <code>.form-inline</code> to your <code>&lt;form&gt;</code> for left-aligned and inline-block controls. <strong>This only applies to forms within viewports that are at least 768px wide.</strong></p>
<div class="bs-callout bs-callout-danger"> <div class="bs-callout bs-callout-danger">
<h4>Requires custom widths</h4> <h4>Requires custom widths</h4>
<p>Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set a width on the form controls used within.</p> <p>Inputs, selects, and textareas are 100% wide by default in Bootstrap. To use the inline form, you'll have to set a width on the form controls used within.</p>
...@@ -1617,7 +1616,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline. ...@@ -1617,7 +1616,7 @@ For example, <code>&lt;section&gt;</code> should be wrapped as inline.
<h2 id="forms-horizontal">Horizontal form</h2> <h2 id="forms-horizontal">Horizontal form</h2>
<p>Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout by adding <code>.form-horizontal</code> to the form. Doing so changes <code>.form-group</code>s to behave as grid rows, so no need for <code>.row</code>.</p> <p>Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout by adding <code>.form-horizontal</code> to the form. Doing so changes <code>.form-group</code>s to behave as grid rows, so no need for <code>.row</code>.</p>
<div class="bs-example"> <div class="bs-example">
<form class="form-horizontal"> <form class="form-horizontal" role="form">
<div class="form-group"> <div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label> <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10"> <div class="col-sm-10">
......
...@@ -399,7 +399,7 @@ base_url: "../" ...@@ -399,7 +399,7 @@ base_url: "../"
<input type="text" class="form-control" placeholder="Georgia, 'Times New Roman', Times, serif" data-var="@font-family-serif"> <input type="text" class="form-control" placeholder="Georgia, 'Times New Roman', Times, serif" data-var="@font-family-serif">
<p class="help-block">Default serif fonts.</p> <p class="help-block">Default serif fonts.</p>
<label>@font-family-monospace</label> <label>@font-family-monospace</label>
<input type="text" class="form-control" placeholder="Monaco, Menlo, Consolas, 'Courier New', monospace" data-var="@font-family-monospace"> <input type="text" class="form-control" placeholder="Menlo, Monaco, Consolas, 'Courier New', monospace" data-var="@font-family-monospace">
<p class="help-block">Default monospace fonts for <code>&lt;code&gt;</code> and <code>&lt;pre&gt;</code>.</p> <p class="help-block">Default monospace fonts for <code>&lt;code&gt;</code> and <code>&lt;pre&gt;</code>.</p>
<h4>Base type styes</h4> <h4>Base type styes</h4>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*! /*!
* Bootstrap v3.0.2 by @fat and @mdo * Bootstrap v3.0.3 (http://getbootstrap.com)
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
* Licensed under http://www.apache.org/licenses/LICENSE-2.0 * Licensed under http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @mdo and @fat.
*/ */
if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") } if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }
/* ======================================================================== /* ========================================================================
* Bootstrap: transition.js v3.0.2 * Bootstrap: transition.js v3.0.3
* http://getbootstrap.com/javascript/#transitions * http://getbootstrap.com/javascript/#transitions
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -66,7 +64,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -66,7 +64,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: alert.js v3.0.2 * Bootstrap: alert.js v3.0.3
* http://getbootstrap.com/javascript/#alerts * http://getbootstrap.com/javascript/#alerts
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -165,7 +163,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -165,7 +163,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: button.js v3.0.2 * Bootstrap: button.js v3.0.3
* http://getbootstrap.com/javascript/#buttons * http://getbootstrap.com/javascript/#buttons
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -220,15 +218,21 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -220,15 +218,21 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
Button.prototype.toggle = function () { Button.prototype.toggle = function () {
var $parent = this.$element.closest('[data-toggle="buttons"]') var $parent = this.$element.closest('[data-toggle="buttons"]')
var changed = true
if ($parent.length) { if ($parent.length) {
var $input = this.$element.find('input') var $input = this.$element.find('input')
.prop('checked', !this.$element.hasClass('active')) if ($input.prop('type') === 'radio') {
.trigger('change') // see if clicking on current one
if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') if ($input.prop('checked') && this.$element.hasClass('active'))
changed = false
else
$parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} }
this.$element.toggleClass('active') if (changed) this.$element.toggleClass('active')
} }
...@@ -275,7 +279,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -275,7 +279,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: carousel.js v3.0.2 * Bootstrap: carousel.js v3.0.3
* http://getbootstrap.com/javascript/#carousel * http://getbootstrap.com/javascript/#carousel
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -345,7 +349,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -345,7 +349,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
if (pos > (this.$items.length - 1) || pos < 0) return if (pos > (this.$items.length - 1) || pos < 0) return
if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
if (activeIndex == pos) return this.pause().cycle() if (activeIndex == pos) return this.pause().cycle()
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
...@@ -397,7 +401,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -397,7 +401,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
if (this.$indicators.length) { if (this.$indicators.length) {
this.$indicators.find('.active').removeClass('active') this.$indicators.find('.active').removeClass('active')
this.$element.one('slid', function () { this.$element.one('slid.bs.carousel', function () {
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
$nextIndicator && $nextIndicator.addClass('active') $nextIndicator && $nextIndicator.addClass('active')
}) })
...@@ -415,7 +419,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -415,7 +419,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
$next.removeClass([type, direction].join(' ')).addClass('active') $next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' ')) $active.removeClass(['active', direction].join(' '))
that.sliding = false that.sliding = false
setTimeout(function () { that.$element.trigger('slid') }, 0) setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
}) })
.emulateTransitionEnd(600) .emulateTransitionEnd(600)
} else { } else {
...@@ -424,7 +428,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -424,7 +428,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
$active.removeClass('active') $active.removeClass('active')
$next.addClass('active') $next.addClass('active')
this.sliding = false this.sliding = false
this.$element.trigger('slid') this.$element.trigger('slid.bs.carousel')
} }
isCycling && this.cycle() isCycling && this.cycle()
...@@ -493,7 +497,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -493,7 +497,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: collapse.js v3.0.2 * Bootstrap: collapse.js v3.0.3
* http://getbootstrap.com/javascript/#collapse * http://getbootstrap.com/javascript/#collapse
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -673,7 +677,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -673,7 +677,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: dropdown.js v3.0.2 * Bootstrap: dropdown.js v3.0.3
* http://getbootstrap.com/javascript/#dropdowns * http://getbootstrap.com/javascript/#dropdowns
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -700,7 +704,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -700,7 +704,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
var backdrop = '.dropdown-backdrop' var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle=dropdown]' var toggle = '[data-toggle=dropdown]'
var Dropdown = function (element) { var Dropdown = function (element) {
var $el = $(element).on('click.bs.dropdown', this.toggle) $(element).on('click.bs.dropdown', this.toggle)
} }
Dropdown.prototype.toggle = function (e) { Dropdown.prototype.toggle = function (e) {
...@@ -715,7 +719,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -715,7 +719,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
if (!isActive) { if (!isActive) {
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
// if mobile we we use a backdrop because click events don't delegate // if mobile we use a backdrop because click events don't delegate
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
} }
...@@ -797,9 +801,9 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -797,9 +801,9 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
$.fn.dropdown = function (option) { $.fn.dropdown = function (option) {
return this.each(function () { return this.each(function () {
var $this = $(this) var $this = $(this)
var data = $this.data('dropdown') var data = $this.data('bs.dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this))) if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this) if (typeof option == 'string') data[option].call($this)
}) })
} }
...@@ -828,7 +832,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -828,7 +832,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: modal.js v3.0.2 * Bootstrap: modal.js v3.0.3
* http://getbootstrap.com/javascript/#modals * http://getbootstrap.com/javascript/#modals
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -1075,7 +1079,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -1075,7 +1079,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: tooltip.js v3.0.2 * Bootstrap: tooltip.js v3.0.3
* http://getbootstrap.com/javascript/#tooltip * http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame * Inspired by the original jQuery.tipsy by Jason Frame
* ======================================================================== * ========================================================================
...@@ -1462,7 +1466,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -1462,7 +1466,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: popover.js v3.0.2 * Bootstrap: popover.js v3.0.3
* http://getbootstrap.com/javascript/#popovers * http://getbootstrap.com/javascript/#popovers
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -1580,7 +1584,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -1580,7 +1584,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: scrollspy.js v3.0.2 * Bootstrap: scrollspy.js v3.0.3
* http://getbootstrap.com/javascript/#scrollspy * http://getbootstrap.com/javascript/#scrollspy
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -1694,7 +1698,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -1694,7 +1698,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
.addClass('active') .addClass('active')
} }
active.trigger('activate') active.trigger('activate.bs.scrollspy')
} }
...@@ -1739,7 +1743,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -1739,7 +1743,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: tab.js v3.0.2 * Bootstrap: tab.js v3.0.3
* http://getbootstrap.com/javascript/#tabs * http://getbootstrap.com/javascript/#tabs
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -1875,7 +1879,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery" ...@@ -1875,7 +1879,7 @@ if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery"
}(jQuery); }(jQuery);
/* ======================================================================== /* ========================================================================
* Bootstrap: affix.js v3.0.2 * Bootstrap: affix.js v3.0.3
* http://getbootstrap.com/javascript/#affix * http://getbootstrap.com/javascript/#affix
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
This diff is collapsed.
...@@ -586,14 +586,14 @@ h1[id] { ...@@ -586,14 +586,14 @@ h1[id] {
border-color: #faebcc; border-color: #faebcc;
} }
.bs-callout-warning h4 { .bs-callout-warning h4 {
color: #c09853; color: #8a6d3b;
} }
.bs-callout-info { .bs-callout-info {
background-color: #f4f8fa; background-color: #f4f8fa;
border-color: #bce8f1; border-color: #bce8f1;
} }
.bs-callout-info h4 { .bs-callout-info h4 {
color: #3a87ad; color: #34789a;
} }
...@@ -1062,6 +1062,7 @@ h1[id] { ...@@ -1062,6 +1062,7 @@ h1[id] {
.bs-glyphicons .glyphicon-class { .bs-glyphicons .glyphicon-class {
display: block; display: block;
text-align: center; text-align: center;
word-wrap: break-word; /* Help out IE10+ with class names */
} }
.bs-glyphicons li:hover { .bs-glyphicons li:hover {
background-color: rgba(86,61,124,.1); background-color: rgba(86,61,124,.1);
......
...@@ -100,4 +100,4 @@ ...@@ -100,4 +100,4 @@
}) })
}) })
}(window.jQuery) }(jQuery)
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
window.onload = function () { // wait for load in a dumb way because B-0 window.onload = function () { // wait for load in a dumb way because B-0
var cw = '/*!\n * Bootstrap v3.0.2\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world @twitter by @mdo and @fat.\n */\n\n' var cw = '/*!\n * Bootstrap v3.0.3\n *\n * Copyright 2013 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Designed and built with all the love in the world @twitter by @mdo and @fat.\n */\n\n'
function showError(msg, err) { function showError(msg, err) {
$('<div id="bsCustomizerAlert" class="bs-customizer-alert">\ $('<div id="bsCustomizerAlert" class="bs-customizer-alert">\
...@@ -231,7 +231,7 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -231,7 +231,7 @@ window.onload = function () { // wait for load in a dumb way because B-0
} }
result = { result = {
'bootstrap.css' : cw + tree.toCSS(), 'bootstrap.css' : cw + tree.toCSS(),
'bootstrap.min.css' : cw + tree.toCSS({ compress: true }) 'bootstrap.min.css' : cw + tree.toCSS({ compress: true }).replace(/\n/g, '') // FIXME: remove newline hack once less.js upgraded to v1.4
} }
}) })
} catch (err) { } catch (err) {
......
This diff is collapsed.
This diff is collapsed.
...@@ -16,7 +16,9 @@ Usage: ...@@ -16,7 +16,9 @@ Usage:
base64zip = zip.generate(); base64zip = zip.generate();
**/ **/
"use strict"; // We use strict, but it should not be placed outside of a function because
// the environment is shared inside the browser.
// "use strict";
/** /**
* Representation a of zip file in js * Representation a of zip file in js
...@@ -93,8 +95,8 @@ JSZip.support = { ...@@ -93,8 +95,8 @@ JSZip.support = {
catch(e) {} catch(e) {}
try { try {
var builder = new (window.BlobBuilder || window.WebKitBlobBuilder || var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
window.MozBlobBuilder || window.MSBlobBuilder)(); var builder = new BlobBuilder();
builder.append(buffer); builder.append(buffer);
return builder.getBlob('application/zip').size === 0; return builder.getBlob('application/zip').size === 0;
} }
...@@ -161,7 +163,7 @@ JSZip.prototype = (function () { ...@@ -161,7 +163,7 @@ JSZip.prototype = (function () {
return file.asBinary(); return file.asBinary();
} }
return result; return result;
} };
/** /**
* Transform this._data into a string. * Transform this._data into a string.
...@@ -287,9 +289,11 @@ JSZip.prototype = (function () { ...@@ -287,9 +289,11 @@ JSZip.prototype = (function () {
*/ */
var prepareFileAttrs = function (o) { var prepareFileAttrs = function (o) {
o = o || {}; o = o || {};
/*jshint -W041 */
if (o.base64 === true && o.binary == null) { if (o.base64 === true && o.binary == null) {
o.binary = true; o.binary = true;
} }
/*jshint +W041 */
o = extend(o, JSZip.defaults); o = extend(o, JSZip.defaults);
o.date = o.date || new Date(); o.date = o.date || new Date();
if (o.compression !== null) o.compression = o.compression.toUpperCase(); if (o.compression !== null) o.compression = o.compression.toUpperCase();
...@@ -341,7 +345,9 @@ JSZip.prototype = (function () { ...@@ -341,7 +345,9 @@ JSZip.prototype = (function () {
} }
} }
return this.files[name] = new ZipObject(name, data, o); var object = new ZipObject(name, data, o);
this.files[name] = object;
return object;
}; };
...@@ -399,7 +405,7 @@ JSZip.prototype = (function () { ...@@ -399,7 +405,7 @@ JSZip.prototype = (function () {
} else if (file._data.compressionMethod === compression.magic) { } else if (file._data.compressionMethod === compression.magic) {
result.compressedContent = file._data.getCompressedContent(); result.compressedContent = file._data.getCompressedContent();
} else { } else {
content = file._data.getContent() content = file._data.getContent();
// need to decompress / recompress // need to decompress / recompress
result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content)); result.compressedContent = compression.compress(JSZip.utils.transformTo(compression.compressInputType, content));
} }
...@@ -756,8 +762,9 @@ JSZip.prototype = (function () { ...@@ -756,8 +762,9 @@ JSZip.prototype = (function () {
case "nodebuffer" : case "nodebuffer" :
writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length); writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);
break; break;
case "base64" : // case "base64" :
default : // case "string" : // case "string" :
default :
writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length); writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);
break; break;
} }
...@@ -1066,8 +1073,8 @@ JSZip.compressions = { ...@@ -1066,8 +1073,8 @@ JSZip.compressions = {
try { try {
// deprecated, browser only, old way // deprecated, browser only, old way
var builder = new (window.BlobBuilder || window.WebKitBlobBuilder || var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
window.MozBlobBuilder || window.MSBlobBuilder)(); var builder = new BlobBuilder();
builder.append(buffer); builder.append(buffer);
return builder.getBlob('application/zip'); return builder.getBlob('application/zip');
} }
...@@ -1095,7 +1102,7 @@ JSZip.compressions = { ...@@ -1095,7 +1102,7 @@ JSZip.compressions = {
*/ */
function identity(input) { function identity(input) {
return input; return input;
}; }
/** /**
* Fill in an array with a string. * Fill in an array with a string.
...@@ -1108,7 +1115,7 @@ JSZip.compressions = { ...@@ -1108,7 +1115,7 @@ JSZip.compressions = {
array[i] = str.charCodeAt(i) & 0xFF; array[i] = str.charCodeAt(i) & 0xFF;
} }
return array; return array;
}; }
/** /**
* Transform an array-like object to a string. * Transform an array-like object to a string.
...@@ -1165,7 +1172,7 @@ JSZip.compressions = { ...@@ -1165,7 +1172,7 @@ JSZip.compressions = {
} }
} }
return result.join(""); return result.join("");
}; }
/** /**
* Copy the data from an array-like to an other array-like. * Copy the data from an array-like to an other array-like.
...@@ -1178,7 +1185,7 @@ JSZip.compressions = { ...@@ -1178,7 +1185,7 @@ JSZip.compressions = {
arrayTo[i] = arrayFrom[i]; arrayTo[i] = arrayFrom[i];
} }
return arrayTo; return arrayTo;
}; }
// a matrix containing functions to transform everything into everything. // a matrix containing functions to transform everything into everything.
var transform = {}; var transform = {};
......
This diff is collapsed.
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
<a class="navbar-brand" href="#">Project name</a> <a class="navbar-brand" href="#">Project name</a>
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
<form class="navbar-form navbar-right"> <form class="navbar-form navbar-right" role="form">
<div class="form-group"> <div class="form-group">
<input type="text" placeholder="Email" class="form-control"> <input type="text" placeholder="Email" class="form-control">
</div> </div>
......
...@@ -52,7 +52,8 @@ ...@@ -52,7 +52,8 @@
<!-- Example row of columns --> <!-- Example row of columns -->
<div class="row"> <div class="row">
<div class="col-lg-4"> <div class="col-lg-4">
<h2>Heading</h2> <h2>Safari bug warning!</h2>
<p class="text-danger">Safari exhibits a bug in which resizing your browser horizontally causes rendering errors in the justified nav that are cleared upon refreshing.</p>
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
<p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p> <p><a class="btn btn-primary" href="#" role="button">View details &raquo;</a></p>
</div> </div>
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
body { body {
padding-top: 70px; padding-top: 70px;
padding-bottom: 30px; padding-bottom: 30px;
min-width: 970px;
} }
/* Finesse the page header spacing */ /* Finesse the page header spacing */
...@@ -63,6 +64,9 @@ body { ...@@ -63,6 +64,9 @@ body {
.navbar-toggle { .navbar-toggle {
display: none; display: none;
} }
.navbar-collapse {
border-top: 0;
}
.navbar-brand { .navbar-brand {
margin-left: -15px; margin-left: -15px;
...@@ -86,7 +90,7 @@ body { ...@@ -86,7 +90,7 @@ body {
} }
/* Undo custom dropdowns */ /* Undo custom dropdowns */
.navbar .open .dropdown-menu { .navbar .navbar-nav .open .dropdown-menu {
position: absolute; position: absolute;
float: left; float: left;
background-color: #fff; background-color: #fff;
...@@ -97,20 +101,20 @@ body { ...@@ -97,20 +101,20 @@ body {
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
} }
.navbar .open .dropdown-menu > li > a { .navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #333; color: #333;
} }
.navbar .open .dropdown-menu > li > a:hover, .navbar .navbar-nav .open .dropdown-menu > li > a:hover,
.navbar .open .dropdown-menu > li > a:focus, .navbar .navbar-nav .open .dropdown-menu > li > a:focus,
.navbar .open .dropdown-menu > .active > a, .navbar .navbar-nav .open .dropdown-menu > .active > a,
.navbar .open .dropdown-menu > .active > a:hover, .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .open .dropdown-menu > .active > a:focus { .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff !important; color: #fff !important;
background-color: #428bca !important; background-color: #428bca !important;
} }
.navbar .open .dropdown-menu > .disabled > a, .navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .open .dropdown-menu > .disabled > a:hover, .navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
.navbar .open .dropdown-menu > .disabled > a:focus { .navbar .navbar-nav .open .dropdown-menu > .disabled > a:focus {
color: #999 !important; color: #999 !important;
background-color: transparent !important; background-color: transparent !important;
} }
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
* Style tweaks * Style tweaks
* -------------------------------------------------- * --------------------------------------------------
*/ */
html { html,
body {
overflow-x: hidden; /* Prevent scroll on narrow devices */ overflow-x: hidden; /* Prevent scroll on narrow devices */
} }
body { body {
......
examples/screenshots/jumbotron.jpg

76.1 KB | W: | H:

examples/screenshots/jumbotron.jpg

119 KB | W: | H:

examples/screenshots/jumbotron.jpg
examples/screenshots/jumbotron.jpg
examples/screenshots/jumbotron.jpg
examples/screenshots/jumbotron.jpg
  • 2-up
  • Swipe
  • Onion skin
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
<div class="container"> <div class="container">
<form class="form-signin"> <form class="form-signin" role="form">
<h2 class="form-signin-heading">Please sign in</h2> <h2 class="form-signin-heading">Please sign in</h2>
<input type="text" class="form-control" placeholder="Email address" required autofocus> <input type="text" class="form-control" placeholder="Email address" required autofocus>
<input type="password" class="form-control" placeholder="Password" required> <input type="password" class="form-control" placeholder="Password" required>
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
<div id="footer"> <div id="footer">
<div class="container"> <div class="container">
<p class="text-muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> <p class="text-muted">Place sticky footer content here.</p>
</div> </div>
</div> </div>
......
...@@ -31,7 +31,7 @@ body { ...@@ -31,7 +31,7 @@ body {
#wrap > .container { #wrap > .container {
padding: 60px 15px 0; padding: 60px 15px 0;
} }
.container .credit { .container .text-muted {
margin: 20px 0; margin: 20px 0;
} }
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<div id="footer"> <div id="footer">
<div class="container"> <div class="container">
<p class="text-muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> <p class="text-muted">Place sticky footer content here.</p>
</div> </div>
</div> </div>
......
...@@ -33,6 +33,6 @@ body { ...@@ -33,6 +33,6 @@ body {
max-width: 680px; max-width: 680px;
padding: 0 15px; padding: 0 15px;
} }
.container .credit { .container .text-muted {
margin: 20px 0; margin: 20px 0;
} }
...@@ -62,9 +62,15 @@ base_url: "../" ...@@ -62,9 +62,15 @@ base_url: "../"
<div class="page-header"> <div class="page-header">
<h1 id="whats-included">What's included</h1> <h1 id="whats-included">What's included</h1>
</div> </div>
<p class="lead">Within the download you'll find the following directories and files, logically grouping common resources and providing both compiled and minified variations.</p> <p class="lead">Bootstrap is downloadable in two forms, within which you'll find the following directories and files, logically grouping common resources and providing both compiled and minified variations.</p>
<p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p>
<div class="bs-callout bs-callout-warning" id="jquery-required">
<h4>jQuery required</h4>
<p>Please note that <strong>all JavaScript plugins require jQuery</strong> to be included, as shown in the <a href="#template">starter template</a>. <a href="{{ site.repo }}/blob/v{{ site.current_version }}/bower.json">Consult our <code>bower.json</code></a> to see which versions of jQuery are supported.</p>
</div>
<h2 id="whats-included-precompiled">Precompiled Bootstrap</h2>
<p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p>
<!-- NOTE: This info is intentionally duplicated in the README. <!-- NOTE: This info is intentionally duplicated in the README.
Copy any changes made here over to the README too. --> Copy any changes made here over to the README too. -->
{% highlight bash %} {% highlight bash %}
...@@ -85,11 +91,24 @@ bootstrap/ ...@@ -85,11 +91,24 @@ bootstrap/
{% endhighlight %} {% endhighlight %}
<p>This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (<code>bootstrap.*</code>), as well as compiled and minified CSS and JS (<code>bootstrap.min.*</code>). Fonts from Glyphicons are included, as is the optional Bootstrap theme.</p> <p>This is the most basic form of Bootstrap: precompiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (<code>bootstrap.*</code>), as well as compiled and minified CSS and JS (<code>bootstrap.min.*</code>). Fonts from Glyphicons are included, as is the optional Bootstrap theme.</p>
<div class="bs-callout bs-callout-danger" id="jquery-required">
<h4>jQuery required</h4> <h2 id="whats-included-source">Bootstrap source code</h2>
<p>Please note that <strong>all JavaScript plugins require jQuery</strong> to be included, as shown in the <a href="#template">starter template</a>. <a href="{{ site.repo }}/blob/v{{ site.current_version }}/bower.json">Consult our <code>bower.json</code></a> to see which versions of jQuery are supported.</p> <p>The Bootstrap source code download includes the precompiled CSS, JavaScript, and font assets, along with source LESS, JavaScript, and documentation. More specifically, it includes the following and more:</p>
</div> {% highlight bash %}
bootstrap/
├── less/
├── js/
├── fonts/
├── dist/
│ ├── css/
│ ├── js/
│ └── fonts/
├── docs-assets/
├── examples/
└── *.html
{% endhighlight %}
</div> </div>
<p>The <code>less/</code>, <code>js/</code>, and <code>fonts/</code> are the source code for our CSS, JS, and icon fonts (respectively). The <code>dist/</code> folder includes everything listed in the precompiled download section above. <code>docs-assets/</code>, <code>examples/</code>, and all <code>*.html</code> files are for our documentation. Beyond that, any other included file provides support for packages, license information, and development.</p>
<!-- Template <!-- Template
...@@ -379,7 +398,7 @@ bootstrap/ ...@@ -379,7 +398,7 @@ bootstrap/
</tr> </tr>
<tr> <tr>
<td><code>.visible-desktop</code></td> <td><code>.visible-desktop</code></td>
<td><code>.visible-md</code></td> <td>Split into <code>.visible-md .visible-lg</code></td>
</tr> </tr>
<tr> <tr>
<td><code>.hidden-phone</code></td> <td><code>.hidden-phone</code></td>
...@@ -391,7 +410,7 @@ bootstrap/ ...@@ -391,7 +410,7 @@ bootstrap/
</tr> </tr>
<tr> <tr>
<td><code>.hidden-desktop</code></td> <td><code>.hidden-desktop</code></td>
<td><code>.hidden-md</code></td> <td>Split into <code>.hidden-md .hidden-lg</code></td>
</tr> </tr>
<tr> <tr>
<td><code>.input-small</code></td> <td><code>.input-small</code></td>
...@@ -405,6 +424,10 @@ bootstrap/ ...@@ -405,6 +424,10 @@ bootstrap/
<td><code>.control-group</code></td> <td><code>.control-group</code></td>
<td><code>.form-group</code></td> <td><code>.form-group</code></td>
</tr> </tr>
<tr>
<td><code>.control-group.warning .control-group.error .control-group.success</code></td>
<td><code>.form-group.has-*</code></td>
</tr>
<tr> <tr>
<td><code>.checkbox.inline</code> <code>.radio.inline</code></td> <td><code>.checkbox.inline</code> <code>.radio.inline</code></td>
<td><code>.checkbox-inline</code> <code>.radio-inline</code></td> <td><code>.checkbox-inline</code> <code>.radio-inline</code></td>
...@@ -433,6 +456,14 @@ bootstrap/ ...@@ -433,6 +456,14 @@ bootstrap/
<td><code>.muted</code></td> <td><code>.muted</code></td>
<td><code>.text-muted</code></td> <td><code>.text-muted</code></td>
</tr> </tr>
<tr>
<td><code>.label</code></td>
<td><code>.label .label-default</code></td>
</tr>
<tr>
<td><code>.label-important</code></td>
<td><code>.label-danger</code></td>
</tr>
<tr> <tr>
<td><code>.text-error</code></td> <td><code>.text-error</code></td>
<td><code>.text-danger</code></td> <td><code>.text-danger</code></td>
...@@ -611,6 +642,11 @@ bootstrap/ ...@@ -611,6 +642,11 @@ bootstrap/
<td><code>.form-search</code></td> <td><code>.form-search</code></td>
<td class="text-muted">N/A</td> <td class="text-muted">N/A</td>
</tr> </tr>
<tr>
<td>Form group with info</td>
<td><code>.control-group.info</code></td>
<td class="text-muted">N/A</td>
</tr>
<tr> <tr>
<td>Fluid container</td> <td>Fluid container</td>
<td><code>.container-fluid</code></td> <td><code>.container-fluid</code></td>
...@@ -674,7 +710,7 @@ bootstrap/ ...@@ -674,7 +710,7 @@ bootstrap/
<li>Typeahead has been dropped, in favor of using <a href="http://twitter.github.io/typeahead.js/">Twitter Typeahead</a>.</li> <li>Typeahead has been dropped, in favor of using <a href="http://twitter.github.io/typeahead.js/">Twitter Typeahead</a>.</li>
<li>Modal markup has changed significantly. The <code>.modal-header</code>, <code>.modal-body</code>, and <code>.modal-footer</code> sections are now wrapped in <code>.modal-content</code> and <code>.modal-dialog</code> for better mobile styling and behavior.</li> <li>Modal markup has changed significantly. The <code>.modal-header</code>, <code>.modal-body</code>, and <code>.modal-footer</code> sections are now wrapped in <code>.modal-content</code> and <code>.modal-dialog</code> for better mobile styling and behavior.</li>
<li>The HTML loaded by the <code>remote</code> modal option is now injected into the <code>.modal</code> instead of into the <code>.modal-body</code>. This allows you to also easily vary the header and footer of the modal, not just the modal body.</li> <li>The HTML loaded by the <code>remote</code> modal option is now injected into the <code>.modal</code> instead of into the <code>.modal-body</code>. This allows you to also easily vary the header and footer of the modal, not just the modal body.</li>
<li>JavaScript events are namespaced. For example, to handle the modal "show" event, use <code>'show.bs.modal'</code>. For tabs "shown" use <code>'shown.bs.tab'</code>, etc..</li> <li>JavaScript events are namespaced. For example, to handle the modal "show" event, use <code>'show.bs.modal'</code>. For tabs "shown" use <code>'shown.bs.tab'</code>, etc.</li>
</ul> </ul>
<p>For more information on upgrading to v3.0, and code snippets from the community, see <a href="http://bootply.com/">Bootply</a>.</p> <p>For more information on upgrading to v3.0, and code snippets from the community, see <a href="http://bootply.com/">Bootply</a>.</p>
</div> </div>
......
...@@ -43,14 +43,14 @@ $(document).off('.alert.data-api') ...@@ -43,14 +43,14 @@ $(document).off('.alert.data-api')
<h3 id="js-programmatic-api">Programmatic API</h3> <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> <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 %} {% highlight js %}
$(".btn.danger").button("toggle").addClass("fat") $('.btn.danger').button('toggle').addClass('fat')
{% endhighlight %} {% 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> <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 %} {% highlight js %}
$("#myModal").modal() // initialized with defaults $('#myModal').modal() // initialized with defaults
$("#myModal").modal({ keyboard: false }) // initialized with no keyboard $('#myModal').modal({ keyboard: false }) // initialized with no keyboard
$("#myModal").modal('show') // initializes and invokes show immediately</p> $('#myModal').modal('show') // initializes and invokes show immediately</p>
{% endhighlight %} {% 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> <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>
...@@ -304,15 +304,15 @@ $('#myModal').modal({ ...@@ -304,15 +304,15 @@ $('#myModal').modal({
{% endhighlight %} {% endhighlight %}
<h4>.modal('toggle')</h4> <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 %} {% highlight js %}$('#myModal').modal('toggle'){% endhighlight %}
<h4>.modal('show')</h4> <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 %} {% highlight js %}$('#myModal').modal('show'){% endhighlight %}
<h4>.modal('hide')</h4> <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 %} {% highlight js %}$('#myModal').modal('hide'){% endhighlight %}
<h3>Events</h3> <h3>Events</h3>
...@@ -328,11 +328,11 @@ $('#myModal').modal({ ...@@ -328,11 +328,11 @@ $('#myModal').modal({
<tbody> <tbody>
<tr> <tr>
<td>show.bs.modal</td> <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>
<tr> <tr>
<td>shown.bs.modal</td> <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>
<tr> <tr>
<td>hide.bs.modal</td> <td>hide.bs.modal</td>
...@@ -346,8 +346,8 @@ $('#myModal').modal({ ...@@ -346,8 +346,8 @@ $('#myModal').modal({
</table> </table>
</div><!-- /.table-responsive --> </div><!-- /.table-responsive -->
{% highlight js %} {% highlight js %}
$('#myModal').on('hidden.bs.modal', function () { $('#myModal').on('hidden.bs.modal', function (e) {
// do something // do something...
}) })
{% endhighlight %} {% endhighlight %}
</div> </div>
...@@ -529,6 +529,7 @@ $('#myDropdown').on('show.bs.dropdown', function () { ...@@ -529,6 +529,7 @@ $('#myDropdown').on('show.bs.dropdown', function () {
{% endhighlight %} {% endhighlight %}
</div> </div>
<!-- ScrollSpy <!-- ScrollSpy
================================================== --> ================================================== -->
<div class="bs-docs-section"> <div class="bs-docs-section">
...@@ -588,7 +589,13 @@ $('#myDropdown').on('show.bs.dropdown', function () { ...@@ -588,7 +589,13 @@ $('#myDropdown').on('show.bs.dropdown', function () {
<h3>Via data attributes</h3> <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> <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 %} {% 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> </body>
{% endhighlight %} {% endhighlight %}
...@@ -596,7 +603,7 @@ $('#myDropdown').on('show.bs.dropdown', function () { ...@@ -596,7 +603,7 @@ $('#myDropdown').on('show.bs.dropdown', function () {
<h3>Via JavaScript</h3> <h3>Via JavaScript</h3>
<p>Call the scrollspy via JavaScript:</p> <p>Call the scrollspy via JavaScript:</p>
{% highlight js %} {% highlight js %}
$('body').scrollspy({ target: '#navbar-example' }) $('body').scrollspy({ target: '.navbar-example' })
{% endhighlight %} {% endhighlight %}
<div class="bs-callout bs-callout-danger"> <div class="bs-callout bs-callout-danger">
...@@ -1408,7 +1415,7 @@ $('#my-alert').bind('closed.bs.alert', function () { ...@@ -1408,7 +1415,7 @@ $('#my-alert').bind('closed.bs.alert', function () {
<h2 id="buttons-usage">Usage</h2> <h2 id="buttons-usage">Usage</h2>
<p>Enable buttons via JavaScript:</p> <p>Enable buttons via JavaScript:</p>
{% highlight js %} {% highlight js %}
$('.btn-group').button() $('.btn').button()
{% endhighlight %} {% endhighlight %}
<h3>Markup</h3> <h3>Markup</h3>
...@@ -1593,7 +1600,7 @@ $('.btn-group').button() ...@@ -1593,7 +1600,7 @@ $('.btn-group').button()
<h3>Via JavaScript</h3> <h3>Via JavaScript</h3>
<p>Enable manually with:</p> <p>Enable manually with:</p>
{% highlight js %} {% highlight js %}
$(".collapse").collapse() $('.collapse').collapse()
{% endhighlight %} {% endhighlight %}
<h3>Options</h3> <h3>Options</h3>
...@@ -1926,22 +1933,27 @@ $('#myCarousel').on('slide.bs.carousel', function () { ...@@ -1926,22 +1933,27 @@ $('#myCarousel').on('slide.bs.carousel', function () {
<hr class="bs-docs-separator"> <hr class="bs-docs-separator">
<h2 id="affix-usage">Usage</h2> <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 elemtn 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> <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 %} {% 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 %} {% 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> <h3>Via JavaScript</h3>
<p>Call the affix plugin via JavaScript:</p> <p>Call the affix plugin via JavaScript:</p>
{% highlight js %} {% highlight js %}
......
/* ======================================================================== /* ========================================================================
* Bootstrap: affix.js v3.0.2 * Bootstrap: affix.js v3.0.3
* http://getbootstrap.com/javascript/#affix * http://getbootstrap.com/javascript/#affix
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
/* ======================================================================== /* ========================================================================
* Bootstrap: alert.js v3.0.2 * Bootstrap: alert.js v3.0.3
* http://getbootstrap.com/javascript/#alerts * http://getbootstrap.com/javascript/#alerts
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
/* ======================================================================== /* ========================================================================
* Bootstrap: button.js v3.0.2 * Bootstrap: button.js v3.0.3
* http://getbootstrap.com/javascript/#buttons * http://getbootstrap.com/javascript/#buttons
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -54,15 +54,21 @@ ...@@ -54,15 +54,21 @@
Button.prototype.toggle = function () { Button.prototype.toggle = function () {
var $parent = this.$element.closest('[data-toggle="buttons"]') var $parent = this.$element.closest('[data-toggle="buttons"]')
var changed = true
if ($parent.length) { if ($parent.length) {
var $input = this.$element.find('input') var $input = this.$element.find('input')
.prop('checked', !this.$element.hasClass('active')) if ($input.prop('type') === 'radio') {
.trigger('change') // see if clicking on current one
if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') if ($input.prop('checked') && this.$element.hasClass('active'))
changed = false
else
$parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} }
this.$element.toggleClass('active') if (changed) this.$element.toggleClass('active')
} }
......
/* ======================================================================== /* ========================================================================
* Bootstrap: carousel.js v3.0.2 * Bootstrap: carousel.js v3.0.3
* http://getbootstrap.com/javascript/#carousel * http://getbootstrap.com/javascript/#carousel
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
if (pos > (this.$items.length - 1) || pos < 0) return if (pos > (this.$items.length - 1) || pos < 0) return
if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) })
if (activeIndex == pos) return this.pause().cycle() if (activeIndex == pos) return this.pause().cycle()
return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
if (this.$indicators.length) { if (this.$indicators.length) {
this.$indicators.find('.active').removeClass('active') this.$indicators.find('.active').removeClass('active')
this.$element.one('slid', function () { this.$element.one('slid.bs.carousel', function () {
var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
$nextIndicator && $nextIndicator.addClass('active') $nextIndicator && $nextIndicator.addClass('active')
}) })
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
$next.removeClass([type, direction].join(' ')).addClass('active') $next.removeClass([type, direction].join(' ')).addClass('active')
$active.removeClass(['active', direction].join(' ')) $active.removeClass(['active', direction].join(' '))
that.sliding = false that.sliding = false
setTimeout(function () { that.$element.trigger('slid') }, 0) setTimeout(function () { that.$element.trigger('slid.bs.carousel') }, 0)
}) })
.emulateTransitionEnd(600) .emulateTransitionEnd(600)
} else { } else {
...@@ -148,7 +148,7 @@ ...@@ -148,7 +148,7 @@
$active.removeClass('active') $active.removeClass('active')
$next.addClass('active') $next.addClass('active')
this.sliding = false this.sliding = false
this.$element.trigger('slid') this.$element.trigger('slid.bs.carousel')
} }
isCycling && this.cycle() isCycling && this.cycle()
......
/* ======================================================================== /* ========================================================================
* Bootstrap: collapse.js v3.0.2 * Bootstrap: collapse.js v3.0.3
* http://getbootstrap.com/javascript/#collapse * http://getbootstrap.com/javascript/#collapse
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
/* ======================================================================== /* ========================================================================
* Bootstrap: dropdown.js v3.0.2 * Bootstrap: dropdown.js v3.0.3
* http://getbootstrap.com/javascript/#dropdowns * http://getbootstrap.com/javascript/#dropdowns
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
var backdrop = '.dropdown-backdrop' var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle=dropdown]' var toggle = '[data-toggle=dropdown]'
var Dropdown = function (element) { var Dropdown = function (element) {
var $el = $(element).on('click.bs.dropdown', this.toggle) $(element).on('click.bs.dropdown', this.toggle)
} }
Dropdown.prototype.toggle = function (e) { Dropdown.prototype.toggle = function (e) {
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
if (!isActive) { if (!isActive) {
if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
// if mobile we we use a backdrop because click events don't delegate // if mobile we use a backdrop because click events don't delegate
$('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus) $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
} }
...@@ -123,9 +123,9 @@ ...@@ -123,9 +123,9 @@
$.fn.dropdown = function (option) { $.fn.dropdown = function (option) {
return this.each(function () { return this.each(function () {
var $this = $(this) var $this = $(this)
var data = $this.data('dropdown') var data = $this.data('bs.dropdown')
if (!data) $this.data('dropdown', (data = new Dropdown(this))) if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
if (typeof option == 'string') data[option].call($this) if (typeof option == 'string') data[option].call($this)
}) })
} }
......
/* ======================================================================== /* ========================================================================
* Bootstrap: modal.js v3.0.2 * Bootstrap: modal.js v3.0.3
* http://getbootstrap.com/javascript/#modals * http://getbootstrap.com/javascript/#modals
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
/* ======================================================================== /* ========================================================================
* Bootstrap: popover.js v3.0.2 * Bootstrap: popover.js v3.0.3
* http://getbootstrap.com/javascript/#popovers * http://getbootstrap.com/javascript/#popovers
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
/* ======================================================================== /* ========================================================================
* Bootstrap: scrollspy.js v3.0.2 * Bootstrap: scrollspy.js v3.0.3
* http://getbootstrap.com/javascript/#scrollspy * http://getbootstrap.com/javascript/#scrollspy
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
.addClass('active') .addClass('active')
} }
active.trigger('activate') active.trigger('activate.bs.scrollspy')
} }
......
/* ======================================================================== /* ========================================================================
* Bootstrap: tab.js v3.0.2 * Bootstrap: tab.js v3.0.3
* http://getbootstrap.com/javascript/#tabs * http://getbootstrap.com/javascript/#tabs
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
...@@ -111,6 +111,12 @@ $(function () { ...@@ -111,6 +111,12 @@ $(function () {
ok(!btn1.find('input').prop('checked'), 'btn1 is checked') ok(!btn1.find('input').prop('checked'), 'btn1 is checked')
ok(btn2.hasClass('active'), 'btn2 has active class') ok(btn2.hasClass('active'), 'btn2 has active class')
ok(btn2.find('input').prop('checked'), 'btn2 is checked') ok(btn2.find('input').prop('checked'), 'btn2 is checked')
btn2.find('input').click() /* clicking an already checked radio should not un-check it */
ok(!btn1.hasClass('active'), 'btn1 does not have active class')
ok(!btn1.find('input').prop('checked'), 'btn1 is checked')
ok(btn2.hasClass('active'), 'btn2 has active class')
ok(btn2.find('input').prop('checked'), 'btn2 is checked')
}) })
}) })
/* ======================================================================== /* ========================================================================
* Bootstrap: tooltip.js v3.0.2 * Bootstrap: tooltip.js v3.0.3
* http://getbootstrap.com/javascript/#tooltip * http://getbootstrap.com/javascript/#tooltip
* Inspired by the original jQuery.tipsy by Jason Frame * Inspired by the original jQuery.tipsy by Jason Frame
* ======================================================================== * ========================================================================
......
/* ======================================================================== /* ========================================================================
* Bootstrap: transition.js v3.0.2 * Bootstrap: transition.js v3.0.3
* http://getbootstrap.com/javascript/#transitions * http://getbootstrap.com/javascript/#transitions
* ======================================================================== * ========================================================================
* Copyright 2013 Twitter, Inc. * Copyright 2013 Twitter, Inc.
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
// Hover/focus state // Hover/focus state
&:hover, &:hover,
&:focus { &:focus {
outline: none;
color: @carousel-control-color; color: @carousel-control-color;
text-decoration: none; text-decoration: none;
.opacity(.9); .opacity(.9);
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
// Undo padding and float of grid classes // Undo padding and float of grid classes
&.col { &[class*="col-"] {
float: none; float: none;
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment