diff --git a/js/.babelrc b/.babelrc
similarity index 72%
rename from js/.babelrc
rename to .babelrc
index ffc5e3b799..eb52c30ac1 100644
--- a/js/.babelrc
+++ b/.babelrc
@@ -3,8 +3,8 @@
[
"es2015",
{
- "modules": false,
- "loose": true
+ "loose": true,
+ "modules": false
}
]
],
diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md
similarity index 96%
rename from CONTRIBUTING.md
rename to .github/CONTRIBUTING.md
index a0745d797f..6fc088d6bd 100644
--- a/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -25,13 +25,9 @@ restrictions:
respect the opinions of others.
* Please **do not** post comments consisting solely of "+1" or ":thumbsup:".
- Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments)
+ Use [GitHub's "reactions" feature](https://github.com/blog/2119-add-reactions-to-pull-requests-issues-and-comments)
instead. We reserve the right to delete comments which violate this rule.
-* Please **do not** open issues or pull requests regarding the code in
- [`Normalize`](https://github.com/necolas/normalize.css) (open them in
- its repository).
-
* Please **do not** open issues regarding the official themes offered on .
Instead, please email any questions or feedback regarding those themes to `themes AT getbootstrap DOT com`.
@@ -46,7 +42,7 @@ Our bug tracker utilizes several labels to help organize and identify issues. He
- `docs` - Issues for improving or updating our documentation.
- `examples` - Issues involving the example templates included in our docs.
- `feature` - Issues asking for a new feature to be added, or an existing one to be extended or modified. New features require a minor version bump (e.g., `v3.0.0` to `v3.1.0`).
-- `grunt` - Issues with our included JavaScript-based Gruntfile, which is used to run all our tests, concatenate and compile source files, and more.
+- `grunt` - Issues with our build system, which is used to run all our tests, concatenate and compile source files, and more.
- `help wanted` - Issues we need or would love help from the community to resolve.
- `js` - Issues stemming from our compiled or source JavaScript files.
- `meta` - Issues with the project itself or our GitHub repository.
@@ -245,7 +241,7 @@ includes code changes) and under the terms of the
### Checking coding style
-Run `grunt test` before committing to ensure your changes follow our coding standards.
+Run `npm run test` before committing to ensure your changes follow our coding standards.
## License
diff --git a/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
similarity index 100%
rename from ISSUE_TEMPLATE.md
rename to .github/ISSUE_TEMPLATE.md
diff --git a/.hound.yml b/.hound.yml
index b5810115bc..7449ea3f95 100644
--- a/.hound.yml
+++ b/.hound.yml
@@ -1,14 +1,12 @@
fail_on_violations: true
scss:
- enabled: true
- config_file: scss/.scss-lint.yml
+ config_file: .scss-lint.yml
-javascript:
+jshint:
enabled: false
eslint:
- enabled: true
config_file: js/.eslintrc.json
ignore_file: .houndignore
diff --git a/scss/.scss-lint.yml b/.scss-lint.yml
similarity index 97%
rename from scss/.scss-lint.yml
rename to .scss-lint.yml
index 9d6e7ec4e8..a5b5b1ba03 100644
--- a/scss/.scss-lint.yml
+++ b/.scss-lint.yml
@@ -1,11 +1,8 @@
# Default application configuration that all configurations inherit from.
scss_files:
- - "**/*.scss"
+ - "scss/**/*.scss"
- "docs/assets/scss/**/*.scss"
-exclude:
- - "scss/_normalize.scss"
-
plugin_directories: ['.scss-linters']
# List of gem names to load custom linters from (make sure they are already
@@ -28,8 +25,6 @@ linters:
BorderZero:
enabled: true
convention: zero # or `none`
- exclude:
- - _normalize.scss
ChainedClasses:
enabled: false
@@ -43,8 +38,7 @@ linters:
Comment:
enabled: true
exclude:
- - _normalize.scss
- - bootstrap.scss
+ - scss/bootstrap.scss
style: silent
DebugStatement:
@@ -108,8 +102,6 @@ linters:
LeadingZero:
enabled: true
style: exclude_zero # or 'include_zero'
- exclude:
- - _normalize.scss
MergeableSelector:
enabled: false
@@ -138,8 +130,6 @@ linters:
ignore_unspecified: false
min_properties: 2
separate_groups: false
- exclude:
- - _normalize.scss
order:
- position
- top
@@ -538,8 +528,6 @@ linters:
identifier_list: base
additional_identifiers: []
excluded_identifiers: []
- exclude:
- - _normalize.scss
ZeroUnit:
enabled: true
diff --git a/.travis.yml b/.travis.yml
index 238a6c0db4..4efd7f293b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,34 +5,31 @@ git:
depth: 3
node_js:
- "4"
- - "6"
+ - "7"
before_install:
- - if [[ `npm -v` != 3* ]]; then npm install -g npm@3; fi
+ - if [[ `npm -v` != 4* ]]; then npm install -g npm@4; fi
- "export TRAVIS_COMMIT_MSG=\"`git log --format=%B --no-merges -n 1`\""
- - echo "$TRAVIS_COMMIT_MSG" | grep '\[skip validator\]'; export TWBS_DO_VALIDATOR=$?; true
- - echo "$TRAVIS_COMMIT_MSG" | grep '\[skip sauce\]'; export TWBS_DO_SAUCE=$?; true
- - if [ "$TRAVIS_REPO_SLUG" = twbs-savage/bootstrap ]; then export TWBS_DO_VALIDATOR=0; fi
+ - echo "$TRAVIS_COMMIT_MSG" | grep '\[skip browser\]'; export TWBS_DO_BROWSER=$?; true
install:
- bundle install --deployment --jobs=3 --retry=3
- - cp grunt/npm-shrinkwrap.json ./
+ - cp build/npm-shrinkwrap.json ./
- npm install
+script:
+ - npm test
+ - if [ "$TWBS_TEST" = browser -a "$SAUCE_ACCESS_KEY" ]; then npm run js-test-cloud; fi
after_success:
- - if [ "$TWBS_TEST" = sauce-js-unit ]; then grunt/upload-preview.sh; fi
+ - if [ "$TRAVIS_REPO_SLUG" = twbs-savage/bootstrap ]; then npm run docs-upload-preview; fi
cache:
directories:
- node_modules
- vendor/bundle
- - "$HOME/google-cloud-sdk"
env:
- TWBS_TEST=core
- - TWBS_TEST=validate-html
- - TWBS_TEST=sauce-js-unit
+ - TWBS_TEST=browser
matrix:
exclude:
- node_js: "4"
- env: TWBS_TEST=validate-html
- - node_js: "4"
- env: TWBS_TEST=sauce-js-unit
+ env: TWBS_TEST=browser
notifications:
slack: heybb:iz4wwosL0N0EdaX1gvgkU0NH
webhooks:
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 7b60d7c9a6..0000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,5 +0,0 @@
-Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs.
-
-See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
-
-Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
diff --git a/Gemfile b/Gemfile
index eb3366f119..2fa340d111 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,8 +1,9 @@
source 'https://rubygems.org'
group :development, :test do
- gem 'jekyll', '~> 3.3.1'
- gem 'jekyll-redirect-from', '~> 0.12.0'
- gem 'jekyll-sitemap', '~> 0.12.0'
- gem 'scss_lint', '~> 0.51.0'
+ gem 'jekyll', '~> 3.4.3'
+ gem 'jekyll-redirect-from', '~> 0.12.1'
+ gem 'jekyll-sitemap', '~> 1.1.1'
+ gem 'jekyll-toc', '~> 0.3.0.pre1'
+ gem 'scss_lint', '~> 0.53.0'
end
diff --git a/Gemfile.lock b/Gemfile.lock
index c245b6aa8b..71753d9e8f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,12 +1,12 @@
GEM
remote: https://rubygems.org/
specs:
- addressable (2.5.0)
+ addressable (2.5.1)
public_suffix (~> 2.0, >= 2.0.2)
colorator (1.1.0)
- ffi (1.9.14)
+ ffi (1.9.18)
forwardable-extended (2.6.0)
- jekyll (3.3.1)
+ jekyll (3.4.3)
addressable (~> 2.4)
colorator (~> 1.0)
jekyll-sass-converter (~> 1.0)
@@ -17,31 +17,36 @@ GEM
pathutil (~> 0.9)
rouge (~> 1.7)
safe_yaml (~> 1.0)
- jekyll-redirect-from (0.12.0)
+ jekyll-redirect-from (0.12.1)
jekyll (~> 3.3)
jekyll-sass-converter (1.5.0)
sass (~> 3.4)
- jekyll-sitemap (0.12.0)
+ jekyll-sitemap (1.1.1)
jekyll (~> 3.3)
+ jekyll-toc (0.3.0.pre1)
+ nokogiri (~> 1.6)
jekyll-watch (1.5.0)
listen (~> 3.0, < 3.1)
- kramdown (1.13.1)
+ kramdown (1.13.2)
liquid (3.0.6)
listen (3.0.8)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
mercenary (0.3.6)
+ mini_portile2 (2.1.0)
+ nokogiri (1.7.2)
+ mini_portile2 (~> 2.1.0)
pathutil (0.14.0)
forwardable-extended (~> 2.6)
public_suffix (2.0.5)
rake (12.0.0)
rb-fsevent (0.9.8)
- rb-inotify (0.9.7)
+ rb-inotify (0.9.8)
ffi (>= 0.5.0)
rouge (1.11.1)
safe_yaml (1.0.4)
sass (3.4.23)
- scss_lint (0.51.0)
+ scss_lint (0.53.0)
rake (>= 0.9, < 13)
sass (~> 3.4.20)
@@ -49,10 +54,11 @@ PLATFORMS
ruby
DEPENDENCIES
- jekyll (~> 3.3.1)
- jekyll-redirect-from (~> 0.12.0)
- jekyll-sitemap (~> 0.12.0)
- scss_lint (~> 0.51.0)
+ jekyll (~> 3.4.3)
+ jekyll-redirect-from (~> 0.12.1)
+ jekyll-sitemap (~> 1.1.1)
+ jekyll-toc (~> 0.3.0.pre1)
+ scss_lint (~> 0.53.0)
BUNDLED WITH
- 1.13.6
+ 1.14.6
diff --git a/Gruntfile.js b/Gruntfile.js
index 7d16ff4320..e3044bf04c 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -9,194 +9,8 @@
module.exports = function (grunt) {
'use strict'
- // Force use of Unix newlines
- grunt.util.linefeed = '\n'
-
- RegExp.quote = function (string) {
- return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&')
- }
-
- var path = require('path')
- var isTravis = require('is-travis')
-
- var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' })
-
- Object.keys(configBridge.paths).forEach(function (key) {
- configBridge.paths[key].forEach(function (val, i, arr) {
- arr[i] = path.join('./docs', val)
- })
- })
-
// Project configuration.
grunt.initConfig({
-
- // Metadata.
- pkg: grunt.file.readJSON('package.json'),
- banner: '/*!\n' +
- ' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
- ' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
- ' * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n' +
- ' */\n',
- jqueryCheck: 'if (typeof jQuery === \'undefined\') {\n' +
- ' throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\\'s JavaScript.\')\n' +
- '}\n',
- jqueryVersionCheck: '+function ($) {\n' +
- ' var version = $.fn.jquery.split(\' \')[0].split(\'.\')\n' +
- ' if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 4)) {\n' +
- ' throw new Error(\'Bootstrap\\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\')\n' +
- ' }\n' +
- '}(jQuery);\n\n',
-
- // Task configuration.
- clean: {
- dist: 'dist',
- docs: 'docs/dist'
- },
-
- // JS build configuration
- babel: {
- dev: {
- options: {
- sourceMap: true
- },
- files: {
- 'js/dist/util.js' : 'js/src/util.js',
- 'js/dist/alert.js' : 'js/src/alert.js',
- 'js/dist/button.js' : 'js/src/button.js',
- 'js/dist/carousel.js' : 'js/src/carousel.js',
- 'js/dist/collapse.js' : 'js/src/collapse.js',
- 'js/dist/dropdown.js' : 'js/src/dropdown.js',
- 'js/dist/modal.js' : 'js/src/modal.js',
- 'js/dist/scrollspy.js' : 'js/src/scrollspy.js',
- 'js/dist/tab.js' : 'js/src/tab.js',
- 'js/dist/tooltip.js' : 'js/src/tooltip.js',
- 'js/dist/popover.js' : 'js/src/popover.js'
- }
- },
- dist: {
- options: {
- extends: '../../js/.babelrc'
- },
- files: {
- '<%= concat.bootstrap.dest %>' : '<%= concat.bootstrap.dest %>'
- }
- }
- },
-
- stamp: {
- options: {
- banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>\n+function () {\n',
- footer: '\n}();'
- },
- bootstrap: {
- files: {
- src: '<%= concat.bootstrap.dest %>'
- }
- }
- },
-
- concat: {
- options: {
- // Custom function to remove all export and import statements
- process: function (src) {
- return src.replace(/^(export|import).*/gm, '')
- }
- },
- bootstrap: {
- src: [
- 'js/src/util.js',
- 'js/src/alert.js',
- 'js/src/button.js',
- 'js/src/carousel.js',
- 'js/src/collapse.js',
- 'js/src/dropdown.js',
- 'js/src/modal.js',
- 'js/src/scrollspy.js',
- 'js/src/tab.js',
- 'js/src/tooltip.js',
- 'js/src/popover.js'
- ],
- dest: 'dist/js/<%= pkg.name %>.js'
- }
- },
-
- qunit: {
- options: {
- inject: 'js/tests/unit/phantom.js'
- },
- files: 'js/tests/index.html'
- },
-
- // CSS build configuration
- copy: {
- docs: {
- expand: true,
- cwd: 'dist/',
- src: [
- '**/*'
- ],
- dest: 'docs/dist/'
- }
- },
-
- connect: {
- server: {
- options: {
- port: 3000,
- base: '.'
- }
- }
- },
-
- jekyll: {
- options: {
- bundleExec: true,
- config: '_config.yml',
- incremental: false
- },
- docs: {},
- github: {
- options: {
- raw: 'github: true'
- }
- }
- },
-
- htmllint: {
- options: {
- ignore: [
- 'Attribute “autocomplete” is only allowed when the input type is “color”, “date”, “datetime”, “datetime-local”, “email”, “hidden”, “month”, “number”, “password”, “range”, “search”, “tel”, “text”, “time”, “url”, or “week”.',
- 'Attribute “autocomplete” not allowed on element “button” at this point.',
- 'Consider using the “h1” element as a top-level heading only (all “h1” elements are treated as top-level headings by many screen readers and other tools).',
- 'Element “div” not allowed as child of element “progress” in this context. (Suppressing further errors from this subtree.)',
- 'Element “img” is missing required attribute “src”.',
- 'The “color” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
- 'The “date” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
- 'The “datetime” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
- 'The “datetime-local” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
- 'The “month” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
- 'The “time” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
- 'The “week” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.'
- ]
- },
- src: ['_gh_pages/**/*.html', 'js/tests/visual/*.html']
- },
-
- watch: {
- src: {
- files: '<%= concat.bootstrap.src %>',
- tasks: ['babel:dev']
- },
- sass: {
- files: 'scss/**/*.scss',
- tasks: ['dist-css', 'docs']
- },
- docs: {
- files: 'docs/assets/scss/**/*.scss',
- tasks: ['dist-css', 'docs']
- }
- },
-
'saucelabs-qunit': {
all: {
options: {
@@ -205,151 +19,11 @@ module.exports = function (grunt) {
maxRetries: 3,
maxPollRetries: 4,
urls: ['http://127.0.0.1:3000/js/tests/index.html?hidepassed'],
- browsers: grunt.file.readYAML('grunt/sauce_browsers.yml')
+ browsers: grunt.file.readYAML('build/sauce_browsers.yml')
}
}
- },
-
- exec: {
- 'clean-css': {
- command: 'npm run clean-css'
- },
- 'clean-css-docs': {
- command: 'npm run clean-css-docs'
- },
- postcss: {
- command: 'npm run postcss'
- },
- 'postcss-docs': {
- command: 'npm run postcss-docs'
- },
- htmlhint: {
- command: 'npm run htmlhint'
- },
- sass: {
- command: 'npm run sass'
- },
- 'sass-docs': {
- command: 'npm run sass-docs'
- },
- 'scss-lint': {
- command: 'npm run scss-lint'
- },
- 'scss-lint-docs': {
- command: 'npm run scss-lint-docs'
- },
- uglify: {
- command: 'npm run uglify'
- },
- 'uglify-docs': {
- command: 'npm run uglify-docs'
- }
- },
-
- buildcontrol: {
- options: {
- dir: '_gh_pages',
- commit: true,
- push: true,
- message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%'
- },
- pages: {
- options: {
- remote: 'git@github.com:twbs/derpstrap.git',
- branch: 'gh-pages'
- }
- }
- },
-
- compress: {
- main: {
- options: {
- archive: 'bootstrap-<%= pkg.version %>-dist.zip',
- mode: 'zip',
- level: 9,
- pretty: true
- },
- files: [
- {
- expand: true,
- cwd: 'dist/',
- src: ['**'],
- dest: 'bootstrap-<%= pkg.version %>-dist'
- }
- ]
- }
}
-
})
-
- // These plugins provide necessary tasks.
- require('load-grunt-tasks')(grunt)
- require('time-grunt')(grunt)
-
- // Docs HTML validation task
- grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint', 'exec:htmlhint'])
-
- var runSubset = function (subset) {
- return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset
- }
- var isUndefOrNonZero = function (val) {
- return val === undefined || val !== '0'
- }
-
- // Test task.
- var testSubtasks = []
- // Skip core tests if running a different subset of the test suite
- if (runSubset('core') &&
- // Skip core tests if this is a Savage build
- process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
- testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'test-scss', 'qunit', 'docs'])
- }
- // Skip HTML validation if running a different subset of the test suite
- if (runSubset('validate-html') &&
- isTravis &&
- // Skip HTML5 validator when [skip validator] is in the commit message
- isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
- testSubtasks.push('validate-html')
- }
- // Only run Sauce Labs tests if there's a Sauce access key
- if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
- // Skip Sauce if running a different subset of the test suite
- runSubset('sauce-js-unit')) {
- testSubtasks = testSubtasks.concat(['dist', 'docs-css', 'docs-js', 'clean:docs', 'copy:docs'])
- // Skip Sauce on Travis when [skip sauce] is in the commit message
- if (isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
- testSubtasks.push('connect')
- testSubtasks.push('saucelabs-qunit')
- }
- }
- grunt.registerTask('test', testSubtasks)
-
- // JS distribution task.
- grunt.registerTask('dist-js', ['babel:dev', 'concat', 'babel:dist', 'stamp', 'exec:uglify'])
-
- grunt.registerTask('test-scss', ['exec:scss-lint'])
-
- // CSS distribution task.
- grunt.registerTask('sass-compile', ['exec:sass', 'exec:sass-docs'])
-
- grunt.registerTask('dist-css', ['sass-compile', 'exec:postcss', 'exec:clean-css', 'exec:clean-css-docs'])
-
- // Full distribution task.
- grunt.registerTask('dist', ['clean:dist', 'dist-css', 'dist-js'])
-
- // Default task.
- grunt.registerTask('default', ['clean:dist', 'test'])
-
- // Docs task.
- grunt.registerTask('docs-css', ['exec:clean-css-docs', 'exec:postcss-docs'])
- grunt.registerTask('lint-docs-css', ['exec:scss-lint-docs'])
- grunt.registerTask('docs-js', ['exec:uglify-docs'])
- grunt.registerTask('docs', ['lint-docs-css', 'docs-css', 'docs-js', 'clean:docs', 'copy:docs'])
- grunt.registerTask('docs-github', ['jekyll:github'])
-
- grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress'])
-
- // Publish to GitHub
- grunt.registerTask('publish', ['buildcontrol:pages'])
+ grunt.loadNpmTasks('grunt-saucelabs')
}
diff --git a/README.md b/README.md
index bd1d9d4135..3e7258091a 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,24 @@
-# [Bootstrap](https://getbootstrap.com)
+
+
+
+
-[](https://bootstrap-slack.herokuapp.com)
-
-[](https://www.npmjs.com/package/bootstrap)
-[](https://rubygems.org/gems/bootstrap)
-[](https://travis-ci.org/twbs/bootstrap)
-[](https://david-dm.org/twbs/bootstrap?type=dev)
-[](https://atmospherejs.com/twbs/bootstrap)
-[](https://packagist.org/packages/twbs/bootstrap)
-[](https://www.nuget.org/packages/bootstrap/4.0.0-alpha5)
+
Bootstrap
-[](https://saucelabs.com/u/bootstrap)
+
+ Sleek, intuitive, and powerful front-end framework for faster and easier web development.
+
+ Visit Bootstrap »
+
+
-Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community.
-
-To get started, check out !
+
## Table of contents
- [Quick start](#quick-start)
+- [Status](#status)
+- [What's included](#whats-included)
- [Bugs and feature requests](#bugs-and-feature-requests)
- [Documentation](#documentation)
- [Contributing](#contributing)
@@ -31,17 +31,31 @@ To get started, check out !
Several quick start options are available:
-- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.5.zip)
+- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.6.zip)
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
-- Install with [npm](https://www.npmjs.com): `npm install bootstrap@4.0.0-alpha.5`
-- Install with [yarn](https://github.com/yarnpkg/yarn): `yarn add bootstrap@4.0.0-alpha.5`
-- Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap:4.0.0-alpha.5`
-- Install with [Bower](https://bower.io): `bower install bootstrap#v4.0.0-alpha.5`
+- Install with [npm](https://www.npmjs.com): `npm install bootstrap@4.0.0-alpha.6`
+- Install with [yarn](https://github.com/yarnpkg/yarn): `yarn add bootstrap@4.0.0-alpha.6`
+- Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap:4.0.0-alpha.6`
+- Install with [Bower](https://bower.io): `bower install bootstrap#v4.0.0-alpha.6`
- Install with [NuGet](https://www.nuget.org): CSS: `Install-Package bootstrap -Pre` Sass: `Install-Package bootstrap.sass -Pre` (`-Pre` is only required until Bootstrap v4 has a stable release).
Read the [Getting started page](https://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
-### What's included
+## Status
+
+[](https://bootstrap-slack.herokuapp.com)
+[](https://bower.io/search/?q=bootstrap)
+[](https://www.npmjs.com/package/bootstrap)
+[](https://rubygems.org/gems/bootstrap)
+[](https://travis-ci.org/twbs/bootstrap)
+[](https://david-dm.org/twbs/bootstrap?type=dev)
+[](https://atmospherejs.com/twbs/bootstrap)
+[](https://packagist.org/packages/twbs/bootstrap)
+[](https://www.nuget.org/packages/bootstrap/absoluteLatest)
+
+[](https://saucelabs.com/u/bootstrap)
+
+## What's included
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:
@@ -57,7 +71,7 @@ bootstrap/
└── bootstrap.min.js
```
-We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developer.chrome.com/devtools/docs/css-preprocessors) (`bootstrap.*.map`) are available for use with certain browsers' developer tools.
+We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developers.google.com/web/tools/chrome-devtools/debug/readability/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools.
## Bugs and feature requests
@@ -72,7 +86,7 @@ Bootstrap's documentation, included in this repo in the root directory, is built
### Running documentation locally
1. Run through the [tooling setup](https://github.com/twbs/bootstrap/blob/v4-dev/docs/getting-started/build-tools.md#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`.
-2. Run `grunt` (or a specific set of Grunt tasks) to rebuild distributed CSS and JavaScript files, as well as our docs assets.
+2. Run `npm run test` (or a specific NPM script) to rebuild distributed CSS and JavaScript files, as well as our docs assets.
3. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line.
4. Open in your browser, and voilà.
diff --git a/_config.yml b/_config.yml
index 9ffa729f8a..ebf6e74e78 100644
--- a/_config.yml
+++ b/_config.yml
@@ -9,18 +9,18 @@ kramdown:
permalink: pretty
# Server
-source: docs
-destination: _gh_pages
-host: 0.0.0.0
+source: .
+destination: ./_gh_pages
port: 9001
baseurl: ""
-url: https://v4-alpha.getbootstrap.com
+url: https://getbootstrap.com
encoding: UTF-8
-exclude: [assets/scss/]
+exclude: [.git, .github, assets/scss/, build, js, node_modules, nuget, scss, vendor, bower.json, composer.json, Gemfile, Gemfile.lock, Gruntfile.js, package.js, package.json, sache.json]
gems:
- jekyll-redirect-from
- jekyll-sitemap
+ - jekyll-toc
# Social
title: Bootstrap
@@ -31,25 +31,27 @@ social_logo_path: /assets/brand/bootstrap-social-logo.png
social_image_path: /assets/brand/bootstrap-social.png
# Custom vars
-current_version: 4.0.0-alpha.5
+current_version: 4.0.0-alpha.6
+docs_version: 4.0
repo: https://github.com/twbs/bootstrap
slack: https://bootstrap-slack.herokuapp.com
download:
- source: https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.5.zip
- dist: https://github.com/twbs/bootstrap/releases/download/v4.0.0-alpha.5/bootstrap-4.0.0-alpha.5-dist.zip
+ source: https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.6.zip
+ dist: https://github.com/twbs/bootstrap/releases/download/v4.0.0-alpha.6/bootstrap-4.0.0-alpha.6-dist.zip
blog: https://blog.getbootstrap.com
expo: https://expo.getbootstrap.com
themes: https://themes.getbootstrap.com
+jobs: https://jobs.getbootstrap.com
cdn:
# See https://www.srihash.org for info on how to generate the hashes
- css: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css
- css_hash: "sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi"
- js: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/js/bootstrap.min.js
- js_hash: "sha384-BLiI7JTZm+JWlgKa0M0kGRpJbF2J8q+qreVrKBC47e3K6BW78kGLrCkeRX6I9RoK"
- jquery: https://code.jquery.com/jquery-3.1.1.slim.min.js
- jquery_hash: "sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n"
- tether: https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js
- tether_hash: "sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb"
+ css: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css
+ css_hash: "sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ"
+ js: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js
+ js_hash: "sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn"
+ jquery: https://code.jquery.com/jquery-3.2.1.slim.min.js
+ jquery_hash: "sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
+ popper: https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.9.9/umd/popper.min.js
+ popper_hash: "sha256-c477vRLKQv1jt9o7w6TTBzFyFznTaZjoMLTDFi7Hlxc="
diff --git a/docs/_data/breakpoints.yml b/_data/breakpoints.yml
similarity index 100%
rename from docs/_data/breakpoints.yml
rename to _data/breakpoints.yml
diff --git a/docs/_data/browser-bugs.yml b/_data/browser-bugs.yml
similarity index 100%
rename from docs/_data/browser-bugs.yml
rename to _data/browser-bugs.yml
diff --git a/docs/_data/browser-features.yml b/_data/browser-features.yml
similarity index 100%
rename from docs/_data/browser-features.yml
rename to _data/browser-features.yml
diff --git a/docs/_data/core-team.yml b/_data/core-team.yml
similarity index 90%
rename from docs/_data/core-team.yml
rename to _data/core-team.yml
index 2b3fd9ac68..7528bdc11b 100644
--- a/docs/_data/core-team.yml
+++ b/_data/core-team.yml
@@ -33,3 +33,7 @@
- name: Gleb Mazovetskiy
user: glebm
gravatar: 729f685b8e8d7e9feed18c177c82e59b
+
+- name: Johann-S
+ user: johann-s
+ gravatar: d90d49733a4fe1aa461e45cb4a4fd9e3
diff --git a/docs/_data/nav.yml b/_data/nav.yml
similarity index 82%
rename from docs/_data/nav.yml
rename to _data/nav.yml
index 97e6b1b154..a66ed3d007 100644
--- a/docs/_data/nav.yml
+++ b/_data/nav.yml
@@ -8,6 +8,7 @@
- title: Options
- title: Build tools
- title: Best practices
+ - title: Webpack
- title: Accessibility
- title: Layout
@@ -15,7 +16,7 @@
- title: Overview
- title: Grid
- title: Media object
- - title: Responsive utilities
+ - title: Utilities for layout
- title: Content
pages:
@@ -56,10 +57,9 @@
- title: Clearfix
- title: Close icon
- title: Colors
+ - title: Display
- title: Flexbox
- - title: Display property
- title: Image replacement
- - title: Invisible content
- title: Position
- title: Responsive helpers
- title: Screenreaders
@@ -67,18 +67,19 @@
- title: Spacing
- title: Typography
- title: Vertical align
+ - title: Visibility
-# - title: Extend
-# pages:
-# - title: Approach
-# - title: Icon fonts
-
-- title: About
+- title: Extend
pages:
- - title: History
- - title: Team
- - title: Brand
- - title: License
- - title: Translations
+ # - title: Approach
+ - title: Icons
+
+# - title: About
+# pages:
+# - title: History
+# - title: Team
+# - title: Brand
+# - title: License
+# - title: Translations
- title: Migration
diff --git a/docs/_data/showcase.yml b/_data/showcase.yml
similarity index 100%
rename from docs/_data/showcase.yml
rename to _data/showcase.yml
diff --git a/docs/_data/translations.yml b/_data/translations.yml
similarity index 81%
rename from docs/_data/translations.yml
rename to _data/translations.yml
index 951f9756b9..52241e3d59 100644
--- a/docs/_data/translations.yml
+++ b/_data/translations.yml
@@ -1,12 +1,12 @@
- name: Chinese
code: zh
description: Bootstrap 中文文档
- url: http://v4.bootcss.com/
+ url: https://v4.bootcss.com/
- name: Chinese
code: zh
description: Bootstrap 4 中文文档教程
- url: http://boot4.com/
+ url: http://wiki.jikexueyuan.com/project/bootstrap4/
- name: Japanese
code: ja
diff --git a/docs/_includes/ads.html b/_includes/ads.html
similarity index 100%
rename from docs/_includes/ads.html
rename to _includes/ads.html
diff --git a/_includes/callout-danger-async-methods.md b/_includes/callout-danger-async-methods.md
new file mode 100644
index 0000000000..f7a76aa4d3
--- /dev/null
+++ b/_includes/callout-danger-async-methods.md
@@ -0,0 +1,7 @@
+{% callout danger %}
+#### Asynchronous methods and transitions
+
+All API methods are **asynchronous** and start a **transition**. They returns to the caller as soon as the transition is started but **before it ends**. In addition, a method call on a **transitioning component will be ignored**.
+
+[See our Javascript documentation for more informations.]({{ site.baseurl }}/getting-started/javascript/#content)
+{% endcallout %}
diff --git a/docs/_includes/callout-warning-color-assistive-technologies.md b/_includes/callout-warning-color-assistive-technologies.md
similarity index 100%
rename from docs/_includes/callout-warning-color-assistive-technologies.md
rename to _includes/callout-warning-color-assistive-technologies.md
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644
index 0000000000..19b05996f2
--- /dev/null
+++ b/_includes/footer.html
@@ -0,0 +1,12 @@
+
diff --git a/docs/_includes/header.html b/_includes/header.html
similarity index 90%
rename from docs/_includes/header.html
rename to _includes/header.html
index 57415be54e..fd9a9a28c0 100644
--- a/docs/_includes/header.html
+++ b/_includes/header.html
@@ -19,6 +19,9 @@
{% endif %}
+{% if page.layout == "docs" %}
+
+{% endif %}
diff --git a/_includes/icons/bootstrap.svg b/_includes/icons/bootstrap.svg
new file mode 100644
index 0000000000..9971824085
--- /dev/null
+++ b/_includes/icons/bootstrap.svg
@@ -0,0 +1 @@
+
diff --git a/_includes/icons/github.svg b/_includes/icons/github.svg
new file mode 100644
index 0000000000..b582b78f31
--- /dev/null
+++ b/_includes/icons/github.svg
@@ -0,0 +1 @@
+
diff --git a/_includes/icons/menu.svg b/_includes/icons/menu.svg
new file mode 100644
index 0000000000..883713c19b
--- /dev/null
+++ b/_includes/icons/menu.svg
@@ -0,0 +1 @@
+
diff --git a/_includes/icons/slack.svg b/_includes/icons/slack.svg
new file mode 100644
index 0000000000..1631260f7a
--- /dev/null
+++ b/_includes/icons/slack.svg
@@ -0,0 +1 @@
+
diff --git a/_includes/icons/twitter.svg b/_includes/icons/twitter.svg
new file mode 100644
index 0000000000..0265e9767c
--- /dev/null
+++ b/_includes/icons/twitter.svg
@@ -0,0 +1 @@
+
diff --git a/docs/_includes/nav-docs.html b/_includes/nav-docs.html
similarity index 63%
rename from docs/_includes/nav-docs.html
rename to _includes/nav-docs.html
index ab9c43c814..71ea14f7d8 100644
--- a/docs/_includes/nav-docs.html
+++ b/_includes/nav-docs.html
@@ -1,4 +1,11 @@
-