0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-01-29 21:52:22 +01:00

Merge pull request #3 from twbs/v4-dev

update from official repo
This commit is contained in:
Gijs Boddeus 2017-08-25 23:29:40 +02:00 committed by GitHub
commit 4356d08abb
70 changed files with 1041 additions and 556 deletions

View File

@ -70,5 +70,5 @@ cdn:
js_hash: "sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" js_hash: "sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1"
jquery: "https://code.jquery.com/jquery-3.2.1.slim.min.js" jquery: "https://code.jquery.com/jquery-3.2.1.slim.min.js"
jquery_hash: "sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" jquery_hash: "sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
popper: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" popper: "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"
popper_hash: "sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" popper_hash: "sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh"

View File

@ -23,6 +23,8 @@
{% endif %} {% endif %}
<link href="{{ site.baseurl }}/assets/css/docs.min.css" rel="stylesheet"> <link href="{{ site.baseurl }}/assets/css/docs.min.css" rel="stylesheet">
{% include favicons.html %}
{% include social.html %} {% include social.html %}
<script> <script>

View File

@ -1,7 +1,8 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en-US"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Bootstrap - Content moved</title> <title>Bootstrap - Content moved</title>
<link rel="canonical" href="{{ page.redirect.to }}"> <link rel="canonical" href="{{ page.redirect.to }}">
<meta http-equiv="refresh" content="0; url={{ page.redirect.to }}"> <meta http-equiv="refresh" content="0; url={{ page.redirect.to }}">
@ -31,6 +32,6 @@
<body> <body>
<h1>Redirecting…</h1> <h1>Redirecting…</h1>
<a href="{{ page.redirect.to }}">Click here if you are not redirected</a> <a href="{{ page.redirect.to }}">Click here if you are not redirected</a>
<script>location="{{ page.redirect.to }}"</script> <script>window.location="{{ page.redirect.to }}";</script>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@ -27,7 +27,7 @@
// IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx // IE JavaScript conditional compilation docs: https://msdn.microsoft.com/library/121hztk3%28v=vs.94%29.aspx
// @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx // @cc_on docs: https://msdn.microsoft.com/library/8ka90k2e%28v=vs.94%29.aspx
var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // eslint-disable-line no-new-func var jscriptVersion = new Function('/*@cc_on return @_jscript_version; @*/')() // eslint-disable-line no-new-func
if (jscriptVersion === undefined) { if (typeof jscriptVersion === 'undefined') {
return 11 // IE11+ not in emulation mode return 11 // IE11+ not in emulation mode
} }
if (jscriptVersion < 9) { if (jscriptVersion < 9) {

File diff suppressed because one or more lines are too long

View File

@ -31,7 +31,7 @@
"Gruntfile.js" "Gruntfile.js"
], ],
"dependencies": { "dependencies": {
"jquery": ">=1.9.1", "jquery": ">=3.0.0",
"popper.js": "^1.11.0" "popper.js": "^1.12.3"
} }
} }

View File

@ -21,8 +21,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] >= 4)) { if ((version[0] < 3) || (version[0] >= 4)) {
throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0') throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v3.0.0 but less than v4.0.0')
} }
})(jQuery); })(jQuery);

View File

@ -233,6 +233,50 @@ html {
order: 12; order: 12;
} }
.offset-1 {
margin-left: 8.333333%;
}
.offset-2 {
margin-left: 16.666667%;
}
.offset-3 {
margin-left: 25%;
}
.offset-4 {
margin-left: 33.333333%;
}
.offset-5 {
margin-left: 41.666667%;
}
.offset-6 {
margin-left: 50%;
}
.offset-7 {
margin-left: 58.333333%;
}
.offset-8 {
margin-left: 66.666667%;
}
.offset-9 {
margin-left: 75%;
}
.offset-10 {
margin-left: 83.333333%;
}
.offset-11 {
margin-left: 91.666667%;
}
@media (min-width: 576px) { @media (min-width: 576px) {
.col-sm { .col-sm {
-ms-flex-preferred-size: 0; -ms-flex-preferred-size: 0;
@ -355,6 +399,42 @@ html {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-sm-0 {
margin-left: 0%;
}
.offset-sm-1 {
margin-left: 8.333333%;
}
.offset-sm-2 {
margin-left: 16.666667%;
}
.offset-sm-3 {
margin-left: 25%;
}
.offset-sm-4 {
margin-left: 33.333333%;
}
.offset-sm-5 {
margin-left: 41.666667%;
}
.offset-sm-6 {
margin-left: 50%;
}
.offset-sm-7 {
margin-left: 58.333333%;
}
.offset-sm-8 {
margin-left: 66.666667%;
}
.offset-sm-9 {
margin-left: 75%;
}
.offset-sm-10 {
margin-left: 83.333333%;
}
.offset-sm-11 {
margin-left: 91.666667%;
}
} }
@media (min-width: 768px) { @media (min-width: 768px) {
@ -479,6 +559,42 @@ html {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-md-0 {
margin-left: 0%;
}
.offset-md-1 {
margin-left: 8.333333%;
}
.offset-md-2 {
margin-left: 16.666667%;
}
.offset-md-3 {
margin-left: 25%;
}
.offset-md-4 {
margin-left: 33.333333%;
}
.offset-md-5 {
margin-left: 41.666667%;
}
.offset-md-6 {
margin-left: 50%;
}
.offset-md-7 {
margin-left: 58.333333%;
}
.offset-md-8 {
margin-left: 66.666667%;
}
.offset-md-9 {
margin-left: 75%;
}
.offset-md-10 {
margin-left: 83.333333%;
}
.offset-md-11 {
margin-left: 91.666667%;
}
} }
@media (min-width: 992px) { @media (min-width: 992px) {
@ -603,6 +719,42 @@ html {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-lg-0 {
margin-left: 0%;
}
.offset-lg-1 {
margin-left: 8.333333%;
}
.offset-lg-2 {
margin-left: 16.666667%;
}
.offset-lg-3 {
margin-left: 25%;
}
.offset-lg-4 {
margin-left: 33.333333%;
}
.offset-lg-5 {
margin-left: 41.666667%;
}
.offset-lg-6 {
margin-left: 50%;
}
.offset-lg-7 {
margin-left: 58.333333%;
}
.offset-lg-8 {
margin-left: 66.666667%;
}
.offset-lg-9 {
margin-left: 75%;
}
.offset-lg-10 {
margin-left: 83.333333%;
}
.offset-lg-11 {
margin-left: 91.666667%;
}
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
@ -727,6 +879,42 @@ html {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-xl-0 {
margin-left: 0%;
}
.offset-xl-1 {
margin-left: 8.333333%;
}
.offset-xl-2 {
margin-left: 16.666667%;
}
.offset-xl-3 {
margin-left: 25%;
}
.offset-xl-4 {
margin-left: 33.333333%;
}
.offset-xl-5 {
margin-left: 41.666667%;
}
.offset-xl-6 {
margin-left: 50%;
}
.offset-xl-7 {
margin-left: 58.333333%;
}
.offset-xl-8 {
margin-left: 66.666667%;
}
.offset-xl-9 {
margin-left: 75%;
}
.offset-xl-10 {
margin-left: 83.333333%;
}
.offset-xl-11 {
margin-left: 91.666667%;
}
} }
.flex-row { .flex-row {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -816,6 +816,50 @@ pre code {
order: 12; order: 12;
} }
.offset-1 {
margin-left: 8.333333%;
}
.offset-2 {
margin-left: 16.666667%;
}
.offset-3 {
margin-left: 25%;
}
.offset-4 {
margin-left: 33.333333%;
}
.offset-5 {
margin-left: 41.666667%;
}
.offset-6 {
margin-left: 50%;
}
.offset-7 {
margin-left: 58.333333%;
}
.offset-8 {
margin-left: 66.666667%;
}
.offset-9 {
margin-left: 75%;
}
.offset-10 {
margin-left: 83.333333%;
}
.offset-11 {
margin-left: 91.666667%;
}
@media (min-width: 576px) { @media (min-width: 576px) {
.col-sm { .col-sm {
-ms-flex-preferred-size: 0; -ms-flex-preferred-size: 0;
@ -938,6 +982,42 @@ pre code {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-sm-0 {
margin-left: 0%;
}
.offset-sm-1 {
margin-left: 8.333333%;
}
.offset-sm-2 {
margin-left: 16.666667%;
}
.offset-sm-3 {
margin-left: 25%;
}
.offset-sm-4 {
margin-left: 33.333333%;
}
.offset-sm-5 {
margin-left: 41.666667%;
}
.offset-sm-6 {
margin-left: 50%;
}
.offset-sm-7 {
margin-left: 58.333333%;
}
.offset-sm-8 {
margin-left: 66.666667%;
}
.offset-sm-9 {
margin-left: 75%;
}
.offset-sm-10 {
margin-left: 83.333333%;
}
.offset-sm-11 {
margin-left: 91.666667%;
}
} }
@media (min-width: 768px) { @media (min-width: 768px) {
@ -1062,6 +1142,42 @@ pre code {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-md-0 {
margin-left: 0%;
}
.offset-md-1 {
margin-left: 8.333333%;
}
.offset-md-2 {
margin-left: 16.666667%;
}
.offset-md-3 {
margin-left: 25%;
}
.offset-md-4 {
margin-left: 33.333333%;
}
.offset-md-5 {
margin-left: 41.666667%;
}
.offset-md-6 {
margin-left: 50%;
}
.offset-md-7 {
margin-left: 58.333333%;
}
.offset-md-8 {
margin-left: 66.666667%;
}
.offset-md-9 {
margin-left: 75%;
}
.offset-md-10 {
margin-left: 83.333333%;
}
.offset-md-11 {
margin-left: 91.666667%;
}
} }
@media (min-width: 992px) { @media (min-width: 992px) {
@ -1186,6 +1302,42 @@ pre code {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-lg-0 {
margin-left: 0%;
}
.offset-lg-1 {
margin-left: 8.333333%;
}
.offset-lg-2 {
margin-left: 16.666667%;
}
.offset-lg-3 {
margin-left: 25%;
}
.offset-lg-4 {
margin-left: 33.333333%;
}
.offset-lg-5 {
margin-left: 41.666667%;
}
.offset-lg-6 {
margin-left: 50%;
}
.offset-lg-7 {
margin-left: 58.333333%;
}
.offset-lg-8 {
margin-left: 66.666667%;
}
.offset-lg-9 {
margin-left: 75%;
}
.offset-lg-10 {
margin-left: 83.333333%;
}
.offset-lg-11 {
margin-left: 91.666667%;
}
} }
@media (min-width: 1200px) { @media (min-width: 1200px) {
@ -1310,6 +1462,42 @@ pre code {
-ms-flex-order: 12; -ms-flex-order: 12;
order: 12; order: 12;
} }
.offset-xl-0 {
margin-left: 0%;
}
.offset-xl-1 {
margin-left: 8.333333%;
}
.offset-xl-2 {
margin-left: 16.666667%;
}
.offset-xl-3 {
margin-left: 25%;
}
.offset-xl-4 {
margin-left: 33.333333%;
}
.offset-xl-5 {
margin-left: 41.666667%;
}
.offset-xl-6 {
margin-left: 50%;
}
.offset-xl-7 {
margin-left: 58.333333%;
}
.offset-xl-8 {
margin-left: 66.666667%;
}
.offset-xl-9 {
margin-left: 75%;
}
.offset-xl-10 {
margin-left: 83.333333%;
}
.offset-xl-11 {
margin-left: 91.666667%;
}
} }
.table { .table {
@ -2385,7 +2573,7 @@ fieldset[disabled] a.btn {
} }
.btn-outline-light:hover { .btn-outline-light:hover {
color: #fff; color: #212529;
background-color: #f8f9fa; background-color: #f8f9fa;
border-color: #f8f9fa; border-color: #f8f9fa;
} }
@ -2401,7 +2589,7 @@ fieldset[disabled] a.btn {
.btn-outline-light:active, .btn-outline-light.active, .btn-outline-light:active, .btn-outline-light.active,
.show > .btn-outline-light.dropdown-toggle { .show > .btn-outline-light.dropdown-toggle {
color: #fff; color: #212529;
background-color: #f8f9fa; background-color: #f8f9fa;
border-color: #f8f9fa; border-color: #f8f9fa;
} }
@ -3678,6 +3866,10 @@ tbody.collapse.show {
border-bottom-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem;
} }
.card .card-header + .list-group > .list-group-item:first-child {
border-top: 0;
}
.card-header { .card-header {
padding: 0.75rem 1.25rem; padding: 0.75rem 1.25rem;
margin-bottom: 0; margin-bottom: 0;
@ -3787,9 +3979,9 @@ tbody.collapse.show {
.card-group .card { .card-group .card {
-ms-flex: 1 0 0%; -ms-flex: 1 0 0%;
flex: 1 0 0%; flex: 1 0 0%;
margin-bottom: 0;
} }
.card-group .card + .card { .card-group .card + .card {
margin-bottom: 0;
margin-left: 0; margin-left: 0;
border-left: 0; border-left: 0;
} }
@ -3966,7 +4158,6 @@ tbody.collapse.show {
font-size: 75%; font-size: 75%;
font-weight: bold; font-weight: bold;
line-height: 1; line-height: 1;
color: #fff;
text-align: center; text-align: center;
white-space: nowrap; white-space: nowrap;
vertical-align: baseline; vertical-align: baseline;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -646,7 +646,8 @@ var Carousel = function ($) {
Carousel.prototype.nextWhenVisible = function nextWhenVisible() { Carousel.prototype.nextWhenVisible = function nextWhenVisible() {
// Don't call next when the page isn't visible // Don't call next when the page isn't visible
if (!document.hidden) { // or the carousel or its parent isn't visible
if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {
this.next(); this.next();
} }
}; };

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@ toc: true
## Examples ## Examples
Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the four **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts jQuery plugin](#dismissing). Alerts are available for any length of text, as well as an optional dismiss button. For proper styling, use one of the eight **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts jQuery plugin](#dismissing).
{% example html %} {% example html %}
{% for color in site.data.theme-colors %} {% for color in site.data.theme-colors %}

View File

@ -10,7 +10,7 @@ toc: true
Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision.](http://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/) Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision.](http://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/)
Dropdowns are built on a third party library, [Popper.js](https://popper.js.org), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js](https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js) before Bootstrap's JavaScript. Dropdowns are built on a third party library, [Popper.js](https://popper.js.org), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{ site.cdn.popper }}) before Bootstrap's JavaScript.
If you're building our JS from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). If you're building our JS from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).

View File

@ -11,7 +11,7 @@ toc: true
Things to know when using the popover plugin: Things to know when using the popover plugin:
- Popovers rely on the 3rd party library [Popper.js](https://popper.js.org) for positioning. You must include [popper.min.js](https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js) before bootstrap.js in order for popovers to work! - Popovers rely on the 3rd party library [Popper.js](https://popper.js.org) for positioning. You must include [popper.min.js]({{ site.cdn.popper }}) before bootstrap.js in order for popovers to work!
- Popovers require the [tooltip plugin]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/tooltips/) as a dependency. - Popovers require the [tooltip plugin]({{ site.baseurl }}/docs/{{ site.docs_version }}/components/tooltips/) as a dependency.
- If building our JS from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). - If building our JS from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
- Popovers are opt-in for performance reasons, so **you must initialize them yourself**. - Popovers are opt-in for performance reasons, so **you must initialize them yourself**.

View File

@ -10,7 +10,7 @@ toc: true
Things to know when using the tooltip plugin: Things to know when using the tooltip plugin:
- Tooltips rely on the 3rd party library [Popper.js](https://popper.js.org) for positioning. You must include [popper.min.js](https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.10.1/umd/popper.min.js) before bootstrap.js in order for tooltips to work! - Tooltips rely on the 3rd party library [Popper.js](https://popper.js.org) for positioning. You must include [popper.min.js]({{ site.cdn.popper }}) before bootstrap.js in order for tooltips to work!
- If building our JS from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util). - If building our JS from source, it [requires `util.js`]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#util).
- Tooltips are opt-in for performance reasons, so **you must initialize them yourself**. - Tooltips are opt-in for performance reasons, so **you must initialize them yourself**.
- Tooltips with zero-length titles are never displayed. - Tooltips with zero-length titles are never displayed.

View File

@ -35,8 +35,6 @@ The default web fonts (Helvetica Neue, Helvetica, and Arial) have been dropped i
$font-family-sans-serif: $font-family-sans-serif:
// Safari for OS X and iOS (San Francisco) // Safari for OS X and iOS (San Francisco)
-apple-system, -apple-system,
// Chrome >= 56 for OS X (San Francisco), Windows, Linux and Android
system-ui,
// Chrome < 56 for OS X (San Francisco) // Chrome < 56 for OS X (San Francisco)
BlinkMacSystemFont, BlinkMacSystemFont,
// Windows // Windows
@ -44,7 +42,9 @@ $font-family-sans-serif:
// Android // Android
"Roboto", "Roboto",
// Basic web fallback // Basic web fallback
"Helvetica Neue", Arial, sans-serif !default; "Helvetica Neue", Arial, sans-serif,
// Emoji fonts
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
{% endhighlight %} {% endhighlight %}
This `font-family` is applied to the `<body>` and automatically inherited globally throughout Bootstrap. To switch the global `font-family`, update `$font-family-base` and recompile Bootstrap. This `font-family` is applied to the `<body>` and automatically inherited globally throughout Bootstrap. To switch the global `font-family`, update `$font-family-base` and recompile Bootstrap.

View File

@ -45,10 +45,10 @@ Using the most basic table markup, here's how `.table`-based tables look in Boot
</table> </table>
{% endexample %} {% endexample %}
You can also invert the colors—with light text on dark backgrounds—with `.table-inverse`. You can also invert the colors—with light text on dark backgrounds—with `.table-dark`.
{% example html %} {% example html %}
<table class="table table-inverse"> <table class="table table-dark">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
@ -82,11 +82,11 @@ You can also invert the colors—with light text on dark backgrounds—with `.ta
## Table head options ## Table head options
Similar to default and inverse tables, use one of two modifier classes to make `<thead>`s appear light or dark gray. Similar to tables and dark tables, use the modifier classes `.thead-light` or `.thead-dark` to make `<thead>`s appear light or dark gray.
{% example html %} {% example html %}
<table class="table"> <table class="table">
<thead class="thead-inverse"> <thead class="thead-dark">
<tr> <tr>
<th>#</th> <th>#</th>
<th>First Name</th> <th>First Name</th>
@ -117,7 +117,7 @@ Similar to default and inverse tables, use one of two modifier classes to make `
</table> </table>
<table class="table"> <table class="table">
<thead class="thead-default"> <thead class="thead-light">
<tr> <tr>
<th>#</th> <th>#</th>
<th>First Name</th> <th>First Name</th>
@ -186,7 +186,7 @@ Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`
{% endexample %} {% endexample %}
{% example html %} {% example html %}
<table class="table table-striped table-inverse"> <table class="table table-striped table-dark">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
@ -261,7 +261,7 @@ Add `.table-bordered` for borders on all sides of the table and cells.
{% endexample %} {% endexample %}
{% example html %} {% example html %}
<table class="table table-bordered table-inverse"> <table class="table table-bordered table-dark">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
@ -335,7 +335,7 @@ Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
{% endexample %} {% endexample %}
{% example html %} {% example html %}
<table class="table table-hover table-inverse"> <table class="table table-hover table-dark">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
@ -403,7 +403,7 @@ Add `.table-sm` to make tables more compact by cutting cell padding in half.
{% endexample %} {% endexample %}
{% example html %} {% example html %}
<table class="table table-sm table-inverse"> <table class="table table-sm table-dark">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>
@ -487,10 +487,10 @@ Use contextual classes to color table rows or individual cells.
</tr> </tr>
{% endhighlight %} {% endhighlight %}
Regular table background variants are not available with the inverse table, however, you may use [text or background utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) to achieve similar styles. Regular table background variants are not available with the dark table, however, you may use [text or background utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) to achieve similar styles.
<div class="bd-example"> <div class="bd-example">
<table class="table table-inverse"> <table class="table table-dark">
<thead> <thead>
<tr> <tr>
<th>#</th> <th>#</th>

View File

@ -51,7 +51,7 @@
<div class="carousel-item active"> <div class="carousel-item active">
<img class="first-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="First slide"> <img class="first-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="First slide">
<div class="container"> <div class="container">
<div class="carousel-caption d-md-block text-left"> <div class="carousel-caption text-left">
<h1>Example headline.</h1> <h1>Example headline.</h1>
<p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
<p><a class="btn btn-lg btn-primary" href="#" role="button">Sign up today</a></p> <p><a class="btn btn-lg btn-primary" href="#" role="button">Sign up today</a></p>
@ -61,7 +61,7 @@
<div class="carousel-item"> <div class="carousel-item">
<img class="second-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Second slide"> <img class="second-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Second slide">
<div class="container"> <div class="container">
<div class="carousel-caption d-md-block"> <div class="carousel-caption">
<h1>Another example headline.</h1> <h1>Another example headline.</h1>
<p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
<p><a class="btn btn-lg btn-primary" href="#" role="button">Learn more</a></p> <p><a class="btn btn-lg btn-primary" href="#" role="button">Learn more</a></p>
@ -71,7 +71,7 @@
<div class="carousel-item"> <div class="carousel-item">
<img class="third-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Third slide"> <img class="third-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Third slide">
<div class="container"> <div class="container">
<div class="carousel-caption d-md-block text-right"> <div class="carousel-caption text-right">
<h1>One more for good measure.</h1> <h1>One more for good measure.</h1>
<p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
<p><a class="btn btn-lg btn-primary" href="#" role="button">Browse gallery</a></p> <p><a class="btn btn-lg btn-primary" href="#" role="button">Browse gallery</a></p>

View File

@ -493,6 +493,22 @@ With the handful of grid tiers available, you're bound to run into issues where,
{% endexample %} {% endexample %}
</div> </div>
In addition to column clearing at responsive breakpoints, you may need to reset offsets. See this in action in [the grid example]({{ site.baseurl }}/docs/{{ site.docs_version }}/examples/grid/).
<div class="bd-example-row">
{% example html %}
<div class="row">
<div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
<div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0">.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-5 col-lg-6">.col.col-sm-6.col-md-5.col-lg-6</div>
<div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</div>
</div>
{% endexample %}
</div>
## Reordering ## Reordering
### Flex order ### Flex order
@ -519,7 +535,31 @@ Use `.order-` classes for controlling the **visual order** of your content. Thes
### Offsetting columns ### Offsetting columns
With the move to flexbox in v4, we no longer have v3's style of offset classes. Instead, use margin utilities like `.mr-auto` to force sibling columns away from one another. You can offset grid columns in two ways: our responsive `.offset-` grid classes and our [margin utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/spacing/). Grid classes are sized to match columns while margins are more useful for quick layouts where the width of the offset is variable.
#### Offset classes
Move columns to the right using `.offset-md-*` classes. These classes increase the left margin of a column by `*` columns. For example, `.offset-md-4` moves `.col-md-4` over four columns.
<div class="bd-example-row">
{% example html %}
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 offset-md-4">.col-md-4 .offset-md-4</div>
</div>
<div class="row">
<div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
<div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
</div>
<div class="row">
<div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
</div>
{% endexample %}
</div>
#### Margin utilities
With the move to flexbox in v4, you can use margin utilities like `.mr-auto` to force sibling columns away from one another.
<div class="bd-example-row"> <div class="bd-example-row">
{% example html %} {% example html %}
@ -604,6 +644,9 @@ Mixins are used in conjunction with the grid variables to generate semantic CSS
// Make the element grid-ready (applying everything but the width) // Make the element grid-ready (applying everything but the width)
@include make-col-ready(); @include make-col-ready();
@include make-col($size, $columns: $grid-columns); @include make-col($size, $columns: $grid-columns);
// Get fancy by offsetting, or changing the sort order
@include make-col-offset($size, $columns: $grid-columns);
{% endhighlight %} {% endhighlight %}
### Example usage ### Example usage
@ -684,4 +727,4 @@ $container-max-widths: (
); );
{% endhighlight %} {% endhighlight %}
When making any changes to the Sass variables or maps, you'll need to save your changes and recompile. Doing so will out a brand new set of predefined grid classes for column widths and ordering. Responsive visibility utilities will also be updated to use the custom breakpoints. When making any changes to the Sass variables or maps, you'll need to save your changes and recompile. Doing so will out a brand new set of predefined grid classes for column widths, offsets, and ordering. Responsive visibility utilities will also be updated to use the custom breakpoints.

View File

@ -14,7 +14,7 @@ Below is an example of a single media object. Only two classes are required—th
{% example html %} {% example html %}
<div class="media"> <div class="media">
<img class="d-flex mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0">Media heading</h5> <h5 class="mt-0">Media heading</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
@ -36,13 +36,13 @@ Media objects can be infinitely nested, though we suggest you stop at some point
{% example html %} {% example html %}
<div class="media"> <div class="media">
<img class="d-flex mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0">Media heading</h5> <h5 class="mt-0">Media heading</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
<div class="media mt-3"> <div class="media mt-3">
<a class="d-flex pr-3" href="#"> <a class="pr-3" href="#">
<img data-src="holder.js/64x64" alt="Generic placeholder image"> <img data-src="holder.js/64x64" alt="Generic placeholder image">
</a> </a>
<div class="media-body"> <div class="media-body">
@ -60,7 +60,7 @@ Media in a media object can be aligned with flexbox utilities to the top (defaul
{% example html %} {% example html %}
<div class="media"> <div class="media">
<img class="d-flex align-self-start mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="align-self-start mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0">Top-aligned media</h5> <h5 class="mt-0">Top-aligned media</h5>
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p> <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
@ -71,7 +71,7 @@ Media in a media object can be aligned with flexbox utilities to the top (defaul
{% example html %} {% example html %}
<div class="media"> <div class="media">
<img class="d-flex align-self-center mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="align-self-center mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0">Center-aligned media</h5> <h5 class="mt-0">Center-aligned media</h5>
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p> <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
@ -82,7 +82,7 @@ Media in a media object can be aligned with flexbox utilities to the top (defaul
{% example html %} {% example html %}
<div class="media"> <div class="media">
<img class="d-flex align-self-end mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="align-self-end mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0">Bottom-aligned media</h5> <h5 class="mt-0">Bottom-aligned media</h5>
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p> <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
@ -101,7 +101,7 @@ Change the order of content in media objects by modifying the HTML itself, or by
<h5 class="mt-0 mb-1">Media object</h5> <h5 class="mt-0 mb-1">Media object</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
</div> </div>
<img class="d-flex ml-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="ml-3" data-src="holder.js/64x64" alt="Generic placeholder image">
</div> </div>
{% endexample %} {% endexample %}
@ -112,21 +112,21 @@ Because the media object has so few structural requirements, you can also use th
{% example html %} {% example html %}
<ul class="list-unstyled"> <ul class="list-unstyled">
<li class="media"> <li class="media">
<img class="d-flex mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0 mb-1">List-based media object</h5> <h5 class="mt-0 mb-1">List-based media object</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
</div> </div>
</li> </li>
<li class="media my-4"> <li class="media my-4">
<img class="d-flex mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0 mb-1">List-based media object</h5> <h5 class="mt-0 mb-1">List-based media object</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
</div> </div>
</li> </li>
<li class="media"> <li class="media">
<img class="d-flex mr-3" data-src="holder.js/64x64" alt="Generic placeholder image"> <img class="mr-3" data-src="holder.js/64x64" alt="Generic placeholder image">
<div class="media-body"> <div class="media-body">
<h5 class="mt-0 mb-1">List-based media object</h5> <h5 class="mt-0 mb-1">List-based media object</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.

View File

@ -212,7 +212,7 @@ Dropped entirely for the new card component.
- All CSS has been un-nested and renamed, ensuring each class is prefixed with `.carousel-`. - All CSS has been un-nested and renamed, ensuring each class is prefixed with `.carousel-`.
- For carousel items, `.next`, `.prev`, `.left`, and `.right` are now `.carousel-item-next`, `.carousel-item-prev`, `.carousel-item-left`, and `.carousel-item-right`. - For carousel items, `.next`, `.prev`, `.left`, and `.right` are now `.carousel-item-next`, `.carousel-item-prev`, `.carousel-item-left`, and `.carousel-item-right`.
- `.item` is also now `.carousel-item`. - `.item` is also now `.carousel-item`.
- For prev/next controls, `.carousel-control.right` and `.carousel-control.left` are now `.carousel-control-right` and `.carousel-control-left`, meaning they no longer require a specific base class. - For prev/next controls, `.carousel-control.right` and `.carousel-control.left` are now `.carousel-control-next` and `.carousel-control-prev`, meaning they no longer require a specific base class.
- Removed all responsive styling, deferring to utilities (e.g., showing captions on certain viewports) and custom styles as needed. - Removed all responsive styling, deferring to utilities (e.g., showing captions on certain viewports) and custom styles as needed.
- Removed image overrides for images in carousel items, deferring to utilities. - Removed image overrides for images in carousel items, deferring to utilities.
- Tweaked the Carousel example to include the new markup and styles. - Tweaked the Carousel example to include the new markup and styles.

View File

@ -6,7 +6,7 @@ group: utilities
toc: true toc: true
--- ---
Easily clear `float`s by adding `.clearfix` **to the parent element**. Utilizes [the micro clearfix](http://nicolasgallagher.com/micro-clearfix-hack/) as popularized by Nicolas Gallagher. Can also be used as a mixin. Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also be used as a mixin.
{% highlight html %} {% highlight html %}
<div class="clearfix">...</div> <div class="clearfix">...</div>

View File

@ -1,6 +1,6 @@
--- ---
layout: docs layout: docs
title: Typography title: Text
description: Documentation and examples for common text utilities to control alignment, wrapping, weight, and more. description: Documentation and examples for common text utilities to control alignment, wrapping, weight, and more.
group: utilities group: utilities
toc: true toc: true

View File

@ -14,9 +14,8 @@
"rules": { "rules": {
// Possible Errors // Possible Errors
"no-await-in-loop": "error", "no-await-in-loop": "error",
"no-compare-neg-zero": "error",
"no-extra-parens": "error", "no-extra-parens": "error",
"no-prototype-builtins": "off", "no-prototype-builtins": "error",
"no-template-curly-in-string": "error", "no-template-curly-in-string": "error",
"valid-jsdoc": "error", "valid-jsdoc": "error",
@ -75,7 +74,7 @@
"no-param-reassign": "off", "no-param-reassign": "off",
"no-proto": "error", "no-proto": "error",
"no-restricted-properties": "error", "no-restricted-properties": "error",
"no-return-assign": "off", "no-return-assign": "error",
"no-return-await": "error", "no-return-await": "error",
"no-script-url": "error", "no-script-url": "error",
"no-self-compare": "error", "no-self-compare": "error",
@ -85,7 +84,6 @@
"no-unused-expressions": "error", "no-unused-expressions": "error",
"no-useless-call": "error", "no-useless-call": "error",
"no-useless-concat": "error", "no-useless-concat": "error",
"no-useless-escape": "error",
"no-useless-return": "off", "no-useless-return": "off",
"no-void": "error", "no-void": "error",
"no-warning-comments": "off", "no-warning-comments": "off",
@ -108,7 +106,7 @@
"no-shadow": "off", "no-shadow": "off",
"no-shadow-restricted-names": "error", "no-shadow-restricted-names": "error",
"no-undef-init": "error", "no-undef-init": "error",
"no-undefined": "off", "no-undefined": "error",
"no-use-before-define": "off", "no-use-before-define": "off",
// Node.js and CommonJS // Node.js and CommonJS
@ -213,7 +211,7 @@
"wrap-regex": "off", "wrap-regex": "off",
// ECMAScript 6 // ECMAScript 6
"arrow-body-style": "off", "arrow-body-style": ["error", "as-needed"],
"arrow-parens": "error", "arrow-parens": "error",
"arrow-spacing": "error", "arrow-spacing": "error",
"generator-star-spacing": "error", "generator-star-spacing": "error",

3
js/dist/carousel.js vendored
View File

@ -123,7 +123,8 @@ var Carousel = function ($) {
Carousel.prototype.nextWhenVisible = function nextWhenVisible() { Carousel.prototype.nextWhenVisible = function nextWhenVisible() {
// Don't call next when the page isn't visible // Don't call next when the page isn't visible
if (!document.hidden) { // or the carousel or its parent isn't visible
if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {
this.next(); this.next();
} }
}; };

File diff suppressed because one or more lines are too long

View File

@ -131,7 +131,9 @@ const Carousel = (($) => {
nextWhenVisible() { nextWhenVisible() {
// Don't call next when the page isn't visible // Don't call next when the page isn't visible
if (!document.hidden) { // or the carousel or its parent isn't visible
if (!document.hidden &&
($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {
this.next() this.next()
} }
} }
@ -441,7 +443,7 @@ const Carousel = (($) => {
if (typeof config === 'number') { if (typeof config === 'number') {
data.to(config) data.to(config)
} else if (typeof action === 'string') { } else if (typeof action === 'string') {
if (data[action] === undefined) { if (typeof data[action] === 'undefined') {
throw new Error(`No method named "${action}"`) throw new Error(`No method named "${action}"`)
} }
data[action]() data[action]()

View File

@ -343,7 +343,7 @@ const Collapse = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config]() data[config]()
@ -361,7 +361,8 @@ const Collapse = (($) => {
*/ */
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
if (!/input|textarea/i.test(event.target.tagName)) { // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A' && !$.contains(this, event.target)) {
event.preventDefault() event.preventDefault()
} }

View File

@ -204,7 +204,7 @@ const Dropdown = (($) => {
_getConfig(config) { _getConfig(config) {
const elementData = $(this._element).data() const elementData = $(this._element).data()
if (elementData.placement !== undefined) { if (typeof elementData.placement !== 'undefined') {
elementData.placement = AttachmentMap[elementData.placement.toUpperCase()] elementData.placement = AttachmentMap[elementData.placement.toUpperCase()]
} }
@ -287,7 +287,7 @@ const Dropdown = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config]() data[config]()

View File

@ -68,6 +68,7 @@ const Modal = (($) => {
DATA_TOGGLE : '[data-toggle="modal"]', DATA_TOGGLE : '[data-toggle="modal"]',
DATA_DISMISS : '[data-dismiss="modal"]', DATA_DISMISS : '[data-dismiss="modal"]',
FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
STICKY_CONTENT : '.sticky-top',
NAVBAR_TOGGLER : '.navbar-toggler' NAVBAR_TOGGLER : '.navbar-toggler'
} }
@ -441,6 +442,13 @@ const Modal = (($) => {
$(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) $(element).data('padding-right', actualPadding).css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)
}) })
// Adjust sticky content margin
$(Selector.STICKY_CONTENT).each((index, element) => {
const actualMargin = $(element)[0].style.marginRight
const calculatedMargin = $(element).css('margin-right')
$(element).data('margin-right', actualMargin).css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)
})
// Adjust navbar-toggler margin // Adjust navbar-toggler margin
$(Selector.NAVBAR_TOGGLER).each((index, element) => { $(Selector.NAVBAR_TOGGLER).each((index, element) => {
const actualMargin = $(element)[0].style.marginRight const actualMargin = $(element)[0].style.marginRight
@ -464,8 +472,8 @@ const Modal = (($) => {
} }
}) })
// Restore navbar-toggler margin // Restore sticky content and navbar-toggler margin
$(Selector.NAVBAR_TOGGLER).each((index, element) => { $(`${Selector.STICKY_CONTENT}, ${Selector.NAVBAR_TOGGLER}`).each((index, element) => {
const margin = $(element).data('margin-right') const margin = $(element).data('margin-right')
if (typeof margin !== 'undefined') { if (typeof margin !== 'undefined') {
$(element).css('margin-right', margin).removeData('margin-right') $(element).css('margin-right', margin).removeData('margin-right')
@ -507,7 +515,7 @@ const Modal = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config](relatedTarget) data[config](relatedTarget)

View File

@ -114,7 +114,8 @@ const Popover = (($) => {
} }
getTipElement() { getTipElement() {
return this.tip = this.tip || $(this.config.template)[0] this.tip = this.tip || $(this.config.template)[0]
return this.tip
} }
setContent() { setContent() {
@ -162,7 +163,7 @@ const Popover = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config]() data[config]()

View File

@ -231,7 +231,7 @@ const ScrollSpy = (($) => {
for (let i = this._offsets.length; i--;) { for (let i = this._offsets.length; i--;) {
const isActiveTarget = this._activeTarget !== this._targets[i] const isActiveTarget = this._activeTarget !== this._targets[i]
&& scrollTop >= this._offsets[i] && scrollTop >= this._offsets[i]
&& (this._offsets[i + 1] === undefined || && (typeof this._offsets[i + 1] === 'undefined' ||
scrollTop < this._offsets[i + 1]) scrollTop < this._offsets[i + 1])
if (isActiveTarget) { if (isActiveTarget) {
@ -246,6 +246,7 @@ const ScrollSpy = (($) => {
this._clear() this._clear()
let queries = this._selector.split(',') let queries = this._selector.split(',')
// eslint-disable-next-line arrow-body-style
queries = queries.map((selector) => { queries = queries.map((selector) => {
return `${selector}[data-target="${target}"],` + return `${selector}[data-target="${target}"],` +
`${selector}[href="${target}"]` `${selector}[href="${target}"]`
@ -287,7 +288,7 @@ const ScrollSpy = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config]() data[config]()

View File

@ -238,7 +238,7 @@ const Tab = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config]() data[config]()

View File

@ -184,6 +184,10 @@ const Tooltip = (($) => {
} }
toggle(event) { toggle(event) {
if (!this._isEnabled) {
return
}
if (event) { if (event) {
const dataKey = this.constructor.DATA_KEY const dataKey = this.constructor.DATA_KEY
let context = $(event.currentTarget).data(dataKey) let context = $(event.currentTarget).data(dataKey)
@ -234,8 +238,8 @@ const Tooltip = (($) => {
if (this._popper !== null) { if (this._popper !== null) {
this._popper.destroy() this._popper.destroy()
} }
this._popper = null
this._popper = null
this.element = null this.element = null
this.config = null this.config = null
this.tip = null this.tip = null
@ -415,7 +419,8 @@ const Tooltip = (($) => {
} }
getTipElement() { getTipElement() {
return this.tip = this.tip || $(this.config.template)[0] this.tip = this.tip || $(this.config.template)[0]
return this.tip
} }
setContent() { setContent() {
@ -698,14 +703,13 @@ const Tooltip = (($) => {
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined) { if (typeof data[config] === 'undefined') {
throw new Error(`No method named "${config}"`) throw new Error(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })
} }
} }

View File

@ -42,7 +42,7 @@ const Util = (($) => {
if ($(event.target).is(this)) { if ($(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params
} }
return undefined return undefined // eslint-disable-line no-undefined
} }
} }
} }
@ -55,7 +55,7 @@ const Util = (($) => {
const el = document.createElement('bootstrap') const el = document.createElement('bootstrap')
for (const name in TransitionEndEvent) { for (const name in TransitionEndEvent) {
if (el.style[name] !== undefined) { if (typeof el.style[name] !== 'undefined') {
return { return {
end: TransitionEndEvent[name] end: TransitionEndEvent[name]
} }
@ -138,7 +138,7 @@ const Util = (($) => {
typeCheckConfig(componentName, config, configTypes) { typeCheckConfig(componentName, config, configTypes) {
for (const property in configTypes) { for (const property in configTypes) {
if (configTypes.hasOwnProperty(property)) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
const expectedTypes = configTypes[property] const expectedTypes = configTypes[property]
const value = config[property] const value = config[property]
const valueType = value && isElement(value) ? const valueType = value && isElement(value) ?

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.alert, undefined, 'alert was set back to undefined (org value)') assert.strictEqual(typeof $.fn.alert, 'undefined', 'alert was set back to undefined (org value)')
}) })
QUnit.test('should return jquery collection containing the element', function (assert) { QUnit.test('should return jquery collection containing the element', function (assert) {

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.button, undefined, 'button was set back to undefined (org value)') assert.strictEqual(typeof $.fn.button, 'undefined', 'button was set back to undefined (org value)')
}) })
QUnit.test('should return jquery collection containing the element', function (assert) { QUnit.test('should return jquery collection containing the element', function (assert) {

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.carousel, undefined, 'carousel was set back to undefined (orig value)') assert.strictEqual(typeof $.fn.carousel, 'undefined', 'carousel was set back to undefined (orig value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {
@ -371,14 +371,14 @@ $(function () {
var done = assert.async() var done = assert.async()
$(template) $(template)
.on('slid.bs.carousel', function (e) { .on('slid.bs.carousel', function (e) {
assert.ok(e.from !== undefined, 'from present') assert.ok(typeof e.from !== 'undefined', 'from present')
assert.ok(e.to !== undefined, 'to present') assert.ok(typeof e.to !== 'undefined', 'to present')
$(this).off() $(this).off()
done() done()
}) })
.on('slide.bs.carousel', function (e) { .on('slide.bs.carousel', function (e) {
assert.ok(e.from !== undefined, 'from present') assert.ok(typeof e.from !== 'undefined', 'from present')
assert.ok(e.to !== undefined, 'to present') assert.ok(typeof e.to !== 'undefined', 'to present')
$(this).off('slide.bs.carousel') $(this).off('slide.bs.carousel')
}) })
.bootstrapCarousel('next') .bootstrapCarousel('next')
@ -842,4 +842,80 @@ $(function () {
}) })
$textArea.trigger(eventKeyDown) $textArea.trigger(eventKeyDown)
}) })
QUnit.test('Should not go to the next item when the carousel is not visible', function (assert) {
assert.expect(2)
var done = assert.async()
var html = '<div id="myCarousel" class="carousel slide" data-interval="50" style="display: none;">'
+ ' <div class="carousel-inner">'
+ ' <div id="firstItem" class="carousel-item active">'
+ ' <img alt="">'
+ ' </div>'
+ ' <div class="carousel-item">'
+ ' <img alt="">'
+ ' </div>'
+ ' <div class="carousel-item">'
+ ' <img alt="">'
+ ' </div>'
+ ' <a class="left carousel-control" href="#myCarousel" data-slide="prev">&lsaquo;</a>'
+ ' <a class="right carousel-control" href="#myCarousel" data-slide="next">&rsaquo;</a>'
+ '</div>'
var $html = $(html)
$html
.appendTo('#qunit-fixture')
.bootstrapCarousel()
var $firstItem = $('#firstItem')
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
$html
.bootstrapCarousel('dispose')
.attr('style', 'visibility: hidden;')
.bootstrapCarousel()
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
done()
}, 80)
}, 80)
})
QUnit.test('Should not go to the next item when the parent of the carousel is not visible', function (assert) {
assert.expect(2)
var done = assert.async()
var html = '<div id="parent" style="display: none;">'
+ ' <div id="myCarousel" class="carousel slide" data-interval="50" style="display: none;">'
+ ' <div class="carousel-inner">'
+ ' <div id="firstItem" class="carousel-item active">'
+ ' <img alt="">'
+ ' </div>'
+ ' <div class="carousel-item">'
+ ' <img alt="">'
+ ' </div>'
+ ' <div class="carousel-item">'
+ ' <img alt="">'
+ ' </div>'
+ ' <a class="left carousel-control" href="#myCarousel" data-slide="prev">&lsaquo;</a>'
+ ' <a class="right carousel-control" href="#myCarousel" data-slide="next">&rsaquo;</a>'
+ ' </div>'
+ '</div>'
var $html = $(html)
$html.appendTo('#qunit-fixture')
var $parent = $html.find('#parent')
var $carousel = $html.find('#myCarousel')
$carousel.bootstrapCarousel()
var $firstItem = $('#firstItem')
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
$carousel.bootstrapCarousel('dispose')
$parent.attr('style', 'visibility: hidden;')
$carousel.bootstrapCarousel()
setTimeout(function () {
assert.ok($firstItem.hasClass('active'))
done()
}, 80)
}, 80)
})
}) })

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.collapse, undefined, 'collapse was set back to undefined (org value)') assert.strictEqual(typeof $.fn.collapse, 'undefined', 'collapse was set back to undefined (org value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {
@ -673,4 +673,29 @@ $(function () {
}) })
$trigger3.trigger('click') $trigger3.trigger('click')
}) })
QUnit.test('should not prevent interactions inside the collapse element', function (assert) {
assert.expect(2)
var done = assert.async()
var $target = $('<input type="checkbox" data-toggle="collapse" data-target="#collapsediv1" />').appendTo('#qunit-fixture')
var htmlCollapse =
'<div id="collapsediv1" class="collapse">' +
' <input type="checkbox" id="testCheckbox" />' +
'</div>'
$(htmlCollapse)
.appendTo('#qunit-fixture')
.on('shown.bs.collapse', function () {
assert.ok($target.prop('checked'), '$trigger is checked')
var $testCheckbox = $('#testCheckbox')
$testCheckbox.trigger($.Event('click'))
setTimeout(function () {
assert.ok($testCheckbox.prop('checked'), '$testCheckbox is checked too')
done()
}, 5)
})
$target.trigger($.Event('click'))
})
}) })

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.dropdown, undefined, 'dropdown was set back to undefined (org value)') assert.strictEqual(typeof $.fn.dropdown, 'undefined', 'dropdown was set back to undefined (org value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {
@ -644,7 +644,7 @@ $(function () {
$triggerDropdown $triggerDropdown
.parent('.dropdown') .parent('.dropdown')
.on('shown.bs.dropdown', function () { .on('shown.bs.dropdown', function () {
assert.ok($dropdownMenu.attr('style') === undefined, 'No inline style applied by Popper.js') assert.ok(typeof $dropdownMenu.attr('style') === 'undefined', 'No inline style applied by Popper.js')
done() done()
}) })
$triggerDropdown.trigger($.Event('click')) $triggerDropdown.trigger($.Event('click'))

View File

@ -34,7 +34,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.modal, undefined, 'modal was set back to undefined (orig value)') assert.strictEqual(typeof $.fn.modal, 'undefined', 'modal was set back to undefined (orig value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {
@ -380,7 +380,7 @@ $(function () {
$('<div id="modal-test"/>') $('<div id="modal-test"/>')
.on('hidden.bs.modal', function () { .on('hidden.bs.modal', function () {
assert.strictEqual($body.data('padding-right'), undefined, 'data-padding-right should be cleared after closing') assert.strictEqual(typeof $body.data('padding-right'), 'undefined', 'data-padding-right should be cleared after closing')
$body.removeAttr('style') $body.removeAttr('style')
done() done()
}) })
@ -422,7 +422,7 @@ $(function () {
$('<div id="modal-test"/>') $('<div id="modal-test"/>')
.on('hidden.bs.modal', function () { .on('hidden.bs.modal', function () {
assert.strictEqual($element.data('padding-right'), undefined, 'data-padding-right should be cleared after closing') assert.strictEqual(typeof $element.data('padding-right'), 'undefined', 'data-padding-right should be cleared after closing')
$element.remove() $element.remove()
done() done()
}) })
@ -433,6 +433,48 @@ $(function () {
.bootstrapModal('show') .bootstrapModal('show')
}) })
QUnit.test('should adjust the inline margin of sticky elements when opening and restore when closing', function (assert) {
assert.expect(2)
var done = assert.async()
var $element = $('<div class="sticky-top"></div>').appendTo('#qunit-fixture')
var originalPadding = $element.css('margin-right')
$('<div id="modal-test"/>')
.on('hidden.bs.modal', function () {
var currentPadding = $element.css('margin-right')
assert.strictEqual(currentPadding, originalPadding, 'sticky element margin should be reset after closing')
$element.remove()
done()
})
.on('shown.bs.modal', function () {
var expectedPadding = parseFloat(originalPadding) - $(this).getScrollbarWidth() + 'px'
var currentPadding = $element.css('margin-right')
assert.strictEqual(currentPadding, expectedPadding, 'sticky element margin should be adjusted while opening')
$(this).bootstrapModal('hide')
})
.bootstrapModal('show')
})
QUnit.test('should store the original margin of sticky elements in data-margin-right before showing', function (assert) {
assert.expect(2)
var done = assert.async()
var $element = $('<div class="sticky-top"></div>').appendTo('#qunit-fixture')
var originalPadding = '0px'
$element.css('margin-right', originalPadding)
$('<div id="modal-test"/>')
.on('hidden.bs.modal', function () {
assert.strictEqual(typeof $element.data('margin-right'), 'undefined', 'data-margin-right should be cleared after closing')
$element.remove()
done()
})
.on('shown.bs.modal', function () {
assert.strictEqual($element.data('margin-right'), originalPadding, 'original sticky element margin should be stored in data-margin-right')
$(this).bootstrapModal('hide')
})
.bootstrapModal('show')
})
QUnit.test('should adjust the inline margin of the navbar-toggler when opening and restore when closing', function (assert) { QUnit.test('should adjust the inline margin of the navbar-toggler when opening and restore when closing', function (assert) {
assert.expect(2) assert.expect(2)
var done = assert.async() var done = assert.async()
@ -464,7 +506,7 @@ $(function () {
$('<div id="modal-test"/>') $('<div id="modal-test"/>')
.on('hidden.bs.modal', function () { .on('hidden.bs.modal', function () {
assert.strictEqual($element.data('margin-right'), undefined, 'data-margin-right should be cleared after closing') assert.strictEqual(typeof $element.data('margin-right'), 'undefined', 'data-margin-right should be cleared after closing')
$element.remove() $element.remove()
done() done()
}) })

View File

@ -22,7 +22,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.popover, undefined, 'popover was set back to undefined (org value)') assert.strictEqual(typeof $.fn.popover, 'undefined', 'popover was set back to undefined (org value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {
@ -304,7 +304,7 @@ $(function () {
assert.ok(false, 'should not fire any popover events') assert.ok(false, 'should not fire any popover events')
}) })
.bootstrapPopover('hide') .bootstrapPopover('hide')
assert.strictEqual($popover.data('bs.popover'), undefined, 'should not initialize the popover') assert.strictEqual(typeof $popover.data('bs.popover'), 'undefined', 'should not initialize the popover')
}) })
QUnit.test('should fire inserted event', function (assert) { QUnit.test('should fire inserted event', function (assert) {
@ -387,4 +387,27 @@ $(function () {
$popover.bootstrapPopover('show') $popover.bootstrapPopover('show')
}) })
QUnit.test('popover should be shown right away after the call of disable/enable', function (assert) {
assert.expect(2)
var done = assert.async()
var $popover = $('<a href="#">@mdo</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover({
title: 'Test popover',
content: 'with disable/enable'
})
.on('shown.bs.popover', function () {
assert.strictEqual($('.popover').hasClass('show'), true)
done()
})
$popover.bootstrapPopover('disable')
$popover.trigger($.Event('click'))
setTimeout(function () {
assert.strictEqual($('.popover').length === 0, true)
$popover.bootstrapPopover('enable')
$popover.trigger($.Event('click'))
}, 200)
})
}) })

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.scrollspy, undefined, 'scrollspy was set back to undefined (org value)') assert.strictEqual(typeof $.fn.scrollspy, 'undefined', 'scrollspy was set back to undefined (org value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {

View File

@ -21,7 +21,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.tab, undefined, 'tab was set back to undefined (org value)') assert.strictEqual(typeof $.fn.tab, 'undefined', 'tab was set back to undefined (org value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {

View File

@ -22,7 +22,7 @@ $(function () {
QUnit.test('should provide no conflict', function (assert) { QUnit.test('should provide no conflict', function (assert) {
assert.expect(1) assert.expect(1)
assert.strictEqual($.fn.tooltip, undefined, 'tooltip was set back to undefined (org value)') assert.strictEqual(typeof $.fn.tooltip, 'undefined', 'tooltip was set back to undefined (org value)')
}) })
QUnit.test('should throw explicit error on undefined method', function (assert) { QUnit.test('should throw explicit error on undefined method', function (assert) {
@ -382,7 +382,7 @@ $(function () {
.on('inserted.bs.tooltip', function () { .on('inserted.bs.tooltip', function () {
var $tooltip = $($(this).data('bs.tooltip').tip) var $tooltip = $($(this).data('bs.tooltip').tip)
assert.ok($tooltip.hasClass('bs-tooltip-right')) assert.ok($tooltip.hasClass('bs-tooltip-right'))
assert.ok($tooltip.attr('style') === undefined) assert.ok(typeof $tooltip.attr('style') === 'undefined')
$styles.remove() $styles.remove()
done() done()
}) })
@ -701,7 +701,7 @@ $(function () {
assert.ok(false, 'should not fire any tooltip events') assert.ok(false, 'should not fire any tooltip events')
}) })
.bootstrapTooltip('hide') .bootstrapTooltip('hide')
assert.strictEqual($tooltip.data('bs.tooltip'), undefined, 'should not initialize the tooltip') assert.strictEqual(typeof $tooltip.data('bs.tooltip'), 'undefined', 'should not initialize the tooltip')
}) })
QUnit.test('should not remove tooltip if multiple triggers are set and one is still active', function (assert) { QUnit.test('should not remove tooltip if multiple triggers are set and one is still active', function (assert) {
@ -826,4 +826,26 @@ $(function () {
$el.bootstrapTooltip('show') $el.bootstrapTooltip('show')
}) })
QUnit.test('tooltip should be shown right away after the call of disable/enable', function (assert) {
assert.expect(2)
var done = assert.async()
var $trigger = $('<a href="#" rel="tooltip" data-trigger="click" title="Another tooltip"/>')
.appendTo('#qunit-fixture')
.bootstrapTooltip()
.on('shown.bs.tooltip', function () {
assert.strictEqual($('.tooltip').hasClass('show'), true)
done()
})
$trigger.bootstrapTooltip('disable')
$trigger.trigger($.Event('click'))
setTimeout(function () {
assert.strictEqual($('.tooltip').length === 0, true)
$trigger.bootstrapTooltip('enable')
$trigger.trigger($.Event('click'))
}, 200)
})
}) })

View File

@ -57,7 +57,7 @@
</div> </div>
</div> </div>
<script src="../../../docs/assets/js/vendor/jquery-slim.min.js"></script> <script src="../../../assets/js/vendor/jquery-slim.min.js"></script>
<script src="../../dist/util.js"></script> <script src="../../dist/util.js"></script>
<script src="../../dist/collapse.js"></script> <script src="../../dist/collapse.js"></script>
</body> </body>

View File

@ -16,8 +16,8 @@
<copyright>Copyright 2017</copyright> <copyright>Copyright 2017</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<dependencies> <dependencies>
<dependency id="jQuery" version="[1.9.1,4)" /> <dependency id="jQuery" version="[3.0.0,4)" />
<dependency id="popper.js" version="[1.11,2)" /> <dependency id="popper.js" version="[1.12.3,2)" />
</dependencies> </dependencies>
<tags>css mobile-first responsive front-end framework web</tags> <tags>css mobile-first responsive front-end framework web</tags>
</metadata> </metadata>

View File

@ -16,8 +16,8 @@
<copyright>Copyright 2017</copyright> <copyright>Copyright 2017</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance> <requireLicenseAcceptance>false</requireLicenseAcceptance>
<dependencies> <dependencies>
<dependency id="jQuery" version="[1.9.1,4)" /> <dependency id="jQuery" version="[3.0.0,4)" />
<dependency id="popper.js" version="[1.11,2)" /> <dependency id="popper.js" version="[1.12.3,2)" />
</dependencies> </dependencies>
<tags>css sass mobile-first responsive front-end framework web</tags> <tags>css sass mobile-first responsive front-end framework web</tags>
</metadata> </metadata>

564
package-lock.json generated
View File

@ -257,7 +257,7 @@
"integrity": "sha1-++rwfUj9h44Ggr98vurecorbKxg=", "integrity": "sha1-++rwfUj9h44Ggr98vurecorbKxg=",
"dev": true, "dev": true,
"requires": { "requires": {
"browserslist": "2.3.2", "browserslist": "2.3.3",
"caniuse-lite": "1.0.30000715", "caniuse-lite": "1.0.30000715",
"normalize-range": "0.1.2", "normalize-range": "0.1.2",
"num2fraction": "1.2.2", "num2fraction": "1.2.2",
@ -278,15 +278,15 @@
"dev": true "dev": true
}, },
"babel-cli": { "babel-cli": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz",
"integrity": "sha1-IHzXBbumFImy6kG1MSNBz2rKIoM=", "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-core": "6.25.0", "babel-core": "6.26.0",
"babel-polyfill": "6.23.0", "babel-polyfill": "6.26.0",
"babel-register": "6.24.1", "babel-register": "6.26.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"chokidar": "1.7.0", "chokidar": "1.7.0",
"commander": "2.11.0", "commander": "2.11.0",
"convert-source-map": "1.5.0", "convert-source-map": "1.5.0",
@ -301,9 +301,9 @@
} }
}, },
"babel-code-frame": { "babel-code-frame": {
"version": "6.22.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
"integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true, "dev": true,
"requires": { "requires": {
"chalk": "1.1.3", "chalk": "1.1.3",
@ -339,21 +339,21 @@
} }
}, },
"babel-core": { "babel-core": {
"version": "6.25.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
"integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-code-frame": "6.22.0", "babel-code-frame": "6.26.0",
"babel-generator": "6.25.0", "babel-generator": "6.26.0",
"babel-helpers": "6.24.1", "babel-helpers": "6.24.1",
"babel-messages": "6.23.0", "babel-messages": "6.23.0",
"babel-register": "6.24.1", "babel-register": "6.26.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"babylon": "6.17.4", "babylon": "6.18.0",
"convert-source-map": "1.5.0", "convert-source-map": "1.5.0",
"debug": "2.6.8", "debug": "2.6.8",
"json5": "0.5.1", "json5": "0.5.1",
@ -371,21 +371,21 @@
"integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-code-frame": "6.22.0", "babel-code-frame": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"babylon": "6.17.4" "babylon": "6.18.0"
} }
}, },
"babel-generator": { "babel-generator": {
"version": "6.25.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
"integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-messages": "6.23.0", "babel-messages": "6.23.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"detect-indent": "4.0.0", "detect-indent": "4.0.0",
"jsesc": "1.3.0", "jsesc": "1.3.0",
"lodash": "4.17.4", "lodash": "4.17.4",
@ -400,20 +400,20 @@
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-hoist-variables": "6.24.1", "babel-helper-hoist-variables": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-helper-define-map": { "babel-helper-define-map": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
"integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-function-name": "6.24.1", "babel-helper-function-name": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"lodash": "4.17.4" "lodash": "4.17.4"
} }
}, },
@ -424,10 +424,10 @@
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-get-function-arity": "6.24.1", "babel-helper-get-function-arity": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-helper-get-function-arity": { "babel-helper-get-function-arity": {
@ -436,8 +436,8 @@
"integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-helper-hoist-variables": { "babel-helper-hoist-variables": {
@ -446,8 +446,8 @@
"integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-helper-optimise-call-expression": { "babel-helper-optimise-call-expression": {
@ -456,18 +456,18 @@
"integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-helper-regex": { "babel-helper-regex": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
"integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"lodash": "4.17.4" "lodash": "4.17.4"
} }
}, },
@ -479,10 +479,10 @@
"requires": { "requires": {
"babel-helper-optimise-call-expression": "6.24.1", "babel-helper-optimise-call-expression": "6.24.1",
"babel-messages": "6.23.0", "babel-messages": "6.23.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-helpers": { "babel-helpers": {
@ -491,8 +491,8 @@
"integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0" "babel-template": "6.26.0"
} }
}, },
"babel-messages": { "babel-messages": {
@ -501,7 +501,7 @@
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-check-es2015-constants": { "babel-plugin-check-es2015-constants": {
@ -510,7 +510,7 @@
"integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-arrow-functions": { "babel-plugin-transform-es2015-arrow-functions": {
@ -519,7 +519,7 @@
"integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-block-scoped-functions": { "babel-plugin-transform-es2015-block-scoped-functions": {
@ -528,19 +528,19 @@
"integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-block-scoping": { "babel-plugin-transform-es2015-block-scoping": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
"integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"lodash": "4.17.4" "lodash": "4.17.4"
} }
}, },
@ -550,15 +550,15 @@
"integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-define-map": "6.24.1", "babel-helper-define-map": "6.26.0",
"babel-helper-function-name": "6.24.1", "babel-helper-function-name": "6.24.1",
"babel-helper-optimise-call-expression": "6.24.1", "babel-helper-optimise-call-expression": "6.24.1",
"babel-helper-replace-supers": "6.24.1", "babel-helper-replace-supers": "6.24.1",
"babel-messages": "6.23.0", "babel-messages": "6.23.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-computed-properties": { "babel-plugin-transform-es2015-computed-properties": {
@ -567,8 +567,8 @@
"integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0" "babel-template": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-destructuring": { "babel-plugin-transform-es2015-destructuring": {
@ -577,7 +577,7 @@
"integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-duplicate-keys": { "babel-plugin-transform-es2015-duplicate-keys": {
@ -586,8 +586,8 @@
"integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-for-of": { "babel-plugin-transform-es2015-for-of": {
@ -596,7 +596,7 @@
"integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-function-name": { "babel-plugin-transform-es2015-function-name": {
@ -606,8 +606,8 @@
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-function-name": "6.24.1", "babel-helper-function-name": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-literals": { "babel-plugin-transform-es2015-literals": {
@ -616,7 +616,7 @@
"integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-modules-amd": { "babel-plugin-transform-es2015-modules-amd": {
@ -625,21 +625,21 @@
"integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-plugin-transform-es2015-modules-commonjs": "6.24.1", "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0" "babel-template": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-modules-commonjs": { "babel-plugin-transform-es2015-modules-commonjs": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
"integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-plugin-transform-strict-mode": "6.24.1", "babel-plugin-transform-strict-mode": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-modules-strip": { "babel-plugin-transform-es2015-modules-strip": {
@ -655,8 +655,8 @@
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-hoist-variables": "6.24.1", "babel-helper-hoist-variables": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0" "babel-template": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-modules-umd": { "babel-plugin-transform-es2015-modules-umd": {
@ -666,8 +666,8 @@
"dev": true, "dev": true,
"requires": { "requires": {
"babel-plugin-transform-es2015-modules-amd": "6.24.1", "babel-plugin-transform-es2015-modules-amd": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0" "babel-template": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-object-super": { "babel-plugin-transform-es2015-object-super": {
@ -677,7 +677,7 @@
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-replace-supers": "6.24.1", "babel-helper-replace-supers": "6.24.1",
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-parameters": { "babel-plugin-transform-es2015-parameters": {
@ -688,10 +688,10 @@
"requires": { "requires": {
"babel-helper-call-delegate": "6.24.1", "babel-helper-call-delegate": "6.24.1",
"babel-helper-get-function-arity": "6.24.1", "babel-helper-get-function-arity": "6.24.1",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-template": "6.25.0", "babel-template": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-shorthand-properties": { "babel-plugin-transform-es2015-shorthand-properties": {
@ -700,8 +700,8 @@
"integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-spread": { "babel-plugin-transform-es2015-spread": {
@ -710,7 +710,7 @@
"integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-sticky-regex": { "babel-plugin-transform-es2015-sticky-regex": {
@ -719,9 +719,9 @@
"integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-regex": "6.24.1", "babel-helper-regex": "6.26.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-template-literals": { "babel-plugin-transform-es2015-template-literals": {
@ -730,7 +730,7 @@
"integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-typeof-symbol": { "babel-plugin-transform-es2015-typeof-symbol": {
@ -739,7 +739,7 @@
"integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-es2015-unicode-regex": { "babel-plugin-transform-es2015-unicode-regex": {
@ -748,18 +748,18 @@
"integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-helper-regex": "6.24.1", "babel-helper-regex": "6.26.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"regexpu-core": "2.0.0" "regexpu-core": "2.0.0"
} }
}, },
"babel-plugin-transform-regenerator": { "babel-plugin-transform-regenerator": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
"integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
"dev": true, "dev": true,
"requires": { "requires": {
"regenerator-transform": "0.9.11" "regenerator-transform": "0.10.1"
} }
}, },
"babel-plugin-transform-strict-mode": { "babel-plugin-transform-strict-mode": {
@ -768,19 +768,27 @@
"integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0" "babel-types": "6.26.0"
} }
}, },
"babel-polyfill": { "babel-polyfill": {
"version": "6.23.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
"integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"core-js": "2.5.0", "core-js": "2.5.0",
"regenerator-runtime": "0.10.5" "regenerator-runtime": "0.10.5"
},
"dependencies": {
"regenerator-runtime": {
"version": "0.10.5",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
"dev": true
}
} }
}, },
"babel-preset-es2015": { "babel-preset-es2015": {
@ -792,7 +800,7 @@
"babel-plugin-check-es2015-constants": "6.22.0", "babel-plugin-check-es2015-constants": "6.22.0",
"babel-plugin-transform-es2015-arrow-functions": "6.22.0", "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoping": "6.24.1", "babel-plugin-transform-es2015-block-scoping": "6.26.0",
"babel-plugin-transform-es2015-classes": "6.24.1", "babel-plugin-transform-es2015-classes": "6.24.1",
"babel-plugin-transform-es2015-computed-properties": "6.24.1", "babel-plugin-transform-es2015-computed-properties": "6.24.1",
"babel-plugin-transform-es2015-destructuring": "6.23.0", "babel-plugin-transform-es2015-destructuring": "6.23.0",
@ -801,7 +809,7 @@
"babel-plugin-transform-es2015-function-name": "6.24.1", "babel-plugin-transform-es2015-function-name": "6.24.1",
"babel-plugin-transform-es2015-literals": "6.22.0", "babel-plugin-transform-es2015-literals": "6.22.0",
"babel-plugin-transform-es2015-modules-amd": "6.24.1", "babel-plugin-transform-es2015-modules-amd": "6.24.1",
"babel-plugin-transform-es2015-modules-commonjs": "6.24.1", "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
"babel-plugin-transform-es2015-modules-systemjs": "6.24.1", "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
"babel-plugin-transform-es2015-modules-umd": "6.24.1", "babel-plugin-transform-es2015-modules-umd": "6.24.1",
"babel-plugin-transform-es2015-object-super": "6.24.1", "babel-plugin-transform-es2015-object-super": "6.24.1",
@ -812,58 +820,58 @@
"babel-plugin-transform-es2015-template-literals": "6.22.0", "babel-plugin-transform-es2015-template-literals": "6.22.0",
"babel-plugin-transform-es2015-typeof-symbol": "6.23.0", "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
"babel-plugin-transform-es2015-unicode-regex": "6.24.1", "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
"babel-plugin-transform-regenerator": "6.24.1" "babel-plugin-transform-regenerator": "6.26.0"
} }
}, },
"babel-register": { "babel-register": {
"version": "6.24.1", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
"integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-core": "6.25.0", "babel-core": "6.26.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"core-js": "2.5.0", "core-js": "2.5.0",
"home-or-tmp": "2.0.0", "home-or-tmp": "2.0.0",
"lodash": "4.17.4", "lodash": "4.17.4",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"source-map-support": "0.4.15" "source-map-support": "0.4.16"
} }
}, },
"babel-runtime": { "babel-runtime": {
"version": "6.25.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.25.0.tgz", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-M7mOql1IK7AajRqmtDetKwGuxBw=", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true, "dev": true,
"requires": { "requires": {
"core-js": "2.5.0", "core-js": "2.5.0",
"regenerator-runtime": "0.10.5" "regenerator-runtime": "0.11.0"
} }
}, },
"babel-template": { "babel-template": {
"version": "6.25.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
"integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-traverse": "6.25.0", "babel-traverse": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"babylon": "6.17.4", "babylon": "6.18.0",
"lodash": "4.17.4" "lodash": "4.17.4"
} }
}, },
"babel-traverse": { "babel-traverse": {
"version": "6.25.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
"integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-code-frame": "6.22.0", "babel-code-frame": "6.26.0",
"babel-messages": "6.23.0", "babel-messages": "6.23.0",
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"babylon": "6.17.4", "babylon": "6.18.0",
"debug": "2.6.8", "debug": "2.6.8",
"globals": "9.18.0", "globals": "9.18.0",
"invariant": "2.2.2", "invariant": "2.2.2",
@ -871,21 +879,21 @@
} }
}, },
"babel-types": { "babel-types": {
"version": "6.25.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"esutils": "2.0.2", "esutils": "2.0.2",
"lodash": "4.17.4", "lodash": "4.17.4",
"to-fast-properties": "1.0.3" "to-fast-properties": "1.0.3"
} }
}, },
"babylon": { "babylon": {
"version": "6.17.4", "version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true "dev": true
}, },
"balanced-match": { "balanced-match": {
@ -905,9 +913,9 @@
} }
}, },
"binary-extensions": { "binary-extensions": {
"version": "1.9.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
"integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
"dev": true "dev": true
}, },
"block-stream": { "block-stream": {
@ -956,9 +964,9 @@
} }
}, },
"browserslist": { "browserslist": {
"version": "2.3.2", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.3.2.tgz", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.3.3.tgz",
"integrity": "sha512-arvLUwBTsmpfmyMfoBQH8WWICiyaVkMxJsft73/rTRU80rAPSXsi3M0uYBcUH22w7MG475eET31F4M0+31w81g==", "integrity": "sha512-p9hz6FA2H1w1ZUAXKfK3MlIA4Z9fEd56hnZSOecBIITb5j0oZk/tZRwhdE0xG56RGx2x8cc1c5AWJKWVjMLOEQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"caniuse-lite": "1.0.30000715", "caniuse-lite": "1.0.30000715",
@ -1591,7 +1599,7 @@
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "5.2.2", "ajv": "5.2.2",
"babel-code-frame": "6.22.0", "babel-code-frame": "6.26.0",
"chalk": "1.1.3", "chalk": "1.1.3",
"concat-stream": "1.6.0", "concat-stream": "1.6.0",
"cross-spawn": "5.1.0", "cross-spawn": "5.1.0",
@ -1608,7 +1616,7 @@
"globals": "9.18.0", "globals": "9.18.0",
"ignore": "3.3.3", "ignore": "3.3.3",
"imurmurhash": "0.1.4", "imurmurhash": "0.1.4",
"inquirer": "3.2.1", "inquirer": "3.2.2",
"is-resolvable": "1.0.0", "is-resolvable": "1.0.0",
"js-yaml": "3.9.1", "js-yaml": "3.9.1",
"json-stable-stringify": "1.0.1", "json-stable-stringify": "1.0.1",
@ -1825,34 +1833,26 @@
} }
}, },
"extract-zip": { "extract-zip": {
"version": "1.5.0", "version": "1.6.5",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.5.tgz",
"integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", "integrity": "sha1-maBnNbbqIOqbcF13ms/8yHz/BEA=",
"dev": true, "dev": true,
"requires": { "requires": {
"concat-stream": "1.5.0", "concat-stream": "1.6.0",
"debug": "0.7.4", "debug": "2.2.0",
"mkdirp": "0.5.0", "mkdirp": "0.5.0",
"yauzl": "2.4.1" "yauzl": "2.4.1"
}, },
"dependencies": { "dependencies": {
"concat-stream": { "debug": {
"version": "1.5.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
"integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
"dev": true, "dev": true,
"requires": { "requires": {
"inherits": "2.0.3", "ms": "0.7.1"
"readable-stream": "2.0.6",
"typedarray": "0.0.6"
} }
}, },
"debug": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
"integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=",
"dev": true
},
"mkdirp": { "mkdirp": {
"version": "0.5.0", "version": "0.5.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
@ -1862,24 +1862,10 @@
"minimist": "0.0.8" "minimist": "0.0.8"
} }
}, },
"readable-stream": { "ms": {
"version": "2.0.6", "version": "0.7.1",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
"integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"string_decoder": "0.10.31",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true "dev": true
} }
} }
@ -2193,21 +2179,6 @@
"globule": "1.2.0" "globule": "1.2.0"
} }
}, },
"generate-function": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
"integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
"dev": true
},
"generate-object-property": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
"integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
"dev": true,
"requires": {
"is-property": "1.0.2"
}
},
"get-caller-file": { "get-caller-file": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
@ -2848,9 +2819,9 @@
"dev": true "dev": true
}, },
"inquirer": { "inquirer": {
"version": "3.2.1", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz",
"integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==", "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==",
"dev": true, "dev": true,
"requires": { "requires": {
"ansi-escapes": "2.0.0", "ansi-escapes": "2.0.0",
@ -2929,7 +2900,7 @@
"integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
"dev": true, "dev": true,
"requires": { "requires": {
"binary-extensions": "1.9.0" "binary-extensions": "1.10.0"
} }
}, },
"is-buffer": { "is-buffer": {
@ -3016,18 +2987,6 @@
"is-extglob": "1.0.0" "is-extglob": "1.0.0"
} }
}, },
"is-my-json-valid": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz",
"integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=",
"dev": true,
"requires": {
"generate-function": "2.0.0",
"generate-object-property": "1.2.0",
"jsonpointer": "4.0.1",
"xtend": "4.0.1"
}
},
"is-npm": { "is-npm": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
@ -3102,12 +3061,6 @@
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
"dev": true "dev": true
}, },
"is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
"dev": true
},
"is-redirect": { "is-redirect": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
@ -3317,12 +3270,6 @@
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
"dev": true "dev": true
}, },
"jsonpointer": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
"integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
"dev": true
},
"jsprim": { "jsprim": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@ -3965,7 +3912,7 @@
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true, "dev": true,
"requires": { "requires": {
"remove-trailing-separator": "1.0.2" "remove-trailing-separator": "1.1.0"
} }
}, },
"normalize-range": { "normalize-range": {
@ -4416,117 +4363,34 @@
"dev": true "dev": true
}, },
"phantomjs-prebuilt": { "phantomjs-prebuilt": {
"version": "2.1.14", "version": "2.1.15",
"resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.15.tgz",
"integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", "integrity": "sha1-IPhugtM0nFBZF1J3RbekEeCLOQM=",
"dev": true, "dev": true,
"requires": { "requires": {
"es6-promise": "4.0.5", "es6-promise": "4.0.5",
"extract-zip": "1.5.0", "extract-zip": "1.6.5",
"fs-extra": "1.0.0", "fs-extra": "1.0.0",
"hasha": "2.2.0", "hasha": "2.2.0",
"kew": "0.7.0", "kew": "0.7.0",
"progress": "1.1.8", "progress": "1.1.8",
"request": "2.79.0", "request": "2.81.0",
"request-progress": "2.0.1", "request-progress": "2.0.1",
"which": "1.2.14" "which": "1.2.14"
}, },
"dependencies": { "dependencies": {
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
"dev": true
},
"caseless": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
"integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
"dev": true
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
"ansi-styles": "2.2.1",
"escape-string-regexp": "1.0.5",
"has-ansi": "2.0.0",
"strip-ansi": "3.0.1",
"supports-color": "2.0.0"
}
},
"es6-promise": { "es6-promise": {
"version": "4.0.5", "version": "4.0.5",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz",
"integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=",
"dev": true "dev": true
}, },
"har-validator": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
"integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
"dev": true,
"requires": {
"chalk": "1.1.3",
"commander": "2.11.0",
"is-my-json-valid": "2.16.0",
"pinkie-promise": "2.0.1"
}
},
"progress": { "progress": {
"version": "1.1.8", "version": "1.1.8",
"resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
"integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
"dev": true "dev": true
}, },
"qs": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
"integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
"dev": true
},
"request": {
"version": "2.79.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
"integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
"dev": true,
"requires": {
"aws-sign2": "0.6.0",
"aws4": "1.6.0",
"caseless": "0.11.0",
"combined-stream": "1.0.5",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.1.4",
"har-validator": "2.0.6",
"hawk": "3.1.3",
"http-signature": "1.1.1",
"is-typedarray": "1.0.0",
"isstream": "0.1.2",
"json-stringify-safe": "5.0.1",
"mime-types": "2.1.16",
"oauth-sign": "0.8.2",
"qs": "6.3.2",
"stringstream": "0.0.5",
"tough-cookie": "2.3.2",
"tunnel-agent": "0.4.3",
"uuid": "3.1.0"
}
},
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
},
"tunnel-agent": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
"integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
"dev": true
},
"which": { "which": {
"version": "1.2.14", "version": "1.2.14",
"resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
@ -5158,19 +5022,19 @@
"dev": true "dev": true
}, },
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.10.5", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
"integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
"dev": true "dev": true
}, },
"regenerator-transform": { "regenerator-transform": {
"version": "0.9.11", "version": "0.10.1",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
"integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"babel-runtime": "6.25.0", "babel-runtime": "6.26.0",
"babel-types": "6.25.0", "babel-types": "6.26.0",
"private": "0.1.7" "private": "0.1.7"
} }
}, },
@ -5228,9 +5092,9 @@
} }
}, },
"remove-trailing-separator": { "remove-trailing-separator": {
"version": "1.0.2", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
"dev": true "dev": true
}, },
"repeat-element": { "repeat-element": {
@ -5666,9 +5530,9 @@
"dev": true "dev": true
}, },
"source-map-support": { "source-map-support": {
"version": "0.4.15", "version": "0.4.16",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz",
"integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==",
"dev": true, "dev": true,
"requires": { "requires": {
"source-map": "0.5.6" "source-map": "0.5.6"
@ -6323,12 +6187,6 @@
"os-homedir": "1.0.2" "os-homedir": "1.0.2"
} }
}, },
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
},
"y18n": { "y18n": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",

View File

@ -67,8 +67,8 @@
"license": "MIT", "license": "MIT",
"dependencies": {}, "dependencies": {},
"peerDependencies": { "peerDependencies": {
"jquery": ">=3.0.0", "jquery": "3.0.0 - 4.0.0",
"popper.js": "^1.11.0" "popper.js": "^1.12.3"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^7.1.2", "autoprefixer": "^7.1.2",
@ -117,13 +117,16 @@
"shim": { "shim": {
"js/bootstrap": { "js/bootstrap": {
"deps": [ "deps": [
"jquery" "jquery",
"popper.js"
], ],
"exports": "$" "exports": "$"
} }
}, },
"dependencies": { "dependencies": {},
"jquery": "3" "peerDependencies": {
"jquery": "3",
"popper.js": "npm:popper.js@^1.12.3"
} }
} }
} }

View File

@ -9,7 +9,6 @@
font-size: $badge-font-size; font-size: $badge-font-size;
font-weight: $badge-font-weight; font-weight: $badge-font-weight;
line-height: 1; line-height: 1;
color: $badge-color;
text-align: center; text-align: center;
white-space: nowrap; white-space: nowrap;
vertical-align: baseline; vertical-align: baseline;

View File

@ -105,11 +105,11 @@ fieldset[disabled] a.btn {
// //
.btn-lg { .btn-lg {
@include button-size($input-btn-padding-y-lg, $input-btn-padding-x-lg, $font-size-lg, $line-height-lg, $btn-border-radius-lg); @include button-size($input-btn-padding-y-lg, $input-btn-padding-x-lg, $font-size-lg, $input-btn-line-height-lg, $btn-border-radius-lg);
} }
.btn-sm { .btn-sm {
@include button-size($input-btn-padding-y-sm, $input-btn-padding-x-sm, $font-size-sm, $line-height-sm, $btn-border-radius-sm); @include button-size($input-btn-padding-y-sm, $input-btn-padding-x-sm, $font-size-sm, $input-btn-line-height-sm, $btn-border-radius-sm);
} }

View File

@ -56,6 +56,10 @@
@include border-bottom-radius($card-border-radius); @include border-bottom-radius($card-border-radius);
} }
} }
.card-header + .list-group > .list-group-item:first-child {
border-top: 0;
}
} }
@ -172,9 +176,9 @@
.card { .card {
flex: 1 0 0%; flex: 1 0 0%;
margin-bottom: 0;
+ .card { + .card {
margin-bottom: 0;
margin-left: 0; margin-left: 0;
border-left: 0; border-left: 0;
} }

View File

@ -7,8 +7,6 @@
.form-control { .form-control {
display: block; display: block;
width: 100%; width: 100%;
// // Make inputs at least the height of their button counterpart (base line-height + padding + border)
// height: $input-height;
padding: $input-btn-padding-y $input-btn-padding-x; padding: $input-btn-padding-y $input-btn-padding-x;
font-size: $font-size-base; font-size: $font-size-base;
line-height: $input-btn-line-height; line-height: $input-btn-line-height;

View File

@ -72,7 +72,7 @@
@return map-get($theme-colors, $key); @return map-get($theme-colors, $key);
} }
@function grayscale($key: "100") { @function gray($key: "100") {
@return map-get($grays, $key); @return map-get($grays, $key);
} }

View File

@ -43,6 +43,8 @@
position: relative; position: relative;
width: auto; width: auto;
margin: $modal-dialog-margin; margin: $modal-dialog-margin;
// allow clicks to pass through for custom click handling to close modal
pointer-events: none;
} }
// Actual modal // Actual modal
@ -50,6 +52,8 @@
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
// counteract the pointer-events: none; in the .modal-dialog
pointer-events: auto;
background-color: $modal-content-bg; background-color: $modal-content-bg;
background-clip: padding-box; background-clip: padding-box;
border: $modal-content-border-width solid $modal-content-border-color; border: $modal-content-border-width solid $modal-content-border-color;

View File

@ -280,7 +280,7 @@ a,
area, area,
button, button,
[role="button"], [role="button"],
input, input:not([type=range]),
label, label,
select, select,
summary, summary,

View File

@ -99,32 +99,36 @@
@include table-row-variant(active, $table-active-bg); @include table-row-variant(active, $table-active-bg);
// Inverse styles // Dark styles
// //
// Same table markup, but inverted color scheme: dark background and light text. // Same table markup, but inverted color scheme: dark background and light text.
.thead-inverse { .table {
th { .thead-dark {
color: $table-inverse-color; th {
background-color: $table-inverse-bg; color: $table-dark-color;
background-color: $table-dark-bg;
border-color: $table-dark-border-color;
}
}
.thead-light {
th {
color: $table-head-color;
background-color: $table-head-bg;
border-color: $table-border-color;
}
} }
} }
.thead-default { .table-dark {
th { color: $table-dark-color;
color: $table-head-color; background-color: $table-dark-bg;
background-color: $table-head-bg;
}
}
.table-inverse {
color: $table-inverse-color;
background-color: $table-inverse-bg;
th, th,
td, td,
thead th { thead th {
border-color: $table-inverse-border-color; border-color: $table-dark-border-color;
} }
&.table-bordered { &.table-bordered {
@ -133,14 +137,14 @@
&.table-striped { &.table-striped {
tbody tr:nth-of-type(odd) { tbody tr:nth-of-type(odd) {
background-color: $table-inverse-accent-bg; background-color: $table-dark-accent-bg;
} }
} }
&.table-hover { &.table-hover {
tbody tr { tbody tr {
@include hover { @include hover {
background-color: $table-inverse-hover-bg; background-color: $table-dark-hover-bg;
} }
} }
} }
@ -149,20 +153,27 @@
// Responsive tables // Responsive tables
// //
// Add `.table-responsive` to `.table`s and we'll make them mobile friendly by // Generate series of `.table-responsive-*` classes for configuring the screen
// enabling horizontal scrolling. Only applies <768px. Everything above that // size of where your table will overflow.
// will display normally.
.table-responsive { .table-responsive {
@include media-breakpoint-down(md) { @each $breakpoint in map-keys($grid-breakpoints) {
display: block; $next: breakpoint-next($breakpoint, $grid-breakpoints);
width: 100%; $infix: breakpoint-infix($next, $grid-breakpoints);
overflow-x: auto;
-ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057
// Prevent double border on horizontal scroll due to use of `display: block;` &#{$infix} {
&.table-bordered { @include media-breakpoint-down($breakpoint) {
border: 0; display: block;
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057
// Prevent double border on horizontal scroll due to use of `display: block;`
&.table-bordered {
border: 0;
}
}
} }
} }
} }

View File

@ -3,44 +3,6 @@
// Variables should follow the `$component-state-property-size` formula for // Variables should follow the `$component-state-property-size` formula for
// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. // consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
// Table of Contents
//
// Color system
// Options
// Spacing
// Body
// Links
// Paragraphs
// Grid breakpoints
// Grid containers
// Grid columns
// Fonts
// Components
// Tables
// Buttons
// Forms
// Dropdowns
// Z-index master list
// Navs
// Navbar
// Pagination
// Jumbotron
// Form states and alerts
// Cards
// Tooltips
// Popovers
// Badges
// Modals
// Alerts
// Progress bars
// List group
// Image thumbnails
// Figures
// Breadcrumbs
// Carousel
// Close
// Code
// //
// Color system // Color system
@ -321,11 +283,11 @@ $table-border-color: $gray-200 !default;
$table-head-bg: $gray-200 !default; $table-head-bg: $gray-200 !default;
$table-head-color: $gray-700 !default; $table-head-color: $gray-700 !default;
$table-inverse-bg: $gray-900 !default; $table-dark-bg: $gray-900 !default;
$table-inverse-accent-bg: rgba($white, .05) !default; $table-dark-accent-bg: rgba($white, .05) !default;
$table-inverse-hover-bg: rgba($white, .075) !default; $table-dark-hover-bg: rgba($white, .075) !default;
$table-inverse-border-color: lighten($gray-900, 7.5%) !default; $table-dark-border-color: lighten($gray-900, 7.5%) !default;
$table-inverse-color: $body-bg !default; $table-dark-color: $body-bg !default;
// Buttons // Buttons
@ -684,7 +646,6 @@ $popover-arrow-outer-color: fade-in($popover-border-color, .05) !defau
// Badges // Badges
$badge-color: $white !default;
$badge-font-size: 75% !default; $badge-font-size: 75% !default;
$badge-font-weight: $font-weight-bold !default; $badge-font-weight: $font-weight-bold !default;
$badge-padding-y: .25em !default; $badge-padding-y: .25em !default;

View File

@ -98,8 +98,12 @@
@content; @content;
} }
} @else if $max == null { } @else if $max == null {
@include media-breakpoint-up($name) @include media-breakpoint-up($name) {
@content;
}
} @else if $min == null { } @else if $min == null {
@include media-breakpoint-down($name) @include media-breakpoint-down($name) {
@content;
}
} }
} }

View File

@ -51,6 +51,15 @@
order: $i; order: $i;
} }
} }
// `$columns - 1` because offsetting by the width of an entire row isn't possible
@for $i from 0 through ($columns - 1) {
@if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0
.offset#{$infix}-#{$i} {
@include make-col-offset($i, $columns)
}
}
}
} }
} }
} }

View File

@ -45,3 +45,7 @@
// do not appear to require this. // do not appear to require this.
max-width: percentage($size / $columns); max-width: percentage($size / $columns);
} }
@mixin make-col-offset($size, $columns: $grid-columns) {
margin-left: percentage($size / $columns);
}