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) +

+ + + -[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com) -![Bower version](https://img.shields.io/bower/v/bootstrap.svg) -[![npm version](https://img.shields.io/npm/v/bootstrap.svg)](https://www.npmjs.com/package/bootstrap) -[![Gem version](https://img.shields.io/gem/v/bootstrap.svg)](https://rubygems.org/gems/bootstrap) -[![Build Status](https://img.shields.io/travis/twbs/bootstrap/master.svg)](https://travis-ci.org/twbs/bootstrap) -[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap?type=dev) -[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue.svg)](https://atmospherejs.com/twbs/bootstrap) -[![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap.svg)](https://packagist.org/packages/twbs/bootstrap) -[![NuGet](https://img.shields.io/nuget/vpre/bootstrap.svg)](https://www.nuget.org/packages/bootstrap/4.0.0-alpha5) +

Bootstrap

-[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](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 + +[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com) +[![Bower](https://img.shields.io/bower/v/bootstrap.svg)](https://bower.io/search/?q=bootstrap) +[![npm version](https://img.shields.io/npm/v/bootstrap.svg)](https://www.npmjs.com/package/bootstrap) +[![Gem version](https://img.shields.io/gem/v/bootstrap.svg)](https://rubygems.org/gems/bootstrap) +[![Build Status](https://img.shields.io/travis/twbs/bootstrap/v4-dev.svg)](https://travis-ci.org/twbs/bootstrap) +[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap?type=dev) +[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue.svg)](https://atmospherejs.com/twbs/bootstrap) +[![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap.svg)](https://packagist.org/packages/twbs/bootstrap) +[![NuGet](https://img.shields.io/nuget/vpre/bootstrap.svg)](https://www.nuget.org/packages/bootstrap/absoluteLatest) + +[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](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 @@ +GitHub 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 @@ +Slack 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 @@ +Twitter 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 @@ -