Commit 27cf3d67 authored by Pierre-Denis Vanduynslager's avatar Pierre-Denis Vanduynslager
Browse files

Merge remote-tracking branch 'twbs/v4-dev' into v4-dev

parents f0c0a753 8e4f3fe7
Showing with 230 additions and 891 deletions
+230 -891
...@@ -38,10 +38,6 @@ Thumbs.db ...@@ -38,10 +38,6 @@ Thumbs.db
.komodotools .komodotools
*.komodoproject *.komodoproject
# grunt-html-validation
validation-report.json
validation-status.json
# SCSS-Lint # SCSS-Lint
scss-lint-report.xml scss-lint-report.xml
......
...@@ -10,7 +10,7 @@ javascript: ...@@ -10,7 +10,7 @@ javascript:
eslint: eslint:
enabled: true enabled: true
config_file: js/.eslintrc config_file: js/.eslintrc.json
jscs: jscs:
enabled: true enabled: true
......
...@@ -5,7 +5,7 @@ git: ...@@ -5,7 +5,7 @@ git:
depth: 10 depth: 10
node_js: node_js:
- "4" - "4"
- "5" - "6"
before_install: before_install:
# Remove ./node_modules/.bin from PATH so node-which doesn't replace Unix which and cause RVM to barf. See https://github.com/travis-ci/travis-ci/issues/5092 # Remove ./node_modules/.bin from PATH so node-which doesn't replace Unix which and cause RVM to barf. See https://github.com/travis-ci/travis-ci/issues/5092
- export PATH=$(python -c 'from sys import argv;from collections import OrderedDict as od;print(":".join(od((p,None) for p in argv[1].split(":") if p.startswith("/")).keys()))' "$PATH") - export PATH=$(python -c 'from sys import argv;from collections import OrderedDict as od;print(":".join(od((p,None) for p in argv[1].split(":") if p.startswith("/")).keys()))' "$PATH")
...@@ -19,12 +19,12 @@ before_install: ...@@ -19,12 +19,12 @@ before_install:
install: install:
- bundle install --deployment --jobs=3 - bundle install --deployment --jobs=3
- cp grunt/npm-shrinkwrap.json ./ - cp grunt/npm-shrinkwrap.json ./
- npm install -g grunt-cli
- npm install - npm install
cache: cache:
directories: directories:
- node_modules - node_modules
- vendor/bundle - vendor/bundle
- "$HOME/google-cloud-sdk"
env: env:
global: global:
- NPM_CONFIG_PROGRESS="false" - NPM_CONFIG_PROGRESS="false"
......
...@@ -233,7 +233,7 @@ includes code changes) and under the terms of the ...@@ -233,7 +233,7 @@ includes code changes) and under the terms of the
[Adhere to the Code Guide.](http://codeguide.co/#css) [Adhere to the Code Guide.](http://codeguide.co/#css)
- When feasible, default color palettes should comply with [WCAG color contrast guidelines](http://www.w3.org/TR/WCAG20/#visual-audio-contrast). - When feasible, default color palettes should comply with [WCAG color contrast guidelines](http://www.w3.org/TR/WCAG20/#visual-audio-contrast).
- Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](http://a11yproject.com/posts/never-remove-css-outlines/) for more details. - Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](http://a11yproject.com/posts/never-remove-css-outlines) for more details.
### JS ### JS
......
...@@ -2,7 +2,7 @@ source 'https://rubygems.org' ...@@ -2,7 +2,7 @@ source 'https://rubygems.org'
group :development, :test do group :development, :test do
gem 'jekyll', '~> 3.1.2' gem 'jekyll', '~> 3.1.2'
gem 'jekyll-redirect-from', '~> 0.10.0' gem 'jekyll-redirect-from', '~> 0.11.0'
gem 'jekyll-sitemap', '~> 0.10.0' gem 'jekyll-sitemap', '~> 0.11.0'
gem 'scss_lint', '~> 0.47.1' gem 'scss_lint', '~> 0.49.0'
end end
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
addressable (2.4.0)
colorator (0.1) colorator (0.1)
ffi (1.9.10) ffi (1.9.13)
ffi (1.9.10-x64-mingw32) ffi (1.9.13-x64-mingw32)
jekyll (3.1.2) jekyll (3.1.6)
colorator (~> 0.1) colorator (~> 0.1)
jekyll-sass-converter (~> 1.0) jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 1.1) jekyll-watch (~> 1.1)
...@@ -13,29 +14,30 @@ GEM ...@@ -13,29 +14,30 @@ GEM
mercenary (~> 0.3.3) mercenary (~> 0.3.3)
rouge (~> 1.7) rouge (~> 1.7)
safe_yaml (~> 1.0) safe_yaml (~> 1.0)
jekyll-redirect-from (0.10.0) jekyll-redirect-from (0.11.0)
jekyll (>= 2.0) jekyll (>= 2.0)
jekyll-sass-converter (1.4.0) jekyll-sass-converter (1.4.0)
sass (~> 3.4) sass (~> 3.4)
jekyll-sitemap (0.10.0) jekyll-sitemap (0.11.0)
jekyll-watch (1.3.1) addressable (~> 2.4.0)
listen (~> 3.0) jekyll-watch (1.4.0)
kramdown (1.10.0) listen (~> 3.0, < 3.1)
kramdown (1.11.1)
liquid (3.0.6) liquid (3.0.6)
listen (3.0.6) listen (3.0.8)
rb-fsevent (>= 0.9.3) rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (>= 0.9.7) rb-inotify (~> 0.9, >= 0.9.7)
mercenary (0.3.5) mercenary (0.3.6)
rake (10.5.0) rake (11.2.2)
rb-fsevent (0.9.7) rb-fsevent (0.9.7)
rb-inotify (0.9.7) rb-inotify (0.9.7)
ffi (>= 0.5.0) ffi (>= 0.5.0)
rouge (1.10.1) rouge (1.11.1)
safe_yaml (1.0.4) safe_yaml (1.0.4)
sass (3.4.21) sass (3.4.22)
scss_lint (0.47.1) scss_lint (0.49.0)
rake (>= 0.9, < 11) rake (>= 0.9, < 12)
sass (~> 3.4.15) sass (~> 3.4.20)
PLATFORMS PLATFORMS
ruby ruby
...@@ -43,9 +45,9 @@ PLATFORMS ...@@ -43,9 +45,9 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
jekyll (~> 3.1.2) jekyll (~> 3.1.2)
jekyll-redirect-from (~> 0.10.0) jekyll-redirect-from (~> 0.11.0)
jekyll-sitemap (~> 0.10.0) jekyll-sitemap (~> 0.11.0)
scss_lint (~> 0.47.1) scss_lint (~> 0.49.0)
BUNDLED WITH BUNDLED WITH
1.11.2 1.12.5
...@@ -19,16 +19,12 @@ module.exports = function (grunt) { ...@@ -19,16 +19,12 @@ module.exports = function (grunt) {
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
var isTravis = require('is-travis'); var isTravis = require('is-travis');
var mq4HoverShim = require('mq4-hover-shim');
var autoprefixerSettings = require('./grunt/autoprefixer-settings.js');
var autoprefixer = require('autoprefixer')(autoprefixerSettings);
var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js');
var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' }); var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' });
Object.keys(configBridge.paths).forEach(function (key) { Object.keys(configBridge.paths).forEach(function (key) {
configBridge.paths[key].forEach(function (val, i, arr) { configBridge.paths[key].forEach(function (val, i, arr) {
arr[i] = path.join('./docs/assets', val); arr[i] = path.join('./docs', val);
}); });
}); });
...@@ -47,8 +43,8 @@ module.exports = function (grunt) { ...@@ -47,8 +43,8 @@ module.exports = function (grunt) {
'}\n', '}\n',
jqueryVersionCheck: '+function ($) {\n' + jqueryVersionCheck: '+function ($) {\n' +
' var version = $.fn.jquery.split(\' \')[0].split(\'.\')\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] >= 3)) {\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 v3.0.0\')\n' + ' throw new Error(\'Bootstrap\\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\')\n' +
' }\n' + ' }\n' +
'}(jQuery);\n\n', '}(jQuery);\n\n',
...@@ -86,52 +82,6 @@ module.exports = function (grunt) { ...@@ -86,52 +82,6 @@ module.exports = function (grunt) {
files: { files: {
'<%= concat.bootstrap.dest %>' : '<%= concat.bootstrap.dest %>' '<%= concat.bootstrap.dest %>' : '<%= concat.bootstrap.dest %>'
} }
},
umd: {
options: {
modules: 'umd'
},
files: {
'dist/js/umd/util.js' : 'js/src/util.js',
'dist/js/umd/alert.js' : 'js/src/alert.js',
'dist/js/umd/button.js' : 'js/src/button.js',
'dist/js/umd/carousel.js' : 'js/src/carousel.js',
'dist/js/umd/collapse.js' : 'js/src/collapse.js',
'dist/js/umd/dropdown.js' : 'js/src/dropdown.js',
'dist/js/umd/modal.js' : 'js/src/modal.js',
'dist/js/umd/scrollspy.js' : 'js/src/scrollspy.js',
'dist/js/umd/tab.js' : 'js/src/tab.js',
'dist/js/umd/tooltip.js' : 'js/src/tooltip.js',
'dist/js/umd/popover.js' : 'js/src/popover.js'
}
}
},
eslint: {
options: {
configFile: 'js/.eslintrc'
},
target: 'js/src/*.js'
},
jscs: {
options: {
config: 'js/.jscsrc'
},
grunt: {
src: ['Gruntfile.js', 'grunt/*.js']
},
core: {
src: 'js/src/*.js'
},
test: {
src: 'js/tests/unit/*.js'
},
assets: {
options: {
requireCamelCaseOrUpperCaseIdentifiers: null
},
src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
} }
}, },
...@@ -213,38 +163,6 @@ module.exports = function (grunt) { ...@@ -213,38 +163,6 @@ module.exports = function (grunt) {
} }
}, },
postcss: {
core: {
options: {
map: true,
processors: [
mq4HoverShim.postprocessorFor({ hoverSelectorPrefix: '.bs-true-hover ' }),
autoprefixer
]
},
src: 'dist/css/*.css'
},
docs: {
options: {
processors: [
autoprefixer
]
},
src: 'docs/assets/css/docs.min.css'
},
examples: {
options: {
processors: [
autoprefixer
]
},
expand: true,
cwd: 'docs/examples/',
src: ['**/*.css'],
dest: 'docs/examples/'
}
},
cssmin: { cssmin: {
options: { options: {
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released // TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
...@@ -266,8 +184,15 @@ module.exports = function (grunt) { ...@@ -266,8 +184,15 @@ module.exports = function (grunt) {
] ]
}, },
docs: { docs: {
src: 'docs/assets/css/docs.min.css', files: [
dest: 'docs/assets/css/docs.min.css' {
expand: true,
cwd: 'docs/assets/css',
src: ['*.css', '!*.min.css'],
dest: 'docs/assets/css',
ext: '.min.css'
}
]
} }
}, },
...@@ -308,14 +233,14 @@ module.exports = function (grunt) { ...@@ -308,14 +233,14 @@ module.exports = function (grunt) {
htmllint: { htmllint: {
options: { options: {
ignore: [ ignore: [
'Element “img” is missing required attribute “src”.', '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” is only allowed when the input type is “color”, “date”, “datetime”, “datetime-local”, “email”, “month”, “number”, “password”, “range”, “search”, “tel”, “text”, “time”, “url”, or “week”.',
'Attribute “autocomplete” not allowed on element “button” at this point.', 'Attribute “autocomplete” not allowed on element “button” at this point.',
'Element “div” not allowed as child of element “progress” in this context. (Suppressing further errors from this subtree.)',
'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).', '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).',
'The “datetime” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.', '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 “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 “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 “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 “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 “time” input type is not supported in all browsers. Please be sure to test, and consider using a polyfill.',
...@@ -327,7 +252,7 @@ module.exports = function (grunt) { ...@@ -327,7 +252,7 @@ module.exports = function (grunt) {
watch: { watch: {
src: { src: {
files: '<%= jscs.core.src %>', files: '<%= concat.bootstrap.src %>',
tasks: ['babel:dev'] tasks: ['babel:dev']
}, },
sass: { sass: {
...@@ -354,8 +279,17 @@ module.exports = function (grunt) { ...@@ -354,8 +279,17 @@ module.exports = function (grunt) {
}, },
exec: { exec: {
npmUpdate: { postcss: {
command: 'npm update' command: 'npm run postcss'
},
'postcss-docs': {
command: 'npm run postcss-docs'
},
htmlhint: {
command: 'npm run htmlhint'
},
'upload-preview': {
command: './grunt/upload-preview.sh'
} }
}, },
...@@ -403,7 +337,7 @@ module.exports = function (grunt) { ...@@ -403,7 +337,7 @@ module.exports = function (grunt) {
require('time-grunt')(grunt); require('time-grunt')(grunt);
// Docs HTML validation task // Docs HTML validation task
grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']); grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint', 'exec:htmlhint']);
var runSubset = function (subset) { var runSubset = function (subset) {
return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset; return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
...@@ -418,7 +352,7 @@ module.exports = function (grunt) { ...@@ -418,7 +352,7 @@ module.exports = function (grunt) {
if (runSubset('core') && if (runSubset('core') &&
// Skip core tests if this is a Savage build // Skip core tests if this is a Savage build
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') { process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'test-scss', 'test-js', 'docs']); testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'test-scss', 'qunit', 'docs']);
} }
// Skip HTML validation if running a different subset of the test suite // Skip HTML validation if running a different subset of the test suite
if (runSubset('validate-html') && if (runSubset('validate-html') &&
...@@ -430,18 +364,18 @@ module.exports = function (grunt) { ...@@ -430,18 +364,18 @@ module.exports = function (grunt) {
// Only run Sauce Labs tests if there's a Sauce access key // Only run Sauce Labs tests if there's a Sauce access key
if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' && if (typeof process.env.SAUCE_ACCESS_KEY !== 'undefined' &&
// Skip Sauce if running a different subset of the test suite // Skip Sauce if running a different subset of the test suite
runSubset('sauce-js-unit') && runSubset('sauce-js-unit')) {
// Skip Sauce on Travis when [skip sauce] is in the commit message testSubtasks = testSubtasks.concat(['dist', 'docs-css', 'docs-js', 'clean:docs', 'copy:docs', 'exec:upload-preview']);
isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) { // Skip Sauce on Travis when [skip sauce] is in the commit message
testSubtasks.push('babel:dev'); if (isUndefOrNonZero(process.env.TWBS_DO_SAUCE)) {
testSubtasks.push('connect'); testSubtasks.push('connect');
testSubtasks.push('saucelabs-qunit'); testSubtasks.push('saucelabs-qunit');
}
} }
grunt.registerTask('test', testSubtasks); grunt.registerTask('test', testSubtasks);
grunt.registerTask('test-js', ['eslint', 'jscs:core', 'jscs:test', 'jscs:grunt', 'qunit']);
// JS distribution task. // JS distribution task.
grunt.registerTask('dist-js', ['babel:dev', 'concat', 'babel:dist', 'stamp', 'uglify:core', 'commonjs']); grunt.registerTask('dist-js', ['babel:dev', 'concat', 'babel:dist', 'stamp', 'uglify:core']);
grunt.registerTask('test-scss', ['scsslint:core']); grunt.registerTask('test-scss', ['scsslint:core']);
...@@ -453,7 +387,7 @@ module.exports = function (grunt) { ...@@ -453,7 +387,7 @@ module.exports = function (grunt) {
// grunt.registerTask('sass-compile', ['sass:core', 'sass:extras', 'sass:docs']); // grunt.registerTask('sass-compile', ['sass:core', 'sass:extras', 'sass:docs']);
grunt.registerTask('sass-compile', ['sass:core', 'sass:docs']); grunt.registerTask('sass-compile', ['sass:core', 'sass:docs']);
grunt.registerTask('dist-css', ['sass-compile', 'postcss:core', 'cssmin:core', 'cssmin:docs']); grunt.registerTask('dist-css', ['sass-compile', 'exec:postcss', 'cssmin:core', 'cssmin:docs']);
// Full distribution task. // Full distribution task.
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'dist-js']); grunt.registerTask('dist', ['clean:dist', 'dist-css', 'dist-js']);
...@@ -461,22 +395,11 @@ module.exports = function (grunt) { ...@@ -461,22 +395,11 @@ module.exports = function (grunt) {
// Default task. // Default task.
grunt.registerTask('default', ['clean:dist', 'test']); grunt.registerTask('default', ['clean:dist', 'test']);
grunt.registerTask('commonjs', ['babel:umd', 'npm-js']);
grunt.registerTask('npm-js', 'Generate npm-js entrypoint module in dist dir.', function () {
var srcFiles = Object.keys(grunt.config.get('babel.umd.files')).map(function (filename) {
return './' + path.join('umd', path.basename(filename))
})
var destFilepath = 'dist/js/npm.js';
generateCommonJSModule(grunt, srcFiles, destFilepath);
});
// Docs task. // Docs task.
grunt.registerTask('docs-css', ['postcss:docs', 'postcss:examples', 'cssmin:docs']); grunt.registerTask('docs-css', ['cssmin:docs', 'exec:postcss-docs']);
grunt.registerTask('lint-docs-css', ['scsslint:docs']); grunt.registerTask('lint-docs-css', ['scsslint:docs']);
grunt.registerTask('docs-js', ['uglify:docsJs']); grunt.registerTask('docs-js', ['uglify:docsJs']);
grunt.registerTask('lint-docs-js', ['jscs:assets']); grunt.registerTask('docs', ['lint-docs-css', 'docs-css', 'docs-js', 'clean:docs', 'copy:docs']);
grunt.registerTask('docs', ['lint-docs-css', 'docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs']);
grunt.registerTask('docs-github', ['jekyll:github']); grunt.registerTask('docs-github', ['jekyll:github']);
grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress']); grunt.registerTask('prep-release', ['dist', 'docs', 'docs-github', 'compress']);
......
...@@ -5,7 +5,7 @@ Before opening an issue: ...@@ -5,7 +5,7 @@ Before opening an issue:
- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs - Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md) - Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
When asking general "how to" questons: When asking general "how to" questions:
- Please do not open an issue here - Please do not open an issue here
- Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community) - Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies) [![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap.svg)](https://david-dm.org/twbs/bootstrap#info=devDependencies)
[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue.svg)](https://atmospherejs.com/twbs/bootstrap) [![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) [![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-alpha2) [![NuGet](https://img.shields.io/nuget/vpre/bootstrap.svg)](https://www.nuget.org/packages/bootstrap/4.0.0-alpha3)
[![Selenium Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) [![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 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. 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.
...@@ -30,12 +30,12 @@ To get started, check out <http://getbootstrap.com>! ...@@ -30,12 +30,12 @@ To get started, check out <http://getbootstrap.com>!
Several quick start options are available: Several quick start options are available:
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.2.zip) - [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.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 [npm](https://www.npmjs.com): `npm install bootstrap@4.0.0-alpha.2` - Install with [npm](https://www.npmjs.com): `npm install bootstrap@4.0.0-alpha.3`
- Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap@=4.0.0-alpha.2` - Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap@=4.0.0-alpha.3`
- Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap` - Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`
- Install with [Bower](http://bower.io): `bower install bootstrap#v4.0.0-alpha.2` - Install with [Bower](http://bower.io): `bower install bootstrap#v4.0.0-alpha.3`
- 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). - 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](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
......
...@@ -23,13 +23,13 @@ gems: ...@@ -23,13 +23,13 @@ gems:
- jekyll-sitemap - jekyll-sitemap
# Custom vars # Custom vars
current_version: 4.0.0-alpha.2 current_version: 4.0.0-alpha.3
repo: https://github.com/twbs/bootstrap repo: https://github.com/twbs/bootstrap
slack: https://bootstrap-slack.herokuapp.com slack: https://bootstrap-slack.herokuapp.com
download: download:
source: https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.2.zip source: https://github.com/twbs/bootstrap/archive/v4.0.0-alpha.3.zip
dist: https://github.com/twbs/bootstrap/releases/download/v4.0.0-alpha.2/bootstrap-4.0.0-alpha.2-dist.zip dist: https://github.com/twbs/bootstrap/releases/download/v4.0.0-alpha.3/bootstrap-4.0.0-alpha.3-dist.zip
blog: http://blog.getbootstrap.com blog: http://blog.getbootstrap.com
expo: http://expo.getbootstrap.com expo: http://expo.getbootstrap.com
...@@ -37,11 +37,11 @@ themes: http://themes.getbootstrap.com ...@@ -37,11 +37,11 @@ themes: http://themes.getbootstrap.com
cdn: cdn:
# See https://www.srihash.org for info on how to generate the hashes # See https://www.srihash.org for info on how to generate the hashes
css: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css css: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/css/bootstrap.min.css
css_hash: "sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" css_hash: "sha384-MIwDKRSSImVFAZCVLtU0LMDdON6KVCrZHyVQQj6e8wIEJkW4tvwqXrbMIya1vriY"
js: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js js: https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.3/js/bootstrap.min.js
js_hash: "sha384-vZ2WRJMwsjRMW/8U7i6PWi6AlO1L79snBrmgiDpgIWJ82z8eA5lenwvxbMV1PAh7" js_hash: "sha384-ux8v3A6CPtOTqOzMKiuo3d/DomGaaClxFYdCu2HPMBEkf6x2xiDyJ7gkXU0MWwaD"
jquery: https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js jquery: https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js
jquery_hash: "sha384-mXQoED/lFIuocc//nss8aJOIrz7X7XruhR6bO+sGceiSyMELoVdZkN7F0oYwcFH+" jquery_hash: "sha384-THPy051/pYDQGanwU6poAc/hOdQxjnOEXzbT+OuUAFqNqFjL+4IGLBgCJC3ZOShY"
tether: https://cdnjs.cloudflare.com/ajax/libs/tether/1.2.0/js/tether.min.js tether: https://cdnjs.cloudflare.com/ajax/libs/tether/1.2.0/js/tether.min.js
tether_hash: "sha384-Plbmg8JY28KFelvJVai01l8WyZzrYWG825m+cZ0eDDS1f7d/js6ikvy1+X+guPIB" tether_hash: "sha384-Plbmg8JY28KFelvJVai01l8WyZzrYWG825m+cZ0eDDS1f7d/js6ikvy1+X+guPIB"
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
"test-infra" "test-infra"
], ],
"dependencies": { "dependencies": {
"jquery": "1.9.1 - 2", "jquery": "1.9.1 - 3",
"tether": "^1.1.1" "tether": "^1.1.1"
} }
} }
/*! /*!
* Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) * Bootstrap v4.0.0-alpha.3 (http://getbootstrap.com)
* Copyright 2011-2016 The Bootstrap Authors
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
...@@ -320,7 +321,7 @@ html { ...@@ -320,7 +321,7 @@ html {
} }
body { body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 1rem; font-size: 1rem;
line-height: 1.5; line-height: 1.5;
color: #373a3c; color: #373a3c;
...@@ -391,22 +392,21 @@ a:focus, a:hover { ...@@ -391,22 +392,21 @@ a:focus, a:hover {
} }
a:focus { a:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color; outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px; outline-offset: -2px;
} }
a:not([href]) { a:not([href]):not([tabindex]) {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
} }
a:not([href]):focus, a:not([href]):hover { a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
} }
a:not([href]):focus { a:not([href]):not([tabindex]):focus {
outline: none; outline: none;
} }
...@@ -811,110 +811,69 @@ pre code { ...@@ -811,110 +811,69 @@ pre code {
clear: both; clear: both;
} }
.col-xs-1 { .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 {
position: relative; position: relative;
min-height: 1px; min-height: 1px;
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
}
.col-xs-1 {
float: left; float: left;
width: 8.333333%; width: 8.333333%;
} }
.col-xs-2 { .col-xs-2 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 16.666667%; width: 16.666667%;
} }
.col-xs-3 { .col-xs-3 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 25%; width: 25%;
} }
.col-xs-4 { .col-xs-4 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 33.333333%; width: 33.333333%;
} }
.col-xs-5 { .col-xs-5 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 41.666667%; width: 41.666667%;
} }
.col-xs-6 { .col-xs-6 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 50%; width: 50%;
} }
.col-xs-7 { .col-xs-7 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 58.333333%; width: 58.333333%;
} }
.col-xs-8 { .col-xs-8 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 66.666667%; width: 66.666667%;
} }
.col-xs-9 { .col-xs-9 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 75%; width: 75%;
} }
.col-xs-10 { .col-xs-10 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 83.333333%; width: 83.333333%;
} }
.col-xs-11 { .col-xs-11 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 91.666667%; width: 91.666667%;
} }
.col-xs-12 { .col-xs-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 100%; width: 100%;
} }
...@@ -1069,98 +1028,50 @@ pre code { ...@@ -1069,98 +1028,50 @@ pre code {
@media (min-width: 544px) { @media (min-width: 544px) {
.col-sm-1 { .col-sm-1 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 8.333333%; width: 8.333333%;
} }
.col-sm-2 { .col-sm-2 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 16.666667%; width: 16.666667%;
} }
.col-sm-3 { .col-sm-3 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 25%; width: 25%;
} }
.col-sm-4 { .col-sm-4 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 33.333333%; width: 33.333333%;
} }
.col-sm-5 { .col-sm-5 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 41.666667%; width: 41.666667%;
} }
.col-sm-6 { .col-sm-6 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 50%; width: 50%;
} }
.col-sm-7 { .col-sm-7 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 58.333333%; width: 58.333333%;
} }
.col-sm-8 { .col-sm-8 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 66.666667%; width: 66.666667%;
} }
.col-sm-9 { .col-sm-9 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 75%; width: 75%;
} }
.col-sm-10 { .col-sm-10 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 83.333333%; width: 83.333333%;
} }
.col-sm-11 { .col-sm-11 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 91.666667%; width: 91.666667%;
} }
.col-sm-12 { .col-sm-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 100%; width: 100%;
} }
...@@ -1282,98 +1193,50 @@ pre code { ...@@ -1282,98 +1193,50 @@ pre code {
@media (min-width: 768px) { @media (min-width: 768px) {
.col-md-1 { .col-md-1 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 8.333333%; width: 8.333333%;
} }
.col-md-2 { .col-md-2 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 16.666667%; width: 16.666667%;
} }
.col-md-3 { .col-md-3 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 25%; width: 25%;
} }
.col-md-4 { .col-md-4 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 33.333333%; width: 33.333333%;
} }
.col-md-5 { .col-md-5 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 41.666667%; width: 41.666667%;
} }
.col-md-6 { .col-md-6 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 50%; width: 50%;
} }
.col-md-7 { .col-md-7 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 58.333333%; width: 58.333333%;
} }
.col-md-8 { .col-md-8 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 66.666667%; width: 66.666667%;
} }
.col-md-9 { .col-md-9 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 75%; width: 75%;
} }
.col-md-10 { .col-md-10 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 83.333333%; width: 83.333333%;
} }
.col-md-11 { .col-md-11 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 91.666667%; width: 91.666667%;
} }
.col-md-12 { .col-md-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 100%; width: 100%;
} }
...@@ -1495,98 +1358,50 @@ pre code { ...@@ -1495,98 +1358,50 @@ pre code {
@media (min-width: 992px) { @media (min-width: 992px) {
.col-lg-1 { .col-lg-1 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 8.333333%; width: 8.333333%;
} }
.col-lg-2 { .col-lg-2 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 16.666667%; width: 16.666667%;
} }
.col-lg-3 { .col-lg-3 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 25%; width: 25%;
} }
.col-lg-4 { .col-lg-4 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 33.333333%; width: 33.333333%;
} }
.col-lg-5 { .col-lg-5 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 41.666667%; width: 41.666667%;
} }
.col-lg-6 { .col-lg-6 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 50%; width: 50%;
} }
.col-lg-7 { .col-lg-7 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 58.333333%; width: 58.333333%;
} }
.col-lg-8 { .col-lg-8 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 66.666667%; width: 66.666667%;
} }
.col-lg-9 { .col-lg-9 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 75%; width: 75%;
} }
.col-lg-10 { .col-lg-10 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 83.333333%; width: 83.333333%;
} }
.col-lg-11 { .col-lg-11 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 91.666667%; width: 91.666667%;
} }
.col-lg-12 { .col-lg-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 100%; width: 100%;
} }
...@@ -1708,98 +1523,50 @@ pre code { ...@@ -1708,98 +1523,50 @@ pre code {
@media (min-width: 1200px) { @media (min-width: 1200px) {
.col-xl-1 { .col-xl-1 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 8.333333%; width: 8.333333%;
} }
.col-xl-2 { .col-xl-2 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 16.666667%; width: 16.666667%;
} }
.col-xl-3 { .col-xl-3 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 25%; width: 25%;
} }
.col-xl-4 { .col-xl-4 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 33.333333%; width: 33.333333%;
} }
.col-xl-5 { .col-xl-5 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 41.666667%; width: 41.666667%;
} }
.col-xl-6 { .col-xl-6 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 50%; width: 50%;
} }
.col-xl-7 { .col-xl-7 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 58.333333%; width: 58.333333%;
} }
.col-xl-8 { .col-xl-8 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 66.666667%; width: 66.666667%;
} }
.col-xl-9 { .col-xl-9 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 75%; width: 75%;
} }
.col-xl-10 { .col-xl-10 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 83.333333%; width: 83.333333%;
} }
.col-xl-11 { .col-xl-11 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 91.666667%; width: 91.666667%;
} }
.col-xl-12 { .col-xl-12 {
position: relative;
min-height: 1px;
padding-right: 15px;
padding-left: 15px;
float: left; float: left;
width: 100%; width: 100%;
} }
...@@ -2491,7 +2258,6 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for ...@@ -2491,7 +2258,6 @@ select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.for
} }
.btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus { .btn:focus, .btn.focus, .btn:active:focus, .btn:active.focus, .btn.active:focus, .btn.active.focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color; outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px; outline-offset: -2px;
} }
...@@ -4046,24 +3812,6 @@ input[type="button"].btn-block { ...@@ -4046,24 +3812,6 @@ input[type="button"].btn-block {
text-decoration: none; text-decoration: none;
} }
@media (min-width: 544px) {
.navbar-toggleable-xs {
display: block !important;
}
}
@media (min-width: 768px) {
.navbar-toggleable-sm {
display: block !important;
}
}
@media (min-width: 992px) {
.navbar-toggleable-md {
display: block !important;
}
}
.navbar-nav .nav-item { .navbar-nav .nav-item {
float: left; float: left;
} }
...@@ -4148,6 +3896,63 @@ input[type="button"].btn-block { ...@@ -4148,6 +3896,63 @@ input[type="button"].btn-block {
background-color: rgba(255, 255, 255, 0.075); background-color: rgba(255, 255, 255, 0.075);
} }
.navbar-toggleable-xs::after {
content: "";
display: table;
clear: both;
}
@media (max-width: 543px) {
.navbar-toggleable-xs .navbar-nav .nav-item {
float: none;
margin-left: 0;
}
}
@media (min-width: 544px) {
.navbar-toggleable-xs {
display: block !important;
}
}
.navbar-toggleable-sm::after {
content: "";
display: table;
clear: both;
}
@media (max-width: 767px) {
.navbar-toggleable-sm .navbar-nav .nav-item {
float: none;
margin-left: 0;
}
}
@media (min-width: 768px) {
.navbar-toggleable-sm {
display: block !important;
}
}
.navbar-toggleable-md::after {
content: "";
display: table;
clear: both;
}
@media (max-width: 991px) {
.navbar-toggleable-md .navbar-nav .nav-item {
float: none;
margin-left: 0;
}
}
@media (min-width: 992px) {
.navbar-toggleable-md {
display: block !important;
}
}
.card { .card {
position: relative; position: relative;
display: block; display: block;
...@@ -5454,7 +5259,7 @@ button.close { ...@@ -5454,7 +5259,7 @@ button.close {
position: absolute; position: absolute;
z-index: 1070; z-index: 1070;
display: block; display: block;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-style: normal; font-style: normal;
font-weight: normal; font-weight: normal;
letter-spacing: normal; letter-spacing: normal;
...@@ -5554,7 +5359,7 @@ button.close { ...@@ -5554,7 +5359,7 @@ button.close {
display: block; display: block;
max-width: 276px; max-width: 276px;
padding: 1px; padding: 1px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-style: normal; font-style: normal;
font-weight: normal; font-weight: normal;
letter-spacing: normal; letter-spacing: normal;
...@@ -5666,6 +5471,10 @@ button.close { ...@@ -5666,6 +5471,10 @@ button.close {
border-radius: 0.2375rem 0.2375rem 0 0; border-radius: 0.2375rem 0.2375rem 0 0;
} }
.popover-title:empty {
display: none;
}
.popover-content { .popover-content {
padding: 9px 14px; padding: 9px 14px;
} }
...@@ -5921,10 +5730,6 @@ button.close { ...@@ -5921,10 +5730,6 @@ button.close {
} }
} }
.bg-inverse {
background-color: #373a3c;
}
.bg-faded { .bg-faded {
background-color: #f7f7f9; background-color: #f7f7f9;
} }
...@@ -5974,6 +5779,15 @@ a.bg-danger:focus, a.bg-danger:hover { ...@@ -5974,6 +5779,15 @@ a.bg-danger:focus, a.bg-danger:hover {
background-color: #c9302c !important; background-color: #c9302c !important;
} }
.bg-inverse {
color: #fff !important;
background-color: #373a3c !important;
}
a.bg-inverse:focus, a.bg-inverse:hover {
background-color: #1f2021 !important;
}
.clearfix::after { .clearfix::after {
content: ""; content: "";
display: table; display: table;
......
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
This diff is collapsed.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
/*! /*!
* Bootstrap v4.0.0-alpha.2 (http://getbootstrap.com) * Bootstrap v4.0.0-alpha.3 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc. * Copyright 2011-2016 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
...@@ -10,8 +10,8 @@ if (typeof jQuery === 'undefined') { ...@@ -10,8 +10,8 @@ if (typeof jQuery === 'undefined') {
+function ($) { +function ($) {
var version = $.fn.jquery.split(' ')[0].split('.') var version = $.fn.jquery.split(' ')[0].split('.')
if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 3)) { if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] >= 4)) {
throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v3.0.0') throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')
} }
}(jQuery); }(jQuery);
...@@ -20,7 +20,7 @@ if (typeof jQuery === 'undefined') { ...@@ -20,7 +20,7 @@ if (typeof jQuery === 'undefined') {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): util.js * Bootstrap (v4.0.0-alpha.3): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -45,6 +45,8 @@ var Util = (function ($) { ...@@ -45,6 +45,8 @@ var Util = (function ($) {
var transition = false; var transition = false;
var MAX_UID = 1000000;
var TransitionEndEvent = { var TransitionEndEvent = {
WebkitTransition: 'webkitTransitionEnd', WebkitTransition: 'webkitTransitionEnd',
MozTransition: 'transitionend', MozTransition: 'transitionend',
...@@ -67,8 +69,9 @@ var Util = (function ($) { ...@@ -67,8 +69,9 @@ var Util = (function ($) {
delegateType: transition.end, delegateType: transition.end,
handle: function handle(event) { handle: function handle(event) {
if ($(event.target).is(this)) { if ($(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments); return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
} }
return undefined;
} }
}; };
} }
...@@ -130,7 +133,7 @@ var Util = (function ($) { ...@@ -130,7 +133,7 @@ var Util = (function ($) {
getUID: function getUID(prefix) { getUID: function getUID(prefix) {
do { do {
/* eslint-disable no-bitwise */ /* eslint-disable no-bitwise */
prefix += ~ ~(Math.random() * 1000000); // "~~" acts like a faster Math.floor() here prefix += ~ ~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
/* eslint-enable no-bitwise */ /* eslint-enable no-bitwise */
} while (document.getElementById(prefix)); } while (document.getElementById(prefix));
return prefix; return prefix;
...@@ -187,7 +190,7 @@ var Util = (function ($) { ...@@ -187,7 +190,7 @@ var Util = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): alert.js * Bootstrap (v4.0.0-alpha.3): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -201,7 +204,7 @@ var Alert = (function ($) { ...@@ -201,7 +204,7 @@ var Alert = (function ($) {
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
...@@ -373,7 +376,7 @@ var Alert = (function ($) { ...@@ -373,7 +376,7 @@ var Alert = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): button.js * Bootstrap (v4.0.0-alpha.3): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -387,7 +390,7 @@ var Button = (function ($) { ...@@ -387,7 +390,7 @@ var Button = (function ($) {
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
...@@ -541,7 +544,7 @@ var Button = (function ($) { ...@@ -541,7 +544,7 @@ var Button = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): carousel.js * Bootstrap (v4.0.0-alpha.3): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -555,12 +558,14 @@ var Carousel = (function ($) { ...@@ -555,12 +558,14 @@ var Carousel = (function ($) {
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME]; var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 600; var TRANSITION_DURATION = 600;
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
var Default = { var Default = {
interval: 5000, interval: 5000,
...@@ -776,10 +781,12 @@ var Carousel = (function ($) { ...@@ -776,10 +781,12 @@ var Carousel = (function ($) {
} }
switch (event.which) { switch (event.which) {
case 37: case ARROW_LEFT_KEYCODE:
this.prev();break; this.prev();
case 39: break;
this.next();break; case ARROW_RIGHT_KEYCODE:
this.next();
break;
default: default:
return; return;
} }
...@@ -1013,7 +1020,7 @@ var Carousel = (function ($) { ...@@ -1013,7 +1020,7 @@ var Carousel = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): collapse.js * Bootstrap (v4.0.0-alpha.3): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -1027,7 +1034,7 @@ var Collapse = (function ($) { ...@@ -1027,7 +1034,7 @@ var Collapse = (function ($) {
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
...@@ -1371,7 +1378,7 @@ var Collapse = (function ($) { ...@@ -1371,7 +1378,7 @@ var Collapse = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): dropdown.js * Bootstrap (v4.0.0-alpha.3): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -1385,11 +1392,15 @@ var Dropdown = (function ($) { ...@@ -1385,11 +1392,15 @@ var Dropdown = (function ($) {
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME]; var JQUERY_NO_CONFLICT = $.fn[NAME];
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
var Event = { var Event = {
HIDE: 'hide' + EVENT_KEY, HIDE: 'hide' + EVENT_KEY,
...@@ -1524,7 +1535,7 @@ var Dropdown = (function ($) { ...@@ -1524,7 +1535,7 @@ var Dropdown = (function ($) {
}, { }, {
key: '_clearMenus', key: '_clearMenus',
value: function _clearMenus(event) { value: function _clearMenus(event) {
if (event && event.which === 3) { if (event && event.which === RIGHT_MOUSE_BUTTON_WHICH) {
return; return;
} }
...@@ -1587,9 +1598,9 @@ var Dropdown = (function ($) { ...@@ -1587,9 +1598,9 @@ var Dropdown = (function ($) {
var parent = Dropdown._getParentFromElement(this); var parent = Dropdown._getParentFromElement(this);
var isActive = $(parent).hasClass(ClassName.OPEN); var isActive = $(parent).hasClass(ClassName.OPEN);
if (!isActive && event.which !== 27 || isActive && event.which === 27) { if (!isActive && event.which !== ESCAPE_KEYCODE || isActive && event.which === ESCAPE_KEYCODE) {
if (event.which === 27) { if (event.which === ESCAPE_KEYCODE) {
var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];
$(toggle).trigger('focus'); $(toggle).trigger('focus');
} }
...@@ -1610,12 +1621,12 @@ var Dropdown = (function ($) { ...@@ -1610,12 +1621,12 @@ var Dropdown = (function ($) {
var index = items.indexOf(event.target); var index = items.indexOf(event.target);
if (event.which === 38 && index > 0) { if (event.which === ARROW_UP_KEYCODE && index > 0) {
// up // up
index--; index--;
} }
if (event.which === 40 && index < items.length - 1) { if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
// down // down
index++; index++;
} }
...@@ -1658,7 +1669,7 @@ var Dropdown = (function ($) { ...@@ -1658,7 +1669,7 @@ var Dropdown = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): modal.js * Bootstrap (v4.0.0-alpha.3): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -1672,13 +1683,14 @@ var Modal = (function ($) { ...@@ -1672,13 +1683,14 @@ var Modal = (function ($) {
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME]; var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 300; var TRANSITION_DURATION = 300;
var BACKDROP_TRANSITION_DURATION = 150; var BACKDROP_TRANSITION_DURATION = 150;
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var Default = { var Default = {
backdrop: true, backdrop: true,
...@@ -1874,6 +1886,7 @@ var Modal = (function ($) { ...@@ -1874,6 +1886,7 @@ var Modal = (function ($) {
} }
this._element.style.display = 'block'; this._element.style.display = 'block';
this._element.removeAttribute('aria-hidden');
this._element.scrollTop = 0; this._element.scrollTop = 0;
if (transition) { if (transition) {
...@@ -1922,7 +1935,7 @@ var Modal = (function ($) { ...@@ -1922,7 +1935,7 @@ var Modal = (function ($) {
if (this._isShown && this._config.keyboard) { if (this._isShown && this._config.keyboard) {
$(this._element).on(Event.KEYDOWN_DISMISS, function (event) { $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
if (event.which === 27) { if (event.which === ESCAPE_KEYCODE) {
_this10.hide(); _this10.hide();
} }
}); });
...@@ -1945,6 +1958,7 @@ var Modal = (function ($) { ...@@ -1945,6 +1958,7 @@ var Modal = (function ($) {
var _this11 = this; var _this11 = this;
this._element.style.display = 'none'; this._element.style.display = 'none';
this._element.setAttribute('aria-hidden', 'true');
this._showBackdrop(function () { this._showBackdrop(function () {
$(document.body).removeClass(ClassName.OPEN); $(document.body).removeClass(ClassName.OPEN);
_this11._resetAdjustments(); _this11._resetAdjustments();
...@@ -2050,7 +2064,7 @@ var Modal = (function ($) { ...@@ -2050,7 +2064,7 @@ var Modal = (function ($) {
} }
if (this._isBodyOverflowing && !isModalOverflowing) { if (this._isBodyOverflowing && !isModalOverflowing) {
this._element.style.paddingRight = this._scrollbarWidth + 'px~'; this._element.style.paddingRight = this._scrollbarWidth + 'px';
} }
} }
}, { }, {
...@@ -2182,7 +2196,7 @@ var Modal = (function ($) { ...@@ -2182,7 +2196,7 @@ var Modal = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): scrollspy.js * Bootstrap (v4.0.0-alpha.3): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -2196,7 +2210,7 @@ var ScrollSpy = (function ($) { ...@@ -2196,7 +2210,7 @@ var ScrollSpy = (function ($) {
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
...@@ -2311,6 +2325,7 @@ var ScrollSpy = (function ($) { ...@@ -2311,6 +2325,7 @@ var ScrollSpy = (function ($) {
// todo (fat): remove sketch reliance on jQuery position/offset // todo (fat): remove sketch reliance on jQuery position/offset
return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
} }
return null;
}).filter(function (item) { }).filter(function (item) {
return item; return item;
}).sort(function (a, b) { }).sort(function (a, b) {
...@@ -2496,7 +2511,7 @@ var ScrollSpy = (function ($) { ...@@ -2496,7 +2511,7 @@ var ScrollSpy = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): tab.js * Bootstrap (v4.0.0-alpha.3): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -2510,7 +2525,7 @@ var Tab = (function ($) { ...@@ -2510,7 +2525,7 @@ var Tab = (function ($) {
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
...@@ -2755,7 +2770,7 @@ var Tab = (function ($) { ...@@ -2755,7 +2770,7 @@ var Tab = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): tooltip.js * Bootstrap (v4.0.0-alpha.3): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -2777,7 +2792,7 @@ var Tooltip = (function ($) { ...@@ -2777,7 +2792,7 @@ var Tooltip = (function ($) {
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME]; var JQUERY_NO_CONFLICT = $.fn[NAME];
...@@ -3366,7 +3381,7 @@ var Tooltip = (function ($) { ...@@ -3366,7 +3381,7 @@ var Tooltip = (function ($) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): popover.js * Bootstrap (v4.0.0-alpha.3): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
...@@ -3380,7 +3395,7 @@ var Popover = (function ($) { ...@@ -3380,7 +3395,7 @@ var Popover = (function ($) {
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0-alpha.2'; var VERSION = '4.0.0-alpha.3';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = '.' + DATA_KEY; var EVENT_KEY = '.' + DATA_KEY;
var JQUERY_NO_CONFLICT = $.fn[NAME]; var JQUERY_NO_CONFLICT = $.fn[NAME];
......
This diff is collapsed.
// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
require('./umd/util.js')
require('./umd/alert.js')
require('./umd/button.js')
require('./umd/carousel.js')
require('./umd/collapse.js')
require('./umd/dropdown.js')
require('./umd/modal.js')
require('./umd/scrollspy.js')
require('./umd/tab.js')
require('./umd/tooltip.js')
require('./umd/popover.js')
\ No newline at end of file
(function (global, factory) {
if (typeof define === 'function' && define.amd) {
define(['exports', 'module', './util'], factory);
} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
factory(exports, module, require('./util'));
} else {
var mod = {
exports: {}
};
factory(mod.exports, mod, global.Util);
global.alert = mod.exports;
}
})(this, function (exports, module, _util) {
'use strict';
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var _Util = _interopRequireDefault(_util);
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var Alert = (function ($) {
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
var VERSION = '4.0.0-alpha.2';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var TRANSITION_DURATION = 150;
var Selector = {
DISMISS: '[data-dismiss="alert"]'
};
var Event = {
CLOSE: 'close' + EVENT_KEY,
CLOSED: 'closed' + EVENT_KEY,
CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY
};
var ClassName = {
ALERT: 'alert',
FADE: 'fade',
IN: 'in'
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Alert = (function () {
function Alert(element) {
_classCallCheck(this, Alert);
this._element = element;
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
// getters
_createClass(Alert, [{
key: 'close',
// public
value: function close(element) {
element = element || this._element;
var rootElement = this._getRootElement(element);
var customEvent = this._triggerCloseEvent(rootElement);
if (customEvent.isDefaultPrevented()) {
return;
}
this._removeElement(rootElement);
}
}, {
key: 'dispose',
value: function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}
// private
}, {
key: '_getRootElement',
value: function _getRootElement(element) {
var selector = _Util['default'].getSelectorFromElement(element);
var parent = false;
if (selector) {
parent = $(selector)[0];
}
if (!parent) {
parent = $(element).closest('.' + ClassName.ALERT)[0];
}
return parent;
}
}, {
key: '_triggerCloseEvent',
value: function _triggerCloseEvent(element) {
var closeEvent = $.Event(Event.CLOSE);
$(element).trigger(closeEvent);
return closeEvent;
}
}, {
key: '_removeElement',
value: function _removeElement(element) {
$(element).removeClass(ClassName.IN);
if (!_Util['default'].supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {
this._destroyElement(element);
return;
}
$(element).one(_Util['default'].TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION);
}
}, {
key: '_destroyElement',
value: function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove();
}
// static
}], [{
key: '_jQueryInterface',
value: function _jQueryInterface(config) {
return this.each(function () {
var $element = $(this);
var data = $element.data(DATA_KEY);
if (!data) {
data = new Alert(this);
$element.data(DATA_KEY, data);
}
if (config === 'close') {
data[config](this);
}
});
}
}, {
key: '_handleDismiss',
value: function _handleDismiss(alertInstance) {
return function (event) {
if (event) {
event.preventDefault();
}
alertInstance.close(this);
};
}
}, {
key: 'VERSION',
get: function get() {
return VERSION;
}
}]);
return Alert;
})();
$(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Alert._jQueryInterface;
$.fn[NAME].Constructor = Alert;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Alert._jQueryInterface;
};
return Alert;
})(jQuery);
module.exports = Alert;
});
(function (global, factory) {
if (typeof define === 'function' && define.amd) {
define(['exports', 'module'], factory);
} else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
factory(exports, module);
} else {
var mod = {
exports: {}
};
factory(mod.exports, mod);
global.button = mod.exports;
}
})(this, function (exports, module) {
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.2): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
'use strict';
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var Button = (function ($) {
/**
* ------------------------------------------------------------------------
* Constants
* ------------------------------------------------------------------------
*/
var NAME = 'button';
var VERSION = '4.0.0-alpha.2';
var DATA_KEY = 'bs.button';
var EVENT_KEY = '.' + DATA_KEY;
var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $.fn[NAME];
var ClassName = {
ACTIVE: 'active',
BUTTON: 'btn',
FOCUS: 'focus'
};
var Selector = {
DATA_TOGGLE_CARROT: '[data-toggle^="button"]',
DATA_TOGGLE: '[data-toggle="buttons"]',
INPUT: 'input',
ACTIVE: '.active',
BUTTON: '.btn'
};
var Event = {
CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY,
FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY)
};
/**
* ------------------------------------------------------------------------
* Class Definition
* ------------------------------------------------------------------------
*/
var Button = (function () {
function Button(element) {
_classCallCheck(this, Button);
this._element = element;
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
// getters
_createClass(Button, [{
key: 'toggle',
// public
value: function toggle() {
var triggerChangeEvent = true;
var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];
if (rootElement) {
var input = $(this._element).find(Selector.INPUT)[0];
if (input) {
if (input.type === 'radio') {
if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {
triggerChangeEvent = false;
} else {
var activeElement = $(rootElement).find(Selector.ACTIVE)[0];
if (activeElement) {
$(activeElement).removeClass(ClassName.ACTIVE);
}
}
}
if (triggerChangeEvent) {
input.checked = !$(this._element).hasClass(ClassName.ACTIVE);
$(this._element).trigger('change');
}
input.focus();
}
} else {
this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));
}
if (triggerChangeEvent) {
$(this._element).toggleClass(ClassName.ACTIVE);
}
}
}, {
key: 'dispose',
value: function dispose() {
$.removeData(this._element, DATA_KEY);
this._element = null;
}
// static
}], [{
key: '_jQueryInterface',
value: function _jQueryInterface(config) {
return this.each(function () {
var data = $(this).data(DATA_KEY);
if (!data) {
data = new Button(this);
$(this).data(DATA_KEY, data);
}
if (config === 'toggle') {
data[config]();
}
});
}
}, {
key: 'VERSION',
get: function get() {
return VERSION;
}
}]);
return Button;
})();
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
event.preventDefault();
var button = event.target;
if (!$(button).hasClass(ClassName.BUTTON)) {
button = $(button).closest(Selector.BUTTON);
}
Button._jQueryInterface.call($(button), 'toggle');
}).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {
var button = $(event.target).closest(Selector.BUTTON)[0];
$(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));
});
/**
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
*/
$.fn[NAME] = Button._jQueryInterface;
$.fn[NAME].Constructor = Button;
$.fn[NAME].noConflict = function () {
$.fn[NAME] = JQUERY_NO_CONFLICT;
return Button._jQueryInterface;
};
return Button;
})(jQuery);
module.exports = Button;
});
Supports Markdown
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